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