blob: 9edfaecd85a8aa0c28e05ab9e556224478df8f3f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 Red Hat Inc..
*
* 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:
* Red Hat Incorporated - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.autotools.tests.editors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.eclipse.cdt.autotools.tests.ProjectTools;
import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakeDocumentProvider;
import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakeEditor;
import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakeTextHover;
import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakefileSourceConfiguration;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class AutomakeTextHoverTest {
private ProjectTools tools;
private IProject project;
private IFile makefileAmFile;
private AutomakeTextHover textHover;
private AutomakeEditor automakeEditor;
private IDocument automakeDocument;
static String makefileAmContents =
// There are 6 characters from line beginning to
// the space after the echo
// ie. '\techo ' == 6 characters
"MACRO = case1" + "\n" +
// 14
"target1:" + "\n" +
// 23 (before the tab)
// 32 is after the M in MACRO
"\t" + "echo $(MACRO)" + "\n" +
// 38 (before the tab)
"\t" + "echo $@" + "\n" + "\n" +
// 48
"target2: target1" + "\n" +
// 65 (before the tab)
"\t" + "echo ${MACRO}" + "\n" +
// 80 (before the tab)
"\t" + "echo $@" + "\n" +
// 89 (before the tab)
"\t" + "echo $<" + "\n" + "\n" +
// 99
"target3: target1 target2" + "\n" +
// 124 (before the tab)
"\t" + "echo $?" + "\n" + "";
private IWorkbench workbench;
@Before
public void setUp() throws Exception {
tools = new ProjectTools();
if (!ProjectTools.setup())
fail("could not perform basic project workspace setup");
project = ProjectTools.createProject("testProjectATHT");
if (project == null) {
fail("Unable to create test project");
}
project.open(new NullProgressMonitor());
Display.getDefault().syncExec(() -> {
try {
makefileAmFile = tools.createFile(project, "Makefile.am", makefileAmContents);
workbench = PlatformUI.getWorkbench();
IEditorPart openEditor = org.eclipse.ui.ide.IDE
.openEditor(workbench.getActiveWorkbenchWindow().getActivePage(), makefileAmFile, true);
automakeEditor = (AutomakeEditor) openEditor;
AutomakeDocumentProvider docProvider = automakeEditor.getAutomakefileDocumentProvider();
automakeDocument = docProvider.getDocument(openEditor.getEditorInput());
AutomakefileSourceConfiguration automakeSourceViewerConfig = automakeEditor
.getAutomakeSourceViewerConfiguration();
textHover = (AutomakeTextHover) automakeSourceViewerConfig.getTextHover(null, "");
} catch (Exception e) {
fail(e.getMessage());
}
});
}
@After
public void tearDown() throws Exception {
project.delete(true, false, ProjectTools.getMonitor());
}
@Test
public void testGetHoverInfoTargetName1() {
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 45);
if (hoverRegion == null)
fail("Null hoverRegion");
// hover between the $ and the @ in target1
assertEquals(44, hoverRegion.getOffset());
assertEquals(2, hoverRegion.getLength());
try {
assertEquals("$@", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("target1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
@Test
public void testGetHoverInfoTargetName2() {
// hover between the $ and the @ in target2
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 87);
if (hoverRegion == null)
fail("Null hoverRegion");
assertEquals(86, hoverRegion.getOffset());
assertEquals(2, hoverRegion.getLength());
try {
assertEquals("$@", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("target2", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
@Test
public void testGetHoverInfoForTargetDependency() {
// hover between the $ and the < in target2
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 96);
if (hoverRegion == null)
fail("Null hoverRegion");
assertEquals(95, hoverRegion.getOffset());
assertEquals(2, hoverRegion.getLength());
try {
assertEquals("$<", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("target1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
@Test
public void testGetHoverInfoForTargetDependencies() {
// hover between the $ and the ? in target3
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 131);
if (hoverRegion == null)
fail("Null hoverRegion");
assertEquals(130, hoverRegion.getOffset());
assertEquals(2, hoverRegion.getLength());
try {
assertEquals("$?", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("target1 target2",
textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
@Test
public void testGetHoverForMacro1() {
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 32);
if (hoverRegion == null)
fail("Null hoverRegion");
// hover between the M and the A in the first $(MACRO) reference
assertEquals(31, hoverRegion.getOffset());
assertEquals(5, hoverRegion.getLength());
try {
assertEquals("MACRO", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("case1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
@Test
public void testGetHoverForMacro2() {
// hover between the M and the A in the ${MACRO} reference in target2
Display.getDefault().syncExec(() -> {
IRegion hoverRegion = textHover.getHoverRegion(automakeEditor.getAutomakeSourceViewer(), 74);
if (hoverRegion == null)
fail("Null hoverRegion");
assertEquals(73, hoverRegion.getOffset());
assertEquals(5, hoverRegion.getLength());
try {
assertEquals("MACRO", automakeDocument.get(hoverRegion.getOffset(), hoverRegion.getLength()));
} catch (BadLocationException e) {
fail("BadLocationException");
e.printStackTrace();
}
assertEquals("case1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
});
}
}