/* * Copyright 2015 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.uberfire.annotations.processors; import java.io.FileNotFoundException; import java.util.List; import javax.tools.Diagnostic; import javax.tools.Diagnostic.Kind; import javax.tools.JavaFileObject; import org.junit.Test; import static org.junit.Assert.*; /** * Tests for Editor related class generation */ public class WorkbenchEditorProcessorTest extends AbstractProcessorTest { final Result result = new Result(); @Override protected AbstractErrorAbsorbingProcessor getProcessorUnderTest() { return new WorkbenchEditorProcessor(new GenerationCompleteCallback() { @Override public void generationComplete(final String code) { result.setActualCode(code); } }); } @Test public void testNoWorkbenchEditorAnnotation() throws FileNotFoundException { final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), "org/uberfire/annotations/processors/WorkbenchEditorTest1"); assertSuccessfulCompilation(diagnostics); assertNull(result.getActualCode()); } @Test public void testWorkbenchEditorMissingViewAnnotation() { final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), "org/uberfire/annotations/processors/WorkbenchEditorTest2"); assertFailedCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.ERROR, Diagnostic.NOPOS, Diagnostic.NOPOS, "org.uberfire.annotations.processors.WorkbenchEditorTest2Activity: The WorkbenchEditor must either extend IsWidget or provide a @WorkbenchPartView annotated method to return a com.google.gwt.user.client.ui.IsWidget."); assertNull(result.getActualCode()); } @Test public void testWorkbenchEditorHasViewAnnotationMissingTitleAnnotation() { final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), "org/uberfire/annotations/processors/WorkbenchEditorTest3"); assertFailedCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.ERROR, Diagnostic.NOPOS, Diagnostic.NOPOS, "org.uberfire.annotations.processors.WorkbenchEditorTest3Activity: The WorkbenchEditor must provide a @WorkbenchPartTitle annotated method to return a java.lang.String."); assertNull(result.getActualCode()); } @Test public void testWorkbenchEditorMissingViewAnnotationHasTitleAnnotation() { final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), "org/uberfire/annotations/processors/WorkbenchEditorTest4"); assertFailedCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.ERROR, Diagnostic.NOPOS, Diagnostic.NOPOS, "org.uberfire.annotations.processors.WorkbenchEditorTest4Activity: The WorkbenchEditor must either extend IsWidget or provide a @WorkbenchPartView annotated method to return a com.google.gwt.user.client.ui.IsWidget."); assertNull(result.getActualCode()); } @Test public void testWorkbenchEditorHasViewAnnotationAndHasTitleAnnotation() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest5"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest5.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorExtendsIsWidget() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest6"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest6.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorHasViewAnnotationAndExtendsIsWidget() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest7"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest7.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.WARNING, Diagnostic.NOPOS, Diagnostic.NOPOS, "The WorkbenchEditor both extends com.google.gwt.user.client.ui.IsWidget and provides a @WorkbenchPartView annotated method. The annotated method will take precedence."); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorAllAnnotations() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest8"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest8.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorWorkbenchMenuAnnotationCorrectReturnType() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest9"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest9.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorWorkbenchMenuAnnotationWrongReturnType() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest10"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest10.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorOnStart1Parameter() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest11"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest11.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorOnStart2Parameters() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest12"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest12.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorOnStart2ParametersWrongOrder() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest13"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest13.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertFailedCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.ERROR, Diagnostic.NOPOS, Diagnostic.NOPOS, "Methods annotated with @OnStartup must take one argument of type org.uberfire.backend.vfs.Path and an optional second argument of type org.uberfire.mvp.PlaceRequest"); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorOnStartMultipleMethods() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest14"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest14.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertCompilationMessage(diagnostics, Kind.WARNING, 27, 17, "There is also an @OnStartup(Path, PlaceRequest) method in this class. That method takes precedence over this one."); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorWorkbenchToolBarAnnotationCorrectReturnType() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest15"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest15.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorWorkbenchToolBarAnnotationWrongReturnType() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest16"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest16.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorMultipleSupportedTypes() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest17"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest17.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testEditorWithActivator() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest18"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest18.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testEditorWithOwningPerspective() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest19"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest19.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testEditorWithInvalidOwningPerspectiveRef() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest20"; final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertCompilationMessage(diagnostics, Kind.ERROR, 14, Diagnostic.NOPOS, "owningPerspective must be a class annotated with @WorkbenchPerspective"); } @Test public void testWorkbenchEditorMultipleSupportedTypesWithPreferredWidth() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest24"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest24.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } public void testWorkbenchEditorMultipleSupportedTypesWithNegativePreferredWidth() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest25"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest25.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorMultipleSupportedTypesWithPreferredHeight() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest26"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest26.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorMultipleSupportedTypesWithNegativePreferredHeight() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest21"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest21.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorMultipleSupportedTypesWithPreferredHeightAndWidth() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest22"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest22.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testWorkbenchEditorMultipleSupportedTypesWithNegativePreferredHeightAndWidth() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest23"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest23.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile(getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testEditorWithLockingStrategy() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest27"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest27.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testDynamicWorkbenchEditor() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest28"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest28.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } @Test public void testQualifiersInTheActivity() throws FileNotFoundException { final String pathCompilationUnit = "org/uberfire/annotations/processors/WorkbenchEditorTest29"; final String pathExpectedResult = "org/uberfire/annotations/processors/expected/WorkbenchEditorTest29.expected"; result.setExpectedCode(getExpectedSourceCode(pathExpectedResult)); final List<Diagnostic<? extends JavaFileObject>> diagnostics = compile( getProcessorUnderTest(), pathCompilationUnit); assertSuccessfulCompilation(diagnostics); assertNotNull(result.getActualCode()); assertNotNull(result.getExpectedCode()); assertEquals(result.getExpectedCode(), result.getActualCode()); } }