aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java245
1 files changed, 245 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java
new file mode 100644
index 000000000..d176fe7d1
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseLayoutRuleTest.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2010 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.common.layout;
+
+import static com.android.SdkConstants.ANDROID_URI;
+import static com.android.SdkConstants.ATTR_ID;
+
+import com.android.ide.common.api.IDragElement;
+import com.android.ide.common.api.INode;
+import com.android.ide.common.api.Rect;
+import com.android.ide.common.layout.BaseLayoutRule.AttributeFilter;
+import com.android.utils.Pair;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+// TODO: Check assertions
+// TODO: Check equals() but not == strings by using new String("") to prevent interning
+// TODO: Rename BaseLayout to BaseLayoutRule, and tests too of course
+
+public class BaseLayoutRuleTest extends LayoutTestBase {
+
+ /** Provides test data used by other test cases */
+ private IDragElement[] createSampleElements() {
+ IDragElement[] elements = TestDragElement.create(TestDragElement.create(
+ "android.widget.Button", new Rect(0, 0, 100, 80)).id("@+id/Button01"),
+ TestDragElement.create("android.widget.LinearLayout", new Rect(0, 80, 100, 280))
+ .id("@+id/LinearLayout01").add(
+ TestDragElement.create("android.widget.Button",
+ new Rect(0, 80, 100, 80)).id("@+id/Button011"),
+ TestDragElement.create("android.widget.Button",
+ new Rect(0, 180, 100, 80)).id("@+id/Button012")),
+ TestDragElement.create("android.widget.Button", new Rect(100, 0, 100, 80)).id(
+ "@+id/Button02"));
+ return elements;
+ }
+
+ /** Test {@link BaseLayoutRule#collectIds}: Check that basic lookup of id works */
+ public final void testCollectIds1() {
+ IDragElement[] elements = TestDragElement.create(TestDragElement.create(
+ "android.widget.Button", new Rect(0, 0, 100, 80)).id("@+id/Button01"));
+ Map<String, Pair<String, String>> idMap = new HashMap<String, Pair<String, String>>();
+ Map<String, Pair<String, String>> ids = new BaseLayoutRule().collectIds(idMap, elements);
+ assertEquals(1, ids.size());
+ assertEquals("@+id/Button01", ids.keySet().iterator().next());
+ }
+
+ /**
+ * Test {@link BaseLayoutRule#collectIds}: Check that with the wrong URI we
+ * don't pick up the ID
+ */
+ public final void testCollectIds2() {
+ IDragElement[] elements = TestDragElement.create(TestDragElement.create(
+ "android.widget.Button", new Rect(0, 0, 100, 80)).set("myuri", ATTR_ID,
+ "@+id/Button01"));
+
+ Map<String, Pair<String, String>> idMap = new HashMap<String, Pair<String, String>>();
+ Map<String, Pair<String, String>> ids = new BaseLayoutRule().collectIds(idMap, elements);
+ assertEquals(0, ids.size());
+ }
+
+ /**
+ * Test {@link BaseLayoutRule#normalizeId(String)}
+ */
+ public final void testNormalizeId() {
+ assertEquals("foo", new BaseLayoutRule().normalizeId("foo"));
+ assertEquals("@+id/name", new BaseLayoutRule().normalizeId("@id/name"));
+ assertEquals("@+id/name", new BaseLayoutRule().normalizeId("@+id/name"));
+ }
+
+ /**
+ * Test {@link BaseLayoutRule#collectExistingIds}
+ */
+ public final void testCollectExistingIds1() {
+ Set<String> existing = new HashSet<String>();
+ INode node = TestNode.create("android.widget.Button").id("@+id/Button012").add(
+ TestNode.create("android.widget.Button").id("@+id/Button2"));
+
+ new BaseLayoutRule().collectExistingIds(node, existing);
+
+ assertEquals(2, existing.size());
+ assertContainsSame(Arrays.asList("@+id/Button2", "@+id/Button012"), existing);
+ }
+
+ /**
+ * Test {@link BaseLayoutRule#collectIds}: Check that with multiple elements and
+ * some children we still pick up all the right id's
+ */
+ public final void testCollectIds3() {
+ Map<String, Pair<String, String>> idMap = new HashMap<String, Pair<String, String>>();
+
+ IDragElement[] elements = createSampleElements();
+ Map<String, Pair<String, String>> ids = new BaseLayoutRule().collectIds(idMap, elements);
+ assertEquals(5, ids.size());
+ assertContainsSame(Arrays.asList("@+id/Button01", "@+id/Button02", "@+id/Button011",
+ "@+id/Button012", "@+id/LinearLayout01"), ids.keySet());
+
+ // Make sure the Pair has the right stuff too;
+ // (having the id again in the pair seems redundant; see if I really
+ // need it in the implementation)
+ assertEquals(Pair.of("@+id/LinearLayout01", "android.widget.LinearLayout"), ids
+ .get("@+id/LinearLayout01"));
+ }
+
+ /**
+ * Test {@link BaseLayoutRule#remapIds}: Ensure that it identifies a conflict
+ */
+ public final void testRemapIds1() {
+ Map<String, Pair<String, String>> idMap = new HashMap<String, Pair<String, String>>();
+ BaseLayoutRule baseLayout = new BaseLayoutRule();
+ IDragElement[] elements = createSampleElements();
+ baseLayout.collectIds(idMap, elements);
+ INode node = TestNode.create("android.widget.Button").id("@+id/Button012").add(
+ TestNode.create("android.widget.Button").id("@+id/Button2"));
+
+ assertEquals(5, idMap.size());
+ Map<String, Pair<String, String>> remapped = baseLayout.remapIds(node, idMap);
+ // 4 original from the sample elements, plus overlap with one
+ // (Button012) - one new
+ // button added in
+ assertEquals(6, remapped.size());
+
+ // TODO: I'm a little confused about what exactly this method should do;
+ // check with Raphael.
+ }
+
+
+ /**
+ * Test {@link BaseLayoutRule#getDropIdMap}
+ */
+ public final void testGetDropIdMap() {
+ BaseLayoutRule baseLayout = new BaseLayoutRule();
+ IDragElement[] elements = createSampleElements();
+ INode node = TestNode.create("android.widget.Button").id("@+id/Button012").add(
+ TestNode.create("android.widget.Button").id("@+id/Button2"));
+
+ Map<String, Pair<String, String>> idMap = baseLayout.getDropIdMap(node, elements, true);
+ assertContainsSame(Arrays.asList("@+id/Button01", "@+id/Button012", "@+id/Button011",
+ "@id/Button012", "@+id/Button02", "@+id/LinearLayout01"), idMap
+ .keySet());
+
+ // TODO: I'm a little confused about what exactly this method should do;
+ // check with Raphael.
+ }
+
+ public final void testAddAttributes1() {
+ BaseLayoutRule layout = new BaseLayoutRule();
+
+ // First try with no filter
+ IDragElement oldElement = TestDragElement.create("a.w.B").id("@+id/foo");
+ INode newNode = TestNode.create("a.w.B").id("@+id/foo").set("u", "key", "value").set("u",
+ "nothidden", "nothiddenvalue");
+ ;
+ AttributeFilter filter = null;
+ // No references in this test case
+ Map<String, Pair<String, String>> idMap = null;
+
+ layout.addAttributes(newNode, oldElement, idMap, filter);
+ assertEquals("value", newNode.getStringAttr("u", "key"));
+ assertEquals("nothiddenvalue", newNode.getStringAttr("u", "nothidden"));
+ }
+
+ public final void testAddAttributes2() {
+ // Test filtering
+ BaseLayoutRule layout = new BaseLayoutRule();
+
+ // First try with no filter
+ IDragElement oldElement = TestDragElement.create("a.w.B").id("@+id/foo");
+ INode newNode = TestNode.create("a.w.B").id("@+id/foo").set("u", "key", "value").set("u",
+ "hidden", "hiddenvalue");
+ AttributeFilter filter = new AttributeFilter() {
+
+ @Override
+ public String replace(String attributeUri, String attributeName,
+ String attributeValue) {
+ if (attributeName.equals("hidden")) {
+ return null;
+ }
+
+ return attributeValue;
+ }
+ };
+ // No references in this test case
+ Map<String, Pair<String, String>> idMap = null;
+
+ layout.addAttributes(newNode, oldElement, idMap, filter);
+ assertEquals("value", newNode.getStringAttr("u", "key"));
+ }
+
+ public final void testFindNewId() {
+ BaseLayoutRule baseLayout = new BaseLayoutRule();
+ Set<String> existing = new HashSet<String>();
+ assertEquals("@+id/Widget01", baseLayout.findNewId("a.w.Widget", existing));
+
+ existing.add("@+id/Widget01");
+ assertEquals("@+id/Widget02", baseLayout.findNewId("a.w.Widget", existing));
+
+ existing.add("@+id/Widget02");
+ assertEquals("@+id/Widget03", baseLayout.findNewId("a.w.Widget", existing));
+
+ existing.remove("@+id/Widget02");
+ assertEquals("@+id/Widget02", baseLayout.findNewId("a.w.Widget", existing));
+ }
+
+ public final void testDefaultAttributeFilter() {
+ assertEquals("true", BaseLayoutRule.DEFAULT_ATTR_FILTER.replace("myuri", "layout_alignRight",
+ "true"));
+ assertEquals(null, BaseLayoutRule.DEFAULT_ATTR_FILTER.replace(ANDROID_URI,
+ "layout_alignRight", "true"));
+ assertEquals("true", BaseLayoutRule.DEFAULT_ATTR_FILTER.replace(ANDROID_URI,
+ "myproperty", "true"));
+ }
+
+ public final void testAddInnerElements() {
+ IDragElement oldElement = TestDragElement.create("root").add(
+ TestDragElement.create("a.w.B").id("@+id/child1")
+ .set("uri", "childprop1", "value1"),
+ TestDragElement.create("a.w.B").id("@+id/child2").set("uri", "childprop2a",
+ "value2a").set("uri", "childprop2b", "value2b"));
+ INode newNode = TestNode.create("a.w.B").id("@+id/foo");
+ Map<String, Pair<String, String>> idMap = new HashMap<String, Pair<String, String>>();
+ BaseLayoutRule layout = new BaseLayoutRule();
+ layout.addInnerElements(newNode, oldElement, idMap);
+ assertEquals(2, newNode.getChildren().length);
+
+ assertEquals("value2b", newNode.getChildren()[1].getStringAttr("uri", "childprop2b"));
+ }
+}