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 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: 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 21 ~TestSystem() {} 22 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 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 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 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 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 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 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