1import lldb 2from lldbsuite.test.decorators import * 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test import lldbutil 5 6USE_LIBSTDCPP = "USE_LIBSTDCPP" 7USE_LIBCPP = "USE_LIBCPP" 8 9class GenericDequeDataFormatterTestCase(TestBase): 10 11 def findVariable(self, name): 12 var = self.frame().FindVariable(name) 13 self.assertTrue(var.IsValid()) 14 return var 15 16 def getVariableType(self, name): 17 var = self.findVariable(name) 18 return var.GetType().GetDisplayTypeName() 19 20 def check_size(self, var_name, size): 21 var = self.findVariable(var_name) 22 self.assertEqual(var.GetNumChildren(), size) 23 24 25 def do_test(self, stdlib_type): 26 self.build(dictionary={stdlib_type: '1'}) 27 lldbutil.run_to_source_breakpoint(self, "break here", 28 lldb.SBFileSpec("main.cpp")) 29 30 self.expect_expr("empty", result_children=[]) 31 self.expect_expr("deque_1", result_children=[ 32 ValueCheck(name="[0]", value="1"), 33 ]) 34 self.expect_expr("deque_3", result_children=[ 35 ValueCheck(name="[0]", value="3"), 36 ValueCheck(name="[1]", value="1"), 37 ValueCheck(name="[2]", value="2") 38 ]) 39 40 self.check_size("deque_200_small", 200) 41 for i in range(0, 100): 42 self.expect_var_path("deque_200_small[%d]"%(i), children=[ 43 ValueCheck(name="a", value=str(-99 + i)), 44 ValueCheck(name="b", value=str(-100 + i)), 45 ValueCheck(name="c", value=str(-101 + i)), 46 ]) 47 self.expect_var_path("deque_200_small[%d]"%(i + 100), children=[ 48 ValueCheck(name="a", value=str(i)), 49 ValueCheck(name="b", value=str(1 + i)), 50 ValueCheck(name="c", value=str(2 + i)), 51 ]) 52 53 self.check_size("deque_200_large", 200) 54 for i in range(0, 100): 55 self.expect_var_path("deque_200_large[%d]"%(i), children=[ 56 ValueCheck(name="a", value=str(-99 + i)), 57 ValueCheck(name="b", value=str(-100 + i)), 58 ValueCheck(name="c", value=str(-101 + i)), 59 ValueCheck(name="d") 60 ]) 61 self.expect_var_path("deque_200_large[%d]"%(i + 100), children=[ 62 ValueCheck(name="a", value=str(i)), 63 ValueCheck(name="b", value=str(1 + i)), 64 ValueCheck(name="c", value=str(2 + i)), 65 ValueCheck(name="d") 66 ]) 67 68 @add_test_categories(["libstdcxx"]) 69 def test_libstdcpp(self): 70 self.do_test(USE_LIBSTDCPP) 71 72 @add_test_categories(["libc++"]) 73 def test_libcpp(self): 74 self.do_test(USE_LIBCPP) 75