/* * 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 org.kie.workbench.common.services.datamodeller.parser.descr.*; import org.kie.workbench.common.services.datamodeller.parser.util.ParserUtil; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; public class ParserAssert { public static void assertEqualsModifier( StringBuffer buffer, final ModifierDescr mod1, final ModifierDescr mod2 ) { if ( mod1 != null ) { assertNotNull( mod2 ); assertEquals( mod1.getName( ), mod2.getName( ) ); //TODO add this comparation assertEquals(mod1.getName(), ParserUtil.readElement(buffer, mod2)); } else { assertNull( mod2 ); } } public static void assertEqualsAnnotation( StringBuffer buffer, final AnnotationDescr annotation1, final AnnotationDescr annotation2) { if (annotation1 != null) { assertNotNull( annotation2 ); //assertNotNull( annotation1.getStartAt() ); //assertNotNull( annotation2.getStartAt() ); assertQualifiedName( buffer, annotation1.getQualifiedName(), annotation2.getQualifiedName() ); if (annotation1.hasElementValue()) { assertEquals( true, annotation2.hasElementValue() ); assertEqualsElementValue( buffer, annotation1.getElementValue(), annotation2.getElementValue() ); } else if ( annotation1.hasElementValuePairs() ) { assertEquals(true, annotation2.hasElementValuePairs() ); assertEquals( annotation1.getElementValuePairs().size(), annotation2.getElementValuePairs().size()); for (int i = 0; i < annotation1.getElementValuePairs().size(); i++) { assertEqualsIdentifier(buffer, annotation1.getElementValuePairs().getValuePairs().get( i ).getIdentifier(), annotation2.getElementValuePairs().getValuePairs().get( i ).getIdentifier() ); assertEqualsElementValue( buffer, annotation1.getElementValuePairs().getValuePairs().get( i ).getValue(), annotation2.getElementValuePairs().getValuePairs().get( i ).getValue() ); } } else { assertEquals( false, annotation2.hasElementValue() ); assertEquals( false, annotation2.hasElementValuePairs() ); } } else { assertNull( annotation2 ); } } private static void assertEqualsElementValue( StringBuffer buffer, ElementValueDescr value1, ElementValueDescr value2 ) { if (value1 != null) { assertNotNull( value2 ); assertEquals( value1.getValue(), value2.getValue() ); } else { assertNull( value2 ); } } public static void assertEqualsModifiers( StringBuffer buffer, ModifierListDescr modifiers1, ModifierListDescr modifiers2 ) { if ( modifiers1 != null ) { assertNotNull( modifiers2 ); assertEquals( modifiers1.getAllModifiers().size(), modifiers2.getAllModifiers().size() ); for ( int i = 0; i < modifiers1.getAllModifiers().size(); i++ ) { if (modifiers1.getAllModifiers().get(i).getElementType() == ElementDescriptor.ElementType.MODIFIER) { assertEquals( ElementDescriptor.ElementType.MODIFIER, modifiers2.getAllModifiers().get( i ).getElementType() ); assertEqualsModifier( buffer, (ModifierDescr)modifiers1.getAllModifiers().get( i ), (ModifierDescr)modifiers2.getAllModifiers().get( i )); } else { assertEquals( ElementDescriptor.ElementType.ANNOTATION, modifiers2.getAllModifiers().get( i ).getElementType() ); assertEqualsAnnotation( buffer, ( AnnotationDescr )modifiers1.getAllModifiers().get( i ), (AnnotationDescr)modifiers2.getAllModifiers().get( i ) ); } } } else { assertNull( modifiers2 ); } } public static void assertEqualsPrimitiveType( StringBuffer buffer, PrimitiveTypeDescr type1, PrimitiveTypeDescr type2 ) { if ( type1 != null ) { assertNotNull( type2 ); assertEquals( type1.getName( ), type2.getName( ) ); } else { assertNull( type2 ); } } public static void assertEqualsClassType( StringBuffer buffer, ClassOrInterfaceTypeDescr class1, ClassOrInterfaceTypeDescr class2 ) { if ( class1 != null ) { assertNotNull( class2 ); assertEquals( class1.getClassName( ), class2.getClassName( ) ); } else { assertNull( class2 ); } } public static void assertEqualsVariableInitializer( StringBuffer buffer, VariableInitializerDescr var1, VariableInitializerDescr var2 ) { if ( var1 != null ) { assertNotNull( var2 ); assertEquals( var1.getInitializerExpr( ), ParserUtil.readElement( buffer, var2 ) ); } else { assertNull( var2 ); } } public static void assertEqualsVariableDeclaration( StringBuffer buffer, VariableDeclarationDescr var1, VariableDeclarationDescr var2 ) { if ( var1 != null ) { assertNotNull( var2 ); assertEqualsIdentifier( buffer, var1.getIdentifier( ), var2.getIdentifier( ) ); assertEquals( var1.getDimensionsCount( ), var2.getDimensionsCount( ) ); assertEqualsVariableInitializer( buffer, var1.getVariableInitializer( ), var2.getVariableInitializer( ) ); } else { assertNull( var2 ); } } public static void assertEqualsFieldDeclaration( StringBuffer buffer, FieldDescr field1, FieldDescr field2 ) { if ( field1 != null ) { assertNotNull( field2 ); assertEqualsModifiers( buffer, field1.getModifiers( ), field2.getModifiers( ) ); assertEquals( field1.getVariableDeclarations( ).size( ), field2.getVariableDeclarations( ).size( ) ); for ( int i = 0; i < field1.getVariableDeclarations( ).size( ); i++ ) { assertEqualsVariableDeclaration( buffer, field1.getVariableDeclarations( ).get( i ), field2.getVariableDeclarations( ).get( i ) ); } assertEqualsType( buffer, field1.getType( ), field2.getType( ) ); } else { assertNull( field2 ); } } public static void assertEqualsType( StringBuffer buffer, TypeDescr type1, TypeDescr type2 ) { if ( type1 != null ) { assertNotNull( type2 ); if ( type1.isClassOrInterfaceType( ) ) { assertEquals( true, type2.isClassOrInterfaceType( ) ); assertEqualsClassType( buffer, type1.getClassOrInterfaceType( ), type2.getClassOrInterfaceType( ) ); } else if ( type1.isPrimitiveType( ) ) { assertEquals( true, type2.isPrimitiveType( ) ); assertEqualsPrimitiveType( buffer, type1.getPrimitiveType( ), type2.getPrimitiveType( ) ); } else if ( type1.isVoidType( ) ) { assertEquals( true, type2.isVoidType( ) ); } else { assertNull( type1 ); assertNull( type2 ); } } else { assertNull( type2 ); } } public static void assertEqualsMethodDeclaration( StringBuffer buffer, MethodDescr method1, MethodDescr method2 ) { if ( method1 != null ) { assertNotNull( method2 ); assertEqualsIdentifier( buffer, method1.getIdentifier(), method2.getIdentifier() ); assertEqualsModifiers( buffer, method1.getModifiers( ), method2.getModifiers( ) ); assertEqualsType( buffer, method1.getType( ), method2.getType( ) ); assertEqualsParameterList( buffer, method1.getParamsList( ), method2.getParamsList( ) ); assertEquals( method1.getDimensionsCount( ), method2.getDimensionsCount( ) ); } else { assertNull( method2 ); } } public static void assertEqualsParameterList( StringBuffer buffer, ParameterListDescr params1, ParameterListDescr params2 ) { if ( params1 != null ) { assertNotNull( params2 ); List<ParameterDescr> l1 = params1.getParameters( ); List<ParameterDescr> l2 = params2.getParameters( ); assertEquals( l1.size( ), l2.size( ) ); for ( int i = 0; i < l1.size( ); i++ ) { assertEqualsParameter( buffer, l1.get( i ), l2.get( i ) ); } } else { assertNull( params2 ); } } public static void assertEqualsParameter( StringBuffer buffer, ParameterDescr param1, ParameterDescr param2 ) { if ( param1 != null ) { assertNotNull( param2 ); assertEqualsIdentifier( buffer, param1.getIdentifier( ), param2.getIdentifier( ) ); assertEqualsType( buffer, param1.getType( ), param2.getType( ) ); assertEqualsModifiers( buffer, param1.getModifiers( ), param2.getModifiers( ) ); } else { assertNull( param2 ); } } public static void assertEqualsIdentifier( StringBuffer buffer, IdentifierDescr id1, IdentifierDescr id2 ) { if ( id1 != null ) { assertNotNull( id2 ); assertEquals( id1.getIdentifier( ), id2.getIdentifier( ) ); } else { assertNull(id2); } } public static void assertQualifiedName( StringBuffer buffer, QualifiedNameDescr qname1, QualifiedNameDescr qname2) { if (qname1 != null) { assertNotNull( qname2 ); assertEquals( qname1.getName(), qname2.getName() ); } else { assertNull( qname2 ); } } }