| /* |
| * 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()); |
| } |
| |
| } |