1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard
5*3f982cf4SFabien Sanglard #include "platform/base/location.h"
6*3f982cf4SFabien Sanglard
7*3f982cf4SFabien Sanglard #include "gmock/gmock.h"
8*3f982cf4SFabien Sanglard #include "gtest/gtest.h"
9*3f982cf4SFabien Sanglard
10*3f982cf4SFabien Sanglard namespace openscreen {
11*3f982cf4SFabien Sanglard using ::testing::MatchesRegex;
12*3f982cf4SFabien Sanglard using ::testing::StartsWith;
13*3f982cf4SFabien Sanglard
TEST(LocationTest,DefaultInitializedLocationIsNullptr)14*3f982cf4SFabien Sanglard TEST(LocationTest, DefaultInitializedLocationIsNullptr) {
15*3f982cf4SFabien Sanglard const Location loc;
16*3f982cf4SFabien Sanglard
17*3f982cf4SFabien Sanglard EXPECT_EQ(nullptr, loc.program_counter());
18*3f982cf4SFabien Sanglard EXPECT_EQ("pc:NULL", loc.ToString());
19*3f982cf4SFabien Sanglard }
20*3f982cf4SFabien Sanglard
TEST(LocationTest,ExpresslyInitializedLocationIsValid)21*3f982cf4SFabien Sanglard TEST(LocationTest, ExpresslyInitializedLocationIsValid) {
22*3f982cf4SFabien Sanglard const void* void_ptr = reinterpret_cast<void*>(0x1337);
23*3f982cf4SFabien Sanglard const Location loc(void_ptr);
24*3f982cf4SFabien Sanglard EXPECT_EQ(void_ptr, loc.program_counter());
25*3f982cf4SFabien Sanglard EXPECT_EQ("pc:0x1337", loc.ToString());
26*3f982cf4SFabien Sanglard }
27*3f982cf4SFabien Sanglard
TEST(LocationTest,LocationFromHereIsValid)28*3f982cf4SFabien Sanglard TEST(LocationTest, LocationFromHereIsValid) {
29*3f982cf4SFabien Sanglard const Location loc_from_here = openscreen::Location::CreateFromHere();
30*3f982cf4SFabien Sanglard const Location loc_from_here_macro = CURRENT_LOCATION;
31*3f982cf4SFabien Sanglard
32*3f982cf4SFabien Sanglard EXPECT_NE(nullptr, loc_from_here.program_counter());
33*3f982cf4SFabien Sanglard EXPECT_NE(nullptr, loc_from_here_macro.program_counter());
34*3f982cf4SFabien Sanglard
35*3f982cf4SFabien Sanglard // Some platforms have only limited Regex support, so we cannot have as
36*3f982cf4SFabien Sanglard // thorough a test on those platforms.
37*3f982cf4SFabien Sanglard #if GTEST_USES_POSIX_RE
38*3f982cf4SFabien Sanglard EXPECT_THAT(loc_from_here.ToString(), MatchesRegex("pc:0x[0-9a-f]+"));
39*3f982cf4SFabien Sanglard EXPECT_THAT(loc_from_here_macro.ToString(), MatchesRegex("pc:0x[0-9a-f]+"));
40*3f982cf4SFabien Sanglard #else // GTEST_USES_SIMPLE_RE = 1
41*3f982cf4SFabien Sanglard EXPECT_THAT(loc_from_here.ToString(), StartsWith("pc:0x"));
42*3f982cf4SFabien Sanglard EXPECT_THAT(loc_from_here_macro.ToString(), StartsWith("pc:0x"));
43*3f982cf4SFabien Sanglard #endif
44*3f982cf4SFabien Sanglard }
45*3f982cf4SFabien Sanglard } // namespace openscreen
46