aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java297
1 files changed, 297 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java
new file mode 100644
index 000000000..03db18956
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtilsTest.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2008 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.descriptors;
+
+import com.android.ide.eclipse.adt.internal.editors.layout.descriptors.ViewElementDescriptor;
+import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode;
+import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for DescriptorsUtils in the editors plugin
+ */
+@SuppressWarnings("javadoc")
+public class DescriptorsUtilsTest extends TestCase {
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testPrettyAttributeUiName() {
+ assertEquals("", DescriptorsUtils.prettyAttributeUiName(""));
+
+ assertEquals("Max width for view",
+ DescriptorsUtils.prettyAttributeUiName("maxWidthForView"));
+
+ assertEquals("Layout width",
+ DescriptorsUtils.prettyAttributeUiName("layout_width"));
+
+ // X Y and Z are capitalized when used as single words (so "T" becomes "t")
+ assertEquals("Axis X", DescriptorsUtils.prettyAttributeUiName("axisX"));
+ assertEquals("Axis Y", DescriptorsUtils.prettyAttributeUiName("axisY"));
+ assertEquals("Axis Z", DescriptorsUtils.prettyAttributeUiName("axisZ"));
+ assertEquals("Axis t", DescriptorsUtils.prettyAttributeUiName("axisT"));
+
+ assertEquals("The X axis", DescriptorsUtils.prettyAttributeUiName("theXAxis"));
+ assertEquals("The Y axis", DescriptorsUtils.prettyAttributeUiName("theYAxis"));
+ assertEquals("The Z axis", DescriptorsUtils.prettyAttributeUiName("theZAxis"));
+ assertEquals("The t axis", DescriptorsUtils.prettyAttributeUiName("theTAxis"));
+
+ // Special cases for "uri" and "sdk" etc
+ assertEquals("Grant URI permission",
+ DescriptorsUtils.prettyAttributeUiName("grantUriPermission"));
+ assertEquals("URI permission",
+ DescriptorsUtils.prettyAttributeUiName("uriPermission"));
+ assertEquals("Min SDK version", DescriptorsUtils.prettyAttributeUiName("minSdkVersion"));
+ assertEquals("SDK version", DescriptorsUtils.prettyAttributeUiName("sdkVersion"));
+ assertEquals("IME action method",
+ DescriptorsUtils.prettyAttributeUiName("imeActionMethod"));
+ assertEquals("VM safe mode", DescriptorsUtils.prettyAttributeUiName("vmSafeMode"));
+ assertEquals("UI options", DescriptorsUtils.prettyAttributeUiName("uiOptions"));
+ }
+
+ public void testCapitalize() {
+ assertEquals("", DescriptorsUtils.capitalize(""));
+
+ assertEquals("Max Width For View",
+ DescriptorsUtils.capitalize("maxWidthForView"));
+
+ assertEquals("Layout Width",
+ DescriptorsUtils.capitalize("layout_width"));
+
+ assertEquals("Axis X", DescriptorsUtils.capitalize("axisX"));
+ assertEquals("Axis Y", DescriptorsUtils.capitalize("axisY"));
+ assertEquals("Axis Z", DescriptorsUtils.capitalize("axisZ"));
+ assertEquals("Axis T", DescriptorsUtils.capitalize("axisT"));
+
+ assertEquals("The X Axis", DescriptorsUtils.capitalize("theXAxis"));
+ assertEquals("The Y Axis", DescriptorsUtils.capitalize("theYAxis"));
+ assertEquals("The Z Axis", DescriptorsUtils.capitalize("theZAxis"));
+ assertEquals("The T Axis", DescriptorsUtils.capitalize("theTAxis"));
+
+ // Special cases for "uri" and "sdk" etc
+ assertEquals("Grant URI Permission", DescriptorsUtils.capitalize("grantUriPermission"));
+ assertEquals("Min SDK Version", DescriptorsUtils.capitalize("minSdkVersion"));
+ assertEquals("IME Action Method", DescriptorsUtils.capitalize("imeActionMethod"));
+ assertEquals("URI Permission", DescriptorsUtils.capitalize("uriPermission"));
+ assertEquals("SDK Version", DescriptorsUtils.capitalize("sdkVersion"));
+ assertEquals("Grant IME", DescriptorsUtils.capitalize("GrantIme"));
+ assertEquals("VM Safe Mode", DescriptorsUtils.capitalize("vmSafeMode"));
+ assertEquals("UI Options", DescriptorsUtils.capitalize("uiOptions"));
+ }
+
+ public void testFormatTooltip() {
+ assertEquals("", DescriptorsUtils.formatTooltip(""));
+
+ assertEquals("\"application\"",
+ DescriptorsUtils.formatTooltip(
+ "<code>application</code>"));
+
+ assertEquals("android.content.Intent",
+ DescriptorsUtils.formatTooltip(
+ "{@link android.content.Intent}"));
+
+ assertEquals("FLAG_ACTIVITY_SINGLE_TOP",
+ DescriptorsUtils.formatTooltip(
+ "{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}"));
+
+ assertEquals("activity-alias",
+ DescriptorsUtils.formatTooltip(
+ "{@link \t #AndroidManifestActivityAlias \tactivity-alias }"));
+
+ assertEquals("\"permission\"",
+ DescriptorsUtils.formatTooltip(
+ "{@link #AndroidManifestPermission &lt;permission&gt;}"));
+
+ assertEquals("and etc.",
+ DescriptorsUtils.formatTooltip(
+ "{@link #IntentCategory <category> and etc. }"));
+
+ assertEquals("Activity.onNewIntent()",
+ DescriptorsUtils.formatTooltip(
+ "{@link android.app.Activity#onNewIntent Activity.onNewIntent()}"));
+ }
+
+ public void testFormatFormText() {
+ ElementDescriptor desc = new ElementDescriptor("application");
+ desc.setSdkUrl(DescriptorsUtils.MANIFEST_SDK_URL + "TagApplication");
+ String docBaseUrl = "http://base";
+ assertEquals("<form><li style=\"image\" value=\"image\"></li></form>", DescriptorsUtils.formatFormText("", desc, docBaseUrl));
+
+ assertEquals("<form><li style=\"image\" value=\"image\"><a href=\"http://base/reference/android/R.styleable.html#TagApplication\">application</a></li></form>",
+ DescriptorsUtils.formatFormText(
+ "<code>application</code>",
+ desc, docBaseUrl));
+
+ assertEquals("<form><li style=\"image\" value=\"image\"><b>android.content.Intent</b></li></form>",
+ DescriptorsUtils.formatFormText(
+ "{@link android.content.Intent}",
+ desc, docBaseUrl));
+
+ assertEquals("<form><li style=\"image\" value=\"image\"><a href=\"http://base/reference/android/R.styleable.html#AndroidManifestPermission\">AndroidManifestPermission</a></li></form>",
+ DescriptorsUtils.formatFormText(
+ "{@link #AndroidManifestPermission}",
+ desc, docBaseUrl));
+
+ assertEquals("<form><li style=\"image\" value=\"image\"><a href=\"http://base/reference/android/R.styleable.html#AndroidManifestPermission\">\"permission\"</a></li></form>",
+ DescriptorsUtils.formatFormText(
+ "{@link #AndroidManifestPermission &lt;permission&gt;}",
+ desc, docBaseUrl));
+ }
+
+ public void testGetFreeWidgetId() throws Exception {
+ DocumentDescriptor documentDescriptor =
+ new DocumentDescriptor("layout_doc", null); //$NON-NLS-1$
+ UiDocumentNode model = new UiDocumentNode(documentDescriptor);
+ UiElementNode uiRoot = model.getUiRoot();
+
+ assertEquals("@+id/button1", DescriptorsUtils.getFreeWidgetId(uiRoot, "Button"));
+ assertEquals("@+id/linearLayout1",
+ DescriptorsUtils.getFreeWidgetId(uiRoot, "LinearLayout"));
+ }
+
+ public void testNeedsDefaultId() throws Exception {
+ assertTrue(DescriptorsUtils.needsDefaultId(new ElementDescriptor("Button")));
+ assertTrue(DescriptorsUtils.needsDefaultId(new ElementDescriptor("EditText")));
+ assertTrue(DescriptorsUtils.needsDefaultId(new ElementDescriptor("TextView")));
+
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("LinearLayout")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("GridLayout")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("RelativeLayout")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("include")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("merge")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("fragment")));
+ assertFalse(DescriptorsUtils.needsDefaultId(new ElementDescriptor("Space")));
+ }
+
+ private static ViewElementDescriptor createDesc(String name, String fqn, boolean hasChildren) {
+ if (hasChildren) {
+ return new ViewElementDescriptor(name, name, fqn, "", "", new AttributeDescriptor[0],
+ new AttributeDescriptor[0], new ElementDescriptor[1], false);
+ } else {
+ return new ViewElementDescriptor(name, fqn);
+ }
+ }
+
+ public void testCanInsertChildren() throws Exception {
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("android:Button",
+ "android.widget.Button", false), null));
+ assertTrue(DescriptorsUtils.canInsertChildren(createDesc("android:LinearLayout",
+ "android.view.LinearLayout", true), null));
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("android:ListView",
+ "android.widget.ListView", true), null));
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("android:ExpandableListView",
+ "android.widget.ExpandableListView", true), null));
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("android:Gallery",
+ "android.widget.Gallery", true), null));
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("android:GridView",
+ "android.widget.GridView", true), null));
+
+ // This isn't the Android one (missing android: namespace prefix):
+ // This test is disabled since I had to remove the namespace enforcement
+ // (see namespace-related comment in canInsertChildren)
+ //assertTrue(DescriptorsUtils.canInsertChildren(createDesc("mynamespace:ListView",
+ // "android.widget.ListView", true), null));
+
+ // Custom view without known view object
+ assertTrue(DescriptorsUtils.canInsertChildren(createDesc("MyView",
+ "foo.bar.MyView", true), null));
+
+ // Custom view with known view object that extends AdapterView
+ Object view = new MyClassLoader().findClass("foo.bar.MyView").newInstance();
+ assertFalse(DescriptorsUtils.canInsertChildren(createDesc("MyView",
+ "foo.bar.MyView", true), view));
+ }
+
+ /** Test class loader which finds foo.bar.MyView extends android.widget.AdapterView */
+ private static class MyClassLoader extends ClassLoader {
+ public MyClassLoader() {
+ super(null);
+ }
+
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ if (name.equals("foo.bar.MyView")) {
+ // Simple class stub compiled by javac and dumped as bytes:
+ //package foo.bar;
+ //public class MyView extends android.widget.AdapterView {
+ // public MyView() {
+ // super(null);
+ // }
+ //}
+ byte[] classData = new byte[] {
+ -54,-2,-70,-66,0,0,0,49,0,17,10,0,3,0,13,7,0,14,7,0,15,1,0,6,60,105,110,
+ 105,116,62,1,0,3,40,41,86,1,0,4,67,111,100,101,1,0,15,76,105,110,101,78,
+ 117,109,98,101,114,84,97,98,108,101,1,0,18,76,111,99,97,108,86,97,114,
+ 105,97,98,108,101,84,97,98,108,101,1,0,4,116,104,105,115,1,0,16,76,102,
+ 111,111,47,98,97,114,47,77,121,86,105,101,119,59,1,0,10,83,111,117,114,
+ 99,101,70,105,108,101,1,0,11,77,121,86,105,101,119,46,106,97,118,97,12,
+ 0,4,0,16,1,0,14,102,111,111,47,98,97,114,47,77,121,86,105,101,119,1,0,
+ 26,97,110,100,114,111,105,100,47,119,105,100,103,101,116,47,65,100,97,
+ 112,116,101,114,86,105,101,119,1,0,28,40,76,97,110,100,114,111,105,100,
+ 47,99,111,110,116,101,110,116,47,67,111,110,116,101,120,116,59,41,86,0,
+ 33,0,2,0,3,0,0,0,0,0,1,0,1,0,4,0,5,0,1,0,6,0,0,0,52,0,2,0,1,0,0,0,6,42,
+ 1,-73,0,1,-79,0,0,0,2,0,7,0,0,0,10,0,2,0,0,0,9,0,5,0,10,0,8,0,0,0,12,0,
+ 1,0,0,0,6,0,9,0,10,0,0,0,1,0,11,0,0,0,2,0,12
+ };
+ return defineClass("foo.bar.MyView", classData, 0, classData.length);
+ }
+ if (name.equals("android.widget.AdapterView")) {
+ // Simple class stub compiled by javac and dumped as bytes:
+ //package android.widget;
+ //public class AdapterView {
+ // public AdapterView(android.content.Context context) { }
+ //}
+ byte[] classData = new byte[] {
+ -54,-2,-70,-66,0,0,0,49,0,19,10,0,3,0,15,7,0,16,7,0,17,1,0,6,60,105,110,
+ 105,116,62,1,0,28,40,76,97,110,100,114,111,105,100,47,99,111,110,116,101,
+ 110,116,47,67,111,110,116,101,120,116,59,41,86,1,0,4,67,111,100,101,1,0,
+ 15,76,105,110,101,78,117,109,98,101,114,84,97,98,108,101,1,0,18,76,111,
+ 99,97,108,86,97,114,105,97,98,108,101,84,97,98,108,101,1,0,4,116,104,105,
+ 115,1,0,28,76,97,110,100,114,111,105,100,47,119,105,100,103,101,116,47,
+ 65,100,97,112,116,101,114,86,105,101,119,59,1,0,7,99,111,110,116,101,120,
+ 116,1,0,25,76,97,110,100,114,111,105,100,47,99,111,110,116,101,110,116,
+ 47,67,111,110,116,101,120,116,59,1,0,10,83,111,117,114,99,101,70,105,108,
+ 101,1,0,16,65,100,97,112,116,101,114,86,105,101,119,46,106,97,118,97,12,
+ 0,4,0,18,1,0,26,97,110,100,114,111,105,100,47,119,105,100,103,101,116,
+ 47,65,100,97,112,116,101,114,86,105,101,119,1,0,16,106,97,118,97,47,108,
+ 97,110,103,47,79,98,106,101,99,116,1,0,3,40,41,86,0,33,0,2,0,3,0,0,0,0,0,
+ 1,0,1,0,4,0,5,0,1,0,6,0,0,0,57,0,1,0,2,0,0,0,5,42,-73,0,1,-79,0,0,0,2,0,
+ 7,0,0,0,6,0,1,0,0,0,8,0,8,0,0,0,22,0,2,0,0,0,5,0,9,0,10,0,0,0,0,0,5,0,11,
+ 0,12,0,1,0,1,0,13,0,0,0,2,0,14
+ };
+ return defineClass("android.widget.AdapterView", classData, 0, classData.length);
+ }
+
+ return super.findClass(name);
+ }
+ }
+
+ public void testGetBasename() {
+ assertEquals("Foo", DescriptorsUtils.getBasename("Foo"));
+ assertEquals("Foo", DescriptorsUtils.getBasename("foo.Foo"));
+ assertEquals("String", DescriptorsUtils.getBasename("java.util.String"));
+ }
+}