| 1 | const std = @import("std"); |
| 2 | const json = @import("json"); |
| 3 | const build_options = @import("build_options"); |
| 4 | const nfs = @import("nfs"); |
| 5 | const nio = @import("nio"); |
| 6 | const expect = @import("expect").expect; |
| 7 | |
| 8 | const JSONTestSuite_root = build_options.JSONTestSuite_root; |
| 9 | |
| 10 | fn parse_full(buffer: []const u8) !void { |
| 11 | const alloc = std.testing.allocator; |
| 12 | var fbs: nio.FixedBufferStream([]const u8) = .init(buffer); |
| 13 | var doc = try json.parse(alloc, "", &fbs, .{ .support_trailing_commas = true, .maximum_depth = 100 }); |
| 14 | defer doc.deinit(alloc); |
| 15 | } |
| 16 | |
| 17 | test { |
| 18 | try parse_full( |
| 19 | \\[ |
| 20 | \\ { |
| 21 | \\ "id": 131325113, |
| 22 | \\ "author": { |
| 23 | \\ "login": "github-actions[bot]", |
| 24 | \\ "id": 41898282, |
| 25 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 26 | \\ "gravatar_id": "", |
| 27 | \\ "type": "Bot", |
| 28 | \\ "site_admin": false |
| 29 | \\ }, |
| 30 | \\ "node_id": "RE_kwDOEpDmIc4H09y5", |
| 31 | \\ "tag_name": "r89", |
| 32 | \\ "target_commitish": "0df96b60dee2a9e76bf12ad8b8ab1d47dba52994", |
| 33 | \\ "name": "r89", |
| 34 | \\ "draft": false, |
| 35 | \\ "prerelease": false, |
| 36 | \\ "created_at": "2023-11-24T08:33:57Z", |
| 37 | \\ "published_at": "2023-11-24T08:38:51Z", |
| 38 | \\ "assets": [ |
| 39 | \\ { |
| 40 | \\ "id": 137211731, |
| 41 | \\ "node_id": "RA_kwDOEpDmIc4ILa9T", |
| 42 | \\ "name": "zigmod-aarch64-linux", |
| 43 | \\ "label": "", |
| 44 | \\ "uploader": { |
| 45 | \\ "login": "github-actions[bot]", |
| 46 | \\ "id": 41898282, |
| 47 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 48 | \\ "gravatar_id": "", |
| 49 | \\ "type": "Bot", |
| 50 | \\ "site_admin": false |
| 51 | \\ }, |
| 52 | \\ "content_type": "application/octet-stream", |
| 53 | \\ "state": "uploaded", |
| 54 | \\ "size": 12449224, |
| 55 | \\ "download_count": 28, |
| 56 | \\ "created_at": "2023-11-24T08:38:52Z", |
| 57 | \\ "updated_at": "2023-11-24T08:38:53Z", |
| 58 | \\ }, |
| 59 | \\ { |
| 60 | \\ "id": 137211736, |
| 61 | \\ "node_id": "RA_kwDOEpDmIc4ILa9Y", |
| 62 | \\ "name": "zigmod-aarch64-macos", |
| 63 | \\ "label": "", |
| 64 | \\ "uploader": { |
| 65 | \\ "login": "github-actions[bot]", |
| 66 | \\ "id": 41898282, |
| 67 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 68 | \\ "gravatar_id": "", |
| 69 | \\ "type": "Bot", |
| 70 | \\ "site_admin": false |
| 71 | \\ }, |
| 72 | \\ "content_type": "application/octet-stream", |
| 73 | \\ "state": "uploaded", |
| 74 | \\ "size": 9137624, |
| 75 | \\ "download_count": 581, |
| 76 | \\ "created_at": "2023-11-24T08:38:55Z", |
| 77 | \\ "updated_at": "2023-11-24T08:38:56Z", |
| 78 | \\ }, |
| 79 | \\ { |
| 80 | \\ "id": 137211747, |
| 81 | \\ "node_id": "RA_kwDOEpDmIc4ILa9j", |
| 82 | \\ "name": "zigmod-aarch64-windows.exe", |
| 83 | \\ "label": "", |
| 84 | \\ "uploader": { |
| 85 | \\ "login": "github-actions[bot]", |
| 86 | \\ "id": 41898282, |
| 87 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 88 | \\ "gravatar_id": "", |
| 89 | \\ "type": "Bot", |
| 90 | \\ "site_admin": false |
| 91 | \\ }, |
| 92 | \\ "content_type": "application/octet-stream", |
| 93 | \\ "state": "uploaded", |
| 94 | \\ "size": 7738880, |
| 95 | \\ "download_count": 23, |
| 96 | \\ "created_at": "2023-11-24T08:39:00Z", |
| 97 | \\ "updated_at": "2023-11-24T08:39:01Z", |
| 98 | \\ }, |
| 99 | \\ { |
| 100 | \\ "id": 137211740, |
| 101 | \\ "node_id": "RA_kwDOEpDmIc4ILa9c", |
| 102 | \\ "name": "zigmod-aarch64-windows.pdb", |
| 103 | \\ "label": "", |
| 104 | \\ "uploader": { |
| 105 | \\ "login": "github-actions[bot]", |
| 106 | \\ "id": 41898282, |
| 107 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 108 | \\ "gravatar_id": "", |
| 109 | \\ "type": "Bot", |
| 110 | \\ "site_admin": false |
| 111 | \\ }, |
| 112 | \\ "content_type": "application/octet-stream", |
| 113 | \\ "state": "uploaded", |
| 114 | \\ "size": 3813376, |
| 115 | \\ "download_count": 2, |
| 116 | \\ "created_at": "2023-11-24T08:38:56Z", |
| 117 | \\ "updated_at": "2023-11-24T08:38:57Z", |
| 118 | \\ }, |
| 119 | \\ { |
| 120 | \\ "id": 137211748, |
| 121 | \\ "node_id": "RA_kwDOEpDmIc4ILa9k", |
| 122 | \\ "name": "zigmod-mips64-linux", |
| 123 | \\ "label": "", |
| 124 | \\ "uploader": { |
| 125 | \\ "login": "github-actions[bot]", |
| 126 | \\ "id": 41898282, |
| 127 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 128 | \\ "gravatar_id": "", |
| 129 | \\ "type": "Bot", |
| 130 | \\ "site_admin": false |
| 131 | \\ }, |
| 132 | \\ "content_type": "application/octet-stream", |
| 133 | \\ "state": "uploaded", |
| 134 | \\ "size": 12545712, |
| 135 | \\ "download_count": 3, |
| 136 | \\ "created_at": "2023-11-24T08:39:01Z", |
| 137 | \\ "updated_at": "2023-11-24T08:39:03Z", |
| 138 | \\ }, |
| 139 | \\ { |
| 140 | \\ "id": 137211749, |
| 141 | \\ "node_id": "RA_kwDOEpDmIc4ILa9l", |
| 142 | \\ "name": "zigmod-powerpc64le-linux", |
| 143 | \\ "label": "", |
| 144 | \\ "uploader": { |
| 145 | \\ "login": "github-actions[bot]", |
| 146 | \\ "id": 41898282, |
| 147 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 148 | \\ "gravatar_id": "", |
| 149 | \\ "type": "Bot", |
| 150 | \\ "site_admin": false |
| 151 | \\ }, |
| 152 | \\ "content_type": "application/octet-stream", |
| 153 | \\ "state": "uploaded", |
| 154 | \\ "size": 11638720, |
| 155 | \\ "download_count": 3, |
| 156 | \\ "created_at": "2023-11-24T08:39:03Z", |
| 157 | \\ "updated_at": "2023-11-24T08:39:04Z", |
| 158 | \\ }, |
| 159 | \\ { |
| 160 | \\ "id": 137211745, |
| 161 | \\ "node_id": "RA_kwDOEpDmIc4ILa9h", |
| 162 | \\ "name": "zigmod-riscv64-linux", |
| 163 | \\ "label": "", |
| 164 | \\ "uploader": { |
| 165 | \\ "login": "github-actions[bot]", |
| 166 | \\ "id": 41898282, |
| 167 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 168 | \\ "gravatar_id": "", |
| 169 | \\ "type": "Bot", |
| 170 | \\ "site_admin": false |
| 171 | \\ }, |
| 172 | \\ "content_type": "application/octet-stream", |
| 173 | \\ "state": "uploaded", |
| 174 | \\ "size": 17282528, |
| 175 | \\ "download_count": 4, |
| 176 | \\ "created_at": "2023-11-24T08:38:58Z", |
| 177 | \\ "updated_at": "2023-11-24T08:39:00Z", |
| 178 | \\ }, |
| 179 | \\ { |
| 180 | \\ "id": 137211752, |
| 181 | \\ "node_id": "RA_kwDOEpDmIc4ILa9o", |
| 182 | \\ "name": "zigmod-x86_64-linux", |
| 183 | \\ "label": "", |
| 184 | \\ "uploader": { |
| 185 | \\ "login": "github-actions[bot]", |
| 186 | \\ "id": 41898282, |
| 187 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 188 | \\ "gravatar_id": "", |
| 189 | \\ "type": "Bot", |
| 190 | \\ "site_admin": false |
| 191 | \\ }, |
| 192 | \\ "content_type": "application/octet-stream", |
| 193 | \\ "state": "uploaded", |
| 194 | \\ "size": 11913416, |
| 195 | \\ "download_count": 4906, |
| 196 | \\ "created_at": "2023-11-24T08:39:06Z", |
| 197 | \\ "updated_at": "2023-11-24T08:39:07Z", |
| 198 | \\ }, |
| 199 | \\ { |
| 200 | \\ "id": 137211733, |
| 201 | \\ "node_id": "RA_kwDOEpDmIc4ILa9V", |
| 202 | \\ "name": "zigmod-x86_64-macos", |
| 203 | \\ "label": "", |
| 204 | \\ "uploader": { |
| 205 | \\ "login": "github-actions[bot]", |
| 206 | \\ "id": 41898282, |
| 207 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 208 | \\ "gravatar_id": "", |
| 209 | \\ "type": "Bot", |
| 210 | \\ "site_admin": false |
| 211 | \\ }, |
| 212 | \\ "content_type": "application/octet-stream", |
| 213 | \\ "state": "uploaded", |
| 214 | \\ "size": 8618320, |
| 215 | \\ "download_count": 795, |
| 216 | \\ "created_at": "2023-11-24T08:38:53Z", |
| 217 | \\ "updated_at": "2023-11-24T08:38:54Z", |
| 218 | \\ }, |
| 219 | \\ { |
| 220 | \\ "id": 137211742, |
| 221 | \\ "node_id": "RA_kwDOEpDmIc4ILa9e", |
| 222 | \\ "name": "zigmod-x86_64-windows.exe", |
| 223 | \\ "label": "", |
| 224 | \\ "uploader": { |
| 225 | \\ "login": "github-actions[bot]", |
| 226 | \\ "id": 41898282, |
| 227 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 228 | \\ "gravatar_id": "", |
| 229 | \\ "type": "Bot", |
| 230 | \\ "site_admin": false |
| 231 | \\ }, |
| 232 | \\ "content_type": "application/octet-stream", |
| 233 | \\ "state": "uploaded", |
| 234 | \\ "size": 7557632, |
| 235 | \\ "download_count": 300, |
| 236 | \\ "created_at": "2023-11-24T08:38:57Z", |
| 237 | \\ "updated_at": "2023-11-24T08:38:58Z", |
| 238 | \\ }, |
| 239 | \\ { |
| 240 | \\ "id": 137211751, |
| 241 | \\ "node_id": "RA_kwDOEpDmIc4ILa9n", |
| 242 | \\ "name": "zigmod-x86_64-windows.pdb", |
| 243 | \\ "label": "", |
| 244 | \\ "uploader": { |
| 245 | \\ "login": "github-actions[bot]", |
| 246 | \\ "id": 41898282, |
| 247 | \\ "node_id": "MDM6Qm90NDE4OTgyODI=", |
| 248 | \\ "gravatar_id": "", |
| 249 | \\ "type": "Bot", |
| 250 | \\ "site_admin": false |
| 251 | \\ }, |
| 252 | \\ "content_type": "application/octet-stream", |
| 253 | \\ "state": "uploaded", |
| 254 | \\ "size": 4411392, |
| 255 | \\ "download_count": 8, |
| 256 | \\ "created_at": "2023-11-24T08:39:05Z", |
| 257 | \\ "updated_at": "2023-11-24T08:39:05Z", |
| 258 | \\ } |
| 259 | \\ ], |
| 260 | \\ "body": "<li><a href='https://github.com/nektro/zigmod/commit/0df96b60dee2a9e76bf12ad8b8ab1d47dba52994'><code>0df96b6</code></a> cmd/aq/{install,update}: use proper cachepath (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/a1ea508279920f457c5f899022046fefd6dc146a'><code>a1ea508</code></a> main: pass proper self_path value (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/09d633b1405c5cbd4e02f4c86cb34f0368bf321f'><code>09d633b</code></a> cmd: when running zigmod inside deps folder, use parent deps folder as cachepath (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/65666d00836654f33ac4405acc12ccf50f93a071'><code>65666d0</code></a> add self_name arg to all execute() call signatures (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/e2d42e8ff71c3e6f534a380b7d16465fa77032f7'><code>e2d42e8</code></a> add deps.addAllLibrariesTo(), closes #84 (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/f3aabb5e4e3baa7cf58af4f36f8683532d49fce3'><code>f3aabb5</code></a> regenerate deps.zig (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/b8cd095ebd012788b83ac2d8e1592ce531fecde9'><code>b8cd095</code></a> mark versioned dep folders as readonly, closes #53 (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/255cb974db260e67d6782f785f26604292c39131'><code>255cb97</code></a> add a buffered reader for parsing zigmod.lock (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/a9863df0dedb0f59bbabcbf3d13f859e33c265a2'><code>a9863df</code></a> close some file descriptors (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/941ad7c971be96e2b85a683760f0a7a3a513c202'><code>941ad7c</code></a> deps: marlersoft/zigwin32: misc confirmed update (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/0e7516562fea909c18c770484919174a6e81485e'><code>0e75165</code></a> deps: nektro/zig-extras: misc confirmed updates (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/8e4e9ae69d8f09d32347e7ee6c250271067f0b37'><code>8e4e9ae</code></a> deps: ziglibs/known-folders: misc confirmed updates (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/8ba1d87039adee5566a0af66c3645989b976f822'><code>8ba1d87</code></a> deps: truemedian/hzzp: misc confirmed updates (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/ddd0eb706c5f759141a9df462c31dbee32ef3b83'><code>ddd0eb7</code></a> deps: nektro/iguanaTLS: misc confirmed updates (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/02464e094476795725f261a987c53d46da8934a3'><code>02464e0</code></a> build_release.sh: use debug mode, release breaks stack traces (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/6c68f38b8cc76288dcc871b6acc5e9470385d2a7'><code>6c68f38</code></a> build.zig: add a -Doption (Meghan Denny)</li>\n<li><a href='https://github.com/nektro/zigmod/commit/5403d1a72d023253754eca1d275537ea8dc0be5a'><code>5403d1a</code></a> build.zig: move -Dtag option declaration out with other options (Meghan Denny)</li>" |
| 261 | \\ } |
| 262 | \\] |
| 263 | \\ |
| 264 | ); |
| 265 | } |
| 266 | test { |
| 267 | try parse_full(@embedFile("./fuzz/input/input.json")); |
| 268 | } |
| 269 | |
| 270 | fn expectPass(path: [:0]const u8) !void { |
| 271 | const alloc = std.testing.allocator; |
| 272 | const file = try nfs.cwd().openFile(path, .{}); |
| 273 | defer file.close(); |
| 274 | var doc = try json.parse(alloc, path, file, .{ .support_trailing_commas = false, .maximum_depth = 100 }); |
| 275 | defer doc.deinit(alloc); |
| 276 | } |
| 277 | |
| 278 | // zig fmt: off |
| 279 | test { try expectPass(JSONTestSuite_root ++ "/y_array_arraysWithSpaces.json"); } |
| 280 | test { try expectPass(JSONTestSuite_root ++ "/y_array_empty.json"); } |
| 281 | test { try expectPass(JSONTestSuite_root ++ "/y_array_empty-string.json"); } |
| 282 | test { try expectPass(JSONTestSuite_root ++ "/y_array_ending_with_newline.json"); } |
| 283 | test { try expectPass(JSONTestSuite_root ++ "/y_array_false.json"); } |
| 284 | test { try expectPass(JSONTestSuite_root ++ "/y_array_heterogeneous.json"); } |
| 285 | test { try expectPass(JSONTestSuite_root ++ "/y_array_null.json"); } |
| 286 | test { try expectPass(JSONTestSuite_root ++ "/y_array_with_1_and_newline.json"); } |
| 287 | test { try expectPass(JSONTestSuite_root ++ "/y_array_with_leading_space.json"); } |
| 288 | test { try expectPass(JSONTestSuite_root ++ "/y_array_with_several_null.json"); } |
| 289 | test { try expectPass(JSONTestSuite_root ++ "/y_array_with_trailing_space.json"); } |
| 290 | test { try expectPass(JSONTestSuite_root ++ "/y_number_0e+1.json"); } |
| 291 | test { try expectPass(JSONTestSuite_root ++ "/y_number_0e1.json"); } |
| 292 | test { try expectPass(JSONTestSuite_root ++ "/y_number_after_space.json"); } |
| 293 | test { try expectPass(JSONTestSuite_root ++ "/y_number_double_close_to_zero.json"); } |
| 294 | test { try expectPass(JSONTestSuite_root ++ "/y_number_int_with_exp.json"); } |
| 295 | test { try expectPass(JSONTestSuite_root ++ "/y_number.json"); } |
| 296 | test { try expectPass(JSONTestSuite_root ++ "/y_number_minus_zero.json"); } |
| 297 | test { try expectPass(JSONTestSuite_root ++ "/y_number_negative_int.json"); } |
| 298 | test { try expectPass(JSONTestSuite_root ++ "/y_number_negative_one.json"); } |
| 299 | test { try expectPass(JSONTestSuite_root ++ "/y_number_negative_zero.json"); } |
| 300 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_capital_e.json"); } |
| 301 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_capital_e_neg_exp.json"); } |
| 302 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_capital_e_pos_exp.json"); } |
| 303 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_exponent.json"); } |
| 304 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_fraction_exponent.json"); } |
| 305 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_neg_exp.json"); } |
| 306 | test { try expectPass(JSONTestSuite_root ++ "/y_number_real_pos_exponent.json"); } |
| 307 | test { try expectPass(JSONTestSuite_root ++ "/y_number_simple_int.json"); } |
| 308 | test { try expectPass(JSONTestSuite_root ++ "/y_number_simple_real.json"); } |
| 309 | test { try expectPass(JSONTestSuite_root ++ "/y_object_basic.json"); } |
| 310 | test { try expectPass(JSONTestSuite_root ++ "/y_object_duplicated_key_and_value.json"); } |
| 311 | test { try expectPass(JSONTestSuite_root ++ "/y_object_duplicated_key.json"); } |
| 312 | test { try expectPass(JSONTestSuite_root ++ "/y_object_empty.json"); } |
| 313 | test { try expectPass(JSONTestSuite_root ++ "/y_object_empty_key.json"); } |
| 314 | test { try expectPass(JSONTestSuite_root ++ "/y_object_escaped_null_in_key.json"); } |
| 315 | test { try expectPass(JSONTestSuite_root ++ "/y_object_extreme_numbers.json"); } |
| 316 | test { try expectPass(JSONTestSuite_root ++ "/y_object.json"); } |
| 317 | test { try expectPass(JSONTestSuite_root ++ "/y_object_long_strings.json"); } |
| 318 | test { try expectPass(JSONTestSuite_root ++ "/y_object_simple.json"); } |
| 319 | test { try expectPass(JSONTestSuite_root ++ "/y_object_string_unicode.json"); } |
| 320 | test { try expectPass(JSONTestSuite_root ++ "/y_object_with_newlines.json"); } |
| 321 | test { try expectPass(JSONTestSuite_root ++ "/y_string_1_2_3_bytes_UTF-8_sequences.json"); } |
| 322 | test { try expectPass(JSONTestSuite_root ++ "/y_string_accepted_surrogate_pair.json"); } |
| 323 | test { try expectPass(JSONTestSuite_root ++ "/y_string_accepted_surrogate_pairs.json"); } |
| 324 | test { try expectPass(JSONTestSuite_root ++ "/y_string_allowed_escapes.json"); } |
| 325 | test { try expectPass(JSONTestSuite_root ++ "/y_string_backslash_and_u_escaped_zero.json"); } |
| 326 | test { try expectPass(JSONTestSuite_root ++ "/y_string_backslash_doublequotes.json"); } |
| 327 | test { try expectPass(JSONTestSuite_root ++ "/y_string_comments.json"); } |
| 328 | test { try expectPass(JSONTestSuite_root ++ "/y_string_double_escape_a.json"); } |
| 329 | test { try expectPass(JSONTestSuite_root ++ "/y_string_double_escape_n.json"); } |
| 330 | test { try expectPass(JSONTestSuite_root ++ "/y_string_escaped_control_character.json"); } |
| 331 | test { try expectPass(JSONTestSuite_root ++ "/y_string_escaped_noncharacter.json"); } |
| 332 | test { try expectPass(JSONTestSuite_root ++ "/y_string_in_array.json"); } |
| 333 | test { try expectPass(JSONTestSuite_root ++ "/y_string_in_array_with_leading_space.json"); } |
| 334 | test { try expectPass(JSONTestSuite_root ++ "/y_string_last_surrogates_1_and_2.json"); } |
| 335 | test { try expectPass(JSONTestSuite_root ++ "/y_string_nbsp_uescaped.json"); } |
| 336 | test { try expectPass(JSONTestSuite_root ++ "/y_string_nonCharacterInUTF-8_U+10FFFF.json"); } |
| 337 | test { try expectPass(JSONTestSuite_root ++ "/y_string_nonCharacterInUTF-8_U+FFFF.json"); } |
| 338 | test { try expectPass(JSONTestSuite_root ++ "/y_string_null_escape.json"); } |
| 339 | test { try expectPass(JSONTestSuite_root ++ "/y_string_one-byte-utf-8.json"); } |
| 340 | test { try expectPass(JSONTestSuite_root ++ "/y_string_pi.json"); } |
| 341 | test { try expectPass(JSONTestSuite_root ++ "/y_string_reservedCharacterInUTF-8_U+1BFFF.json"); } |
| 342 | test { try expectPass(JSONTestSuite_root ++ "/y_string_simple_ascii.json"); } |
| 343 | test { try expectPass(JSONTestSuite_root ++ "/y_string_space.json"); } |
| 344 | test { try expectPass(JSONTestSuite_root ++ "/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json"); } |
| 345 | test { try expectPass(JSONTestSuite_root ++ "/y_string_three-byte-utf-8.json"); } |
| 346 | test { try expectPass(JSONTestSuite_root ++ "/y_string_two-byte-utf-8.json"); } |
| 347 | test { try expectPass(JSONTestSuite_root ++ "/y_string_u+2028_line_sep.json"); } |
| 348 | test { try expectPass(JSONTestSuite_root ++ "/y_string_u+2029_par_sep.json"); } |
| 349 | test { try expectPass(JSONTestSuite_root ++ "/y_string_uescaped_newline.json"); } |
| 350 | test { try expectPass(JSONTestSuite_root ++ "/y_string_uEscape.json"); } |
| 351 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unescaped_char_delete.json"); } |
| 352 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_2.json"); } |
| 353 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicodeEscapedBackslash.json"); } |
| 354 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_escaped_double_quote.json"); } |
| 355 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode.json"); } |
| 356 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+10FFFE_nonchar.json"); } |
| 357 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+1FFFE_nonchar.json"); } |
| 358 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json"); } |
| 359 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+2064_invisible_plus.json"); } |
| 360 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+FDD0_nonchar.json"); } |
| 361 | test { try expectPass(JSONTestSuite_root ++ "/y_string_unicode_U+FFFE_nonchar.json"); } |
| 362 | test { try expectPass(JSONTestSuite_root ++ "/y_string_utf8.json"); } |
| 363 | test { try expectPass(JSONTestSuite_root ++ "/y_string_with_del_character.json"); } |
| 364 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_false.json"); } |
| 365 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_int.json"); } |
| 366 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_negative_real.json"); } |
| 367 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_null.json"); } |
| 368 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_string.json"); } |
| 369 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_lonely_true.json"); } |
| 370 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_string_empty.json"); } |
| 371 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_trailing_newline.json"); } |
| 372 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_true_in_array.json"); } |
| 373 | test { try expectPass(JSONTestSuite_root ++ "/y_structure_whitespace_array.json"); } |
| 374 | // zig fmt: on |
| 375 | |
| 376 | fn expectFail(path: [:0]const u8) !void { |
| 377 | const alloc = std.testing.allocator; |
| 378 | const file = try nfs.cwd().openFile(path, .{}); |
| 379 | defer file.close(); |
| 380 | var doc = json.parse(alloc, path, file, .{ .support_trailing_commas = false, .maximum_depth = 100 }) catch return; |
| 381 | defer doc.deinit(alloc); |
| 382 | try std.testing.expect(false); |
| 383 | } |
| 384 | |
| 385 | // zig fmt: off |
| 386 | test { try expectFail(JSONTestSuite_root ++ "/n_array_1_true_without_comma.json"); } |
| 387 | test { try expectFail(JSONTestSuite_root ++ "/n_array_a_invalid_utf8.json"); } |
| 388 | test { try expectFail(JSONTestSuite_root ++ "/n_array_colon_instead_of_comma.json"); } |
| 389 | test { try expectFail(JSONTestSuite_root ++ "/n_array_comma_after_close.json"); } |
| 390 | test { try expectFail(JSONTestSuite_root ++ "/n_array_comma_and_number.json"); } |
| 391 | test { try expectFail(JSONTestSuite_root ++ "/n_array_double_comma.json"); } |
| 392 | test { try expectFail(JSONTestSuite_root ++ "/n_array_double_extra_comma.json"); } |
| 393 | test { try expectFail(JSONTestSuite_root ++ "/n_array_extra_close.json"); } |
| 394 | test { try expectFail(JSONTestSuite_root ++ "/n_array_extra_comma.json"); } |
| 395 | test { try expectFail(JSONTestSuite_root ++ "/n_array_incomplete_invalid_value.json"); } |
| 396 | test { try expectFail(JSONTestSuite_root ++ "/n_array_incomplete.json"); } |
| 397 | test { try expectFail(JSONTestSuite_root ++ "/n_array_inner_array_no_comma.json"); } |
| 398 | test { try expectFail(JSONTestSuite_root ++ "/n_array_invalid_utf8.json"); } |
| 399 | test { try expectFail(JSONTestSuite_root ++ "/n_array_items_separated_by_semicolon.json"); } |
| 400 | test { try expectFail(JSONTestSuite_root ++ "/n_array_just_comma.json"); } |
| 401 | test { try expectFail(JSONTestSuite_root ++ "/n_array_just_minus.json"); } |
| 402 | test { try expectFail(JSONTestSuite_root ++ "/n_array_missing_value.json"); } |
| 403 | test { try expectFail(JSONTestSuite_root ++ "/n_array_newlines_unclosed.json"); } |
| 404 | test { try expectFail(JSONTestSuite_root ++ "/n_array_number_and_comma.json"); } |
| 405 | test { try expectFail(JSONTestSuite_root ++ "/n_array_number_and_several_commas.json"); } |
| 406 | test { try expectFail(JSONTestSuite_root ++ "/n_array_spaces_vertical_tab_formfeed.json"); } |
| 407 | test { try expectFail(JSONTestSuite_root ++ "/n_array_star_inside.json"); } |
| 408 | test { try expectFail(JSONTestSuite_root ++ "/n_array_unclosed.json"); } |
| 409 | test { try expectFail(JSONTestSuite_root ++ "/n_array_unclosed_trailing_comma.json"); } |
| 410 | test { try expectFail(JSONTestSuite_root ++ "/n_array_unclosed_with_new_lines.json"); } |
| 411 | test { try expectFail(JSONTestSuite_root ++ "/n_array_unclosed_with_object_inside.json"); } |
| 412 | test { try expectFail(JSONTestSuite_root ++ "/n_incomplete_false.json"); } |
| 413 | test { try expectFail(JSONTestSuite_root ++ "/n_incomplete_null.json"); } |
| 414 | test { try expectFail(JSONTestSuite_root ++ "/n_incomplete_true.json"); } |
| 415 | test { try expectFail(JSONTestSuite_root ++ "/n_multidigit_number_then_00.json"); } |
| 416 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0.1.2.json"); } |
| 417 | test { try expectFail(JSONTestSuite_root ++ "/n_number_-01.json"); } |
| 418 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0.3e+.json"); } |
| 419 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0.3e.json"); } |
| 420 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0_capital_E+.json"); } |
| 421 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0_capital_E.json"); } |
| 422 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0.e1.json"); } |
| 423 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0e+.json"); } |
| 424 | test { try expectFail(JSONTestSuite_root ++ "/n_number_0e.json"); } |
| 425 | test { try expectFail(JSONTestSuite_root ++ "/n_number_1_000.json"); } |
| 426 | test { try expectFail(JSONTestSuite_root ++ "/n_number_1.0e+.json"); } |
| 427 | test { try expectFail(JSONTestSuite_root ++ "/n_number_1.0e-.json"); } |
| 428 | test { try expectFail(JSONTestSuite_root ++ "/n_number_1.0e.json"); } |
| 429 | test { try expectFail(JSONTestSuite_root ++ "/n_number_-1.0..json"); } |
| 430 | test { try expectFail(JSONTestSuite_root ++ "/n_number_1eE2.json"); } |
| 431 | test { try expectFail(JSONTestSuite_root ++ "/n_number_+1.json"); } |
| 432 | test { try expectFail(JSONTestSuite_root ++ "/n_number_.-1.json"); } |
| 433 | test { try expectFail(JSONTestSuite_root ++ "/n_number_2.e+3.json"); } |
| 434 | test { try expectFail(JSONTestSuite_root ++ "/n_number_2.e-3.json"); } |
| 435 | test { try expectFail(JSONTestSuite_root ++ "/n_number_2.e3.json"); } |
| 436 | test { try expectFail(JSONTestSuite_root ++ "/n_number_.2e-3.json"); } |
| 437 | test { try expectFail(JSONTestSuite_root ++ "/n_number_-2..json"); } |
| 438 | test { try expectFail(JSONTestSuite_root ++ "/n_number_9.e+.json"); } |
| 439 | test { try expectFail(JSONTestSuite_root ++ "/n_number_expression.json"); } |
| 440 | test { try expectFail(JSONTestSuite_root ++ "/n_number_hex_1_digit.json"); } |
| 441 | test { try expectFail(JSONTestSuite_root ++ "/n_number_hex_2_digits.json"); } |
| 442 | test { try expectFail(JSONTestSuite_root ++ "/n_number_infinity.json"); } |
| 443 | test { try expectFail(JSONTestSuite_root ++ "/n_number_+Inf.json"); } |
| 444 | test { try expectFail(JSONTestSuite_root ++ "/n_number_Inf.json"); } |
| 445 | test { try expectFail(JSONTestSuite_root ++ "/n_number_invalid+-.json"); } |
| 446 | test { try expectFail(JSONTestSuite_root ++ "/n_number_invalid-negative-real.json"); } |
| 447 | test { try expectFail(JSONTestSuite_root ++ "/n_number_invalid-utf-8-in-bigger-int.json"); } |
| 448 | test { try expectFail(JSONTestSuite_root ++ "/n_number_invalid-utf-8-in-exponent.json"); } |
| 449 | test { try expectFail(JSONTestSuite_root ++ "/n_number_invalid-utf-8-in-int.json"); } |
| 450 | test { try expectFail(JSONTestSuite_root ++ "/n_number_++.json"); } |
| 451 | test { try expectFail(JSONTestSuite_root ++ "/n_number_minus_infinity.json"); } |
| 452 | test { try expectFail(JSONTestSuite_root ++ "/n_number_minus_sign_with_trailing_garbage.json"); } |
| 453 | test { try expectFail(JSONTestSuite_root ++ "/n_number_minus_space_1.json"); } |
| 454 | test { try expectFail(JSONTestSuite_root ++ "/n_number_-NaN.json"); } |
| 455 | test { try expectFail(JSONTestSuite_root ++ "/n_number_NaN.json"); } |
| 456 | test { try expectFail(JSONTestSuite_root ++ "/n_number_neg_int_starting_with_zero.json"); } |
| 457 | test { try expectFail(JSONTestSuite_root ++ "/n_number_neg_real_without_int_part.json"); } |
| 458 | test { try expectFail(JSONTestSuite_root ++ "/n_number_neg_with_garbage_at_end.json"); } |
| 459 | test { try expectFail(JSONTestSuite_root ++ "/n_number_real_garbage_after_e.json"); } |
| 460 | test { try expectFail(JSONTestSuite_root ++ "/n_number_real_with_invalid_utf8_after_e.json"); } |
| 461 | test { try expectFail(JSONTestSuite_root ++ "/n_number_real_without_fractional_part.json"); } |
| 462 | test { try expectFail(JSONTestSuite_root ++ "/n_number_starting_with_dot.json"); } |
| 463 | test { try expectFail(JSONTestSuite_root ++ "/n_number_U+FF11_fullwidth_digit_one.json"); } |
| 464 | test { try expectFail(JSONTestSuite_root ++ "/n_number_with_alpha_char.json"); } |
| 465 | test { try expectFail(JSONTestSuite_root ++ "/n_number_with_alpha.json"); } |
| 466 | test { try expectFail(JSONTestSuite_root ++ "/n_number_with_leading_zero.json"); } |
| 467 | test { try expectFail(JSONTestSuite_root ++ "/n_object_bad_value.json"); } |
| 468 | test { try expectFail(JSONTestSuite_root ++ "/n_object_bracket_key.json"); } |
| 469 | test { try expectFail(JSONTestSuite_root ++ "/n_object_comma_instead_of_colon.json"); } |
| 470 | test { try expectFail(JSONTestSuite_root ++ "/n_object_double_colon.json"); } |
| 471 | test { try expectFail(JSONTestSuite_root ++ "/n_object_emoji.json"); } |
| 472 | test { try expectFail(JSONTestSuite_root ++ "/n_object_garbage_at_end.json"); } |
| 473 | test { try expectFail(JSONTestSuite_root ++ "/n_object_key_with_single_quotes.json"); } |
| 474 | test { try expectFail(JSONTestSuite_root ++ "/n_object_lone_continuation_byte_in_key_and_trailing_comma.json"); } |
| 475 | test { try expectFail(JSONTestSuite_root ++ "/n_object_missing_colon.json"); } |
| 476 | test { try expectFail(JSONTestSuite_root ++ "/n_object_missing_key.json"); } |
| 477 | test { try expectFail(JSONTestSuite_root ++ "/n_object_missing_semicolon.json"); } |
| 478 | test { try expectFail(JSONTestSuite_root ++ "/n_object_missing_value.json"); } |
| 479 | test { try expectFail(JSONTestSuite_root ++ "/n_object_no-colon.json"); } |
| 480 | test { try expectFail(JSONTestSuite_root ++ "/n_object_non_string_key_but_huge_number_instead.json"); } |
| 481 | test { try expectFail(JSONTestSuite_root ++ "/n_object_non_string_key.json"); } |
| 482 | test { try expectFail(JSONTestSuite_root ++ "/n_object_repeated_null_null.json"); } |
| 483 | test { try expectFail(JSONTestSuite_root ++ "/n_object_several_trailing_commas.json"); } |
| 484 | test { try expectFail(JSONTestSuite_root ++ "/n_object_single_quote.json"); } |
| 485 | test { try expectFail(JSONTestSuite_root ++ "/n_object_trailing_comma.json"); } |
| 486 | test { try expectFail(JSONTestSuite_root ++ "/n_object_trailing_comment.json"); } |
| 487 | test { try expectFail(JSONTestSuite_root ++ "/n_object_trailing_comment_open.json"); } |
| 488 | test { try expectFail(JSONTestSuite_root ++ "/n_object_trailing_comment_slash_open_incomplete.json"); } |
| 489 | test { try expectFail(JSONTestSuite_root ++ "/n_object_trailing_comment_slash_open.json"); } |
| 490 | test { try expectFail(JSONTestSuite_root ++ "/n_object_two_commas_in_a_row.json"); } |
| 491 | test { try expectFail(JSONTestSuite_root ++ "/n_object_unquoted_key.json"); } |
| 492 | test { try expectFail(JSONTestSuite_root ++ "/n_object_unterminated-value.json"); } |
| 493 | test { try expectFail(JSONTestSuite_root ++ "/n_object_with_single_string.json"); } |
| 494 | test { try expectFail(JSONTestSuite_root ++ "/n_object_with_trailing_garbage.json"); } |
| 495 | test { try expectFail(JSONTestSuite_root ++ "/n_single_space.json"); } |
| 496 | test { try expectFail(JSONTestSuite_root ++ "/n_string_1_surrogate_then_escape.json"); } |
| 497 | test { try expectFail(JSONTestSuite_root ++ "/n_string_1_surrogate_then_escape_u1.json"); } |
| 498 | test { try expectFail(JSONTestSuite_root ++ "/n_string_1_surrogate_then_escape_u1x.json"); } |
| 499 | test { try expectFail(JSONTestSuite_root ++ "/n_string_1_surrogate_then_escape_u.json"); } |
| 500 | test { try expectFail(JSONTestSuite_root ++ "/n_string_accentuated_char_no_quotes.json"); } |
| 501 | test { try expectFail(JSONTestSuite_root ++ "/n_string_backslash_00.json"); } |
| 502 | test { try expectFail(JSONTestSuite_root ++ "/n_string_escaped_backslash_bad.json"); } |
| 503 | test { try expectFail(JSONTestSuite_root ++ "/n_string_escaped_ctrl_char_tab.json"); } |
| 504 | test { try expectFail(JSONTestSuite_root ++ "/n_string_escaped_emoji.json"); } |
| 505 | test { try expectFail(JSONTestSuite_root ++ "/n_string_escape_x.json"); } |
| 506 | test { try expectFail(JSONTestSuite_root ++ "/n_string_incomplete_escaped_character.json"); } |
| 507 | test { try expectFail(JSONTestSuite_root ++ "/n_string_incomplete_escape.json"); } |
| 508 | test { try expectFail(JSONTestSuite_root ++ "/n_string_incomplete_surrogate_escape_invalid.json"); } |
| 509 | test { try expectFail(JSONTestSuite_root ++ "/n_string_incomplete_surrogate.json"); } |
| 510 | test { try expectFail(JSONTestSuite_root ++ "/n_string_invalid_backslash_esc.json"); } |
| 511 | test { try expectFail(JSONTestSuite_root ++ "/n_string_invalid_unicode_escape.json"); } |
| 512 | test { try expectFail(JSONTestSuite_root ++ "/n_string_invalid_utf8_after_escape.json"); } |
| 513 | test { try expectFail(JSONTestSuite_root ++ "/n_string_invalid-utf-8-in-escape.json"); } |
| 514 | test { try expectFail(JSONTestSuite_root ++ "/n_string_leading_uescaped_thinspace.json"); } |
| 515 | test { try expectFail(JSONTestSuite_root ++ "/n_string_no_quotes_with_bad_escape.json"); } |
| 516 | test { try expectFail(JSONTestSuite_root ++ "/n_string_single_doublequote.json"); } |
| 517 | test { try expectFail(JSONTestSuite_root ++ "/n_string_single_quote.json"); } |
| 518 | test { try expectFail(JSONTestSuite_root ++ "/n_string_single_string_no_double_quotes.json"); } |
| 519 | test { try expectFail(JSONTestSuite_root ++ "/n_string_start_escape_unclosed.json"); } |
| 520 | test { try expectFail(JSONTestSuite_root ++ "/n_string_unescaped_ctrl_char.json"); } |
| 521 | test { try expectFail(JSONTestSuite_root ++ "/n_string_unescaped_newline.json"); } |
| 522 | test { try expectFail(JSONTestSuite_root ++ "/n_string_unescaped_tab.json"); } |
| 523 | test { try expectFail(JSONTestSuite_root ++ "/n_string_unicode_CapitalU.json"); } |
| 524 | test { try expectFail(JSONTestSuite_root ++ "/n_string_with_trailing_garbage.json"); } |
| 525 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_100000_opening_arrays.json"); } |
| 526 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_angle_bracket_..json"); } |
| 527 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_angle_bracket_null.json"); } |
| 528 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_array_trailing_garbage.json"); } |
| 529 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_array_with_extra_array_close.json"); } |
| 530 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_array_with_unclosed_string.json"); } |
| 531 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_ascii-unicode-identifier.json"); } |
| 532 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_capitalized_True.json"); } |
| 533 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_close_unopened_array.json"); } |
| 534 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_comma_instead_of_closing_brace.json"); } |
| 535 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_double_array.json"); } |
| 536 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_end_array.json"); } |
| 537 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_incomplete_UTF8_BOM.json"); } |
| 538 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_lone-invalid-utf-8.json"); } |
| 539 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_lone-open-bracket.json"); } |
| 540 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_no_data.json"); } |
| 541 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_null-byte-outside-string.json"); } |
| 542 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_number_with_trailing_garbage.json"); } |
| 543 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_object_followed_by_closing_object.json"); } |
| 544 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_object_unclosed_no_value.json"); } |
| 545 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_object_with_comment.json"); } |
| 546 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_object_with_trailing_garbage.json"); } |
| 547 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_apostrophe.json"); } |
| 548 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_comma.json"); } |
| 549 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_object.json"); } |
| 550 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_open_object.json"); } |
| 551 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_open_string.json"); } |
| 552 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_array_string.json"); } |
| 553 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object_close_array.json"); } |
| 554 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object_comma.json"); } |
| 555 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object.json"); } |
| 556 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object_open_array.json"); } |
| 557 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object_open_string.json"); } |
| 558 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_object_string_with_apostrophes.json"); } |
| 559 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_open_open.json"); } |
| 560 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_single_eacute.json"); } |
| 561 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_single_star.json"); } |
| 562 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_trailing_#.json"); } |
| 563 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_U+2060_word_joined.json"); } |
| 564 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_uescaped_LF_before_string.json"); } |
| 565 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unclosed_array.json"); } |
| 566 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unclosed_array_partial_null.json"); } |
| 567 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unclosed_array_unfinished_false.json"); } |
| 568 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unclosed_array_unfinished_true.json"); } |
| 569 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unclosed_object.json"); } |
| 570 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_unicode-identifier.json"); } |
| 571 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_UTF8_BOM_no_data.json"); } |
| 572 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_whitespace_formfeed.json"); } |
| 573 | test { try expectFail(JSONTestSuite_root ++ "/n_structure_whitespace_U+2060_word_joiner.json"); } |
| 574 | // zig fmt: on |
| 575 | |
| 576 | fn expectCanonical(buffer: []const u8) !void { |
| 577 | const alloc = std.testing.allocator; |
| 578 | var fbs: nio.FixedBufferStream([]const u8) = .init(buffer); |
| 579 | var doc = try json.parse(alloc, "", &fbs, .{ .support_trailing_commas = true, .maximum_depth = 100 }); |
| 580 | defer doc.deinit(alloc); |
| 581 | doc.acquire(); |
| 582 | defer doc.release(); |
| 583 | try expect(buffer).toEqualNFmt("{}", .{doc}); |
| 584 | |
| 585 | var buf: [4096]u8 = undefined; |
| 586 | var out: nio.FixedBufferStream([]u8) = .init(&buf); |
| 587 | try doc.stringify(&out, .{ .count = 0 }, 0); |
| 588 | try std.testing.expectEqualStrings(buffer, out.buffer[0..out.pos]); |
| 589 | } |
| 590 | |
| 591 | // zig fmt: off |
| 592 | test { try expectCanonical("{}"); } |
| 593 | test { try expectCanonical("[]"); } |
| 594 | test { try expectCanonical("\"aba\""); } |
| 595 | test { try expectCanonical("4.3"); } |
| 596 | test { try expectCanonical("true"); } |
| 597 | test { try expectCanonical("false"); } |
| 598 | test { try expectCanonical("null"); } |
| 599 | test { try expectCanonical("[7,8,9]"); } |
| 600 | // zig fmt: on |
| 601 | |
| 602 | test { |
| 603 | const alloc = std.testing.allocator; |
| 604 | var fbs: nio.FixedBufferStream([]const u8) = .init( |
| 605 | \\["abc",456,"ghi",{"foo":"bar"}] |
| 606 | ); |
| 607 | var doc = try json.parse(alloc, "", &fbs, .{ .support_trailing_commas = true, .maximum_depth = 100 }); |
| 608 | defer doc.deinit(alloc); |
| 609 | doc.acquire(); |
| 610 | defer doc.release(); |
| 611 | |
| 612 | const a = doc.root.array(); |
| 613 | try std.testing.expectEqual(4, a.len); |
| 614 | try std.testing.expectEqualStrings("abc", a[0].string()); |
| 615 | try std.testing.expectEqual(456, a[1].number().get(u16)); |
| 616 | try std.testing.expectEqualStrings("ghi", a[2].string()); |
| 617 | try std.testing.expectEqualStrings("bar", a[3].object().getS("foo").?); |
| 618 | } |
| 619 | |
| 620 | test { |
| 621 | try expectCanonical( |
| 622 | \\{"asd":"sdf","dfg":"fgh"} |
| 623 | ); |
| 624 | } |
| 625 | test { |
| 626 | try expectCanonical( |
| 627 | \\{"min":-1.0e+28,"max":1.0e+28} |
| 628 | ); |
| 629 | } |
| 630 | test { |
| 631 | try expectCanonical( |
| 632 | \\[{"type":"interface","name":"A","inheritance":null,"members":[{"type":"operation","name":"toWord","idlType":{"type":"return-type","extAttrs":[],"generic":"","nullable":false,"union":false,"idlType":"DOMString"},"arguments":[{"type":"argument","name":"index","extAttrs":[],"idlType":{"type":"argument-type","extAttrs":[],"generic":"","nullable":false,"union":false,"idlType":"unsigned long"},"default":null,"optional":false,"variadic":false}],"extAttrs":[],"special":"getter"}],"extAttrs":[{"type":"extended-attribute","name":"Exposed","rhs":{"type":"identifier","value":"Window"},"arguments":[]}],"partial":false}] |
| 633 | ); |
| 634 | } |