summaryrefslogtreecommitdiff
path: root/formats/json-tests/jvmTest/src/kotlinx/serialization/json/SpecConformanceTest.kt
blob: 96401f72d80b9e91793e923457a027a444d24c55 (plain)
ofshex dumpascii
0000 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 32 30 31 37 2d 32 30 31 39 20 4a 65 74 42 72 61 /*..*.Copyright.2017-2019.JetBra
0020 69 6e 73 20 73 2e 72 2e 6f 2e 20 55 73 65 20 6f 66 20 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f ins.s.r.o..Use.of.this.source.co
0040 64 65 20 69 73 20 67 6f 76 65 72 6e 65 64 20 62 79 20 74 68 65 20 41 70 61 63 68 65 20 32 2e 30 de.is.governed.by.the.Apache.2.0
0060 20 6c 69 63 65 6e 73 65 2e 0a 20 2a 2f 0a 0a 70 61 63 6b 61 67 65 20 6b 6f 74 6c 69 6e 78 2e 73 .license...*/..package.kotlinx.s
0080 65 72 69 61 6c 69 7a 61 74 69 6f 6e 2e 6a 73 6f 6e 0a 0a 69 6d 70 6f 72 74 20 6b 6f 74 6c 69 6e erialization.json..import.kotlin
00a0 78 2e 73 65 72 69 61 6c 69 7a 61 74 69 6f 6e 2e 53 65 72 69 61 6c 69 7a 61 62 6c 65 0a 69 6d 70 x.serialization.Serializable.imp
00c0 6f 72 74 20 6b 6f 74 6c 69 6e 78 2e 73 65 72 69 61 6c 69 7a 61 74 69 6f 6e 2e 74 65 73 74 2e 61 ort.kotlinx.serialization.test.a
00e0 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 65 73 74 6f 72 65 64 0a 69 6d 70 6f 72 ssertSerializedAndRestored.impor
0100 74 20 6f 72 67 2e 6a 75 6e 69 74 2e 54 65 73 74 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 69 6f 2e t.org.junit.Test.import.java.io.
0120 42 75 66 66 65 72 65 64 52 65 61 64 65 72 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 69 6f 2e 49 6e BufferedReader.import.java.io.In
0140 70 75 74 53 74 72 65 61 6d 52 65 61 64 65 72 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75 74 69 6c putStreamReader.import.java.util
0160 2e 7a 69 70 2e 5a 69 70 49 6e 70 75 74 53 74 72 65 61 6d 0a 69 6d 70 6f 72 74 20 6b 6f 74 6c 69 .zip.ZipInputStream.import.kotli
0180 6e 2e 74 65 73 74 2e 61 73 73 65 72 74 54 72 75 65 0a 0a 2f 2a 0a 20 2a 20 54 65 73 74 20 74 68 n.test.assertTrue../*..*.Test.th
01a0 61 74 20 63 68 65 63 6b 73 20 4a 53 4f 4e 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 63 6f 6e at.checks.JSON.specification.con
01c0 66 6f 72 6d 61 6e 63 65 20 62 61 73 65 64 20 6f 6e 20 22 50 61 72 73 69 6e 67 20 4a 53 4f 4e 20 formance.based.on."Parsing.JSON.
01e0 69 73 20 61 20 4d 69 6e 65 66 69 65 6c 64 22 2e 0a 20 2a 20 54 65 73 74 20 72 65 73 6f 75 72 63 is.a.Minefield"...*.Test.resourc
0200 65 73 20 61 72 65 20 66 72 6f 6d 3a 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f es.are.from:.https://github.com/
0220 6e 73 74 2f 4a 53 4f 4e 54 65 73 74 53 75 69 74 65 0a 20 2a 0a 20 2a 20 4e 6f 74 20 61 6c 6c 20 nst/JSONTestSuite..*..*.Not.all.
0240 74 65 73 74 73 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 62 65 63 61 75 73 65 20 6f 75 72 20 70 tests.are.present,.because.our.p
0260 61 72 73 65 72 20 69 73 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d arser.is.slightly.different.from
0280 20 74 68 65 20 73 70 65 63 20 28 77 65 6c 6c 2c 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 69 .the.spec.(well,.as.any.other.wi
02a0 64 65 73 70 72 65 61 64 20 4a 61 76 61 20 4a 53 4f 4e 20 70 61 72 73 65 72 29 3a 0a 20 2a 20 31 despread.Java.JSON.parser):..*.1
02c0 29 20 57 65 20 68 61 76 65 20 72 65 6c 61 78 65 64 20 71 75 6f 74 69 6e 67 20 72 65 71 75 69 72 ).We.have.relaxed.quoting.requir
02e0 65 6d 65 6e 74 2e 20 45 2e 67 2e 20 77 65 20 61 63 63 65 70 74 20 22 7b 22 61 22 3a 20 62 2c 20 ement..E.g..we.accept."{"a":.b,.
0300 63 3a 20 22 64 22 7d 22 20 61 73 20 61 20 76 61 6c 69 64 20 4a 53 4f 4e 2c 20 77 68 69 6c 65 20 c:."d"}".as.a.valid.JSON,.while.
0320 69 74 20 69 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 4a 53 4f 4e 0a 20 2a 20 32 29 20 4a 61 76 61 it.is.an.invalid.JSON..*.2).Java
0340 20 68 61 73 20 61 20 6d 75 63 68 20 6d 6f 72 65 20 70 6f 77 65 72 66 75 6c 20 66 6c 6f 61 74 69 .has.a.much.more.powerful.floati
0360 6e 67 2d 70 6f 69 6e 74 20 70 61 72 73 65 72 20 74 68 61 74 20 61 63 63 65 70 74 73 20 73 75 63 ng-point.parser.that.accepts.suc
0380 68 20 66 6c 6f 61 74 73 20 61 73 20 22 2e 32 22 0a 20 2a 20 33 29 20 49 6e 63 6f 72 72 65 63 74 h.floats.as.".2"..*.3).Incorrect
03a0 20 55 54 46 2d 38 20 73 79 6d 62 6f 6c 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 .UTF-8.symbols.are.automatically
03c0 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 63 68 61 72 20 .replaced.with.replacement.char.
03e0 62 79 20 4a 61 76 61 27 73 20 63 68 61 72 73 65 74 0a 20 2a 20 34 29 20 52 61 77 20 6c 69 74 65 by.Java's.charset..*.4).Raw.lite
0400 72 61 6c 73 20 61 72 65 20 70 61 72 73 65 64 20 61 73 20 6c 69 74 65 72 61 6c 73 0a 20 2a 20 35 rals.are.parsed.as.literals..*.5
0420 29 20 53 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 28 73 65 65 ).Single.quotes.are.allowed.(see
0440 20 70 2e 31 29 0a 20 2a 20 36 29 20 4e 65 77 20 6c 69 6e 65 73 20 61 72 65 20 73 75 70 70 6f 72 .p.1)..*.6).New.lines.are.suppor
0460 74 65 64 0a 20 2a 2f 0a 63 6c 61 73 73 20 53 70 65 63 43 6f 6e 66 6f 72 6d 61 6e 63 65 54 65 73 ted..*/.class.SpecConformanceTes
0480 74 20 7b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 4c 69 73 74 20 6f 66 20 69 6e 63 6f 6d t.{....../*......*.List.of.incom
04a0 70 61 74 69 62 69 6c 69 74 69 65 73 20 28 6e 75 6d 62 65 72 20 63 61 73 65 73 20 61 72 65 20 73 patibilities.(number.cases.are.s
04c0 6b 69 70 70 65 64 20 66 6f 72 20 74 68 65 20 73 61 6b 65 20 6f 66 20 76 65 72 62 6f 73 69 74 79 kipped.for.the.sake.of.verbosity
04e0 29 2c 20 70 61 72 73 65 72 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 62 75 74 20 69 74 20 64 6f ),.parser.should.fail,.but.it.do
0500 65 73 20 6e 6f 74 3a 0a 20 20 20 20 20 2a 20 60 60 60 0a 20 20 20 20 20 2a 20 7b 61 3a 20 22 62 es.not:......*.```......*.{a:."b
0520 22 7d 2c 20 6e 5f 6f 62 6a 65 63 74 5f 75 6e 71 75 6f 74 65 64 5f 6b 65 79 2e 6a 73 6f 6e 20 2f "},.n_object_unquoted_key.json./
0540 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 5b 2d 32 2e 5d 2c 20 6e 5f 6e 75 6d 62 65 72 5f 2d 32 2e /.p.1......*.[-2.],.n_number_-2.
0560 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 32 0a 20 20 20 20 20 2a 20 5b 31 32 33 ef bf bd 5d 2c 20 6e 5f .json.//.p.2......*.[123...],.n_
0580 6e 75 6d 62 65 72 5f 69 6e 76 61 6c 69 64 2d 75 74 66 2d 38 2d 69 6e 2d 62 69 67 67 65 72 2d 69 number_invalid-utf-8-in-bigger-i
05a0 6e 74 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 32 0a 20 20 20 20 20 2a 20 5b 61 ef bf bd 5d 2c 20 6e 5f nt.json.//.p.2......*.[a...],.n_
05c0 61 72 72 61 79 5f 61 5f 69 6e 76 61 6c 69 64 5f 75 74 66 38 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 array_a_invalid_utf8.json.//.p.1
05e0 20 2b 20 70 2e 33 0a 20 20 20 20 20 2a 20 5b 2d 5d 2c 20 6e 5f 61 72 72 61 79 5f 6a 75 73 74 5f .+.p.3......*.[-],.n_array_just_
0600 6d 69 6e 75 73 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 5b 22 09 22 5d 2c 20 minus.json.//.p.1......*.["."],.
0620 6e 5f 73 74 72 69 6e 67 5f 75 6e 65 73 63 61 70 65 64 5f 74 61 62 2e 6a 73 6f 6e 20 2f 2f 20 74 n_string_unescaped_tab.json.//.t
0640 61 62 20 69 73 20 6a 75 73 74 20 6f 6b 61 79 0a 20 20 20 20 20 2a 20 61 c3 a5 2c 20 6e 5f 73 74 ab.is.just.okay......*.a..,.n_st
0660 72 75 63 74 75 72 65 5f 61 73 63 69 69 2d 75 6e 69 63 6f 64 65 2d 69 64 65 6e 74 69 66 69 65 72 ructure_ascii-unicode-identifier
0680 2e 6a 73 6f 6e 20 2f 2f 20 20 70 2e 34 0a 20 20 20 20 20 2a 20 5b c3 a9 5d 2c 20 6e 5f 73 74 72 .json.//..p.4......*.[..],.n_str
06a0 69 6e 67 5f 61 63 63 65 6e 74 75 61 74 65 64 5f 63 68 61 72 5f 6e 6f 5f 71 75 6f 74 65 73 2e 6a ing_accentuated_char_no_quotes.j
06c0 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 2a 2c 20 6e 5f 73 74 72 75 63 74 75 72 65 son.//.p.1......*.*,.n_structure
06e0 5f 73 69 6e 67 6c 65 5f 73 74 61 72 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 34 0a 20 20 20 20 20 2a 20 _single_star.json.//.p.4......*.
0700 ef bf bd 2c 20 6e 5f 73 74 72 75 63 74 75 72 65 5f 6c 6f 6e 65 2d 69 6e 76 61 6c 69 64 2d 75 74 ...,.n_structure_lone-invalid-ut
0720 66 2d 38 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 33 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 7b 6b 65 f-8.json.//.p.3.+.p.4......*.{ke
0740 79 3a 20 27 76 61 6c 75 65 27 7d 2c 20 6e 5f 6f 62 6a 65 63 74 5f 6b 65 79 5f 77 69 74 68 5f 73 y:.'value'},.n_object_key_with_s
0760 69 6e 67 6c 65 5f 71 75 6f 74 65 73 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 ingle_quotes.json.//.p.1......*.
0780 7b 31 3a 31 7d 2c 20 6e 5f 6f 62 6a 65 63 74 5f 6e 6f 6e 5f 73 74 72 69 6e 67 5f 6b 65 79 2e 6a {1:1},.n_object_non_string_key.j
07a0 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 ef bb bf 2c 20 6e 5f 73 74 72 75 63 74 75 son.//.p.1......*....,.n_structu
07c0 72 65 5f 55 54 46 38 5f 42 4f 4d 5f 6e 6f 5f 64 61 74 61 2e 6a 73 6f 6e 20 2f 2f 20 20 70 2e 34 re_UTF8_BOM_no_data.json.//..p.4
07e0 0a 20 20 20 20 20 2a 20 5b e2 81 a0 5d 2c 20 6e 5f 73 74 72 75 63 74 75 72 65 5f 77 68 69 74 65 ......*.[...],.n_structure_white
0800 73 70 61 63 65 5f 55 2b 32 30 36 30 5f 77 6f 72 64 5f 6a 6f 69 6e 65 72 2e 6a 73 6f 6e 20 2f 2f space_U+2060_word_joiner.json.//
0820 20 70 2e 31 20 2b 20 70 2e 33 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 5b 54 72 75 65 5d 2c 20 .p.1.+.p.3.+.p.4......*.[True],.
0840 6e 5f 73 74 72 75 63 74 75 72 65 5f 63 61 70 69 74 61 6c 69 7a 65 64 5f 54 72 75 65 2e 6a 73 6f n_structure_capitalized_True.jso
0860 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 5b 2a 5d 2c 20 6e 5f 61 72 72 61 79 5f 73 74 61 n.//.p.1......*.[*],.n_array_sta
0880 72 5f 69 6e 73 69 64 65 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 5b 74 72 75 r_inside.json.//.p.1......*.[tru
08a0 5d 2c 20 6e 5f 69 6e 63 6f 6d 70 6c 65 74 65 5f 74 72 75 65 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 ],.n_incomplete_true.json.//.p.1
08c0 0a 20 20 20 20 20 2a 20 5b 22 61 00 61 22 5d 2c 20 6e 5f 73 74 72 69 6e 67 5f 75 6e 65 73 63 61 ......*.["a.a"],.n_string_unesca
08e0 70 65 64 5f 63 72 74 6c 5f 63 68 61 72 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 33 0a 20 20 20 20 20 2a ped_crtl_char.json.//.p.3......*
0900 20 5b 2c 20 6e 5f 73 74 72 75 63 74 75 72 65 5f 6c 6f 6e 65 2d 6f 70 65 6e 2d 62 72 61 63 6b 65 .[,.n_structure_lone-open-bracke
0920 74 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 c3 a5 2c 20 6e t.json.//.p.1.+.p.4......*...,.n
0940 5f 73 74 72 75 63 74 75 72 65 5f 75 6e 69 63 6f 64 65 2d 69 64 65 6e 74 69 66 69 65 72 2e 6a 73 _structure_unicode-identifier.js
0960 6f 6e 20 2f 2f 20 70 2e 31 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 5b 6e 75 6c 5d 2c 20 6e 5f on.//.p.1.+.p.4......*.[nul],.n_
0980 69 6e 63 6f 6d 70 6c 65 74 65 5f 6e 75 6c 6c 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 incomplete_null.json.//.p.1.....
09a0 20 2a 20 5b ef bf bd 5d 2c 20 6e 5f 61 72 72 61 79 5f 69 6e 76 61 6c 69 64 5f 75 74 66 38 2e 6a .*.[...],.n_array_invalid_utf8.j
09c0 73 6f 6e 20 2f 2f 20 70 2e 31 20 2b 20 70 2e 33 0a 20 20 20 20 20 2a 20 5b 22 78 22 2c 20 74 72 son.//.p.1.+.p.3......*.["x",.tr
09e0 75 74 68 5d 2c 20 6e 5f 6f 62 6a 65 63 74 5f 62 61 64 5f 76 61 6c 75 65 2e 6a 73 6f 6e 20 2f 2f uth],.n_object_bad_value.json.//
0a00 20 70 2e 31 0a 20 20 20 20 20 2a 20 7b 27 61 27 3a 30 7d 2c 20 6e 5f 6f 62 6a 65 63 74 5f 73 69 .p.1......*.{'a':0},.n_object_si
0a20 6e 67 6c 65 5f 71 75 6f 74 65 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 0a 20 20 20 20 20 2a 20 3c 2e ngle_quote.json.//.p.1......*.<.
0a40 3e 2c 20 6e 5f 73 74 72 75 63 74 75 72 65 5f 61 6e 67 6c 65 5f 62 72 61 63 6b 65 74 5f 2e 2e 6a >,.n_structure_angle_bracket_..j
0a60 73 6f 6e 20 2f 2f 20 70 2e 31 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 61 62 63 2c 20 6e 5f 73 son.//.p.1.+.p.4......*.abc,.n_s
0a80 74 72 69 6e 67 5f 73 69 6e 67 6c 65 5f 73 74 72 69 6e 67 5f 6e 6f 5f 64 6f 75 62 6c 65 5f 71 75 tring_single_string_no_double_qu
0aa0 6f 74 65 73 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 31 20 2b 20 70 2e 34 0a 20 20 20 20 20 2a 20 5b 22 otes.json.//.p.1.+.p.4......*.["
0ac0 6e 65 77 5c 6e 5c 6e 6c 69 6e 65 22 5d 2c 20 6e 5f 73 74 72 69 6e 67 5f 75 6e 65 73 63 61 70 65 new\n\nline"],.n_string_unescape
0ae0 64 5f 6e 65 77 6c 69 6e 65 2e 6a 73 6f 6e 20 2f 2f 20 70 2e 36 0a 20 20 20 20 20 2a 20 60 60 60 d_newline.json.//.p.6......*.```
0b00 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 61 6c 20 6a 73 6f 6e 20 3d 20 ......*/.....private.val.json.=.
0b20 4a 73 6f 6e 0a 0a 20 20 20 20 40 54 65 73 74 0a 20 20 20 20 66 75 6e 20 74 65 73 74 43 6f 6d 70 Json......@Test.....fun.testComp
0b40 61 74 69 62 69 6c 69 74 79 28 29 20 3d 20 66 6f 72 45 61 63 68 53 70 65 63 54 65 73 74 20 7b 20 atibility().=.forEachSpecTest.{.
0b60 74 65 73 74 43 61 73 65 2c 20 63 6f 6e 74 65 6e 74 20 2d 3e 0a 20 20 20 20 20 20 20 20 76 61 6c testCase,.content.->.........val
0b80 20 6a 73 6f 6e 52 65 73 75 6c 74 20 3d 20 72 75 6e 43 61 74 63 68 69 6e 67 20 7b 20 6a 73 6f 6e .jsonResult.=.runCatching.{.json
0ba0 2e 70 61 72 73 65 54 6f 4a 73 6f 6e 45 6c 65 6d 65 6e 74 28 63 6f 6e 74 65 6e 74 29 20 7d 0a 20 .parseToJsonElement(content).}..
0bc0 20 20 20 20 20 20 20 76 61 6c 20 73 68 6f 75 6c 64 50 61 73 73 20 3d 20 74 65 73 74 43 61 73 65 .......val.shouldPass.=.testCase
0be0 2e 73 74 61 72 74 73 57 69 74 68 28 22 79 5f 22 29 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 68 .startsWith("y_").........if.(sh
0c00 6f 75 6c 64 50 61 73 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72 ouldPass).{.............assertTr
0c20 75 65 28 6a 73 6f 6e 52 65 73 75 6c 74 2e 69 73 53 75 63 63 65 73 73 2c 20 22 54 65 73 74 3a 20 ue(jsonResult.isSuccess,."Test:.
0c40 24 74 65 73 74 43 61 73 65 2c 20 72 65 73 75 6c 74 20 24 6a 73 6f 6e 52 65 73 75 6c 74 22 29 0a $testCase,.result.$jsonResult").
0c60 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 ........}.else.{.............ass
0c80 65 72 74 54 72 75 65 28 6a 73 6f 6e 52 65 73 75 6c 74 2e 69 73 46 61 69 6c 75 72 65 2c 20 22 54 ertTrue(jsonResult.isFailure,."T
0ca0 65 73 74 3a 20 24 74 65 73 74 43 61 73 65 2c 20 72 65 73 75 6c 74 20 24 6a 73 6f 6e 52 65 73 75 est:.$testCase,.result.$jsonResu
0cc0 6c 74 22 29 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40 54 65 73 74 0a lt").........}.....}......@Test.
0ce0 20 20 20 20 66 75 6e 20 74 65 73 74 55 6e 73 70 65 63 69 66 69 65 64 50 61 72 73 65 72 43 61 73 ....fun.testUnspecifiedParserCas
0d00 65 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 6c 20 72 65 73 6f 75 72 63 65 4c 69 73 74 69 es().{.........val.resourceListi
0d20 6e 67 20 3d 20 53 70 65 63 43 6f 6e 66 6f 72 6d 61 6e 63 65 54 65 73 74 3a 3a 63 6c 61 73 73 2e ng.=.SpecConformanceTest::class.
0d40 6a 61 76 61 2e 67 65 74 52 65 73 6f 75 72 63 65 41 73 53 74 72 65 61 6d 28 22 2f 63 6f 72 6e 65 java.getResourceAsStream("/corne
0d60 72 5f 63 61 73 65 73 2f 6c 69 73 74 69 6e 67 2e 74 78 74 22 29 0a 20 20 20 20 20 20 20 20 66 6f r_cases/listing.txt").........fo
0d80 72 20 28 74 65 73 74 43 61 73 65 20 69 6e 20 42 75 66 66 65 72 65 64 52 65 61 64 65 72 28 49 6e r.(testCase.in.BufferedReader(In
0da0 70 75 74 53 74 72 65 61 6d 52 65 61 64 65 72 28 72 65 73 6f 75 72 63 65 4c 69 73 74 69 6e 67 29 putStreamReader(resourceListing)
0dc0 29 2e 6c 69 6e 65 53 65 71 75 65 6e 63 65 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ).lineSequence()).{.............
0de0 76 61 6c 20 63 6f 6e 74 65 6e 74 20 3d 20 53 70 65 63 43 6f 6e 66 6f 72 6d 61 6e 63 65 54 65 73 val.content.=.SpecConformanceTes
0e00 74 3a 3a 63 6c 61 73 73 2e 6a 61 76 61 2e 67 65 74 52 65 73 6f 75 72 63 65 41 73 53 74 72 65 61 t::class.java.getResourceAsStrea
0e20 6d 28 22 2f 63 6f 72 6e 65 72 5f 63 61 73 65 73 2f 24 74 65 73 74 43 61 73 65 22 29 2e 72 65 61 m("/corner_cases/$testCase").rea
0e40 64 42 79 74 65 73 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 74 6f 53 74 72 69 dBytes()..................toStri
0e60 6e 67 28 43 68 61 72 73 65 74 73 2e 55 54 46 5f 38 29 2e 72 65 6d 6f 76 65 53 75 66 66 69 78 28 ng(Charsets.UTF_8).removeSuffix(
0e80 22 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 20 6a 73 6f 6e 52 65 73 75 6c 74 "\n").............val.jsonResult
0ea0 20 3d 20 72 75 6e 43 61 74 63 68 69 6e 67 20 7b 20 6a 73 6f 6e 2e 70 61 72 73 65 54 6f 4a 73 6f .=.runCatching.{.json.parseToJso
0ec0 6e 45 6c 65 6d 65 6e 74 28 63 6f 6e 74 65 6e 74 29 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 nElement(content).}.............
0ee0 61 73 73 65 72 74 54 72 75 65 28 6a 73 6f 6e 52 65 73 75 6c 74 2e 69 73 53 75 63 63 65 73 73 29 assertTrue(jsonResult.isSuccess)
0f00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40 53 65 72 69 61 6c 69 7a 61 .........}.....}......@Serializa
0f20 62 6c 65 0a 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 20 48 6f 6c 64 65 72 28 76 61 6c 20 73 3a ble.....data.class.Holder(val.s:
0f40 20 53 74 72 69 6e 67 29 0a 0a 20 20 20 20 40 54 65 73 74 0a 20 20 20 20 66 75 6e 20 74 65 73 74 .String)......@Test.....fun.test
0f60 53 65 72 69 61 6c 69 7a 65 64 46 6f 72 6d 49 6e 43 6c 61 73 73 28 29 20 3d 20 66 6f 72 45 61 63 SerializedFormInClass().=.forEac
0f80 68 53 70 65 63 54 65 73 74 20 7b 20 5f 2c 20 63 6f 6e 74 65 6e 74 20 2d 3e 0a 20 20 20 20 20 20 hSpecTest.{._,.content.->.......
0fa0 20 20 61 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 65 73 74 6f 72 65 64 28 48 6f ..assertSerializedAndRestored(Ho
0fc0 6c 64 65 72 28 63 6f 6e 74 65 6e 74 29 2c 20 48 6f 6c 64 65 72 2e 73 65 72 69 61 6c 69 7a 65 72 lder(content),.Holder.serializer
0fe0 28 29 29 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 ()).........assertSerializedAndR
1000 65 73 74 6f 72 65 64 28 48 6f 6c 64 65 72 28 63 6f 6e 74 65 6e 74 2e 72 65 70 65 61 74 28 31 30 estored(Holder(content.repeat(10
1020 29 29 2c 20 48 6f 6c 64 65 72 2e 73 65 72 69 61 6c 69 7a 65 72 28 29 29 0a 20 20 20 20 20 20 20 )),.Holder.serializer())........
1040 20 61 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 65 73 74 6f 72 65 64 28 48 6f 6c .assertSerializedAndRestored(Hol
1060 64 65 72 28 63 6f 6e 74 65 6e 74 2e 72 65 70 65 61 74 28 31 30 30 29 29 2c 20 48 6f 6c 64 65 72 der(content.repeat(100)),.Holder
1080 2e 73 65 72 69 61 6c 69 7a 65 72 28 29 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40 54 65 73 74 0a .serializer()).....}......@Test.
10a0 20 20 20 20 66 75 6e 20 74 65 73 74 53 65 72 69 61 6c 69 7a 65 64 47 6f 46 75 7a 7a 43 6f 72 70 ....fun.testSerializedGoFuzzCorp
10c0 75 73 28 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 43 6f 72 us().{........./*..........*.Cor
10e0 70 75 73 20 6f 66 20 74 65 73 74 73 20 68 61 73 20 62 65 65 6e 20 74 61 6b 65 6e 20 66 72 6f 6d pus.of.tests.has.been.taken.from
1100 20 74 68 65 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 64 76 79 75 6b 6f 76 2f .the.https://github.com/dvyukov/
1120 67 6f 2d 66 75 7a 7a 2d 63 6f 72 70 75 73 20 75 6e 64 65 72 20 41 70 61 63 68 65 20 32 2e 30 0a go-fuzz-corpus.under.Apache.2.0.
1140 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 5a 69 70 49 6e 70 75 74 53 74 72 65 .........*/.........ZipInputStre
1160 61 6d 28 53 70 65 63 43 6f 6e 66 6f 72 6d 61 6e 63 65 54 65 73 74 3a 3a 63 6c 61 73 73 2e 6a 61 am(SpecConformanceTest::class.ja
1180 76 61 2e 67 65 74 52 65 73 6f 75 72 63 65 41 73 53 74 72 65 61 6d 28 22 2f 63 6f 72 70 75 73 2e va.getResourceAsStream("/corpus.
11a0 7a 69 70 22 29 29 2e 75 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 zip")).use.{.............while.(
11c0 74 72 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 2e 6e 65 78 74 45 true).{.................it.nextE
11e0 6e 74 72 79 20 3f 3a 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 ntry.?:.return.................v
1200 61 6c 20 63 6f 6e 74 65 6e 74 20 3d 20 69 74 2e 72 65 61 64 42 79 74 65 73 28 29 2e 64 65 63 6f al.content.=.it.readBytes().deco
1220 64 65 54 6f 53 74 72 69 6e 67 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 deToString().................ass
1240 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 65 73 74 6f 72 65 64 28 48 6f 6c 64 65 72 28 ertSerializedAndRestored(Holder(
1260 63 6f 6e 74 65 6e 74 29 2c 20 48 6f 6c 64 65 72 2e 73 65 72 69 61 6c 69 7a 65 72 28 29 29 0a 20 content),.Holder.serializer())..
1280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 ...............assertSerializedA
12a0 6e 64 52 65 73 74 6f 72 65 64 28 48 6f 6c 64 65 72 28 63 6f 6e 74 65 6e 74 2e 72 65 70 65 61 74 ndRestored(Holder(content.repeat
12c0 28 31 30 29 29 2c 20 48 6f 6c 64 65 72 2e 73 65 72 69 61 6c 69 7a 65 72 28 29 29 0a 20 20 20 20 (10)),.Holder.serializer()).....
12e0 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 53 65 72 69 61 6c 69 7a 65 64 41 6e 64 52 ............assertSerializedAndR
1300 65 73 74 6f 72 65 64 28 48 6f 6c 64 65 72 28 63 6f 6e 74 65 6e 74 2e 72 65 70 65 61 74 28 31 30 estored(Holder(content.repeat(10
1320 30 29 29 2c 20 48 6f 6c 64 65 72 2e 73 65 72 69 61 6c 69 7a 65 72 28 29 29 0a 20 20 20 20 20 20 0)),.Holder.serializer()).......
1340 20 20 20 20 20 20 20 20 20 20 69 74 2e 63 6c 6f 73 65 45 6e 74 72 79 28 29 0a 20 20 20 20 20 20 ..........it.closeEntry().......
1360 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 ......}.........}.....}......pri
1380 76 61 74 65 20 69 6e 6c 69 6e 65 20 66 75 6e 20 66 6f 72 45 61 63 68 53 70 65 63 54 65 73 74 28 vate.inline.fun.forEachSpecTest(
13a0 62 6c 6f 63 6b 3a 20 28 74 65 73 74 43 61 73 65 3a 20 53 74 72 69 6e 67 2c 20 63 6f 6e 74 65 6e block:.(testCase:.String,.conten
13c0 74 3a 20 53 74 72 69 6e 67 29 20 2d 3e 20 55 6e 69 74 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 t:.String).->.Unit).{.........va
13e0 6c 20 72 65 73 6f 75 72 63 65 4c 69 73 74 69 6e 67 20 3d 20 53 70 65 63 43 6f 6e 66 6f 72 6d 61 l.resourceListing.=.SpecConforma
1400 6e 63 65 54 65 73 74 3a 3a 63 6c 61 73 73 2e 6a 61 76 61 2e 67 65 74 52 65 73 6f 75 72 63 65 41 nceTest::class.java.getResourceA
1420 73 53 74 72 65 61 6d 28 22 2f 73 70 65 63 5f 63 61 73 65 73 2f 6c 69 73 74 69 6e 67 2e 74 78 74 sStream("/spec_cases/listing.txt
1440 22 29 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 74 65 73 74 43 61 73 65 20 69 6e 20 42 75 66 66 ").........for.(testCase.in.Buff
1460 65 72 65 64 52 65 61 64 65 72 28 49 6e 70 75 74 53 74 72 65 61 6d 52 65 61 64 65 72 28 72 65 73 eredReader(InputStreamReader(res
1480 6f 75 72 63 65 4c 69 73 74 69 6e 67 29 29 2e 6c 69 6e 65 53 65 71 75 65 6e 63 65 28 29 29 20 7b ourceListing)).lineSequence()).{
14a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 65 73 74 43 61 73 65 2e 73 74 61 72 74 73 .............if.(testCase.starts
14c0 57 69 74 68 28 22 2f 2f 22 29 29 20 63 6f 6e 74 69 6e 75 65 20 2f 2f 20 53 6b 69 70 20 6d 75 74 With("//")).continue.//.Skip.mut
14e0 65 64 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 20 63 6f 6e 74 65 6e 74 ed.tests.............val.content
1500 20 3d 20 53 70 65 63 43 6f 6e 66 6f 72 6d 61 6e 63 65 54 65 73 74 3a 3a 63 6c 61 73 73 2e 6a 61 .=.SpecConformanceTest::class.ja
1520 76 61 2e 67 65 74 52 65 73 6f 75 72 63 65 41 73 53 74 72 65 61 6d 28 22 2f 73 70 65 63 5f 63 61 va.getResourceAsStream("/spec_ca
1540 73 65 73 2f 24 74 65 73 74 43 61 73 65 22 29 2e 72 65 61 64 42 79 74 65 73 28 29 0a 20 20 20 20 ses/$testCase").readBytes().....
1560 20 20 20 20 20 20 20 20 20 20 20 20 2e 74 6f 53 74 72 69 6e 67 28 43 68 61 72 73 65 74 73 2e 55 .............toString(Charsets.U
1580 54 46 5f 38 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 63 6b 28 74 65 73 74 43 61 73 65 TF_8).............block(testCase
15a0 2c 20 63 6f 6e 74 65 6e 74 29 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 0a ,.content).........}.....}.}.