Home | History | Annotate | Download | only in gn
      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 "base/strings/string_util.h"
      6 #include "base/strings/utf_string_conversions.h"
      7 #include "build/build_config.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 #include "tools/gn/filesystem_utils.h"
     10 
     11 TEST(FilesystemUtils, FileExtensionOffset) {
     12   EXPECT_EQ(std::string::npos, FindExtensionOffset(""));
     13   EXPECT_EQ(std::string::npos, FindExtensionOffset("foo/bar/baz"));
     14   EXPECT_EQ(4u, FindExtensionOffset("foo."));
     15   EXPECT_EQ(4u, FindExtensionOffset("f.o.bar"));
     16   EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/"));
     17   EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/baz"));
     18 }
     19 
     20 TEST(FilesystemUtils, FindExtension) {
     21   std::string input;
     22   EXPECT_EQ("", FindExtension(&input).as_string());
     23   input = "foo/bar/baz";
     24   EXPECT_EQ("", FindExtension(&input).as_string());
     25   input = "foo.";
     26   EXPECT_EQ("", FindExtension(&input).as_string());
     27   input = "f.o.bar";
     28   EXPECT_EQ("bar", FindExtension(&input).as_string());
     29   input = "foo.bar/";
     30   EXPECT_EQ("", FindExtension(&input).as_string());
     31   input = "foo.bar/baz";
     32   EXPECT_EQ("", FindExtension(&input).as_string());
     33 }
     34 
     35 TEST(FilesystemUtils, FindFilenameOffset) {
     36   EXPECT_EQ(0u, FindFilenameOffset(""));
     37   EXPECT_EQ(0u, FindFilenameOffset("foo"));
     38   EXPECT_EQ(4u, FindFilenameOffset("foo/"));
     39   EXPECT_EQ(4u, FindFilenameOffset("foo/bar"));
     40 }
     41 
     42 TEST(FilesystemUtils, RemoveFilename) {
     43   std::string s;
     44 
     45   RemoveFilename(&s);
     46   EXPECT_STREQ("", s.c_str());
     47 
     48   s = "foo";
     49   RemoveFilename(&s);
     50   EXPECT_STREQ("", s.c_str());
     51 
     52   s = "/";
     53   RemoveFilename(&s);
     54   EXPECT_STREQ("/", s.c_str());
     55 
     56   s = "foo/bar";
     57   RemoveFilename(&s);
     58   EXPECT_STREQ("foo/", s.c_str());
     59 
     60   s = "foo/bar/baz.cc";
     61   RemoveFilename(&s);
     62   EXPECT_STREQ("foo/bar/", s.c_str());
     63 }
     64 
     65 TEST(FilesystemUtils, FindDir) {
     66   std::string input;
     67   EXPECT_EQ("", FindDir(&input));
     68   input = "/";
     69   EXPECT_EQ("/", FindDir(&input));
     70   input = "foo/";
     71   EXPECT_EQ("foo/", FindDir(&input));
     72   input = "foo/bar/baz";
     73   EXPECT_EQ("foo/bar/", FindDir(&input));
     74 }
     75 
     76 TEST(FilesystemUtils, InvertDir) {
     77   EXPECT_TRUE(InvertDir(SourceDir()) == "");
     78   EXPECT_TRUE(InvertDir(SourceDir("/")) == "");
     79   EXPECT_TRUE(InvertDir(SourceDir("//")) == "");
     80 
     81   EXPECT_TRUE(InvertDir(SourceDir("//foo/bar")) == "../../");
     82   EXPECT_TRUE(InvertDir(SourceDir("/foo/bar/")) == "../../");
     83 }
     84 
     85 TEST(FilesystemUtils, NormalizePath) {
     86   std::string input;
     87 
     88   NormalizePath(&input);
     89   EXPECT_EQ("", input);
     90 
     91   input = "foo/bar.txt";
     92   NormalizePath(&input);
     93   EXPECT_EQ("foo/bar.txt", input);
     94 
     95   input = ".";
     96   NormalizePath(&input);
     97   EXPECT_EQ("", input);
     98 
     99   input = "..";
    100   NormalizePath(&input);
    101   EXPECT_EQ("..", input);
    102 
    103   input = "foo//bar";
    104   NormalizePath(&input);
    105   EXPECT_EQ("foo/bar", input);
    106 
    107   input = "//foo";
    108   NormalizePath(&input);
    109   EXPECT_EQ("//foo", input);
    110 
    111   input = "foo/..//bar";
    112   NormalizePath(&input);
    113   EXPECT_EQ("bar", input);
    114 
    115   input = "foo/../../bar";
    116   NormalizePath(&input);
    117   EXPECT_EQ("../bar", input);
    118 
    119   input = "/../foo";  // Don't go aboe the root dir.
    120   NormalizePath(&input);
    121   EXPECT_EQ("/foo", input);
    122 
    123   input = "//../foo";  // Don't go aboe the root dir.
    124   NormalizePath(&input);
    125   EXPECT_EQ("//foo", input);
    126 
    127   input = "../foo";
    128   NormalizePath(&input);
    129   EXPECT_EQ("../foo", input);
    130 
    131   input = "..";
    132   NormalizePath(&input);
    133   EXPECT_EQ("..", input);
    134 
    135   input = "./././.";
    136   NormalizePath(&input);
    137   EXPECT_EQ("", input);
    138 
    139   input = "../../..";
    140   NormalizePath(&input);
    141   EXPECT_EQ("../../..", input);
    142 
    143   input = "../";
    144   NormalizePath(&input);
    145   EXPECT_EQ("../", input);
    146 }
    147