/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.seam.text.ext.test;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;
import org.jboss.tools.cdi.seam.config.core.test.SeamConfigTest;
import org.jboss.tools.cdi.seam.text.ext.CDISeamExtPlugin;
import org.jboss.tools.cdi.seam.text.ext.hyperlink.SeamConfigInjectedPointHyperlink;
import org.jboss.tools.cdi.seam.text.ext.hyperlink.SeamConfigInjectedPointHyperlinkDetector;
import org.jboss.tools.cdi.text.ext.test.CDIHyperlinkTestUtil;
import org.jboss.tools.common.util.FileUtil;
/**
*
* @author Viacheslav Kabanovich
*
*/
public class SeamConfigInjectedPointHyperlinkTest extends SeamConfigTest {
static final String HYPERLINK_NAME = SeamConfigInjectedPointHyperlink.class.getName();
public SeamConfigInjectedPointHyperlinkTest() {}
public void testClassBean() throws Exception {
IHyperlink hyperlink = checkHyperLinkInJava(
"src/org/jboss/beans/injection/Injections.java",
project,
"@Inject MyBean5", 1,
new SeamConfigInjectedPointHyperlinkDetector(),
HYPERLINK_NAME);
hyperlink.open();
checkResult("seam-beans.xml", "<test04:MyBean5>");
}
public void testProducerField() throws Exception {
IHyperlink hyperlink = checkHyperLinkInJava(
"src/org/jboss/beans/injection/Injections.java",
project,
"@Inject @MyQualifier", 1,
new SeamConfigInjectedPointHyperlinkDetector(),
HYPERLINK_NAME);
hyperlink.open();
checkResult("seam-beans.xml", "<test04:myType3>");
}
public void testProducerMethod() throws Exception {
IHyperlink hyperlink = checkHyperLinkInJava(
"src/org/jboss/beans/injection/Injections.java",
project,
"@Inject @org.jboss.beans.test05.MyQualifier", 1,
new SeamConfigInjectedPointHyperlinkDetector(),
HYPERLINK_NAME);
hyperlink.open();
checkResult("seam-beans.xml", "<test05:createType>");
}
public void testVirtualProducerField() throws Exception {
IHyperlink hyperlink = checkHyperLinkInJava(
"src/org/jboss/beans/injection/Injections.java",
project,
"@Inject @org.jboss.beans.test06.MyQualifier", 1,
new SeamConfigInjectedPointHyperlinkDetector(),
HYPERLINK_NAME);
hyperlink.open();
checkResult("seam-beans.xml", "<s:String>");
}
static void checkResult(String name, String selectedText) throws CoreException {
IEditorPart editor = CDISeamExtPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
IFileEditorInput input = (IFileEditorInput)editor.getEditorInput();
IFile f = input.getFile();
assertEquals(name, f.getName());
ITextSelection textSelection = getSelection(editor);
String text = FileUtil.readStream(f).substring(textSelection.getOffset(), textSelection.getOffset() + textSelection.getLength());
assertEquals(selectedText, text);
}
public static ITextSelection getSelection(IEditorPart editor) {
ITextEditor textEditor = (ITextEditor)editor.getAdapter(ITextEditor.class);
assertNotNull(textEditor);
ISelection s = textEditor.getSelectionProvider().getSelection();
assertTrue(s instanceof ITextSelection);
return (ITextSelection)s;
}
public static IHyperlink checkHyperLinkInJava(String fileName, IProject project, String substring, int innerOffset, AbstractHyperlinkDetector detector, String hyperlinkClassName) throws Exception {
IFile file = project.getFile(fileName);
assertNotNull("The file \"" + fileName + "\" is not found", file);
assertTrue("The file \"" + fileName + "\" is not found", file.isAccessible());
String text = FileUtil.readStream(file);
int offset = text.indexOf(substring);
assertTrue(offset > 0);
offset += innerOffset;
Region region = new Region(offset, 0);
FileEditorInput editorInput = new FileEditorInput(file);
IEditorPart part = CDIHyperlinkTestUtil.openFileInEditor(file);
CompilationUnitEditor editor = (CompilationUnitEditor)part;
ISourceViewer viewer = editor.getViewer();
detector.setContext(editor);
IHyperlink[] links = detector.detectHyperlinks(viewer, region, true);
if(links!=null) {
for (IHyperlink hyperlink : links) {
if(hyperlink.getClass().getName().equals(hyperlinkClassName)) {
return hyperlink;
}
}
}
fail("Can't find HyperLink");
return null;
}
}