diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common')
5 files changed, 168 insertions, 38 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseViewRuleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseViewRuleTest.java index d19e9bd..6d46b1e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseViewRuleTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/BaseViewRuleTest.java @@ -22,15 +22,15 @@ import java.util.Collections; import junit.framework.TestCase; public class BaseViewRuleTest extends TestCase { - public final void testPrettyName() { - assertEquals(null, BaseViewRule.prettyName(null)); - assertEquals("", BaseViewRule.prettyName("")); - assertEquals("Foo", BaseViewRule.prettyName("foo")); - assertEquals("Foo bar", BaseViewRule.prettyName("foo_bar")); - // TODO: We should check this to capitalize each initial word - // assertEquals("Foo Bar", BaseView.prettyName("foo_bar")); - // TODO: We should also handle camelcase properties - // assertEquals("Foo Bar", BaseView.prettyName("fooBar")); + + public final void testGetAttributeDisplayName() { + assertEquals(null, BaseViewRule.getAttributeDisplayName(null)); + assertEquals("", BaseViewRule.getAttributeDisplayName("")); + assertEquals("Foo", BaseViewRule.getAttributeDisplayName("foo")); + assertEquals("FooBar", BaseViewRule.getAttributeDisplayName("fooBar")); + assertEquals("Foo Bar", BaseViewRule.getAttributeDisplayName("foo_bar")); + // TBD: Should we also handle CamelCase properties? + // assertEquals("Foo Bar", BaseViewRule.getAttributeDisplayName("fooBar")); } public final void testJoin() { diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java index 3fee553..c325a40 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java @@ -26,8 +26,10 @@ import com.android.ide.common.api.INode; import com.android.ide.common.api.IValidator; import com.android.ide.common.api.IViewMetadata; import com.android.ide.common.api.IViewRule; +import com.android.ide.common.api.Margins; import com.android.ide.common.api.Point; import com.android.ide.common.api.Rect; +import com.android.ide.eclipse.adt.internal.editors.layout.gre.ViewMetadataRepository; import java.util.ArrayList; import java.util.Collection; @@ -211,9 +213,25 @@ public class LayoutTestBase extends TestCase { return mFqn; } - public IViewMetadata getMetadata(String fqcn) { - fail("Not supported in tests yet"); - return null; + public IViewMetadata getMetadata(final String fqcn) { + return new IViewMetadata() { + public String getDisplayName() { + // This also works when there is no "." + return fqcn.substring(fqcn.lastIndexOf('.') + 1); + } + + public FillPreference getFillPreference() { + return ViewMetadataRepository.get().getFillPreference(fqcn); + } + + public Margins getInsets() { + return null; + } + + public List<String> getTopAttributes() { + return ViewMetadataRepository.get().getTopAttributes(fqcn); + } + }; } public int getMinApiLevel() { diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java index 145be61..4a0fc6e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java @@ -25,15 +25,18 @@ import static com.android.ide.common.layout.LayoutConstants.VALUE_HORIZONTAL; import static com.android.ide.common.layout.LayoutConstants.VALUE_VERTICAL; import com.android.ide.common.api.DropFeedback; +import com.android.ide.common.api.IAttributeInfo.Format; import com.android.ide.common.api.IDragElement; import com.android.ide.common.api.IMenuCallback; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; -import com.android.ide.common.api.RuleAction; import com.android.ide.common.api.Point; import com.android.ide.common.api.Rect; +import com.android.ide.common.api.RuleAction; +import com.android.ide.common.api.RuleAction.NestedAction; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -130,30 +133,29 @@ public class LinearLayoutRuleTest extends LayoutTestBase { rule.addContextMenuActions(contextMenu, node); assertEquals(6, contextMenu.size()); assertEquals("Edit ID...", contextMenu.get(0).getTitle()); - assertEquals("Layout Width", contextMenu.get(1).getTitle()); - assertEquals("Layout Height", contextMenu.get(2).getTitle()); - assertTrue(contextMenu.get(3) instanceof RuleAction.Separator); - assertEquals("Properties", contextMenu.get(4).getTitle()); - assertEquals("Orientation", contextMenu.get(5).getTitle()); + assertTrue(contextMenu.get(1) instanceof RuleAction.Separator); + assertEquals("Layout Width", contextMenu.get(2).getTitle()); + assertEquals("Layout Height", contextMenu.get(3).getTitle()); + assertTrue(contextMenu.get(4) instanceof RuleAction.Separator); + assertEquals("Other Properties", contextMenu.get(5).getTitle()); - RuleAction propertiesMenu = contextMenu.get(4); + RuleAction propertiesMenu = contextMenu.get(5); assertTrue(propertiesMenu.getClass().getName(), - propertiesMenu instanceof RuleAction.NestedAction); - // TODO: Test Properties-list + propertiesMenu instanceof NestedAction); } public void testContextMenuCustom() { LinearLayoutRule rule = new LinearLayoutRule(); initialize(rule, "android.widget.LinearLayout"); - INode node = TestNode.create("android.widget.Button").id("@+id/Button012") + INode node = TestNode.create("android.widget.LinearLayout").id("@+id/LinearLayout") .set(ANDROID_URI, ATTR_LAYOUT_WIDTH, "42dip") .set(ANDROID_URI, ATTR_LAYOUT_HEIGHT, "50sp"); List<RuleAction> contextMenu = new ArrayList<RuleAction>(); rule.addContextMenuActions(contextMenu, node); assertEquals(6, contextMenu.size()); - assertEquals("Layout Width", contextMenu.get(1).getTitle()); - RuleAction menuAction = contextMenu.get(1); + assertEquals("Layout Width", contextMenu.get(2).getTitle()); + RuleAction menuAction = contextMenu.get(2); assertTrue(menuAction instanceof RuleAction.Choices); RuleAction.Choices choices = (RuleAction.Choices) menuAction; List<String> titles = choices.getTitles(); @@ -171,14 +173,18 @@ public class LinearLayoutRuleTest extends LayoutTestBase { public void testOrientation() { LinearLayoutRule rule = new LinearLayoutRule(); initialize(rule, "android.widget.LinearLayout"); - INode node = TestNode.create("android.widget.Button").id("@+id/Button012"); + TestNode node = TestNode.create("android.widget.LinearLayout").id("@+id/LinearLayout012"); + node.putAttributeInfo(ANDROID_URI, "orientation", + new TestAttributeInfo(ATTR_ORIENTATION, new Format[] { Format.ENUM }, + "android.widget.LinearLayout", + new String[] {"horizontal", "vertical"}, null, null)); assertNull(node.getStringAttr(ANDROID_URI, ATTR_ORIENTATION)); List<RuleAction> contextMenu = new ArrayList<RuleAction>(); rule.addContextMenuActions(contextMenu, node); - assertEquals(6, contextMenu.size()); - RuleAction orientationAction = contextMenu.get(5); + assertEquals(7, contextMenu.size()); + RuleAction orientationAction = contextMenu.get(1); assertEquals("Orientation", orientationAction.getTitle()); assertTrue(orientationAction.getClass().getName(), @@ -197,6 +203,84 @@ public class LinearLayoutRuleTest extends LayoutTestBase { assertEquals(VALUE_HORIZONTAL, orientation); } + // Check that the context menu manipulates the orientation attribute + public void testProperties() { + LinearLayoutRule rule = new LinearLayoutRule(); + initialize(rule, "android.widget.LinearLayout"); + TestNode node = TestNode.create("android.widget.LinearLayout").id("@+id/LinearLayout012"); + node.putAttributeInfo(ANDROID_URI, "orientation", + new TestAttributeInfo(ATTR_ORIENTATION, new Format[] { Format.ENUM }, + "android.widget.LinearLayout", + new String[] {"horizontal", "vertical"}, null, null)); + node.setAttributeSources(Arrays.asList("android.widget.LinearLayout", + "android.view.ViewGroup", "android.view.View")); + node.putAttributeInfo(ANDROID_URI, "gravity", + new TestAttributeInfo("gravity", new Format[] { Format.INTEGER }, + "android.widget.LinearLayout", null, null, null)); + + + assertNull(node.getStringAttr(ANDROID_URI, ATTR_ORIENTATION)); + + List<RuleAction> contextMenu = new ArrayList<RuleAction>(); + rule.addContextMenuActions(contextMenu, node); + assertEquals(8, contextMenu.size()); + + assertEquals("Orientation", contextMenu.get(1).getTitle()); + assertEquals("Edit Gravity...", contextMenu.get(2).getTitle()); + + assertEquals("Other Properties", contextMenu.get(7).getTitle()); + + RuleAction propertiesMenu = contextMenu.get(7); + assertTrue(propertiesMenu.getClass().getName(), + propertiesMenu instanceof NestedAction); + NestedAction nested = (NestedAction) propertiesMenu; + List<RuleAction> nestedActions = nested.getNestedActions(node); + assertEquals(9, nestedActions.size()); + assertEquals("Recent", nestedActions.get(0).getTitle()); + assertTrue(nestedActions.get(1) instanceof RuleAction.Separator); + assertEquals("Defined by LinearLayout", nestedActions.get(2).getTitle()); + assertEquals("Inherited from ViewGroup", nestedActions.get(3).getTitle()); + assertEquals("Inherited from View", nestedActions.get(4).getTitle()); + assertTrue(nestedActions.get(5) instanceof RuleAction.Separator); + assertEquals("Layout Parameters", nestedActions.get(6).getTitle()); + assertTrue(nestedActions.get(7) instanceof RuleAction.Separator); + assertEquals("All By Name", nestedActions.get(8).getTitle()); + + BaseViewRule.editedProperty(ATTR_ORIENTATION); + + RuleAction recentAction = nestedActions.get(0); + assertTrue(recentAction instanceof NestedAction); + NestedAction recentChoices = (NestedAction) recentAction; + List<RuleAction> recentItems = recentChoices.getNestedActions(node); + + assertEquals(1, recentItems.size()); + assertEquals("Orientation", recentItems.get(0).getTitle()); + + BaseViewRule.editedProperty("gravity"); + recentItems = recentChoices.getNestedActions(node); + assertEquals(2, recentItems.size()); + assertEquals("Gravity...", recentItems.get(0).getTitle()); + assertEquals("Orientation", recentItems.get(1).getTitle()); + + BaseViewRule.editedProperty(ATTR_ORIENTATION); + recentItems = recentChoices.getNestedActions(node); + assertEquals(2, recentItems.size()); + assertEquals("Orientation", recentItems.get(0).getTitle()); + assertEquals("Gravity...", recentItems.get(1).getTitle()); + + // Lots of other properties -- flushes out properties that apply to this view + for (int i = 0; i < 30; i++) { + BaseViewRule.editedProperty("dummy_" + i); + } + recentItems = recentChoices.getNestedActions(node); + assertEquals(0, recentItems.size()); + + BaseViewRule.editedProperty("gravity"); + recentItems = recentChoices.getNestedActions(node); + assertEquals(1, recentItems.size()); + assertEquals("Gravity...", recentItems.get(0).getTitle()); + } + public void testDragInEmptyWithBounds() { dragIntoEmpty(new Rect(0, 0, 100, 80)); } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java index 0f2ab21..908d0ba 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java @@ -15,44 +15,57 @@ */ package com.android.ide.common.layout; -import static junit.framework.Assert.fail; - import com.android.ide.common.api.IAttributeInfo; /** Test/mock implementation of {@link IAttributeInfo} */ public class TestAttributeInfo implements IAttributeInfo { private final String mName; + private final Format[] mFormats; + private final String mDefinedBy; + private final String[] mEnumValues; + private final String[] mFlagValues; + private final String mJavadoc; public TestAttributeInfo(String name) { + this(name, null, null, null, null, null); + } + + public TestAttributeInfo(String name, Format[] formats, String definedBy, + String[] enumValues, String[] flagValues, String javadoc) { + super(); this.mName = name; + this.mFormats = formats; + this.mDefinedBy = definedBy; + this.mEnumValues = enumValues; + this.mFlagValues = flagValues; + this.mJavadoc = javadoc; } public String getDeprecatedDoc() { - fail("Not supported yet in tests"); return null; } public String[] getEnumValues() { - fail("Not supported yet in tests"); - return null; + return mEnumValues; } public String[] getFlagValues() { - fail("Not supported yet in tests"); - return null; + return mFlagValues; } public Format[] getFormats() { - fail("Not supported yet in tests"); - return null; + return mFormats; } public String getJavaDoc() { - fail("Not supported yet in tests"); - return null; + return mJavadoc; } public String getName() { return mName; } + + public String getDefinedBy() { + return mDefinedBy; + } }
\ No newline at end of file diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java index 7d77252..ed2bc43 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java @@ -25,6 +25,7 @@ import com.android.ide.common.api.Margins; import com.android.ide.common.api.Rect; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,6 +44,8 @@ public class TestNode implements INode { private Map<String, IAttributeInfo> mAttributeInfos = new HashMap<String, IAttributeInfo>(); + private List<String> mAttributeSources; + public TestNode(String fqcn) { this.mFqcn = fqcn; } @@ -98,6 +101,10 @@ public class TestNode implements INode { callback.handle(this); } + public void putAttributeInfo(String uri, String attrName, IAttributeInfo info) { + mAttributeInfos.put(uri + attrName, info); + } + public IAttributeInfo getAttributeInfo(String uri, String attrName) { return mAttributeInfos.get(uri + attrName); } @@ -180,4 +187,12 @@ public class TestNode implements INode { public Margins getMargins() { return null; } + + public List<String> getAttributeSources() { + return mAttributeSources != null ? mAttributeSources : Collections.<String>emptyList(); + } + + public void setAttributeSources(List<String> attributeSources) { + mAttributeSources = attributeSources; + } }
\ No newline at end of file |