summaryrefslogtreecommitdiff
path: root/guide/test/BasicSerializationTest.kt
blob: 11f9e9f28f559da6e196863f81050a36f1844e7b (plain)
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
// This file was automatically generated from basic-serialization.md by Knit tool. Do not edit.
package example.test

import org.junit.Test
import kotlinx.knit.test.*

class BasicSerializationTest {
    @Test
    fun testExampleBasic01() {
        captureOutput("ExampleBasic01") { example.exampleBasic01.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" kotlinx.serialization.SerializationException: Serializer for class 'Project' is not found.",
            "Please ensure that class is marked as '@Serializable' and that the serialization compiler plugin is applied."
        )
    }

    @Test
    fun testExampleBasic02() {
        captureOutput("ExampleBasic02") { example.exampleBasic02.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\",\"language\":\"Kotlin\"}"
        )
    }

    @Test
    fun testExampleBasic03() {
        captureOutput("ExampleBasic03") { example.exampleBasic03.main() }.verifyOutputLines(
            "Project(name=kotlinx.serialization, language=Kotlin)"
        )
    }

    @Test
    fun testExampleClasses01() {
        captureOutput("ExampleClasses01") { example.exampleClasses01.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\",\"stars\":9000}"
        )
    }

    @Test
    fun testExampleClasses02() {
        captureOutput("ExampleClasses02") { example.exampleClasses02.main() }.verifyOutputLines(
            "{\"owner\":\"kotlin\",\"name\":\"kotlinx.serialization\"}"
        )
    }

    @Test
    fun testExampleClasses03() {
        captureOutput("ExampleClasses03") { example.exampleClasses03.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" java.lang.IllegalArgumentException: name cannot be empty"
        )
    }

    @Test
    fun testExampleClasses04() {
        captureOutput("ExampleClasses04") { example.exampleClasses04.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" kotlinx.serialization.MissingFieldException: Field 'language' is required for type with serial name 'example.exampleClasses04.Project', but it was missing at path: $"
        )
    }

    @Test
    fun testExampleClasses05() {
        captureOutput("ExampleClasses05") { example.exampleClasses05.main() }.verifyOutputLines(
            "Project(name=kotlinx.serialization, language=Kotlin)"
        )
    }

    @Test
    fun testExampleClasses06() {
        captureOutput("ExampleClasses06") { example.exampleClasses06.main() }.verifyOutputLines(
            "Project(name=kotlinx.serialization, language=Kotlin)"
        )
    }

    @Test
    fun testExampleClasses07() {
        captureOutput("ExampleClasses07") { example.exampleClasses07.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" kotlinx.serialization.MissingFieldException: Field 'language' is required for type with serial name 'example.exampleClasses07.Project', but it was missing at path: $"
        )
    }

    @Test
    fun testExampleClasses08() {
        captureOutput("ExampleClasses08") { example.exampleClasses08.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 42: Encountered an unknown key 'language' at path: $.name",
            "Use 'ignoreUnknownKeys = true' in 'Json {}' builder to ignore unknown keys."
        )
    }

    @Test
    fun testExampleClasses09() {
        captureOutput("ExampleClasses09") { example.exampleClasses09.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\"}"
        )
    }

    @Test
    fun testExampleClasses10() {
        captureOutput("ExampleClasses10") { example.exampleClasses10.main() }.verifyOutputLines(
            "{\"name\":\"Alice\",\"projects\":[{\"name\":\"kotlinx.serialization\",\"language\":\"Kotlin\"}]}",
            "{\"name\":\"Bob\"}"
        )
    }

    @Test
    fun testExampleClasses11() {
        captureOutput("ExampleClasses11") { example.exampleClasses11.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\"}"
        )
    }

    @Test
    fun testExampleClasses12() {
        captureOutput("ExampleClasses12") { example.exampleClasses12.main() }.verifyOutputLinesStart(
            "Exception in thread \"main\" kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 52: Expected string literal but 'null' literal was found at path: $.language",
            "Use 'coerceInputValues = true' in 'Json {}' builder to coerce nulls if property has a default value."
        )
    }

    @Test
    fun testExampleClasses13() {
        captureOutput("ExampleClasses13") { example.exampleClasses13.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\",\"owner\":{\"name\":\"kotlin\"}}"
        )
    }

    @Test
    fun testExampleClasses14() {
        captureOutput("ExampleClasses14") { example.exampleClasses14.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\",\"owner\":{\"name\":\"kotlin\"},\"maintainer\":{\"name\":\"kotlin\"}}"
        )
    }

    @Test
    fun testExampleClasses15() {
        captureOutput("ExampleClasses15") { example.exampleClasses15.main() }.verifyOutputLines(
            "{\"a\":{\"contents\":42},\"b\":{\"contents\":{\"name\":\"kotlinx.serialization\",\"language\":\"Kotlin\"}}}"
        )
    }

    @Test
    fun testExampleClasses16() {
        captureOutput("ExampleClasses16") { example.exampleClasses16.main() }.verifyOutputLines(
            "{\"name\":\"kotlinx.serialization\",\"lang\":\"Kotlin\"}"
        )
    }
}