parent
3b9b180d94
commit
70bf7f3f69
@ -0,0 +1,89 @@ |
|||||||
|
package unit; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.file.Files; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.HashMap; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import de.fernflower.main.decompiler.ConsoleDecompiler; |
||||||
|
import de.fernflower.main.extern.IFernflowerPreferences; |
||||||
|
|
||||||
|
public class TestSingleClasses { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void test() throws IOException { |
||||||
|
|
||||||
|
Date start = new Date(); |
||||||
|
|
||||||
|
String current_path = new File(".").getCanonicalPath().toString(); |
||||||
|
|
||||||
|
iterateDirectory(new File(current_path + "/bin/unit/classes/")); |
||||||
|
|
||||||
|
System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000); |
||||||
|
} |
||||||
|
|
||||||
|
private void iterateDirectory(File dir) throws IOException { |
||||||
|
|
||||||
|
for (File file : dir.listFiles()) { |
||||||
|
if (file.isDirectory()) { |
||||||
|
iterateDirectory(file); |
||||||
|
} else if(file.getName().endsWith(".class")) { |
||||||
|
decompileAndCheckFile(file); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void decompileAndCheckFile(File file) throws IOException { |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{ |
||||||
|
put("log", "warn"); |
||||||
|
put("ren", "1"); |
||||||
|
put(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR, "1"); |
||||||
|
put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "0"); |
||||||
|
put(IFernflowerPreferences.IDEA_NOT_NULL_ANNOTATION, "1"); |
||||||
|
put(IFernflowerPreferences.LAMBDA_TO_ANONYMOUS_CLASS, "0"); |
||||||
|
put(IFernflowerPreferences.USE_DEBUG_VARNAMES, "0"); |
||||||
|
put(IFernflowerPreferences.NEW_LINE_SEPARATOR, "0"); |
||||||
|
}}); |
||||||
|
|
||||||
|
decompiler.addSpace(file, true); |
||||||
|
|
||||||
|
// files
|
||||||
|
String current_path = new File(".").getCanonicalPath().toString(); |
||||||
|
|
||||||
|
String file_class_name = file.getName(); |
||||||
|
String file_name = file_class_name.substring(0, file_class_name.lastIndexOf(".class")); |
||||||
|
String file_java_name = file_name+".java"; |
||||||
|
|
||||||
|
File reference_file = new File(current_path + "/test/unit/results/" + file_name + ".dec"); |
||||||
|
File temp_dir = new File(Files.createTempDirectory("tempdec_"+file_name).toString()); |
||||||
|
|
||||||
|
// decompile it
|
||||||
|
decompiler.decompileContext(temp_dir); |
||||||
|
|
||||||
|
// get both the decompiled file content and the reference
|
||||||
|
// NOTE: reference files are saved with Windows-style line endings. Convert them if you are decompiling to Unix.
|
||||||
|
String decompiled_content = new String(Files.readAllBytes(new File(temp_dir, file_java_name).toPath()), "UTF-8"); |
||||||
|
String reference_content = new String(Files.readAllBytes(reference_file.toPath()), "UTF-8"); |
||||||
|
|
||||||
|
// clean up
|
||||||
|
//temp_dir.delete();
|
||||||
|
|
||||||
|
// compare file content with the reference
|
||||||
|
assertEquals(decompiled_content, reference_content); |
||||||
|
|
||||||
|
} catch(Exception ex) { |
||||||
|
System.out.println("ERROR: testing file " + file.getCanonicalPath()); |
||||||
|
ex.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package unit.classes; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.util.OptionalInt; |
||||||
|
import java.util.function.IntBinaryOperator; |
||||||
|
import java.util.function.Supplier; |
||||||
|
|
||||||
|
public class TestClassLambda { |
||||||
|
|
||||||
|
public int field = 0; |
||||||
|
|
||||||
|
public void testLambda() { |
||||||
|
|
||||||
|
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); |
||||||
|
int b = (int)Math.random(); |
||||||
|
|
||||||
|
list.forEach(n -> {int a = 2 * n; System.out.println(a + b + field);}); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda1() { |
||||||
|
|
||||||
|
int a = (int)Math.random(); |
||||||
|
|
||||||
|
Runnable r = () -> { System.out.println("hello" + a); }; |
||||||
|
|
||||||
|
Runnable r1 = () -> { System.out.println("hello1" + a); }; |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda2() { |
||||||
|
reduce((left, right) -> Math.max(left, right)); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda3() { // IDEA-127301
|
||||||
|
reduce(Math::max); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda4() { |
||||||
|
reduce(TestClassLambda::localMax); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda5() { |
||||||
|
String x = "abcd"; |
||||||
|
function(x::toString); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda6() { |
||||||
|
List<String> list = new ArrayList<String>(); |
||||||
|
int bottom = list.size() * 2; |
||||||
|
int top = list.size() * 5; |
||||||
|
list.removeIf( s -> (bottom >= s.length() && s.length() <= top) ); |
||||||
|
} |
||||||
|
|
||||||
|
public static OptionalInt reduce(IntBinaryOperator op) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static String function(Supplier<String> supplier) { |
||||||
|
return supplier.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public static int localMax(int first, int second) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package unit.classes; |
||||||
|
|
||||||
|
|
||||||
|
public class TestClassVar { |
||||||
|
|
||||||
|
private boolean field_boolean = (Math.random() > 0); |
||||||
|
public int field_int = 0; |
||||||
|
|
||||||
|
public void testFieldSSAU() { |
||||||
|
|
||||||
|
for(int i = 0; i < 10; i++) { |
||||||
|
|
||||||
|
try { |
||||||
|
System.out.println(); |
||||||
|
} finally { |
||||||
|
if (field_boolean) { |
||||||
|
System.out.println(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public Long testFieldSSAU1() { // IDEA-127466
|
||||||
|
return new Long(field_int++); |
||||||
|
} |
||||||
|
|
||||||
|
public void testComplexPropagation() { |
||||||
|
|
||||||
|
int a = 0; |
||||||
|
|
||||||
|
while (a < 10) { |
||||||
|
|
||||||
|
int b = a; |
||||||
|
|
||||||
|
for(; a < 10 && a == 0; a++) {} |
||||||
|
|
||||||
|
if (b != a) { |
||||||
|
System.out.println(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package unit.classes; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.util.OptionalInt; |
||||||
|
import java.util.function.Consumer; |
||||||
|
import java.util.function.IntBinaryOperator; |
||||||
|
import java.util.function.Predicate; |
||||||
|
import java.util.function.Supplier; |
||||||
|
|
||||||
|
public class TestClassLambda { |
||||||
|
|
||||||
|
public int field = 0; |
||||||
|
|
||||||
|
|
||||||
|
public void testLambda() { |
||||||
|
List var1 = Arrays.asList(new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5), Integer.valueOf(6), Integer.valueOf(7)}); |
||||||
|
int var2 = (int)Math.random(); |
||||||
|
var1.forEach((var2x) -> { |
||||||
|
int var3 = 2 * var2x.intValue(); |
||||||
|
System.out.println(var3 + var2 + this.field); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda1() { |
||||||
|
int var1 = (int)Math.random(); |
||||||
|
Runnable var2 = () -> { |
||||||
|
System.out.println("hello" + var1); |
||||||
|
}; |
||||||
|
Runnable var3 = () -> { |
||||||
|
System.out.println("hello1" + var1); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda2() { |
||||||
|
reduce((var0, var1) -> { |
||||||
|
return Math.max(var0, var1); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda3() { |
||||||
|
reduce(Math::max); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda4() { |
||||||
|
reduce(TestClassLambda::localMax); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda5() { |
||||||
|
String var1 = "abcd"; |
||||||
|
function(var1::toString); |
||||||
|
} |
||||||
|
|
||||||
|
public void testLambda6() { |
||||||
|
ArrayList var1 = new ArrayList(); |
||||||
|
int var2 = var1.size() * 2; |
||||||
|
int var3 = var1.size() * 5; |
||||||
|
var1.removeIf((var2x) -> { |
||||||
|
return var2 >= var2x.length() && var2x.length() <= var3; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public static OptionalInt reduce(IntBinaryOperator var0) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static String function(Supplier var0) { |
||||||
|
return (String)var0.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public static int localMax(int var0, int var1) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package unit.classes; |
||||||
|
|
||||||
|
|
||||||
|
public class TestClassLoop { |
||||||
|
|
||||||
|
public static void testFinally() { |
||||||
|
boolean var0 = Math.random() > 0.0D; |
||||||
|
|
||||||
|
while(true) { |
||||||
|
try { |
||||||
|
if(!var0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
} finally { |
||||||
|
System.out.println("1"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void testFinallyContinue() { |
||||||
|
boolean var0 = Math.random() > 0.0D; |
||||||
|
|
||||||
|
while(true) { |
||||||
|
while(true) { |
||||||
|
try { |
||||||
|
System.out.println("1"); |
||||||
|
break; |
||||||
|
} finally { |
||||||
|
if(var0) { |
||||||
|
System.out.println("3"); |
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
System.out.println("4"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package unit.classes; |
||||||
|
|
||||||
|
|
||||||
|
public class TestClassVar { |
||||||
|
|
||||||
|
private boolean field_boolean = Math.random() > 0.0D; |
||||||
|
public int field_int = 0; |
||||||
|
|
||||||
|
|
||||||
|
public void testFieldSSAU() { |
||||||
|
for(int var1 = 0; var1 < 10; ++var1) { |
||||||
|
try { |
||||||
|
System.out.println(); |
||||||
|
} finally { |
||||||
|
if(this.field_boolean) { |
||||||
|
System.out.println(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public Long testFieldSSAU1() { |
||||||
|
return new Long((long)(this.field_int++)); |
||||||
|
} |
||||||
|
|
||||||
|
public void testComplexPropagation() { |
||||||
|
int var1 = 0; |
||||||
|
|
||||||
|
while(var1 < 10) { |
||||||
|
int var2; |
||||||
|
for(var2 = var1; var1 < 10 && var1 == 0; ++var1) { |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
if(var2 != var1) { |
||||||
|
System.out.println(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue