aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/ExplodeRenderingHelperTest.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/ExplodeRenderingHelperTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/ExplodeRenderingHelperTest.java256
1 files changed, 256 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/ExplodeRenderingHelperTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/ExplodeRenderingHelperTest.java
new file mode 100644
index 000000000..0e528674a
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/layout/ExplodeRenderingHelperTest.java
@@ -0,0 +1,256 @@
+/*
+ * 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;
+
+import com.android.SdkConstants;
+import com.android.ide.eclipse.adt.internal.editors.mock.MockXmlNode;
+
+import org.w3c.dom.Node;
+
+import java.util.HashSet;
+
+import junit.framework.TestCase;
+
+public class ExplodeRenderingHelperTest extends TestCase {
+
+ private final HashSet<String> mLayoutNames = new HashSet<String>();
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mLayoutNames.add("LinearLayout");
+ mLayoutNames.add("RelativeLayout");
+ }
+
+ public void testSingleHorizontalLinearLayout() {
+ // Single layout, horizontal, 2 buttons.
+ MockXmlNode layout = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()} );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(1, helper.getHeightPadding());
+ assertEquals(1, helper.getWidthPadding());
+ }
+
+ public void testSingleVerticalLinearLayout() {
+ // Single layout, horizontal, with 2 buttons.
+ // LinearLayout(H:[Button Button])
+ MockXmlNode layout = createLinearLayout(false /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()} );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(1, helper.getWidthPadding());
+ assertEquals(1, helper.getHeightPadding());
+ }
+
+ public void testEmbeddedLinearLayouts() {
+ /*
+ * LinearLayout(vertical):
+ * LinearLayout(H:[Button Button])
+ * LinearLayout(H:[Button Button Button])
+ *
+ * Result should be 2 in x, 3 in y
+ */
+ MockXmlNode layout = createLinearLayout(false /*horizontal*/,
+ new MockXmlNode[] {
+ createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()}),
+ createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton(), createButton()}),
+ } );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(2, helper.getWidthPadding());
+ assertEquals(3, helper.getHeightPadding());
+ }
+
+ public void testSimpleRelativeLayoutWithOneLinearLayouts() {
+ /*
+ * RelativeLayout:
+ * LinearLayout(H:[Button Button])
+ *
+ * Result should be 2 in x, 2 in y
+ */
+ MockXmlNode layout = createRelativeLayout(
+ new MockXmlNode[] {
+ createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()}),
+ } );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(2, helper.getWidthPadding());
+ assertEquals(2, helper.getHeightPadding());
+ }
+
+ public void /*test*/RelativeLayoutWithVerticalLinearLayouts() {
+ //FIXME: Reenable once the relative layout are properly supported.
+ /*
+ * Children of the relative layouts, one below the other.
+ * Each with only buttons in them.
+ * RelativeLayout:
+ * LinearLayout(H:[Button Button])
+ * ^
+ * LinearLayout(H:[Button Button])
+ *
+ * Result should be 2 in x, 3 in y
+ */
+
+ // create the linearlayouts.
+ MockXmlNode linear1 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()});
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1");
+
+ MockXmlNode linear2 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton()});
+ linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2");
+
+ // position linear2 below linear1
+ linear2.addAttributes(SdkConstants.NS_RESOURCES, "layout_below", "@+id/linear1");
+
+
+ MockXmlNode layout = createRelativeLayout(new MockXmlNode[] { linear1, linear2 } );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(2, helper.getWidthPadding());
+ assertEquals(3, helper.getHeightPadding());
+ }
+
+ public void /*test*/RelativeLayoutWithVerticalLinearLayouts2() {
+ //FIXME: Reenable once the relative layout are properly supported.
+ /*
+ * Children of the relative layouts, one above the other.
+ * Each with only buttons in them.
+ * RelativeLayout:
+ * LinearLayout(H:[Button Button])
+ * v
+ * LinearLayout(H:[Button Button])
+ *
+ * Result should be 2 in x, 3 in y
+ */
+
+ // create the linearlayouts.
+ MockXmlNode linear1 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton() } );
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1");
+
+ MockXmlNode linear2 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton(), createButton() } );
+ linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2");
+
+ // position linear2 below linear1
+ linear2.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/linear1");
+
+
+ MockXmlNode layout = createRelativeLayout(new MockXmlNode[] { linear1, linear2 } );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(2, helper.getWidthPadding());
+ assertEquals(3, helper.getHeightPadding());
+ }
+
+ public void /*test*/ComplexRelativeLayout() {
+ //FIXME: Reenable once the relative layout are properly supported.
+ /*
+ * RelativeLayout:
+ *
+ * < LinearLayout1(V: [button]) > LinearLayout2(V: [button])
+ * v
+ * Button1 > LinearLayout3(V: [button]) < Button2
+ * v
+ * < LinearLayout4(V: [button])
+ * ^
+ * <LinearLayout5(V: [button])
+ *
+ * Result should be 4 in x, 5 in y
+ */
+
+ // create the elements
+ MockXmlNode button1 = createButton();
+ button1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/button1");
+
+ MockXmlNode button2 = createButton();
+ button2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/button2");
+
+ MockXmlNode linear1 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton() } );
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1");
+
+ MockXmlNode linear2 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton() } );
+ linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2");
+
+ MockXmlNode linear3 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton() } );
+ linear3.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear3");
+
+ MockXmlNode linear4 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton() } );
+ linear4.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear4");
+
+ MockXmlNode linear5 = createLinearLayout(true /*horizontal*/,
+ new MockXmlNode[] { createButton() } );
+ linear5.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear5");
+
+
+ // link them
+ button1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toLeftOf", "@+id/linear3");
+
+ button2.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear3");
+
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear3");
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toLeftOf", "@+id/linear2");
+ linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/button2");
+
+ linear3.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/linear4");
+
+ linear4.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/button1");
+
+ linear5.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear4");
+ linear5.addAttributes(SdkConstants.NS_RESOURCES, "layout_below", "@+id/linear4");
+
+ MockXmlNode layout = createRelativeLayout(
+ new MockXmlNode[] {
+ button1, button2, linear1, linear2, linear3, linear4, linear5 } );
+
+ ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames);
+ assertEquals(4, helper.getWidthPadding());
+ assertEquals(5, helper.getHeightPadding());
+ }
+
+
+ // ----- helper to deal with mocks
+
+ private MockXmlNode createButton() {
+ return new MockXmlNode(null, "Button", Node.ELEMENT_NODE, null);
+ }
+
+ private MockXmlNode createLinearLayout(boolean horizontal, MockXmlNode[] children) {
+ MockXmlNode layout = new MockXmlNode(null, "LinearLayout", Node.ELEMENT_NODE, children);
+
+ layout.addAttributes(SdkConstants.NS_RESOURCES, "orientation",
+ horizontal ? "horizontal" : "vertical");
+
+ return layout;
+ }
+
+ private MockXmlNode createRelativeLayout(MockXmlNode[] children) {
+ MockXmlNode layout = new MockXmlNode(null, "RelativeLayout", Node.ELEMENT_NODE, children);
+
+ return layout;
+ }
+}