/* * 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.tableeditor.assist; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Text; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.rf.ide.core.testdata.model.table.setting.LibraryImport; import org.rf.ide.core.testdata.model.table.setting.ResourceImport; import org.rf.ide.core.testdata.model.table.setting.VariablesImport; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.robotframework.ide.eclipse.main.plugin.model.RobotModel; import org.robotframework.ide.eclipse.main.plugin.model.RobotProject; import org.robotframework.ide.eclipse.main.plugin.model.RobotSetting; import org.robotframework.ide.eclipse.main.plugin.model.RobotSetting.SettingsGroup; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.project.library.LibrarySpecification; import org.robotframework.ide.eclipse.main.plugin.tableeditor.assist.ImportsProposalsProvider.LibrariesProposalsProvider; import org.robotframework.ide.eclipse.main.plugin.tableeditor.assist.ImportsProposalsProvider.ResourceFileLocationsProposalsProvider; import org.robotframework.ide.eclipse.main.plugin.tableeditor.assist.ImportsProposalsProvider.VariableFileLocationsProposalsProvider; import org.robotframework.red.jface.assist.AssistantContext; import org.robotframework.red.jface.assist.RedContentProposal; import org.robotframework.red.junit.ProjectProvider; import org.robotframework.red.junit.ShellProvider; import org.robotframework.red.nattable.edit.AssistanceSupport.NatTableAssistantContext; public class ImportsProposalsProviderTest { @ClassRule public static ProjectProvider projectProvider = new ProjectProvider( ImportsProposalsProviderTest.class); @Rule public ShellProvider shellProvider = new ShellProvider(); @BeforeClass public static void beforeSuite() throws Exception { projectProvider.createFile("suite.robot", "*** Test Cases ***"); projectProvider.createFile("a_res.robot"); projectProvider.createFile("b_res.robot"); projectProvider.createFile("a_vars.py"); projectProvider.createFile("b_vars.py"); } @Test public void thereAreNoResourcesProposalsProvided_whenNothingMatchesToCurrentPrefix() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.RESOURCES, new ResourceImport(RobotToken.create("Resource"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final ResourceFileLocationsProposalsProvider provider = new ResourceFileLocationsProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals("anything", 2, context); assertThat(proposals).isEmpty(); } @Test public void thereAreNoResourcesProposalsProvided_whenInAnyColumnNotAResourceSetting() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.VARIABLES, new VariablesImport(RobotToken.create("Variables"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final ResourceFileLocationsProposalsProvider provider = new ResourceFileLocationsProposalsProvider(model, dataProvider); for (int column = 0; column < 10; column++) { final AssistantContext context = new NatTableAssistantContext(column, 0); final RedContentProposal[] proposals = provider.getProposals("a_bc", 2, context); assertThat(proposals).isEmpty(); } } @Test public void thereAreNoResourcesProposalsProvided_whenInColumnOtherThanFirstOfResourceSetting() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.RESOURCES, new ResourceImport(RobotToken.create("Resource"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final ResourceFileLocationsProposalsProvider provider = new ResourceFileLocationsProposalsProvider(model, dataProvider); for (int column = 0; column < 10; column++) { if (column == 1) { continue; } final AssistantContext context = new NatTableAssistantContext(column, 0); final RedContentProposal[] proposals = provider.getProposals("a_bc", 2, context); assertThat(proposals).isEmpty(); } } @Test public void thereAreResourcesProposalsProvided_whenInFirstColumnOfResourceSetting() { final Text text = new Text(shellProvider.getShell(), SWT.SINGLE); text.setText("a_bc"); final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.RESOURCES, new ResourceImport(RobotToken.create("Resource"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final ResourceFileLocationsProposalsProvider provider = new ResourceFileLocationsProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals(text.getText(), 2, context); assertThat(proposals).hasSize(1); proposals[0].getModificationStrategy().insert(text, proposals[0]); assertThat(text.getText()).isEqualTo("a_res.robot"); } @Test public void thereAreNoVariablesProposalsProvided_whenNothingMatchesToCurrentPrefix() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.VARIABLES, new VariablesImport(RobotToken.create("Variables"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final VariableFileLocationsProposalsProvider provider = new VariableFileLocationsProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals("anything", 2, context); assertThat(proposals).isEmpty(); } @Test public void thereAreNoVariablesProposalsProvided_whenInAnyColumnNotAVariablesSetting() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.LIBRARIES, new LibraryImport(RobotToken.create("Library"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final VariableFileLocationsProposalsProvider provider = new VariableFileLocationsProposalsProvider(model, dataProvider); for (int column = 0; column < 10; column++) { final AssistantContext context = new NatTableAssistantContext(column, 0); final RedContentProposal[] proposals = provider.getProposals("a_bc", 2, context); assertThat(proposals).isEmpty(); } } @Test public void thereAreNoVariablesProposalsProvided_whenInColumnOtherThanFirstOfVariablesSetting() { final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.VARIABLES, new VariablesImport(RobotToken.create("Variables"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final VariableFileLocationsProposalsProvider provider = new VariableFileLocationsProposalsProvider(model, dataProvider); for (int column = 0; column < 10; column++) { if (column == 1) { continue; } final AssistantContext context = new NatTableAssistantContext(column, 0); final RedContentProposal[] proposals = provider.getProposals("a_bc", 2, context); assertThat(proposals).isEmpty(); } } @Test public void thereAreVariablesProposalsProvided_whenInFirstColumnOfVariablesSetting() { final Text text = new Text(shellProvider.getShell(), SWT.SINGLE); text.setText("a_bc"); final RobotSuiteFile model = new RobotModel().createSuiteFile(projectProvider.getFile("suite.robot")); final RobotSetting setting = new RobotSetting(null, SettingsGroup.VARIABLES, new VariablesImport(RobotToken.create("Variables"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final VariableFileLocationsProposalsProvider provider = new VariableFileLocationsProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals(text.getText(), 2, context); assertThat(proposals).hasSize(1); proposals[0].getModificationStrategy().insert(text, proposals[0]); assertThat(text.getText()).isEqualTo("a_vars.py"); } @Test public void thereAreNoLibrariesProposalsProvided_whenNothingMatchesCurrentPrefix() { final RobotModel robotModel = new RobotModel(); final RobotSuiteFile model = robotModel.createSuiteFile(projectProvider.getFile("suite.robot")); final RobotProject robotProject = robotModel.createRobotProject(projectProvider.getProject()); robotProject.setStandardLibraries(createStandardLibraries()); final RobotSetting setting = new RobotSetting(null, SettingsGroup.LIBRARIES, new LibraryImport(RobotToken.create("Library"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final LibrariesProposalsProvider provider = new LibrariesProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals("xyz", 1, context); assertThat(proposals).isEmpty(); } @Test public void thereAreNoLibrariesProposalsProvided_whenInFirstOfNonLibrarySetting() { final RobotModel robotModel = new RobotModel(); final RobotSuiteFile model = robotModel.createSuiteFile(projectProvider.getFile("suite.robot")); final RobotProject robotProject = robotModel.createRobotProject(projectProvider.getProject()); robotProject.setStandardLibraries(createStandardLibraries()); final RobotSetting setting = new RobotSetting(null, SettingsGroup.RESOURCES, new ResourceImport(RobotToken.create("Resource"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final LibrariesProposalsProvider provider = new LibrariesProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals("abc", 1, context); assertThat(proposals).isEmpty(); } @Test public void thereAreNoLibrariesProposalsProvided_whenInColumnOtherThanFirstOfLibrarySetting() { final RobotModel robotModel = new RobotModel(); final RobotSuiteFile model = robotModel.createSuiteFile(projectProvider.getFile("suite.robot")); final RobotProject robotProject = robotModel.createRobotProject(projectProvider.getProject()); robotProject.setStandardLibraries(createStandardLibraries()); final RobotSetting setting = new RobotSetting(null, SettingsGroup.LIBRARIES, new LibraryImport(RobotToken.create("Library"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final LibrariesProposalsProvider provider = new LibrariesProposalsProvider(model, dataProvider); for (int column = 0; column < 10; column++) { if (column == 1) { continue; } final AssistantContext context = new NatTableAssistantContext(column, 0); final RedContentProposal[] proposals = provider.getProposals("abc", 1, context); assertThat(proposals).isEmpty(); } } @Test public void thereAreLibrariesProposalsProvided_whenInFirstColumnOfLibrarySetting() { final Text text = new Text(shellProvider.getShell(), SWT.SINGLE); text.setText("abc"); final RobotModel robotModel = new RobotModel(); final RobotSuiteFile model = robotModel.createSuiteFile(projectProvider.getFile("suite.robot")); final RobotProject robotProject = robotModel.createRobotProject(projectProvider.getProject()); robotProject.setStandardLibraries(createStandardLibraries()); final RobotSetting setting = new RobotSetting(null, SettingsGroup.LIBRARIES, new LibraryImport(RobotToken.create("Library"))); @SuppressWarnings("unchecked") final IRowDataProvider<Object> dataProvider = mock(IRowDataProvider.class); when(dataProvider.getRowObject(0)).thenReturn(setting); final LibrariesProposalsProvider provider = new LibrariesProposalsProvider(model, dataProvider); final AssistantContext context = new NatTableAssistantContext(1, 0); final RedContentProposal[] proposals = provider.getProposals(text.getText(), 1, context); assertThat(proposals).hasSize(1); proposals[0].getModificationStrategy().insert(text, proposals[0]); assertThat(text.getText()).isEqualTo("aLib"); } private static Map<String, LibrarySpecification> createStandardLibraries() { final Map<String, LibrarySpecification> stdLibs = new HashMap<>(); for (final String libName : newArrayList("aLib", "bLib")) { final LibrarySpecification stdLib = new LibrarySpecification(); stdLib.setName(libName); stdLibs.put(stdLib.getName(), stdLib); } return stdLibs; } }