/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.services.datamodeller.parser; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.kie.workbench.common.services.datamodeller.parser.descr.ClassOrInterfaceTypeDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.DimensionDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.ElementDescriptor; import org.kie.workbench.common.services.datamodeller.parser.descr.EllipsisParameterDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.IdentifierDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.JavaTokenDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.MethodDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.ModifierDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.ModifierListDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.NormalParameterDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.ParameterListDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.PrimitiveTypeDescr; import org.kie.workbench.common.services.datamodeller.parser.descr.TypeDescr; import org.kie.workbench.common.services.datamodeller.parser.util.ParserUtil; import static org.junit.Assert.*; import static org.kie.workbench.common.services.datamodeller.parser.ParserAssert.*; public class MehodParsing1Test extends JavaParserBaseTest { private List<MethodDescr> expectedMethods; private List<String> methodSentences; public MehodParsing1Test( ) { super( "MethodParsing1.java" ); init( ); } @Test public void testMethodsSentencesReading( ) { try { assertClass( ); List<MethodDescr> methods = parser.getFileDescr( ).getClassDescr( ).getMethods( ); int i = 0; for ( String methodSentence : methodSentences ) { assertEquals( methodSentences.get( i ), ParserUtil.readElement( buffer, methods.get( i ) ) ); i++; } } catch ( Exception e ) { e.printStackTrace( ); fail( "Test failed: " + e.getMessage( ) ); } } @Test public void testClassMethods( ) { try { assertClass( ); List<MethodDescr> methods = parser.getFileDescr( ).getClassDescr( ).getMethods( ); assertEquals( expectedMethods.size( ), methods.size( ) ); for ( int i = 0; i < expectedMethods.size( ); i++ ) { assertEqualsMethodDeclaration( buffer, expectedMethods.get( i ), methods.get( i ) ); } } catch ( Exception e ) { e.printStackTrace( ); fail( "Test failed: " + e.getMessage( ) ); } } @Test public void testMethodParsingMode( ) { try { JavaParser parser; int i = 0; for ( String methodSentence : methodSentences ) { parser = JavaParserFactory.newParser( methodSentence, JavaParserBase.ParserMode.PARSE_METHOD ); parser.methodDeclaration( ); assertNotNull( parser.getMethodDescr( ) ); assertEqualsMethodDeclaration( new StringBuffer( methodSentence ), expectedMethods.get( i ), parser.getMethodDescr( ) ); i++; } } catch ( Exception e ) { e.printStackTrace( ); fail( "Test failed: " + e.getMessage( ) ); } } private void init( ) { methodSentences = new ArrayList<String>( ); methodSentences.add( "public MethodParsing1() { this(null); }" ); methodSentences.add( "public MethodParsing1(String field1) { this.field1 = field1; }" ); methodSentences.add( "public MethodParsing1(int a, int b) { this(a, b, (byte)1); }" ); methodSentences.add( "public MethodParsing1(int a, int b, byte c) { super(); }" ); methodSentences.add( "public String getField1() { return field1; }" ); methodSentences.add( "public void setField1(String field1) { this.field1 = field1; }" ); methodSentences.add( "private int method1() { return -1; }" ); methodSentences.add( "private void method2() {}" ); methodSentences.add( "public static java.lang.String method3() { return null; }" ); methodSentences.add( "public static final Integer method4() { return null; }" ); methodSentences.add( "public void method5(java.lang.Integer param1, int param2) {}" ); methodSentences.add( "java.util.List<java.lang.String> method6() { return null; }" ); methodSentences.add( "protected java.util.AbstractList<String> method7 ( final int param1 , java.lang.Integer param2 , java.util.List<java.lang.Integer> param3 ) { return null ; }" ); methodSentences.add( "int method8 ( final int param1 , java.lang.Integer param2 ) [ ] [ ] { return null; }" ); methodSentences.add( "int method9 ( final Object ... param1) { return -1;}" ); methodSentences.add( "private java.util.AbstractList<Object> method10 ( final java.lang.String param1, int param2 , List<java.util.List<String>>...param3) { return null; }" ); expectedMethods = new ArrayList<MethodDescr>( ); MethodDescr method; NormalParameterDescr param1; NormalParameterDescr param2; NormalParameterDescr param3; EllipsisParameterDescr ellipsisParam; ParameterListDescr parmsList; //public MethodParsing1() { this(null); } method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setIdentifier( new IdentifierDescr( "MethodParsing1", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //public MethodParsing1(String field1) { this.field1 = field1; } method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setIdentifier( new IdentifierDescr( "MethodParsing1", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); //param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "String", -1, -1 ) ); param1.setIdentifier( new IdentifierDescr( "field1", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //public MethodParsing1(int a, int b) { this(a, b, (byte)1); } method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setIdentifier( new IdentifierDescr( "MethodParsing1", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); //param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param1.setIdentifier( new IdentifierDescr( "a", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param2.setIdentifier( new IdentifierDescr( "b", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //public MethodParsing1(int a, int b, byte c) { super(); } method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setIdentifier( new IdentifierDescr( "MethodParsing1", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); //param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param1.setIdentifier( new IdentifierDescr( "a", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param2.setIdentifier( new IdentifierDescr( "b", -1, -1, -1, -1 ) ); param3 = new NormalParameterDescr( ); //param3.setModifiers( new ModifierListDescr( ) ); param3.setType( new TypeDescr( null, -1, -1 ) ); param3.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "byte" ) ); param3.setIdentifier( new IdentifierDescr( "c", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); parmsList.addParameter( param3 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //"public String getField1() { return field1; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "String", -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "getField1", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //"public void setField1(String field1) { this.field1 = field1; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setType( new TypeDescr( ) ); method.getType( ).setVoidType( new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_VOID, "void", -1, -1, -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "setField1", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); //param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "String", -1, -1 ) ); param1.setIdentifier( new IdentifierDescr( "field1", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //"private int method1() { return -1; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "private" ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); method.setIdentifier( new IdentifierDescr( "method1", -1, -1, -1, 1 ) ); expectedMethods.add( method ); //"private void method2() {}" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "private" ) ); method.setType( new TypeDescr( ) ); method.getType( ).setVoidType( new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_VOID, "void", -1, -1, -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method2", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //"public static java.lang.String method3() { return null; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.addModifier( new ModifierDescr( null, -1, -1, "static" ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.lang.String", -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method3", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //"public static final Integer method4() { return null; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.addModifier( new ModifierDescr( null, -1, -1, "static" ) ); method.addModifier( new ModifierDescr( null, -1, -1, "final" ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "Integer", -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method4", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //"public void method5(java.lang.Integer param1, int param2) {}" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "public" ) ); method.setType( new TypeDescr( ) ); method.getType( ).setVoidType( new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_VOID, "void", -1, -1, -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method5", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); //param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.lang.Integer", -1, -1 ) ); param1.setIdentifier( new IdentifierDescr( "param1", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param2.setIdentifier( new IdentifierDescr( "param2", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //"java.util.List<java.lang.String> method6() { return null; }" method = new MethodDescr( null, -1, -1 ); //method.setModifiers( new ModifierListDescr( ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.util.List<java.lang.String>", -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method6", -1, -1, -1, -1 ) ); expectedMethods.add( method ); //"protected java.util.AbstractList<String> method7 ( final int param1 , java.lang.Integer param2 , java.util.List<java.lang.Integer> param3 ) { return null ; }" method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.addModifier( new ModifierDescr( null, -1, -1, "protected" ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.util.AbstractList<String>", -1, -1 ) ); method.setIdentifier( new IdentifierDescr( "method7", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); param1.setModifiers( new ModifierListDescr( ) ); param1.addModifier( new ModifierDescr( null, -1, -1, "final" ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param1.setIdentifier( new IdentifierDescr( "param1", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.lang.Integer", -1, -1 ) ); param2.setIdentifier( new IdentifierDescr( "param2", -1, -1, -1, -1 ) ); param3 = new NormalParameterDescr( ); //param3.setModifiers( new ModifierListDescr( ) ); param3.setType( new TypeDescr( null, -1, -1 ) ); param3.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.util.List<java.lang.Integer>", -1, -1 ) ); param3.setIdentifier( new IdentifierDescr( "param3", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); parmsList.addParameter( param3 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //"int method8 ( final int param1 , java.lang.Integer param2)[][] { return null; }" method = new MethodDescr( null, -1, -1 ); //method.setModifiers( new ModifierListDescr( ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); method.setIdentifier( new IdentifierDescr( "method8", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); param1.setModifiers( new ModifierListDescr( ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param1.addModifier( new ModifierDescr( null, -1, -1, "final" ) ); param1.setIdentifier( new IdentifierDescr( "param1", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.lang.Integer", -1, -1 ) ); param2.setIdentifier( new IdentifierDescr( "param2", -1, -1, -1, -1 ) ); method.addDimension( new DimensionDescr( "", -1, -1, -1, -1, new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_LBRACKET, "[", -1, -1, -1, -1 ), new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_RBRACKET, "]", -1, -1, -1, -1 ) ) ); method.addDimension( new DimensionDescr( "", -1, -1, -1, -1, new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_LBRACKET, "[", -1, -1, -1, -1 ), new JavaTokenDescr( ElementDescriptor.ElementType.JAVA_RBRACKET, "]", -1, -1, -1, -1 ) ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); method.setParamsList( parmsList ); expectedMethods.add( method ); //"int method9 ( final Object ... param1) { return -1;}" method = new MethodDescr( null, -1, -1 ); //method.setModifiers( new ModifierListDescr( ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); method.setIdentifier( new IdentifierDescr( "method9", -1, -1, -1, -1 ) ); ellipsisParam = new EllipsisParameterDescr( ); ellipsisParam.setModifiers( new ModifierListDescr( ) ); ellipsisParam.setType( new TypeDescr( null, -1, -1 ) ); ellipsisParam.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "Object", -1, -1 ) ); ellipsisParam.addModifier( new ModifierDescr( null, -1, -1, "final" ) ); ellipsisParam.setIdentifier( new IdentifierDescr( "param1", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( ellipsisParam ); method.setParamsList( parmsList ); expectedMethods.add( method ); //private java.util.AbstractList<Object> method10 ( final java.lang.String param1, int param2 , List<java.util.List<String>>...param3) { return null; } method = new MethodDescr( null, -1, -1 ); method.setModifiers( new ModifierListDescr( ) ); method.setType( new TypeDescr( null, -1, -1 ) ); method.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.util.AbstractList<Object>", -1, -1 ) ); method.addModifier( new ModifierDescr( null, -1, -1, "private" ) ); method.setIdentifier( new IdentifierDescr( "method10", -1, -1, -1, -1 ) ); param1 = new NormalParameterDescr( ); param1.setModifiers( new ModifierListDescr( ) ); param1.addModifier( new ModifierDescr( null, -1, -1, "final" ) ); param1.setType( new TypeDescr( null, -1, -1 ) ); param1.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "java.lang.String", -1, -1 ) ); param1.setIdentifier( new IdentifierDescr( "param1", -1, -1, -1, -1 ) ); param2 = new NormalParameterDescr( ); //param2.setModifiers( new ModifierListDescr( ) ); param2.setType( new TypeDescr( null, -1, -1 ) ); param2.getType( ).setPrimitiveType( new PrimitiveTypeDescr( null, -1, -1, "int" ) ); param2.setIdentifier( new IdentifierDescr( "param2", -1, -1, -1, -1 ) ); ellipsisParam = new EllipsisParameterDescr( ); //ellipsisParam.setModifiers( new ModifierListDescr( ) ); ellipsisParam.setType( new TypeDescr( null, -1, -1 ) ); ellipsisParam.getType( ).setClassOrInterfaceType( new ClassOrInterfaceTypeDescr( "List<java.util.List<String>>", -1, -1 ) ); ellipsisParam.setIdentifier( new IdentifierDescr( "param3", -1, -1, -1, -1 ) ); parmsList = new ParameterListDescr( ); parmsList.addParameter( param1 ); parmsList.addParameter( param2 ); parmsList.addParameter( ellipsisParam ); method.setParamsList( parmsList ); expectedMethods.add( method ); } }