Skip to content

Commit 4f41053

Browse files
author
Jenkins Contributor
committed
Add record deserialization tests to RobustReflectionConverterTest
1 parent 5325fdc commit 4f41053

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

core/src/test/java/hudson/util/RobustReflectionConverterTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,4 +462,56 @@ protected Object createCollection(Class type) {
462462
}
463463
}
464464
}
465+
466+
// record deserialization (#26077)
467+
468+
public record ConfigRecord(String name, int age) {}
469+
470+
@Test
471+
@Issue("JENKINS-26077")
472+
void unmarshalRecord() {
473+
XStream2 xs = new XStream2();
474+
xs.alias("config-record", ConfigRecord.class);
475+
String xml = "<config-record><name>Jenkins</name><age>20</age></config-record>";
476+
ConfigRecord rec = (ConfigRecord) xs.fromXML(xml);
477+
assertEquals("Jenkins", rec.name());
478+
assertEquals(20, rec.age());
479+
}
480+
481+
@Test
482+
@Issue("JENKINS-26077")
483+
void unmarshalRecordWithMissingField() {
484+
XStream2 xs = new XStream2();
485+
xs.alias("config-record", ConfigRecord.class);
486+
// age is omitted, should default to 0
487+
String xml = "<config-record><name>Jenkins</name></config-record>";
488+
ConfigRecord rec = (ConfigRecord) xs.fromXML(xml);
489+
assertEquals("Jenkins", rec.name());
490+
assertEquals(0, rec.age(), "primitive int should default to 0 when missing from XML");
491+
}
492+
493+
@Test
494+
@Issue("JENKINS-26077")
495+
void unmarshalRecordWithExtraField() {
496+
XStream2 xs = new XStream2();
497+
xs.alias("config-record", ConfigRecord.class);
498+
// extra element that doesn't exist on the record
499+
String xml = "<config-record><name>Jenkins</name><age>20</age><extra>ignored</extra></config-record>";
500+
ConfigRecord rec = (ConfigRecord) xs.fromXML(xml);
501+
assertEquals("Jenkins", rec.name());
502+
assertEquals(20, rec.age());
503+
}
504+
505+
@Test
506+
@Issue("JENKINS-26077")
507+
void recordRoundTrip() {
508+
XStream2 xs = new XStream2();
509+
xs.alias("config-record", ConfigRecord.class);
510+
ConfigRecord original = new ConfigRecord("Jenkins", 20);
511+
String xml = xs.toXML(original);
512+
ConfigRecord deserialized = (ConfigRecord) xs.fromXML(xml);
513+
assertEquals(original.name(), deserialized.name());
514+
assertEquals(original.age(), deserialized.age());
515+
}
516+
465517
}

0 commit comments

Comments
 (0)