View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2012-2025 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.jcabi.xml;
6   
7   import java.util.ArrayList;
8   import java.util.Iterator;
9   import java.util.List;
10  import javax.xml.XMLConstants;
11  import javax.xml.namespace.NamespaceContext;
12  import org.hamcrest.MatcherAssert;
13  import org.hamcrest.Matchers;
14  import org.junit.jupiter.api.Test;
15  
16  /**
17   * Test case for {@link XPathContext}.
18   * @since 0.1
19   */
20  @SuppressWarnings("PMD.JUnitAssertionsShouldIncludeMessage")
21  final class XPathContextTest {
22  
23      @Test
24      void findsNamespaceByPrefix() {
25          final String prefix = "ns1-foo";
26          final String namespace = "hey-it-is-a-namespace";
27          final NamespaceContext ctx = new XPathContext()
28              .add(prefix, namespace)
29              .add("ns-something-else", "boom");
30          MatcherAssert.assertThat(
31              ctx.getNamespaceURI(prefix),
32              Matchers.equalTo(namespace)
33          );
34      }
35  
36      @Test
37      void findsPrefixByNamespace() {
38          final String prefix = "ns2-foo";
39          final String namespace = "hey-it-is-a-new-namespace";
40          final NamespaceContext ctx = new XPathContext()
41              .add(prefix, namespace)
42              .add("other-prefix", "boom-boom");
43          MatcherAssert.assertThat(
44              ctx.getPrefix(namespace),
45              Matchers.equalTo(prefix)
46          );
47      }
48  
49      @Test
50      void findsPrefixesByNamespace() {
51          final String namespace = "simple-short-namespace";
52          final NamespaceContext ctx = new XPathContext(namespace, namespace);
53          final List<String> prefixes = new ArrayList<>(0);
54          final Iterator<?> iter = ctx.getPrefixes(namespace);
55          while (iter.hasNext()) {
56              prefixes.add((String) iter.next());
57          }
58          MatcherAssert.assertThat(
59              prefixes,
60              Matchers.allOf(
61                  Matchers.iterableWithSize(2),
62                  Matchers.hasItem("ns1"),
63                  Matchers.hasItem("ns2")
64              )
65          );
66      }
67  
68      @Test
69      void findsDefaultNamespaces() {
70          final NamespaceContext ctx = new XPathContext();
71          MatcherAssert.assertThat(
72              ctx.getNamespaceURI("xhtml"),
73              Matchers.equalTo("http://www.w3.org/1999/xhtml")
74          );
75          MatcherAssert.assertThat(
76              ctx.getNamespaceURI("xsl"),
77              Matchers.equalTo("http://www.w3.org/1999/XSL/Transform")
78          );
79          MatcherAssert.assertThat(
80              ctx.getNamespaceURI("xsi"),
81              Matchers.equalTo("http://www.w3.org/2001/XMLSchema-instance")
82          );
83          MatcherAssert.assertThat(
84              ctx.getNamespaceURI("xs"),
85              Matchers.equalTo("http://www.w3.org/2001/XMLSchema")
86          );
87          MatcherAssert.assertThat(
88              ctx.getNamespaceURI(XMLConstants.XML_NS_PREFIX),
89              Matchers.equalTo(XMLConstants.XML_NS_URI)
90          );
91          MatcherAssert.assertThat(
92              ctx.getNamespaceURI(XMLConstants.XMLNS_ATTRIBUTE),
93              Matchers.equalTo(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)
94          );
95      }
96  
97      @Test
98      void findsNonBoundNamespaces() {
99          final NamespaceContext ctx = new XPathContext();
100         MatcherAssert.assertThat(
101             ctx.getNamespaceURI("some-other-unbound-prefix"),
102             Matchers.equalTo(XMLConstants.NULL_NS_URI)
103         );
104     }
105 
106 }