forked from weaselab/weaseljson
Merge pull request 'check WeaselJsonParser_create return value in Python bindings' (#26) from weaselbot/weaseljson:weaselbot/issue-23 into main
Reviewed-on: weaselab/weaseljson#26
This commit is contained in:
@@ -84,7 +84,19 @@ def test_mixed_values():
|
||||
assert recorder.events.count("null") == 1
|
||||
|
||||
|
||||
def test_create_rejects_too_small_stack():
|
||||
for stack_size in (-1, 0, 1, 2):
|
||||
try:
|
||||
parser = weaseljson.WeaselJsonParser(Recorder(), stackSize=stack_size)
|
||||
except ValueError:
|
||||
continue
|
||||
# If creation unexpectedly succeeds, close it cleanly and fail the test.
|
||||
parser.close()
|
||||
raise AssertionError(f"expected ValueError for stackSize={stack_size}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_object_keys_routed_correctly()
|
||||
test_mixed_values()
|
||||
test_create_rejects_too_small_stack()
|
||||
print("python bindings ok")
|
||||
|
||||
@@ -117,12 +117,24 @@ class WeaselJsonParser:
|
||||
self.voidp_callbacks,
|
||||
0,
|
||||
)
|
||||
if self.p is None:
|
||||
raise ValueError(
|
||||
"WeaselJsonParser_create returned NULL; "
|
||||
"check stackSize (must be positive and large enough) "
|
||||
"and available memory"
|
||||
)
|
||||
|
||||
def _check_open(self):
|
||||
if self.p is None:
|
||||
raise RuntimeError("parser has been closed or creation failed")
|
||||
|
||||
def parse(self, data: bytes) -> WeaselJsonStatus:
|
||||
self._check_open()
|
||||
buf = (ctypes.c_ubyte * len(data)).from_buffer(bytearray(data))
|
||||
return self._lib.WeaselJsonParser_parse(self.p, buf, len(data))
|
||||
|
||||
def reset(self):
|
||||
self._check_open()
|
||||
self._lib.WeaselJsonParser_reset(self.p)
|
||||
|
||||
def __enter__(self):
|
||||
|
||||
Reference in New Issue
Block a user