blob: 8cb88349f1f528e03abc1aab7b0a8d373a4514d7 [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.helpers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EmptyStackException;
import java.util.Enumeration;
import junit.framework.TestCase;
import org.xml.sax.helpers.NamespaceSupport;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
@TestTargetClass(
value = NamespaceSupport.class,
untestedMethods = {
}
)
public class NamespaceSupportTest extends TestCase {
final static String defaultUri = "http://www.android.com";
final static String marketUri = "http://www.android.com/market";
NamespaceSupport ns;
ArrayList<String> expected;
@Override
public void setUp() {
expected = new ArrayList<String>();
expected.add("ak");
expected.add("bk");
ns = new NamespaceSupport();
ns.pushContext();
ns.declarePrefix("ak", marketUri);
ns.declarePrefix("bk", marketUri);
ns.declarePrefix("", defaultUri);
}
@SuppressWarnings("unchecked")
@TestTargets ({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Checks that a new NamespaceSupport object contains a " +
"default context with two predefined prefixes.",
method = "NamespaceSupport",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "popContext",
args = {}
)
})
public void testConstructor() {
String prefix;
boolean xmlPrefixExists = false;
ns = new NamespaceSupport();
Enumeration<String> prefixes = ns.getDeclaredPrefixes();
while (prefixes.hasMoreElements()) {
prefix = prefixes.nextElement();
if (prefix.equals("xml")) xmlPrefixExists = true;
}
assertTrue("Test 1: xml prefix does not exist.", xmlPrefixExists);
// Check that only one context has been created by the constructor.
try {
ns.popContext();
fail("Test 2: EmptyStackException expected.");
} catch (EmptyStackException e) {
// Expected.
}
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "pushContext",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "popContext",
args = {}
)
})
public void testPush_PopContext() {
int count;
ns = new NamespaceSupport();
count = countPrefixes();
ns.pushContext();
ns.declarePrefix("dc", "http://www.purl.org/dc#");
assertEquals("Test 1: Incorrect prefix count;",
count + 1, countPrefixes());
ns.popContext();
assertEquals("Test 2: Incorrect prefix count;",
count, countPrefixes());
// Check that only one context has been created by pushContext().
try {
ns.popContext();
fail("Test 3: EmptyStackException expected.");
} catch (EmptyStackException e) {
// Expected.
}
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "reset",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "popContext",
args = {}
)
})
public void testReset() {
int count;
ns = new NamespaceSupport();
count = countPrefixes();
ns.pushContext();
ns.declarePrefix("dc", "http://www.purl.org/dc#");
assertEquals("Test 1: Incorrect prefix count;",
count + 1, countPrefixes());
ns.reset();
assertEquals("Test 2: Incorrect prefix count;",
count, countPrefixes());
// Check that only one context has been created by reset().
try {
ns.popContext();
fail("Test 3: EmptyStackException expected.");
} catch (EmptyStackException e) {
// Expected.
}
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "declarePrefix",
args = {String.class, String.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getPrefix",
args = {String.class}
)
})
public void testDeclare_GetPrefix() {
ns.pushContext();
// Part 1: Check that xml and xmlns are not accepted as prefixes.
assertFalse("Test 1: Invalid prefix accepted.",
ns.declarePrefix("xml", marketUri));
assertFalse("Test 2: Invalid prefix accepted.",
ns.declarePrefix("xmlns", marketUri));
// Part 2: Check that declarePrefix and getPrefix work for valid
// prefixes.
assertTrue("Test 3: Valid prefix not accepted.",
ns.declarePrefix("ak", marketUri));
assertTrue("Test 4: Incorrect prefix returned.",
ns.getPrefix(marketUri).equals("ak"));
assertTrue("Test 5: Valid prefix not accepted.",
ns.declarePrefix("bk", marketUri));
assertTrue("Test 6: Incorrect prefix returned.",
expected.contains(ns.getPrefix(marketUri)));
assertTrue("Test 7: Valid prefix not accepted.",
ns.declarePrefix("", defaultUri));
// Part 3: Negative Tests for getPrefix.
assertNull("Test 8: Non-null value returned for the URI that is " +
"assigned to the default namespace.",
ns.getPrefix(defaultUri));
assertNull("Test 9: Non-null value returned for an unassigned URI.",
ns.getPrefix(defaultUri + "/42"));
}
@SuppressWarnings("unchecked")
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getPrefixes",
args = {String.class}
)
public void testGetPrefixesLjava_lang_String() {
ArrayList<String> prefixes;
prefixes = Collections.list(ns.getPrefixes(marketUri));
assertTrue("Test 1: Incorrect set of prefixes returned.",
expected.containsAll(prefixes) && prefixes.containsAll(expected));
prefixes = Collections.list(ns.getPrefixes(defaultUri));
assertTrue("Test 2: Default namespace prefix should not be returned.",
prefixes.size() == 0);
prefixes = Collections.list(ns.getPrefixes(NamespaceSupport.XMLNS));
assertTrue("Test 3: xml prefix is missing.",
prefixes.contains("xml") && prefixes.size() == 1);
prefixes = Collections.list(ns.getPrefixes(defaultUri + "/42"));
assertTrue("Test 4: Non-empty enumeration returned for an unassigned URI.",
prefixes.size() == 0);
}
@SuppressWarnings("unchecked")
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getPrefixes",
args = {}
)
public void testGetPrefixes() {
ArrayList<String> prefixes;
expected.add("xml");
prefixes = Collections.list(ns.getPrefixes());
assertTrue("Test 1: Incorrect set of prefixes returned.",
expected.containsAll(prefixes) && prefixes.containsAll(expected));
}
@SuppressWarnings("unchecked")
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getDeclaredPrefixes",
args = {}
)
public void testGetDeclaredPrefixes() {
ArrayList<String> prefixes;
expected.add("");
prefixes = Collections.list(ns.getDeclaredPrefixes());
assertTrue("Test 1: Incorrect set of prefixes returned.",
expected.containsAll(prefixes) && prefixes.containsAll(expected));
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "getURI",
args = {String.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "popContext",
args = {}
)
})
public void testGetUri() {
assertEquals("Test 1: Incorrect URI returned;",
marketUri, ns.getURI("bk"));
assertEquals("Test 2: Incorrect URI returned;",
defaultUri, ns.getURI(""));
assertNull("Test 3: Null expected for not-existing prefix.",
ns.getURI("ck"));
ns.popContext();
assertNull("Test 4: Null expected for not-existing prefix.",
ns.getURI("bk"));
assertEquals("Test 5: Incorrect URI returned;",
NamespaceSupport.XMLNS, ns.getURI("xml"));
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "setNamespaceDeclUris",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "isNamespaceDeclUris",
args = {}
)
})
public void testNamespaceDeclUris() {
assertFalse("Test 1: Incorrect default value returned by isNamespaceDeclUris().",
ns.isNamespaceDeclUris());
try {
ns.setNamespaceDeclUris(true);
fail("Test 2: IllegalStateException expected since a context has already been pushed in setUp().");
} catch (IllegalStateException e) {
// Expected.
}
ns = new NamespaceSupport();
ns.setNamespaceDeclUris(true);
assertTrue("Test 3: Incorrect value returned by isNamespaceDeclUris().",
ns.isNamespaceDeclUris());
ns.setNamespaceDeclUris(false);
assertFalse("Test 4: Incorrect value returned by isNamespaceDeclUris().",
ns.isNamespaceDeclUris());
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "processName",
args = {String.class, String[].class, boolean.class}
)
public void testProcessName_Element() {
String[] parts = new String[3];
assertNotNull("Test 1: Non-null value expected.",
ns.processName("ak:hello", parts, false));
assertEquals("Test 2: Incorrect namespace URI;", marketUri, parts[0]);
assertEquals("Test 3: Incorrect local name;", "hello", parts[1]);
assertEquals("Test 4: Incorrect raw name;", "ak:hello", parts[2]);
assertNotNull("Test 5: Non-null value expected.",
ns.processName("bk:", parts, false));
assertEquals("Test 6: Incorrect namespace URI;", marketUri, parts[0]);
assertEquals("Test 7: Incorrect local name;", "", parts[1]);
assertEquals("Test 8: Incorrect raw name;", "bk:", parts[2]);
assertNotNull("Test 9: Non-null value expected.",
ns.processName("world", parts, false));
assertEquals("Test 10: Incorrect namespace URI;", defaultUri, parts[0]);
assertEquals("Test 11: Incorrect local name;", "world", parts[1]);
assertEquals("Test 12: Incorrect raw name;", "world", parts[2]);
assertNull("Test 13: Null expected for undeclared prefix.",
ns.processName("ck:lorem", parts, false));
assertNull("Test 14: Null expected for xmlns prefix.",
ns.processName("xmlns:ipsum", parts, false));
ns = new NamespaceSupport();
ns.pushContext();
assertNotNull("Test 15: Non-null value expected.",
ns.processName("world", parts, false));
assertEquals("Test 16: Incorrect namespace URI;", "", parts[0]);
assertEquals("Test 17: Incorrect local name;", "world", parts[1]);
assertEquals("Test 18: Incorrect raw name;", "world", parts[2]);
}
@TestTargets ({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "setNamespaceDeclUris",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "processName",
args = {String.class, String[].class, boolean.class}
)
})
public void testProcessName_Attribute() {
String[] parts = new String[3];
assertNotNull("Test 1: Non-null value expected.",
ns.processName("ak:hello", parts, true));
assertEquals("Test 2: Incorrect namespace URI;", marketUri, parts[0]);
assertEquals("Test 3: Incorrect local name;", "hello", parts[1]);
assertEquals("Test 4: Incorrect raw name;", "ak:hello", parts[2]);
assertNotNull("Test 5: Non-null value expected.",
ns.processName("bk:", parts, true));
assertEquals("Test 6: Incorrect namespace URI;", marketUri, parts[0]);
assertEquals("Test 7: Incorrect local name;", "", parts[1]);
assertEquals("Test 8: Incorrect raw name;", "bk:", parts[2]);
assertNotNull("Test 9: Non-null value expected.",
ns.processName("world", parts, true));
assertEquals("Test 10: Incorrect namespace URI;", "", parts[0]);
assertEquals("Test 11: Incorrect local name;", "world", parts[1]);
assertEquals("Test 12: Incorrect raw name;", "world", parts[2]);
assertNull("Test 13: Null expected for undeclared prefix.",
ns.processName("ck:lorem", parts, true));
assertNull("Test 14: Null expected for xmlns prefix.",
ns.processName("xmlns:ipsum", parts, true));
ns = new NamespaceSupport();
ns.setNamespaceDeclUris(true);
ns.pushContext();
assertNotNull("Test 15: Non-null value expected.",
ns.processName("xmlns", parts, true));
assertEquals("Test 16: Incorrect namespace URI;", NamespaceSupport.NSDECL, parts[0]);
assertEquals("Test 17: Incorrect local name;", "xmlns", parts[1]);
assertEquals("Test 18: Incorrect raw name;", "xmlns", parts[2]);
}
@SuppressWarnings("unchecked")
private int countPrefixes()
{
ArrayList<String> prefixes = Collections.list(ns.getPrefixes());
return prefixes.size();
}
}