|
|
@@ -0,0 +1,206 @@ |
|
|
""" |
|
|
Test some SBStructuredData API. |
|
|
""" |
|
|
|
|
|
from __future__ import print_function |
|
|
|
|
|
import os |
|
|
import re |
|
|
import time |
|
|
|
|
|
import lldb |
|
|
from lldbsuite.test.decorators import * |
|
|
from lldbsuite.test.lldbtest import * |
|
|
from lldbsuite.test import lldbutil |
|
|
|
|
|
|
|
|
class TestStructuredDataAPI(TestBase): |
|
|
|
|
|
mydir = TestBase.compute_mydir(__file__) |
|
|
NO_DEBUG_INFO_TESTCASE = True |
|
|
|
|
|
def test(self): |
|
|
self.structured_data_api_test() |
|
|
|
|
|
def setUp(self): |
|
|
TestBase.setUp(self) |
|
|
|
|
|
@add_test_categories(['pyapi']) |
|
|
def structured_data_api_test(self): |
|
|
error = lldb.SBError() |
|
|
s = lldb.SBStream() |
|
|
s.Print( |
|
|
"{\"key_dict\":{\"key_string\":\"STRING\",\"key_int\":3,\"key_float\":2.99,\"key_bool\":true,\"key_array\":[\"23\",\"arr\"]}}") |
|
|
example = lldb.SBStructuredData() |
|
|
|
|
|
# Check SetFromJSON API for dictionaries, integers, floating point |
|
|
# values, strings and arrays |
|
|
error = example.SetFromJSON(s) |
|
|
if not error.Success(): |
|
|
self.fail("FAILED: " + error.GetCString()) |
|
|
|
|
|
# Tests for invalid data type |
|
|
self.invalid_struct_test(example) |
|
|
|
|
|
dict_struct = lldb.SBStructuredData() |
|
|
dict_struct = example.GetValueForKey("key_dict") |
|
|
|
|
|
# Tests for dictionary data type |
|
|
self.dictionary_struct_test(example) |
|
|
|
|
|
# Tests for string data type |
|
|
self.string_struct_test(dict_struct) |
|
|
|
|
|
# Tests for integer data type |
|
|
self.int_struct_test(dict_struct) |
|
|
|
|
|
# Tests for floating point data type |
|
|
self.double_struct_test(dict_struct) |
|
|
|
|
|
# Tests for boolean data type |
|
|
self.bool_struct_test(dict_struct) |
|
|
|
|
|
# Tests for array data type |
|
|
self.array_struct_test(dict_struct) |
|
|
|
|
|
def invalid_struct_test(self, example): |
|
|
invalid_struct = lldb.SBStructuredData() |
|
|
invalid_struct = example.GetValueForKey("invalid_key") |
|
|
if invalid_struct.IsValid(): |
|
|
self.fail("An invalid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not invalid_struct.GetType() == lldb.eStructuredDataTypeInvalid: |
|
|
self.fail("Wrong type returned: " + str(invalid_struct.GetType())) |
|
|
|
|
|
def dictionary_struct_test(self, example): |
|
|
# Check API returning a valid SBStructuredData of 'dictionary' type |
|
|
dict_struct = lldb.SBStructuredData() |
|
|
dict_struct = example.GetValueForKey("key_dict") |
|
|
if not dict_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not dict_struct.GetType() == lldb.eStructuredDataTypeDictionary: |
|
|
self.fail("Wrong type returned: " + str(dict_struct.GetType())) |
|
|
|
|
|
# Check Size API for 'dictionary' type |
|
|
if not dict_struct.GetSize() == 5: |
|
|
self.fail("Wrong no of elements returned: " + |
|
|
str(dict_struct.GetSize())) |
|
|
|
|
|
def string_struct_test(self, dict_struct): |
|
|
string_struct = lldb.SBStructuredData() |
|
|
string_struct = dict_struct.GetValueForKey("key_string") |
|
|
if not string_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not string_struct.GetType() == lldb.eStructuredDataTypeString: |
|
|
self.fail("Wrong type returned: " + str(string_struct.GetType())) |
|
|
|
|
|
# Check API returning 'string' value |
|
|
output = string_struct.GetStringValue(25) |
|
|
if not "STRING" in output: |
|
|
self.fail("wrong output: " + output) |
|
|
|
|
|
# Calling wrong API on a SBStructuredData |
|
|
# (e.g. getting an integer from a string type structure) |
|
|
output = string_struct.GetIntegerValue() |
|
|
if output: |
|
|
self.fail( |
|
|
"Valid integer value " + |
|
|
str(output) + |
|
|
" returned for a string object") |
|
|
|
|
|
def int_struct_test(self, dict_struct): |
|
|
# Check a valid SBStructuredData containing an 'integer' by |
|
|
int_struct = lldb.SBStructuredData() |
|
|
int_struct = dict_struct.GetValueForKey("key_int") |
|
|
if not int_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not int_struct.GetType() == lldb.eStructuredDataTypeInteger: |
|
|
self.fail("Wrong type returned: " + str(int_struct.GetType())) |
|
|
|
|
|
# Check API returning 'integer' value |
|
|
output = int_struct.GetIntegerValue() |
|
|
if not output == 3: |
|
|
self.fail("wrong output: " + str(output)) |
|
|
|
|
|
# Calling wrong API on a SBStructuredData |
|
|
# (e.g. getting a string value from an integer type structure) |
|
|
output = int_struct.GetStringValue(25) |
|
|
if output: |
|
|
self.fail( |
|
|
"Valid string " + |
|
|
output + |
|
|
" returned for an integer object") |
|
|
|
|
|
def double_struct_test(self, dict_struct): |
|
|
floating_point_struct = lldb.SBStructuredData() |
|
|
floating_point_struct = dict_struct.GetValueForKey("key_float") |
|
|
if not floating_point_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not floating_point_struct.GetType() == lldb.eStructuredDataTypeFloat: |
|
|
self.fail("Wrong type returned: " + |
|
|
str(floating_point_struct.GetType())) |
|
|
|
|
|
# Check API returning 'double' value |
|
|
output = floating_point_struct.GetFloatValue() |
|
|
if not output == 2.99: |
|
|
self.fail("wrong output: " + str(output)) |
|
|
|
|
|
def bool_struct_test(self, dict_struct): |
|
|
bool_struct = lldb.SBStructuredData() |
|
|
bool_struct = dict_struct.GetValueForKey("key_bool") |
|
|
if not bool_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not bool_struct.GetType() == lldb.eStructuredDataTypeBoolean: |
|
|
self.fail("Wrong type returned: " + str(bool_struct.GetType())) |
|
|
|
|
|
# Check API returning 'bool' value |
|
|
output = bool_struct.GetBooleanValue() |
|
|
if not output: |
|
|
self.fail("wrong output: " + str(output)) |
|
|
|
|
|
def array_struct_test(self, dict_struct): |
|
|
# Check API returning a valid SBStructuredData of 'array' type |
|
|
array_struct = lldb.SBStructuredData() |
|
|
array_struct = dict_struct.GetValueForKey("key_array") |
|
|
if not array_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
|
|
|
# Check Type API |
|
|
if not array_struct.GetType() == lldb.eStructuredDataTypeArray: |
|
|
self.fail("Wrong type returned: " + str(array_struct.GetType())) |
|
|
|
|
|
# Check Size API for 'array' type |
|
|
if not array_struct.GetSize() == 2: |
|
|
self.fail("Wrong no of elements returned: " + |
|
|
str(array_struct.GetSize())) |
|
|
|
|
|
# Check API returning a valid SBStructuredData for different 'array' |
|
|
# indices |
|
|
string_struct = array_struct.GetItemAtIndex(0) |
|
|
if not string_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
if not string_struct.GetType() == lldb.eStructuredDataTypeString: |
|
|
self.fail("Wrong type returned: " + str(string_struct.GetType())) |
|
|
output = string_struct.GetStringValue(5) |
|
|
if not output == "23": |
|
|
self.fail("wrong output: " + str(output)) |
|
|
|
|
|
string_struct = array_struct.GetItemAtIndex(1) |
|
|
if not string_struct.IsValid(): |
|
|
self.fail("A valid object should have been returned") |
|
|
if not string_struct.GetType() == lldb.eStructuredDataTypeString: |
|
|
self.fail("Wrong type returned: " + str(string_struct.GetType())) |
|
|
output = string_struct.GetStringValue(5) |
|
|
if not output == "arr": |
|
|
self.fail("wrong output: " + str(output)) |