File: jsonfmt_test.go

package info (click to toggle)
golang-github-dsnet-golib 0.0~git20171103.1ea1667-1.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 240 kB
  • sloc: makefile: 2
file content (547 lines) | stat: -rw-r--r-- 24,986 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
// Copyright 2017, Joe Tsai. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE.md file.

package jsonfmt

import (
	"strings"
	"testing"

	"github.com/google/go-cmp/cmp"
)

func TestFormat(t *testing.T) {
	tests := []struct {
		in   string
		out  string
		err  error
		opts []Option
	}{{
		in:  "",
		out: "",
		err: jsonError{line: 1, column: 1, message: `unable to parse value: unexpected EOF`},
	}, {
		in:  `["]`,
		out: `["]`,
		err: jsonError{line: 1, column: 2, message: `unable to parse string: "\"]"`},
	}, {
		in:  "[\n\n\n]",
		out: `[]`,
	}, {
		in:  "{\n\n\n}",
		out: `{}`,
	}, {
		in: `{"firstName":"John","lastName":"Smith","isAlive":true,"age":25,"address":{"streetAddress":"21 2nd Street","city":"New York","state":"NY","postalCode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"},{"type":"mobile","number":"123 456-7890"}],"children":[],"spouse":null}`,
		out: `
			{
				"firstName": "John",
				"lastName":  "Smith",
				"isAlive":   true,
				"age":       25,
				"address": {
					"streetAddress": "21 2nd Street",
					"city":          "New York",
					"state":         "NY",
					"postalCode":    "10021-3100"
				},
				"phoneNumbers": [
					{"type": "home",   "number": "212 555-1234"},
					{"type": "office", "number": "646 555-4567"},
					{"type": "mobile", "number": "123 456-7890"}
				],
				"children": [],
				"spouse":   null
			}`,
	}, {
		in: `[[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}], [{"0123456789": "0123456789"}, {"0123456789": "0123456789"}], [{"0123456789": "0123456789"}, {"0123456789": "0123456789"}]]`,
		out: `
			[
				[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}],
				[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}],
				[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}]
			]`,
	}, {
		in: `[[{"0123456789012345678901234567890123456789": "0123456789"}, {"0123456789": "0123456789012345678901234567890123456789"}], [{"0123456789": "0123456789"}, {"0123456789": "0123456789"}], [{"0123456789": "0123456789"}, {"0123456789": "0123456789"}]]`,
		out: `
			[
				[
					{"0123456789012345678901234567890123456789": "0123456789"},
					{"0123456789": "0123456789012345678901234567890123456789"}
				],
				[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}],
				[{"0123456789": "0123456789"}, {"0123456789": "0123456789"}]
			]`,
	}, {
		in: `
			{
				"Management": {
					"ServeAddress": "localhost:8080", "PasswordSalt": "", "PasswordHash": "",
					"SMTP": {"RelayServer": "mail.example.com:587", "Password":"abcdefghijklmnopqrstuvwxyz", "From":"noreply@example.com", "To":"noreply@example.com"},
				},

				// SSH comment.
				"SSH": {
					"KeyFiles":       ["key.priv"], // SSH key file
					"KnownHostFiles": [], // SSH known hosts file
				},

				"RateLimit":    "10Mi",
				"AutoSnapshot": {"Cron": "* * * * *", "Count": 3, "TimeZone": "Local"},
				"SendFlags":    ["-w"],
				"RecvFlags":    ["-s"],
				"Datasets": [{
					"AutoSnapshot": {"Cron": "0 6 * * *", "TimeZone": "Local", "Count": 30},
					"Source":  "//example.com/tank/fizz",
					"Mirrors": ["//foo.example.com/tank/replicas/fizz-drive"],
				}, {
					"Source":  "//example.com/tank/buzz",
					"Mirrors": ["//foo.example.com/tank/replicas/buzz-drive"],
				}, {
					// Seperate dataset so it has its own readonly setting
					"Source":  "//example.com/tank/users",
					"Mirrors": ["//foo.example.com/tank/replicas/users"],
				}],
			}`,
		out: `
			{
				"Management": {
					"ServeAddress": "localhost:8080", "PasswordSalt": "", "PasswordHash": "",
					"SMTP": {
						"RelayServer": "mail.example.com:587",
						"Password":    "abcdefghijklmnopqrstuvwxyz",
						"From":        "noreply@example.com",
						"To":          "noreply@example.com",
					},
				},

				// SSH comment.
				"SSH": {
					"KeyFiles":       ["key.priv"], // SSH key file
					"KnownHostFiles": [],           // SSH known hosts file
				},

				"RateLimit":    "10Mi",
				"AutoSnapshot": {"Cron": "* * * * *", "Count": 3, "TimeZone": "Local"},
				"SendFlags":    ["-w"],
				"RecvFlags":    ["-s"],
				"Datasets": [{
					"AutoSnapshot": {"Cron": "0 6 * * *", "TimeZone": "Local", "Count": 30},
					"Source":       "//example.com/tank/fizz",
					"Mirrors":      ["//foo.example.com/tank/replicas/fizz-drive"],
				}, {
					"Source":  "//example.com/tank/buzz",
					"Mirrors": ["//foo.example.com/tank/replicas/buzz-drive"],
				}, {
					// Seperate dataset so it has its own readonly setting
					"Source":  "//example.com/tank/users",
					"Mirrors": ["//foo.example.com/tank/replicas/users"],
				}],
			}`,
	}, {
		in: `
			{
				"Management": {
					"ServeAddress": "localhost:8080", "PasswordSalt": "", "PasswordHash": "",
					"SMTP": {"RelayServer": "mail.example.com:587", "Password":"abcdefghijklmnopqrstuvwxyz", "From":"noreply@example.com", "To":"noreply@example.com"},
				},

				// SSH comment.
				"SSH": {
					"KeyFiles":       ["key.priv"], // SSH key file
					"KnownHostFiles": [], // SSH known hosts file
				},

				"RateLimit":    "10Mi",
				"AutoSnapshot": {"Cron": "* * * * *", "Count": 3, "TimeZone": "Local"},
				"SendFlags":    ["-w"],
				"RecvFlags":    ["-s"],
				"Datasets": [{
					"AutoSnapshot": {"Cron": "0 6 * * *", "TimeZone": "Local", "Count": 30},
					"Source":  "//example.com/tank/fizz",
					"Mirrors": ["//foo.example.com/tank/replicas/fizz-drive"],
				}, {
					"Source":  "//example.com/tank/buzz",
					"Mirrors": ["//foo.example.com/tank/replicas/buzz-drive"],
				}, {
					// Seperate dataset so it has its own readonly setting
					"Source":  "//example.com/tank/users",
					"Mirrors": ["//foo.example.com/tank/replicas/users"],
				}],
			}`,
		out:  `{"Management":{"ServeAddress":"localhost:8080","PasswordSalt":"","PasswordHash":"","SMTP":{"RelayServer":"mail.example.com:587","Password":"abcdefghijklmnopqrstuvwxyz","From":"noreply@example.com","To":"noreply@example.com"}},"SSH":{"KeyFiles":["key.priv"],"KnownHostFiles":[]},"RateLimit":"10Mi","AutoSnapshot":{"Cron":"* * * * *","Count":3,"TimeZone":"Local"},"SendFlags":["-w"],"RecvFlags":["-s"],"Datasets":[{"AutoSnapshot":{"Cron":"0 6 * * *","TimeZone":"Local","Count":30},"Source":"//example.com/tank/fizz","Mirrors":["//foo.example.com/tank/replicas/fizz-drive"]},{"Source":"//example.com/tank/buzz","Mirrors":["//foo.example.com/tank/replicas/buzz-drive"]},{"Source":"//example.com/tank/users","Mirrors":["//foo.example.com/tank/replicas/users"]}]}`,
		opts: []Option{Minify()},
	}, {
		in: `{"Management":{"ServeAddress":"localhost:8080","PasswordSalt":"","PasswordHash":"","SMTP":{"RelayServer":"mail.example.com:587","Password":"abcdefghijklmnopqrstuvwxyz","From":"noreply@example.com","To":"noreply@example.com"}},"SSH":{"KeyFiles":["key.priv"],"KnownHostFiles":[]},"RateLimit":"10Mi","AutoSnapshot":{"Cron":"* * * * *","Count":3,"TimeZone":"Local"},"SendFlags":["-w"],"RecvFlags":["-s"],"Datasets":[{"AutoSnapshot":{"Cron":"0 6 * * *","TimeZone":"Local","Count":30},"Source":"//example.com/tank/fizz","Mirrors":["//foo.example.com/tank/replicas/fizz-drive"]},{"Source":"//example.com/tank/buzz","Mirrors":["//foo.example.com/tank/replicas/buzz-drive"]},{"Source":"//example.com/tank/users","Mirrors":["//foo.example.com/tank/replicas/users"]}]}`,
		out: `
			{
				"Management": {
					"ServeAddress": "localhost:8080",
					"PasswordSalt": "",
					"PasswordHash": "",
					"SMTP": {
						"RelayServer": "mail.example.com:587",
						"Password":    "abcdefghijklmnopqrstuvwxyz",
						"From":        "noreply@example.com",
						"To":          "noreply@example.com"
					}
				},
				"SSH":          {"KeyFiles": ["key.priv"], "KnownHostFiles": []},
				"RateLimit":    "10Mi",
				"AutoSnapshot": {"Cron": "* * * * *", "Count": 3, "TimeZone": "Local"},
				"SendFlags":    ["-w"],
				"RecvFlags":    ["-s"],
				"Datasets": [{
					"AutoSnapshot": {"Cron": "0 6 * * *", "TimeZone": "Local", "Count": 30},
					"Source":       "//example.com/tank/fizz",
					"Mirrors":      ["//foo.example.com/tank/replicas/fizz-drive"]
				}, {
					"Source":  "//example.com/tank/buzz",
					"Mirrors": ["//foo.example.com/tank/replicas/buzz-drive"]
				}, {
					"Source":  "//example.com/tank/users",
					"Mirrors": ["//foo.example.com/tank/replicas/users"]
				}]
			}`,
	}, {
		in: "[\n123456789,\n123456789,\n123456789,\n]",
		out: `
			[
				123456789,
				123456789,
				123456789,
			]`,
	}, {
		in: "[\n123456789,\n123456789,\n123456789,\n]",
		out: `
			[
				123456789,
				123456789,
				123456789
			]`,
		opts: []Option{Standardize()},
	}, {
		in:   "[\n123456789,\n123456789,\n123456789,\n]",
		out:  "[123456789,123456789,123456789]",
		opts: []Option{Minify()},
	}, {
		in: `{
			/* comment */
			"key"
			/* comment */
			:
			/* comment */
			"record"
			/* comment */
			,
			/* comment */
			"key"
			/* comment */
			:
			/* comment */
			"record"
			/* comment */
			,
		}`,
		out: `
			{
				/* comment */
				"key"
				/* comment */ :
					/* comment */
					"record"
					/* comment */ ,
				/* comment */
				"key"
				/* comment */ :
					/* comment */
					"record"
					/* comment */ ,
			}`,
	}, {
		in: `

					/*
					* Block comment.
					*/
					"Text"
		`,
		out: `
			/*
			 * Block comment.
			 */
			"Text"`,
	}, {
		in: `
			[
								{
									"fwafwa" /*ffawe*/:
							    		"fewafwaf",

					"fwafwafwae":




				                 		"fwafewa",},

			[/*comment*/
			{/*comment*/},
				{

				}




				],

					{"fwafwa":



							    		"fewafwaf",
					"fwafwafwae": "dwafewa",//fea
					"fwafwafwae"://fa
					"fwafewa",},

					{
						"fwafwa": 0.0000000000000000000033242000000,
					"fwafwafwae"


					:				"fwafewa",
					 },
					 ["fweafewa","faewfaew","afwefawe"/*
					 fewfaew
					 fewafewa*/]
			 				    ]`,
		out: `
			[
				{
					"fwafwa" /*ffawe*/ :
						"fewafwaf",

					"fwafwafwae":
						"fwafewa",
				},

				[ /*comment*/
					{ /*comment*/ },
					{},
				],

				{
					"fwafwa":
						"fewafwaf",
					"fwafwafwae": "dwafewa", //fea
					"fwafwafwae":            //fa
						"fwafewa",
				},

				{
					"fwafwa":     3.3242e-21,
					"fwafwafwae": "fwafewa",
				},
				["fweafewa", "faewfaew", "afwefawe", /*
				fewfaew
				fewafewa*/ ],
			]`,
	}, {
		in: `
			[
				{"keyX": [1,2,3,4,5]},
				{"keyXX": [1,2,3], "keyZ": {"subkey": "value"},},
				{"keyY": "val", "keyZZ": [[[[[[[1,2,3]]]]]]]},
			]`,
		out: `
			[
				{"keyX":  [1, 2, 3, 4, 5]},
				{"keyXX": [1, 2, 3], "keyZ":  {"subkey": "value"}},
				{"keyY":  "val",     "keyZZ": [[[[[[[1, 2, 3]]]]]]]},
			]`,
	}, {
		in: `
			{
				"key": "val01234567", // Comment 1
				"key01234567890123456789": "val0123456789", // Comment 2
				"key": "val", // Comment 3
				"key0123456789": "val0123", // Comment 4
			}`,
		out: `
			{
				"key":                     "val01234567",   // Comment 1
				"key01234567890123456789": "val0123456789", // Comment 2
				"key":                     "val",           // Comment 3
				"key0123456789":           "val0123",       // Comment 4
			}`,
	}, {
		in: `
			{
				"key012345678901234567890": "val0123456789", // Comment 2
				"key": "val01234567", // Comment 1
				"key": "val", // Comment 3
				"key0123456789": "val0123", // Comment 4
			}`,
		out: `
			{
				"key012345678901234567890": "val0123456789", // Comment 2
				"key":           "val01234567",              // Comment 1
				"key":           "val",     // Comment 3
				"key0123456789": "val0123", // Comment 4
			}`,
	}, {
		in:  `/**//**/{/**//**/"key"/**//**/:/**//**/"val"/**//**/}/**//**/`,
		out: `/**/ /**/ { /**/ /**/ "key" /**/ /**/ : /**/ /**/ "val" /**/ /**/ } /**/ /**/`,
	}, {
		in:  `{"PrimeNumbers": [{}, 2, 3, 5, 7, 11, 13, 17, 19, {}]}`,
		out: `{"PrimeNumbers": [{}, 2, 3, 5, 7, 11, 13, 17, 19, {}]}`,
	}, {
		in: `{"PrimeNumbers": [{}, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, {}, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, {}]}`,
		out: `
			{"PrimeNumbers": [
				{},
				2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
				79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
				163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
				251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
				349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
				443, 449, 457, 461, 463, 467, 479, 487, 491, 499,
				{},
				503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
				613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709,
				719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823,
				827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937,
				941, 947, 953, 967, 971, 977, 983, 991, 997,
				{}
			]}`,
	}, {
		in: `
			{"PrimeNumbers": [
				// Group 1.
				{}, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,	83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
				227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383,
				389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
				467, 479, 487, 491, 499, {}, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
				// Group 2.
				653, 659, 661, 673, 677, 683,
				691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761,
				769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883,
				887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, {}
			]}`,
		out: `
			{"PrimeNumbers": [
				// Group 1.
				{}, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
				73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
				163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
				227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311,
				313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383,
				389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
				467, 479, 487, 491, 499, {}, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571,
				577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647,
				// Group 2.
				653, 659, 661, 673, 677, 683,
				691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761,
				769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877,
				881, 883,
				887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, {}
			]}`,
	}, {
		in: `[[[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]]]`,
		out: `
			[
				[
					[
						2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
						79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
						163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
						251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
						349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
						443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
						557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
						647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
						757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
						863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977,
						983, 991, 997
					],
					2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
					79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
					163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
					251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
					349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
					443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
					557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
					647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
					757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
					863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977,
					983, 991, 997
				],
				2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
				79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
				163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
				251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
				349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
				443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
				557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
				647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
				757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
				863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977,
				983, 991, 997,
				[
					2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
					79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
					163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
					251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
					349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
					443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
					557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
					647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
					757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
					863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977,
					983, 991, 997,
					[
						2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
						79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
						163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
						251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347,
						349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
						443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
						557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
						647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
						757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859,
						863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977,
						983, 991, 997
					]
				]
			]`,
	}, {
		in: `
			{
				"key": "val", "key": "val", "key": "reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvalue",
			}`,
		out: `
			{
				"key": "val", "key": "val",
				"key": "reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongvalue",
			}`,
	}}

	for i, tt := range tests {
		// Adjust output for leading tabs and newlines.
		want := strings.Join(strings.Split(tt.out, "\n\t\t\t"), "\n")
		if strings.HasPrefix(want, "\n") {
			want = want[1:] + "\n"
		}

		got, err := Format([]byte(tt.in), tt.opts...)
		if got := string(got); got != want || err != tt.err {
			diff := cmp.Diff(strings.Split(got, "\n"), strings.Split(want, "\n"))
			t.Errorf("test %d, Format output mismatch (-got +want):\n%s\ngot  `%v`\nwant `%v`", i, diff, got, want)
		}
		if err != tt.err {
			t.Errorf("test %d, Format error mismatch:\ngot  %v\nwant %v`", i, err, tt.err)

		}
	}
}