| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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 com.google.gwt.dev.javac; |
| |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.dev.javac.testing.impl.JavaResourceBase; |
| import com.google.gwt.dev.javac.testing.impl.MockJavaResource; |
| import com.google.gwt.thirdparty.guava.common.collect.Lists; |
| import com.google.gwt.thirdparty.guava.common.collect.Sets; |
| |
| import java.util.Collection; |
| import java.util.List; |
| import java.util.Set; |
| |
| /** |
| * Test class for {@link JdtCompiler}. |
| */ |
| public class JdtCompilerTest extends JdtCompilerTestBase { |
| |
| public static final MockJavaResource OUTER_INNER = JavaResourceBase.createMockJavaResource( |
| "com.google.Outer", |
| "package com.google;", |
| "public class Outer {", |
| " private static class Inner {", |
| " private static class Deep$est {}", |
| " }", |
| "}"); |
| |
| public static final MockJavaResource PSEUDO_INNER = JavaResourceBase.createMockJavaResource( |
| "com.google.Pseudo$Inner", "package com.google;", "public class Pseudo$Inner {}"); |
| |
| public void testCompile() throws Exception { |
| assertResourcesCompileSuccessfully(JavaResourceBase.FOO, JavaResourceBase.BAR); |
| } |
| |
| public void testCompileEmptyFile() throws Exception { |
| assertUnitCompilesWithNoErrors("com.example.Empty", |
| "package com.example;"); |
| } |
| |
| /** |
| * Test for issue 8566 |
| */ |
| public void testCompileEmptyFileWithImports() throws Exception { |
| assertUnitCompilesWithNoErrors("com.example.EmptyWithImports", |
| "package com.example;", |
| "import java.util.Collections;"); |
| } |
| |
| public void testCompileError() throws Exception { |
| List<CompilationUnit> units = compile(JavaResourceBase.BAR); |
| assertOnlyLastUnitHasErrors(units, "Foo cannot be resolved to a type"); |
| } |
| |
| public void testCompileIncremental() throws Exception { |
| List<CompilationUnitBuilder> builders = buildersFor(); |
| Collection<CompilationUnit> units = compile(builders); |
| assertUnitsCompiled(units); |
| addAll(builders, JavaResourceBase.FOO, JavaResourceBase.BAR); |
| units = compile(builders); |
| assertUnitsCompiled(units); |
| } |
| |
| public void testRemoveUnusedImports() throws Exception { |
| // java.util.BlahBlahBlah is imported but does not exist, so it should generate a |
| // compile error if not removed. |
| JdtCompiler.setRemoveUnusedImports(false); |
| assertUnitHasErrors("com.example.UnusedImports", |
| "package com.example;", |
| "import java.util.BlahBlahBlah;", |
| "public class UnusedImports {", |
| "}"); |
| JdtCompiler.setRemoveUnusedImports(true); |
| assertUnitCompilesWithNoErrors("com.example.UnusedImports", |
| "package com.example;", |
| "import java.util.BlahBlahBlah;", |
| "public class UnusedImports {", |
| "}"); |
| } |
| |
| public void testRemoveUnusedStaticImports() throws Exception { |
| // java.util.BlahBlahBlah.Blah is imported but does not exist, so it should generate a |
| // compile error if not removed. |
| JdtCompiler.setRemoveUnusedImports(false); |
| assertUnitHasErrors("com.example.UnusedStaticImports", |
| "package com.example;", |
| "import static java.util.BlahBlahBlah.Blah;", |
| "public class UnusedStaticImports {", |
| "}"); |
| // If the imported static exists the it should compile even if unused imports are not removed |
| assertUnitCompilesWithNoErrors("com.example.UnusedStaticImports", |
| "package com.example;", |
| "import static java.lang.Float.valueOf;", |
| "public class UnusedStaticImports {", |
| "}"); |
| JdtCompiler.setRemoveUnusedImports(true); |
| assertUnitCompilesWithNoErrors("com.example.UnusedStaticImports", |
| "package com.example;", |
| "import static java.util.BlahBlahBlah.Blah;", |
| "public class UnusedStaticImports {", |
| "}"); |
| } |
| |
| public void testSourceNames() throws Exception { |
| List<CompilationUnit> compilationUnits = compile(OUTER_INNER, PSEUDO_INNER); |
| Set<String> sourceNames = Sets.newHashSet(); |
| for (CompilationUnit compilationUnit : compilationUnits) { |
| for (CompiledClass compiledClass : compilationUnit.getCompiledClasses()) { |
| sourceNames.add(compiledClass.getSourceName()); |
| } |
| } |
| |
| assertTrue(sourceNames.containsAll(Lists.newArrayList("com.google.Outer", |
| "com.google.Outer.Inner", "com.google.Outer.Inner.Deep$est", "com.google.Pseudo$Inner"))); |
| } |
| |
| private void assertUnitCompilesWithNoErrors(String sourceName, String... sourceLines) |
| throws UnableToCompleteException { |
| CompilationUnit unit = compileUnit(sourceName, sourceLines); |
| assertNotNull(unit); |
| assertFalse(unit.isError()); |
| } |
| |
| private void assertUnitHasErrors(String sourceName, String... sourceLines) |
| throws UnableToCompleteException { |
| CompilationUnit unit = compileUnit(sourceName, sourceLines); |
| assertNotNull(unit); |
| assertTrue(unit.isError()); |
| } |
| |
| private CompilationUnit compileUnit(String sourceName, String[] sourceLines) |
| throws UnableToCompleteException { |
| MockJavaResource emptySourceFile = |
| JavaResourceBase.createMockJavaResource(sourceName, sourceLines); |
| List<CompilationUnit> units = compile(emptySourceFile); |
| return findUnitBySourceName(sourceName, units); |
| } |
| |
| private CompilationUnit findUnitBySourceName(String sourceName, List<CompilationUnit> units) { |
| for (CompilationUnit unit : units) { |
| if (unit.getTypeName().equals(sourceName)) { |
| return unit; |
| } |
| } |
| return null; |
| } |
| } |