blob: 13aa549bf86672cc232d7074da50df38e56dea04 [file]
/* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package xmlcursor.detailed;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlCursor.TokenType;
import org.junit.jupiter.api.Test;
import javax.xml.namespace.QName;
import static org.junit.jupiter.api.Assertions.*;
import static xmlcursor.common.BasicCursorTestCase.cur;
import static xmlcursor.common.BasicCursorTestCase.toNextTokenOfType;
public class ToChildTest {
private static final String XML ="<foo>early<bar>text</bar><char>zap<dar>wap</dar><ear>yap</ear></char></foo>";
@Test
void testToChildNonExisting() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
assertFalse(m_xc.toChild("yana"));
}
}
@Test
void testToChildInvalidName() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
assertThrows(IllegalArgumentException.class, () -> m_xc.toChild(""));
}
}
@Test
void testToChildNull() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
assertThrows(IllegalArgumentException.class, () -> m_xc.toChild((String)null));
}
}
@Test
void testNameCollision() throws Exception {
String sExpectedValue = "<bar>txt0</bar>";
try (XmlCursor m_xc = cur("<foo><bar>txt0</bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testSameNameDescendant() throws Exception {
String sExpectedValue = "<bar><bar>txt0<bar/></bar></bar>";
try (XmlCursor m_xc = cur("<foo><bar><bar>txt0<bar/></bar></bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testTextChild() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
toNextTokenOfType(m_xc, TokenType.TEXT);
assertFalse(m_xc.toChild("bar"));
}
}
@Test
void testNullNS() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
String sExpectedResult = "<bar>text</bar>";
assertTrue(m_xc.toChild(null, "bar"));
assertEquals(sExpectedResult, m_xc.xmlText());
}
}
@Test
void testNullName() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
assertThrows(IllegalArgumentException.class, () -> m_xc.toChild("uri:foo.org", null));
}
}
@Test
void testNamespaceOKNameInvalid() throws Exception {
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild("fo", "test"));
}
}
@Test
void testNamespaceInvalidNameOK() throws Exception {
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild("bar", "bar"));
}
}
@Test
void testNormalCase() throws Exception {
String sExpectedResult = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedResult, m_xc.xmlText());
}
}
@Test
void testUriNameCollision() throws Exception {
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
//same URI diff names
@Test
void testFakeNameCollision() throws Exception {
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
//diff URI same names
@Test
void testFakeNameCollision3() throws Exception {
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testSameNameDescendant1() throws Exception {
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><bar><fo:bar>txt0<bar/></fo:bar></bar><bar>txt1</bar></foo>")) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild("uri:foo.org", "bar"));
}
}
@Test
void testSameNameDescendant2() throws Exception {
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><bar><fo:bar>txt0<bar/></fo:bar></bar><bar>txt1</bar><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testNegativeIndex() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
assertFalse(m_xc.toChild(-1));
}
}
@Test
void testIndexOKFirst() throws Exception {
String sExpectedValue = "<bar>text</bar>";
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild(0));//text is not children
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testIndexOKLast() throws Exception {
String sExpectedValue = "<char>zap<dar>wap</dar><ear>yap</ear></char>";
int nChildCount = 2;
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild(nChildCount - 1));
assertEquals(sExpectedValue, m_xc.xmlText());
m_xc.toParent();
m_xc.toLastChild();
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
@Test
void testLargeIndex() throws Exception {
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild(20));
}
}
@Test
void testInd0Count0() throws Exception {
try (XmlCursor m_xc = cur("<foo/>")) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild(0));
}
}
@Test
void testToChildQNameDNE0() throws Exception {
QName searchVal = new QName("fake:uri", "bar");
try (XmlCursor m_xc = cur(XML)) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild(searchVal, 1));
}
}
@Test
void testToChildQNameDNE1() throws Exception {
QName searchVal = new QName("uri:foo.org", "bar", "pre");
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertFalse(m_xc.toChild(searchVal, 1));
}
}
@Test
void testToChildQNameOKIndexOK() throws Exception {
QName searchVal = new QName("uri:foo.org", "bar", "fo");
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild(searchVal, 0));
assertEquals(sExpectedValue, m_xc.xmlText());
assertFalse(m_xc.toChild(searchVal, 1));
assertFalse(m_xc.toChild(searchVal, -1));
}
}
@Test
void testQNameNameCollision() throws Exception {
int nInvalidCount = 2;
QName searchVal = new QName("uri:foo.org", "bar", "fo");
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
assertTrue(m_xc.toChild(searchVal, 0));
assertEquals(sExpectedValue, m_xc.xmlText());
assertFalse(m_xc.toChild(searchVal, nInvalidCount));
}
}
@Test
void testFakeQNameCollision() throws Exception {
String sExpectedValue = "<fo2:bar xmlns:fo=\"uri:foo.org\" xmlns:fo2=\"uri:foo.org\">txt0</fo2:bar>";
try (XmlCursor m_xc = cur("<foo xmlns:fo=\"uri:foo.org\" xmlns:fo2=\"uri:foo.org\"><fo2:bar>txt0</fo2:bar><fo:bar>txt1</fo:bar></foo>")) {
m_xc.toFirstChild();
QName searchVal = new QName("uri:foo.org", "bar", "fo");
assertTrue(m_xc.toChild(searchVal, 0));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}
}