| /******************************************************************************* |
| * Copyright (c) 2003, 2013 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.ant.tests.ui.editor.support; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| import org.eclipse.ant.internal.ui.editor.AntEditor; |
| import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor; |
| import org.eclipse.ant.internal.ui.model.AntModel; |
| import org.eclipse.jface.text.Document; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.text.contentassist.ICompletionListener; |
| import org.eclipse.jface.text.contentassist.ICompletionProposal; |
| import org.eclipse.jface.text.contentassist.IContentAssistantExtension2; |
| import org.eclipse.jface.text.source.ISourceViewer; |
| import org.junit.Assert; |
| import org.w3c.dom.Element; |
| |
| public class TestTextCompletionProcessor extends AntEditorCompletionProcessor { |
| |
| public final static int TEST_PROPOSAL_MODE_NONE = AntEditorCompletionProcessor.PROPOSAL_MODE_NONE; |
| public final static int TEST_PROPOSAL_MODE_BUILDFILE = AntEditorCompletionProcessor.PROPOSAL_MODE_BUILDFILE; |
| public final static int TEST_PROPOSAL_MODE_TASK_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_TASK_PROPOSAL; |
| public final static int TEST_PROPOSAL_MODE_PROPERTY_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_PROPERTY_PROPOSAL; |
| public final static int TEST_PROPOSAL_MODE_ATTRIBUTE_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_ATTRIBUTE_PROPOSAL; |
| public final static int TEST_PROPOSAL_MODE_TASK_PROPOSAL_CLOSING = AntEditorCompletionProcessor.PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; |
| public final static int TEST_PROPOSAL_MODE_ATTRIBUTE_VALUE_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_ATTRIBUTE_VALUE_PROPOSAL; |
| |
| private File fEditedFile; |
| private ISourceViewer fViewer; |
| private boolean fNeedsToDispose = true; |
| |
| public TestTextCompletionProcessor(AntModel model) { |
| super(model); |
| fContentAssistant = new IContentAssistantExtension2() { |
| @Override |
| public void setEmptyMessage(String message) { |
| // do nothing |
| } |
| |
| @Override |
| public void setStatusMessage(String message) { |
| // do nothing |
| } |
| |
| @Override |
| public void setStatusLineVisible(boolean show) { |
| // do nothing |
| } |
| |
| @Override |
| public void setShowEmptyList(boolean showEmpty) { |
| // do nothing |
| } |
| |
| @Override |
| public void setRepeatedInvocationMode(boolean cycling) { |
| // do nothing |
| } |
| |
| @Override |
| public void removeCompletionListener(ICompletionListener listener) { |
| // do nothing |
| } |
| |
| @Override |
| public void addCompletionListener(ICompletionListener listener) { |
| // do nothing |
| } |
| }; |
| } |
| |
| public TestTextCompletionProcessor(AntEditor editor) { |
| this(editor.getAntModel()); |
| fViewer = editor.getViewer(); |
| fNeedsToDispose = false; |
| } |
| |
| public TestTextCompletionProcessor() { |
| this((AntModel) null); |
| } |
| |
| @Override |
| public ICompletionProposal[] getAttributeProposals(String taskName, String prefix) { |
| if (cursorPosition == -1) { |
| cursorPosition = taskName.length(); |
| } |
| return super.getAttributeProposals(taskName, prefix); |
| } |
| |
| @Override |
| public Element findChildElementNamedOf(Element anElement, String childElementName) { |
| return super.findChildElementNamedOf(anElement, childElementName); |
| } |
| |
| public ICompletionProposal[] getTaskProposals(String text, String parentName, String prefix) { |
| cursorPosition = Math.max(0, text.length() - 1); |
| return super.getTaskProposals(new Document(text), parentName, prefix); |
| } |
| |
| @Override |
| public ICompletionProposal[] getTaskProposals(IDocument document, String parentName, String aPrefix) { |
| cursorPosition = Math.max(0, document.getLength() - 1); |
| return super.getTaskProposals(document, parentName, aPrefix); |
| } |
| |
| public int determineProposalMode(String text, int theCursorPosition, String prefix) { |
| return super.determineProposalMode(new Document(text), theCursorPosition, prefix); |
| } |
| |
| public String getParentName(String text, int aLineNumber, int aColumnNumber) { |
| return super.getParentName(new Document(text), aLineNumber, aColumnNumber); |
| } |
| |
| @Override |
| public String getParentName(IDocument doc, int aLineNumber, int aColumnNumber) { |
| return super.getParentName(doc, aLineNumber, aColumnNumber); |
| } |
| |
| @Override |
| public String getPrefixFromDocument(String aDocumentText, int anOffset) { |
| String prefix = super.getPrefixFromDocument(aDocumentText, anOffset); |
| currentPrefix = null; |
| return prefix; |
| } |
| |
| @Override |
| public ICompletionProposal[] getPropertyProposals(IDocument document, String prefix, int cursorPos) { |
| return super.getPropertyProposals(document, prefix, cursorPos); |
| } |
| |
| /** |
| * Returns the edited File that org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor sets or a temporary file, which only serves as a |
| * dummy. |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getEditedFile() |
| */ |
| @Override |
| public File getEditedFile() { |
| if (fEditedFile != null) { |
| return fEditedFile; |
| } |
| File tempFile = null; |
| try { |
| tempFile = File.createTempFile("test", null); //$NON-NLS-1$ |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| tempFile.deleteOnExit(); |
| return tempFile; |
| } |
| |
| public void setLineNumber(int aLineNumber) { |
| lineNumber = aLineNumber; |
| } |
| |
| public void setColumnNumber(int aColumnNumber) { |
| columnNumber = aColumnNumber; |
| } |
| |
| public void setCursorPosition(int cursorPosition) { |
| this.cursorPosition = cursorPosition; |
| } |
| |
| public void setEditedFile(File aFile) { |
| fEditedFile = aFile; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getTargetAttributeValueProposals(org.eclipse.jface.text.IDocument, |
| * java.lang.String, java.lang.String, java.lang.String) |
| */ |
| @Override |
| public ICompletionProposal[] getTargetAttributeValueProposals(IDocument document, String textToSearch, String prefix, String attributeName) { |
| return super.getTargetAttributeValueProposals(document, textToSearch, prefix, attributeName); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getAntCallAttributeValueProposals(org.eclipse.jface.text.IDocument, |
| * java.lang.String, java.lang.String) |
| */ |
| @Override |
| public ICompletionProposal[] getAntCallAttributeValueProposals(IDocument document, String prefix, String attributeName) { |
| return super.getAntCallAttributeValueProposals(document, prefix, attributeName); |
| } |
| |
| /** |
| * Since the testing occurs without necessarily having an associated viewer, return a dummy value. |
| */ |
| @Override |
| protected char getPreviousChar() { |
| return '?'; |
| } |
| |
| /** |
| * Returns whether the specified task name is known. |
| */ |
| @Override |
| protected boolean isKnownElement(String elementName) { |
| if (antModel != null) { |
| return super.isKnownElement(elementName); |
| } |
| return getDtd().getElement(elementName) != null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getProposalsFromDocument(org.eclipse.jface.text.IDocument, |
| * java.lang.String) |
| */ |
| @Override |
| public ICompletionProposal[] getProposalsFromDocument(IDocument document, String prefix) { |
| return super.getProposalsFromDocument(document, prefix); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getBuildFileProposals(org.eclipse.jface.text.IDocument, java.lang.String) |
| */ |
| public ICompletionProposal[] getBuildFileProposals(String text, String prefix) { |
| return super.getBuildFileProposals(new Document(text), prefix); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#determineTemplateProposals(org.eclipse.jface.text.ITextViewer, int) |
| */ |
| public ICompletionProposal[] determineTemplateProposals() { |
| return super.determineTemplateProposals(fViewer, cursorPosition); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int) |
| */ |
| public ICompletionProposal[] computeCompletionProposals(int documentOffset) { |
| return super.computeCompletionProposals(fViewer, documentOffset); |
| } |
| |
| public void dispose() { |
| if (fNeedsToDispose && antModel != null) { |
| // not working with an editor |
| antModel.dispose(); |
| } |
| } |
| } |