blob: 091aa378c01d807080aefccb7801493317a83db0 [file] [log] [blame]
/*
* 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());
}
}