aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java284
1 files changed, 284 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java
new file mode 100644
index 000000000..d19f933d0
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/manifest/model/UiElementNodeTest.java
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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 com.android.ide.eclipse.adt.internal.editors.manifest.model;
+
+import com.android.SdkConstants;
+import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
+import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor.Mandatory;
+import com.android.ide.eclipse.adt.internal.editors.mock.MockXmlNode;
+import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
+import com.android.utils.XmlUtils;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import java.util.Iterator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import junit.framework.TestCase;
+
+@SuppressWarnings("javadoc")
+public class UiElementNodeTest extends TestCase {
+
+ private UiElementNode ui;
+ private ElementDescriptor mManifestDesc;
+ private ElementDescriptor mAppDesc;
+ private ElementDescriptor mUsesSdkDesc;
+
+ @Override
+ protected void setUp() throws Exception {
+ mAppDesc = new ElementDescriptor("application", new ElementDescriptor[] {
+ new ElementDescriptor("provider"),
+ new ElementDescriptor("activity", new ElementDescriptor[] {
+ new ElementDescriptor("intent-filter")
+ }),
+ }, Mandatory.MANDATORY_LAST);
+
+ mUsesSdkDesc = new ElementDescriptor("uses-sdk", new ElementDescriptor[] {},
+ Mandatory.MANDATORY);
+
+ mManifestDesc = new ElementDescriptor("manifest", new ElementDescriptor[] {
+ mAppDesc,
+ mUsesSdkDesc,
+ new ElementDescriptor("permission")
+ }, Mandatory.MANDATORY);
+
+ ui = new UiElementNode(mManifestDesc);
+
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ // pass
+ }
+
+ /**
+ * Check initialization values for ui node
+ */
+ public void testInit() {
+ assertSame(mManifestDesc, ui.getDescriptor());
+ assertNull(ui.getUiParent());
+ assertEquals(0, ui.getUiChildren().size());
+ assertEquals(0, ui.getAllUiAttributes().size());
+ }
+
+ /**
+ * We declared the descriptors as having a "mandatory last" application element
+ * and a mandatory non-last uses-sdk element. This means if we create an empty
+ * UiModel, we should get these two created, with the application element after
+ * the uses-sdk.
+ */
+ public void testMandatoryOrder() {
+ // Add the mandatory nodes with no XML backing, do it explicitly in the wrong order.
+ assertEquals(0, ui.getUiChildren().size());
+ ui.appendNewUiChild(mAppDesc);
+ ui.appendNewUiChild(mUsesSdkDesc);
+
+ assertEquals(2, ui.getUiChildren().size());
+ assertSame(mAppDesc, ui.getUiChildren().get(0).getDescriptor());
+ assertSame(mUsesSdkDesc, ui.getUiChildren().get(1).getDescriptor());
+
+ // Parse an XML with just a manifest.
+ MockXmlNode root = new MockXmlNode(null /* namespace */, "manifest", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "application", Node.ELEMENT_NODE, null)
+ });
+
+ ui.loadFromXmlNode(root);
+
+ // We should get 2 children, the 2 mandatory nodes but this time with uses-sdk
+ // before application since it's a mandatory-last so it "moves" to the end if possible.
+ assertEquals(2, ui.getUiChildren().size());
+ assertSame(mUsesSdkDesc, ui.getUiChildren().get(0).getDescriptor());
+ assertNull(ui.getUiChildren().get(0).getXmlNode());
+ assertSame(mAppDesc, ui.getUiChildren().get(1).getDescriptor());
+ assertNotNull(ui.getUiChildren().get(1).getXmlNode());
+ }
+
+ /**
+ * loadFrom() does nothing if the root node doesn't match what's expected
+ */
+ public void testLoadFrom_InvalidRoot() {
+ assertEquals(0, ui.getUiChildren().size());
+ MockXmlNode root = new MockXmlNode(null /* namespace */, "blah", Node.ELEMENT_NODE, null);
+ ui.loadFromXmlNode(root);
+ assertEquals(0, ui.getUiChildren().size());
+ }
+
+ /**
+ * UiElementNode.loadFrom should be used to populate an empty ui node from an
+ * existing XML node tree.
+ */
+ public void testLoadFrom_NewTree_1_Node() {
+ MockXmlNode root = new MockXmlNode(null /* namespace */, "manifest", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "application", Node.ELEMENT_NODE, null)
+ });
+
+ // get /manifest
+ ui.loadFromXmlNode(root);
+ assertEquals("manifest", ui.getDescriptor().getXmlName());
+ assertEquals(1, ui.getUiChildren().size());
+ assertEquals(0, ui.getAllUiAttributes().size());
+
+ // get /manifest/application
+ Iterator<UiElementNode> ui_child_it = ui.getUiChildren().iterator();
+ UiElementNode application = ui_child_it.next();
+ assertEquals("application", application.getDescriptor().getXmlName());
+ assertEquals(0, application.getUiChildren().size());
+ assertEquals(0, application.getAllUiAttributes().size());
+ }
+
+
+ public void testLoadFrom_NewTree_2_Nodes() {
+ MockXmlNode root = new MockXmlNode(null /* namespace */, "manifest", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "application", Node.ELEMENT_NODE, null),
+ new MockXmlNode(null /* namespace */, "permission", Node.ELEMENT_NODE, null),
+ });
+
+ // get /manifest
+ ui.loadFromXmlNode(root);
+ assertEquals("manifest", ui.getDescriptor().getXmlName());
+ assertEquals(2, ui.getUiChildren().size());
+ assertEquals(0, ui.getAllUiAttributes().size());
+
+ // get /manifest/application
+ Iterator<UiElementNode> ui_child_it = ui.getUiChildren().iterator();
+ UiElementNode application = ui_child_it.next();
+ assertEquals("application", application.getDescriptor().getXmlName());
+ assertEquals(0, application.getUiChildren().size());
+ assertEquals(0, application.getAllUiAttributes().size());
+ assertEquals(0, application.getUiSiblingIndex());
+
+ // get /manifest/permission
+ UiElementNode first_permission = ui_child_it.next();
+ assertEquals("permission", first_permission.getDescriptor().getXmlName());
+ assertEquals(0, first_permission.getUiChildren().size());
+ assertEquals(0, first_permission.getAllUiAttributes().size());
+ assertEquals(1, first_permission.getUiSiblingIndex());
+ }
+
+ public void testLoadFrom_NewTree_N_Nodes() {
+ MockXmlNode root = new MockXmlNode(null /* namespace */, "manifest", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "application", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "activity", Node.ELEMENT_NODE,
+ null),
+ new MockXmlNode(null /* namespace */, "activity", Node.ELEMENT_NODE,
+ new MockXmlNode[] {
+ new MockXmlNode(null /* namespace */, "intent-filter",
+ Node.ELEMENT_NODE, null),
+ }),
+ new MockXmlNode(null /* namespace */, "provider", Node.ELEMENT_NODE,
+ null),
+ new MockXmlNode(null /* namespace */, "provider", Node.ELEMENT_NODE,
+ null),
+ }),
+ new MockXmlNode(null /* namespace */, "permission", Node.ELEMENT_NODE,
+ null),
+ new MockXmlNode(null /* namespace */, "permission", Node.ELEMENT_NODE,
+ null),
+ });
+
+ // get /manifest
+ ui.loadFromXmlNode(root);
+ assertEquals("manifest", ui.getDescriptor().getXmlName());
+ assertEquals(3, ui.getUiChildren().size());
+ assertEquals(0, ui.getAllUiAttributes().size());
+
+ // get /manifest/application
+ Iterator<UiElementNode> ui_child_it = ui.getUiChildren().iterator();
+ UiElementNode application = ui_child_it.next();
+ assertEquals("application", application.getDescriptor().getXmlName());
+ assertEquals(4, application.getUiChildren().size());
+ assertEquals(0, application.getAllUiAttributes().size());
+
+ // get /manifest/application/activity #1
+ Iterator<UiElementNode> app_child_it = application.getUiChildren().iterator();
+ UiElementNode first_activity = app_child_it.next();
+ assertEquals("activity", first_activity.getDescriptor().getXmlName());
+ assertEquals(0, first_activity.getUiChildren().size());
+ assertEquals(0, first_activity.getAllUiAttributes().size());
+
+ // get /manifest/application/activity #2
+ UiElementNode second_activity = app_child_it.next();
+ assertEquals("activity", second_activity.getDescriptor().getXmlName());
+ assertEquals(1, second_activity.getUiChildren().size());
+ assertEquals(0, second_activity.getAllUiAttributes().size());
+
+ // get /manifest/application/activity #2/intent-filter #1
+ Iterator<UiElementNode> activity_child_it = second_activity.getUiChildren().iterator();
+ UiElementNode intent_filter = activity_child_it.next();
+ assertEquals("intent-filter", intent_filter.getDescriptor().getXmlName());
+ assertEquals(0, intent_filter.getUiChildren().size());
+ assertEquals(0, intent_filter.getAllUiAttributes().size());
+
+ // get /manifest/application/provider #1
+ UiElementNode first_provider = app_child_it.next();
+ assertEquals("provider", first_provider.getDescriptor().getXmlName());
+ assertEquals(0, first_provider.getUiChildren().size());
+ assertEquals(0, first_provider.getAllUiAttributes().size());
+
+ // get /manifest/application/provider #2
+ UiElementNode second_provider = app_child_it.next();
+ assertEquals("provider", second_provider.getDescriptor().getXmlName());
+ assertEquals(0, second_provider.getUiChildren().size());
+ assertEquals(0, second_provider.getAllUiAttributes().size());
+
+ // get /manifest/permission #1
+ UiElementNode first_permission = ui_child_it.next();
+ assertEquals("permission", first_permission.getDescriptor().getXmlName());
+ assertEquals(0, first_permission.getUiChildren().size());
+ assertEquals(0, first_permission.getAllUiAttributes().size());
+
+ // get /manifest/permission #1
+ UiElementNode second_permission = ui_child_it.next();
+ assertEquals("permission", second_permission.getDescriptor().getXmlName());
+ assertEquals(0, second_permission.getUiChildren().size());
+ assertEquals(0, second_permission.getAllUiAttributes().size());
+ }
+
+ public void testCreateNameSpace() throws Exception {
+ // Setup
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(false);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.newDocument();
+ Element rootElement = document.createElement("root");
+ document.appendChild(rootElement);
+ Element root = document.getDocumentElement();
+ root.appendChild(document.createTextNode(" "));
+ Element foo = document.createElement("foo");
+ root.appendChild(foo);
+ root.appendChild(document.createTextNode(" "));
+ Element bar = document.createElement("bar");
+ root.appendChild(bar);
+ Element baz = document.createElement("baz");
+ root.appendChild(baz);
+
+ String prefix = XmlUtils.lookupNamespacePrefix(baz, SdkConstants.ANDROID_URI);
+ assertEquals("android", prefix);
+ }
+}