/*
* 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.variables;
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import java.util.List;
import org.junit.Test;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.robotframework.ide.eclipse.main.plugin.mockmodel.RobotSuiteFileCreator;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.model.RobotVariablesSection;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.CreateCompoundVariableValueElementCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.MoveListVariableValueElementsCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.RemoveListVariableValueElementsCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.SetListVariableValueElementCommand;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotEditorCommandsStack;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.TableThemes.TableTheme;
public class ListVariableDetailsEditingSupportTest {
@Test(expected = IllegalStateException.class)
public void exceptionIsThrownWhenTryingToGetInputOfScalar() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
support.getInput(0, 0);
}
@Test(expected = IllegalStateException.class)
public void exceptionIsThrownWhenTryingToGetInputOfDictionary() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
support.getInput(0, 3);
}
@Test
public void theInputIsListOfTokens_whenScalarAsListIsGiven() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 1);
assertThat(input).hasSize(3);
assertThat(input.get(0).getText()).isEqualTo("0");
assertThat(input.get(1).getText()).isEqualTo("1");
assertThat(input.get(2).getText()).isEqualTo("2");
}
@Test
public void theInputIsListOfTokens_whenListIsGiven() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 2);
assertThat(input).hasSize(3);
assertThat(input.get(0).getText()).isEqualTo("1");
assertThat(input.get(1).getText()).isEqualTo("2");
assertThat(input.get(2).getText()).isEqualTo("3");
}
@Test
public void theInputIsListOfTokens_whenInvalidIsGiven() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 4);
assertThat(input).hasSize(1);
assertThat(input.get(0).getText()).isEqualTo("0");
}
@Test(expected = IllegalStateException.class)
public void itIsIllegalToGetDetailElementsWhenInputWasNotTakenFirst() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
support.getDetailElements();
}
@Test
public void detailElementsAreReturnedProperly_whenInputWasTakenFirst() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = new RobotEditorCommandsStack();
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
support.getInput(0, 2);
final List<RobotToken> input = support.getDetailElements();
assertThat(input).hasSize(3);
assertThat(input.get(0).getText()).isEqualTo("1");
assertThat(input.get(1).getText()).isEqualTo("2");
assertThat(input.get(2).getText()).isEqualTo("3");
}
@Test
public void newDetailElementAdditionIsRequestedUsingCommandsStack() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = spy(new RobotEditorCommandsStack());
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
support.getInput(0, 1);
support.addNewDetailElement("42");
verify(commandsStack).execute(isA(CreateCompoundVariableValueElementCommand.class));
assertThat(section.getChildren().get(1).getValue()).isEqualTo("[0, 1, 2, 42]");
}
@Test
public void detailRemovalIsRequestedUsingCommandsStack() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = spy(new RobotEditorCommandsStack());
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 2);
support.removeDetailElements(newArrayList(input.get(1), input.get(2)));
verify(commandsStack).execute(isA(RemoveListVariableValueElementsCommand.class));
assertThat(section.getChildren().get(2).getValue()).isEqualTo("[1]");
}
@Test
public void detailLeftMoveIsRequestedUsingCommandsStack() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = spy(new RobotEditorCommandsStack());
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 2);
support.moveLeft(newArrayList(input.get(1), input.get(2)));
verify(commandsStack).execute(isA(MoveListVariableValueElementsCommand.class));
assertThat(section.getChildren().get(2).getValue()).isEqualTo("[2, 3, 1]");
}
@Test
public void detailRightMoveIsRequestedUsingCommandsStack() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = spy(new RobotEditorCommandsStack());
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 2);
support.moveRight(newArrayList(input.get(0), input.get(1)));
verify(commandsStack).execute(isA(MoveListVariableValueElementsCommand.class));
assertThat(section.getChildren().get(2).getValue()).isEqualTo("[3, 1, 2]");
}
@Test
public void detailValueChangeIsRequestedUsingCommandsStack() {
final RobotVariablesSection section = createVariables();
final RobotEditorCommandsStack commandsStack = spy(new RobotEditorCommandsStack());
final VariablesDataProvider dataProvider = new VariablesDataProvider(commandsStack, section);
final ListVariableDetailsEditingSupport support = new ListVariableDetailsEditingSupport(mock(TableTheme.class),
dataProvider, commandsStack);
final List<RobotToken> input = support.getInput(0, 4);
support.setNewValue(input.get(0), "42");
verify(commandsStack).execute(isA(SetListVariableValueElementCommand.class));
assertThat(section.getChildren().get(4).getValue()).isEqualTo("[42]");
}
private static RobotVariablesSection createVariables() {
final RobotSuiteFile model = new RobotSuiteFileCreator().appendLine("*** Variables ***")
.appendLine("${scalar} 0 # comment 1")
.appendLine("${scalar_as_list} 0 1 2 # comment 2")
.appendLine("@{list} 1 2 3 # comment 3")
.appendLine("&{dictionary} a=1 b=2 c=3 # comment 4")
.appendLine("invalid} 0 # comment 5")
.build();
return model.findSection(RobotVariablesSection.class).get();
}
}