package ca.uhn.fhir.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import org.apache.commons.lang3.SerializationUtils;
import org.hl7.fhir.dstu3.model.Address;
import org.hl7.fhir.dstu3.model.Enumerations.AdministrativeGender;
import org.hl7.fhir.dstu3.model.HumanName;
import org.hl7.fhir.dstu3.model.Patient;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.junit.AfterClass;
import org.junit.Test;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
import ca.uhn.fhir.parser.IParser;
import ca.uhn.fhir.util.TestUtil;
public class ModelSerializationDstu3Test {
private static FhirContext ourCtx = FhirContext.forDstu3();
/**
* Verify that MaritalStatusCodeEnum (and, by extension, BoundCodeableConcepts in general) are serializable. Author: Nick Peterson (nrpeterson@gmail.com)
*/
@Test
public void testBoundCodeableConceptSerialization() {
AdministrativeGender maritalStatus = AdministrativeGender.MALE;
byte[] bytes = SerializationUtils.serialize(maritalStatus);
assertTrue(bytes.length > 0);
AdministrativeGender deserialized = SerializationUtils.deserialize(bytes);
assertEquals(AdministrativeGender.MALE, deserialized);
}
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
@Test
public void testBoundCodeSerialization() {
Patient p = new Patient();
p.setGender(AdministrativeGender.MALE);
Patient out = testIsSerializable(p);
/*
* Make sure the binder still works for Code
*/
assertEquals(AdministrativeGender.MALE, out.getGender());
out.getGenderElement().setValueAsString("female");
assertEquals(AdministrativeGender.FEMALE, out.getGender());
}
@SuppressWarnings("unchecked")
private <T extends IBaseResource> T testIsSerializable(T theObject) {
byte[] bytes = SerializationUtils.serialize(theObject);
assertTrue(bytes.length > 0);
IBaseResource obj = SerializationUtils.deserialize(bytes);
assertTrue(obj != null);
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
assertEquals(p.encodeResourceToString(theObject), p.encodeResourceToString(obj));
return (T) obj;
}
/**
* Contributed by Travis from iSalus
*/
@Test
public void testSerialization2() {
Patient patient = new Patient();
patient.addName(new HumanName().addGiven("George").setFamily("Washington"));
patient.addName(new HumanName().addGiven("George2").setFamily("Washington2"));
patient.addAddress(new Address().addLine("line 1").addLine("line 2").setCity("city").setState("UT"));
patient.addAddress(new Address().addLine("line 1b").addLine("line 2b").setCity("cityb").setState("UT"));
patient.setBirthDate(new Date());
testIsSerializable(patient);
}
}