OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 #include "tools/gn/err.h" | 6 #include "tools/gn/err.h" |
7 #include "tools/gn/label.h" | 7 #include "tools/gn/label.h" |
8 #include "tools/gn/value.h" | 8 #include "tools/gn/value.h" |
9 #include "tools/gn/visibility.h" | 9 #include "tools/gn/visibility.h" |
10 | 10 |
11 namespace { | |
12 | |
13 struct VisPatternCase { | |
14 const char* input; | |
15 bool success; | |
16 | |
17 Visibility::VisPattern::Type type; | |
18 const char* dir; | |
19 const char* name; | |
20 }; | |
21 | |
22 } // namespace | |
23 | |
24 TEST(Visibility, PatternParse) { | |
25 SourceDir current_dir("//foo/"); | |
26 VisPatternCase cases[] = { | |
27 // Missing stuff. | |
28 { "", false, Visibility::VisPattern::MATCH, "", "" }, | |
29 { ":", false, Visibility::VisPattern::MATCH, "", "" }, | |
30 // Normal things. | |
31 { ":bar", true, Visibility::VisPattern::MATCH, "//foo/", "bar" }, | |
32 { "//la:bar", true, Visibility::VisPattern::MATCH, "//la/", "bar" }, | |
33 { "*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, "", "" }, | |
34 { ":*", true, Visibility::VisPattern::DIRECTORY, "//foo/", "" }, | |
35 { "la:*", true, Visibility::VisPattern::DIRECTORY, "//foo/la/", "" }, | |
36 { "la/*:*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, | |
37 "//foo/la/", "" }, | |
38 { "//la:*", true, Visibility::VisPattern::DIRECTORY, "//la/", "" }, | |
39 { "./*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, "//foo/", "" }, | |
40 { "foo/*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, | |
41 "//foo/foo/", "" }, | |
42 { "//l/*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, "//l/", "" }, | |
43 // No toolchains allowed. | |
44 { "//foo(//bar)", false, Visibility::VisPattern::MATCH, "", "" }, | |
45 // Wildcards in invalid places. | |
46 { "*foo*:bar", false, Visibility::VisPattern::MATCH, "", "" }, | |
47 { "foo*:*bar", false, Visibility::VisPattern::MATCH, "", "" }, | |
48 { "*foo:bar", false, Visibility::VisPattern::MATCH, "", "" }, | |
49 { "foo:bar*", false, Visibility::VisPattern::MATCH, "", "" }, | |
50 { "*:*", true, Visibility::VisPattern::RECURSIVE_DIRECTORY, "", "" }, | |
51 }; | |
52 | |
53 for (size_t i = 0; i < arraysize(cases); i++) { | |
54 const VisPatternCase& cur = cases[i]; | |
55 Err err; | |
56 Visibility::VisPattern result = | |
57 Visibility::GetPattern(current_dir, Value(NULL, cur.input), &err); | |
58 | |
59 EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.input; | |
60 EXPECT_EQ(cur.type, result.type()) << i << " " << cur.input; | |
61 EXPECT_EQ(cur.dir, result.dir().value()) << i << " " << cur.input; | |
62 EXPECT_EQ(cur.name, result.name()) << i << " " << cur.input; | |
63 } | |
64 } | |
65 | |
66 TEST(Visibility, CanSeeMe) { | 11 TEST(Visibility, CanSeeMe) { |
67 Value list(NULL, Value::LIST); | 12 Value list(NULL, Value::LIST); |
68 list.list_value().push_back(Value(NULL, "//rec/*")); // Recursive. | 13 list.list_value().push_back(Value(NULL, "//rec/*")); // Recursive. |
69 list.list_value().push_back(Value(NULL, "//dir:*")); // One dir. | 14 list.list_value().push_back(Value(NULL, "//dir:*")); // One dir. |
70 list.list_value().push_back(Value(NULL, "//my:name")); // Exact match. | 15 list.list_value().push_back(Value(NULL, "//my:name")); // Exact match. |
71 | 16 |
72 Err err; | 17 Err err; |
73 Visibility vis; | 18 Visibility vis; |
74 ASSERT_TRUE(vis.Set(SourceDir("//"), list, &err)); | 19 ASSERT_TRUE(vis.Set(SourceDir("//"), list, &err)); |
75 | 20 |
(...skipping 19 matching lines...) Expand all Loading... |
95 } | 40 } |
96 | 41 |
97 TEST(Visibility, Private) { | 42 TEST(Visibility, Private) { |
98 Err err; | 43 Err err; |
99 Visibility vis; | 44 Visibility vis; |
100 ASSERT_TRUE(vis.Set(SourceDir("//"), Value(NULL, Value::LIST), &err)); | 45 ASSERT_TRUE(vis.Set(SourceDir("//"), Value(NULL, Value::LIST), &err)); |
101 | 46 |
102 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing"))); | 47 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing"))); |
103 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//"), ""))); | 48 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//"), ""))); |
104 } | 49 } |
OLD | NEW |