| // Copyright 2020 the V8 project 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 "include/cppgc/source-location.h" |
| |
| #include "src/base/macros.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace cppgc { |
| namespace internal { |
| |
| namespace { |
| constexpr char kFileName[] = "source-location-unittest.cc"; |
| |
| bool Contains(const std::string& base_string, const std::string& substring) { |
| return base_string.find(substring) != std::string::npos; |
| } |
| |
| } // namespace |
| |
| TEST(SourceLocationTest, DefaultCtor) { |
| constexpr SourceLocation loc; |
| EXPECT_EQ(nullptr, loc.Function()); |
| EXPECT_EQ(nullptr, loc.FileName()); |
| EXPECT_EQ(0u, loc.Line()); |
| } |
| |
| void TestSourceLocationCurrent() { |
| static constexpr char kFunctionName[] = "TestSourceLocationCurrent"; |
| static constexpr size_t kNextLine = __LINE__ + 1; |
| constexpr auto loc = SourceLocation::Current(); |
| #if !CPPGC_SUPPORTS_SOURCE_LOCATION |
| EXPECT_EQ(nullptr, loc.Function()); |
| EXPECT_EQ(nullptr, loc.FileName()); |
| EXPECT_EQ(0u, loc.Line()); |
| USE(kNextLine); |
| return; |
| #endif |
| EXPECT_EQ(kNextLine, loc.Line()); |
| EXPECT_TRUE(Contains(loc.FileName(), kFileName)); |
| EXPECT_TRUE(Contains(loc.Function(), kFunctionName)); |
| } |
| |
| TEST(SourceLocationTest, Current) { TestSourceLocationCurrent(); } |
| |
| void TestToString() { |
| static const std::string kDescriptor = std::string(__func__) + "@" + |
| __FILE__ + ":" + |
| std::to_string(__LINE__ + 1); |
| constexpr auto loc = SourceLocation::Current(); |
| const auto string = loc.ToString(); |
| EXPECT_EQ(kDescriptor, string); |
| } |
| |
| #if CPPGC_SUPPORTS_SOURCE_LOCATION |
| TEST(SourceLocationTest, ToString) { TestToString(); } |
| #endif |
| |
| } // namespace internal |
| } // namespace cppgc |