| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gn/source_file.h" |
| |
| #include "util/test/test.h" |
| |
| // The SourceFile object should normalize the input passed to the constructor. |
| // The normalizer unit test checks for all the weird edge cases for normalizing |
| // so here just check that it gets called. |
| TEST(SourceFile, Normalize) { |
| SourceFile a("//foo/../bar.cc"); |
| EXPECT_EQ("//bar.cc", a.value()); |
| |
| std::string b_str("//foo/././../bar.cc"); |
| SourceFile b(std::move(b_str)); |
| EXPECT_TRUE(b_str.empty()); // Should have been swapped in. |
| EXPECT_EQ("//bar.cc", b.value()); |
| } |
| |
| TEST(SourceFile, GetType) { |
| static const struct { |
| std::string_view path; |
| SourceFile::Type type; |
| } kData[] = { |
| {"", SourceFile::SOURCE_UNKNOWN}, |
| {"a.c", SourceFile::SOURCE_C}, |
| {"a.cc", SourceFile::SOURCE_CPP}, |
| {"a.cpp", SourceFile::SOURCE_CPP}, |
| {"a.cxx", SourceFile::SOURCE_CPP}, |
| {"a.c++", SourceFile::SOURCE_CPP}, |
| {"foo.h", SourceFile::SOURCE_H}, |
| {"foo.hh", SourceFile::SOURCE_H}, |
| {"foo.hpp", SourceFile::SOURCE_H}, |
| {"foo.inc", SourceFile::SOURCE_H}, |
| {"foo.inl", SourceFile::SOURCE_H}, |
| {"foo.ipp", SourceFile::SOURCE_H}, |
| {"foo.m", SourceFile::SOURCE_M}, |
| {"foo.mm", SourceFile::SOURCE_MM}, |
| {"foo.o", SourceFile::SOURCE_O}, |
| {"foo.obj", SourceFile::SOURCE_O}, |
| {"foo.S", SourceFile::SOURCE_S}, |
| {"foo.s", SourceFile::SOURCE_S}, |
| {"foo.asm", SourceFile::SOURCE_S}, |
| {"foo.go", SourceFile::SOURCE_GO}, |
| {"foo.rc", SourceFile::SOURCE_RC}, |
| {"foo.rs", SourceFile::SOURCE_RS}, |
| {"foo.def", SourceFile::SOURCE_DEF}, |
| {"foo.swift", SourceFile::SOURCE_SWIFT}, |
| {"foo.swiftmodule", SourceFile::SOURCE_SWIFTMODULE}, |
| {"foo.modulemap", SourceFile::SOURCE_MODULEMAP}, |
| |
| // A few degenerate cases |
| {"foo.obj/a", SourceFile::SOURCE_UNKNOWN}, |
| {"foo.cppp", SourceFile::SOURCE_UNKNOWN}, |
| {"cpp", SourceFile::SOURCE_UNKNOWN}, |
| }; |
| for (const auto& data : kData) { |
| EXPECT_EQ(data.type, SourceFile(data.path).GetType()); |
| } |
| } |