blob: 109e823ee30629b5a002b5c3b4829a1f5210fbe8 [file] [log] [blame]
/* 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.TokenType;
import org.apache.xmlbeans.XmlObject;
import org.junit.Test;
import xmlcursor.common.BasicCursorTestCase;
import javax.xml.namespace.QName;
import static org.junit.Assert.*;
public class ToChildTest extends BasicCursorTestCase {
private String sDoc="<foo>early<bar>text</bar><char>zap<dar>wap</dar><ear>yap</ear></char></foo>";
private int nChildCount=2; //num children if TEXT is a child
/**
* Testing toChild(String)
* Cases:
* non-existing name
* 2 children with same name
* nested child with same name
* Child of TEXT
*/
@Test
public void testToChildNonExisting() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
assertFalse(m_xc.toChild("yana"));
}
@Test(expected = IllegalArgumentException.class)
public void testToChildInvalidName() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toChild("");
}
@Test(expected = IllegalArgumentException.class)
public void testToChildNull() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toChild((String)null);
}
@Test
public void testNameCollision() throws Exception {
sDoc = "<foo><bar>txt0</bar><bar>txt1</bar></foo>";
String sExpectedValue = "<bar>txt0</bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
@Test
public void testSameNameDescendant() throws Exception {
sDoc = "<foo><bar><bar>txt0<bar/></bar></bar><bar>txt1</bar></foo>";
String sExpectedValue = "<bar><bar>txt0<bar/></bar></bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
@Test
public void testTextChild() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
toNextTokenOfType(m_xc, TokenType.TEXT);
assertFalse(m_xc.toChild("bar"));
}
/**
* toChild(String,String)
* Cases:
* non-existing ns, existing name
* non-existing name, existing ns
* 2 children with same name
* 2 children with same name, diff ns
* 2 children with diff name, same ns
* nested child with same name & ns
*/
@Test
public void testNullNS() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
String sExpectedResult = "<bar>text</bar>";
assertTrue(m_xc.toChild(null, "bar"));
assertEquals(sExpectedResult, m_xc.xmlText());
}
@Test(expected = IllegalArgumentException.class)
public void testNullName() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
m_xc.toChild("uri:foo.org", null);
}
@Test
public void testNamespaceOKNameInvalid() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild("fo", "test"));
}
@Test
public void testNamespaceInvalidNameOK() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild("bar", "bar"));
}
@Test
public void testNormalCase() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>";
String sExpectedResult = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedResult, m_xc.xmlText());
}
@Test
public void testUriNameCollision() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><fo:bar>txt1</fo:bar></foo>";
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
//same URI diff names
@Test
public void testFakeNameCollision() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>";
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
//diff URI same names
@Test
public void testFakeNameCollision3() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bar>txt0</fo:bar><bar>txt1</bar></foo>";
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt0</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
@Test
public void testSameNameDescendant1() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><bar><fo:bar>txt0<bar/></fo:bar></bar><bar>txt1</bar></foo>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild("uri:foo.org", "bar"));
}
@Test
public void testSameNameDescendant2() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><bar><fo:bar>txt0<bar/></fo:bar></bar><bar>txt1</bar><fo:bar>txt1</fo:bar></foo>";
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild("uri:foo.org", "bar"));
assertEquals(sExpectedValue, m_xc.xmlText());
}
/**
* toChild(int)
* Cases:
* i<0
* i>numChildren
* i=0, numChildren=0
*/
@Test
public void testNegativeIndex() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
assertFalse(m_xc.toChild(-1));
}
@Test
public void testIndexOKFirst() throws Exception {
String sExpectedValue = "<bar>text</bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild(0));//text is not children
assertEquals(sExpectedValue, m_xc.xmlText());
}
@Test
public void testIndexOKLast() throws Exception {
String sExpectedValue = "<char>zap<dar>wap</dar><ear>yap</ear></char>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
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
public void testLargeIndex() throws Exception {
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild(20));
}
@Test
public void testInd0Count0() throws Exception {
sDoc = "<foo/>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild(0));
}
/**
* toChild(QName,int)
* Cases:
* QName dne,
* QName OK, i OK;i >numChildren;i<0
* Name collision, i=1;i>numChildren
* Siblings and a child with same qname, ask for 2nd sibling
*/
@Test
public void testToChildQNameDNE0() throws Exception {
QName searchVal = new QName("fake:uri", "bar");
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild(searchVal, 1));
}
@Test
public void testToChildQNameDNE1() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>";
QName searchVal = new QName("uri:foo.org", "bar", "pre");
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertFalse(m_xc.toChild(searchVal, 1));
}
@Test
public void testToChildQNameOKIndexOK() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>";
QName searchVal = new QName("uri:foo.org", "bar", "fo");
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
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
public void testQNameNameCollision() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\"><fo:bars>txt0</fo:bars><fo:bar>txt1</fo:bar></foo>";
nChildCount = 2;
QName searchVal = new QName("uri:foo.org", "bar", "fo");
String sExpectedValue = "<fo:bar xmlns:fo=\"uri:foo.org\">txt1</fo:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
assertTrue(m_xc.toChild(searchVal, 0));
assertEquals(sExpectedValue, m_xc.xmlText());
int nInvalidCount = 2;
if (nInvalidCount >= nChildCount)
assertFalse(m_xc.toChild(searchVal, nInvalidCount));
else fail("Broken Test");
}
@Test
public void testFakeQNameCollision() throws Exception {
sDoc = "<foo xmlns:fo=\"uri:foo.org\" xmlns:fo2=\"uri:foo.org\"><fo2:bar>txt0</fo2:bar><fo:bar>txt1</fo:bar></foo>";
String sExpectedValue = "<fo2:bar xmlns:fo=\"uri:foo.org\" xmlns:fo2=\"uri:foo.org\">txt0</fo2:bar>";
m_xc = XmlObject.Factory.parse(sDoc).newCursor();
m_xc.toFirstChild();
QName searchVal = new QName("uri:foo.org", "bar", "fo");
assertTrue(m_xc.toChild(searchVal, 0));
assertEquals(sExpectedValue, m_xc.xmlText());
}
}