19896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet/* 29896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Copyright (C) 2010 The Android Open Source Project 39896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 49896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 59896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * you may not use this file except in compliance with the License. 69896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * You may obtain a copy of the License at 79896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 89896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * http://www.eclipse.org/org/documents/epl-v10.php 99896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 109896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Unless required by applicable law or agreed to in writing, software 119896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 129896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * See the License for the specific language governing permissions and 149896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * limitations under the License. 159896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 169896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 179896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohetpackage com.android.ide.eclipse.adt.internal.editors.layout; 189896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1981cefe2a26dd6db8a878e30874d12cdcbff0e83bXavier Ducrohetimport com.android.SdkConstants; 209896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohetimport com.android.ide.eclipse.adt.internal.editors.mock.MockXmlNode; 219896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 229896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohetimport org.w3c.dom.Node; 239896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 241f78628aea2386dc02c4522f06702e4168b1a966Xavier Ducrohetimport java.util.HashSet; 259896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 269896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohetimport junit.framework.TestCase; 279896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 289896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohetpublic class ExplodeRenderingHelperTest extends TestCase { 299896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 301f78628aea2386dc02c4522f06702e4168b1a966Xavier Ducrohet private final HashSet<String> mLayoutNames = new HashSet<String>(); 319896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 329896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet @Override 339896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet protected void setUp() throws Exception { 349896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet super.setUp(); 359896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 369896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet mLayoutNames.add("LinearLayout"); 379896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet mLayoutNames.add("RelativeLayout"); 389896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 399896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 409896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void testSingleHorizontalLinearLayout() { 419896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // Single layout, horizontal, 2 buttons. 429896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createLinearLayout(true /*horizontal*/, 439896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()} ); 449896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 459896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 469896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(1, helper.getHeightPadding()); 479896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(1, helper.getWidthPadding()); 489896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 499896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 509896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void testSingleVerticalLinearLayout() { 519896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // Single layout, horizontal, with 2 buttons. 529896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // LinearLayout(H:[Button Button]) 539896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createLinearLayout(false /*horizontal*/, 549896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()} ); 559896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 569896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 579896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(1, helper.getWidthPadding()); 589896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(1, helper.getHeightPadding()); 599896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 609896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 619896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void testEmbeddedLinearLayouts() { 629896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet /* 639896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(vertical): 649896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 659896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button Button]) 669896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 679896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Result should be 2 in x, 3 in y 689896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 699896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createLinearLayout(false /*horizontal*/, 709896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { 719896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet createLinearLayout(true /*horizontal*/, 729896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()}), 739896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet createLinearLayout(true /*horizontal*/, 749896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton(), createButton()}), 759896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } ); 769896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 779896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 789896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(2, helper.getWidthPadding()); 799896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(3, helper.getHeightPadding()); 809896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 819896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 829896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void testSimpleRelativeLayoutWithOneLinearLayouts() { 839896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet /* 849896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * RelativeLayout: 859896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 869896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 879896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Result should be 2 in x, 2 in y 889896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 899896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createRelativeLayout( 909896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { 919896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet createLinearLayout(true /*horizontal*/, 929896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()}), 939896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } ); 949896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 959896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 969896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(2, helper.getWidthPadding()); 979896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(2, helper.getHeightPadding()); 989896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 999896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1009896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void /*test*/RelativeLayoutWithVerticalLinearLayouts() { 1019896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet //FIXME: Reenable once the relative layout are properly supported. 1029896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet /* 1039896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Children of the relative layouts, one below the other. 1049896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Each with only buttons in them. 1059896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * RelativeLayout: 1069896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 1079896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * ^ 1089896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 1099896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 1109896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Result should be 2 in x, 3 in y 1119896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 1129896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1139896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // create the linearlayouts. 1149896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear1 = createLinearLayout(true /*horizontal*/, 1159896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()}); 1169896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1"); 1179896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1189896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear2 = createLinearLayout(true /*horizontal*/, 1199896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton()}); 1209896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2"); 1219896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1229896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // position linear2 below linear1 1239896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear2.addAttributes(SdkConstants.NS_RESOURCES, "layout_below", "@+id/linear1"); 1249896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1259896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1269896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createRelativeLayout(new MockXmlNode[] { linear1, linear2 } ); 1279896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1289896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 1299896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(2, helper.getWidthPadding()); 1309896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(3, helper.getHeightPadding()); 1319896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 1329896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1339896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void /*test*/RelativeLayoutWithVerticalLinearLayouts2() { 1349896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet //FIXME: Reenable once the relative layout are properly supported. 1359896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet /* 1369896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Children of the relative layouts, one above the other. 1379896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Each with only buttons in them. 1389896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * RelativeLayout: 1399896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 1409896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * v 1419896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * LinearLayout(H:[Button Button]) 1429896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 1439896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Result should be 2 in x, 3 in y 1449896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 1459896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1469896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // create the linearlayouts. 1479896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear1 = createLinearLayout(true /*horizontal*/, 1489896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton() } ); 1499896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1"); 1509896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1519896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear2 = createLinearLayout(true /*horizontal*/, 1529896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton(), createButton() } ); 1539896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2"); 1549896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1559896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // position linear2 below linear1 1569896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear2.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/linear1"); 1579896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1589896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1599896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createRelativeLayout(new MockXmlNode[] { linear1, linear2 } ); 1609896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1619896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 1629896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(2, helper.getWidthPadding()); 1639896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(3, helper.getHeightPadding()); 1649896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 1659896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1669896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet public void /*test*/ComplexRelativeLayout() { 1679896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet //FIXME: Reenable once the relative layout are properly supported. 1689896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet /* 1699896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * RelativeLayout: 1709896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 1719896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * < LinearLayout1(V: [button]) > LinearLayout2(V: [button]) 1729896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * v 1739896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Button1 > LinearLayout3(V: [button]) < Button2 1749896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * v 1759896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * < LinearLayout4(V: [button]) 1769896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * ^ 1779896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * <LinearLayout5(V: [button]) 1789896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * 1799896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet * Result should be 4 in x, 5 in y 1809896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet */ 1819896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1829896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // create the elements 1839896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode button1 = createButton(); 1849896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet button1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/button1"); 1859896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1869896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode button2 = createButton(); 1879896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet button2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/button2"); 1889896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1899896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear1 = createLinearLayout(true /*horizontal*/, 1909896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton() } ); 1919896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear1"); 1929896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1939896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear2 = createLinearLayout(true /*horizontal*/, 1949896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton() } ); 1959896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear2.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear2"); 1969896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 1979896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear3 = createLinearLayout(true /*horizontal*/, 1989896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton() } ); 1999896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear3.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear3"); 2009896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2019896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear4 = createLinearLayout(true /*horizontal*/, 2029896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton() } ); 2039896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear4.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear4"); 2049896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2059896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode linear5 = createLinearLayout(true /*horizontal*/, 2069896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { createButton() } ); 2079896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear5.addAttributes(SdkConstants.NS_RESOURCES, "id", "@+id/linear5"); 2089896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2099896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2109896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // link them 2119896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet button1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toLeftOf", "@+id/linear3"); 2129896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2139896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet button2.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear3"); 2149896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2159896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear3"); 2169896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_toLeftOf", "@+id/linear2"); 2179896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear1.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/button2"); 2189896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2199896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear3.addAttributes(SdkConstants.NS_RESOURCES, "layout_above", "@+id/linear4"); 2209896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2219896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear4.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/button1"); 2229896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2239896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear5.addAttributes(SdkConstants.NS_RESOURCES, "layout_toRightOf", "@+id/linear4"); 2249896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet linear5.addAttributes(SdkConstants.NS_RESOURCES, "layout_below", "@+id/linear4"); 2259896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2269896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = createRelativeLayout( 2279896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet new MockXmlNode[] { 2289896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet button1, button2, linear1, linear2, linear3, linear4, linear5 } ); 2299896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2309896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet ExplodedRenderingHelper helper = new ExplodedRenderingHelper(layout, mLayoutNames); 2319896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(4, helper.getWidthPadding()); 2329896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet assertEquals(5, helper.getHeightPadding()); 2339896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 2349896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2359896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2369896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet // ----- helper to deal with mocks 2379896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2389896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet private MockXmlNode createButton() { 2399896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet return new MockXmlNode(null, "Button", Node.ELEMENT_NODE, null); 2409896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 2419896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2429896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet private MockXmlNode createLinearLayout(boolean horizontal, MockXmlNode[] children) { 2439896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = new MockXmlNode(null, "LinearLayout", Node.ELEMENT_NODE, children); 2449896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2459896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet layout.addAttributes(SdkConstants.NS_RESOURCES, "orientation", 2469896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet horizontal ? "horizontal" : "vertical"); 2479896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2489896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet return layout; 2499896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 2509896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2519896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet private MockXmlNode createRelativeLayout(MockXmlNode[] children) { 2529896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet MockXmlNode layout = new MockXmlNode(null, "RelativeLayout", Node.ELEMENT_NODE, children); 2539896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet 2549896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet return layout; 2559896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet } 2569896debadf106c8d8ad0e626fbadd71f96fb338dXavier Ducrohet} 257