summaryrefslogtreecommitdiffstats
path: root/tools/gn/parser_unittest.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 09:27:04 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 09:27:04 +0000
commit69a4548e0ab3fbb1531b4df89708bfab9cf0df20 (patch)
treeab77a5fe7f52b55970950374ceb22f4be8e4ea53 /tools/gn/parser_unittest.cc
parentd5f9c7ceb6d59748ad07bb96194b44b516c3c1ad (diff)
downloadchromium_src-69a4548e0ab3fbb1531b4df89708bfab9cf0df20.zip
chromium_src-69a4548e0ab3fbb1531b4df89708bfab9cf0df20.tar.gz
chromium_src-69a4548e0ab3fbb1531b4df89708bfab9cf0df20.tar.bz2
Revert 214254 "Add initial prototype for the GN meta-buildsystem."
It broke the check_licenses step on Android (see http://build.chromium.org/p/chromium.linux/builders/Android%20Builder%20%28dbg%29/builds/39904/steps/check_licenses/logs/stdio): @@@BUILD_STEP check_licenses@@@ > /b/build/slave/Android_Builder__dbg_/build/src/android_webview/tools/webview_licenses.py scan Got LicenseError "missing README.chromium or licenses.py SPECIAL_CASES entry" while scanning tools/gn/secondary/base/third_party/dynamic_annotations Got LicenseError "missing README.chromium or licenses.py SPECIAL_CASES entry" while scanning tools/gn/secondary/third_party/modp_b64 < /b/build/slave/Android_Builder__dbg_/build/src/android_webview/tools/webview_licenses.py scan ERROR: process exited with code 2 @@@STEP_FAILURE@@@ > Add initial prototype for the GN meta-buildsystem. > > This is currently not hooked into the build. To build, add a reference to the > gn.gyp file to build/all.gyp > > R=darin@chromium.org, scottmg@chromium.org > > Review URL: https://codereview.chromium.org/21114002 TBR=brettw@chromium.org Review URL: https://codereview.chromium.org/21084010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214325 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/gn/parser_unittest.cc')
-rw-r--r--tools/gn/parser_unittest.cc329
1 files changed, 0 insertions, 329 deletions
diff --git a/tools/gn/parser_unittest.cc b/tools/gn/parser_unittest.cc
deleted file mode 100644
index 3fd8ebe..0000000
--- a/tools/gn/parser_unittest.cc
+++ /dev/null
@@ -1,329 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <iostream>
-#include <sstream>
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "tools/gn/input_file.h"
-#include "tools/gn/parser.h"
-#include "tools/gn/tokenizer.h"
-
-namespace {
-
-bool GetTokens(const InputFile* input, std::vector<Token>* result) {
- result->clear();
- Err err;
- *result = Tokenizer::Tokenize(input, &err);
- return !err.has_error();
-}
-
-bool IsIdentifierEqual(const ParseNode* node, const char* val) {
- if (!node)
- return false;
- const IdentifierNode* ident = node->AsIdentifier();
- if (!ident)
- return false;
- return ident->value().value() == val;
-}
-
-bool IsLiteralEqual(const ParseNode* node, const char* val) {
- if (!node)
- return false;
- const LiteralNode* lit = node->AsLiteral();
- if (!lit)
- return false;
- return lit->value().value() == val;
-}
-
-// Returns true if the given node as a simple assignment to a given value.
-bool IsAssignment(const ParseNode* node, const char* ident, const char* value) {
- if (!node)
- return false;
- const BinaryOpNode* binary = node->AsBinaryOp();
- if (!binary)
- return false;
- return binary->op().IsOperatorEqualTo("=") &&
- IsIdentifierEqual(binary->left(), ident) &&
- IsLiteralEqual(binary->right(), value);
-}
-
-// Returns true if the given node is a block with one assignment statement.
-bool IsBlockWithAssignment(const ParseNode* node,
- const char* ident, const char* value) {
- if (!node)
- return false;
- const BlockNode* block = node->AsBlock();
- if (!block)
- return false;
- if (block->statements().size() != 1)
- return false;
- return IsAssignment(block->statements()[0], ident, value);
-}
-
-void DoParserPrintTest(const char* input, const char* expected) {
- std::vector<Token> tokens;
- InputFile input_file(SourceFile("/test"));
- input_file.SetContents(input);
- ASSERT_TRUE(GetTokens(&input_file, &tokens));
-
- Err err;
- scoped_ptr<ParseNode> result = Parser::Parse(tokens, &err);
- ASSERT_TRUE(result);
-
- std::ostringstream collector;
- result->Print(collector, 0);
-
- EXPECT_EQ(expected, collector.str());
-}
-
-// Expects the tokenizer or parser to identify an error at the given line and
-// character.
-void DoParserErrorTest(const char* input, int err_line, int err_char) {
- InputFile input_file(SourceFile("/test"));
- input_file.SetContents(input);
-
- Err err;
- std::vector<Token> tokens = Tokenizer::Tokenize(&input_file, &err);
- if (!err.has_error()) {
- scoped_ptr<ParseNode> result = Parser::Parse(tokens, &err);
- ASSERT_FALSE(result);
- ASSERT_TRUE(err.has_error());
- }
-
- EXPECT_EQ(err_line, err.location().line_number());
- EXPECT_EQ(err_char, err.location().char_offset());
-}
-
-} // namespace
-
-TEST(Parser, BinaryOp) {
- std::vector<Token> tokens;
-
- // Simple set expression.
- InputFile expr_input(SourceFile("/test"));
- expr_input.SetContents("a=2");
- ASSERT_TRUE(GetTokens(&expr_input, &tokens));
- Err err;
- Parser set(tokens, &err);
- scoped_ptr<ParseNode> expr = set.ParseExpression();
- ASSERT_TRUE(expr);
-
- const BinaryOpNode* binary_op = expr->AsBinaryOp();
- ASSERT_TRUE(binary_op);
-
- EXPECT_TRUE(binary_op->left()->AsIdentifier());
-
- EXPECT_TRUE(binary_op->op().type() == Token::OPERATOR);
- EXPECT_TRUE(binary_op->op().value() == "=");
-
- EXPECT_TRUE(binary_op->right()->AsLiteral());
-}
-
-TEST(Parser, Condition) {
- std::vector<Token> tokens;
-
- InputFile cond_input(SourceFile("/test"));
- cond_input.SetContents("if(1) { a = 2 }");
- ASSERT_TRUE(GetTokens(&cond_input, &tokens));
- Err err;
- Parser simple_if(tokens, &err);
- scoped_ptr<ConditionNode> cond = simple_if.ParseCondition();
- ASSERT_TRUE(cond);
-
- EXPECT_TRUE(IsLiteralEqual(cond->condition(), "1"));
- EXPECT_FALSE(cond->if_false()); // No else block.
- EXPECT_TRUE(IsBlockWithAssignment(cond->if_true(), "a", "2"));
-
- // Now try a complicated if/else if/else one.
- InputFile complex_if_input(SourceFile("/test"));
- complex_if_input.SetContents(
- "if(1) { a = 2 } else if (0) { a = 3 } else { a = 4 }");
- ASSERT_TRUE(GetTokens(&complex_if_input, &tokens));
- Parser complex_if(tokens, &err);
- cond = complex_if.ParseCondition();
- ASSERT_TRUE(cond);
-
- EXPECT_TRUE(IsLiteralEqual(cond->condition(), "1"));
- EXPECT_TRUE(IsBlockWithAssignment(cond->if_true(), "a", "2"));
-
- ASSERT_TRUE(cond->if_false());
- const ConditionNode* nested_cond = cond->if_false()->AsConditionNode();
- ASSERT_TRUE(nested_cond);
- EXPECT_TRUE(IsLiteralEqual(nested_cond->condition(), "0"));
- EXPECT_TRUE(IsBlockWithAssignment(nested_cond->if_true(), "a", "3"));
- EXPECT_TRUE(IsBlockWithAssignment(nested_cond->if_false(), "a", "4"));
-}
-
-TEST(Parser, FunctionCall) {
- const char* input = "foo(a, 1, 2,) bar()";
- const char* expected =
- "BLOCK\n"
- " FUNCTION(foo)\n"
- " LIST\n"
- " IDENTIFIER(a)\n"
- " LITERAL(1)\n"
- " LITERAL(2)\n"
- " FUNCTION(bar)\n"
- " LIST\n";
- DoParserPrintTest(input, expected);
-}
-
-TEST(Parser, ParenExpression) {
- const char* input = "(foo(1)) + (a + b)";
- const char* expected =
- "BLOCK\n"
- " BINARY(+)\n"
- " FUNCTION(foo)\n"
- " LIST\n"
- " LITERAL(1)\n"
- " BINARY(+)\n"
- " IDENTIFIER(a)\n"
- " IDENTIFIER(b)\n";
- DoParserPrintTest(input, expected);
- DoParserErrorTest("(a +", 1, 4);
-}
-
-TEST(Parser, UnaryOp) {
- std::vector<Token> tokens;
-
- InputFile ident_input(SourceFile("/test"));
- ident_input.SetContents("!foo");
- ASSERT_TRUE(GetTokens(&ident_input, &tokens));
- Err err;
- Parser ident(tokens, &err);
- scoped_ptr<UnaryOpNode> op = ident.ParseUnaryOp();
-
- ASSERT_TRUE(op);
- EXPECT_TRUE(op->op().type() == Token::OPERATOR);
- EXPECT_TRUE(op->op().value() == "!");
-}
-
-TEST(Parser, CompleteFunction) {
- const char* input =
- "cc_test(\"foo\") {\n"
- " sources = [\n"
- " \"foo.cc\",\n"
- " \"foo.h\"\n"
- " ]\n"
- " dependencies = [\n"
- " \"base\"\n"
- " ]\n"
- "}\n";
- const char* expected =
- "BLOCK\n"
- " FUNCTION(cc_test)\n"
- " LIST\n"
- " LITERAL(\"foo\")\n"
- " BLOCK\n"
- " BINARY(=)\n"
- " IDENTIFIER(sources)\n"
- " LIST\n"
- " LITERAL(\"foo.cc\")\n"
- " LITERAL(\"foo.h\")\n"
- " BINARY(=)\n"
- " IDENTIFIER(dependencies)\n"
- " LIST\n"
- " LITERAL(\"base\")\n";
- DoParserPrintTest(input, expected);
-}
-
-TEST(Parser, FunctionWithConditional) {
- const char* input =
- "cc_test(\"foo\") {\n"
- " sources = [\"foo.cc\"]\n"
- " if (OS == \"mac\") {\n"
- " sources += \"bar.cc\"\n"
- " } else if (OS == \"win\") {\n"
- " sources -= [\"asd.cc\", \"foo.cc\"]\n"
- " } else {\n"
- " dependencies += [\"bar.cc\"]\n"
- " }\n"
- "}\n";
- const char* expected =
- "BLOCK\n"
- " FUNCTION(cc_test)\n"
- " LIST\n"
- " LITERAL(\"foo\")\n"
- " BLOCK\n"
- " BINARY(=)\n"
- " IDENTIFIER(sources)\n"
- " LIST\n"
- " LITERAL(\"foo.cc\")\n"
- " CONDITION\n"
- " BINARY(==)\n"
- " IDENTIFIER(OS)\n"
- " LITERAL(\"mac\")\n"
- " BLOCK\n"
- " BINARY(+=)\n"
- " IDENTIFIER(sources)\n"
- " LITERAL(\"bar.cc\")\n"
- " CONDITION\n"
- " BINARY(==)\n"
- " IDENTIFIER(OS)\n"
- " LITERAL(\"win\")\n"
- " BLOCK\n"
- " BINARY(-=)\n"
- " IDENTIFIER(sources)\n"
- " LIST\n"
- " LITERAL(\"asd.cc\")\n"
- " LITERAL(\"foo.cc\")\n"
- " BLOCK\n"
- " BINARY(+=)\n"
- " IDENTIFIER(dependencies)\n"
- " LIST\n"
- " LITERAL(\"bar.cc\")\n";
- DoParserPrintTest(input, expected);
-}
-
-TEST(Parser, NestedBlocks) {
- const char* input = "{cc_test(\"foo\") {{foo=1}{}}}";
- const char* expected =
- "BLOCK\n"
- " BLOCK\n"
- " FUNCTION(cc_test)\n"
- " LIST\n"
- " LITERAL(\"foo\")\n"
- " BLOCK\n"
- " BLOCK\n"
- " BINARY(=)\n"
- " IDENTIFIER(foo)\n"
- " LITERAL(1)\n"
- " BLOCK\n";
- DoParserPrintTest(input, expected);
-}
-
-TEST(Parser, List) {
- const char* input = "[] a = [1,asd,] b = [1, 2+3 - foo]";
- const char* expected =
- "BLOCK\n"
- " LIST\n"
- " BINARY(=)\n"
- " IDENTIFIER(a)\n"
- " LIST\n"
- " LITERAL(1)\n"
- " IDENTIFIER(asd)\n"
- " BINARY(=)\n"
- " IDENTIFIER(b)\n"
- " LIST\n"
- " LITERAL(1)\n"
- " BINARY(+)\n"
- " LITERAL(2)\n"
- " BINARY(-)\n"
- " LITERAL(3)\n"
- " IDENTIFIER(foo)\n";
- DoParserPrintTest(input, expected);
-
- DoParserErrorTest("[a, 2+,]", 1, 7);
- DoParserErrorTest("[,]", 1, 2);
- DoParserErrorTest("[a,,]", 1, 4);
-}
-
-TEST(Parser, UnterminatedBlock) {
- DoParserErrorTest("hello {", 1, 7);
-}
-
-TEST(Parser, BadlyTerminatedNumber) {
- DoParserErrorTest("1234z", 1, 5);
-}