Skip to content

Commit 9a05282

Browse files
t-regbsegorikftp
authored andcommitted
exclude defaults from xml output and add test to validate
1 parent 5572122 commit 9a05282

File tree

2 files changed

+40
-13
lines changed

2 files changed

+40
-13
lines changed

sdk/generator/xml/src/commonMain/kotlin/io/github/composegears/valkyrie/sdk/generator/xml/XmlSerializer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import kotlinx.serialization.modules.polymorphic
77
import kotlinx.serialization.modules.subclass
88
import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi
99
import nl.adaptivity.xmlutil.serialization.XML
10+
import nl.adaptivity.xmlutil.serialization.XmlSerializationPolicy
1011

1112
internal object XmlSerializer {
1213
private val baseModule = SerializersModule {
@@ -23,6 +24,7 @@ internal object XmlSerializer {
2324
defaultPolicy {
2425
pedantic = false
2526
repairNamespaces = true
27+
encodeDefault = XmlSerializationPolicy.XmlEncodeDefault.NEVER
2628
}
2729
}
2830

sdk/generator/xml/src/commonTest/kotlin/io/github/composegears/valkyrie/sdk/generator/xml/IrToXmlGeneratorTest.kt

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.github.composegears.valkyrie.parser.kmp.xml.XmlToImageVectorParser
1313
import io.github.composegears.valkyrie.resource.loader.ResourceLoader.getResourceText
1414
import kotlin.test.Test
1515
import kotlin.test.assertEquals
16+
import kotlin.test.assertFalse
1617
import kotlin.test.assertTrue
1718

1819
class IrToXmlGeneratorTest {
@@ -237,8 +238,6 @@ class IrToXmlGeneratorTest {
237238
val expectedPathData =
238239
"M 6.75 12.127 L 3.623 9 L 2.558 10.057 L 6.75 14.25 L 15.75 5.25 L 14.693 4.192 L 6.75 12.127 Z"
239240
assertTrue(generatedXml.contains(expectedPathData))
240-
241-
assertPathDefaults(generatedXml)
242241
}
243242

244243
@Test
@@ -310,8 +309,6 @@ class IrToXmlGeneratorTest {
310309
val expectedPathData =
311310
"M 6.75 12.127 L 3.623 9 L 2.558 10.057 L 6.75 14.25 L 15.75 5.25 L 14.693 4.192 L 6.75 12.127 Z"
312311
assertTrue(generatedXml.contains(expectedPathData))
313-
314-
assertPathDefaults(generatedXml)
315312
}
316313

317314
@Test
@@ -343,7 +340,6 @@ class IrToXmlGeneratorTest {
343340

344341
assertTrue(generatedXml.contains("android:fillColor=\"#FFE676FF\"")) // #e676ff becomes #FFE676FF
345342
assertTrue(generatedXml.contains("android:fillColor=\"#FFFF00FF\"")) // #ff00ff becomes #FFFF00FF
346-
assertPathDefaults(generatedXml)
347343
}
348344

349345
@Test
@@ -389,8 +385,6 @@ class IrToXmlGeneratorTest {
389385
assertTrue(generatedXml.contains("android:fillColor=\"#FF232F34\""))
390386

391387
assertTrue(generatedXml.contains("M 21"))
392-
393-
assertPathDefaults(generatedXml)
394388
}
395389

396390
@Test
@@ -538,24 +532,55 @@ class IrToXmlGeneratorTest {
538532
assertTrue(generatedXml.contains("M 0 0 h 24 v 24 h -24 Z"))
539533
}
540534

535+
@Test
536+
fun `parse ImageVector with default values should exclude them from XML output`() {
537+
val imageVector = IrImageVector(
538+
defaultWidth = 24f,
539+
defaultHeight = 24f,
540+
viewportWidth = 24f,
541+
viewportHeight = 24f,
542+
autoMirror = false,
543+
nodes = listOf(
544+
IrVectorNode.IrPath(
545+
pathFillType = IrPathFillType.NonZero,
546+
fill = IrFill.Color(IrColor(0xffffffff)),
547+
fillAlpha = 1f,
548+
strokeAlpha = 1f,
549+
paths = emptyList(),
550+
),
551+
),
552+
)
553+
554+
val result = IrToXmlGenerator.generate(imageVector)
555+
556+
with(result) {
557+
// Default values should not be present in the XML
558+
assertFalse(contains("android:autoMirrored=\"false\""), "Default autoMirrored=false should not be in XML")
559+
assertFalse(contains("android:fillType=\"nonZero\""), "Default fillType=nonZero should not be in XML")
560+
assertFalse(contains("android:fillAlpha=\"1.0\""), "Default fillAlpha=1.0 should not be in XML")
561+
assertFalse(contains("android:strokeAlpha=\"1.0\""), "Default strokeAlpha=1.0 should not be in XML")
562+
563+
// Non-default values should be present
564+
assertTrue(contains("android:fillColor=\"#FFFFFFFF\""), "Non-default fillColor should be in XML")
565+
assertTrue(contains("android:pathData=\"\""), "pathData should always be present")
566+
}
567+
}
568+
541569
private fun roundTripGenerateXml(resourcePath: String): String {
542570
val originalXml = getResourceText(resourcePath)
543571
val imageVector = XmlToImageVectorParser.parse(originalXml)
544572
return IrToXmlGenerator.generate(imageVector)
545573
}
546574

547-
private fun assertPathDefaults(xml: String) {
548-
assertTrue(xml.contains("android:fillType=\"nonZero\""))
549-
assertTrue(xml.contains("android:fillAlpha=\"1.0\""))
550-
}
551-
552575
private fun validateVectorAttributes(xml: String, size: Int, viewportSize: Float, autoMirrored: Boolean = false) {
553576
with(xml) {
554577
assertTrue(contains("android:width=\"${size}dp\""))
555578
assertTrue(contains("android:height=\"${size}dp\""))
556579
assertTrue(contains("android:viewportWidth=\"$viewportSize\""))
557580
assertTrue(contains("android:viewportHeight=\"$viewportSize\""))
558-
assertTrue(contains("android:autoMirrored=\"$autoMirrored\""))
581+
if (autoMirrored) {
582+
assertTrue(contains("android:autoMirrored=\"true\""))
583+
}
559584
}
560585
}
561586

0 commit comments

Comments
 (0)