aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story')
-rw-r--r--javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story500
1 files changed, 500 insertions, 0 deletions
diff --git a/javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story b/javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story
new file mode 100644
index 000000000..9f6ee243d
--- /dev/null
+++ b/javaparser-testing/src/test/resources/com/github/javaparser/bdd/parsing_scenarios.story
@@ -0,0 +1,500 @@
+Scenario: Test declaration as String for constructor on parsed class
+
+Given a CompilationUnit
+When the following source is parsed:
+class ClassWithAConstructor {
+ protected ClassWithAConstructor(int a, String b) throws This, AndThat, AndWhatElse {
+ }
+}
+Then constructor 1 in class 1 declaration as a String is "protected ClassWithAConstructor(int a, String b) throws This, AndThat, AndWhatElse"
+Then all nodes refer to their parent
+
+
+Scenario: Test declaration as String exclusing modifiers and throws for constructor on parsed class
+
+Given a CompilationUnit
+When the following source is parsed:
+class ClassWithAConstructor {
+ protected ClassWithAConstructor(int a, String b) throws This, AndThat, AndWhatElse {
+ }
+}
+Then constructor 1 in class 1 declaration short form as a String is "ClassWithAConstructor(int a, String b)"
+Then all nodes refer to their parent
+
+
+Scenario: Test declaration as String exclusing modifiers and throws for method on parsed class
+
+Given a CompilationUnit
+When the following source is parsed:
+class ClassWithAMethod {
+ /*comment1*/
+ final protected /*comment2*/ native List<String> /*comment2*/ aMethod(int a, String b) throws /*comment3*/ This, AndThat, AndWhatElse {
+
+ }
+}
+Then method 1 in class 1 declaration as a String is "protected final native List<String> aMethod(int a, String b) throws This, AndThat, AndWhatElse"
+Then all nodes refer to their parent
+
+
+Scenario: Test declaration as String exclusing modifiers and throws for method on parsed class
+
+Given a CompilationUnit
+When the following source is parsed:
+class ClassWithAMethod {
+ /*comment1*/
+ final protected /*comment2*/ native List<String> /*comment2*/ aMethod(int a, String b) throws /*comment3*/ This, AndThat, AndWhatElse {
+
+ }
+}
+Then method 1 in class 1 declaration as a String short form is "List<String> aMethod(int a, String b)"
+Then all nodes refer to their parent
+
+
+Scenario: The same class source is parsed by two different compilation units and should therefore be equal
+
+Given a CompilationUnit
+Given a second CompilationUnit
+When the following source is parsed:
+package japa.parser.comments;
+public class ClassEquality {
+
+ public void aMethod(){
+ // first comment
+ int a=0; // second comment
+ }
+}
+When the following sources is parsed by the second CompilationUnit:
+package japa.parser.comments;
+public class ClassEquality {
+
+ public void aMethod(){
+ // first comment
+ int a=0; // second comment
+ }
+}
+Then the CompilationUnit is equal to the second CompilationUnit
+Then the CompilationUnit has the same hashcode to the second CompilationUnit
+Then all nodes refer to their parent
+Then all nodes of the second compilation unit refer to their parent
+
+
+Scenario: Two different class sources are parsed by two different compilation units and should not be equal
+
+Given a CompilationUnit
+Given a second CompilationUnit
+When the following source is parsed:
+package japa.parser.comments;
+public class ClassEquality {
+
+ public void aMethod(){
+ // first comment
+ int a=0; // second comment
+ }
+}
+When the following sources is parsed by the second CompilationUnit:
+package japa.parser.comments;
+public class DifferentClass {
+
+ public void aMethod(){
+ // first comment
+ int a=0; // second comment
+ }
+}
+Then the CompilationUnit is not equal to the second CompilationUnit
+Then the CompilationUnit has a different hashcode to the second CompilationUnit
+Then all nodes refer to their parent
+Then all nodes of the second compilation unit refer to their parent
+
+
+Scenario: Classes that only differ by comments should not be equal or have the same hashcode
+
+Given a CompilationUnit
+Given a second CompilationUnit
+When the following source is parsed:
+package japa.parser.comments;
+public class ClassEquality {
+
+ public void aMethod(){
+ // first comment
+ int a=0; // second comment
+ }
+}
+When the following sources is parsed by the second CompilationUnit:
+package japa.parser.comments;
+public class ClassEquality {
+
+ public void aMethod(){
+ // first comment
+ int a=0;
+ }
+}
+Then the CompilationUnit is not equal to the second CompilationUnit
+Then the CompilationUnit has a different hashcode to the second CompilationUnit
+Then all nodes refer to their parent
+Then all nodes of the second compilation unit refer to their parent
+
+
+Scenario: A class with a colon in the annoation value is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+package japa.parser.ast;
+import org.junit.Test;
+public class Issue37 {
+ public static @interface SomeAnnotation {
+ String value();
+ }
+ // Parser bug: the type of this field
+ @SomeAnnotation("http://someURL.org/")
+ protected Test test;
+}
+Then field 1 in class 1 contains annotation 1 value is ""http://someURL.org/""
+Then all nodes refer to their parent
+
+
+Scenario: A class with a Lambda is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+package bdd.samples;
+import java.util.stream.Stream;
+public class Lambdas {
+
+ public static void main(String[] args) {
+ // Lambda Runnable
+ Runnable r1 = () -> System.out.println("Hello world!");
+ Runnable r2 = () -> {};
+ Runnable r3 = () -> { System.out.println("Hello world two!"); };
+
+ Stream<CharSequence> stream = Stream.generate((Supplier<CharSequence>) () -> "foo");
+ }
+}
+Then lambda in statement 1 in method 1 in class 1 is called r1
+Then lambda in statement 2 in method 1 in class 1 is called r2
+Then lambda in statement 3 in method 1 in class 1 is called r3
+Then lambda in statement 1 in method 1 in class 1 body is "System.out.println("Hello world!");"
+Then lambda in statement 2 in method 1 in class 1 block statement is null
+Then lambda in statement 3 in method 1 in class 1 block statement is "System.out.println("Hello world two!");"
+Then lambda in statement 1 in method 1 in class 1 is parent of contained body
+Then lambda in statement 3 in method 1 in class 1 is parent of contained body
+Then all nodes refer to their parent
+Then lambda in method call in statement 4 in method 1 in class 1 body is ""foo";"
+
+
+Scenario: A class with parameterized Lambdas is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+package com.github.javapasrser.bdd.parsing;
+import java.util.function.Function;
+public class ParameterizedLambdas {
+ public static void main(String[] args) {
+ Function<Integer,String> f1 = (Integer i) -> String.valueOf(i);
+ Function<Integer,String> f2 = (i) -> String.valueOf(i);
+ Function<Integer,String> f3 = i -> String.valueOf(i);
+ }
+}
+Then lambda in statement 1 in method 1 in class 1 is parent of contained parameter
+Then lambda in statement 2 in method 1 in class 1 is parent of contained parameter
+Then lambda in statement 3 in method 1 in class 1 is parent of contained parameter
+Then lambda in statement 1 in method 1 in class 1 is parent of contained body
+Then lambda in statement 2 in method 1 in class 1 is parent of contained body
+Then lambda in statement 3 in method 1 in class 1 is parent of contained body
+Then lambda in statement 1 in method 1 in class 1 has parameters with non-null type
+Then lambda in statement 2 in method 1 in class 1 has parameters with non-null type
+Then lambda in statement 3 in method 1 in class 1 has parameters with non-null type
+
+
+Scenario: A class with multi-parameters Lambdas is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+package com.github.javapasrser.bdd.parsing;
+import java.util.function.Function;
+public class MultiParameterizedLambdas {
+ public static void main(String[] args) {
+ BiFunction<Integer, Integer, String> f = (a, b) -> String.valueOf(a) + String.valueOf(b);
+ }
+}
+Then lambda in statement 1 in method 1 in class 1 has parameters with non-null type
+
+
+Scenario: A class with a method reference is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+public class Person {
+
+ String name;
+ LocalDate birthday;
+
+ public void sortByAge(Person[] people){
+ Arrays.sort(people, Person::compareByAge);
+ }
+
+ public static int compareByAge(Person a, Person b) {
+ return a.birthday.compareTo(b.birthday);
+ }
+}
+Then method reference in statement 1 in method 1 in class 1 scope is Person
+Then method reference in statement 1 in method 1 in class 1 identifier is compareByAge
+Then all nodes refer to their parent
+
+
+Scenario: An interface with a default method is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+interface MyInterface {
+ default String doSomething(){
+ return "implementation in an interface!";
+ }
+
+ String doSomethingElse();
+}
+Then method 1 class 1 is a default method
+Then method 2 class 1 is not a default method
+Then all nodes refer to their parent
+
+Scenario: A lambda expression inside a conditional expression is parsed by the Java Parser
+
+Given a CompilationUnit
+When the following source is parsed:
+public class A{
+ static <T> Predicate<T> isEqual(Object targetRef) {
+ return (null == targetRef)? Objects::isNull : object -> targetRef.equals(object);
+ }
+}
+Then ThenExpr in the conditional expression of the statement 1 in method 1 in class 1 is LambdaExpr
+
+Scenario: Parsing array creation expressions the positions are correct
+
+Given a CompilationUnit
+When the following source is parsed (trimming space):
+public class A{
+ int[][] a = new int[][]{};
+}
+When I take the ArrayCreationExpr
+Then the begin line is 2
+Then the begin column is 17
+Then the end line is 2
+Then the end column is 29
+
+Scenario: simple cast on lambda expression can be parsed
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ static final Comparator<ChronoLocalDate> DATE_ORDER =
+ (Comparator<ChronoLocalDate>) (date1, date2) -> {
+ return Long.compare(date1.toEpochDay(), date2.toEpochDay());
+ };
+}
+Then all nodes refer to their parent
+
+
+Scenario: a combined cast on lambda expression can be parsed
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ static final Comparator<ChronoLocalDate> DATE_ORDER =
+ (Comparator<ChronoLocalDate> & Serializable) (date1, date2) -> {
+ return Long.compare(date1.toEpochDay(), date2.toEpochDay());
+ };
+}
+Then all nodes refer to their parent
+
+
+Scenario: a combined cast on a literal can be parsed
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ static int a = (Comparator<ChronoLocalDate> & Serializable) 1;
+}
+Then all nodes refer to their parent
+
+
+Scenario: Parsing excess semicolons on CompilationUnit level should work
+Given a CompilationUnit
+When the following source is parsed:
+;
+package a;
+;
+import foo.a;
+;
+class A { }
+;
+Then no errors are reported
+
+Scenario: Parsing excess semicolons in an AnnotationTypeDeclaration should work
+Given a CompilationUnit
+When the following source is parsed:
+@interface A {
+ ;
+ ;
+}
+Then no errors are reported
+
+Scenario: Classes that are thrown from a method can be annotated
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ void a() throws @Abc X {
+ }
+}
+Then no errors are reported
+
+Scenario: Classes that are thrown from a constructor can be annotated
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ A() throws @Abc X {
+ }
+}
+Then no errors are reported
+
+
+Scenario: Parsing trailing semicolons inside the imports area should work
+
+Given a CompilationUnit
+When the following source is parsed:
+import foo.a;;
+import foo.b;
+
+class A {
+}
+Then no errors are reported
+
+
+Scenario: Full package name should be parsed
+
+Given a CompilationUnit
+When the following source is parsed:
+package com.github.javaparser.bdd;
+class C {}
+When I take the PackageDeclaration
+Then the package name is com.github.javaparser.bdd
+
+
+Scenario: Strings with unescaped newlines are illegal (issue 211)
+Given the class:
+class A {
+ public void helloWorld(String greeting, String name) {
+ return "hello
+ world";
+ }
+}
+Then the Java parser cannot parse it because of an error
+
+Scenario: Chars with unescaped newlines are illegal (issue 211)
+Given the class:
+class A {
+ public void helloWorld(String greeting, String name) {
+ return '
+';
+ }
+}
+Then the Java parser cannot parse it because of an error
+
+Scenario: Diamond Operator information is exposed
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ List<String> args = new ArrayList<>();
+}
+When I take the ObjectCreationExpr
+Then the type's diamond operator flag should be true
+
+Scenario: Diamond Operator can be parsed also with space and comments
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ List<String> args = new ArrayList< /*hello*/ >();
+}
+When I take the ObjectCreationExpr
+Then the type's diamond operator flag should be true
+
+Scenario: Type Arguments are not specified
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ List args = new ArrayList();
+}
+When I take the ObjectCreationExpr
+Then the type's diamond operator flag should be false
+
+Scenario: Type Arguments are specified
+
+Given a CompilationUnit
+When the following source is parsed:
+class A {
+ Either<Ok, Error> either = new Either<Ok, Error>();
+}
+When I take the ObjectCreationExpr
+Then the type's diamond operator flag should be false
+
+Scenario: A method reference with type arguments is parsed correctly
+Given a CompilationUnit
+When the following source is parsed:
+class X {
+ void x() {
+ a.orElseGet( Stream::<IVariable<?>>empty );
+ }
+}
+Then no errors are reported
+
+Scenario: The target of this assignExpr is not null
+Given a CompilationUnit
+When the following source is parsed:
+public class Example {
+ private String mString;
+ public Example(String arg) {
+ mString = arg;
+ }
+}
+Then the assignExpr produced doesn't have a null target
+
+Scenario: Two comments in one line, and a unicode space
+Given a CompilationUnit
+When the following source is parsed:
+public class Example {
+ Object mAvailablePrimaryConnection;
+ public Example(String arg) {
+ ​mAvailablePrimaryConnection = openConnectionLocked(mConfiguration,
+ true /*primaryConnection*/); // comment
+ }
+}
+Then no errors are reported
+
+Scenario: alternative [] placings
+Given a CompilationUnit
+When the following source is parsed:
+class I{int[]bar(int[]x[])[]{return new int[][]{};}}
+Then no errors are reported
+
+Scenario: try requires resources, a finally or a catch (issue 442)
+Given the class:
+class A {
+ public void helloWorld() {
+ try {
+ }
+ }
+}
+Then the Java parser cannot parse it because of an error
+
+
+Scenario: Partially dimensioned arrays are fine
+Given a CompilationUnit
+When the following source is parsed:
+class X {
+ int a = new int @A [10] @A [20] @A [] [];
+ int b = new int @A [] @A []{{1}};
+}
+Then no errors are reported