aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java')
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java343
1 files changed, 343 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java
new file mode 100755
index 000000000..091aa378c
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElementTest.java
@@ -0,0 +1,343 @@
+/*
+ * 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.eclipse.adt.internal.editors.layout.gle2;
+
+import com.android.ide.common.api.Rect;
+
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+public class SimpleElementTest extends TestCase {
+
+ private SimpleElement e;
+
+ /**
+ * Helper method to compare arrays' *content* is equal (instead of object identity).
+ * Also produces a suitable output to understand mismatch, if any.
+ * <p/>
+ * Pre-requisite: The arrays' elements must properly implement {@link Object#equals(Object)}
+ * and a sensible {@link Object#toString()}.
+ */
+ private static void assertArrayEquals(Object[] expected, Object[] actual) {
+ if (!Arrays.equals(expected, actual)) {
+ // In case of failure, transform the arguments into strings and let
+ // assertEquals(string) handle it as it can produce a nice diff of the string.
+ String strExpected = expected == null ? "(null)" : Arrays.toString(expected);
+ String strActual = actual == null ? "(null)" : Arrays.toString(actual);
+
+ if (strExpected.equals(strActual)) {
+ fail(String.format("Array not equal:\n Expected[%d]=%s\n Actual[%d]=%s",
+ expected == null ? 0 : expected.length,
+ strExpected,
+ actual == null ? 0 : actual.length,
+ strActual));
+ } else {
+ assertEquals(strExpected, strActual);
+ }
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ e = new SimpleElement("android.view.LinearLayout", // fqcn
+ "android.view.FrameLayout", // parentFqcn
+ new Rect(10, 5, 60, 40), // bounds
+ new Rect(0, 0, 320, 480)); // parentBounds
+ }
+
+ public final void testGetFqcn() {
+ assertEquals("android.view.LinearLayout", e.getFqcn());
+ }
+
+ public final void testGetParentFqcn() {
+ assertEquals("android.view.FrameLayout", e.getParentFqcn());
+ }
+
+ public final void testGetBounds() {
+ assertEquals(new Rect(10, 5, 60, 40), e.getBounds());
+ }
+
+ public final void testGetParentBounds() {
+ assertEquals(new Rect(0, 0, 320, 480), e.getParentBounds());
+ }
+
+ public final void testToString() {
+ assertEquals("{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "}\n",
+ e.toString());
+
+ e.addAttribute(new SimpleAttribute("uri", "name", "value"));
+ e.addAttribute(new SimpleAttribute("my-uri", "second-name", "my = value "));
+
+ assertEquals("{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "@name:uri=value\n" +
+ "@second-name:my-uri=my = value \n" +
+ "}\n",
+ e.toString());
+
+ SimpleElement e2 = new SimpleElement("android.view.Button",
+ "android.view.LinearLayout",
+ new Rect(10, 20, 30, 40),
+ new Rect(0, 0, 320, 480));
+ e2.addAttribute(new SimpleAttribute("uri1", "name1", "value1"));
+ SimpleElement e3 = new SimpleElement("android.view.CheckBox",
+ "android.view.LinearLayout",
+ new Rect(-1, -2, -3, -4), // invalid rect is ignored
+ new Rect(-1, -2, -3, -4)); // invalid rectis ignored
+ e3.addAttribute(new SimpleAttribute("uri2", "name2", "value2"));
+ e3.addAttribute(new SimpleAttribute("uri3", "name3", "value3"));
+ e.addInnerElement(e2);
+ e.addInnerElement(e3);
+
+ assertEquals("{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "@name:uri=value\n" +
+ "@second-name:my-uri=my = value \n" +
+ "{V=3,N=android.view.Button,P=android.view.LinearLayout,R=10 20 30 40,Q=0 0 320 480\n" +
+ "@name1:uri1=value1\n" +
+ "}\n" +
+ "{V=3,N=android.view.CheckBox,P=android.view.LinearLayout\n" +
+ "@name2:uri2=value2\n" +
+ "@name3:uri3=value3\n" +
+ "}\n" +
+ "}\n",
+ e.toString());
+ }
+
+ public final void testParseString() {
+ assertArrayEquals(
+ new SimpleElement[] { new SimpleElement("android.view.LinearLayout",
+ null, null, null) },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout\n" +
+ "}\n"));
+
+ assertArrayEquals(
+ new SimpleElement[] { new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ null, null) },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout\n" +
+ "}\n"));
+
+ assertArrayEquals(
+ new SimpleElement[] { new SimpleElement("android.view.LinearLayout",
+ null,
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)) },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "}\n"));
+
+
+ assertArrayEquals(
+ new SimpleElement[] { e },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "}\n"));
+
+
+ e.addAttribute(new SimpleAttribute("uri", "name", "value"));
+ e.addAttribute(new SimpleAttribute("my-uri", "second-name", "my = value "));
+
+ assertArrayEquals(
+ new SimpleElement[] { e },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "@name:uri=value\n" +
+ "@second-name:my-uri=my = value \n" +
+ "}\n"));
+
+
+ SimpleElement e2 = new SimpleElement("android.view.Button",
+ "android.view.LinearLayout",
+ new Rect(10, 20, 30, 40),
+ new Rect(0, 0, 320, 480));
+ e2.addAttribute(new SimpleAttribute("uri1", "name1", "value1"));
+ SimpleElement e3 = new SimpleElement("android.view.CheckBox",
+ "android.view.LinearLayout",
+ new Rect(-1, -2, -3, -4),
+ new Rect(-1, -2, -3, -4));
+ e3.addAttribute(new SimpleAttribute("uri2", "name2", "value2"));
+ e3.addAttribute(new SimpleAttribute("uri3", "name3", "value3"));
+ e.addInnerElement(e2);
+ e.addInnerElement(e3);
+
+ assertArrayEquals(
+ new SimpleElement[] { e },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "@name:uri=value\n" +
+ "@second-name:my-uri=my = value \n" +
+ "{V=3,N=android.view.Button,P=android.view.LinearLayout,R=10 20 30 40,Q=0 0 320 480\n" +
+ "@name1:uri1=value1\n" +
+ "}\n" +
+ "{V=3,N=android.view.CheckBox,P=android.view.LinearLayout,R=-1 -2 -3 -4,Q=-1 -2 -3 -4\n" +
+ "@name2:uri2=value2\n" +
+ "@name3:uri3=value3\n" +
+ "}\n" +
+ "}\n"));
+
+ // Parse string can also parse an array of elements
+ assertArrayEquals(
+ new SimpleElement[] { e, e2, e3 },
+ SimpleElement.parseString(
+ "{V=3,N=android.view.LinearLayout,P=android.view.FrameLayout,R=10 5 60 40,Q=0 0 320 480\n" +
+ "@name:uri=value\n" +
+ "@second-name:my-uri=my = value \n" +
+ "{V=3,N=android.view.Button,P=android.view.LinearLayout,R=10 20 30 40,Q=0 0 320 480\n" +
+ "@name1:uri1=value1\n" +
+ "}\n" +
+ "{V=3,N=android.view.CheckBox,P=android.view.LinearLayout,R=-1 -2 -3 -4\n" +
+ "@name2:uri2=value2\n" +
+ "@name3:uri3=value3\n" +
+ "}\n" +
+ "}\n" +
+ "{V=3,N=android.view.Button,P=android.view.LinearLayout,R=10 20 30 40,Q=0 0 320 480\n" +
+ "@name1:uri1=value1\n" +
+ "}\n" +
+ "{V=3,N=android.view.CheckBox,P=android.view.LinearLayout,R=-1 -2 -3 -4,Q=-1 -2 -3 -4\n" +
+ "@name2:uri2=value2\n" +
+ "@name3:uri3=value3\n" +
+ "}\n"));
+
+ }
+
+ public final void testAddGetAttribute() {
+ assertNotNull(e.getAttributes());
+ assertArrayEquals(
+ new SimpleAttribute[] {},
+ e.getAttributes());
+
+ e.addAttribute(new SimpleAttribute("uri", "name", "value"));
+ assertArrayEquals(
+ new SimpleAttribute[] { new SimpleAttribute("uri", "name", "value") },
+ e.getAttributes());
+
+ e.addAttribute(new SimpleAttribute("my-uri", "second-name", "value"));
+ assertArrayEquals(
+ new SimpleAttribute[] { new SimpleAttribute("uri", "name", "value"),
+ new SimpleAttribute("my-uri", "second-name", "value") },
+ e.getAttributes());
+
+ assertNull(e.getAttribute("unknown uri", "name"));
+ assertNull(e.getAttribute("uri", "unknown name"));
+ assertEquals(new SimpleAttribute("uri", "name", "value"),
+ e.getAttribute("uri", "name"));
+ assertEquals(new SimpleAttribute("my-uri", "second-name", "value"),
+ e.getAttribute("my-uri", "second-name"));
+ }
+
+ public final void testAddGetInnerElements() {
+ assertNotNull(e.getInnerElements());
+ assertArrayEquals(
+ new SimpleElement[] {},
+ e.getInnerElements());
+
+ e.addInnerElement(new SimpleElement("android.view.Button", null, null, null));
+ assertArrayEquals(
+ new SimpleElement[] { new SimpleElement("android.view.Button", null, null, null) },
+ e.getInnerElements());
+
+ e.addInnerElement(new SimpleElement("android.view.CheckBox", null, null, null));
+ assertArrayEquals(
+ new SimpleElement[] { new SimpleElement("android.view.Button", null, null, null),
+ new SimpleElement("android.view.CheckBox", null, null, null) },
+ e.getInnerElements());
+ }
+
+ public final void testEqualsObject() {
+ assertFalse(e.equals(null));
+ assertFalse(e.equals(new Object()));
+
+ assertNotSame(new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)),
+ e);
+ assertEquals(new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)),
+ e);
+ assertTrue(e.equals(new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480))));
+
+ // not the same FQCN
+ assertFalse(e.equals(new SimpleElement("android.view.Button",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480))));
+
+ // not the same parent
+ assertFalse(e.equals(new SimpleElement("android.view.LinearLayout",
+ "android.view.LinearLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480))));
+
+ // not the same bounds
+ assertFalse(e.equals(new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 25, 30, 40),
+ new Rect(0, 0, 320, 480))));
+
+ // not the same parent bounds
+ assertFalse(e.equals(new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(10, 100, 160, 240))));
+ }
+
+ public final void testHashCode() {
+ int he = e.hashCode();
+
+ assertEquals(he, new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)).hashCode());
+
+
+ // not the same FQCN
+ assertFalse(he == new SimpleElement("android.view.Button",
+ "android.view.FrameLayout",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)).hashCode());
+
+ // not the same parent
+ assertFalse(he == new SimpleElement("android.view.LinearLayout",
+ "android.view.Button",
+ new Rect(10, 5, 60, 40),
+ new Rect(0, 0, 320, 480)).hashCode());
+
+ // not the same bounds
+ assertFalse(he == new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 25, 30, 40),
+ new Rect(0, 0, 320, 480)).hashCode());
+
+ // not the same parent bounds
+ assertFalse(he == new SimpleElement("android.view.LinearLayout",
+ "android.view.FrameLayout",
+ new Rect(10, 25, 30, 40),
+ new Rect(10, 100, 160, 240)).hashCode());
+ }
+
+}