1
2
3
4
5
6 package gov.nist.secauto.metaschema.core.metapath.cst;
7
8 import static gov.nist.secauto.metaschema.core.metapath.TestUtils.eqname;
9 import static org.junit.jupiter.api.Assertions.assertEquals;
10
11 import gov.nist.secauto.metaschema.core.metapath.DynamicContext;
12 import gov.nist.secauto.metaschema.core.metapath.IMetapathExpression;
13 import gov.nist.secauto.metaschema.core.metapath.IMetapathExpression.ResultType;
14 import gov.nist.secauto.metaschema.core.metapath.StaticContext;
15 import gov.nist.secauto.metaschema.core.metapath.item.node.INodeItem;
16 import gov.nist.secauto.metaschema.core.testing.model.mocking.MockedDocumentGenerator;
17
18 import org.junit.jupiter.api.Test;
19
20
21
22
23
24
25
26 class AnonymousFunctionCallTest {
27 private static final String NS = "http://example.com/ns";
28
29
30
31
32
33
34
35
36
37
38 @Test
39 void test() {
40 StaticContext staticContext = StaticContext.builder()
41 .namespace("ex", NS)
42 .build();
43 DynamicContext dynamicContext = new DynamicContext(staticContext);
44
45 String metapath = "let $function := function($str) as meta:string { fn:concat('extra ',$str) } "
46 + "return $function('cool')";
47
48 assertEquals(
49 "extra cool",
50 IMetapathExpression.compile(metapath, staticContext).evaluateAs(
51 null,
52 IMetapathExpression.ResultType.STRING,
53 dynamicContext));
54 }
55
56 @Test
57 void testMultipleParameters() {
58 StaticContext staticContext = StaticContext.builder()
59 .namespace("ex", NS)
60 .build();
61 DynamicContext dynamicContext = new DynamicContext(staticContext);
62 String metapath = "function ($argument1 as meta:string, $argument2 as meta:string) as meta:string { $argument2 }";
63 dynamicContext.bindVariableValue(eqname(NS, "boom"),
64 IMetapathExpression.compile(metapath, staticContext).evaluate(null, dynamicContext));
65 String result = IMetapathExpression.compile("$ex:boom('a', 'b')", staticContext).evaluateAs(null, ResultType.STRING,
66 dynamicContext);
67 assertEquals(result, "b");
68 }
69
70 @Test
71 void testDifferentReturnTypes() {
72
73 }
74
75 @Test
76 void testErrorCases() {
77
78 }
79
80
81
82
83
84 @Test
85 void testFunctionParameterUsingFlagNodeArgument() {
86 StaticContext staticContext = StaticContext.builder()
87 .namespace("ex", NS)
88 .defaultModelNamespace(NS)
89 .build();
90 INodeItem flag = MockedDocumentGenerator.generateOrphanedFlagNodeItem();
91 DynamicContext dynamicContext = new DynamicContext(staticContext);
92 dynamicContext.bindVariableValue(
93 eqname(NS, "should-dereference-param-flag-value"),
94 IMetapathExpression
95 .compile("function($arg as meta:string) as meta:string { $arg }", dynamicContext.getStaticContext())
96 .evaluate(flag, dynamicContext));
97 String result
98 = IMetapathExpression.compile("$ex:should-dereference-param-flag-value(.)", dynamicContext.getStaticContext())
99 .evaluateAs(flag, ResultType.STRING, dynamicContext);
100 assertEquals(result, "flag");
101 }
102 }