package a; import com.googlecode.d2j.DexConstants; import com.googlecode.d2j.Field; import com.googlecode.d2j.Method; import com.googlecode.d2j.Visibility; import com.googlecode.d2j.dex.writer.DexFileWriter; import com.googlecode.d2j.dex.writer.DexWriteException; import com.googlecode.d2j.reader.DexFileReader; import com.googlecode.d2j.reader.Op; import com.googlecode.d2j.visitors.*; import org.junit.Test; import java.io.File; import java.io.IOException; public class AppWriterTest implements DexConstants { @Test(expected = DexWriteException.class) public void testDupClz() { DexFileWriter w = new DexFileWriter(); DexClassVisitor cv = w.visit(0, "La/b;", null, null); cv.visitEnd(); cv = w.visit(0, "La/b;", null, null); cv.visitEnd(); w.visitEnd(); } @Test public void test3() { DexFileWriter w = new DexFileWriter(); DexClassVisitor cv = w.visit(0x1, "La/c;", null, new String[]{"Ljava/lang/Comparable;"}); cv.visitSource("c.java"); cv.visitAnnotation("LAnn;", Visibility.SYSTEM).visitEnd(); DexFieldVisitor fv = cv.visitField(ACC_PUBLIC | ACC_STATIC, new Field("La/c;", "a", "I"), 55); fv.visitAnnotation("LE;", Visibility.RUNTIME).visitEnd(); fv.visitEnd(); DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La/c;", "bb", new String[]{"I"}, "V")); mv.visitAnnotation("Laaa;", Visibility.RUNTIME).visitEnd(); DexAnnotationVisitor dav = mv.visitParameterAnnotation(0).visitAnnotation("Laaa;", Visibility.RUNTIME); dav.visit("abc", true); DexAnnotationVisitor dav2 = dav.visitArray("efg"); dav2.visit("", "123"); dav2.visit("", "456"); dav2.visitEnd(); dav.visitEnd(); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); code.visitStmt0R(Op.RETURN_VOID); code.visitEnd(); mv.visitEnd(); cv.visitEnd(); w.visitEnd(); w.toByteArray(); } @Test public void test4() throws IOException { DexFileWriter w = new DexFileWriter(); DexFileReader dexFileReader = new DexFileReader(new File("../dex-translator/src/test/resources/dexes/i_jetty.dex")); dexFileReader.accept(w); w.toByteArray(); } }