package org.codefx.mvn.jdeps.rules; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; /** * Tests for {@link TypeNameHierarchy}. */ public class TypeNameHierarchyTest { @Test(expected = NullPointerException.class) public void forFullyQualifiedName_nameNull_throwsException() { TypeNameHierarchy.forFullyQualifiedName(null, PackageInclusion.HIERARCHICAL); } @Test(expected = NullPointerException.class) public void forFullyQualifiedName_packageInclusionNull_throwsException() { TypeNameHierarchy.forFullyQualifiedName("some.Class", null); } // #begin HIERARCHICAL PACKAGE INCLUSION @Test public void iterateHierarchical_oneLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.Class", PackageInclusion.HIERARCHICAL); assertThat(hierarchy).containsExactly("some.Class", "some"); } @Test public void iterateHierarchical_twoLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.deep.Class", PackageInclusion.HIERARCHICAL); assertThat(hierarchy).containsExactly("some.deep.Class", "some.deep", "some"); } @Test public void iterateHierarchical_threeLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.very.deep.Class", PackageInclusion.HIERARCHICAL); assertThat(hierarchy).containsExactly("some.very.deep.Class", "some.very.deep", "some.very", "some"); } @Test public void iterateHierarchical_threeLevelInnerType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.very.deep.Inner.Class", PackageInclusion.HIERARCHICAL); assertThat(hierarchy).containsExactly( "some.very.deep.Inner.Class", "some.very.deep.Inner", "some.very.deep", "some.very", "some"); } // #begin HIERARCHICAL PACKAGE INCLUSION // #begin FLAT PACKAGE INCLUSION // edge cases @Test public void iterateFlat_noPackagePrefix_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("TopLevel.Class", PackageInclusion.FLAT); assertThat(hierarchy).containsExactly("TopLevel.Class", "TopLevel"); } // regular cases @Test public void iterateFlat_oneLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.Class", PackageInclusion.FLAT); assertThat(hierarchy).containsExactly("some.Class", "some"); } @Test public void iterateFlat_twoLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.deep.Class", PackageInclusion.FLAT); assertThat(hierarchy).containsExactly("some.deep.Class", "some.deep"); } @Test public void iterateFlat_threeLevelType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.very.deep.Class", PackageInclusion.FLAT); assertThat(hierarchy).containsExactly("some.very.deep.Class", "some.very.deep"); } @Test public void iterateFlat_threeLevelInnerType_correctNames() { TypeNameHierarchy hierarchy = TypeNameHierarchy .forFullyQualifiedName("some.very.deep.Inner.Class", PackageInclusion.FLAT); assertThat(hierarchy).containsExactly( "some.very.deep.Inner.Class", "some.very.deep.Inner", "some.very.deep"); } // #end FLAT PACKAGE INCLUSION }