blob: e236ba175db52cb325b94fde944f44381ee88b74 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* 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 tests.api.org.xml.sax.ext;
import junit.framework.TestCase;
import org.xml.sax.Attributes;
import org.xml.sax.ext.Attributes2Impl;
import org.xml.sax.helpers.AttributesImpl;
import dalvik.annotation.KnownFailure;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
@TestTargetClass(Attributes2Impl.class)
public class Attributes2ImplTest extends TestCase {
// Note: The original SAX2 implementation of Attributes2Impl is
// severely broken. Thus all of these tests will probably fail
// unless the Android implementation of the class gets fixed.
private Attributes2Impl empty = new Attributes2Impl();
private Attributes2Impl multi = new Attributes2Impl();
private Attributes2Impl cdata = new Attributes2Impl();
@Override
public void setUp() {
multi.addAttribute("http://some.uri", "foo", "ns1:foo",
"string", "abc");
multi.addAttribute("http://some.uri", "bar", "ns1:bar",
"string", "xyz");
multi.addAttribute("http://some.other.uri", "answer", "ns2:answer",
"int", "42");
multi.addAttribute("http://yet.another.uri", "gabba", "ns3:gabba",
"string", "gabba");
multi.setDeclared(0, false);
multi.setSpecified(0, false);
multi.setDeclared(1, true);
multi.setSpecified(1, false);
multi.setDeclared(2, false);
multi.setSpecified(2, true);
multi.setDeclared(3, true);
multi.setSpecified(3, true);
cdata.addAttribute("http://yet.another.uri", "hey", "ns3:hey",
"CDATA", "hey");
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setAttributes",
args = { Attributes.class }
)
public void testSetAttributes() {
// Ordinary case with Attributes2Impl
Attributes2Impl attrs = new Attributes2Impl();
attrs.addAttribute("", "", "john", "string", "doe");
attrs.setAttributes(empty);
assertEquals(0, attrs.getLength());
attrs.setAttributes(multi);
for (int i = 0; i < multi.getLength(); i++) {
assertEquals(multi.getURI(i), attrs.getURI(i));
assertEquals(multi.getLocalName(i), attrs.getLocalName(i));
assertEquals(multi.getQName(i), attrs.getQName(i));
assertEquals(multi.getType(i), attrs.getType(i));
assertEquals(multi.getValue(i), attrs.getValue(i));
assertEquals(multi.isDeclared(i), attrs.isDeclared(i));
assertEquals(multi.isSpecified(i), attrs.isSpecified(i));
}
attrs.setAttributes(empty);
assertEquals(0, attrs.getLength());
// Ordinary case with AttributesImpl
attrs.setAttributes(new AttributesImpl(multi));
assertEquals(multi.getLength(), attrs.getLength());
for (int i = 0; i < multi.getLength(); i++) {
assertEquals(multi.getURI(i), attrs.getURI(i));
assertEquals(multi.getLocalName(i), attrs.getLocalName(i));
assertEquals(multi.getQName(i), attrs.getQName(i));
assertEquals(multi.getType(i), attrs.getType(i));
assertEquals(multi.getValue(i), attrs.getValue(i));
assertEquals(true, attrs.isDeclared(i));
assertEquals(true, attrs.isSpecified(i));
}
// Special case with CDATA
attrs.setAttributes(new AttributesImpl(cdata));
assertEquals(1, attrs.getLength());
assertEquals(false, attrs.isDeclared(0));
assertEquals(true, attrs.isSpecified(0));
// null case
try {
attrs.setAttributes(null);
fail("NullPointerException expected");
} catch (NullPointerException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "addAttribute",
args = { String.class, String.class, String.class, String.class,
String.class }
)
public void testAddAttribute() {
Attributes2Impl attrs = new Attributes2Impl();
// Ordinary case
attrs.addAttribute("http://yet.another.uri", "doe", "john:doe",
"string", "abc");
assertEquals(1, attrs.getLength());
assertEquals("http://yet.another.uri", attrs.getURI(0));
assertEquals("doe", attrs.getLocalName(0));
assertEquals("john:doe", attrs.getQName(0));
assertEquals("string", attrs.getType(0));
assertEquals("abc", attrs.getValue(0));
assertEquals(true, attrs.isDeclared(0));
assertEquals(true, attrs.isSpecified(0));
// CDATA case
attrs.addAttribute("http://yet.another.uri", "doe", "jane:doe",
"CDATA", "abc");
assertEquals(2, attrs.getLength());
assertEquals("http://yet.another.uri", attrs.getURI(1));
assertEquals("doe", attrs.getLocalName(1));
assertEquals("jane:doe", attrs.getQName(1));
assertEquals("CDATA", attrs.getType(1));
assertEquals("abc", attrs.getValue(1));
assertEquals(false, attrs.isDeclared(1));
assertEquals(true, attrs.isSpecified(1));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "removeAttribute",
args = { int.class }
)
public void testRemoveAttribute() {
Attributes2Impl attrs = new Attributes2Impl(multi);
// Ordinary case
attrs.removeAttribute(1);
assertEquals(3, attrs.getLength());
assertEquals(multi.getURI(0), attrs.getURI(0));
assertEquals(multi.getLocalName(0), attrs.getLocalName(0));
assertEquals(multi.getQName(0), attrs.getQName(0));
assertEquals(multi.getType(0), attrs.getType(0));
assertEquals(multi.getValue(0), attrs.getValue(0));
assertEquals(multi.isDeclared(0), attrs.isDeclared(0));
assertEquals(multi.isSpecified(0), attrs.isSpecified(0));
assertEquals(multi.getURI(2), attrs.getURI(1));
assertEquals(multi.getLocalName(2), attrs.getLocalName(1));
assertEquals(multi.getQName(2), attrs.getQName(1));
assertEquals(multi.getType(2), attrs.getType(1));
assertEquals(multi.getValue(2), attrs.getValue(1));
assertEquals(multi.isDeclared(2), attrs.isDeclared(1));
assertEquals(multi.isSpecified(2), attrs.isSpecified(1));
// Out of range
try {
attrs.removeAttribute(-1);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
try {
attrs.removeAttribute(3);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "Attributes2Impl",
args = { }
)
public void testAttributes2Impl() {
assertEquals(0, empty.getLength());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "Attributes2Impl",
args = { Attributes.class }
)
public void testAttributes2ImplAttributes() {
// Ordinary case with Attributes2Impl
Attributes2Impl attrs = new Attributes2Impl(multi);
assertEquals(multi.getLength(), attrs.getLength());
for (int i = 0; i < multi.getLength(); i++) {
assertEquals(multi.getURI(i), attrs.getURI(i));
assertEquals(multi.getLocalName(i), attrs.getLocalName(i));
assertEquals(multi.getQName(i), attrs.getQName(i));
assertEquals(multi.getType(i), attrs.getType(i));
assertEquals(multi.getValue(i), attrs.getValue(i));
assertEquals(multi.isDeclared(i), attrs.isDeclared(i));
assertEquals(multi.isSpecified(i), attrs.isSpecified(i));
}
attrs = new Attributes2Impl(empty);
assertEquals(0, attrs.getLength());
// Ordinary case with AttributesImpl
attrs = new Attributes2Impl(new AttributesImpl(multi));
assertEquals(multi.getLength(), attrs.getLength());
for (int i = 0; i < multi.getLength(); i++) {
assertEquals(multi.getURI(i), attrs.getURI(i));
assertEquals(multi.getLocalName(i), attrs.getLocalName(i));
assertEquals(multi.getQName(i), attrs.getQName(i));
assertEquals(multi.getType(i), attrs.getType(i));
assertEquals(multi.getValue(i), attrs.getValue(i));
assertEquals(true, attrs.isDeclared(i));
assertEquals(true, attrs.isSpecified(i));
}
// Special case with CDATA
attrs = new Attributes2Impl(new AttributesImpl(cdata));
assertEquals(1, attrs.getLength());
assertEquals(false, attrs.isDeclared(0));
assertEquals(true, attrs.isSpecified(0));
// null case
try {
attrs = new Attributes2Impl(null);
fail("NullPointerException expected");
} catch (NullPointerException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isDeclared",
args = { int.class }
)
public void testIsDeclaredInt() {
// Ordinary cases
assertEquals(false, multi.isDeclared(0));
assertEquals(true, multi.isDeclared(1));
// Out of range
try {
multi.isDeclared(-1);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
try {
multi.isDeclared(4);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isDeclared",
args = { String.class, String.class }
)
public void testIsDeclaredStringString() {
// Ordinary cases
assertEquals(false, multi.isDeclared("http://some.uri", "foo"));
assertEquals(true, multi.isDeclared("http://some.uri", "bar"));
// Not found
try {
assertFalse(multi.isDeclared("not", "found"));
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isDeclared",
args = { String.class }
)
public void testIsDeclaredString() {
// Ordinary cases
assertEquals(false, multi.isDeclared("ns1:foo"));
assertEquals(true, multi.isDeclared("ns1:bar"));
// Not found
try {
assertFalse(multi.isDeclared("notfound"));
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isSpecified",
args = { int.class }
)
public void testIsSpecifiedInt() {
// Ordinary cases
assertEquals(false, multi.isSpecified(1));
assertEquals(true, multi.isSpecified(2));
// Out of range
try {
multi.isSpecified(-1);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
try {
multi.isSpecified(4);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isSpecified",
args = { String.class, String.class }
)
public void testIsSpecifiedStringString() {
// Ordinary cases
assertEquals(false, multi.isSpecified("http://some.uri", "bar"));
assertEquals(true, multi.isSpecified("http://some.other.uri", "answer"));
// Not found
try {
assertFalse(multi.isSpecified("not", "found"));
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isSpecified",
args = { String.class }
)
public void testIsSpecifiedString() {
// Ordinary cases
assertEquals(false, multi.isSpecified("ns1:bar"));
assertEquals(true, multi.isSpecified("ns2:answer"));
// Not found
try {
assertFalse(multi.isSpecified("notfound"));
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setDeclared",
args = { int.class, boolean.class }
)
public void testSetDeclared() {
// Ordinary cases
multi.setSpecified(0, false);
assertEquals(false, multi.isSpecified(0));
multi.setSpecified(0, true);
assertEquals(true, multi.isSpecified(0));
multi.setSpecified(0, false);
assertEquals(false, multi.isSpecified(0));
// Out of range
try {
multi.setSpecified(-1, true);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
try {
multi.setSpecified(5, true);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "setSpecified",
args = { int.class, boolean.class }
)
public void testSetSpecified() {
// Ordinary cases
multi.setSpecified(0, false);
assertEquals(false, multi.isSpecified(0));
multi.setSpecified(0, true);
assertEquals(true, multi.isSpecified(0));
multi.setSpecified(0, false);
assertEquals(false, multi.isSpecified(0));
// Out of range
try {
multi.setSpecified(-1, true);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
try {
multi.setSpecified(5, true);
fail("ArrayIndexOutOfBoundsException expected");
} catch (ArrayIndexOutOfBoundsException e) {
// Expected
}
}
}