1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file.
4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/source_dir.h"
7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/source_file.h"
8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
9d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(SourceDir, ResolveRelativeFile) {
10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  SourceDir base("//base/");
11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Empty input is an error.
13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("") == SourceFile());
14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // These things are directories, so should be an error.
16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("//foo/bar/") == SourceFile());
17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("bar/") == SourceFile());
18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Absolute paths should be passed unchanged.
20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("//foo") == SourceFile("//foo"));
21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("/foo") == SourceFile("/foo"));
22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Basic relative stuff.
24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("foo") == SourceFile("//base/foo"));
25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("./foo") == SourceFile("//base/foo"));
26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("../foo") == SourceFile("//foo"));
27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeFile("../../foo") == SourceFile("//foo"));
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Note that we don't canonicalize the backslashes to forward slashes.
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // This could potentially be changed in the future which would mean we should
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // just change the expected result.
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_TRUE(base.ResolveRelativeFile("C:\\foo\\bar.txt") ==
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              SourceFile("/C:/foo/bar.txt"));
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
38d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(SourceDir, ResolveRelativeDir) {
39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  SourceDir base("//base/");
40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Empty input is an error.
42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("") == SourceDir());
43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Absolute paths should be passed unchanged.
45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("//foo") == SourceDir("//foo/"));
46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("/foo") == SourceDir("/foo/"));
47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Basic relative stuff.
49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("foo") == SourceDir("//base/foo/"));
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("./foo") == SourceDir("//base/foo/"));
51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("../foo") == SourceDir("//foo/"));
52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_TRUE(base.ResolveRelativeDir("../../foo/") == SourceDir("//foo/"));
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Note that we don't canonicalize the existing backslashes to forward
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // slashes. This could potentially be changed in the future which would mean
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // we should just change the expected result.
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(base.ResolveRelativeDir("C:\\foo") == SourceDir("/C:/foo/"));
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
61