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

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

Issue 1742303002: Accept absolute Windows paths without leading slash in GN commands (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Format files with 'git cl format' to make presubmit script happy Created 4 years, 8 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
« no previous file with comments | « tools/gn/label_pattern_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "tools/gn/err.h" 10 #include "tools/gn/err.h"
11 #include "tools/gn/label.h" 11 #include "tools/gn/label.h"
12 #include "tools/gn/value.h" 12 #include "tools/gn/value.h"
13 13
14 namespace { 14 namespace {
15 15
16 struct ParseDepStringCase { 16 struct ParseDepStringCase {
17 const char* cur_dir; 17 const char* cur_dir;
18 const char* str; 18 const char* str;
19 bool success; 19 bool success;
20 const char* expected_dir; 20 const char* expected_dir;
21 const char* expected_name; 21 const char* expected_name;
22 const char* expected_toolchain_dir; 22 const char* expected_toolchain_dir;
23 const char* expected_toolchain_name; 23 const char* expected_toolchain_name;
24 }; 24 };
25 25
26 } // namespace 26 } // namespace
27 27
28 TEST(Label, Resolve) { 28 TEST(Label, Resolve) {
29 ParseDepStringCase cases[] = { 29 ParseDepStringCase cases[] = {
30 // cur input succ expected dir n ame tc dir tc name 30 {"//chrome/", "", false, "", "", "", ""},
31 { "//chrome/", "", false, "", " ", "", "" }, 31 {"//chrome/", "/", false, "", "", "", ""},
32 { "//chrome/", "/", false, "", " ", "", "" }, 32 {"//chrome/", ":", false, "", "", "", ""},
33 { "//chrome/", ":", false, "", " ", "", "" }, 33 {"//chrome/", "/:", false, "", "", "", ""},
34 { "//chrome/", "/:", false, "", " ", "", "" }, 34 {"//chrome/", "blah", true, "//chrome/blah/", "blah", "//t/", "d"},
35 { "//chrome/", "blah", true, "//chrome/blah/", " blah", "//t/", "d" }, 35 {"//chrome/", "blah:bar", true, "//chrome/blah/", "bar", "//t/", "d"},
36 { "//chrome/", "blah:bar", true, "//chrome/blah/", " bar", "//t/", "d" }, 36 // Absolute paths.
37 // Absolute paths. 37 {"//chrome/", "/chrome:bar", true, "/chrome/", "bar", "//t/", "d"},
38 { "//chrome/", "/chrome:bar", true , "/chrome/", " bar", "//t/", "d" }, 38 {"//chrome/", "/chrome/:bar", true, "/chrome/", "bar", "//t/", "d"},
39 { "//chrome/", "/chrome/:bar", true, "/chrome/", " bar", "//t/", "d" },
40 #if defined(OS_WIN) 39 #if defined(OS_WIN)
41 { "//chrome/", "/C:/chrome:bar", true , "/C:/chrome/", " bar", "//t/", "d" }, 40 {"//chrome/", "/C:/chrome:bar", true, "/C:/chrome/", "bar", "//t/", "d"},
42 { "//chrome/", "/C:/chrome/:bar", true, "/C:/chrome/", " bar", "//t/", "d" }, 41 {"//chrome/", "/C:/chrome/:bar", true, "/C:/chrome/", "bar", "//t/", "d"},
43 { "//chrome/", "C:/chrome:bar", false, "", " ", "", "" }, 42 {"//chrome/", "C:/chrome:bar", true, "/C:/chrome/", "bar", "//t/", "d"},
44 #endif 43 #endif
45 // Refers to root dir. 44 // Refers to root dir.
46 { "//chrome/", "//:bar", true, "//", " bar", "//t/", "d" }, 45 {"//chrome/", "//:bar", true, "//", "bar", "//t/", "d"},
47 // Implicit directory 46 // Implicit directory
48 { "//chrome/", ":bar", true, "//chrome/", " bar", "//t/", "d" }, 47 {"//chrome/", ":bar", true, "//chrome/", "bar", "//t/", "d"},
49 { "//chrome/renderer/", ":bar", true, "//chrome/renderer/", " bar", "//t/", "d" }, 48 {"//chrome/renderer/", ":bar", true, "//chrome/renderer/", "bar", "//t/",
50 // Implicit names. 49 "d"},
51 { "//chrome/", "//base", true, "//base/", " base", "//t/", "d" }, 50 // Implicit names.
52 { "//chrome/", "//base/i18n", true, "//base/i18n/", " i18n", "//t/", "d" }, 51 {"//chrome/", "//base", true, "//base/", "base", "//t/", "d"},
53 { "//chrome/", "//base/i18n:foo", true, "//base/i18n/", " foo", "//t/", "d" }, 52 {"//chrome/", "//base/i18n", true, "//base/i18n/", "i18n", "//t/", "d"},
54 { "//chrome/", "//", false, "", " ", "", "" }, 53 {"//chrome/", "//base/i18n:foo", true, "//base/i18n/", "foo", "//t/", "d"},
55 // Toolchain parsing. 54 {"//chrome/", "//", false, "", "", "", ""},
56 { "//chrome/", "//chrome:bar(//t:n)", true, "//chrome/", " bar", "//t/", "n" }, 55 // Toolchain parsing.
57 { "//chrome/", "//chrome:bar(//t)", true, "//chrome/", " bar", "//t/", "t" }, 56 {"//chrome/", "//chrome:bar(//t:n)", true, "//chrome/", "bar", "//t/", "n"},
58 { "//chrome/", "//chrome:bar(//t:)", true, "//chrome/", " bar", "//t/", "t" }, 57 {"//chrome/", "//chrome:bar(//t)", true, "//chrome/", "bar", "//t/", "t"},
59 { "//chrome/", "//chrome:bar()", true, "//chrome/", " bar", "//t/", "d" }, 58 {"//chrome/", "//chrome:bar(//t:)", true, "//chrome/", "bar", "//t/", "t"},
60 { "//chrome/", "//chrome:bar(foo)", true, "//chrome/", " bar", "//chrome/foo/", "foo" }, 59 {"//chrome/", "//chrome:bar()", true, "//chrome/", "bar", "//t/", "d"},
61 { "//chrome/", "//chrome:bar(:foo)", true, "//chrome/", " bar", "//chrome/", "foo" }, 60 {"//chrome/", "//chrome:bar(foo)", true, "//chrome/", "bar",
62 // TODO(brettw) it might be nice to make this an error: 61 "//chrome/foo/", "foo"},
63 //{ "//chrome/", "//chrome:bar())", false, "", "", "", "" }, 62 {"//chrome/", "//chrome:bar(:foo)", true, "//chrome/", "bar", "//chrome/",
64 { "//chrome/", "//chrome:bar(//t:bar(tc))", false, "", " ", "", "" }, 63 "foo"},
65 { "//chrome/", "//chrome:bar(()", false, "", " ", "", "" }, 64 // TODO(brettw) it might be nice to make this an error:
66 { "//chrome/", "(t:b)", false, "", " ", "", "" }, 65 //{"//chrome/", "//chrome:bar())", false, "", "", "", "" },
67 { "//chrome/", ":bar(//t/b)", true, "//chrome/", " bar", "//t/b/", "b" }, 66 {"//chrome/", "//chrome:bar(//t:bar(tc))", false, "", "", "", ""},
68 { "//chrome/", ":bar(/t/b)", true, "//chrome/", " bar", "/t/b/", "b" }, 67 {"//chrome/", "//chrome:bar(()", false, "", "", "", ""},
69 { "//chrome/", ":bar(t/b)", true, "//chrome/", " bar", "//chrome/t/b/", "b" }, 68 {"//chrome/", "(t:b)", false, "", "", "", ""},
69 {"//chrome/", ":bar(//t/b)", true, "//chrome/", "bar", "//t/b/", "b"},
70 {"//chrome/", ":bar(/t/b)", true, "//chrome/", "bar", "/t/b/", "b"},
71 {"//chrome/", ":bar(t/b)", true, "//chrome/", "bar", "//chrome/t/b/", "b"},
70 }; 72 };
71 73
72 Label default_toolchain(SourceDir("//t/"), "d"); 74 Label default_toolchain(SourceDir("//t/"), "d");
73 75
74 for (size_t i = 0; i < arraysize(cases); i++) { 76 for (size_t i = 0; i < arraysize(cases); i++) {
75 const ParseDepStringCase& cur = cases[i]; 77 const ParseDepStringCase& cur = cases[i];
76 78
77 std::string location, name; 79 std::string location, name;
78 Err err; 80 Err err;
79 Value v(nullptr, Value::STRING); 81 Value v(nullptr, Value::STRING);
80 v.string_value() = cur.str; 82 v.string_value() = cur.str;
81 Label result = 83 Label result =
82 Label::Resolve(SourceDir(cur.cur_dir), default_toolchain, v, &err); 84 Label::Resolve(SourceDir(cur.cur_dir), default_toolchain, v, &err);
83 EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.str; 85 EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.str;
84 if (!err.has_error() && cur.success) { 86 if (!err.has_error() && cur.success) {
85 EXPECT_EQ(cur.expected_dir, result.dir().value()) 87 EXPECT_EQ(cur.expected_dir, result.dir().value()) << i << " " << cur.str;
86 << i << " " << cur.str; 88 EXPECT_EQ(cur.expected_name, result.name()) << i << " " << cur.str;
87 EXPECT_EQ(cur.expected_name, result.name()) 89 EXPECT_EQ(cur.expected_toolchain_dir, result.toolchain_dir().value())
88 << i << " " << cur.str;
89 EXPECT_EQ(cur.expected_toolchain_dir,
90 result.toolchain_dir().value())
91 << i << " " << cur.str; 90 << i << " " << cur.str;
92 EXPECT_EQ(cur.expected_toolchain_name, result.toolchain_name()) 91 EXPECT_EQ(cur.expected_toolchain_name, result.toolchain_name())
93 << i << " " << cur.str; 92 << i << " " << cur.str;
94 } 93 }
95 } 94 }
96 } 95 }
OLDNEW
« no previous file with comments | « tools/gn/label_pattern_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698