FIx tests

This commit is contained in:
jamesagnew 2016-04-17 10:49:16 -04:00
parent 1af65ff5a8
commit 5a818a38e8
4 changed files with 224 additions and 157 deletions

View File

@ -667,7 +667,7 @@ public class JsonParser extends BaseParser implements IParser {
} else if (nextChild instanceof RuntimeChildNarrativeDefinition && theContainedResource) { } else if (nextChild instanceof RuntimeChildNarrativeDefinition && theContainedResource) {
// suppress narratives from contained resources // suppress narratives from contained resources
} else { } else {
encodeChildElementToStreamWriter(theResDef, theResource, theEventWriter, nextValue, childDef, childName, theContainedResource, nextChildElem, force); encodeChildElementToStreamWriter(theResDef, theResource, theEventWriter, nextValue, childDef, childName, theContainedResource, nextChildElem, false);
} }
currentChildName = childName; currentChildName = childName;
} else { } else {

View File

@ -62,6 +62,7 @@ import ca.uhn.fhir.model.dstu2.valueset.ConditionVerificationStatusEnum;
import ca.uhn.fhir.model.dstu2.valueset.IdentifierUseEnum; import ca.uhn.fhir.model.dstu2.valueset.IdentifierUseEnum;
import ca.uhn.fhir.model.dstu2.valueset.MaritalStatusCodesEnum; import ca.uhn.fhir.model.dstu2.valueset.MaritalStatusCodesEnum;
import ca.uhn.fhir.model.dstu2.valueset.ObservationStatusEnum; import ca.uhn.fhir.model.dstu2.valueset.ObservationStatusEnum;
import ca.uhn.fhir.model.dstu2.valueset.UnknownContentCodeEnum;
import ca.uhn.fhir.model.primitive.DateDt; import ca.uhn.fhir.model.primitive.DateDt;
import ca.uhn.fhir.model.primitive.DateTimeDt; import ca.uhn.fhir.model.primitive.DateTimeDt;
import ca.uhn.fhir.model.primitive.IdDt; import ca.uhn.fhir.model.primitive.IdDt;
@ -78,69 +79,6 @@ public class JsonParserDstu2Test {
private static final FhirContext ourCtx = FhirContext.forDstu2(); private static final FhirContext ourCtx = FhirContext.forDstu2();
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(JsonParserDstu2Test.class); private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(JsonParserDstu2Test.class);
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
/**
* See #336
*/
@Test
public void testEncodeAndParseNullPrimitiveWithExtensions() {
Patient p = new Patient();
p.setId("patid");
HumanNameDt name = p.addName();
name.addFamily().setValue(null).addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT0")));
name.getFamily().get(0).setElementSpecificId("f0");
name.addFamily().setValue("V1").addUndeclaredExtension((ExtensionDt) new ExtensionDt(false, "http://foo", new StringDt("FOOEXT1")));
name.getFamily().get(1).setElementSpecificId("f1");
name.getFamily().get(1).getUndeclaredExtensions().get(0).setElementSpecificId("ext1id");
name.addFamily(); // this one shouldn't get encoded
name.addFamily().setValue(null).addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT3")));
name.setElementSpecificId("nameid");
String output = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
ourLog.info(output);
output = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(p);
String expected = "{\"resourceType\":\"Patient\",\"id\":\"patid\",\"name\":[{\"id\":\"nameid\",\"family\":[null,\"V1\",null],\"_family\":[{\"id\":\"f0\",\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT0\"}]},{\"id\":\"f1\",\"extension\":[{\"id\":\"ext1id\",\"url\":\"http://foo\",\"valueString\":\"FOOEXT1\"}]},{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT3\"}]}]}]}";
assertEquals(expected, output);
p = ourCtx.newJsonParser().parseResource(Patient.class, output);
assertEquals("patid", p.getIdElement().getIdPart());
name = p.getName().get(0);
assertEquals("nameid", name.getElementSpecificId());
assertEquals(3, name.getFamily().size());
assertEquals(null, name.getFamily().get(0).getValue());
assertEquals("V1", name.getFamily().get(1).getValue());
assertEquals(null, name.getFamily().get(2).getValue());
assertEquals("f0", name.getFamily().get(0).getElementSpecificId());
assertEquals("f1", name.getFamily().get(1).getElementSpecificId());
assertEquals(null, name.getFamily().get(2).getElementSpecificId());
assertEquals(1, name.getFamily().get(0).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT0", ((StringDt)name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getElementSpecificId());
assertEquals(1, name.getFamily().get(1).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT1", ((StringDt)name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals("ext1id", name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getElementSpecificId());
assertEquals(1, name.getFamily().get(2).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT3", ((StringDt)name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getElementSpecificId());
}
@Test @Test
public void testContainedResourceInExtensionUndeclared() { public void testContainedResourceInExtensionUndeclared() {
Patient p = new Patient(); Patient p = new Patient();
@ -163,7 +101,6 @@ public class JsonParserDstu2Test {
assertEquals("ORG", o.getName()); assertEquals("ORG", o.getName());
} }
/** /**
* See #308 * See #308
*/ */
@ -182,6 +119,7 @@ public class JsonParserDstu2Test {
assertEquals(true, obs.getReadOnly().getValue().booleanValue()); assertEquals(true, obs.getReadOnly().getValue().booleanValue());
} }
@Test @Test
public void testEncodeAndParseExtensions() throws Exception { public void testEncodeAndParseExtensions() throws Exception {
@ -267,6 +205,7 @@ public class JsonParserDstu2Test {
} }
@Test @Test
public void testEncodeAndParseMetaProfileAndTags() { public void testEncodeAndParseMetaProfileAndTags() {
Patient p = new Patient(); Patient p = new Patient();
@ -324,6 +263,63 @@ public class JsonParserDstu2Test {
} }
/**
* See #336
*/
@Test
public void testEncodeAndParseNullPrimitiveWithExtensions() {
Patient p = new Patient();
p.setId("patid");
HumanNameDt name = p.addName();
name.addFamily().setValue(null).addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT0")));
name.getFamily().get(0).setElementSpecificId("f0");
name.addFamily().setValue("V1").addUndeclaredExtension((ExtensionDt) new ExtensionDt(false, "http://foo", new StringDt("FOOEXT1")));
name.getFamily().get(1).setElementSpecificId("f1");
name.getFamily().get(1).getUndeclaredExtensions().get(0).setElementSpecificId("ext1id");
name.addFamily(); // this one shouldn't get encoded
name.addFamily().setValue(null).addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT3")));
name.setElementSpecificId("nameid");
String output = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
ourLog.info(output);
output = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(p);
String expected = "{\"resourceType\":\"Patient\",\"id\":\"patid\",\"name\":[{\"id\":\"nameid\",\"family\":[null,\"V1\",null],\"_family\":[{\"id\":\"f0\",\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT0\"}]},{\"id\":\"f1\",\"extension\":[{\"id\":\"ext1id\",\"url\":\"http://foo\",\"valueString\":\"FOOEXT1\"}]},{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT3\"}]}]}]}";
assertEquals(expected, output);
p = ourCtx.newJsonParser().parseResource(Patient.class, output);
assertEquals("patid", p.getIdElement().getIdPart());
name = p.getName().get(0);
assertEquals("nameid", name.getElementSpecificId());
assertEquals(3, name.getFamily().size());
assertEquals(null, name.getFamily().get(0).getValue());
assertEquals("V1", name.getFamily().get(1).getValue());
assertEquals(null, name.getFamily().get(2).getValue());
assertEquals("f0", name.getFamily().get(0).getElementSpecificId());
assertEquals("f1", name.getFamily().get(1).getElementSpecificId());
assertEquals(null, name.getFamily().get(2).getElementSpecificId());
assertEquals(1, name.getFamily().get(0).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT0", ((StringDt)name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(0).getAllUndeclaredExtensions().get(0).getElementSpecificId());
assertEquals(1, name.getFamily().get(1).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT1", ((StringDt)name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals("ext1id", name.getFamily().get(1).getAllUndeclaredExtensions().get(0).getElementSpecificId());
assertEquals(1, name.getFamily().get(2).getAllUndeclaredExtensions().size());
assertEquals("http://foo", name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getUrl());
assertEquals("FOOEXT3", ((StringDt)name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(2).getAllUndeclaredExtensions().get(0).getElementSpecificId());
}
@Test @Test
public void testEncodeAndParseSecurityLabels() { public void testEncodeAndParseSecurityLabels() {
Patient p = new Patient(); Patient p = new Patient();
@ -385,7 +381,6 @@ public class JsonParserDstu2Test {
assertEquals("VERSION2", label.getVersion()); assertEquals("VERSION2", label.getVersion());
} }
@Test @Test
public void testEncodeBundleNewBundleNoText() { public void testEncodeBundleNewBundleNoText() {
@ -407,6 +402,7 @@ public class JsonParserDstu2Test {
} }
@Test @Test
public void testEncodeBundleOldBundleNoText() { public void testEncodeBundleOldBundleNoText() {
@ -426,6 +422,7 @@ public class JsonParserDstu2Test {
} }
/** /**
* Fixing #89 * Fixing #89
*/ */
@ -495,6 +492,35 @@ public class JsonParserDstu2Test {
assertThat(encoded, not(containsString("Label"))); assertThat(encoded, not(containsString("Label")));
} }
@Test
public void testEncodeExtensionInPrimitiveElement() {
Conformance c = new Conformance();
c.getAcceptUnknownElement().addUndeclaredExtension(false, "http://foo", new StringDt("AAA"));
String encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(c);
ourLog.info(encoded);
encoded = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(c);
ourLog.info(encoded);
assertEquals(encoded, "{\"resourceType\":\"Conformance\",\"_acceptUnknown\":{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"AAA\"}]}}");
// Now with a value
ourLog.info("---------------");
c = new Conformance();
c.getAcceptUnknownElement().setValueAsEnum(UnknownContentCodeEnum.UNKNOWN_ELEMENTS);;
c.getAcceptUnknownElement().addUndeclaredExtension(false, "http://foo", new StringDt("AAA"));
encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(c);
ourLog.info(encoded);
encoded = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(c);
ourLog.info(encoded);
assertEquals(encoded, "{\"resourceType\":\"Conformance\",\"acceptUnknown\":\"elements\",\"_acceptUnknown\":{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"AAA\"}]}}");
}
@Test @Test
public void testEncodeExtensionUndeclaredNonModifier() { public void testEncodeExtensionUndeclaredNonModifier() {
Observation obs = new Observation(); Observation obs = new Observation();
@ -1455,4 +1481,9 @@ public class JsonParserDstu2Test {
ourLog.info(message); ourLog.info(message);
Assert.assertThat(message, containsString("contained")); Assert.assertThat(message, containsString("contained"));
} }
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
} }

View File

@ -197,7 +197,7 @@ public class XmlParserDstu2Test {
public void testEncodeExtensionWithContainedResource() { public void testEncodeExtensionWithContainedResource() {
TestPatientFor327 patient = new TestPatientFor327(); TestPatientFor327 patient = new TestPatientFor327();
patient.setBirthDate(new Date(), TemporalPrecisionEnum.DAY); patient.setBirthDate(new DateDt("2016-04-17"));
List<ResourceReferenceDt> conditions = new ArrayList<ResourceReferenceDt>(); List<ResourceReferenceDt> conditions = new ArrayList<ResourceReferenceDt>();
Condition condition = new Condition(); Condition condition = new Condition();
@ -224,7 +224,7 @@ public class XmlParserDstu2Test {
"<reference value=\"#1\"/>", "<reference value=\"#1\"/>",
"</valueReference>", "</valueReference>",
"</extension>", "</extension>",
"<birthDate value=\"2016-04-14\"/>", "<birthDate value=\"2016-04-17\"/>",
"</Patient>" "</Patient>"
)); ));
//@formatter:on //@formatter:on

View File

@ -32,6 +32,7 @@ import org.hl7.fhir.dstu3.model.Coding;
import org.hl7.fhir.dstu3.model.Condition; import org.hl7.fhir.dstu3.model.Condition;
import org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus; import org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus;
import org.hl7.fhir.dstu3.model.Conformance; import org.hl7.fhir.dstu3.model.Conformance;
import org.hl7.fhir.dstu3.model.Conformance.UnknownContentCode;
import org.hl7.fhir.dstu3.model.DateTimeType; import org.hl7.fhir.dstu3.model.DateTimeType;
import org.hl7.fhir.dstu3.model.DateType; import org.hl7.fhir.dstu3.model.DateType;
import org.hl7.fhir.dstu3.model.DecimalType; import org.hl7.fhir.dstu3.model.DecimalType;
@ -82,80 +83,6 @@ public class JsonParserDstu3Test {
ourCtx.setNarrativeGenerator(null); ourCtx.setNarrativeGenerator(null);
} }
/**
* See #336
*/
@Test
public void testEncodeAndParseNullPrimitiveWithExtensions() {
Patient p = new Patient();
p.setId("patid");
HumanName name = p.addName();
name.addFamilyElement().setValue(null).setId("f0").addExtension(new Extension("http://foo", new StringType("FOOEXT0")));
name.addFamilyElement().setValue("V1").setId("f1").addExtension((Extension) new Extension("http://foo", new StringType("FOOEXT1")).setId("ext1id"));
name.addFamilyElement(); // this one shouldn't get encoded
name.addFamilyElement().setValue(null).addExtension(new Extension("http://foo", new StringType("FOOEXT3")));
name.setId("nameid");
String output = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
ourLog.info(output);
output = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(p);
String expected = "{\"resourceType\":\"Patient\",\"id\":\"patid\",\"name\":[{\"id\":\"nameid\",\"family\":[null,\"V1\",null],\"_family\":[{\"id\":\"f0\",\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT0\"}]},{\"id\":\"f1\",\"extension\":[{\"id\":\"ext1id\",\"url\":\"http://foo\",\"valueString\":\"FOOEXT1\"}]},{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT3\"}]}]}]}";
assertEquals(expected, output);
p = ourCtx.newJsonParser().parseResource(Patient.class, output);
assertEquals("patid", p.getIdElement().getIdPart());
name = p.getName().get(0);
assertEquals("nameid", name.getId());
assertEquals(3, name.getFamily().size());
assertEquals(null, name.getFamily().get(0).getValue());
assertEquals("V1", name.getFamily().get(1).getValue());
assertEquals(null, name.getFamily().get(2).getValue());
assertEquals("f0", name.getFamily().get(0).getId());
assertEquals("f1", name.getFamily().get(1).getId());
assertEquals(null, name.getFamily().get(2).getId());
assertEquals(1, name.getFamily().get(0).getExtension().size());
assertEquals("http://foo", name.getFamily().get(0).getExtension().get(0).getUrl());
assertEquals("FOOEXT0", ((StringType)name.getFamily().get(0).getExtension().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(0).getExtension().get(0).getId());
assertEquals(1, name.getFamily().get(1).getExtension().size());
assertEquals("http://foo", name.getFamily().get(1).getExtension().get(0).getUrl());
assertEquals("FOOEXT1", ((StringType)name.getFamily().get(1).getExtension().get(0).getValue()).getValue());
assertEquals("ext1id", name.getFamily().get(1).getExtension().get(0).getId());
assertEquals(1, name.getFamily().get(2).getExtension().size());
assertEquals("http://foo", name.getFamily().get(2).getExtension().get(0).getUrl());
assertEquals("FOOEXT3", ((StringType)name.getFamily().get(2).getExtension().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(2).getExtension().get(0).getId());
}
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
/**
* See #335
*/
@Test
public void testParseExtensionWithId() throws Exception {
String input = IOUtils.toString(getClass().getResourceAsStream("/json-edge-case-modified-335.json"));
Patient p = ourCtx.newJsonParser().parseResource(Patient.class, input);
StringType family1 = p.getContact().get(0).getName().getFamily().get(1);
assertEquals("du", family1.getValue());
assertEquals("a2", family1.getId());
}
@Test @Test
public void testEncodeAndParseExtensions() throws Exception { public void testEncodeAndParseExtensions() throws Exception {
@ -240,6 +167,7 @@ public class JsonParserDstu3Test {
} }
@Test @Test
public void testEncodeAndParseMetaProfileAndTags() { public void testEncodeAndParseMetaProfileAndTags() {
Patient p = new Patient(); Patient p = new Patient();
@ -318,6 +246,59 @@ public class JsonParserDstu3Test {
assertEquals("sec_label2", tagList.get(1).getDisplay()); assertEquals("sec_label2", tagList.get(1).getDisplay());
} }
/**
* See #336
*/
@Test
public void testEncodeAndParseNullPrimitiveWithExtensions() {
Patient p = new Patient();
p.setId("patid");
HumanName name = p.addName();
name.addFamilyElement().setValue(null).setId("f0").addExtension(new Extension("http://foo", new StringType("FOOEXT0")));
name.addFamilyElement().setValue("V1").setId("f1").addExtension((Extension) new Extension("http://foo", new StringType("FOOEXT1")).setId("ext1id"));
name.addFamilyElement(); // this one shouldn't get encoded
name.addFamilyElement().setValue(null).addExtension(new Extension("http://foo", new StringType("FOOEXT3")));
name.setId("nameid");
String output = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
ourLog.info(output);
output = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(p);
String expected = "{\"resourceType\":\"Patient\",\"id\":\"patid\",\"name\":[{\"id\":\"nameid\",\"family\":[null,\"V1\",null],\"_family\":[{\"id\":\"f0\",\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT0\"}]},{\"id\":\"f1\",\"extension\":[{\"id\":\"ext1id\",\"url\":\"http://foo\",\"valueString\":\"FOOEXT1\"}]},{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"FOOEXT3\"}]}]}]}";
assertEquals(expected, output);
p = ourCtx.newJsonParser().parseResource(Patient.class, output);
assertEquals("patid", p.getIdElement().getIdPart());
name = p.getName().get(0);
assertEquals("nameid", name.getId());
assertEquals(3, name.getFamily().size());
assertEquals(null, name.getFamily().get(0).getValue());
assertEquals("V1", name.getFamily().get(1).getValue());
assertEquals(null, name.getFamily().get(2).getValue());
assertEquals("f0", name.getFamily().get(0).getId());
assertEquals("f1", name.getFamily().get(1).getId());
assertEquals(null, name.getFamily().get(2).getId());
assertEquals(1, name.getFamily().get(0).getExtension().size());
assertEquals("http://foo", name.getFamily().get(0).getExtension().get(0).getUrl());
assertEquals("FOOEXT0", ((StringType)name.getFamily().get(0).getExtension().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(0).getExtension().get(0).getId());
assertEquals(1, name.getFamily().get(1).getExtension().size());
assertEquals("http://foo", name.getFamily().get(1).getExtension().get(0).getUrl());
assertEquals("FOOEXT1", ((StringType)name.getFamily().get(1).getExtension().get(0).getValue()).getValue());
assertEquals("ext1id", name.getFamily().get(1).getExtension().get(0).getId());
assertEquals(1, name.getFamily().get(2).getExtension().size());
assertEquals("http://foo", name.getFamily().get(2).getExtension().get(0).getUrl());
assertEquals("FOOEXT3", ((StringType)name.getFamily().get(2).getExtension().get(0).getValue()).getValue());
assertEquals(null, name.getFamily().get(2).getExtension().get(0).getId());
}
@Test @Test
public void testEncodeAndParseSecurityLabels() { public void testEncodeAndParseSecurityLabels() {
@ -445,6 +426,7 @@ public class JsonParserDstu3Test {
assertThat(actual, not(containsString("78ef6f64c2f2"))); assertThat(actual, not(containsString("78ef6f64c2f2")));
} }
@Test @Test
public void testEncodeEmptyBinary() { public void testEncodeEmptyBinary() {
String output = ourCtx.newJsonParser().encodeResourceToString(new Binary()); String output = ourCtx.newJsonParser().encodeResourceToString(new Binary());
@ -467,6 +449,7 @@ public class JsonParserDstu3Test {
assertThat(encoded, not(containsString("tag"))); assertThat(encoded, not(containsString("tag")));
} }
/** /**
* #158 * #158
*/ */
@ -485,6 +468,35 @@ public class JsonParserDstu3Test {
assertThat(encoded, not(containsString("Label"))); assertThat(encoded, not(containsString("Label")));
} }
@Test
public void testEncodeExtensionInPrimitiveElement() {
Conformance c = new Conformance();
c.getAcceptUnknownElement().addExtension().setUrl("http://foo").setValue(new StringType("AAA"));
String encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(c);
ourLog.info(encoded);
encoded = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(c);
ourLog.info(encoded);
assertEquals(encoded, "{\"resourceType\":\"Conformance\",\"_acceptUnknown\":{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"AAA\"}]}}");
// Now with a value
ourLog.info("---------------");
c = new Conformance();
c.getAcceptUnknownElement().setValue(UnknownContentCode.ELEMENTS);
c.getAcceptUnknownElement().addExtension().setUrl("http://foo").setValue(new StringType("AAA"));
encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(c);
ourLog.info(encoded);
encoded = ourCtx.newJsonParser().setPrettyPrint(false).encodeResourceToString(c);
ourLog.info(encoded);
assertEquals(encoded, "{\"resourceType\":\"Conformance\",\"acceptUnknown\":\"elements\",\"_acceptUnknown\":{\"extension\":[{\"url\":\"http://foo\",\"valueString\":\"AAA\"}]}}");
}
@Test @Test
public void testEncodeExtensionUndeclaredNonModifier() { public void testEncodeExtensionUndeclaredNonModifier() {
Observation obs = new Observation(); Observation obs = new Observation();
@ -585,7 +597,6 @@ public class JsonParserDstu3Test {
assertThat(encoded, containsString("maritalStatus")); assertThat(encoded, containsString("maritalStatus"));
} }
@Test @Test
public void testEncodeParametersWithId() { public void testEncodeParametersWithId() {
Parameters reqParms = new Parameters(); Parameters reqParms = new Parameters();
@ -619,6 +630,7 @@ public class JsonParserDstu3Test {
assertThat(encoded, not(containsString("maritalStatus"))); assertThat(encoded, not(containsString("maritalStatus")));
} }
@Test @Test
public void testEncodeSummary2() { public void testEncodeSummary2() {
Patient patient = new Patient(); Patient patient = new Patient();
@ -656,20 +668,26 @@ public class JsonParserDstu3Test {
} }
// see #241 /**
* See #241
*/
@Test @Test
public void testEncodeThenParseShouldNotAddSpuriousId() throws Exception { public void testEncodeThenParseShouldNotAddSpuriousId() throws Exception {
Condition condition = new Condition().setVerificationStatus(ConditionVerificationStatus.CONFIRMED); Condition condition = new Condition().setVerificationStatus(ConditionVerificationStatus.CONFIRMED);
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
BundleEntryComponent entry = new Bundle.BundleEntryComponent(); BundleEntryComponent entry = new Bundle.BundleEntryComponent();
entry.setIdElement(IdType.newRandomUuid()); entry.setId("123");
entry.setResource(condition); entry.setResource(condition);
bundle.getEntry().add(entry); bundle.getEntry().add(entry);
IParser parser = ourCtx.newJsonParser(); IParser parser = ourCtx.newJsonParser();
String json = parser.encodeResourceToString(bundle); String json = parser.encodeResourceToString(bundle);
ourLog.info(json); ourLog.info(json);
bundle = (Bundle) parser.parseResource(json); bundle = (Bundle) parser.parseResource(json);
assertThat(json, not(containsString("\"id\"")));
assertEquals("123", bundle.getEntry().get(0).getId());
condition = (Condition) bundle.getEntry().get(0).getResource();
assertEquals(null, condition.getId());
} }
@Test @Test
@ -1218,6 +1236,19 @@ public class JsonParserDstu3Test {
assertEquals("patient family", p.getName().get(0).getFamily().get(0).getValue()); assertEquals("patient family", p.getName().get(0).getFamily().get(0).getValue());
} }
/**
* See #335
*/
@Test
public void testParseExtensionWithId() throws Exception {
String input = IOUtils.toString(getClass().getResourceAsStream("/json-edge-case-modified-335.json"));
Patient p = ourCtx.newJsonParser().parseResource(Patient.class, input);
StringType family1 = p.getContact().get(0).getName().getFamily().get(1);
assertEquals("du", family1.getValue());
assertEquals("a2", family1.getId());
}
@Test @Test
public void testParseMetadata() throws Exception { public void testParseMetadata() throws Exception {
//@formatter:off //@formatter:off
@ -1397,4 +1428,9 @@ public class JsonParserDstu3Test {
ourLog.info(message); ourLog.info(message);
Assert.assertThat(message, containsString("contained")); Assert.assertThat(message, containsString("contained"));
} }
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
} }