Merge pull request #1795 from brianpos/BP-fhirpath-tostring

fhirpath `tostring` implementation fix
This commit is contained in:
Grahame Grieve 2024-11-19 13:19:55 +11:00 committed by GitHub
commit 711eae48e0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 408 additions and 342 deletions

View File

@ -57,6 +57,10 @@ To skip unit tests:
```
mvn -Dmaven.test.skip install
```
> **Note:** If you're on Windows and use PowerShell, The `-` needs to be escaped with a backtick (`)
> ```
> mvn `-Dmaven.test.skip install
> ```
To clean and rebuild the terminology server caches:

View File

@ -4949,7 +4949,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

@ -4958,7 +4958,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

@ -262,7 +262,7 @@ public class FHIRPathTests {
List<Element> expected = new ArrayList<Element>();
XMLUtil.getNamedChildren(test, "output", expected);
assertEquals(outcome.size(), expected.size(), String.format("Expected %d objects but found %d for expression %s", expected.size(), outcome.size(), expression));
assertEquals(expected.size(), outcome.size(), String.format("Expected %d objects but found %d for expression %s", expected.size(), outcome.size(), expression));
if ("false".equals(test.getAttribute("ordered"))) {
for (int i = 0; i < Math.min(outcome.size(), expected.size()); i++) {
String tn = outcome.get(i).fhirType();
@ -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());
}
}