/* * 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.model.cmd.variables; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import org.eclipse.e4.core.services.events.IEventBroker; import org.junit.Test; import org.rf.ide.core.testdata.model.table.variables.AVariable.VariableType; import org.robotframework.ide.eclipse.main.plugin.mockeclipse.ContextInjector; import org.robotframework.ide.eclipse.main.plugin.mockmodel.RobotSuiteFileCreator; import org.robotframework.ide.eclipse.main.plugin.model.RobotModelEvents; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.model.RobotVariable; import org.robotframework.ide.eclipse.main.plugin.model.RobotVariablesSection; import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.InsertVariablesCommand; public class InsertVariablesCommandTest { @Test public void variablesAreAddedAtTheEndOfSectionProperly() { final IEventBroker eventBroker = mock(IEventBroker.class); final RobotVariablesSection variablesSection = createVariables(); final RobotVariable[] variablesToInsert = createVariablesToInsert(); ContextInjector.prepareContext() .inWhich(eventBroker) .isInjectedInto(new InsertVariablesCommand(variablesSection, variablesToInsert)) .execute(); assertThat(variablesSection.getChildren()).hasSize(7); final RobotVariable firstAdded = variablesSection.getChildren().get(5); final RobotVariable secondAdded = variablesSection.getChildren().get(6); assertThat(firstAdded.getType()).isEqualTo(VariableType.SCALAR); assertThat(firstAdded.getName()).isEqualTo("a"); assertThat(firstAdded.getValue()).isEqualTo("0"); assertThat(firstAdded.getComment()).isEqualTo("# comment1"); assertThat(secondAdded.getType()).isEqualTo(VariableType.LIST); assertThat(secondAdded.getName()).isEqualTo("b"); assertThat(secondAdded.getValue()).isEqualTo("[1, 2, 3]"); assertThat(secondAdded.getComment()).isEqualTo("# comment2"); verify(eventBroker).send(RobotModelEvents.ROBOT_VARIABLE_ADDED, variablesSection); } @Test public void variablesAreAddedAtGivenIndex() { final IEventBroker eventBroker = mock(IEventBroker.class); final RobotVariablesSection variablesSection = createVariables(); final RobotVariable[] variablesToInsert = createVariablesToInsert(); ContextInjector.prepareContext() .inWhich(eventBroker) .isInjectedInto(new InsertVariablesCommand(variablesSection, 3, variablesToInsert)) .execute(); assertThat(variablesSection.getChildren()).hasSize(7); final RobotVariable firstAdded = variablesSection.getChildren().get(3); final RobotVariable secondAdded = variablesSection.getChildren().get(4); assertThat(firstAdded.getType()).isEqualTo(VariableType.SCALAR); assertThat(firstAdded.getName()).isEqualTo("a"); assertThat(firstAdded.getValue()).isEqualTo("0"); assertThat(firstAdded.getComment()).isEqualTo("# comment1"); assertThat(secondAdded.getType()).isEqualTo(VariableType.LIST); assertThat(secondAdded.getName()).isEqualTo("b"); assertThat(secondAdded.getValue()).isEqualTo("[1, 2, 3]"); assertThat(secondAdded.getComment()).isEqualTo("# comment2"); verify(eventBroker).send(RobotModelEvents.ROBOT_VARIABLE_ADDED, variablesSection); } private static RobotVariablesSection createVariables() { final RobotSuiteFile model = new RobotSuiteFileCreator().appendLine("*** Variables ***") .appendLine("${scalar} 0") .appendLine("${scalar_as_list} 0 1 2") .appendLine("@{list} 1 2 3") .appendLine("&{dict} a=1 b=2 c=3 d=4") .appendLine("invalid} 1 2 3") .build(); return model.findSection(RobotVariablesSection.class).get(); } private static RobotVariable[] createVariablesToInsert() { final RobotSuiteFile model = new RobotSuiteFileCreator().appendLine("*** Variables ***") .appendLine("${a} 0 # comment1") .appendLine("@{b} 1 2 3 # comment2") .build(); return model.findSection(RobotVariablesSection.class).get().getChildren().toArray(new RobotVariable[0]); } }