1
2
3
4
5
6 package dev.metaschema.core.metapath.function.library;
7
8 import static dev.metaschema.core.metapath.TestUtils.sequence;
9 import static dev.metaschema.core.metapath.TestUtils.string;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11
12 import org.junit.jupiter.params.ParameterizedTest;
13 import org.junit.jupiter.params.provider.Arguments;
14 import org.junit.jupiter.params.provider.MethodSource;
15
16 import java.util.stream.Stream;
17
18 import dev.metaschema.core.metapath.ExpressionTestBase;
19 import dev.metaschema.core.metapath.IMetapathExpression;
20 import dev.metaschema.core.metapath.item.ISequence;
21 import edu.umd.cs.findbugs.annotations.NonNull;
22
23 class FnFunctionLookupTest
24 extends ExpressionTestBase {
25
26 private static Stream<Arguments> provideValues() {
27
28 return Stream.of(
29 Arguments.of(
30 sequence(string("bcd")),
31 "fn:function-lookup(meta:qname('Q{http://csrc.nist.gov/ns/metaschema/metapath-functions}substring'), 2)('abcd', 2)"),
32 Arguments.of(
33 sequence(),
34 "let $f := fn:function-lookup(meta:qname('Q{http://expath.org/ns/zip}binary-entry'), 2) return if (exists($f)) then $f($href, $entry) else ()"));
35
36 }
37
38 @ParameterizedTest
39 @MethodSource("provideValues")
40 void test(@NonNull ISequence<?> expected, @NonNull String metapath) {
41 assertEquals(expected,
42 IMetapathExpression.compile(metapath).evaluate(null, newDynamicContext()));
43 }
44 }