/*
* Copyright 2015 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.project.build.validation.versiondependent.setting;
import static org.assertj.core.api.Assertions.assertThat;
import org.eclipse.core.runtime.CoreException;
import org.junit.Before;
import org.junit.Test;
import org.rf.ide.core.testdata.model.RobotVersion;
import org.rf.ide.core.testdata.model.table.variables.AVariable.VariableScope;
import org.rf.ide.core.testdata.model.table.variables.DictionaryVariable;
import org.rf.ide.core.testdata.model.table.variables.IVariableHolder;
import org.rf.ide.core.testdata.model.table.variables.ListVariable;
import org.rf.ide.core.testdata.model.table.variables.ScalarVariable;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.validation.ProblemPosition;
import org.robotframework.ide.eclipse.main.plugin.project.build.causes.VariablesProblem;
import org.robotframework.ide.eclipse.main.plugin.project.build.validation.MockReporter;
import org.robotframework.ide.eclipse.main.plugin.project.build.validation.MockReporter.Problem;
import org.robotframework.ide.eclipse.main.plugin.project.build.validation.versiondependent.variables.ScalarAsListValidator;
import com.google.common.collect.Range;
public class ScalarAsListValidatorTest {
private MockReporter reporter;
@Before
public void beforeTest() {
reporter = new MockReporter();
}
@Test
public void validatorIsNotApplicableForVersionsUnder28() {
final ScalarAsListValidator validator = new ScalarAsListValidator(null, null, null);
assertThat(validator.isApplicableFor(RobotVersion.from("2.0"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("2.6"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("2.7"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("2.7.10"))).isFalse();
}
@Test
public void validatorIsNotApplicableForVersionsOver28() {
final ScalarAsListValidator validator = new ScalarAsListValidator(null, null, null);
assertThat(validator.isApplicableFor(RobotVersion.from("2.9"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("2.9.0"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("2.9.5"))).isFalse();
assertThat(validator.isApplicableFor(RobotVersion.from("3.0"))).isFalse();
}
@Test
public void validatorIsApplicableForVersions28x() {
final ScalarAsListValidator validator = new ScalarAsListValidator(null, null, null);
assertThat(validator.isApplicableFor(RobotVersion.from("2.8"))).isTrue();
assertThat(validator.isApplicableFor(RobotVersion.from("2.8.0"))).isTrue();
assertThat(validator.isApplicableFor(RobotVersion.from("2.8.1"))).isTrue();
assertThat(validator.isApplicableFor(RobotVersion.from("2.8.100"))).isTrue();
}
@Test
public void validatorThrowsProblem_whenScalarAsListVariableIsUsed() throws CoreException {
final ScalarVariable variable = new ScalarVariable("scalar_as_list", new RobotToken(), VariableScope.TEST_CASE);
variable.addValue(new RobotToken());
variable.addValue(new RobotToken());
final ScalarAsListValidator validator = new ScalarAsListValidator(null, variable, reporter);
validator.validate(null);
assertThat(reporter.getNumberOfReportedProblems()).isEqualTo(1);
assertThat(reporter.getReportedProblems()).containsExactly(new Problem(
VariablesProblem.SCALAR_WITH_MULTIPLE_VALUES_2_8_x, new ProblemPosition(-1, Range.closed(-1, -1))));
}
@Test
public void validatorDoesNothing_whenScalarVariableIsUsed() throws CoreException {
final ScalarVariable variable = new ScalarVariable("scalar", new RobotToken(), VariableScope.TEST_CASE);
final ScalarAsListValidator validator = new ScalarAsListValidator(null, variable, reporter);
validator.validate(null);
assertThat(reporter.wasProblemReported()).isFalse();
}
@Test
public void validatorDoesNothing_whenListVariableIsUsed() throws CoreException {
final IVariableHolder variable = new ListVariable("list", new RobotToken(), VariableScope.TEST_CASE);
final ScalarAsListValidator validator = new ScalarAsListValidator(null, variable, reporter);
validator.validate(null);
assertThat(reporter.wasProblemReported()).isFalse();
}
@Test
public void validatorDoesNothing_whenDictionaryVariableIsUsed() throws CoreException {
final IVariableHolder variable = new DictionaryVariable("dict", new RobotToken(), VariableScope.TEST_CASE);
final ScalarAsListValidator validator = new ScalarAsListValidator(null, variable, reporter);
validator.validate(null);
assertThat(reporter.wasProblemReported()).isFalse();
}
}