/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.hyperlink;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.robotframework.ide.eclipse.main.plugin.RedImages;
import org.robotframework.ide.eclipse.main.plugin.RedPlugin;
import org.robotframework.ide.eclipse.main.plugin.mockmodel.RobotSuiteFileCreator;
import org.robotframework.ide.eclipse.main.plugin.model.RobotCase;
import org.robotframework.ide.eclipse.main.plugin.model.RobotCasesSection;
import org.robotframework.ide.eclipse.main.plugin.model.RobotContainer;
import org.robotframework.ide.eclipse.main.plugin.model.RobotFileInternalElement;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotFormEditor;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.cases.CasesEditorPart;
import org.robotframework.red.junit.ProjectProvider;
public class SuiteFileTableElementHyperlinkTest {
@ClassRule
public static ProjectProvider projectProvider = new ProjectProvider(FileHyperlinkTest.class);
@BeforeClass
public static void beforeSuite() throws Exception {
projectProvider.createFile("f.robot",
"*** Test Cases ***",
"tc1",
"tc2",
" Log a");
}
@AfterClass
public static void afterSuite() {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(false);
}
@Test
public void testSuiteFileRegionHyperlinkProperties() {
final RobotSuiteFile sourceModel = new RobotSuiteFileCreator().build();
final RobotFileInternalElement element = mock(RobotFileInternalElement.class);
final SuiteFileTableElementHyperlink link = new SuiteFileTableElementHyperlink(new Region(20, 10), sourceModel,
element, "label");
assertThat(link.getTypeLabel()).isNull();
assertThat(link.getHyperlinkRegion()).isEqualTo(new Region(20, 10));
assertThat(link.getDestinationFile()).isSameAs(sourceModel);
assertThat(link.getDestinationElement()).isSameAs(element);
assertThat(link.getHyperlinkText()).isEqualTo("Open Definition label");
assertThat(link.getLabelForCompoundHyperlinksDialog()).isEqualTo("file.robot");
assertThat(link.additionalLabelDecoration()).isEmpty();
assertThat(link.getImage()).isEqualTo(RedImages.getImageForFileWithExtension("robot"));
}
@Test
public void testIfTestCaseProperlyOpensInEditor() {
final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
assertThat(page.getEditorReferences()).isEmpty();
// FIXME : this shouldn't use global model; there should be a way to inject own model
final RobotSuiteFile sourceModel = RedPlugin.getModelManager()
.getModel()
.createSuiteFile(projectProvider.getFile("f.robot"));
final RobotCase testCase = sourceModel.findSection(RobotCasesSection.class).get().getChildren().get(1);
final SuiteFileTableElementHyperlink link = new SuiteFileTableElementHyperlink(new Region(20, 10), sourceModel,
testCase, null);
link.open();
assertThat(page.getEditorReferences()).hasSize(1);
final IEditorPart editor = page.getEditorReferences()[0].getEditor(true);
assertThat(editor).isInstanceOf(RobotFormEditor.class);
final RobotFormEditor redEditor = (RobotFormEditor) editor;
final IEditorPart activePart = redEditor.getActiveEditor();
assertThat(activePart).isInstanceOf(CasesEditorPart.class);
final CasesEditorPart casesSectionPart = (CasesEditorPart) activePart;
casesSectionPart.getSelectionLayerAccessor().getSelectedPositions();
final IStructuredSelection selection = (IStructuredSelection) editor.getEditorSite()
.getSelectionProvider()
.getSelection();
assertThat(selection.size()).isEqualTo(1);
// TODO : this is not required when local model i used instead of global
((RobotContainer) sourceModel.getParent()).getChildren().remove(sourceModel);
}
}