aboutsummaryrefslogtreecommitdiff
path: root/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java')
-rw-r--r--javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java
new file mode 100644
index 000000000..ba20eaf16
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/VisitorSteps.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2016 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) 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.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser 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.
+ */
+
+package com.github.javaparser.bdd.steps;
+
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.visitor.CloneVisitor;
+import com.github.javaparser.ast.visitor.GenericListVisitorAdapter;
+import com.github.javaparser.ast.visitor.GenericVisitorAdapter;
+import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
+import com.github.javaparser.bdd.visitors.PositionTestVisitor;
+import org.jbehave.core.annotations.Given;
+import org.jbehave.core.annotations.Then;
+import org.jbehave.core.annotations.When;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class VisitorSteps {
+
+ /* Fields used to maintain step state within this step class */
+ private VoidVisitorAdapter<AtomicReference<String>> toUpperCaseVariableNameVisitor;
+ private VoidVisitorAdapter<AtomicReference<String>> collectVariableNameVisitor;
+ private PositionTestVisitor positionTestVisitor;
+ private GenericVisitorAdapter<String, Void> nameReturningVisitor;
+ private GenericListVisitorAdapter<String, Void> allNameReturningVisitor;
+ private AtomicReference<String> collectedVariableName;
+ private String returnedVariableName;
+ private List<String> returnedVariableNames;
+
+ /* Map that maintains shares state across step classes. If manipulating the objects in the map you must update the state */
+ private Map<String, Object> state;
+
+ public VisitorSteps(Map<String, Object> state) {
+ this.state = state;
+ }
+
+ @Given("a VoidVisitorAdapter with a visit method that changes variable names to uppercase")
+ public void givenAVoidVisitorAdapterWithAVisitMethodThatChangesVariableNamesToUppercase() {
+ toUpperCaseVariableNameVisitor = new VoidVisitorAdapter<AtomicReference<String>>() {
+ @Override
+ public void visit(VariableDeclarator n, AtomicReference<String> arg) {
+ n.setName(n.getNameAsString().toUpperCase());
+ }
+ };
+ }
+
+ @Given("a VoidVisitorAdapter with a visit method and collects the variable names")
+ public void givenAVoidVisitorAdapterWithAVisitMethodThatCollectsTheVariableName() {
+ collectVariableNameVisitor = new VoidVisitorAdapter<AtomicReference<String>>() {
+ @Override
+ public void visit(VariableDeclarator n, AtomicReference<String> arg) {
+ arg.set(arg.get() + n.getName() + ";");
+ }
+
+ @Override
+ public void visit(Parameter n, AtomicReference<String> arg) {
+ arg.set(arg.get() + n.getName() + ";");
+ }
+ };
+ }
+
+ @Given("a GenericVisitorAdapter with a visit method that returns variable names")
+ public void givenAGenericVisitorAdapterWithAVisitMethodThatReturnsVariableNames() {
+ nameReturningVisitor = new GenericVisitorAdapter<String, Void>() {
+ @Override
+ public String visit(VariableDeclarator n, Void arg) {
+ return n.getNameAsString();
+ }
+ };
+ }
+
+ @Given("a GenericListVisitorAdapter with a visit method that returns all variable names")
+ public void givenAGenericListVisitorAdapterWithAVisitMethodThatReturnsAllVariableNames() {
+ allNameReturningVisitor = new GenericListVisitorAdapter<String, Void>() {
+ @Override
+ public List<String> visit(VariableDeclarator n, Void arg) {
+ return Collections.singletonList(n.getNameAsString());
+ }
+ };
+ }
+
+ @Given("a VoidVisitorAdapter with a visit method that asserts sensible line positions")
+ public void givenAVoidVisitorAdapterWithAVisitMethodThatAssertsSensibleLinePositions() {
+ positionTestVisitor = new PositionTestVisitor();
+ }
+
+ @When("the CompilationUnit is cloned to the second CompilationUnit")
+ public void whenTheSecondCompilationUnitIsCloned() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ CompilationUnit compilationUnit2 = (CompilationUnit) compilationUnit.accept(new CloneVisitor(), null);
+ state.put("cu2", compilationUnit2);
+ }
+
+ @When("the CompilationUnit is visited by the to uppercase visitor")
+ public void whenTheCompilationUnitIsVisitedByTheVistor() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ toUpperCaseVariableNameVisitor.visit(compilationUnit, null);
+ state.put("cu1", compilationUnit);
+ }
+
+ @When("the CompilationUnit is visited by the variable name collector visitor")
+ public void whenTheCompilationUnitIsVisitedByTheVariableNameCollectorVisitor() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ collectedVariableName = new AtomicReference<>("");
+ collectVariableNameVisitor.visit(compilationUnit, collectedVariableName);
+ }
+
+ @When("the CompilationUnit is visited by the visitor that returns variable names")
+ public void whenTheCompilationUnitIsVisitedByTheVisitorThatReturnsVariableNames() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ returnedVariableName = nameReturningVisitor.visit(compilationUnit, null);
+ }
+
+ @When("the CompilationUnit is visited by the visitor that returns all variable names")
+ public void whenTheCompilationUnitIsVisitedByTheVisitorThatReturnsAllVariableNames() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ returnedVariableNames = allNameReturningVisitor.visit(compilationUnit, null);
+ }
+
+ @When("the CompilationUnit is visited by the PositionTestVisitor")
+ public void whenTheCompilationUnitIsVisitedByThePositionTestVisitor() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ compilationUnit.accept(positionTestVisitor, null);
+ }
+
+ @Then("the collected variable name is \"$nameUnderTest\"")
+ public void thenTheCollectedVariableNameIs(String nameUnderTest) {
+ assertThat(collectedVariableName.get(), is(nameUnderTest));
+ }
+
+ @Then("the return variable name is \"$nameUnderTest\"")
+ public void thenTheReturnVariableNameIs(String nameUnderTest) {
+ assertThat(returnedVariableName, is(nameUnderTest));
+ }
+
+ @Then("the first return variable name is \"$nameUnderTest\"")
+ public void thenTheFirstReturnVariableNameIs(String nameUnderTest) {
+ assertThat(returnedVariableNames.get(0), is(nameUnderTest));
+ }
+
+ @Then("the total number of nodes visited is $expectedCount")
+ public void thenTheTotalNumberOfNodesVisitedIs(int expectedCount) {
+ assertThat(positionTestVisitor.getNumberOfNodesVisited(), is(expectedCount));
+ }
+}