Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1101)

Side by Side Diff: tools/gn/substitution_writer_unittest.cc

Issue 429423002: Refactor GN source expansions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/gn/substitution_writer.cc ('k') | tools/gn/target_generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 <sstream>
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "tools/gn/err.h"
9 #include "tools/gn/escape.h"
10 #include "tools/gn/substitution_pattern.h"
11 #include "tools/gn/substitution_writer.h"
12 #include "tools/gn/test_with_scope.h"
13
14 TEST(SubstitutionWriter, ApplyPatternToSource) {
15 TestWithScope setup;
16
17 SubstitutionPattern pattern;
18 Err err;
19 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp",
20 NULL, &err));
21
22 SourceFile result = SubstitutionWriter::ApplyPatternToSource(
23 setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt"));
24 ASSERT_EQ("//out/Debug/gen/foo/bar/myfile.tmp", result.value());
25 }
26
27 TEST(SubstitutionWriter, ApplyPatternToSourceAsOutputFile) {
28 TestWithScope setup;
29
30 SubstitutionPattern pattern;
31 Err err;
32 ASSERT_TRUE(pattern.Parse("{{source_gen_dir}}/{{source_name_part}}.tmp",
33 NULL, &err));
34
35 OutputFile result = SubstitutionWriter::ApplyPatternToSourceAsOutputFile(
36 setup.settings(), pattern, SourceFile("//foo/bar/myfile.txt"));
37 ASSERT_EQ("gen/foo/bar/myfile.tmp", result.value());
38 }
39
40 TEST(SubstutitionWriter, WriteNinjaVariablesForSource) {
41 TestWithScope setup;
42
43 std::vector<SubstitutionType> types;
44 types.push_back(SUBSTITUTION_SOURCE);
45 types.push_back(SUBSTITUTION_SOURCE_NAME_PART);
46 types.push_back(SUBSTITUTION_SOURCE_DIR);
47
48 EscapeOptions options;
49 options.mode = ESCAPE_NONE;
50
51 std::ostringstream out;
52 SubstitutionWriter::WriteNinjaVariablesForSource(
53 setup.settings(), SourceFile("//foo/bar/baz.txt"), types, options, out);
54
55 // The "source" should be skipped since that will expand to $in which is
56 // implicit.
57 EXPECT_EQ(
58 " source_name_part = baz\n"
59 " source_dir = ../../foo/bar\n",
60 out.str());
61 }
62
63 TEST(SubstitutionWriter, WriteWithNinjaVariables) {
64 Err err;
65 SubstitutionPattern pattern;
66 ASSERT_TRUE(pattern.Parse(
67 "-i {{source}} --out=bar\"{{source_name_part}}\".o",
68 NULL, &err));
69 EXPECT_FALSE(err.has_error());
70
71 EscapeOptions options;
72 options.mode = ESCAPE_NONE;
73
74 std::ostringstream out;
75 SubstitutionWriter::WriteWithNinjaVariables(pattern, options, out);
76
77 EXPECT_EQ(
78 "-i ${in} --out=bar\"${source_name_part}\".o",
79 out.str());
80 }
81
82 // Tests in isolation different types of substitutions and that the right
83 // things are generated.
84 TEST(SubstutitionWriter, Substitutions) {
85 TestWithScope setup;
86
87 // Call to get substitutions relative to the build dir.
88 #define GetRelSubst(str, what) \
89 SubstitutionWriter::GetSourceSubstitution( \
90 setup.settings(), \
91 SourceFile(str), \
92 what, \
93 SubstitutionWriter::OUTPUT_RELATIVE, \
94 setup.settings()->build_settings()->build_dir())
95
96 // Call to get absolute directory substitutions.
97 #define GetAbsSubst(str, what) \
98 SubstitutionWriter::GetSourceSubstitution( \
99 setup.settings(), \
100 SourceFile(str), \
101 what, \
102 SubstitutionWriter::OUTPUT_ABSOLUTE, \
103 SourceDir())
104
105 // Try all possible templates with a normal looking string.
106 EXPECT_EQ("../../foo/bar/baz.txt",
107 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE));
108 EXPECT_EQ("//foo/bar/baz.txt",
109 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE));
110
111 EXPECT_EQ("baz",
112 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_NAME_PART));
113 EXPECT_EQ("baz",
114 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_NAME_PART));
115
116 EXPECT_EQ("baz.txt",
117 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_FILE_PART));
118 EXPECT_EQ("baz.txt",
119 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_FILE_PART));
120
121 EXPECT_EQ("../../foo/bar",
122 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_DIR));
123 EXPECT_EQ("//foo/bar",
124 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_DIR));
125
126 EXPECT_EQ("foo/bar", GetRelSubst("//foo/bar/baz.txt",
127 SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR));
128 EXPECT_EQ("foo/bar", GetAbsSubst("//foo/bar/baz.txt",
129 SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR));
130
131 EXPECT_EQ("gen/foo/bar",
132 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_GEN_DIR));
133 EXPECT_EQ("//out/Debug/gen/foo/bar",
134 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_GEN_DIR));
135
136 EXPECT_EQ("obj/foo/bar",
137 GetRelSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_OUT_DIR));
138 EXPECT_EQ("//out/Debug/obj/foo/bar",
139 GetAbsSubst("//foo/bar/baz.txt", SUBSTITUTION_SOURCE_OUT_DIR));
140
141 // Operations on an absolute path.
142 EXPECT_EQ("/baz.txt", GetRelSubst("/baz.txt", SUBSTITUTION_SOURCE));
143 EXPECT_EQ("/.", GetRelSubst("/baz.txt", SUBSTITUTION_SOURCE_DIR));
144 EXPECT_EQ("gen", GetRelSubst("/baz.txt", SUBSTITUTION_SOURCE_GEN_DIR));
145 EXPECT_EQ("obj", GetRelSubst("/baz.txt", SUBSTITUTION_SOURCE_OUT_DIR));
146
147 EXPECT_EQ(".",
148 GetRelSubst("//baz.txt", SUBSTITUTION_SOURCE_ROOT_RELATIVE_DIR));
149
150 #undef GetAbsSubst
151 #undef GetRelSubst
152 }
OLDNEW
« no previous file with comments | « tools/gn/substitution_writer.cc ('k') | tools/gn/target_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698