--- Begin Message ---
Source: python-sdjson
Version: 0.5.0-1
Severity: normal
User: debian-pyt...@lists.debian.org
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
--- End Message ---