1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest some SBStructuredData API. 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprechtclass TestStructuredDataAPI(TestBase): 14*99451b44SJordan Rupprecht 15*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 16*99451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 17*99451b44SJordan Rupprecht 18*99451b44SJordan Rupprecht def test(self): 19*99451b44SJordan Rupprecht self.structured_data_api_test() 20*99451b44SJordan Rupprecht 21*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 22*99451b44SJordan Rupprecht def structured_data_api_test(self): 23*99451b44SJordan Rupprecht error = lldb.SBError() 24*99451b44SJordan Rupprecht s = lldb.SBStream() 25*99451b44SJordan Rupprecht s.Print( 26*99451b44SJordan Rupprecht "{\"key_dict\":{\"key_string\":\"STRING\",\"key_int\":3,\"key_float\":2.99,\"key_bool\":true,\"key_array\":[\"23\",\"arr\"]}}") 27*99451b44SJordan Rupprecht example = lldb.SBStructuredData() 28*99451b44SJordan Rupprecht 29*99451b44SJordan Rupprecht # Check SetFromJSON API for dictionaries, integers, floating point 30*99451b44SJordan Rupprecht # values, strings and arrays 31*99451b44SJordan Rupprecht error = example.SetFromJSON(s) 32*99451b44SJordan Rupprecht if not error.Success(): 33*99451b44SJordan Rupprecht self.fail("FAILED: " + error.GetCString()) 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht # Tests for invalid data type 36*99451b44SJordan Rupprecht self.invalid_struct_test(example) 37*99451b44SJordan Rupprecht 38*99451b44SJordan Rupprecht dict_struct = lldb.SBStructuredData() 39*99451b44SJordan Rupprecht dict_struct = example.GetValueForKey("key_dict") 40*99451b44SJordan Rupprecht 41*99451b44SJordan Rupprecht # Tests for dictionary data type 42*99451b44SJordan Rupprecht self.dictionary_struct_test(example) 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht # Tests for string data type 45*99451b44SJordan Rupprecht self.string_struct_test(dict_struct) 46*99451b44SJordan Rupprecht 47*99451b44SJordan Rupprecht # Tests for integer data type 48*99451b44SJordan Rupprecht self.int_struct_test(dict_struct) 49*99451b44SJordan Rupprecht 50*99451b44SJordan Rupprecht # Tests for floating point data type 51*99451b44SJordan Rupprecht self.double_struct_test(dict_struct) 52*99451b44SJordan Rupprecht 53*99451b44SJordan Rupprecht # Tests for boolean data type 54*99451b44SJordan Rupprecht self.bool_struct_test(dict_struct) 55*99451b44SJordan Rupprecht 56*99451b44SJordan Rupprecht # Tests for array data type 57*99451b44SJordan Rupprecht self.array_struct_test(dict_struct) 58*99451b44SJordan Rupprecht 59*99451b44SJordan Rupprecht def invalid_struct_test(self, example): 60*99451b44SJordan Rupprecht invalid_struct = lldb.SBStructuredData() 61*99451b44SJordan Rupprecht invalid_struct = example.GetValueForKey("invalid_key") 62*99451b44SJordan Rupprecht if invalid_struct.IsValid(): 63*99451b44SJordan Rupprecht self.fail("An invalid object should have been returned") 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht # Check Type API 66*99451b44SJordan Rupprecht if not invalid_struct.GetType() == lldb.eStructuredDataTypeInvalid: 67*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(invalid_struct.GetType())) 68*99451b44SJordan Rupprecht 69*99451b44SJordan Rupprecht def dictionary_struct_test(self, example): 70*99451b44SJordan Rupprecht # Check API returning a valid SBStructuredData of 'dictionary' type 71*99451b44SJordan Rupprecht dict_struct = lldb.SBStructuredData() 72*99451b44SJordan Rupprecht dict_struct = example.GetValueForKey("key_dict") 73*99451b44SJordan Rupprecht if not dict_struct.IsValid(): 74*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 75*99451b44SJordan Rupprecht 76*99451b44SJordan Rupprecht # Check Type API 77*99451b44SJordan Rupprecht if not dict_struct.GetType() == lldb.eStructuredDataTypeDictionary: 78*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(dict_struct.GetType())) 79*99451b44SJordan Rupprecht 80*99451b44SJordan Rupprecht # Check Size API for 'dictionary' type 81*99451b44SJordan Rupprecht if not dict_struct.GetSize() == 5: 82*99451b44SJordan Rupprecht self.fail("Wrong no of elements returned: " + 83*99451b44SJordan Rupprecht str(dict_struct.GetSize())) 84*99451b44SJordan Rupprecht 85*99451b44SJordan Rupprecht def string_struct_test(self, dict_struct): 86*99451b44SJordan Rupprecht string_struct = lldb.SBStructuredData() 87*99451b44SJordan Rupprecht string_struct = dict_struct.GetValueForKey("key_string") 88*99451b44SJordan Rupprecht if not string_struct.IsValid(): 89*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 90*99451b44SJordan Rupprecht 91*99451b44SJordan Rupprecht # Check Type API 92*99451b44SJordan Rupprecht if not string_struct.GetType() == lldb.eStructuredDataTypeString: 93*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(string_struct.GetType())) 94*99451b44SJordan Rupprecht 95*99451b44SJordan Rupprecht # Check API returning 'string' value 96*99451b44SJordan Rupprecht output = string_struct.GetStringValue(25) 97*99451b44SJordan Rupprecht if not "STRING" in output: 98*99451b44SJordan Rupprecht self.fail("wrong output: " + output) 99*99451b44SJordan Rupprecht 100*99451b44SJordan Rupprecht # Calling wrong API on a SBStructuredData 101*99451b44SJordan Rupprecht # (e.g. getting an integer from a string type structure) 102*99451b44SJordan Rupprecht output = string_struct.GetIntegerValue() 103*99451b44SJordan Rupprecht if output: 104*99451b44SJordan Rupprecht self.fail( 105*99451b44SJordan Rupprecht "Valid integer value " + 106*99451b44SJordan Rupprecht str(output) + 107*99451b44SJordan Rupprecht " returned for a string object") 108*99451b44SJordan Rupprecht 109*99451b44SJordan Rupprecht def int_struct_test(self, dict_struct): 110*99451b44SJordan Rupprecht # Check a valid SBStructuredData containing an 'integer' by 111*99451b44SJordan Rupprecht int_struct = lldb.SBStructuredData() 112*99451b44SJordan Rupprecht int_struct = dict_struct.GetValueForKey("key_int") 113*99451b44SJordan Rupprecht if not int_struct.IsValid(): 114*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 115*99451b44SJordan Rupprecht 116*99451b44SJordan Rupprecht # Check Type API 117*99451b44SJordan Rupprecht if not int_struct.GetType() == lldb.eStructuredDataTypeInteger: 118*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(int_struct.GetType())) 119*99451b44SJordan Rupprecht 120*99451b44SJordan Rupprecht # Check API returning 'integer' value 121*99451b44SJordan Rupprecht output = int_struct.GetIntegerValue() 122*99451b44SJordan Rupprecht if not output == 3: 123*99451b44SJordan Rupprecht self.fail("wrong output: " + str(output)) 124*99451b44SJordan Rupprecht 125*99451b44SJordan Rupprecht # Calling wrong API on a SBStructuredData 126*99451b44SJordan Rupprecht # (e.g. getting a string value from an integer type structure) 127*99451b44SJordan Rupprecht output = int_struct.GetStringValue(25) 128*99451b44SJordan Rupprecht if output: 129*99451b44SJordan Rupprecht self.fail( 130*99451b44SJordan Rupprecht "Valid string " + 131*99451b44SJordan Rupprecht output + 132*99451b44SJordan Rupprecht " returned for an integer object") 133*99451b44SJordan Rupprecht 134*99451b44SJordan Rupprecht def double_struct_test(self, dict_struct): 135*99451b44SJordan Rupprecht floating_point_struct = lldb.SBStructuredData() 136*99451b44SJordan Rupprecht floating_point_struct = dict_struct.GetValueForKey("key_float") 137*99451b44SJordan Rupprecht if not floating_point_struct.IsValid(): 138*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 139*99451b44SJordan Rupprecht 140*99451b44SJordan Rupprecht # Check Type API 141*99451b44SJordan Rupprecht if not floating_point_struct.GetType() == lldb.eStructuredDataTypeFloat: 142*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + 143*99451b44SJordan Rupprecht str(floating_point_struct.GetType())) 144*99451b44SJordan Rupprecht 145*99451b44SJordan Rupprecht # Check API returning 'double' value 146*99451b44SJordan Rupprecht output = floating_point_struct.GetFloatValue() 147*99451b44SJordan Rupprecht if not output == 2.99: 148*99451b44SJordan Rupprecht self.fail("wrong output: " + str(output)) 149*99451b44SJordan Rupprecht 150*99451b44SJordan Rupprecht def bool_struct_test(self, dict_struct): 151*99451b44SJordan Rupprecht bool_struct = lldb.SBStructuredData() 152*99451b44SJordan Rupprecht bool_struct = dict_struct.GetValueForKey("key_bool") 153*99451b44SJordan Rupprecht if not bool_struct.IsValid(): 154*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 155*99451b44SJordan Rupprecht 156*99451b44SJordan Rupprecht # Check Type API 157*99451b44SJordan Rupprecht if not bool_struct.GetType() == lldb.eStructuredDataTypeBoolean: 158*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(bool_struct.GetType())) 159*99451b44SJordan Rupprecht 160*99451b44SJordan Rupprecht # Check API returning 'bool' value 161*99451b44SJordan Rupprecht output = bool_struct.GetBooleanValue() 162*99451b44SJordan Rupprecht if not output: 163*99451b44SJordan Rupprecht self.fail("wrong output: " + str(output)) 164*99451b44SJordan Rupprecht 165*99451b44SJordan Rupprecht def array_struct_test(self, dict_struct): 166*99451b44SJordan Rupprecht # Check API returning a valid SBStructuredData of 'array' type 167*99451b44SJordan Rupprecht array_struct = lldb.SBStructuredData() 168*99451b44SJordan Rupprecht array_struct = dict_struct.GetValueForKey("key_array") 169*99451b44SJordan Rupprecht if not array_struct.IsValid(): 170*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 171*99451b44SJordan Rupprecht 172*99451b44SJordan Rupprecht # Check Type API 173*99451b44SJordan Rupprecht if not array_struct.GetType() == lldb.eStructuredDataTypeArray: 174*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(array_struct.GetType())) 175*99451b44SJordan Rupprecht 176*99451b44SJordan Rupprecht # Check Size API for 'array' type 177*99451b44SJordan Rupprecht if not array_struct.GetSize() == 2: 178*99451b44SJordan Rupprecht self.fail("Wrong no of elements returned: " + 179*99451b44SJordan Rupprecht str(array_struct.GetSize())) 180*99451b44SJordan Rupprecht 181*99451b44SJordan Rupprecht # Check API returning a valid SBStructuredData for different 'array' 182*99451b44SJordan Rupprecht # indices 183*99451b44SJordan Rupprecht string_struct = array_struct.GetItemAtIndex(0) 184*99451b44SJordan Rupprecht if not string_struct.IsValid(): 185*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 186*99451b44SJordan Rupprecht if not string_struct.GetType() == lldb.eStructuredDataTypeString: 187*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(string_struct.GetType())) 188*99451b44SJordan Rupprecht output = string_struct.GetStringValue(5) 189*99451b44SJordan Rupprecht if not output == "23": 190*99451b44SJordan Rupprecht self.fail("wrong output: " + str(output)) 191*99451b44SJordan Rupprecht 192*99451b44SJordan Rupprecht string_struct = array_struct.GetItemAtIndex(1) 193*99451b44SJordan Rupprecht if not string_struct.IsValid(): 194*99451b44SJordan Rupprecht self.fail("A valid object should have been returned") 195*99451b44SJordan Rupprecht if not string_struct.GetType() == lldb.eStructuredDataTypeString: 196*99451b44SJordan Rupprecht self.fail("Wrong type returned: " + str(string_struct.GetType())) 197*99451b44SJordan Rupprecht output = string_struct.GetStringValue(5) 198*99451b44SJordan Rupprecht if not output == "arr": 199*99451b44SJordan Rupprecht self.fail("wrong output: " + str(output)) 200