Source: python-sdjson Version: 0.5.0-1 Severity: normal User: [email protected] Usertags: python3.13
This package failed build from source when test-built against a version of python3-defaults that includes 3.13 as a supported version. To reproduce this issue, build against python3-defaults (python3-all-dev etc.) from Debian experimental. What's new in Python 3.13: https://docs.python.org/3.13/whatsnew/3.13.html Log snippet: dh_auto_test -O--buildsystem=pybuild I: pybuild pybuild:308: ln -s test_overloading_ tests/test_overloading I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_sdjson/build; python3.13 -m pytest -v --ignore=tests/test_protocols.py [1m============================= test session starts ==============================[0m platform linux -- Python 3.13.0rc2, pytest-8.3.3, pluggy-1.5.0 -- /usr/bin/python3.13 cachedir: .pytest_cache Test session started at 07:47:54 rootdir: /<<PKGBUILDDIR>> configfile: tox.ini plugins: regressions-2.5.0+ds, timeout-2.3.1, rerunfailures-12.0, datadir-1.4.1+ds, typeguard-4.3.0, cov-5.0.0 timeout: 300.0s timeout method: signal timeout func_only: False [1mcollecting ... [0mcollected 154 items tests/stdlib_tests/test_decode.py::test_decimal [32mPASSED[0m[32m [ 0%][0m tests/stdlib_tests/test_decode.py::test_float [32mPASSED[0m[32m [ 1%][0m tests/stdlib_tests/test_decode.py::test_empty_objects [32mPASSED[0m[32m [ 1%][0m tests/stdlib_tests/test_decode.py::test_object_pairs_hook [32mPASSED[0m[32m [ 2%][0m tests/stdlib_tests/test_decode.py::test_decoder_optimizations [32mPASSED[0m[32m [ 3%][0m tests/stdlib_tests/test_decode.py::test_keys_reuse [32mPASSED[0m[32m [ 3%][0m tests/stdlib_tests/test_decode.py::test_extra_data [32mPASSED[0m[32m [ 4%][0m tests/stdlib_tests/test_decode.py::test_invalid_escape [32mPASSED[0m[32m [ 5%][0m tests/stdlib_tests/test_decode.py::test_invalid_input_type [32mPASSED[0m[32m [ 5%][0m tests/stdlib_tests/test_decode.py::test_string_with_utf8_bom [32mPASSED[0m[32m [ 6%][0m tests/stdlib_tests/test_decode.py::test_negative_index [32mPASSED[0m[32m [ 7%][0m tests/stdlib_tests/test_default.py::test_default [32mPASSED[0m[32m [ 7%][0m tests/stdlib_tests/test_dump.py::test_dump [32mPASSED[0m[32m [ 8%][0m tests/stdlib_tests/test_dump.py::test_dumps [32mPASSED[0m[32m [ 9%][0m tests/stdlib_tests/test_dump.py::test_dump_skipkeys [32mPASSED[0m[32m [ 9%][0m tests/stdlib_tests/test_dump.py::test_encode_truefalse[data0-{"false": true, "true": false}] [32mPASSED[0m[32m [ 10%][0m tests/stdlib_tests/test_dump.py::test_encode_truefalse[data1-{"false": 1, "2": 3.0, "4.0": 5, "6": true}] [32mPASSED[0m[32m [ 11%][0m tests/stdlib_tests/test_dump.py::test_encode_mutated [32mPASSED[0m[32m [ 11%][0m tests/stdlib_tests/test_dump.py::test_encode_evil_dict [32mPASSED[0m[32m [ 12%][0m tests/stdlib_tests/test_encode_basestring_ascii.py::test_ordered_dict [32mPASSED[0m[32m [ 12%][0m tests/stdlib_tests/test_encode_basestring_ascii.py::test_sorted_dict [32mPASSED[0m[32m [ 13%][0m tests/stdlib_tests/test_enum.py::test_floats [32mPASSED[0m[32m [ 14%][0m tests/stdlib_tests/test_enum.py::test_weird_floats [32mPASSED[0m[32m [ 14%][0m tests/stdlib_tests/test_enum.py::test_ints [32mPASSED[0m[32m [ 15%][0m tests/stdlib_tests/test_enum.py::test_list [32mPASSED[0m[32m [ 16%][0m tests/stdlib_tests/test_enum.py::test_dict_keys [32mPASSED[0m[32m [ 16%][0m tests/stdlib_tests/test_enum.py::test_dict_values [32mPASSED[0m[32m [ 17%][0m tests/stdlib_tests/test_fail.py::test_failures [32mPASSED[0m[32m [ 18%][0m tests/stdlib_tests/test_fail.py::test_non_string_keys_dict [32mPASSED[0m[32m [ 18%][0m tests/stdlib_tests/test_fail.py::test_not_serializable [32mPASSED[0m[32m [ 19%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[-Expecting value-0] [32mPASSED[0m[32m [ 20%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[[-Expecting value-1] [32mPASSED[0m[32m [ 20%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[[42-Expecting ',' delimiter-3] [32mPASSED[0m[32m [ 21%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[[42,-Expecting value-4] [32mPASSED[0m[32m [ 22%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[["-Unterminated string starting at-1] [32mPASSED[0m[32m [ 22%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[["spam-Unterminated string starting at-1] [32mPASSED[0m[32m [ 23%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[["spam"-Expecting ',' delimiter-7] [32mPASSED[0m[32m [ 24%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[["spam",-Expecting value-8] [32mPASSED[0m[32m [ 24%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{-Expecting property name enclosed in double quotes-1] [32mPASSED[0m[32m [ 25%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"-Unterminated string starting at-1] [32mPASSED[0m[32m [ 25%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"spam-Unterminated string starting at-1] [32mPASSED[0m[32m [ 26%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"spam"-Expecting ':' delimiter-7] [32mPASSED[0m[32m [ 27%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"spam":-Expecting value-8] [32mPASSED[0m[32m [ 27%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"spam":42-Expecting ',' delimiter-10] [32mPASSED[0m[32m [ 28%][0m tests/stdlib_tests/test_fail.py::test_truncated_input[{"spam":42,-Expecting property name enclosed in double quotes-11] [32mPASSED[0m[32m [ 29%][0m tests/stdlib_tests/test_fail.py::test_truncated_input["-Unterminated string starting at-0] [32mPASSED[0m[32m [ 29%][0m tests/stdlib_tests/test_fail.py::test_truncated_input["spam-Unterminated string starting at-0] [32mPASSED[0m[32m [ 30%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[,-Expecting value-1] [32mPASSED[0m[32m [ 31%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam":[}-Expecting value-9] [32mPASSED[0m[32m [ 31%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[42:-Expecting ',' delimiter-3] [32mPASSED[0m[32m [ 32%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[42 "spam"-Expecting ',' delimiter-4] [32mPASSED[0m[32m [ 33%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[42,]-Expecting value-4] [31mFAILED[0m[31m [ 33%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam":[42}-Expecting ',' delimiter-11] [32mPASSED[0m[31m [ 34%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[["]-Unterminated string starting at-1] [32mPASSED[0m[31m [ 35%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[["spam":-Expecting ',' delimiter-7] [32mPASSED[0m[31m [ 35%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[["spam",]-Expecting value-8] [31mFAILED[0m[31m [ 36%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{:-Expecting property name enclosed in double quotes-1] [32mPASSED[0m[31m [ 37%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{,-Expecting property name enclosed in double quotes-1] [32mPASSED[0m[31m [ 37%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{42-Expecting property name enclosed in double quotes-1] [32mPASSED[0m[31m [ 38%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[{]-Expecting property name enclosed in double quotes-2] [32mPASSED[0m[31m [ 38%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam",-Expecting ':' delimiter-7] [32mPASSED[0m[31m [ 39%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam"}-Expecting ':' delimiter-7] [32mPASSED[0m[31m [ 40%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[{"spam"]-Expecting ':' delimiter-8] [32mPASSED[0m[31m [ 40%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam":}-Expecting value-8] [32mPASSED[0m[31m [ 41%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[{"spam":]-Expecting value-9] [32mPASSED[0m[31m [ 42%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam":42 "ham"-Expecting ',' delimiter-11] [32mPASSED[0m[31m [ 42%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[[{"spam":42]-Expecting ',' delimiter-11] [32mPASSED[0m[31m [ 43%][0m tests/stdlib_tests/test_fail.py::test_unexpected_data[{"spam":42,}-Expecting property name enclosed in double quotes-11] [31mFAILED[0m[31m [ 44%][0m tests/stdlib_tests/test_fail.py::test_extra_data[[]]-Extra data-2] [32mPASSED[0m[31m [ 44%][0m tests/stdlib_tests/test_fail.py::test_extra_data[{}}-Extra data-2] [32mPASSED[0m[31m [ 45%][0m tests/stdlib_tests/test_fail.py::test_extra_data[[],[]-Extra data-2] [32mPASSED[0m[31m [ 46%][0m tests/stdlib_tests/test_fail.py::test_extra_data[{},{}-Extra data-2] [32mPASSED[0m[31m [ 46%][0m tests/stdlib_tests/test_fail.py::test_extra_data[42,"spam"-Extra data-2] [32mPASSED[0m[31m [ 47%][0m tests/stdlib_tests/test_fail.py::test_extra_data["spam",42-Extra data-6] [32mPASSED[0m[31m [ 48%][0m tests/stdlib_tests/test_fail.py::test_linecol[!-1-1-0] [32mPASSED[0m[31m [ 48%][0m tests/stdlib_tests/test_fail.py::test_linecol[ !-1-2-1] [32mPASSED[0m[31m [ 49%][0m tests/stdlib_tests/test_fail.py::test_linecol[\n!-2-1-1] [32mPASSED[0m[31m [ 50%][0m tests/stdlib_tests/test_fail.py::test_linecol[\n \n\n !-4-6-10] [32mPASSED[0m[31m [ 50%][0m tests/stdlib_tests/test_float.py::test_floats [32mPASSED[0m[31m [ 51%][0m tests/stdlib_tests/test_float.py::test_ints [32mPASSED[0m[31m [ 51%][0m tests/stdlib_tests/test_float.py::test_out_of_range [32mPASSED[0m[31m [ 52%][0m tests/stdlib_tests/test_float.py::test_allow_nan [32mPASSED[0m[31m [ 53%][0m tests/stdlib_tests/test_indent.py::test_indent [32mPASSED[0m[31m [ 53%][0m tests/stdlib_tests/test_indent.py::test_indent0 [32mPASSED[0m[31m [ 54%][0m tests/stdlib_tests/test_passes.py::test_parse_pass_1 [32mPASSED[0m[31m [ 55%][0m tests/stdlib_tests/test_passes.py::test_parse_pass_2 [32mPASSED[0m[31m [ 55%][0m tests/stdlib_tests/test_passes.py::test_parse_pass_3 [32mPASSED[0m[31m [ 56%][0m tests/stdlib_tests/test_recursion.py::test_listrecursion [32mPASSED[0m[31m [ 57%][0m tests/stdlib_tests/test_recursion.py::test_dictrecursion [32mPASSED[0m[31m [ 57%][0m tests/stdlib_tests/test_recursion.py::test_defaultrecursion [32mPASSED[0m[31m [ 58%][0m tests/stdlib_tests/test_recursion.py::test_highly_nested_objects_decoding [32mPASSED[0m[31m [ 59%][0m tests/stdlib_tests/test_recursion.py::test_highly_nested_objects_encoding [32mPASSED[0m[31m [ 59%][0m tests/stdlib_tests/test_recursion.py::test_endless_recursion [32mPASSED[0m[31m [ 60%][0m tests/stdlib_tests/test_separators.py::test_separators [32mPASSED[0m[31m [ 61%][0m tests/stdlib_tests/test_separators.py::test_illegal_separators [32mPASSED[0m[31m [ 61%][0m tests/stdlib_tests/test_unicode.py::test_encoding3 [32mPASSED[0m[31m [ 62%][0m tests/stdlib_tests/test_unicode.py::test_encoding4 [32mPASSED[0m[31m [ 62%][0m tests/stdlib_tests/test_unicode.py::test_encoding5 [32mPASSED[0m[31m [ 63%][0m tests/stdlib_tests/test_unicode.py::test_encoding6 [32mPASSED[0m[31m [ 64%][0m tests/stdlib_tests/test_unicode.py::test_big_unicode_encode [32mPASSED[0m[31m [ 64%][0m tests/stdlib_tests/test_unicode.py::test_big_unicode_decode [32mPASSED[0m[31m [ 65%][0m tests/stdlib_tests/test_unicode.py::test_unicode_decode [32mPASSED[0m[31m [ 66%][0m tests/stdlib_tests/test_unicode.py::test_unicode_preservation [32mPASSED[0m[31m [ 66%][0m tests/stdlib_tests/test_unicode.py::test_bytes_encode [32mPASSED[0m[31m [ 67%][0m tests/stdlib_tests/test_unicode.py::test_bytes_decode [32mPASSED[0m[31m [ 68%][0m tests/stdlib_tests/test_unicode.py::test_object_pairs_hook_with_unicode [32mPASSED[0m[31m [ 68%][0m tests/test_custom_class.py::test_custom_class [32mPASSED[0m[31m [ 69%][0m tests/test_custom_encoders.py::test_decimal_float [32mPASSED[0m[31m [ 70%][0m tests/test_custom_encoders.py::test_decimal_str [32mPASSED[0m[31m [ 70%][0m tests/test_custom_encoders.py::test_fraction_float [32mPASSED[0m[31m [ 71%][0m tests/test_custom_encoders.py::test_fraction_str [32mPASSED[0m[31m [ 72%][0m tests/test_custom_encoders.py::test_datetime_float [32mPASSED[0m[31m [ 72%][0m tests/test_custom_encoders.py::test_datetime_str [32mPASSED[0m[31m [ 73%][0m tests/test_custom_encoders.py::test_datetime_tuple [32mPASSED[0m[31m [ 74%][0m tests/test_custom_encoders.py::test_timedelta_float [32mPASSED[0m[31m [ 74%][0m tests/test_custom_encoders.py::test_date_str [32mPASSED[0m[31m [ 75%][0m tests/test_custom_encoders.py::test_date_tuple [32mPASSED[0m[31m [ 75%][0m tests/test_custom_encoders.py::test_time_float [32mPASSED[0m[31m [ 76%][0m tests/test_custom_encoders.py::test_time_str [32mPASSED[0m[31m [ 77%][0m tests/test_custom_encoders.py::test_time_tuple [32mPASSED[0m[31m [ 77%][0m tests/test_custom_encoders.py::test_named_tuple [33mXFAIL[0m (Not implement...)[31m [ 78%][0m tests/test_load.py::test_bools [32mPASSED[0m[31m [ 79%][0m tests/test_load.py::test_none [32mPASSED[0m[31m [ 79%][0m tests/test_load.py::test_int[1] [32mPASSED[0m[31m [ 80%][0m tests/test_load.py::test_int[1234] [32mPASSED[0m[31m [ 81%][0m tests/test_load.py::test_int[12340000000] [32mPASSED[0m[31m [ 81%][0m tests/test_load.py::test_int[-1] [32mPASSED[0m[31m [ 82%][0m tests/test_load.py::test_int[-1234] [32mPASSED[0m[31m [ 83%][0m tests/test_load.py::test_int[-12340000000] [32mPASSED[0m[31m [ 83%][0m tests/test_load.py::test_float[1.0] [32mPASSED[0m[31m [ 84%][0m tests/test_load.py::test_float[1234.0] [32mPASSED[0m[31m [ 85%][0m tests/test_load.py::test_float[12340000000.0] [32mPASSED[0m[31m [ 85%][0m tests/test_load.py::test_float[-1.0] [32mPASSED[0m[31m [ 86%][0m tests/test_load.py::test_float[-1234.0] [32mPASSED[0m[31m [ 87%][0m tests/test_load.py::test_float[-12340000000.0] [32mPASSED[0m[31m [ 87%][0m tests/test_load.py::test_float[1.005] [32mPASSED[0m[31m [ 88%][0m tests/test_load.py::test_float[1234.005] [32mPASSED[0m[31m [ 88%][0m tests/test_load.py::test_float[12340000000.005] [32mPASSED[0m[31m [ 89%][0m tests/test_load.py::test_float[-1.005] [32mPASSED[0m[31m [ 90%][0m tests/test_load.py::test_float[-1234.005] [32mPASSED[0m[31m [ 90%][0m tests/test_load.py::test_float[-12340000000.005] [32mPASSED[0m[31m [ 91%][0m tests/test_load.py::test_write_then_read[tuple] [32mPASSED[0m[31m [ 92%][0m tests/test_load.py::test_write_then_read[list] [32mPASSED[0m[31m [ 92%][0m tests/test_load.py::test_write_then_read[dict] [32mPASSED[0m[31m [ 93%][0m tests/test_load.py::test_write_then_read[egg and bacon-egg and bacon] [32mPASSED[0m[31m [ 94%][0m tests/test_load.py::test_write_then_read[egg sausage and bacon-egg sausage and bacon] [32mPASSED[0m[31m [ 94%][0m tests/test_load.py::test_write_then_read[egg and spam-egg and spam] [32mPASSED[0m[31m [ 95%][0m tests/test_load.py::test_write_then_read[egg bacon and spam-egg bacon and spam] [32mPASSED[0m[31m [ 96%][0m tests/test_load.py::test_dict_failure[dictionary0] [33mXFAIL[0m[31m [ 96%][0m tests/test_load.py::test_dict_failure[dictionary1] [33mXFAIL[0m[31m [ 97%][0m tests/test_load.py::test_tuple_failure [33mXFAIL[0m[31m [ 98%][0m tests/test_multiple_files.py::test_multiple_files [32mPASSED[0m[31m [ 98%][0m tests/test_overloading.py::test_overloading [32mPASSED[0m[31m [ 99%][0m tests/test_unregister.py::test_unregister [32mPASSED[0m[31m [100%][0m =================================== FAILURES =================================== [31m[1m________________ test_unexpected_data[[42,]-Expecting value-4] _________________[0m data = '[42,]', msg = 'Expecting value', idx = 4 @pytest.mark.parametrize( "data, msg, idx", [ ("[,", "Unexpected ','" if PYPY else "Expecting value", 1), ('{"spam":[}', unexpected_right_brace, 9), ("[42:", unexpected_colon, 3), ('[42 "spam"', "Unexpected '\"' when decoding array" if PYPY else "Expecting ',' delimiter", 4), ("[42,]", "Unexpected ']'" if PYPY else "Expecting value", 4), ('{"spam":[42}', "Unexpected '}' when decoding array" if PYPY else "Expecting ',' delimiter", 11), ('["]', "Unterminated string starting at", 1), ('["spam":', unexpected_colon, 7), ('["spam",]', "Unexpected ']'" if PYPY else "Expecting value", 8), ("{:", property_name_string, 1), ("{,", property_name_string, 1), ("{42", property_name_string, 1), ("[{]", property_name_string, 2), ('{"spam",', missing_colon, 7), ('{"spam"}', missing_colon, 7), ('[{"spam"]', missing_colon, 8), ('{"spam":}', unexpected_right_brace, 8), ('[{"spam":]', "Unexpected ']'" if PYPY else "Expecting value", 9), ( '{"spam":42 "ham"', "Unexpected '\"' when decoding object" if PYPY else "Expecting ',' delimiter", 11 ), ('[{"spam":42]', "Unexpected ']' when decoding object" if PYPY else "Expecting ',' delimiter", 11), ('{"spam":42,}', property_name_string, 11), ] ) def test_unexpected_data(data: str, msg: str, idx: int): > __test_invalid_input(data, msg, idx) [1m[31mtests/stdlib_tests/test_fail.py[0m:189: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ data = '[42,]', msg = 'Expecting value', idx = 4 def __test_invalid_input(data: str, msg: str, idx: int) -> None: with pytest.raises(sdjson.JSONDecodeError) as err: sdjson.loads(data) if PYPY: assert err.value.msg.startswith(msg) # Fix for varying messages between PyPy versions else: > assert err.value.msg == msg [1m[31mE AssertionError: assert 'Illegal trai... end of array' == 'Expecting value'[0m [1m[31mE [0m [1m[31mE - Expecting value[0m [1m[31mE + Illegal trailing comma before end of array[0m [1m[31mtests/stdlib_tests/test_fail.py[0m:116: AssertionError [31m[1m______________ test_unexpected_data[["spam",]-Expecting value-8] _______________[0m data = '["spam",]', msg = 'Expecting value', idx = 8 @pytest.mark.parametrize( "data, msg, idx", [ ("[,", "Unexpected ','" if PYPY else "Expecting value", 1), ('{"spam":[}', unexpected_right_brace, 9), ("[42:", unexpected_colon, 3), ('[42 "spam"', "Unexpected '\"' when decoding array" if PYPY else "Expecting ',' delimiter", 4), ("[42,]", "Unexpected ']'" if PYPY else "Expecting value", 4), ('{"spam":[42}', "Unexpected '}' when decoding array" if PYPY else "Expecting ',' delimiter", 11), ('["]', "Unterminated string starting at", 1), ('["spam":', unexpected_colon, 7), ('["spam",]', "Unexpected ']'" if PYPY else "Expecting value", 8), ("{:", property_name_string, 1), ("{,", property_name_string, 1), ("{42", property_name_string, 1), ("[{]", property_name_string, 2), ('{"spam",', missing_colon, 7), ('{"spam"}', missing_colon, 7), ('[{"spam"]', missing_colon, 8), ('{"spam":}', unexpected_right_brace, 8), ('[{"spam":]', "Unexpected ']'" if PYPY else "Expecting value", 9), ( '{"spam":42 "ham"', "Unexpected '\"' when decoding object" if PYPY else "Expecting ',' delimiter", 11 ), ('[{"spam":42]', "Unexpected ']' when decoding object" if PYPY else "Expecting ',' delimiter", 11), ('{"spam":42,}', property_name_string, 11), ] ) def test_unexpected_data(data: str, msg: str, idx: int): > __test_invalid_input(data, msg, idx) [1m[31mtests/stdlib_tests/test_fail.py[0m:189: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ data = '["spam",]', msg = 'Expecting value', idx = 8 def __test_invalid_input(data: str, msg: str, idx: int) -> None: with pytest.raises(sdjson.JSONDecodeError) as err: sdjson.loads(data) if PYPY: assert err.value.msg.startswith(msg) # Fix for varying messages between PyPy versions else: > assert err.value.msg == msg [1m[31mE AssertionError: assert 'Illegal trai... end of array' == 'Expecting value'[0m [1m[31mE [0m [1m[31mE - Expecting value[0m [1m[31mE + Illegal trailing comma before end of array[0m [1m[31mtests/stdlib_tests/test_fail.py[0m:116: AssertionError [31m[1m_ test_unexpected_data[{"spam":42,}-Expecting property name enclosed in double quotes-11] _[0m data = '{"spam":42,}', msg = 'Expecting property name enclosed in double quotes' idx = 11 @pytest.mark.parametrize( "data, msg, idx", [ ("[,", "Unexpected ','" if PYPY else "Expecting value", 1), ('{"spam":[}', unexpected_right_brace, 9), ("[42:", unexpected_colon, 3), ('[42 "spam"', "Unexpected '\"' when decoding array" if PYPY else "Expecting ',' delimiter", 4), ("[42,]", "Unexpected ']'" if PYPY else "Expecting value", 4), ('{"spam":[42}', "Unexpected '}' when decoding array" if PYPY else "Expecting ',' delimiter", 11), ('["]', "Unterminated string starting at", 1), ('["spam":', unexpected_colon, 7), ('["spam",]', "Unexpected ']'" if PYPY else "Expecting value", 8), ("{:", property_name_string, 1), ("{,", property_name_string, 1), ("{42", property_name_string, 1), ("[{]", property_name_string, 2), ('{"spam",', missing_colon, 7), ('{"spam"}', missing_colon, 7), ('[{"spam"]', missing_colon, 8), ('{"spam":}', unexpected_right_brace, 8), ('[{"spam":]', "Unexpected ']'" if PYPY else "Expecting value", 9), ( '{"spam":42 "ham"', "Unexpected '\"' when decoding object" if PYPY else "Expecting ',' delimiter", 11 ), ('[{"spam":42]', "Unexpected ']' when decoding object" if PYPY else "Expecting ',' delimiter", 11), ('{"spam":42,}', property_name_string, 11), ] ) def test_unexpected_data(data: str, msg: str, idx: int): > __test_invalid_input(data, msg, idx) [1m[31mtests/stdlib_tests/test_fail.py[0m:189: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ data = '{"spam":42,}', msg = 'Expecting property name enclosed in double quotes' idx = 11 def __test_invalid_input(data: str, msg: str, idx: int) -> None: with pytest.raises(sdjson.JSONDecodeError) as err: sdjson.loads(data) if PYPY: assert err.value.msg.startswith(msg) # Fix for varying messages between PyPy versions else: > assert err.value.msg == msg [1m[31mE AssertionError: assert 'Illegal trai...end of object' == 'Expecting pr...double quotes'[0m [1m[31mE [0m [1m[31mE - Expecting property name enclosed in double quotes[0m [1m[31mE + Illegal trailing comma before end of object[0m [1m[31mtests/stdlib_tests/test_fail.py[0m:116: AssertionError ============================= slowest 25 durations ============================= 0.10s call .pybuild/cpython3_3.13_sdjson/build/tests/stdlib_tests/test_unicode.py::test_unicode_decode 0.09s call .pybuild/cpython3_3.13_sdjson/build/tests/stdlib_tests/test_recursion.py::test_highly_nested_objects_encoding 0.01s call .pybuild/cpython3_3.13_sdjson/build/tests/stdlib_tests/test_recursion.py::test_highly_nested_objects_decoding (22 durations < 0.005s hidden. Use -vv to show these durations.) [36m[1m=========================== short test summary info ============================[0m [31mFAILED[0m tests/stdlib_tests/test_fail.py::[1mtest_unexpected_data[[42,]-Expecting value-4][0m - AssertionError: assert 'Illegal trai... end of array' == 'Expecting value' [31mFAILED[0m tests/stdlib_tests/test_fail.py::[1mtest_unexpected_data[["spam",]-Expecting value-8][0m - AssertionError: assert 'Illegal trai... end of array' == 'Expecting value' [31mFAILED[0m tests/stdlib_tests/test_fail.py::[1mtest_unexpected_data[{"spam":42,}-Expecting property name enclosed in double quotes-11][0m - AssertionError: assert 'Illegal trai...end of object' == 'Expecting pr...do... [31m=================== [31m[1m3 failed[0m, [32m147 passed[0m, [33m4 xfailed[0m[31m in 0.61s[0m[31m ===================[0m E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_sdjson/build; python3.13 -m pytest -v --ignore=tests/test_protocols.py I: pybuild pybuild:308: ln -s test_overloading_ tests/test_overloading E: pybuild pybuild:389: test: plugin pyproject failed with: [('/<<PKGBUILDDIR>>/tests/test_overloading/test_overloading_', '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_sdjson/build/tests/test_overloading/test_overloading_', "[Errno 40] Too many levels of symbolic links: '/<<PKGBUILDDIR>>/tests/test_overloading/test_overloading_'"), ('/<<PKGBUILDDIR>>/tests/test_overloading_/test_overloading_', '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_sdjson/build/tests/test_overloading_/test_overloading_', "[Errno 40] Too many levels of symbolic links: '/<<PKGBUILDDIR>>/tests/test_overloading_/test_overloading_'")] dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 3.12" returned exit code 13 make: *** [debian/rules:11: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 -------------------------------------------------------------------------------- Build finished at 2024-09-19T07:47:55Z If required, the full build log is available here (for the next 30 days): https://debusine.debian.net/artifact/788826/ This bug has been filed at "normal" severity, as we haven't started the transition to add 3.13 as a supported version, yet. This will be raised to RC as soon as that happens, hopefully well before trixie. Thanks, Stefano

