blob: 9042f27b34bc9f9fb4e920a1daaa28d50abf7bcc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Paul Pazderski 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:
* Paul Pazderski - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.tests.console;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.tests.AbstractDebugTest;
import org.eclipse.debug.ui.console.FileLink;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.junit.Test;
/**
* Tests for {@link FileLink}.
*/
public class FileLinkTests extends AbstractDebugTest {
private IProject testProject;
private IFile testFile;
@Override
public void setUp() throws Exception {
super.setUp();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
testProject = workspace.getRoot().getProject("FileLinkTest-" + UUID.randomUUID());
testProject.create(null);
testProject.open(null);
testFile = testProject.getFile("filelinktest.txt");
setTestContent("Test file\nSecond line");
}
@Override
public void tearDown() throws Exception {
if (testProject.exists()) {
testProject.delete(true, true, null);
}
super.tearDown();
}
private void setTestContent(String fileContent) throws UnsupportedEncodingException, CoreException {
ByteArrayInputStream data = new ByteArrayInputStream(fileContent.getBytes(testFile.getCharset()));
if (testFile.exists()) {
testFile.setContents(data, IResource.FORCE, null);
} else {
testFile.create(data, IResource.FORCE, null);
}
}
@Test
public void testFileLink() throws Exception {
FileLink link = new FileLink(testFile, null, -1, -1, -1);
link.linkActivated();
assertEquals(testFile.getName(), getActiveEditorFilename());
}
@Test
public void testFileLinkWithOffset() throws Exception {
FileLink link = new FileLink(testFile, null, 4, 0, -1);
link.linkActivated();
assertEquals(testFile.getName(), getActiveEditorFilename());
ITextSelection selection = getCurrentTextSelection();
assertNotNull("No selection.", selection);
assertEquals(4, selection.getOffset());
assertEquals(0, selection.getLength());
assertEquals(0, selection.getStartLine());
assertEquals(0, selection.getEndLine());
}
@Test
public void testFileLinkWithSelection() throws Exception {
FileLink link = new FileLink(testFile, null, 7, 5, -1);
link.linkActivated();
assertEquals(testFile.getName(), getActiveEditorFilename());
ITextSelection selection = getCurrentTextSelection();
assertNotNull("No selection.", selection);
assertEquals(7, selection.getOffset());
assertEquals(5, selection.getLength());
assertEquals(0, selection.getStartLine());
assertEquals(1, selection.getEndLine());
// if offset + length and line is specified the line should be ignored
link = new FileLink(testFile, null, 7, 5, 1);
link.linkActivated();
assertEquals(testFile.getName(), getActiveEditorFilename());
selection = getCurrentTextSelection();
assertNotNull("No selection.", selection);
assertEquals(7, selection.getOffset());
assertEquals(5, selection.getLength());
assertEquals(0, selection.getStartLine());
assertEquals(1, selection.getEndLine());
}
@Test
public void testFileLinkWithLine() throws Exception {
FileLink link = new FileLink(testFile, null, -1, -1, 2);
link.linkActivated();
assertEquals(testFile.getName(), getActiveEditorFilename());
ITextSelection selection = getCurrentTextSelection();
assertNotNull("No selection.", selection);
assertEquals(10, selection.getOffset());
assertEquals(11, selection.getLength());
assertEquals(1, selection.getStartLine());
assertEquals(1, selection.getEndLine());
}
private String getActiveEditorFilename() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IEditorPart editor = window.getActivePage().getActiveEditor();
return editor != null ? editor.getEditorInput().getName() : null;
}
private ITextSelection getCurrentTextSelection() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
ISelection selection = window.getSelectionService().getSelection();
if (selection instanceof ITextSelection) {
return (ITextSelection) selection;
}
return null;
}
}