Update the implementation of the `toString` fhirpath function to: (pending FHIR-48737)
* not return the text 'null' when no primitive value exists (when extension only)
* throw an error if more than 1 item is to be returned (doesn't support collections)
* return an empty set when no primitive values exist (when extension only)
This commit is contained in:
Brian Postlethwaite 2024-10-31 10:04:57 +11:00
parent bcf2ee886a
commit 01af08030f
5 changed files with 404 additions and 342 deletions

View File

@ -4817,7 +4817,15 @@ public class FHIRPathEngine {
private List<Base> funcToString(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
List<Base> result = new ArrayList<Base>();
result.add(new StringType(convertToString(focus)).noExtensions());
for (Base item : focus) {
String value = convertToString(item);
if (value != null)
result.add(new StringType(value).noExtensions());
}
if (result.size() > 1) {
throw makeException(exp, I18nConstants.FHIRPATH_NO_COLLECTION, "toString", result.size());
}
return result;
}

View File

@ -4820,7 +4820,15 @@ public class FHIRPathEngine {
private List<Base> funcToString(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
List<Base> result = new ArrayList<Base>();
result.add(new StringType(convertToString(focus)).noExtensions());
for (Base item : focus) {
String value = convertToString(item);
if (value != null)
result.add(new StringType(value).noExtensions());
}
if (result.size() > 1) {
throw makeException(exp, I18nConstants.FHIRPATH_NO_COLLECTION, "toString", result.size());
}
return result;
}

View File

@ -336,4 +336,23 @@ public class FHIRPathTests {
assertEquals(1, results.size());
assertEquals("123", results.get(0).toString());
}
@Test
public void testEvaluate_ToStringOnDateValue() {
Patient input = new Patient();
var dtv = new DateType("2024");
input.setBirthDateElement(dtv);
List<Base> results = fp.evaluate(input, "Patient.birthDate.toString()");
assertEquals(1, results.size());
assertEquals("2024", results.get(0).toString());
}
@Test
public void testEvaluate_ToStringOnExtensionOnlyValue() {
Patient input = new Patient();
var dtv = new DateType();
input.setBirthDateElement(dtv);
List<Base> results = fp.evaluate(input, "Patient.birthDate.toString()");
assertEquals(0, results.size());
}
}

View File

@ -4929,7 +4929,15 @@ public class FHIRPathEngine {
private List<Base> funcToString(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
List<Base> result = new ArrayList<Base>();
result.add(new StringType(convertToString(focus)).noExtensions());
for (Base item : focus) {
String value = convertToString(item);
if (value != null)
result.add(new StringType(value).noExtensions());
}
if (result.size() > 1) {
throw makeException(exp, I18nConstants.FHIRPATH_NO_COLLECTION, "toString", result.size());
}
return result;
}

View File

@ -337,4 +337,23 @@ public class FHIRPathTests {
assertEquals(1, results.size());
assertEquals("123", results.get(0).toString());
}
@Test
public void testEvaluate_ToStringOnDateValue() {
Patient input = new Patient();
var dtv = new DateType("2024");
input.setBirthDateElement(dtv);
List<Base> results = fp.evaluate(input, "Patient.birthDate.toString()");
assertEquals(1, results.size());
assertEquals("2024", results.get(0).toString());
}
@Test
public void testEvaluate_ToStringOnExtensionOnlyValue() {
Patient input = new Patient();
var dtv = new DateType();
input.setBirthDateElement(dtv);
List<Base> results = fp.evaluate(input, "Patient.birthDate.toString()");
assertEquals(0, results.size());
}
}