| /* |
| * 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.layout.refactoring; |
| |
| import static com.android.SdkConstants.FD_RES; |
| import static com.android.SdkConstants.FD_RES_LAYOUT; |
| |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jface.text.contentassist.ICompletionProposal; |
| import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext; |
| 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; |
| |
| public class RefactoringAssistantTest extends AdtProjectTest { |
| public void testAssistant1() throws Exception { |
| // "Extract String" |
| checkFixes("sample1a.xml", "<Button android:text=\"Fir^stButton\""); |
| } |
| |
| public void testAssistant2() throws Exception { |
| // Visual refactoring operations |
| checkFixes("sample1a.xml", "<Bu^tton android:text"); |
| } |
| |
| public void testAssistant3() throws Exception { |
| checkFixes("sample1a.xml", "<Button andr^oid:text=\"FirstButton\""); |
| } |
| |
| public void testAssistant4() throws Exception { |
| // Check for resource rename refactoring (and don't offer extract string) |
| checkFixes("sample1a.xml", "android:id=\"@+id/Linea^rLayout2\""); |
| } |
| |
| private void checkFixes(String name, String caretLocation) |
| throws Exception { |
| IProject project = getProject(); |
| IFile file = getTestDataFile(project, name, FD_RES + "/" + FD_RES_LAYOUT + "/" + name); |
| |
| // Determine the offset |
| String fileContent = AdtPlugin.readFile(file); |
| int caretDelta = caretLocation.indexOf("^"); |
| assertTrue(caretLocation, caretDelta != -1); |
| String caretContext = caretLocation.substring(0, caretDelta) |
| + caretLocation.substring(caretDelta + "^".length()); |
| int caretContextIndex = fileContent.indexOf(caretContext); |
| assertTrue("Caret content " + caretContext + " not found in file", |
| caretContextIndex != -1); |
| final int offset = caretContextIndex + caretDelta; |
| |
| |
| RefactoringAssistant refactoringAssistant = new RefactoringAssistant(); |
| |
| // Open file |
| IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); |
| assertNotNull(page); |
| IEditorPart editor = IDE.openEditor(page, file); |
| assertTrue(editor instanceof AndroidXmlEditor); |
| AndroidXmlEditor layoutEditor = (AndroidXmlEditor) editor; |
| final ISourceViewer viewer = layoutEditor.getStructuredSourceViewer(); |
| |
| IQuickAssistInvocationContext invocationContext = new IQuickAssistInvocationContext() { |
| @Override |
| public int getLength() { |
| return 0; |
| } |
| |
| @Override |
| public int getOffset() { |
| return offset; |
| } |
| |
| @Override |
| public ISourceViewer getSourceViewer() { |
| return viewer; |
| } |
| }; |
| ICompletionProposal[] proposals = refactoringAssistant |
| .computeQuickAssistProposals(invocationContext); |
| |
| if (proposals != null) { |
| for (ICompletionProposal proposal : proposals) { |
| assertNotNull(proposal.getAdditionalProposalInfo()); |
| assertNotNull(proposal.getImage()); |
| } |
| } |
| |
| StringBuilder sb = new StringBuilder(1000); |
| sb.append("Quick assistant in " + name + " for " + caretLocation + ":\n"); |
| if (proposals != null) { |
| for (ICompletionProposal proposal : proposals) { |
| sb.append(proposal.getDisplayString()); |
| String help = proposal.getAdditionalProposalInfo(); |
| if (help != null && help.trim().length() > 0) { |
| sb.append(" : "); |
| sb.append(help.replace('\n', ' ')); |
| } |
| sb.append('\n'); |
| } |
| } else { |
| sb.append("None found.\n"); |
| } |
| assertEqualsGolden(name, sb.toString(), "txt"); |
| |
| // No "apply" test on these assists since they are interactive. Refactoring |
| // is tested elsewhere. |
| } |
| } |