summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jq.pyx6
-rw-r--r--tests/jq_tests.py12
2 files changed, 17 insertions, 1 deletions
diff --git a/jq.pyx b/jq.pyx
index 45f3e40..085a345 100644
--- a/jq.pyx
+++ b/jq.pyx
@@ -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