blob: 153677dc31463de0854a48845a599dc8eb8a43d9 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}
}