@@ -29,121 +29,133 @@ using namespace utility;
29
29
30
30
namespace tests { namespace functional { namespace json_tests {
31
31
32
+ #ifndef VERIFY_JSON_THROWS
33
+ #define VERIFY_JSON_THROWS (parseString ) \
34
+ { \
35
+ std::error_code ec_; \
36
+ VERIFY_THROWS (json::value::parse (parseString), json::json_exception); \
37
+ auto value_ = json::value::parse (parseString, ec_); \
38
+ VERIFY_IS_TRUE (ec_.value () > 0 ); \
39
+ VERIFY_IS_TRUE (value_.is_null ()); \
40
+ }
41
+
42
+ #endif
43
+
32
44
SUITE (negative_parsing_tests)
33
45
{
34
46
35
47
TEST (string_t )
36
48
{
37
- VERIFY_THROWS ( json::value::parse ( U (" \"\\ k\" " )), json::json_exception );
38
- VERIFY_THROWS ( json::value::parse ( U (" \" \" \" " )), json::json_exception );
39
- VERIFY_THROWS ( json::value::parse ( U (" \"\\ u23A\" " )), json::json_exception );
40
- VERIFY_THROWS ( json::value::parse ( U (" \"\\ uXY1A\" " )), json::json_exception );
41
- VERIFY_THROWS ( json::value::parse ( U (" \" asdf" )), json::json_exception );
42
- VERIFY_THROWS ( json::value::parse ( U (" \\ asdf" )), json::json_exception );
43
- VERIFY_THROWS ( json::value::parse ( U (" \"\"\"\" " )), json::json_exception );
49
+ VERIFY_JSON_THROWS ( U (" \"\\ k\" " ));
50
+ VERIFY_JSON_THROWS ( U (" \" \" \" " ));
51
+ VERIFY_JSON_THROWS ( U (" \"\\ u23A\" " ));
52
+ VERIFY_JSON_THROWS ( U (" \"\\ uXY1A\" " ));
53
+ VERIFY_JSON_THROWS ( U (" \" asdf" ));
54
+ VERIFY_JSON_THROWS ( U (" \\ asdf" ));
55
+ VERIFY_JSON_THROWS ( U (" \"\"\"\" " ));
44
56
45
57
// '\', '"', and control characters must be escaped (0x1F and below).
46
- VERIFY_THROWS ( json::value::parse ( U (" \"\\\" " )), json::json_exception );
47
- VERIFY_THROWS ( json::value::parse ( U (" \" " )), json::json_exception );
58
+ VERIFY_JSON_THROWS ( U (" \"\\\" " ));
59
+ VERIFY_JSON_THROWS ( U (" \" " ));
48
60
utility::string_t str (U (" \" " ));
49
61
str.append (1 , 0x1F );
50
62
str.append (U (" \" " ));
51
- VERIFY_THROWS ( json::value::parse ( str.c_str ()), json::json_exception );
63
+ VERIFY_JSON_THROWS ( str.c_str ());
52
64
}
53
65
54
66
TEST (numbers)
55
67
{
56
- VERIFY_THROWS ( json::value::parse ( U (" -" )), json::json_exception );
57
- VERIFY_THROWS ( json::value::parse ( U (" -." )), json::json_exception );
58
- VERIFY_THROWS ( json::value::parse ( U (" -e1" )), json::json_exception );
59
- VERIFY_THROWS ( json::value::parse ( U (" -1e" )), json::json_exception );
60
- VERIFY_THROWS ( json::value::parse ( U (" +1.1" )), json::json_exception );
61
- VERIFY_THROWS ( json::value::parse ( U (" 1.1 E" )), json::json_exception );
62
- VERIFY_THROWS ( json::value::parse ( U (" 1.1E-" )), json::json_exception );
63
- VERIFY_THROWS ( json::value::parse ( U (" 1.1E.1" )), json::json_exception );
64
- VERIFY_THROWS ( json::value::parse ( U (" 1.1E1.1" )), json::json_exception );
65
- VERIFY_THROWS ( json::value::parse ( U (" 001.1" )), json::json_exception );
66
- VERIFY_THROWS ( json::value::parse ( U (" -.100" )), json::json_exception );
67
- VERIFY_THROWS ( json::value::parse ( U (" -.001" )), json::json_exception );
68
- VERIFY_THROWS ( json::value::parse ( U (" .1" )), json::json_exception );
69
- VERIFY_THROWS ( json::value::parse ( U (" 0.1.1" )), json::json_exception );
68
+ VERIFY_JSON_THROWS ( U (" -" ));
69
+ VERIFY_JSON_THROWS ( U (" -." ));
70
+ VERIFY_JSON_THROWS ( U (" -e1" ));
71
+ VERIFY_JSON_THROWS ( U (" -1e" ));
72
+ VERIFY_JSON_THROWS ( U (" +1.1" ));
73
+ VERIFY_JSON_THROWS ( U (" 1.1 E" ));
74
+ VERIFY_JSON_THROWS ( U (" 1.1E-" ));
75
+ VERIFY_JSON_THROWS ( U (" 1.1E.1" ));
76
+ VERIFY_JSON_THROWS ( U (" 1.1E1.1" ));
77
+ VERIFY_JSON_THROWS ( U (" 001.1" ));
78
+ VERIFY_JSON_THROWS ( U (" -.100" ));
79
+ VERIFY_JSON_THROWS ( U (" -.001" ));
80
+ VERIFY_JSON_THROWS ( U (" .1" ));
81
+ VERIFY_JSON_THROWS ( U (" 0.1.1" ));
70
82
}
71
83
72
84
// TFS 535589
73
- json::value parse_help (utility::string_t str)
85
+ void parse_help (utility::string_t str)
74
86
{
75
87
utility::stringstream_t ss1;
76
88
ss1 << str;
77
- return json::value::parse (ss1);
89
+ VERIFY_JSON_THROWS (ss1. str () );
78
90
}
79
91
80
92
TEST (objects)
81
93
{
82
- VERIFY_THROWS ( json::value::parse ( U (" }" )), json::json_exception );
83
- VERIFY_THROWS ( parse_help (U (" {" )), json::json_exception );
84
- VERIFY_THROWS ( parse_help (U (" { 1, 10 }" )), json::json_exception );
85
- VERIFY_THROWS ( parse_help (U (" { : }" )), json::json_exception );
86
- VERIFY_THROWS ( parse_help (U (" { \" }" )), json::json_exception );
87
- VERIFY_THROWS ( json::value::parse ( U (" {" )), json::json_exception );
88
- VERIFY_THROWS ( json::value::parse ( U (" { 1" )), json::json_exception );
89
- VERIFY_THROWS ( json::value::parse ( U (" { \" }" )), json::json_exception );
90
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" :" )), json::json_exception );
91
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" :}" )), json::json_exception );
92
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" : true" )), json::json_exception );
93
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" : true false" )), json::json_exception );
94
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" : true :false" )), json::json_exception );
95
- VERIFY_THROWS ( json::value::parse ( U (" {\" 2\" : false,}" )), json::json_exception );
94
+ VERIFY_JSON_THROWS ( U (" }" ));
95
+ parse_help (U (" {" ));
96
+ parse_help (U (" { 1, 10 }" ));
97
+ parse_help (U (" { : }" ));
98
+ parse_help (U (" { \" }" ));
99
+ VERIFY_JSON_THROWS ( U (" {" ));
100
+ VERIFY_JSON_THROWS ( U (" { 1" ));
101
+ VERIFY_JSON_THROWS ( U (" { \" }" ));
102
+ VERIFY_JSON_THROWS ( U (" {\" 2\" :" ));
103
+ VERIFY_JSON_THROWS ( U (" {\" 2\" :}" ));
104
+ VERIFY_JSON_THROWS ( U (" {\" 2\" : true" ));
105
+ VERIFY_JSON_THROWS ( U (" {\" 2\" : true false" ));
106
+ VERIFY_JSON_THROWS ( U (" {\" 2\" : true :false" ));
107
+ VERIFY_JSON_THROWS ( U (" {\" 2\" : false,}" ));
96
108
}
97
109
98
110
TEST (arrays)
99
111
{
100
- VERIFY_THROWS ( json::value::parse ( U (" ]" )), json::json_exception );
101
- VERIFY_THROWS ( json::value::parse ( U (" [" )), json::json_exception );
102
- VERIFY_THROWS ( json::value::parse ( U (" [ 1" )), json::json_exception );
103
- VERIFY_THROWS ( json::value::parse ( U (" [ 1," )), json::json_exception );
104
- VERIFY_THROWS ( json::value::parse ( U (" [ 1,]" )), json::json_exception );
105
- VERIFY_THROWS ( json::value::parse ( U (" [ 1 2]" )), json::json_exception );
106
- VERIFY_THROWS ( json::value::parse ( U (" [ \" 1\" : 2]" )), json::json_exception );
107
- VERIFY_THROWS ( parse_help (U (" [,]" )), json::json_exception );
108
- VERIFY_THROWS ( parse_help (U (" [ \" ]" )), json::json_exception );
109
- VERIFY_THROWS ( parse_help (U (" [\" 2\" , false,]" )), json::json_exception );
112
+ VERIFY_JSON_THROWS ( U (" ]" ));
113
+ VERIFY_JSON_THROWS ( U (" [" ));
114
+ VERIFY_JSON_THROWS ( U (" [ 1" ));
115
+ VERIFY_JSON_THROWS ( U (" [ 1," ));
116
+ VERIFY_JSON_THROWS ( U (" [ 1,]" ));
117
+ VERIFY_JSON_THROWS ( U (" [ 1 2]" ));
118
+ VERIFY_JSON_THROWS ( U (" [ \" 1\" : 2]" ));
119
+ parse_help (U (" [,]" ));
120
+ parse_help (U (" [ \" ]" ));
121
+ parse_help (U (" [\" 2\" , false,]" ));
110
122
}
111
123
112
124
TEST (literals_not_lower_case)
113
125
{
114
- VERIFY_THROWS ( json::value::parse ( U (" NULL" )), json::json_exception );
115
- VERIFY_THROWS ( json::value::parse ( U (" FAlse" )), json::json_exception );
116
- VERIFY_THROWS ( json::value::parse ( U (" TRue" )), json::json_exception );
126
+ VERIFY_JSON_THROWS ( U (" NULL" ));
127
+ VERIFY_JSON_THROWS ( U (" FAlse" ));
128
+ VERIFY_JSON_THROWS ( U (" TRue" ));
117
129
}
118
130
119
131
TEST (incomplete_literals)
120
132
{
121
- VERIFY_THROWS ( json::value::parse ( U (" nul" )), json::json_exception );
122
- VERIFY_THROWS ( json::value::parse ( U (" fal" )), json::json_exception );
123
- VERIFY_THROWS ( json::value::parse ( U (" tru" )), json::json_exception );
133
+ VERIFY_JSON_THROWS ( U (" nul" ));
134
+ VERIFY_JSON_THROWS ( U (" fal" ));
135
+ VERIFY_JSON_THROWS ( U (" tru" ));
124
136
}
125
137
126
138
// TFS#501321
127
139
TEST (exception_string)
128
140
{
129
141
utility::string_t json_ip_str=U (" " );
130
- VERIFY_THROWS ( json::value::parse ( json_ip_str), json::json_exception );
142
+ VERIFY_JSON_THROWS ( json_ip_str);
131
143
}
132
144
133
145
TEST (boundary_chars)
134
146
{
135
147
utility::string_t str (U (" \" " ));
136
148
str.append (1 , 0x1F );
137
149
str.append (U (" \" " ));
138
- VERIFY_THROWS ( parse_help (str), json::json_exception );
150
+ parse_help (str);
139
151
}
140
152
141
153
TEST (stream_left_over_chars)
142
154
{
143
155
std::stringbuf buf;
144
156
buf.sputn (" [false]false" , 12 );
145
157
std::istream stream (&buf);
146
- VERIFY_THROWS (json::value::parse (stream), json::json_exception);
158
+ VERIFY_THROWS (web:: json::value::parse (stream), json::json_exception);
147
159
}
148
160
149
161
// Test using Windows only API.
@@ -153,7 +165,7 @@ TEST(wstream_left_over_chars)
153
165
std::wstringbuf buf;
154
166
buf.sputn (L" [false]false" , 12 );
155
167
std::wistream stream (&buf);
156
- VERIFY_THROWS (json::value::parse (stream), json::json_exception);
168
+ VERIFY_THROWS (web:: json::value::parse (stream), json::json_exception);
157
169
}
158
170
#endif
159
171
@@ -168,7 +180,7 @@ void garbage_impl(wchar_t ch)
168
180
for (int i = 0 ; i < 2500 ; i++)
169
181
ss.push_back (static_cast <char_t >(dist (eng)));
170
182
171
- VERIFY_THROWS ( json::value::parse ( ss.c_str ()), json::json_exception );
183
+ VERIFY_JSON_THROWS ( ss.c_str ());
172
184
}
173
185
174
186
TEST (garbage_1)
0 commit comments