aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java')
-rw-r--r--javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java163
1 files changed, 163 insertions, 0 deletions
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java
new file mode 100644
index 000000000..53b7c4434
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/SharedSteps.java
@@ -0,0 +1,163 @@
+/*
+ * 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.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.BodyDeclaration;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.TypeDeclaration;
+import org.hamcrest.CoreMatchers;
+import org.jbehave.core.annotations.Given;
+import org.jbehave.core.annotations.Then;
+import org.jbehave.core.annotations.When;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Map;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNot.not;
+import static org.hamcrest.text.IsEqualIgnoringWhiteSpace.equalToIgnoringWhiteSpace;
+import static org.junit.Assert.assertThat;
+
+public class SharedSteps {
+
+ /* 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 SharedSteps(Map<String, Object> state) {
+ this.state = state;
+ }
+
+ /*
+ * Given steps
+ */
+
+ @Given("a CompilationUnit")
+ public void givenACompilationUnit() {
+ state.put("cu1", new CompilationUnit());
+ }
+
+ @Given("a second CompilationUnit")
+ public void givenASecondCompilationUnit() {
+ state.put("cu2", new CompilationUnit());
+ }
+
+ /*
+ * When steps
+ */
+
+ @When("the following source is parsed:$classSrc")
+ public void whenTheFollowingSourceIsParsed(String classSrc) {
+ state.put("cu1", JavaParser.parse(classSrc.trim()));
+ }
+
+ @When("the following source is parsed (trimming space):$classSrc")
+ public void whenTheFollowingSourceIsParsedTrimmingSpace(String classSrc) {
+ state.put("cu1", JavaParser.parse(classSrc.trim()));
+ }
+
+ @When("the following sources is parsed by the second CompilationUnit:$classSrc")
+ public void whenTheFollowingSourcesIsParsedBytTheSecondCompilationUnit(String classSrc) {
+ state.put("cu2", JavaParser.parse(classSrc.trim()));
+ }
+
+ @When("file \"$fileName\" is parsed")
+ public void whenTheJavaFileIsParsed(String fileName) throws IOException, URISyntaxException {
+ URL url = getClass().getResource("../samples/" + fileName);
+ CompilationUnit compilationUnit = JavaParser.parse(new File(url.toURI()));
+ state.put("cu1", compilationUnit);
+ }
+
+ @Then("the CompilationUnit is equal to the second CompilationUnit")
+ public void thenTheCompilationUnitIsEqualToTheSecondCompilationUnit() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ CompilationUnit compilationUnit2 = (CompilationUnit) state.get("cu2");
+
+ assertThat(compilationUnit, is(equalTo(compilationUnit2)));
+ }
+
+ @Then("the CompilationUnit has the same hashcode to the second CompilationUnit")
+ public void thenTheCompilationUnitHasTheSameHashcodeToTheSecondCompilationUnit() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ CompilationUnit compilationUnit2 = (CompilationUnit) state.get("cu2");
+
+ assertThat(compilationUnit.hashCode(), is(equalTo(compilationUnit2.hashCode())));
+ }
+
+ @Then("the CompilationUnit is not equal to the second CompilationUnit")
+ public void thenTheCompilationUnitIsNotEqualToTheSecondCompilationUnit() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ CompilationUnit compilationUnit2 = (CompilationUnit) state.get("cu2");
+
+ assertThat(compilationUnit, not(equalTo(compilationUnit2)));
+ }
+
+ @Then("the CompilationUnit has a different hashcode to the second CompilationUnit")
+ public void thenTheCompilationUnitHasADifferentHashcodeToTheSecondCompilationUnit() {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ CompilationUnit compilationUnit2 = (CompilationUnit) state.get("cu2");
+
+ assertThat(compilationUnit.hashCode(), not(equalTo(compilationUnit2.hashCode())));
+ }
+
+ @Then("the expected source should be:$classSrc")
+ public void thenTheExpectedSourcesShouldBe(String classSrc) {
+ CompilationUnit compilationUnit = (CompilationUnit) state.get("cu1");
+ assertThat(compilationUnit.toString(), CoreMatchers.is(equalToIgnoringWhiteSpace(classSrc)));
+ }
+
+ public static <T extends BodyDeclaration<?>> T getMemberByTypeAndPosition(TypeDeclaration<?> typeDeclaration, int position, Class<T> typeClass) {
+ int typeCount = 0;
+ for (BodyDeclaration<?> declaration : typeDeclaration.getMembers()) {
+ if (declaration.getClass().equals(typeClass)) {
+ if (typeCount == position) {
+ return (T) declaration;
+ }
+ typeCount++;
+ }
+ }
+ throw new IllegalArgumentException("No member " + typeClass + " at position: " + position);
+ }
+
+ public static MethodDeclaration getMethodByPositionAndClassPosition(CompilationUnit compilationUnit,
+ int methodPosition, int classPosition) {
+ TypeDeclaration<?> type = compilationUnit.getType(classPosition - 1);
+
+ int memberCount = 0;
+ int methodCount = 0;
+ for (BodyDeclaration<?> bodyDeclaration : type.getMembers()) {
+ if (bodyDeclaration instanceof MethodDeclaration) {
+ if (methodCount == methodPosition - 1) {
+ return (MethodDeclaration) type.getMember(memberCount);
+ }
+ methodCount++;
+ }
+ memberCount++;
+ }
+ throw new IllegalArgumentException("Method not found at position " + methodPosition + "in class " + classPosition);
+ }
+}