Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / gn / template_unittest.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/strings/string_number_conversions.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7 #include "tools/gn/test_with_scope.h"
8
9 TEST(Template, Basic) {
10   TestWithScope setup;
11   TestParseInput input(
12       "template(\"foo\") {\n"
13       "  print(target_name)\n"
14       "  print(invoker.bar)\n"
15       "}\n"
16       "foo(\"lala\") {\n"
17       "  bar = 42\n"
18       "}");
19   ASSERT_FALSE(input.has_error());
20
21   Err err;
22   input.parsed()->Execute(setup.scope(), &err);
23   ASSERT_FALSE(err.has_error()) << err.message();
24
25   EXPECT_EQ("lala\n42\n", setup.print_output());
26 }
27
28 TEST(Template, UnusedTargetNameShouldThrowError) {
29   TestWithScope setup;
30   TestParseInput input(
31       "template(\"foo\") {\n"
32       "  print(invoker.bar)\n"
33       "}\n"
34       "foo(\"lala\") {\n"
35       "  bar = 42\n"
36       "}");
37   ASSERT_FALSE(input.has_error());
38
39   Err err;
40   input.parsed()->Execute(setup.scope(), &err);
41   EXPECT_TRUE(err.has_error());
42 }
43
44 TEST(Template, UnusedInvokerShouldThrowError) {
45   TestWithScope setup;
46   TestParseInput input(
47       "template(\"foo\") {\n"
48       "  print(target_name)\n"
49       "}\n"
50       "foo(\"lala\") {\n"
51       "  bar = 42\n"
52       "}");
53   ASSERT_FALSE(input.has_error());
54
55   Err err;
56   input.parsed()->Execute(setup.scope(), &err);
57   EXPECT_TRUE(err.has_error());
58 }
59
60 TEST(Template, UnusedVarInInvokerShouldThrowError) {
61   TestWithScope setup;
62   TestParseInput input(
63       "template(\"foo\") {\n"
64       "  print(target_name)\n"
65       "  print(invoker.bar)\n"
66       "}\n"
67       "foo(\"lala\") {\n"
68       "  bar = 42\n"
69       "  baz = [ \"foo\" ]\n"
70       "}");
71   ASSERT_FALSE(input.has_error());
72
73   Err err;
74   input.parsed()->Execute(setup.scope(), &err);
75   EXPECT_TRUE(err.has_error());
76 }
77
78 // Previous versions of the template implementation would copy templates by
79 // value when it makes a closure. Doing a sequence of them means that every new
80 // one copies all previous ones, which gives a significant blow-up in memory.
81 // If this test doesn't crash with out-of-memory, it passed.
82 TEST(Template, MemoryBlowUp) {
83   TestWithScope setup;
84   std::string code;
85   for (int i = 0; i < 100; i++)
86     code += "template(\"test" + base::IntToString(i) + "\") {}\n";
87
88   TestParseInput input(code);
89
90   Err err;
91   input.parsed()->Execute(setup.scope(), &err);
92   ASSERT_FALSE(input.has_error());
93 }