File tree 4 files changed +20
-7
lines changed
core/src/commonMain/kotlin/nl/adaptivity/xmlutil
commonMain/kotlin/nl/adaptivity/xmlutil/serialization
commonTest/kotlin/nl/adaptivity/xml/serialization
4 files changed +20
-7
lines changed Original file line number Diff line number Diff line change @@ -73,6 +73,8 @@ enum class EventType {
73
73
writer.comment(reader.text)
74
74
},
75
75
TEXT {
76
+ override val isTextElement: Boolean get() = true
77
+
76
78
override fun createEvent (reader : XmlReader ) = reader.run {
77
79
XmlEvent .TextEvent (locationInfo, TEXT , text)
78
80
}
@@ -83,6 +85,8 @@ enum class EventType {
83
85
writer.text(reader.text)
84
86
},
85
87
CDSECT {
88
+ override val isTextElement: Boolean get() = true
89
+
86
90
override fun createEvent (reader : XmlReader ) = reader.run {
87
91
XmlEvent .TextEvent (locationInfo, CDSECT , text)
88
92
}
@@ -115,6 +119,8 @@ enum class EventType {
115
119
writer.endDocument()
116
120
},
117
121
ENTITY_REF {
122
+ override val isTextElement: Boolean get() = true
123
+
118
124
override fun createEvent (reader : XmlReader ) = reader.run {
119
125
XmlEvent .TextEvent (locationInfo, ENTITY_REF , text)
120
126
}
@@ -162,6 +168,7 @@ enum class EventType {
162
168
};
163
169
164
170
open val isIgnorable: Boolean get() = false
171
+ open val isTextElement: Boolean get() = false
165
172
166
173
open fun writeEvent (writer : XmlWriter , textEvent : XmlEvent .TextEvent ): Unit = throw UnsupportedOperationException (
167
174
" This is not generally supported, only by text types"
Original file line number Diff line number Diff line change @@ -198,6 +198,7 @@ fun XmlReader.isPrefixDeclaredInElement(prefix: String): Boolean {
198
198
@JvmOverloads
199
199
internal fun XmlReader.unhandledEvent (message : String? = null) {
200
200
val actualMessage = when (eventType) {
201
+ EventType .ENTITY_REF ,
201
202
EventType .CDSECT ,
202
203
EventType .TEXT -> if (! isWhitespace()) message
203
204
? : " Content found where not expected [$locationInfo ] Text:'$text '" else null
@@ -231,7 +232,7 @@ fun XmlReader.isElement(elementname: QName): Boolean {
231
232
fun XmlReader.allText (): String {
232
233
val t = this
233
234
return buildString {
234
- if (eventType == EventType . TEXT || eventType == EventType . CDSECT ) {
235
+ if (eventType.isTextElement ) {
235
236
append(text)
236
237
}
237
238
@@ -247,6 +248,7 @@ fun XmlReader.allText(): String {
247
248
EventType .IGNORABLE_WHITESPACE
248
249
-> if (length != 0 ) append(t.text)
249
250
251
+ EventType .ENTITY_REF ,
250
252
EventType .TEXT ,
251
253
EventType .CDSECT
252
254
-> append(t.text)
@@ -276,7 +278,7 @@ fun XmlBufferedReader.consecutiveTextContent(): String {
276
278
val whiteSpace = StringBuilder ()
277
279
val t = this
278
280
return buildString {
279
- if (eventType == EventType . TEXT || eventType == EventType . CDSECT ) {
281
+ if (eventType.isTextElement ) {
280
282
append(text)
281
283
}
282
284
@@ -293,6 +295,7 @@ fun XmlBufferedReader.consecutiveTextContent(): String {
293
295
-> { t.next(); whiteSpace.append(t.text) }
294
296
295
297
EventType .TEXT ,
298
+ EventType .ENTITY_REF ,
296
299
EventType .CDSECT
297
300
-> {
298
301
t.next()
Original file line number Diff line number Diff line change @@ -452,6 +452,7 @@ internal open class XmlDecoderBase internal constructor(
452
452
when (eventType) {
453
453
EventType .END_ELEMENT -> return readElementEnd(descriptor)
454
454
455
+ EventType .ENTITY_REF ,
455
456
EventType .CDSECT ,
456
457
EventType .TEXT -> {
457
458
// The android reader doesn't check whitespaceness. This code should throw
Original file line number Diff line number Diff line change @@ -39,7 +39,9 @@ import nl.adaptivity.xmlutil.serialization.XmlSerializationPolicy.XmlEncodeDefau
39
39
import nl.adaptivity.xmlutil.util.CompactFragment
40
40
import kotlin.test.*
41
41
42
- private fun String.normalize () = replace(" />" , " />" ).replace(" \r\n " , " \n " )
42
+ private fun String.normalize () = replace(" />" , " />" )
43
+ .replace(" \r\n " , " \n " )
44
+ .replace(" >" , " >" )
43
45
44
46
fun JsonBuilder.defaultJsonTestConfiguration () {
45
47
isLenient = true
@@ -167,15 +169,15 @@ class TestCommon {
167
169
}
168
170
169
171
class ValueContainerTest : TestBase <ValueContainer >(
170
- ValueContainer ("foobar "),
172
+ ValueContainer ("<foo&bar> "),
171
173
ValueContainer .serializer()
172
174
) {
173
- override val expectedXML: String = " <valueContainer>foobar </valueContainer>"
174
- override val expectedJson: String = " {\" content\" :\" foobar \" }"
175
+ override val expectedXML: String = " <valueContainer><foo&bar> </valueContainer>"
176
+ override val expectedJson: String = " {\" content\" :\" <foo&bar> \" }"
175
177
176
178
@Test
177
179
fun testAlternativeXml () {
178
- val alternativeXml = " <valueContainer><![CDATA[foo]]>bar</valueContainer>"
180
+ val alternativeXml = " <valueContainer><![CDATA[< foo& ]]>bar> </valueContainer>"
179
181
assertEquals(value, baseXmlFormat.decodeFromString(serializer, alternativeXml))
180
182
}
181
183
You can’t perform that action at this time.
0 commit comments