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.bool;
9   import static org.junit.jupiter.api.Assertions.assertEquals;
10  
11  import org.junit.jupiter.params.ParameterizedTest;
12  import org.junit.jupiter.params.provider.Arguments;
13  import org.junit.jupiter.params.provider.MethodSource;
14  
15  import java.util.stream.Stream;
16  
17  import dev.metaschema.core.metapath.ExpressionTestBase;
18  import dev.metaschema.core.metapath.IMetapathExpression;
19  import dev.metaschema.core.metapath.item.atomic.IBooleanItem;
20  import edu.umd.cs.findbugs.annotations.NonNull;
21  
22  class FnDeepEqualTest
23      extends ExpressionTestBase {
24    private static Stream<Arguments> provideValues() { // NOPMD - false positive
25      return Stream.of(
26          // FIXME: add tests for node items
27          Arguments.of(
28              bool(true),
29              "deep-equal(map{1:'a', 2:'b'}, map{2:'b', 1:'a'})"),
30          Arguments.of(
31              bool(true),
32              "deep-equal([1, 2, 3], [1, 2, 3])"),
33          Arguments.of(
34              bool(false),
35              "deep-equal((1, 2, 3), [1, 2, 3])"),
36          Arguments.of(
37              bool(false),
38              "deep-equal(1, current-dateTime())"));
39    }
40  
41    @ParameterizedTest
42    @MethodSource("provideValues")
43    void test(@NonNull IBooleanItem expected, @NonNull String metapath) {
44      assertEquals(expected, IMetapathExpression.compile(metapath)
45          .evaluateAs(null, IMetapathExpression.ResultType.ITEM, newDynamicContext()));
46    }
47  }