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 "gn/visibility.h"
6 #include "gn/err.h"
7 #include "gn/label.h"
8 #include "gn/scope.h"
9 #include "gn/value.h"
10 #include "util/test/test.h"
11
TEST(Visibility, CanSeeMe)12 TEST(Visibility, CanSeeMe) {
13 Value list(nullptr, Value::LIST);
14 list.list_value().push_back(Value(nullptr, "//rec/*")); // Recursive.
15 list.list_value().push_back(Value(nullptr, "//dir:*")); // One dir.
16 list.list_value().push_back(Value(nullptr, "//my:name")); // Exact match.
17
18 Err err;
19 Visibility vis;
20 ASSERT_TRUE(vis.Set(SourceDir("//"), std::string_view(), list, &err));
21
22 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing")));
23 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//my/"), "notname")));
24
25 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//my/"), "name")));
26 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//rec/"), "anything")));
27 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//rec/a/"), "anything")));
28 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//rec/b/"), "anything")));
29 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//dir/"), "anything")));
30 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//dir/a/"), "anything")));
31 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//directory/"), "anything")));
32 }
33
TEST(Visibility, Public)34 TEST(Visibility, Public) {
35 Err err;
36 Visibility vis;
37
38 Value list(nullptr, Value::LIST);
39 list.list_value().push_back(Value(nullptr, "*"));
40 ASSERT_TRUE(vis.Set(SourceDir("//"), std::string_view(), list, &err));
41
42 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing")));
43 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("//"), "")));
44 }
45
TEST(Visibility, Private)46 TEST(Visibility, Private) {
47 Err err;
48 Visibility vis;
49 ASSERT_TRUE(vis.Set(SourceDir("//"), std::string_view(),
50 Value(nullptr, Value::LIST), &err));
51
52 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing")));
53 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//"), "")));
54 }
55
TEST(Visibility, AboveSourceDir)56 TEST(Visibility, AboveSourceDir) {
57 std::string source_root = "/foo/bar/baz/";
58 SourceDir cur_dir("//");
59
60 Err err;
61 Visibility vis;
62
63 Value list(nullptr, Value::LIST);
64 list.list_value().push_back(Value(nullptr, "../../*"));
65 ASSERT_TRUE(vis.Set(cur_dir, source_root, list, &err));
66
67 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("//random/"), "thing")));
68 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("/foo/"), "foo")));
69 EXPECT_TRUE(vis.CanSeeMe(Label(SourceDir("/foo/bar/"), "bar")));
70 EXPECT_FALSE(vis.CanSeeMe(Label(SourceDir("/nowhere/"), "foo")));
71 }
72