1
1
package software .coley .llzip ;
2
2
3
3
import org .junit .jupiter .api .Test ;
4
- import org .objectweb .asm .ClassReader ;
5
- import org .objectweb .asm .ClassVisitor ;
6
- import org .objectweb .asm .MethodVisitor ;
7
- import org .objectweb .asm .Opcodes ;
8
4
import software .coley .llzip .part .CentralDirectoryFileHeader ;
9
5
import software .coley .llzip .part .LocalFileHeader ;
10
6
import software .coley .llzip .strategy .Decompressor ;
@@ -30,7 +26,7 @@ public void testDeflateStandardJar() {
30
26
LocalFileHeader localFileHeader = zip .getLocalFiles ().get (0 );
31
27
assertEquals ("Hello.class" , localFileHeader .getFileName ());
32
28
byte [] classData = localFileHeader .decompress (new DeflateDecompressor ());
33
- assertDefinesString (classData , "Hello world!" );
29
+ Utils . assertDefinesString (classData , "Hello world!" );
34
30
} catch (IOException ex ) {
35
31
fail (ex );
36
32
}
@@ -61,13 +57,13 @@ public void testDeflateJvmJar() {
61
57
assertEquals ("Hello.class" , redHerringCentralDir .getFileName ());
62
58
assertNull ( redHerringCentralDir .getLinkedFileHeader (), "The red herring central directory got linked" );
63
59
byte [] redHerringClassData = zip .getLocalFiles ().get (1 ).decompress (new DeflateDecompressor ());
64
- assertDefinesString (redHerringClassData , "Hello world!" );
60
+ Utils . assertDefinesString (redHerringClassData , "Hello world!" );
65
61
// The real class that gets run by the JVM
66
62
CentralDirectoryFileHeader jvmCentralDir = zip .getCentralDirectories ().get (3 );
67
63
assertEquals ("Hello.class/" , jvmCentralDir .getFileName ());
68
64
assertNotEquals ("Hello.class/" , jvmCentralDir .getLinkedFileHeader ().getFileName ());
69
65
byte [] classData = jvmCentralDir .getLinkedFileHeader ().decompress (new DeflateDecompressor ());
70
- assertDefinesString (classData , "The secret code is: ROSE" );
66
+ Utils . assertDefinesString (classData , "The secret code is: ROSE" );
71
67
} catch (IOException ex ) {
72
68
fail (ex );
73
69
}
@@ -84,35 +80,15 @@ public void testDeflateJvmJarWithGarbageHeader() {
84
80
CentralDirectoryFileHeader redHerringCentralDir = zip .getCentralDirectories ().get (1 );
85
81
assertEquals ("Hello\t .class" , redHerringCentralDir .getFileName ());
86
82
byte [] redHerringClassData = redHerringCentralDir .getLinkedFileHeader ().decompress (new DeflateDecompressor ());
87
- assertDefinesString (redHerringClassData , "Hello world!" );
83
+ Utils . assertDefinesString (redHerringClassData , "Hello world!" );
88
84
// The real class that gets run by the JVM
89
85
CentralDirectoryFileHeader jvmCentralDir = zip .getCentralDirectories ().get (0 );
90
86
assertEquals ("Hello.class/" , jvmCentralDir .getFileName ());
91
87
assertNotEquals ("Hello.class/" , jvmCentralDir .getLinkedFileHeader ().getFileName ());
92
88
byte [] classData = jvmCentralDir .getLinkedFileHeader ().decompress (new DeflateDecompressor ());
93
- assertDefinesString (classData , "The secret code is: ROSE" );
89
+ Utils . assertDefinesString (classData , "The secret code is: ROSE" );
94
90
} catch (IOException ex ) {
95
91
fail (ex );
96
92
}
97
93
}
98
-
99
-
100
-
101
- public static void assertDefinesString (byte [] code , String target ) {
102
- boolean [] visited = new boolean [1 ];
103
- ClassReader cr = new ClassReader (code );
104
- cr .accept (new ClassVisitor (Opcodes .ASM9 ) {
105
- @ Override
106
- public MethodVisitor visitMethod (int access , String name , String descriptor , String signature , String [] exceptions ) {
107
- return new MethodVisitor (Opcodes .ASM9 ) {
108
- @ Override
109
- public void visitLdcInsn (Object value ) {
110
- visited [0 ] = true ;
111
- assertEquals (target , value );
112
- }
113
- };
114
- }
115
- }, ClassReader .SKIP_FRAMES );
116
- assertTrue (visited [0 ], "The entry did not visit any LDC constants" );
117
- }
118
94
}
0 commit comments