| // Copyright 2019 The Fuchsia 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 "src/developer/debug/zxdb/client/pretty_frame_glob.h" |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/developer/debug/zxdb/symbols/function.h" |
| #include "src/developer/debug/zxdb/symbols/location.h" |
| |
| namespace zxdb { |
| |
| TEST(PrettyFrameGlob, Matches) { |
| auto func = fxl::MakeRefCounted<Function>(DwarfTag::kSubprogram); |
| func->set_assigned_name("MyFunction"); |
| |
| SymbolContext symbol_context = SymbolContext::ForRelativeAddresses(); |
| |
| // Wildcard matches any location, even unsymbolized. |
| EXPECT_TRUE(PrettyFrameGlob::Wildcard().Matches(Location(Location::State::kAddress, 0x23723))); |
| |
| // File/function exact matches: |
| Location loc(0x1234, FileLine("file.cc", 23), 0, symbol_context, func); |
| EXPECT_TRUE(PrettyFrameGlob::File("file.cc").Matches(loc)); |
| EXPECT_FALSE(PrettyFrameGlob::File("otherfile.cc").Matches(loc)); |
| |
| EXPECT_TRUE(PrettyFrameGlob::Func("MyFunction").Matches(loc)); |
| EXPECT_FALSE(PrettyFrameGlob::Func("OtherFunction").Matches(loc)); |
| |
| // Test a template. This needs to be a new function object because the name will be cached. |
| auto template_func = fxl::MakeRefCounted<Function>(DwarfTag::kSubprogram); |
| template_func->set_assigned_name("MyFunction<int>"); |
| Location template_loc(0x1234, FileLine("file.cc", 23), 0, symbol_context, template_func); |
| |
| // This just tests that the templates and wildcards are hooked up. The globs are covered by the |
| // IdentifierGlob tests. |
| EXPECT_TRUE(PrettyFrameGlob::Func("MyFunction<int>").Matches(template_loc)); |
| EXPECT_FALSE(PrettyFrameGlob::Func("MyFunction<char>").Matches(template_loc)); |
| EXPECT_TRUE(PrettyFrameGlob::Func("MyFunction<*>").Matches(template_loc)); |
| } |
| |
| } // namespace zxdb |