From d355defe455e9aa16143b58498264eac1653cde1 Mon Sep 17 00:00:00 2001 From: Hans Kirchner Date: Tue, 2 Jan 2018 13:51:17 +0100 Subject: [PATCH] Add parameter checks for stringify_set --- vladiate/test/test_validators.py | 8 ++++++++ vladiate/validators.py | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/vladiate/test/test_validators.py b/vladiate/test/test_validators.py index b6d7714..31a5de1 100644 --- a/vladiate/test/test_validators.py +++ b/vladiate/test/test_validators.py @@ -224,6 +224,14 @@ def test_all_validators_support_empty_ok(validator_class, args): ({'A', 'B', 'C'}, 2, "{'A', 'B'} (1 more suppressed)"), ({'A', 'B', 'C'}, 0, "{} (3 more suppressed)"), ({}, 5, "{}"), + ({}, 0, "{}"), ]) def test_stringify_set(a_set, max_len, stringified): assert stringify_set(a_set, max_len) == stringified + + +def test_stringify_set_invalid_params(): + with pytest.raises(ValueError): + stringify_set({}, -1, 10) + with pytest.raises(ValueError): + stringify_set({}, 10, -1) diff --git a/vladiate/validators.py b/vladiate/validators.py index 162c24c..b1b778c 100644 --- a/vladiate/validators.py +++ b/vladiate/validators.py @@ -219,6 +219,11 @@ def stringify_set(a_set, max_len, max_sort_size=8192): Large sets won't be sorted for performance reasons. This may result in an arbitrary ordering in the returned string. ''' + if max_len < 0: + raise ValueError("max_len must be non-negative: {}".format(max_len)) + if max_sort_size < 0: + raise ValueError( + "max_sort_size must be non-negative: {}".format(max_sort_size)) # Don't convert `a_set` to a list for performance reasons text = "{{{}}}".format(", ".join( "'{}'".format(value) for value in islice(