"""
Test formatting of std::unordered_map related structures.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class LibcxxUnorderedMapDataFormatterTestCase(TestBase):
@add_test_categories(["libc++"])
def test_iterator_formatters(self):
"""Test that std::unordered_map related structures are formatted correctly when printed.
Currently only tests format of std::unordered_map iterators.
"""
self.build()
(self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "Break here", lldb.SBFileSpec("main.cpp", False)
)
# Test empty iterators
self.expect_expr("empty_iter", "")
self.expect_expr("const_empty_iter", "")
lldbutil.continue_to_breakpoint(process, bkpt)
# Check that key/value is correctly formatted
self.expect_expr(
"foo",
result_children=[
ValueCheck(name="first", summary='"Foo"'),
ValueCheck(name="second", summary='"Bar"'),
],
)
# Check invalid iterator is empty
self.expect_expr("invalid", "")
# Const key/val iterator
self.expect_expr(
"const_baz",
result_children=[
ValueCheck(name="first", summary='"Baz"'),
ValueCheck(name="second", summary='"Qux"'),
],
)
# Bucket iterators
# I.e., std::__hash_map_const_iterator<const_local_iterator<...>>
# and std::__hash_map_iterator<local_iterator<...>>
self.expect_expr(
"bucket_it",
result_children=[
ValueCheck(name="first", summary='"Baz"'),
ValueCheck(name="second", summary='"Qux"'),
],
)
self.expect_expr(
"const_bucket_it",
result_children=[
ValueCheck(name="first", summary='"Baz"'),
ValueCheck(name="second", summary='"Qux"'),
],
)