• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/functions.h"
6 #include "gn/test_with_scope.h"
7 #include "util/build_config.h"
8 #include "util/test/test.h"
9 
10 namespace {
11 
12 class GetPathInfoTest : public testing::Test {
13  public:
GetPathInfoTest()14   GetPathInfoTest() : testing::Test() {
15     setup_.scope()->set_source_dir(SourceDir("//src/foo/"));
16   }
17 
18   // Convenience wrapper to call GetLabelInfo.
Call(const std::string & input,const std::string & what)19   std::string Call(const std::string& input, const std::string& what) {
20     FunctionCallNode function;
21 
22     std::vector<Value> args;
23     args.push_back(Value(nullptr, input));
24     args.push_back(Value(nullptr, what));
25 
26     Err err;
27     Value result =
28         functions::RunGetPathInfo(setup_.scope(), &function, args, &err);
29     if (err.has_error()) {
30       EXPECT_TRUE(result.type() == Value::NONE);
31       return std::string();
32     }
33     return result.string_value();
34   }
35 
36  protected:
37   TestWithScope setup_;
38 };
39 
40 }  // namespace
41 
TEST_F(GetPathInfoTest,File)42 TEST_F(GetPathInfoTest, File) {
43   EXPECT_EQ("bar.txt", Call("foo/bar.txt", "file"));
44   EXPECT_EQ("bar.txt", Call("bar.txt", "file"));
45   EXPECT_EQ("bar.txt", Call("/bar.txt", "file"));
46   EXPECT_EQ("", Call("foo/", "file"));
47   EXPECT_EQ("", Call("//", "file"));
48   EXPECT_EQ("", Call("/", "file"));
49 }
50 
TEST_F(GetPathInfoTest,Name)51 TEST_F(GetPathInfoTest, Name) {
52   EXPECT_EQ("bar", Call("foo/bar.txt", "name"));
53   EXPECT_EQ("bar", Call("bar.", "name"));
54   EXPECT_EQ("", Call("/.txt", "name"));
55   EXPECT_EQ("", Call("foo/", "name"));
56   EXPECT_EQ("", Call("//", "name"));
57   EXPECT_EQ("", Call("/", "name"));
58 }
59 
TEST_F(GetPathInfoTest,Extension)60 TEST_F(GetPathInfoTest, Extension) {
61   EXPECT_EQ("txt", Call("foo/bar.txt", "extension"));
62   EXPECT_EQ("", Call("bar.", "extension"));
63   EXPECT_EQ("txt", Call("/.txt", "extension"));
64   EXPECT_EQ("", Call("f.oo/", "extension"));
65   EXPECT_EQ("", Call("//", "extension"));
66   EXPECT_EQ("", Call("/", "extension"));
67 }
68 
TEST_F(GetPathInfoTest,Dir)69 TEST_F(GetPathInfoTest, Dir) {
70   EXPECT_EQ("foo", Call("foo/bar.txt", "dir"));
71   EXPECT_EQ(".", Call("bar.txt", "dir"));
72   EXPECT_EQ("foo/bar", Call("foo/bar/baz", "dir"));
73   EXPECT_EQ("//foo", Call("//foo/", "dir"));
74   EXPECT_EQ("//.", Call("//", "dir"));
75   EXPECT_EQ("/foo", Call("/foo/", "dir"));
76   EXPECT_EQ("/.", Call("/", "dir"));
77 }
78 
79 // Note "current dir" is "//src/foo"
TEST_F(GetPathInfoTest,AbsPath)80 TEST_F(GetPathInfoTest, AbsPath) {
81   EXPECT_EQ("//src/foo/foo/bar.txt", Call("foo/bar.txt", "abspath"));
82   EXPECT_EQ("//src/foo/bar.txt", Call("bar.txt", "abspath"));
83   EXPECT_EQ("//src/foo/bar/", Call("bar/", "abspath"));
84   EXPECT_EQ("//foo", Call("//foo", "abspath"));
85   EXPECT_EQ("//foo/", Call("//foo/", "abspath"));
86   EXPECT_EQ("//", Call("//", "abspath"));
87   EXPECT_EQ("/foo", Call("/foo", "abspath"));
88   EXPECT_EQ("/foo/", Call("/foo/", "abspath"));
89   EXPECT_EQ("/", Call("/", "abspath"));
90 }
91 
92 // Note build dir is "//out/Debug/".
TEST_F(GetPathInfoTest,OutDir)93 TEST_F(GetPathInfoTest, OutDir) {
94   EXPECT_EQ("//out/Debug/obj/src/foo/foo", Call("foo/bar.txt", "out_dir"));
95   EXPECT_EQ("//out/Debug/obj/src/foo/bar", Call("bar/", "out_dir"));
96   EXPECT_EQ("//out/Debug/obj/src/foo", Call(".", "out_dir"));
97   EXPECT_EQ("//out/Debug/obj/src/foo", Call("bar", "out_dir"));
98   EXPECT_EQ("//out/Debug/obj/foo", Call("//foo/bar.txt", "out_dir"));
99   // System paths go into the ABS_PATH obj directory.
100   EXPECT_EQ("//out/Debug/obj/ABS_PATH/foo", Call("/foo/bar.txt", "out_dir"));
101 #if defined(OS_WIN)
102   EXPECT_EQ("//out/Debug/obj/ABS_PATH/C/foo",
103             Call("/C:/foo/bar.txt", "out_dir"));
104 #endif
105 }
106 
107 // Note build dir is "//out/Debug/".
TEST_F(GetPathInfoTest,GenDir)108 TEST_F(GetPathInfoTest, GenDir) {
109   EXPECT_EQ("//out/Debug/gen/src/foo/foo", Call("foo/bar.txt", "gen_dir"));
110   EXPECT_EQ("//out/Debug/gen/src/foo/bar", Call("bar/", "gen_dir"));
111   EXPECT_EQ("//out/Debug/gen/src/foo", Call(".", "gen_dir"));
112   EXPECT_EQ("//out/Debug/gen/src/foo", Call("bar", "gen_dir"));
113   EXPECT_EQ("//out/Debug/gen/foo", Call("//foo/bar.txt", "gen_dir"));
114   // System paths go into the ABS_PATH gen directory
115   EXPECT_EQ("//out/Debug/gen/ABS_PATH/foo", Call("/foo/bar.txt", "gen_dir"));
116 #if defined(OS_WIN)
117   EXPECT_EQ("//out/Debug/gen/ABS_PATH/C/foo",
118             Call("/C:/foo/bar.txt", "gen_dir"));
119 #endif
120 }
121