| /* |
| * Copyright 2014-present Facebook, 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.facebook.buck.java; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import com.facebook.buck.io.ProjectFilesystem; |
| import com.google.common.base.Optional; |
| import com.google.common.collect.ImmutableSet; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import java.nio.file.Paths; |
| |
| public class JavacErrorParserTest { |
| |
| ProjectFilesystem projectFilesystem; |
| JavacErrorParser javacErrorParser; |
| |
| @Before |
| public void setUp() { |
| projectFilesystem = new ProjectFilesystem(Paths.get(".")); |
| JavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder.createDefaultJavaPackageFinder( |
| ImmutableSet.of("/src/")); |
| javacErrorParser = new JavacErrorParser(projectFilesystem, javaPackageFinder); |
| } |
| |
| @Test |
| public void shouldFindSymbolFromCannotFindSymbolError() { |
| String error = |
| "Foo.java:22: error: cannot find symbol\n" + |
| "import com.facebook.buck.util.BuckConstant;\n" + |
| " ^\n" + |
| " symbol: class BuckConstant\n" + |
| " location: package com.facebook.buck.util\n"; |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.buck.util.BuckConstant"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| } |
| |
| @Test |
| public void shouldFindSymbolFromCannotFindSymbolInCurrentPackageError() { |
| String error = |
| projectFilesystem.getRootPath().toAbsolutePath().normalize() + |
| "/src/com/facebook/buck/java/DefaultJavaLibrary.java:277: error: cannot find symbol\n" + |
| " final JavacStep javacStep;\n" + |
| " ^\n" + |
| " symbol: class JavacStep\n" + |
| " location: class com.facebook.buck.java.DefaultJavaLibrary"; |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.buck.java.JavacStep"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| |
| String errorWithVariable = error.replace("class JavacStep", "variable JavacStep"); |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol for a 'variable' error.", |
| Optional.of("com.facebook.buck.java.JavacStep"), |
| javacErrorParser.getMissingSymbolFromCompilerError(errorWithVariable)); |
| } |
| |
| @Test |
| public void shouldFindSymbolFromPackageDoesNotExistInCurrentPackageError() { |
| String error = |
| projectFilesystem.getRootPath().toAbsolutePath().normalize() + |
| "/src/com/facebook/Foo.java:60: error: package BarBaz does not exist\n" + |
| " BarBaz.doStuff(),\n" + |
| " ^\n"; |
| |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.BarBaz"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| } |
| |
| @Test |
| public void shouldFindSymbolFromImportPackageDoesNotExistError() { |
| String error = |
| "Foo.java:24: error: package com.facebook.buck.step does not exist\n" + |
| "import com.facebook.buck.step.ExecutionContext;\n" + |
| " ^\n"; |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.buck.step.ExecutionContext"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| |
| } |
| |
| @Test |
| public void shouldFindSymbolFromStaticImportPackageDoesNotExistError() { |
| String error = |
| "Foo.java:19: error: package com.facebook.buck.rules.BuildableProperties does not exist\n" + |
| "import static com.facebook.buck.rules.BuildableProperties.Kind.ANDROID;\n" + |
| " ^\n"; |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.buck.rules.BuildableProperties.Kind"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| } |
| |
| @Test |
| public void shouldFindSymbolFromCannotAccessError() { |
| String error = |
| "Foo.java:46: error: cannot access com.facebook.buck.rules.Description\n" + |
| "public class SomeDescription implements Description<SomeDescription.Arg>,\n" + |
| " ^\n" + |
| " class file for com.facebook.buck.rules.Description not found\n"; |
| |
| assertEquals( |
| "JavacErrorParser didn't find the right symbol.", |
| Optional.of("com.facebook.buck.rules.Description"), |
| javacErrorParser.getMissingSymbolFromCompilerError(error)); |
| } |
| } |