blob: 1ee84f1a84daeb88f8f7f15028c20ef7702d6346 [file] [log] [blame]
/*
* 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());
}
}
}