Home | History | Annotate | Download | only in src
      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