/*
* Copyright Technophobia Ltd 2012
*
* This file is part of Substeps.
*
* Substeps is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Substeps is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Substeps. If not, see <http://www.gnu.org/licenses/>.
*/
package com.technophobia.substeps.runner.syntax;
import static org.hamcrest.CoreMatchers.any;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import java.io.File;
import java.util.List;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.technophobia.substeps.model.ParentStep;
import com.technophobia.substeps.model.PatternMap;
import com.technophobia.substeps.model.exception.SubstepsParsingException;
public class SubStepDefinitionParserTest {
private static final boolean FAIL_ON_DUPLICATE_SUBSTEPS = true;
private static final boolean DO_NOT_FAIL_ON_DUPLICATE_SUBSTEPS = !FAIL_ON_DUPLICATE_SUBSTEPS;
private SyntaxErrorReporter errorReporter;
private SubStepDefinitionParser parser;
@Before
public void initialiseDependencies() {
this.errorReporter = mock(SyntaxErrorReporter.class);
}
@Test
public void shouldReportDuplicateDefinition() {
this.parser = new SubStepDefinitionParser(DO_NOT_FAIL_ON_DUPLICATE_SUBSTEPS, this.errorReporter);
this.parser.parseSubStepFile(new File(
"./target/test-classes/com/technophobia/substeps/runner/syntax/duplicate-definition.substeps"));
verify(this.errorReporter).reportSubstepsError(argThat(is(any(SubstepsParsingException.class))));
}
@Test
public void shouldReportEmptyDefinition() {
this.parser = new SubStepDefinitionParser(DO_NOT_FAIL_ON_DUPLICATE_SUBSTEPS, this.errorReporter);
this.parser.parseSubStepFile(new File(
"./target/test-classes/com/technophobia/substeps/runner/syntax/empty-definition.substeps"));
verify(this.errorReporter).reportSubstepsError(argThat(is(any(SubstepsParsingException.class))));
}
@Test
public void testCommentOnEol() {
this.parser = new SubStepDefinitionParser(FAIL_ON_DUPLICATE_SUBSTEPS, this.errorReporter);
final PatternMap<ParentStep> substepDefs = this.parser.loadSubSteps(new File(
"./target/test-classes/com/technophobia/substeps/runner/syntax/eol-comment.substeps"));
Assert.assertNotNull(substepDefs);
final String def1 = "something else";
List<ParentStep> list = substepDefs.get(def1);
Assert.assertThat(list, hasSize(1));
ParentStep parentStep = list.get(0);
String line = parentStep.getParent().getLine();
Assert.assertThat(line, is(def1));
final String def2 = "and something different";
list = substepDefs.get(def2);
Assert.assertThat(list, hasSize(1));
parentStep = list.get(0);
line = parentStep.getParent().getLine();
Assert.assertThat(line, is(def2));
final String commentedDefine = "a normal comment";
list = substepDefs.get(commentedDefine);
Assert.assertThat(list, empty());
}
@Ignore
@Test
public void shouldReportDuplicateFinalDefinition() {
// TODO: work out what the other condition is
fail("Not yet implemented");
}
@Ignore
@Test
public void shouldReportEmptyFinalDefinition() {
// TODO: work out what the other condition is
fail("Not yet implemented");
}
@Ignore
@Test
public void shouldNotLoadEmptySubStepDefinitions() {
fail("This was copied from a previous test, but may be invalid.");
final SubStepDefinitionParser parser = new SubStepDefinitionParser(new DefaultSyntaxErrorReporter());
final PatternMap<ParentStep> loadedSubSteps = parser.loadSubSteps(new File(
"./target/test-classes/substeps/error.substeps"));
Assert.assertFalse(loadedSubSteps.containsPattern("An empty substep definition"));
}
}