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 "crazy_linker_search_path_list.h"
6
7 #include <minitest/minitest.h>
8 #include "crazy_linker_system_mock.h"
9
10 namespace crazy {
11
12 class TestSystem {
13 public:
TestSystem()14 TestSystem() : sys_() {
15 sys_.AddRegularFile("/tmp/foo/bar", "BARBARBAR", 9);
16 sys_.AddRegularFile("/tmp/zoo", "ZOO", 3);
17 sys_.AddRegularFile("/foo", "Foo", 3);
18 sys_.AddEnvVariable("TEST_LIBRARY_PATH", "/tmp:/");
19 }
20
~TestSystem()21 ~TestSystem() {}
22
AddFile(const char * path,const char * data,size_t len)23 void AddFile(const char* path, const char* data, size_t len) {
24 sys_.AddRegularFile(path, data, len);
25 }
26
27 private:
28 SystemMock sys_;
29 };
30
TEST(SearchPathList,Empty)31 TEST(SearchPathList, Empty) {
32 TestSystem sys;
33 SearchPathList list;
34 EXPECT_FALSE(list.FindFile("/foo"));
35 EXPECT_FALSE(list.FindFile("/tmp/zoo"));
36 EXPECT_FALSE(list.FindFile("/tmp/foo/bar"));
37 }
38
TEST(SearchPathList,OneItem)39 TEST(SearchPathList, OneItem) {
40 TestSystem sys;
41 SearchPathList list;
42 list.AddPaths("/tmp/foo");
43 EXPECT_STREQ("/tmp/foo/bar", list.FindFile("bar"));
44 EXPECT_FALSE(list.FindFile("zoo"));
45 EXPECT_FALSE(list.FindFile("foo"));
46 }
47
TEST(SearchPathList,Reset)48 TEST(SearchPathList, Reset) {
49 TestSystem sys;
50 SearchPathList list;
51 list.AddPaths("/tmp/foo");
52 EXPECT_STREQ("/tmp/foo/bar", list.FindFile("bar"));
53
54 list.Reset();
55 EXPECT_FALSE(list.FindFile("bar"));
56 }
57
TEST(SearchPathList,ResetFromEnv)58 TEST(SearchPathList, ResetFromEnv) {
59 TestSystem sys;
60 SearchPathList list;
61 list.ResetFromEnv("TEST_LIBRARY_PATH");
62 EXPECT_STREQ("/tmp/foo/bar", list.FindFile("foo/bar"));
63 EXPECT_STREQ("/foo", list.FindFile("foo"));
64 }
65
TEST(SearchPathList,ThreeItems)66 TEST(SearchPathList, ThreeItems) {
67 TestSystem sys;
68 SearchPathList list;
69 list.AddPaths("/tmp/foo");
70 list.AddPaths("/tmp/");
71
72 EXPECT_STREQ("/tmp/foo/bar", list.FindFile("bar"));
73 EXPECT_STREQ("/tmp/zoo", list.FindFile("zoo"));
74 EXPECT_FALSE(list.FindFile("foo"));
75 }
76
TEST(SearchPathList,EnvPathsAfterAddedOnes)77 TEST(SearchPathList, EnvPathsAfterAddedOnes) {
78 TestSystem sys;
79 sys.AddFile("/opt/foo", "FOO", 3);
80 SearchPathList list;
81 list.ResetFromEnv("TEST_LIBRARY_PATH");
82 list.AddPaths("/opt");
83
84 // This checks that paths added with AddPaths() have priority over
85 // paths added with ResetFromEnv(). An invalid implementation would
86 // find '/tmp/foo' instead.
87 EXPECT_STREQ("/opt/foo", list.FindFile("foo"));
88 }
89
90 } // namespace crazy