package jadx.gui.treemodel;
import jadx.api.Factory;
import jadx.api.IJadxArgs;
import jadx.api.JadxDecompiler;
import jadx.api.JavaClass;
import jadx.api.JavaPackage;
import jadx.core.dex.nodes.ClassNode;
import jadx.gui.JadxWrapper;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
public class JRootTest {
private JRoot root;
private JadxDecompiler decompiler;
@Before
public void init() {
root = new JRoot(mock(JadxWrapper.class));
decompiler = new JadxDecompiler(mock(IJadxArgs.class));
}
@Test
public void testHierarchyPackages() {
String pkgName = "a.b.c.d.e";
List<JavaPackage> packages = Arrays.asList(newPkg(pkgName));
List<JPackage> out = root.getHierarchyPackages(packages);
assertEquals(out.size(), 1);
JPackage jpkg = out.get(0);
assertEquals(jpkg.getName(), pkgName);
assertEquals(jpkg.getClasses().size(), 1);
}
@Test
public void testHierarchyPackages2() {
List<JavaPackage> packages = Arrays.asList(
newPkg("a.b"),
newPkg("a.c"),
newPkg("a.d")
);
List<JPackage> out = root.getHierarchyPackages(packages);
assertEquals(out.size(), 1);
JPackage jpkg = out.get(0);
assertEquals(jpkg.getName(), "a");
assertEquals(jpkg.getClasses().size(), 0);
assertEquals(jpkg.getInnerPackages().size(), 3);
}
@Test
public void testHierarchyPackages3() {
List<JavaPackage> packages = Arrays.asList(
newPkg("a.b.p1"),
newPkg("a.b.p2"),
newPkg("a.b.p3")
);
List<JPackage> out = root.getHierarchyPackages(packages);
assertEquals(out.size(), 1);
JPackage jpkg = out.get(0);
assertEquals(jpkg.getName(), "a.b");
assertEquals(jpkg.getClasses().size(), 0);
assertEquals(jpkg.getInnerPackages().size(), 3);
}
@Test
public void testHierarchyPackages4() {
List<JavaPackage> packages = Arrays.asList(
newPkg("a.p1"),
newPkg("a.b.c.p2"),
newPkg("a.b.c.p3"),
newPkg("d.e"),
newPkg("d.f.a")
);
List<JPackage> out = root.getHierarchyPackages(packages);
assertEquals(out.size(), 2);
assertEquals(out.get(0).getName(), "a");
assertEquals(out.get(0).getInnerPackages().size(), 2);
assertEquals(out.get(1).getName(), "d");
assertEquals(out.get(1).getInnerPackages().size(), 2);
}
private JavaPackage newPkg(String name) {
return Factory.newPackage(name, Arrays.asList(newClass()));
}
private JavaClass newClass() {
return Factory.newClass(decompiler, mock(ClassNode.class));
}
}