/* * Copyright 2016 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.screens.datamodeller.backend.server.indexing; import java.io.IOException; import java.net.URISyntaxException; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import org.jboss.forge.roaster.Roaster; import org.jboss.forge.roaster.model.source.AnnotationSource; import org.jboss.forge.roaster.model.source.FieldSource; import org.jboss.forge.roaster.model.source.Import; import org.jboss.forge.roaster.model.source.JavaClassSource; import org.jboss.forge.roaster.model.source.JavaEnumSource; import org.jboss.forge.roaster.model.source.JavaInterfaceSource; import org.jboss.forge.roaster.model.source.MethodSource; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.kie.workbench.common.services.refactoring.model.index.Resource; import org.kie.workbench.common.services.refactoring.model.index.ResourceReference; import org.kie.workbench.common.services.refactoring.service.ResourceType; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class JavaSourceVisitorTest { private static JavaClassSource javaClassSource; private static JavaInterfaceSource javaInterfaceSource; private static JavaEnumSource javaEnumSource; private JavaSourceVisitor visitor; private Resource resourceParts; @BeforeClass public static void setUpJavaSources() throws URISyntaxException, IOException { javaClassSource = (JavaClassSource) Roaster.parse( JavaSourceVisitorTest.class.getResource( "/org/kie/workbench/common/screens/datamodeller/backend/server/indexing/Pojo2.java" ) ); javaInterfaceSource = (JavaInterfaceSource) Roaster.parse( JavaSourceVisitorTest.class.getResource( "/org/kie/workbench/common/screens/datamodeller/backend/server/indexing/Interface2.java" ) ); javaEnumSource = (JavaEnumSource) Roaster.parse( JavaSourceVisitorTest.class.getResource( "/org/kie/workbench/common/screens/datamodeller/backend/server/indexing/Enum2.java" ) ); } @Before public void setUp() { this.resourceParts = new Resource( "org.kie.workbench.common.screens.datamodeller.backend.server.indexing.Pojo2.java", ResourceType.JAVA ); this.visitor = new JavaSourceVisitor( javaClassSource, JavaSourceVisitorTest.class.getClassLoader(), resourceParts ); } @Test public void visitAnnotationSources() { for ( AnnotationSource annotationSource : javaClassSource.getAnnotations() ) { visitor.visit( annotationSource ); } checkVisitor( Arrays.asList( "ref:java => org.kie.workbench.common.screens.datamodeller.backend.server.indexing.Annotation1" ) ); } @Test public void visitImports() { for ( Import importSource : javaClassSource.getImports() ) { visitor.visit( importSource ); } checkVisitor( Arrays.asList( "ref:java => java.math.BigDecimal", "ref:java => java.io.Serializable" ) ); } @Test public void visitFields() { for ( FieldSource fieldSource : javaClassSource.getFields() ) { visitor.visit( fieldSource ); } checkVisitor( Arrays.asList( "ref:java => int", "ref:java => java.math.BigDecimal" ) ); } @Test public void visitMethods() { for ( MethodSource methodSource : javaClassSource.getMethods() ) { visitor.visit( methodSource ); } checkVisitor( Arrays.asList( "ref:java => int", "ref:java => java.math.BigDecimal", "ref:java => org.kie.workbench.common.screens.datamodeller.backend.server.indexing.Pojo1" ) ); } @Test public void visitInterface() { visitor.visit( javaInterfaceSource ); checkVisitor( Arrays.asList( "ref:java => int", "ref:java => java.lang.String", "ref:java => org.kie.workbench.common.screens.datamodeller.backend.server.indexing.Annotation1" ) ); } @Test public void visitEnum() { visitor.visit( javaEnumSource ); checkVisitor( Arrays.asList( "ref:java => int" ) ); } private void checkVisitor( Collection<String> referenceDefinitions ) { Collection<ResourceReference> resourceReferences = visitor.getResourceReferences(); assertEquals( referenceDefinitions.size(), resourceReferences.size() ); List<String> resourceReferenceList = resourceReferences.stream().map( resourceReference -> resourceReference.toString() ).collect( Collectors.toList() ); assertTrue( resourceReferenceList.containsAll( referenceDefinitions ) ); } }