1- from typesystem import Integer , Object , Schema
1+ import pytest
2+
3+ from typesystem import Integer , Object , Schema , ValidationError
24from typesystem .base import Message , Position
35from typesystem .tokenize .tokenize_json import validate_json
46
57
68def test_validate_json ():
7- value , messages = validate_json ("" )
8- assert value is None
9- assert messages == [
10- Message (
11- text = "No content." ,
12- code = "no_content" ,
13- position = Position (line_no = 1 , column_no = 1 , char_index = 0 ),
14- )
15- ]
16- assert (
17- repr (messages [0 ])
18- == "Message(text='No content.', code='no_content', position=Position(line_no=1, column_no=1, char_index=0))"
19- )
20-
21- value , messages = validate_json ('{"a": 123}' )
22- assert value == {"a" : 123 }
23- assert messages == []
24-
25- value , messages = validate_json (b'{"a": 123}' )
26- assert value == {"a" : 123 }
27- assert messages == []
28-
29- value , messages = validate_json ('{"a" 123}' )
30- assert value is None
31- assert messages == [
32- Message (
33- text = "Expecting ':' delimiter." ,
34- code = "parse_error" ,
35- position = Position (line_no = 1 , column_no = 6 , char_index = 5 ),
36- )
37- ]
9+ validator = Object (properties = Integer ())
10+ text = '{\n "a": "123",\n "b": "456"}'
11+ value = validate_json (text , validator = validator )
12+ assert value == {"a" : 123 , "b" : 456 }
3813
3914 validator = Object (properties = Integer ())
4015 text = '{\n "a": "123",\n "b": "abc"}'
41- value , messages = validate_json (text , validator = validator )
42- assert value is None
43- assert messages == [
16+
17+ with pytest .raises (ValidationError ) as exc_info :
18+ validate_json (text , validator = validator )
19+ exc = exc_info .value
20+
21+ assert exc .messages () == [
4422 Message (
4523 text = "Must be a number." ,
4624 code = "type" ,
@@ -50,24 +28,19 @@ def test_validate_json():
5028 )
5129 ]
5230 assert (
53- repr (messages [0 ])
31+ repr (exc . messages () [0 ])
5432 == "Message(text='Must be a number.', code='type', index=['b'], start_position=Position(line_no=3, column_no=10, char_index=27), end_position=Position(line_no=3, column_no=14, char_index=31))"
5533 )
5634
57- validator = Object (properties = Integer ())
58- text = '{\n "a": "123",\n "b": "456"}'
59- value , messages = validate_json (text , validator = validator )
60- assert value == {"a" : 123 , "b" : 456 }
61- assert messages == []
62-
6335 class Validator (Schema ):
6436 a = Integer ()
6537 b = Integer ()
6638
6739 text = '{\n "a": "123",\n "b": "abc"}'
68- value , messages = validate_json (text , validator = Validator )
69- assert value is None
70- assert messages == [
40+ with pytest .raises (ValidationError ) as exc_info :
41+ validate_json (text , validator = Validator )
42+ exc = exc_info .value
43+ assert exc .messages () == [
7144 Message (
7245 text = "Must be a number." ,
7346 code = "type" ,
@@ -78,9 +51,10 @@ class Validator(Schema):
7851 ]
7952
8053 text = '{"a": "123"}'
81- value , messages = validate_json (text , validator = Validator )
82- assert value is None
83- assert messages == [
54+ with pytest .raises (ValidationError ) as exc_info :
55+ validate_json (text , validator = Validator )
56+ exc = exc_info .value
57+ assert exc .messages () == [
8458 Message (
8559 text = "The field 'b' is required." ,
8660 code = "required" ,
0 commit comments