Tidy-up in json test module (#8431)

* Switch json testing 'roundTrip()' to use FixedBufferStream, improve error handling, remove comptime from param

* Add 'try' to calls to roundTrip() that can now return an error

* Remove comptime from params in json testing, replace expect(false) with letting error propagate

* Add 'try' to calls to ok() that can now return an error

Co-authored-by: Lewis Gaul <legaul@cisco.com>
This commit is contained in:
Lewis Gaul
2021-04-05 00:27:47 +01:00
committed by GitHub
parent c9ffb6f734
commit 7302b096bd

View File

@@ -12,7 +12,7 @@ const std = @import("../std.zig");
const json = std.json;
const testing = std.testing;
fn testNonStreaming(comptime s: []const u8) !void {
fn testNonStreaming(s: []const u8) !void {
var p = json.Parser.init(testing.allocator, false);
defer p.deinit();
@@ -20,32 +20,32 @@ fn testNonStreaming(comptime s: []const u8) !void {
defer tree.deinit();
}
fn ok(comptime s: []const u8) void {
fn ok(s: []const u8) !void {
testing.expect(json.validate(s));
testNonStreaming(s) catch testing.expect(false);
try testNonStreaming(s);
}
fn err(comptime s: []const u8) void {
fn err(s: []const u8) void {
testing.expect(!json.validate(s));
testNonStreaming(s) catch return;
testing.expect(false);
}
fn utf8Error(comptime s: []const u8) void {
fn utf8Error(s: []const u8) void {
testing.expect(!json.validate(s));
testing.expectError(error.InvalidUtf8Byte, testNonStreaming(s));
}
fn any(comptime s: []const u8) void {
fn any(s: []const u8) void {
_ = json.validate(s);
testNonStreaming(s) catch {};
}
fn anyStreamingErrNonStreaming(comptime s: []const u8) void {
fn anyStreamingErrNonStreaming(s: []const u8) void {
_ = json.validate(s);
testNonStreaming(s) catch return;
@@ -81,7 +81,7 @@ test "y_trailing_comma_after_empty" {
////////////////////////////////////////////////////////////////////////////////////////////////////
test "y_array_arraysWithSpaces" {
ok(
try ok(
\\[[] ]
);
}
@@ -111,7 +111,7 @@ test "y_array_false" {
}
test "y_array_heterogeneous" {
ok(
try ok(
\\[null, 1, "1", {}]
);
}
@@ -123,14 +123,14 @@ test "y_array_null" {
}
test "y_array_with_1_and_newline" {
ok(
try ok(
\\[1
\\]
);
}
test "y_array_with_leading_space" {
ok(
try ok(
\\ [1]
);
}
@@ -142,47 +142,47 @@ test "y_array_with_several_null" {
}
test "y_array_with_trailing_space" {
ok("[2] ");
try ok("[2] ");
}
test "y_number_0e+1" {
ok(
try ok(
\\[0e+1]
);
}
test "y_number_0e1" {
ok(
try ok(
\\[0e1]
);
}
test "y_number_after_space" {
ok(
try ok(
\\[ 4]
);
}
test "y_number_double_close_to_zero" {
ok(
try ok(
\\[-0.000000000000000000000000000000000000000000000000000000000000000000000000000001]
);
}
test "y_number_int_with_exp" {
ok(
try ok(
\\[20e1]
);
}
test "y_number" {
ok(
try ok(
\\[123e65]
);
}
test "y_number_minus_zero" {
ok(
try ok(
\\[-0]
);
}
@@ -200,49 +200,49 @@ test "y_number_negative_one" {
}
test "y_number_negative_zero" {
ok(
try ok(
\\[-0]
);
}
test "y_number_real_capital_e" {
ok(
try ok(
\\[1E22]
);
}
test "y_number_real_capital_e_neg_exp" {
ok(
try ok(
\\[1E-2]
);
}
test "y_number_real_capital_e_pos_exp" {
ok(
try ok(
\\[1E+2]
);
}
test "y_number_real_exponent" {
ok(
try ok(
\\[123e45]
);
}
test "y_number_real_fraction_exponent" {
ok(
try ok(
\\[123.456e78]
);
}
test "y_number_real_neg_exp" {
ok(
try ok(
\\[1e-2]
);
}
test "y_number_real_pos_exponent" {
ok(
try ok(
\\[1e+2]
);
}
@@ -254,7 +254,7 @@ test "y_number_simple_int" {
}
test "y_number_simple_real" {
ok(
try ok(
\\[123.456789]
);
}
@@ -266,13 +266,13 @@ test "y_object_basic" {
}
test "y_object_duplicated_key_and_value" {
ok(
try ok(
\\{"a":"b","a":"b"}
);
}
test "y_object_duplicated_key" {
ok(
try ok(
\\{"a":"b","a":"c"}
);
}
@@ -290,25 +290,25 @@ test "y_object_empty_key" {
}
test "y_object_escaped_null_in_key" {
ok(
try ok(
\\{"foo\u0000bar": 42}
);
}
test "y_object_extreme_numbers" {
ok(
try ok(
\\{ "min": -1.0e+28, "max": 1.0e+28 }
);
}
test "y_object" {
ok(
try ok(
\\{"asd":"sdf", "dfg":"fgh"}
);
}
test "y_object_long_strings" {
ok(
try ok(
\\{"x":[{"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
);
}
@@ -320,13 +320,13 @@ test "y_object_simple" {
}
test "y_object_string_unicode" {
ok(
try ok(
\\{"title":"\u041f\u043e\u043b\u0442\u043e\u0440\u0430 \u0417\u0435\u043c\u043b\u0435\u043a\u043e\u043f\u0430" }
);
}
test "y_object_with_newlines" {
ok(
try ok(
\\{
\\"a": "b"
\\}
@@ -334,31 +334,31 @@ test "y_object_with_newlines" {
}
test "y_string_1_2_3_bytes_UTF-8_sequences" {
ok(
try ok(
\\["\u0060\u012a\u12AB"]
);
}
test "y_string_accepted_surrogate_pair" {
ok(
try ok(
\\["\uD801\udc37"]
);
}
test "y_string_accepted_surrogate_pairs" {
ok(
try ok(
\\["\ud83d\ude39\ud83d\udc8d"]
);
}
test "y_string_allowed_escapes" {
ok(
try ok(
\\["\"\\\/\b\f\n\r\t"]
);
}
test "y_string_backslash_and_u_escaped_zero" {
ok(
try ok(
\\["\\u0000"]
);
}
@@ -370,13 +370,13 @@ test "y_string_backslash_doublequotes" {
}
test "y_string_comments" {
ok(
try ok(
\\["a/*b*/c/*d//e"]
);
}
test "y_string_double_escape_a" {
ok(
try ok(
\\["\\a"]
);
}
@@ -388,79 +388,79 @@ test "y_string_double_escape_n" {
}
test "y_string_escaped_control_character" {
ok(
try ok(
\\["\u0012"]
);
}
test "y_string_escaped_noncharacter" {
ok(
try ok(
\\["\uFFFF"]
);
}
test "y_string_in_array" {
ok(
try ok(
\\["asd"]
);
}
test "y_string_in_array_with_leading_space" {
ok(
try ok(
\\[ "asd"]
);
}
test "y_string_last_surrogates_1_and_2" {
ok(
try ok(
\\["\uDBFF\uDFFF"]
);
}
test "y_string_nbsp_uescaped" {
ok(
try ok(
\\["new\u00A0line"]
);
}
test "y_string_nonCharacterInUTF-8_U+10FFFF" {
ok(
try ok(
\\["􏿿"]
);
}
test "y_string_nonCharacterInUTF-8_U+FFFF" {
ok(
try ok(
\\["￿"]
);
}
test "y_string_null_escape" {
ok(
try ok(
\\["\u0000"]
);
}
test "y_string_one-byte-utf-8" {
ok(
try ok(
\\["\u002c"]
);
}
test "y_string_pi" {
ok(
try ok(
\\["π"]
);
}
test "y_string_reservedCharacterInUTF-8_U+1BFFF" {
ok(
try ok(
\\["𛿿"]
);
}
test "y_string_simple_ascii" {
ok(
try ok(
\\["asd "]
);
}
@@ -472,115 +472,115 @@ test "y_string_space" {
}
test "y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF" {
ok(
try ok(
\\["\uD834\uDd1e"]
);
}
test "y_string_three-byte-utf-8" {
ok(
try ok(
\\["\u0821"]
);
}
test "y_string_two-byte-utf-8" {
ok(
try ok(
\\["\u0123"]
);
}
test "y_string_u+2028_line_sep" {
ok("[\"\xe2\x80\xa8\"]");
try ok("[\"\xe2\x80\xa8\"]");
}
test "y_string_u+2029_par_sep" {
ok("[\"\xe2\x80\xa9\"]");
try ok("[\"\xe2\x80\xa9\"]");
}
test "y_string_uescaped_newline" {
ok(
try ok(
\\["new\u000Aline"]
);
}
test "y_string_uEscape" {
ok(
try ok(
\\["\u0061\u30af\u30EA\u30b9"]
);
}
test "y_string_unescaped_char_delete" {
ok("[\"\x7f\"]");
try ok("[\"\x7f\"]");
}
test "y_string_unicode_2" {
ok(
try ok(
\\["⍂㈴⍂"]
);
}
test "y_string_unicodeEscapedBackslash" {
ok(
try ok(
\\["\u005C"]
);
}
test "y_string_unicode_escaped_double_quote" {
ok(
try ok(
\\["\u0022"]
);
}
test "y_string_unicode" {
ok(
try ok(
\\["\uA66D"]
);
}
test "y_string_unicode_U+10FFFE_nonchar" {
ok(
try ok(
\\["\uDBFF\uDFFE"]
);
}
test "y_string_unicode_U+1FFFE_nonchar" {
ok(
try ok(
\\["\uD83F\uDFFE"]
);
}
test "y_string_unicode_U+200B_ZERO_WIDTH_SPACE" {
ok(
try ok(
\\["\u200B"]
);
}
test "y_string_unicode_U+2064_invisible_plus" {
ok(
try ok(
\\["\u2064"]
);
}
test "y_string_unicode_U+FDD0_nonchar" {
ok(
try ok(
\\["\uFDD0"]
);
}
test "y_string_unicode_U+FFFE_nonchar" {
ok(
try ok(
\\["\uFFFE"]
);
}
test "y_string_utf8" {
ok(
try ok(
\\["€𝄞"]
);
}
test "y_string_with_del_character" {
ok("[\"a\x7fa\"]");
try ok("[\"a\x7fa\"]");
}
test "y_structure_lonely_false" {
@@ -596,7 +596,7 @@ test "y_structure_lonely_int" {
}
test "y_structure_lonely_negative_real" {
ok(
try ok(
\\-0.1
);
}
@@ -638,7 +638,7 @@ test "y_structure_true_in_array" {
}
test "y_structure_whitespace_array" {
ok(" [] ");
try ok(" [] ");
}
////////////////////////////////////////////////////////////////////////////////////////////////////