| /* |
| * Copyright 2012-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.cli; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.fail; |
| |
| import com.facebook.buck.java.DefaultJavaPackageFinder; |
| import com.facebook.buck.util.HumanReadableException; |
| import com.google.common.collect.ImmutableList; |
| |
| import org.junit.Test; |
| |
| public class DefaultJavaPackageFinderTest { |
| |
| /** |
| * If no paths are specified, then the project root should be considered a Java source root. |
| */ |
| @Test |
| public void testNoPathsSpecified() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.<String>of()); |
| assertEquals("", javaPackageFinder.findJavaPackageFolderForPath("Base.java")); |
| assertEquals("java/com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/com/example/base/Base.java")); |
| } |
| |
| @Test |
| public void testSinglePathFromRoot() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.of("/java/")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/com/example/base/")); |
| assertEquals("com.example.base", |
| javaPackageFinder.findJavaPackageForPath("java/com/example/base/")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/com/example/base/Base.java")); |
| assertEquals("com.example.base", |
| javaPackageFinder.findJavaPackageForPath("java/com/example/base/Base.java")); |
| assertEquals("", |
| javaPackageFinder.findJavaPackageFolderForPath("java/Weird.java")); |
| assertEquals("", |
| javaPackageFinder.findJavaPackageForPath("java/Weird.java")); |
| assertEquals( |
| "When there is no match, the project root should be treated as a Java source root.", |
| "notjava/", |
| javaPackageFinder.findJavaPackageFolderForPath("notjava/Weird.java")); |
| assertEquals( |
| "When there is no match, the project root should be treated as a Java source root.", |
| "notjava", |
| javaPackageFinder.findJavaPackageForPath("notjava/Weird.java")); |
| } |
| |
| @Test |
| public void testOverlappingPathsFromRoot() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.of( |
| "/java", |
| "/java/more/specific", |
| "/javatests")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/com/example/base/Base.java")); |
| assertEquals("base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/more/specific/base/Base.java")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("javatests/com/example/base/BaseTest.java")); |
| } |
| |
| @Test |
| public void testSinglePathElement() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.of("src")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/main/src/com/example/base/")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/main/src/com/example/base/Base.java")); |
| assertEquals( |
| "When the path element appears more than once, use the rightmost instance as the base.", |
| "com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath( |
| "java/main/src/other/project/src/com/example/base/Base.java")); |
| assertEquals("", |
| javaPackageFinder.findJavaPackageFolderForPath("src/Weird.java")); |
| assertEquals( |
| "When there is no match, the project root should be treated as a Java source root.", |
| "notjava/", |
| javaPackageFinder.findJavaPackageFolderForPath("notjava/Weird.java")); |
| } |
| |
| @Test |
| public void testMultiplePathElements() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.of("src", "src-gen")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("java/main/src/com/example/base/")); |
| assertEquals("com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath( |
| "java/main/src-gen/other/project/src/com/example/base/Base.java")); |
| } |
| |
| @Test |
| public void testMixOfPrefixesAndPathElements() { |
| DefaultJavaPackageFinder javaPackageFinder = DefaultJavaPackageFinder |
| .createDefaultJavaPackageFinder(ImmutableList.of("/java", "src")); |
| assertEquals( |
| "Prefixes take precedence over path elements", |
| "com/example/base/", |
| javaPackageFinder.findJavaPackageFolderForPath("/java/main/src/com/example/base/Base.java")); |
| } |
| |
| @Test |
| public void testInvalidPath() { |
| try { |
| DefaultJavaPackageFinder.createDefaultJavaPackageFinder(ImmutableList.of("src/")); |
| fail("Should have thrown HumanReadableException."); |
| } catch (HumanReadableException e) { |
| assertEquals( |
| "Path pattern that does not start with a slash cannot contain a slash: src/", |
| e.getHumanReadableErrorMessage()); |
| } |
| } |
| } |