diff options
| -rw-r--r-- | jq.pyx | 6 | ||||
| -rw-r--r-- | tests/jq_tests.py | 12 |
2 files changed, 17 insertions, 1 deletions
@@ -69,6 +69,7 @@ def jq(object program): cdef _Program wrapped_program = _Program.__new__(_Program) wrapped_program._jq = jq + wrapped_program._error_store = error_store return wrapped_program @@ -94,6 +95,7 @@ cdef class _ErrorStore(object): cdef class _Program(object): cdef jq_state* _jq + cdef _ErrorStore _error_store def __dealloc__(self): jq_teardown(&self._jq) @@ -102,6 +104,10 @@ cdef class _Program(object): string_input = input if raw_input else json.dumps(input) bytes_input = string_input.encode("utf8") result_bytes = self._string_to_strings(bytes_input) + + if self._error_store.has_errors(): + raise ValueError(self._error_store.error_string()) + result_strings = map(lambda s: s.decode("utf8"), result_bytes) if raw_output: return "\n".join(result_strings) diff --git a/tests/jq_tests.py b/tests/jq_tests.py index dfb7112..3b24b60 100644 --- a/tests/jq_tests.py +++ b/tests/jq_tests.py @@ -79,7 +79,17 @@ def value_error_is_raised_if_program_is_invalid(): ! 1 compile error""" assert_equal(str(error), expected_error_str) - assert_raises(ValueError, lambda: jq("!")) + + +@istest +def value_error_is_raised_if_input_cannot_be_processed_by_program(): + program = jq(".x") + try: + program.transform(1) + assert False, "Expected error" + except ValueError as error: + expected_error_str = "jq: error: Cannot index number with string" + assert_equal(str(error), expected_error_str) @istest |
