aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java
new file mode 100644
index 000000000..acb2b049b
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlCharacterMatcherTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2011 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;
+
+import com.android.ide.eclipse.adt.internal.editors.layout.refactoring.AdtProjectTest;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+
+@SuppressWarnings("restriction")
+public class AndroidXmlCharacterMatcherTest extends AdtProjectTest {
+ public void testGotoMatchingFwd1() throws Exception {
+ checkGotoMatching(
+ "<app^lication android:icon",
+ "^</application>");
+ }
+
+ public void testGotoMatchingFwd2() throws Exception {
+ checkGotoMatching(
+ "^<application android:icon",
+ "^</application>");
+ }
+
+ public void testGotoMatchingFwd3() throws Exception {
+ checkGotoMatching(
+ "<application^ android:icon",
+ "^</application>");
+ }
+
+ public void testGotoMatchingBwd1() throws Exception {
+ checkGotoMatching(
+ "^</application>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingBwd2() throws Exception {
+ checkGotoMatching(
+ "<^/application>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingBwd3() throws Exception {
+ checkGotoMatching(
+ "</^application>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingBwd4() throws Exception {
+ checkGotoMatching(
+ "</app^lication>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingBwd5() throws Exception {
+ checkGotoMatching(
+ "</^application>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingBwd6() throws Exception {
+ checkGotoMatching(
+ "</^application>",
+ "^<application android:icon");
+ }
+
+ public void testGotoMatchingFwd4() throws Exception {
+ checkGotoMatching(
+ "<intent-filter^>",
+ "^</intent-filter>");
+ }
+
+ public void testGotoMatchingFwd5() throws Exception {
+ checkGotoMatching(
+ "<intent-filter>^",
+ "^</intent-filter>");
+ }
+
+ public void testGotoMatchingFallback() throws Exception {
+ // Character matching is done by the superclass; ensure that fallback to the
+ // other XML matchers is working
+ checkGotoMatching(
+ "android:icon=^\"@drawable/icon\"",
+ "android:icon=\"@drawable/icon^\"");
+ }
+
+ private void checkGotoMatching(IFile file, String caretBefore,
+ String caretAfter) throws Exception {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ assertNotNull(page);
+ IEditorPart editor = IDE.openEditor(page, file);
+ assertTrue(editor instanceof AndroidXmlEditor);
+ AndroidXmlEditor layoutEditor = (AndroidXmlEditor) editor;
+ ISourceViewer viewer = layoutEditor.getStructuredSourceViewer();
+
+ int caretPosBefore = updateCaret(viewer, caretBefore);
+
+ AndroidXmlCharacterMatcher matcher = new AndroidXmlCharacterMatcher();
+ IStructuredDocument document = layoutEditor.getStructuredDocument();
+
+ IRegion match = matcher.match(document, caretPosBefore);
+ assertNotNull(match);
+
+ String text = document.get();
+ final String after = stripCaret(caretAfter);
+ int index = text.indexOf(after);
+ int caretPosAfter = match.getOffset() - index;
+ String textWithCaret = after.substring(0, caretPosAfter)
+ + "^" + after.substring(caretPosAfter);
+
+ assertEquals(caretAfter, textWithCaret);
+ }
+
+ private static String stripCaret(String s) {
+ int index = s.indexOf('^');
+ assertTrue(index != -1);
+ return s.substring(0, index) + s.substring(index + 1);
+ }
+
+ private void checkGotoMatching(String caretBefore,
+ String caretAfter) throws Exception {
+ checkGotoMatching(
+ getTestDataFile(getProject(), "manifest.xml", "AndroidManifest.xml", true),
+ caretBefore, caretAfter);
+ }
+}