Merge pull request #751 from hapifhir/dotasek-fix-fhirpath-replacefunc-params

Fix FHIRPathEngine funcReplace parameters
This commit is contained in:
Grahame Grieve 2022-02-26 06:07:01 +11:00 committed by GitHub
commit 153f5d657c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 1 deletions

View File

@ -2219,7 +2219,7 @@ public class FHIRPathEngine {
if (!Utilities.noString(f)) {
if (exp.getParameters().size() != 2) {
if (exp.getParameters().size() == 2) {
String t = convertToString(execute(context, focus, exp.getParameters().get(0), true));
String r = convertToString(execute(context, focus, exp.getParameters().get(1), true));

View File

@ -0,0 +1,61 @@
package org.hl7.fhir.dstu3.utils;
import org.hl7.fhir.dstu3.context.IWorkerContext;
import org.hl7.fhir.dstu3.model.Base;
import org.hl7.fhir.dstu3.model.ExpressionNode;
import org.hl7.fhir.dstu3.model.StringType;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@ExtendWith(MockitoExtension.class)
public class FhirPathTests {
@Mock
IWorkerContext iWorkerContext;
@Mock
Object appContext;
@Mock
Base resource;
@Mock
Base base;
@Test
public void testFuncReplaceParamSize() {
FHIRPathEngine engine = Mockito.spy(new FHIRPathEngine(iWorkerContext));
ExpressionNode expressionNode = new ExpressionNode(0);
expressionNode.setKind(ExpressionNode.Kind.Function);
expressionNode.setFunction(ExpressionNode.Function.Replace);
ExpressionNode expressionNodeB = new ExpressionNode(1);
expressionNodeB.setKind(ExpressionNode.Kind.Function);
expressionNodeB.setFunction(ExpressionNode.Function.Empty);
ExpressionNode expressionNodeC = new ExpressionNode(2);
expressionNodeC.setKind(ExpressionNode.Kind.Function);
expressionNodeC.setFunction(ExpressionNode.Function.Empty);
expressionNode.getParameters().add(expressionNodeB);
expressionNode.getParameters().add(expressionNodeC);
List<Base> result = engine.evaluate(appContext, resource, base, expressionNode);
assertEquals(1, result.size());
Base onlyResult = result.get(0);
assertTrue(onlyResult instanceof StringType);
assertEquals("base", ((StringType)result.get(0)).asStringValue());
Mockito.verify(engine, times(2)).convertToString(any());
}
}