/**
* Copyright 2015 Wealthfront 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.kaching.platform.testing;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.Test;
import com.kaching.platform.testing.CyclicDependencyTestRunner.Packages;
import com.kaching.platform.testing.CyclicDependencyTestRunner.PackagesBuilder.Result;
public class CyclicDependencyTestRunnerTest {
@Packages(
binDirectories = "target/test-classes",
forPackages = "com.kaching.platform.testing.testexamples.a")
private static class SinglePackage {}
@Test
public void testSinglePackage_NoCycles() throws IOException {
CyclicDependencyTestRunner runner = new CyclicDependencyTestRunner(SinglePackage.class);
Result result = runner.getTestResults(SinglePackage.class.getAnnotation(Packages.class));
assertTrue(result.numClasses > 0);
assertTrue(result.getUniqueCycles().isEmpty());
}
@Packages(
binDirectories = "target/test-classes",
forPackages = {"com.kaching.platform.testing.testexamples.a",
"com.kaching.platform.testing.testexamples.b"})
private static class TwoPackages {}
@Test
public void testTwoPackages_NoCycles() throws IOException {
CyclicDependencyTestRunner runner = new CyclicDependencyTestRunner(TwoPackages.class);
Result result = runner.getTestResults(TwoPackages.class.getAnnotation(Packages.class));
assertTrue(result.numClasses > 0);
assertTrue(result.getUniqueCycles().isEmpty());
}
@Packages(
binDirectories = "target/test-classes",
forPackages = {"com.kaching.platform.testing.testexamples.a",
"com.kaching.platform.testing.testexamples.b",
"com.kaching.platform.testing.testexamples.c"})
private static class ThreePackages {}
@Test
public void testThreePackages_Cycles() throws IOException {
CyclicDependencyTestRunner runner = new CyclicDependencyTestRunner(ThreePackages.class);
Result result = runner.getTestResults(ThreePackages.class.getAnnotation(Packages.class));
assertTrue(result.numClasses > 0);
assertEquals(1, result.getUniqueCycles().size());
}
@Packages(
binDirectories = "target/test-classes",
minClasses = 1,
forPackages = "com.kaching.platform.testing.testexamples")
private static class BasePackage {}
@Test
public void testBasePackage_Cycles() throws IOException {
CyclicDependencyTestRunner runner = new CyclicDependencyTestRunner(BasePackage.class);
Result result = runner.getTestResults(BasePackage.class.getAnnotation(Packages.class));
assertTrue(result.numClasses > 0);
assertEquals(1, result.getUniqueCycles().size());
assertEquals("Strongly connected components: {\n" +
"[com.kaching.platform.testing.testexamples.a,\n"
+ " com.kaching.platform.testing.testexamples.b,\n"
+ " com.kaching.platform.testing.testexamples.c]\n"
+ "}", result.toString());
}
}