github.com/patricebensoussan/go/codec@v1.2.99/z_all_test.go (about) 1 // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved. 2 // Use of this source code is governed by a MIT license found in the LICENSE file. 3 4 //go:build alltests && go1.9 5 // +build alltests,go1.9 6 7 package codec 8 9 // Run this using: 10 // go test -tags=alltests -run=Suite -coverprofile=cov.out 11 // go tool cover -html=cov.out 12 // 13 // Because build tags are a build time parameter, we will have to test out the 14 // different tags separately. 15 // Tags: x codecgen codec.safe codec.notfastpath appengine 16 // 17 // These tags should be added to alltests, e.g. 18 // go test '-tags=alltests x codecgen' -run=Suite -coverprofile=cov.out 19 // 20 // To run all tests before submitting code, run: 21 // a=( "" "codec.safe" "codecgen" "codec.notfastpath" "codecgen codec.notfastpath" "codecgen codec.safe" "codec.safe codec.notfastpath" ) 22 // for i in "${a[@]}"; do echo ">>>> TAGS: $i"; go test "-tags=alltests $i" -run=Suite; done 23 // 24 // This suite of tests requires support for subtests and suites, 25 // and conseqneutly will only run on go1.7 and above. 26 27 // find . -name "codec_test.go" | xargs grep -e '^func Test' | \ 28 // cut -d '(' -f 1 | cut -d ' ' -f 2 | \ 29 // while read f; do echo "t.Run(\"$f\", $f)"; done 30 31 import ( 32 "testing" 33 "time" 34 ) 35 36 // func TestMain(m *testing.M) { 37 // println("calling TestMain") 38 // // set some parameters 39 // exitcode := m.Run() 40 // os.Exit(exitcode) 41 // } 42 43 type testTimeTracker struct { 44 t time.Time 45 } 46 47 func (tt *testTimeTracker) Elapsed() (d time.Duration) { 48 if !tt.t.IsZero() { 49 d = time.Since(tt.t) 50 } 51 tt.t = time.Now() 52 return 53 } 54 55 func testGroupResetFlags() { 56 testRpcBufsize = 2048 57 testUseIoEncDec = -1 58 testUseReset = false 59 testUseParallel = false 60 testMaxInitLen = 0 61 testUseIoWrapper = false 62 testNumRepeatString = 8 63 testDepth = 0 64 testDecodeOptions = DecodeOptions{} 65 testEncodeOptions = EncodeOptions{} 66 67 testJsonH.Indent = 0 // -1? 68 testJsonH.HTMLCharsAsIs = false 69 testJsonH.MapKeyAsString = false 70 testJsonH.PreferFloat = false 71 72 testCborH.IndefiniteLength = false 73 testCborH.TimeRFC3339 = false 74 testCborH.SkipUnexpectedTags = false 75 testBincH.AsSymbols = 0 // 2? AsSymbolNone 76 77 testMsgpackH.WriteExt = false 78 testMsgpackH.NoFixedNum = false 79 testMsgpackH.PositiveIntUnsigned = false 80 81 testSimpleH.EncZeroValuesAsNil = false 82 } 83 84 func testCodecGroup(t *testing.T) { 85 // <setup code> 86 testJsonGroup(t) 87 testBincGroup(t) 88 testCborGroup(t) 89 testMsgpackGroup(t) 90 testSimpleGroup(t) 91 // testSimpleMammothGroup(t) 92 // testRpcGroup(t) 93 testNonHandlesGroup(t) 94 95 testCodecGroupV(t) 96 // <tear-down code> 97 } 98 99 func testCodecGroupV(t *testing.T) { 100 testJsonGroupV(t) 101 testBincGroupV(t) 102 testCborGroupV(t) 103 testMsgpackGroupV(t) 104 testSimpleGroupV(t) 105 } 106 107 func testJsonGroup(t *testing.T) { 108 t.Run("TestJsonCodecsEmbeddedPointer", TestJsonCodecsEmbeddedPointer) 109 t.Run("TestJsonCodecChan", TestJsonCodecChan) 110 t.Run("TestJsonStdEncIntf", TestJsonStdEncIntf) 111 t.Run("TestJsonMammoth", TestJsonMammoth) 112 t.Run("TestJsonRaw", TestJsonRaw) 113 t.Run("TestJsonRpcGo", TestJsonRpcGo) 114 t.Run("TestJsonLargeInteger", TestJsonLargeInteger) 115 t.Run("TestJsonDecodeNonStringScalarInStringContext", TestJsonDecodeNonStringScalarInStringContext) 116 t.Run("TestJsonEncodeIndent", TestJsonEncodeIndent) 117 118 t.Run("TestJsonRawExt", TestJsonRawExt) 119 t.Run("TestJsonMapStructKey", TestJsonMapStructKey) 120 t.Run("TestJsonDecodeNilMapValue", TestJsonDecodeNilMapValue) 121 t.Run("TestJsonEmbeddedFieldPrecedence", TestJsonEmbeddedFieldPrecedence) 122 t.Run("TestJsonLargeContainerLen", TestJsonLargeContainerLen) 123 t.Run("TestJsonMammothMapsAndSlices", TestJsonMammothMapsAndSlices) 124 t.Run("TestJsonTime", TestJsonTime) 125 t.Run("TestJsonUintToInt", TestJsonUintToInt) 126 t.Run("TestJsonDifferentMapOrSliceType", TestJsonDifferentMapOrSliceType) 127 t.Run("TestJsonScalars", TestJsonScalars) 128 t.Run("TestJsonOmitempty", TestJsonOmitempty) 129 t.Run("TestJsonIntfMapping", TestJsonIntfMapping) 130 t.Run("TestJsonMissingFields", TestJsonMissingFields) 131 t.Run("TestJsonMaxDepth", TestJsonMaxDepth) 132 t.Run("TestJsonSelfExt", TestJsonSelfExt) 133 t.Run("TestJsonBytesEncodedAsArray", TestJsonBytesEncodedAsArray) 134 t.Run("TestJsonMapEncodeForCanonical", TestJsonMapEncodeForCanonical) 135 t.Run("TestJsonRawToStringToRawEtc", TestJsonRawToStringToRawEtc) 136 t.Run("TestJsonStructKeyType", TestJsonStructKeyType) 137 t.Run("TestJsonPreferArrayOverSlice", TestJsonPreferArrayOverSlice) 138 t.Run("TestJsonZeroCopyBytes", TestJsonZeroCopyBytes) 139 t.Run("TestJsonNumbers", TestJsonNumbers) 140 t.Run("TestJsonDesc", TestJsonDesc) 141 t.Run("TestJsonStructFieldInfoToArray", TestJsonStructFieldInfoToArray) 142 143 t.Run("TestJsonInvalidUnicode", TestJsonInvalidUnicode) 144 t.Run("TestJsonNumberParsing", TestJsonNumberParsing) 145 } 146 147 func testJsonGroupV(t *testing.T) { 148 t.Run("TestJsonCodecsTable", TestJsonCodecsTable) 149 t.Run("TestJsonCodecsMisc", TestJsonCodecsMisc) 150 t.Run("TestJsonSwallowAndZero", TestJsonSwallowAndZero) 151 t.Run("TestJsonNextValueBytes", TestJsonNextValueBytes) 152 t.Run("TestJsonStrucEncDec", TestJsonStrucEncDec) 153 } 154 155 func testBincGroup(t *testing.T) { 156 t.Run("TestBincCodecsEmbeddedPointer", TestBincCodecsEmbeddedPointer) 157 t.Run("TestBincStdEncIntf", TestBincStdEncIntf) 158 t.Run("TestBincMammoth", TestBincMammoth) 159 t.Run("TestBincRaw", TestBincRaw) 160 t.Run("TestBincRpcGo", TestBincRpcGo) 161 t.Run("TestBincUnderlyingType", TestBincUnderlyingType) 162 163 t.Run("TestBincRawExt", TestBincRawExt) 164 t.Run("TestBincMapStructKey", TestBincMapStructKey) 165 t.Run("TestBincDecodeNilMapValue", TestBincDecodeNilMapValue) 166 t.Run("TestBincEmbeddedFieldPrecedence", TestBincEmbeddedFieldPrecedence) 167 t.Run("TestBincLargeContainerLen", TestBincLargeContainerLen) 168 t.Run("TestBincMammothMapsAndSlices", TestBincMammothMapsAndSlices) 169 t.Run("TestBincTime", TestBincTime) 170 t.Run("TestBincUintToInt", TestBincUintToInt) 171 t.Run("TestBincDifferentMapOrSliceType", TestBincDifferentMapOrSliceType) 172 t.Run("TestBincScalars", TestBincScalars) 173 t.Run("TestBincOmitempty", TestBincOmitempty) 174 t.Run("TestBincIntfMapping", TestBincIntfMapping) 175 t.Run("TestBincMissingFields", TestBincMissingFields) 176 t.Run("TestBincMaxDepth", TestBincMaxDepth) 177 t.Run("TestBincSelfExt", TestBincSelfExt) 178 t.Run("TestBincBytesEncodedAsArray", TestBincBytesEncodedAsArray) 179 t.Run("TestBincMapEncodeForCanonical", TestBincMapEncodeForCanonical) 180 t.Run("TestBincRawToStringToRawEtc", TestBincRawToStringToRawEtc) 181 t.Run("TestBincStructKeyType", TestBincStructKeyType) 182 t.Run("TestBincPreferArrayOverSlice", TestBincPreferArrayOverSlice) 183 t.Run("TestBincZeroCopyBytes", TestBincZeroCopyBytes) 184 t.Run("TestBincNumbers", TestBincNumbers) 185 t.Run("TestBincDesc", TestBincDesc) 186 t.Run("TestBincStructFieldInfoToArray", TestBincStructFieldInfoToArray) 187 } 188 189 func testBincGroupV(t *testing.T) { 190 t.Run("TestBincCodecsTable", TestBincCodecsTable) 191 t.Run("TestBincCodecsMisc", TestBincCodecsMisc) 192 t.Run("TestBincSwallowAndZero", TestBincSwallowAndZero) 193 t.Run("TestBincNextValueBytes", TestBincNextValueBytes) 194 t.Run("TestBincStrucEncDec", TestBincStrucEncDec) 195 } 196 197 func testCborGroup(t *testing.T) { 198 t.Run("TestCborCodecsEmbeddedPointer", TestCborCodecsEmbeddedPointer) 199 t.Run("TestCborCodecChan", TestCborCodecChan) 200 t.Run("TestCborStdEncIntf", TestCborStdEncIntf) 201 t.Run("TestCborMammoth", TestCborMammoth) 202 t.Run("TestCborRaw", TestCborRaw) 203 t.Run("TestCborRpcGo", TestCborRpcGo) 204 205 t.Run("TestCborRawExt", TestCborRawExt) 206 t.Run("TestCborMapStructKey", TestCborMapStructKey) 207 t.Run("TestCborDecodeNilMapValue", TestCborDecodeNilMapValue) 208 t.Run("TestCborEmbeddedFieldPrecedence", TestCborEmbeddedFieldPrecedence) 209 t.Run("TestCborLargeContainerLen", TestCborLargeContainerLen) 210 t.Run("TestCborMammothMapsAndSlices", TestCborMammothMapsAndSlices) 211 t.Run("TestCborTime", TestCborTime) 212 t.Run("TestCborUintToInt", TestCborUintToInt) 213 t.Run("TestCborDifferentMapOrSliceType", TestCborDifferentMapOrSliceType) 214 t.Run("TestCborScalars", TestCborScalars) 215 t.Run("TestCborOmitempty", TestCborOmitempty) 216 t.Run("TestCborIntfMapping", TestCborIntfMapping) 217 t.Run("TestCborMissingFields", TestCborMissingFields) 218 t.Run("TestCborMaxDepth", TestCborMaxDepth) 219 t.Run("TestCborSelfExt", TestCborSelfExt) 220 t.Run("TestCborBytesEncodedAsArray", TestCborBytesEncodedAsArray) 221 t.Run("TestCborMapEncodeForCanonical", TestCborMapEncodeForCanonical) 222 t.Run("TestCborRawToStringToRawEtc", TestCborRawToStringToRawEtc) 223 t.Run("TestCborStructKeyType", TestCborStructKeyType) 224 t.Run("TestCborPreferArrayOverSlice", TestCborPreferArrayOverSlice) 225 t.Run("TestCborZeroCopyBytes", TestCborZeroCopyBytes) 226 t.Run("TestCborNumbers", TestCborNumbers) 227 t.Run("TestCborDesc", TestCborDesc) 228 t.Run("TestCborStructFieldInfoToArray", TestCborStructFieldInfoToArray) 229 230 t.Run("TestCborHalfFloat", TestCborHalfFloat) 231 t.Run("TestCborSkipTags", TestCborSkipTags) 232 } 233 234 func testCborGroupV(t *testing.T) { 235 t.Run("TestCborCodecsTable", TestCborCodecsTable) 236 t.Run("TestCborCodecsMisc", TestCborCodecsMisc) 237 t.Run("TestCborSwallowAndZero", TestCborSwallowAndZero) 238 t.Run("TestCborNextValueBytes", TestCborNextValueBytes) 239 t.Run("TestCborStrucEncDec", TestCborStrucEncDec) 240 } 241 242 func testMsgpackGroup(t *testing.T) { 243 t.Run("TestMsgpackCodecsEmbeddedPointer", TestMsgpackCodecsEmbeddedPointer) 244 t.Run("TestMsgpackStdEncIntf", TestMsgpackStdEncIntf) 245 t.Run("TestMsgpackMammoth", TestMsgpackMammoth) 246 t.Run("TestMsgpackRaw", TestMsgpackRaw) 247 t.Run("TestMsgpackRpcGo", TestMsgpackRpcGo) 248 t.Run("TestMsgpackRpcSpec", TestMsgpackRpcSpec) 249 250 t.Run("TestMsgpackRawExt", TestMsgpackRawExt) 251 t.Run("TestMsgpackMapStructKey", TestMsgpackMapStructKey) 252 t.Run("TestMsgpackDecodeNilMapValue", TestMsgpackDecodeNilMapValue) 253 t.Run("TestMsgpackEmbeddedFieldPrecedence", TestMsgpackEmbeddedFieldPrecedence) 254 t.Run("TestMsgpackLargeContainerLen", TestMsgpackLargeContainerLen) 255 t.Run("TestMsgpackMammothMapsAndSlices", TestMsgpackMammothMapsAndSlices) 256 t.Run("TestMsgpackTime", TestMsgpackTime) 257 t.Run("TestMsgpackUintToInt", TestMsgpackUintToInt) 258 t.Run("TestMsgpackDifferentMapOrSliceType", TestMsgpackDifferentMapOrSliceType) 259 t.Run("TestMsgpackScalars", TestMsgpackScalars) 260 t.Run("TestMsgpackOmitempty", TestMsgpackOmitempty) 261 t.Run("TestMsgpackIntfMapping", TestMsgpackIntfMapping) 262 t.Run("TestMsgpackMissingFields", TestMsgpackMissingFields) 263 t.Run("TestMsgpackMaxDepth", TestMsgpackMaxDepth) 264 t.Run("TestMsgpackSelfExt", TestMsgpackSelfExt) 265 t.Run("TestMsgpackBytesEncodedAsArray", TestMsgpackBytesEncodedAsArray) 266 t.Run("TestMsgpackMapEncodeForCanonical", TestMsgpackMapEncodeForCanonical) 267 t.Run("TestMsgpackRawToStringToRawEtc", TestMsgpackRawToStringToRawEtc) 268 t.Run("TestMsgpackStructKeyType", TestMsgpackStructKeyType) 269 t.Run("TestMsgpackPreferArrayOverSlice", TestMsgpackPreferArrayOverSlice) 270 t.Run("TestMsgpackZeroCopyBytes", TestMsgpackZeroCopyBytes) 271 t.Run("TestMsgpackNumbers", TestMsgpackNumbers) 272 t.Run("TestMsgpackDesc", TestMsgpackDesc) 273 t.Run("TestMsgpackStructFieldInfoToArray", TestMsgpackStructFieldInfoToArray) 274 275 t.Run("TestMsgpackDecodeMapAndExtSizeMismatch", TestMsgpackDecodeMapAndExtSizeMismatch) 276 } 277 278 func testMsgpackGroupV(t *testing.T) { 279 t.Run("TestMsgpackCodecsTable", TestMsgpackCodecsTable) 280 t.Run("TestMsgpackCodecsMisc", TestMsgpackCodecsMisc) 281 t.Run("TestMsgpackSwallowAndZero", TestMsgpackSwallowAndZero) 282 t.Run("TestMsgpackNextValueBytes", TestMsgpackNextValueBytes) 283 t.Run("TestMsgpackStrucEncDec", TestMsgpackStrucEncDec) 284 } 285 286 func testSimpleGroup(t *testing.T) { 287 t.Run("TestSimpleCodecsEmbeddedPointer", TestSimpleCodecsEmbeddedPointer) 288 t.Run("TestSimpleStdEncIntf", TestSimpleStdEncIntf) 289 t.Run("TestSimpleMammoth", TestSimpleMammoth) 290 t.Run("TestSimpleRaw", TestSimpleRaw) 291 t.Run("TestSimpleRpcGo", TestSimpleRpcGo) 292 293 t.Run("TestSimpleRawExt", TestSimpleRawExt) 294 t.Run("TestSimpleMapStructKey", TestSimpleMapStructKey) 295 t.Run("TestSimpleDecodeNilMapValue", TestSimpleDecodeNilMapValue) 296 t.Run("TestSimpleEmbeddedFieldPrecedence", TestSimpleEmbeddedFieldPrecedence) 297 t.Run("TestSimpleLargeContainerLen", TestSimpleLargeContainerLen) 298 t.Run("TestSimpleMammothMapsAndSlices", TestSimpleMammothMapsAndSlices) 299 t.Run("TestSimpleTime", TestSimpleTime) 300 t.Run("TestSimpleUintToInt", TestSimpleUintToInt) 301 t.Run("TestSimpleDifferentMapOrSliceType", TestSimpleDifferentMapOrSliceType) 302 t.Run("TestSimpleScalars", TestSimpleScalars) 303 t.Run("TestSimpleOmitempty", TestSimpleOmitempty) 304 t.Run("TestSimpleIntfMapping", TestSimpleIntfMapping) 305 t.Run("TestSimpleMissingFields", TestSimpleMissingFields) 306 t.Run("TestSimpleMaxDepth", TestSimpleMaxDepth) 307 t.Run("TestSimpleSelfExt", TestSimpleSelfExt) 308 t.Run("TestSimpleBytesEncodedAsArray", TestSimpleBytesEncodedAsArray) 309 t.Run("TestSimpleMapEncodeForCanonical", TestSimpleMapEncodeForCanonical) 310 t.Run("TestSimpleRawToStringToRawEtc", TestSimpleRawToStringToRawEtc) 311 t.Run("TestSimpleStructKeyType", TestSimpleStructKeyType) 312 t.Run("TestSimplePreferArrayOverSlice", TestSimplePreferArrayOverSlice) 313 t.Run("TestSimpleZeroCopyBytes", TestSimpleZeroCopyBytes) 314 t.Run("TestSimpleNumbers", TestSimpleNumbers) 315 t.Run("TestSimpleDesc", TestSimpleDesc) 316 t.Run("TestSimpleStructFieldInfoToArray", TestSimpleStructFieldInfoToArray) 317 } 318 319 func testSimpleGroupV(t *testing.T) { 320 t.Run("TestSimpleCodecsTable", TestSimpleCodecsTable) 321 t.Run("TestSimpleCodecsMisc", TestSimpleCodecsMisc) 322 t.Run("TestSimpleSwallowAndZero", TestSimpleSwallowAndZero) 323 t.Run("TestSimpleNextValueBytes", TestSimpleNextValueBytes) 324 t.Run("TestSimpleStrucEncDec", TestSimpleStrucEncDec) 325 } 326 327 func testSimpleMammothGroup(t *testing.T) { 328 t.Run("TestSimpleMammothMapsAndSlices", TestSimpleMammothMapsAndSlices) 329 } 330 331 func testRpcGroup(t *testing.T) { 332 t.Run("TestBincRpcGo", TestBincRpcGo) 333 t.Run("TestSimpleRpcGo", TestSimpleRpcGo) 334 t.Run("TestMsgpackRpcGo", TestMsgpackRpcGo) 335 t.Run("TestCborRpcGo", TestCborRpcGo) 336 t.Run("TestJsonRpcGo", TestJsonRpcGo) 337 t.Run("TestMsgpackRpcSpec", TestMsgpackRpcSpec) 338 } 339 340 func testNonHandlesGroup(t *testing.T) { 341 // grep "func Test" codec_test.go | grep -v -E '(Cbor|Json|Simple|Msgpack|Binc)' 342 t.Run("TestBufioDecReader", TestBufioDecReader) 343 t.Run("TestAtomic", TestAtomic) 344 t.Run("TestAllEncCircularRef", TestAllEncCircularRef) 345 t.Run("TestAllAnonCycle", TestAllAnonCycle) 346 t.Run("TestMultipleEncDec", TestMultipleEncDec) 347 t.Run("TestAllErrWriter", TestAllErrWriter) 348 t.Run("TestMapRangeIndex", TestMapRangeIndex) 349 } 350 351 func TestCodecSuite(t *testing.T) { 352 var tt testTimeTracker 353 tt.Elapsed() 354 355 fnRun := func(s string, f func(t *testing.T)) { 356 t.Run(s, f) 357 // xdebugf("%s: %v", s, tt.Elapsed()) 358 } 359 360 testGroupResetFlags() 361 362 testReinit() // so flag.Parse() is called first, and never called again 363 364 fnRun("optionsFalse", testCodecGroup) 365 366 testUseIoEncDec = 0 367 testUseReset = true 368 testUseParallel = true 369 370 testDecodeOptions.ZeroCopy = true 371 testDecodeOptions.InternString = true 372 testDecodeOptions.MapValueReset = true 373 374 // testDecodeOptions.ErrorIfNoField = true // error, as expected fields not there 375 // testDecodeOptions.ErrorIfNoArrayExpand = true // no error, but no error case either 376 // testDecodeOptions.PreferArrayOverSlice = true // error??? because slice != array. 377 testDecodeOptions.SignedInteger = true // error as deepEqual compares int64 to uint64 378 testDecodeOptions.SliceElementReset = true 379 testDecodeOptions.InterfaceReset = true 380 testDecodeOptions.RawToString = true 381 testDecodeOptions.PreferPointerForStructOrArray = true 382 383 testEncodeOptions.StructToArray = true 384 testEncodeOptions.Canonical = true 385 testEncodeOptions.CheckCircularRef = true 386 testEncodeOptions.RecursiveEmptyCheck = true 387 testEncodeOptions.OptimumSize = true 388 389 // testEncodeOptions.Raw = true 390 // testEncodeOptions.StringToRaw = true 391 392 testJsonH.HTMLCharsAsIs = true 393 // testJsonH.MapKeyAsString = true 394 // testJsonH.PreferFloat = true 395 396 testCborH.IndefiniteLength = true 397 testCborH.TimeRFC3339 = true 398 testCborH.SkipUnexpectedTags = true 399 400 testMsgpackH.WriteExt = true 401 testMsgpackH.NoFixedNum = true 402 testMsgpackH.PositiveIntUnsigned = true 403 404 // testSimpleH.EncZeroValuesAsNil = true 405 406 testReinit() 407 fnRun("optionsTrue", testCodecGroup) 408 409 testGroupResetFlags() 410 411 // --- 412 testDepth = 4 413 if testing.Short() { 414 testDepth = 2 415 } 416 testReinit() 417 fnRun("optionsTrue-deepstruct", testCodecGroupV) 418 testDepth = 0 419 420 // --- 421 // testEncodeOptions.AsSymbols = AsSymbolAll 422 testUseIoWrapper = true 423 testReinit() 424 fnRun("optionsTrue-ioWrapper", testCodecGroupV) 425 testUseIoWrapper = false 426 427 // testUseIoEncDec = -1 428 429 // --- 430 // make buffer small enough so that we have to re-fill multiple times 431 // and also such that writing a quoted struct name e.g. "LongFieldNameXYZ" 432 // will require a re-fill, and test out bufioEncWriter.writeqstr well. 433 // Due to last requirement, we prefer 16 to 128. 434 testSkipRPCTests = true 435 testUseIoEncDec = 16 436 // testDecodeOptions.ReaderBufferSize = 128 437 // testEncodeOptions.WriterBufferSize = 128 438 testReinit() 439 fnRun("optionsTrue-bufio", testCodecGroupV) 440 // testDecodeOptions.ReaderBufferSize = 0 441 // testEncodeOptions.WriterBufferSize = 0 442 testSkipRPCTests = false 443 testUseIoEncDec = -1 444 445 // --- 446 testNumRepeatString = 32 447 testReinit() 448 fnRun("optionsTrue-largestrings", testCodecGroupV) 449 testNumRepeatString = 8 450 451 testGroupResetFlags() 452 453 // --- 454 fnJsonReset := func(ml int, d int8, hca, mkas bool) func() { 455 return func() { 456 testMaxInitLen = ml 457 testJsonH.Indent = d 458 testJsonH.HTMLCharsAsIs = hca 459 testJsonH.MapKeyAsString = mkas 460 } 461 }(testMaxInitLen, testJsonH.Indent, testJsonH.HTMLCharsAsIs, testJsonH.MapKeyAsString) 462 463 testMaxInitLen = 10 464 testJsonH.MapKeyAsString = true 465 466 testJsonH.Indent = 8 467 testJsonH.HTMLCharsAsIs = true 468 testReinit() 469 fnRun("json-spaces-htmlcharsasis-initLen10", testJsonGroup) 470 471 testJsonH.Indent = -1 472 testJsonH.HTMLCharsAsIs = false 473 testReinit() 474 fnRun("json-tabs-initLen10", testJsonGroup) 475 476 fnJsonReset() 477 478 // --- 479 oldSymbols := testBincH.AsSymbols 480 481 testBincH.AsSymbols = 2 // AsSymbolNone 482 testReinit() 483 fnRun("binc-no-symbols", testBincGroup) 484 485 testBincH.AsSymbols = 1 // AsSymbolAll 486 testReinit() 487 fnRun("binc-all-symbols", testBincGroup) 488 489 testBincH.AsSymbols = oldSymbols 490 491 // --- 492 oldEncZeroValuesAsNil := testSimpleH.EncZeroValuesAsNil 493 testSimpleH.EncZeroValuesAsNil = !testSimpleH.EncZeroValuesAsNil 494 testReinit() 495 fnRun("simple-enczeroasnil", testSimpleMammothGroup) // testSimpleGroup 496 testSimpleH.EncZeroValuesAsNil = oldEncZeroValuesAsNil 497 498 // --- 499 testUseIoEncDec = 16 500 testRPCOptions.RPCNoBuffer = false 501 testReinit() 502 testRpcBufsize = 0 503 fnRun("rpc-buf-0", testRpcGroup) 504 testRpcBufsize = 0 505 fnRun("rpc-buf-00", testRpcGroup) 506 testRpcBufsize = 0 507 fnRun("rpc-buf-000", testRpcGroup) 508 testRpcBufsize = 16 509 fnRun("rpc-buf-16", testRpcGroup) 510 testRpcBufsize = 2048 511 fnRun("rpc-buf-2048", testRpcGroup) 512 513 testRPCOptions.RPCNoBuffer = true 514 testRpcBufsize = 0 515 fnRun("rpc-buf-0-rpcNoBuffer", testRpcGroup) 516 testRpcBufsize = 0 517 fnRun("rpc-buf-00-rpcNoBuffer", testRpcGroup) 518 testRpcBufsize = 2048 519 fnRun("rpc-buf-2048-rpcNoBuffer", testRpcGroup) 520 521 testGroupResetFlags() 522 } 523 524 // func TestCodecSuite(t *testing.T) { 525 // testReinit() // so flag.Parse() is called first, and never called again 526 // testDecodeOptions, testEncodeOptions = DecodeOptions{}, EncodeOptions{} 527 // testGroupResetFlags() 528 // testReinit() 529 // t.Run("optionsFalse", func(t *testing.T) { 530 // t.Run("TestJsonMammothMapsAndSlices", TestJsonMammothMapsAndSlices) 531 // }) 532 // }