@@ -0,0 +1,1700 @@
+package com.yahoo.abicheck;%0A%0Aimport static org.hamcrest.MatcherAssert.assertThat;%0Aimport static org.hamcrest.Matchers.empty;%0Aimport static org.hamcrest.Matchers.equalTo;%0Aimport static org.hamcrest.Matchers.sameInstance;%0Aimport static org.mockito.Mockito.mock;%0Aimport static org.mockito.Mockito.when;%0A%0Aimport com.google.common.collect.Iterables;%0Aimport com.yahoo.abicheck.classtree.ClassFileTree;%0Aimport java.io.IOException;%0Aimport java.io.InputStream;%0Aimport java.util.Collections;%0Aimport java.util.jar.JarEntry;%0Aimport java.util.jar.JarFile;%0Aimport org.junit.jupiter.api.Test;%0A%0Apublic class ClassFileTreeTest %7B%0A%0A  @Test%0A  public void testJarParsing() throws IOException %7B%0A    JarFile jarFile = mock(JarFile.class);%0A    JarEntry jarEntry = new JarEntry(%22com/yahoo/Test.class%22);%0A    InputStream jarEntryStream = mock(InputStream.class);%0A    when(jarFile.entries()).thenReturn(Collections%0A        .enumeration(Collections.singleton(jarEntry)));%0A    when(jarFile.getInputStream(jarEntry)).thenReturn(jarEntryStream);%0A%0A    ClassFileTree cft = ClassFileTree.fromJar(jarFile);%0A    ClassFileTree.Package com = Iterables.getOnlyElement(cft.getRootPackages());%0A    assertThat(com.getFullyQualifiedName(), equalTo(%22com%22));%0A    assertThat(com.getClassFiles(), empty());%0A    ClassFileTree.Package yahoo = Iterables.getOnlyElement(com.getSubPackages());%0A    assertThat(yahoo.getFullyQualifiedName(), equalTo(%22com.yahoo%22));%0A    assertThat(yahoo.getSubPackages(), empty());%0A    ClassFileTree.ClassFile testClassFile = Iterables.getOnlyElement(yahoo.getClassFiles());%0A    assertThat(testClassFile.getName(), equalTo(%22Test.class%22));%0A    assertThat(testClassFile.getInputStream(), sameInstance(jarEntryStream));%0A  %7D%0A%7D%0A

Add unit test for ClassFileTree.