1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
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() { // NOPMD - false positive
27      // TODO: Review metaschema-framework/metaschema-java#396 and change accordingly.
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  }