summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/org/jetbrains/java/decompiler/SingleClassesTest.java124
-rw-r--r--test/unit/TestSingleClasses.java95
-rw-r--r--test/unit/classes/TestClassFields.java13
-rw-r--r--test/unit/classes/TestClassLambda.java67
-rw-r--r--test/unit/classes/TestClassLoop.java48
-rw-r--r--test/unit/classes/TestClassSwitch.java16
-rw-r--r--test/unit/classes/TestClassTypes.java54
-rw-r--r--test/unit/classes/TestClassVar.java44
-rw-r--r--test/unit/results/TestClassFields.dec14
-rw-r--r--test/unit/results/TestClassLambda.dec75
-rw-r--r--test/unit/results/TestClassLoop.dec45
-rw-r--r--test/unit/results/TestClassSwitch.dec16
-rw-r--r--test/unit/results/TestClassTypes.dec50
-rw-r--r--test/unit/results/TestClassVar.dec43
14 files changed, 124 insertions, 580 deletions
diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java
new file mode 100644
index 0000000..1e37d97
--- /dev/null
+++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.java.decompiler;
+
+import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler;
+import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.*;
+import java.util.HashMap;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class SingleClassesTest {
+ private File tempDir;
+ private ConsoleDecompiler decompiler;
+
+ @Before
+ public void setUp() throws IOException {
+ tempDir = File.createTempFile("decompiler_test_", "_dir");
+ assertTrue(tempDir.delete());
+ assertTrue(tempDir.mkdirs());
+ decompiler = new ConsoleDecompiler(new HashMap<String, Object>() {{
+ boolean win = System.getProperty("os.name", "").startsWith("Windows");
+ put(IFernflowerPreferences.LOG_LEVEL, "warn");
+ put(IFernflowerPreferences.RENAME_ENTITIES, "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, (win ? "0" : "1"));
+ }});
+ }
+
+ @After
+ public void tearDown() {
+ decompiler = null;
+ delete(tempDir);
+ tempDir = null;
+ }
+
+ @Test public void testClassFields() { doTest("TestClassFields"); }
+ @Test public void testClassLambda() { doTest("TestClassLambda"); }
+ @Test public void testClassLoop() { doTest("TestClassLoop"); }
+ @Test public void testClassSwitch() { doTest("TestClassSwitch"); }
+ @Test public void testClassTypes() { doTest("TestClassTypes"); }
+ @Test public void testClassVar() { doTest("TestClassVar"); }
+
+ private void doTest(String testName) {
+ try {
+ File testDataDir = new File("testData");
+ if (!isTestDataDir(testDataDir)) testDataDir = new File("community/plugins/java-decompiler/engine/testData");
+ if (!isTestDataDir(testDataDir)) testDataDir = new File("plugins/java-decompiler/engine/testData");
+ assertTrue(isTestDataDir(testDataDir));
+
+ File classFile = new File(testDataDir, "/classes/pkg/" + testName + ".class");
+ assertTrue(classFile.isFile());
+ decompiler.addSpace(classFile, true);
+ decompiler.decompileContext(tempDir);
+
+ File decompiledFile = new File(tempDir, testName + ".java");
+ assertTrue(decompiledFile.isFile());
+
+ File referenceFile = new File(testDataDir, "results/" + testName + ".dec");
+ assertTrue(referenceFile.isFile());
+
+ String decompiledContent = getContent(decompiledFile);
+ String referenceContent = getContent(referenceFile);
+ assertEquals(referenceContent, decompiledContent);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static boolean isTestDataDir(File dir) {
+ return dir.isDirectory() && new File(dir, "classes").isDirectory() && new File(dir, "results").isDirectory();
+ }
+
+ private static String getContent(File file) throws IOException {
+ Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8");
+ try {
+ char[] buff = new char[16 * 1024];
+ StringBuilder content = new StringBuilder();
+ int n;
+ while ((n = reader.read(buff)) > 0) {
+ content.append(buff, 0, n);
+ }
+ return content.toString();
+ }
+ finally {
+ reader.close();
+ }
+ }
+
+ private static void delete(File file) {
+ if (file.isDirectory()) {
+ File[] files = file.listFiles();
+ if (files != null) {
+ for (File f : files) delete(f);
+ }
+ }
+ else {
+ assertTrue(file.delete());
+ }
+ }
+}
diff --git a/test/unit/TestSingleClasses.java b/test/unit/TestSingleClasses.java
deleted file mode 100644
index 754fcec..0000000
--- a/test/unit/TestSingleClasses.java
+++ /dev/null
@@ -1,95 +0,0 @@
-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");
- if(!reference_file.exists()) {
- return; // no reference file for some reason, not yet created
- }
-
- 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.
- File decompiled_file = new File(temp_dir, file_java_name);
- String decompiled_content = new String(Files.readAllBytes(decompiled_file.toPath()), "UTF-8");
- String reference_content = new String(Files.readAllBytes(reference_file.toPath()), "UTF-8");
-
- // clean up
- decompiled_file.delete();
- 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();
- }
-
- }
-
-}
diff --git a/test/unit/classes/TestClassFields.java b/test/unit/classes/TestClassFields.java
deleted file mode 100644
index 8ae7449..0000000
--- a/test/unit/classes/TestClassFields.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package unit.classes;
-
-public class TestClassFields {
-
- private static int[] sizes;
- private static String[] names;
-
- static {
-
- names = new String[]{"name1", "name2"};
- sizes = new int[names.length];
- }
-}
diff --git a/test/unit/classes/TestClassLambda.java b/test/unit/classes/TestClassLambda.java
deleted file mode 100644
index a2b9d9a..0000000
--- a/test/unit/classes/TestClassLambda.java
+++ /dev/null
@@ -1,67 +0,0 @@
-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;
- }
-
-}
diff --git a/test/unit/classes/TestClassLoop.java b/test/unit/classes/TestClassLoop.java
deleted file mode 100644
index 5288cf6..0000000
--- a/test/unit/classes/TestClassLoop.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package unit.classes;
-
-public class TestClassLoop {
-
- public static void testSimpleInfinite() {
-
- while(true) {
- System.out.println();
- }
-
- }
-
- public static void testFinally() {
-
- boolean a = (Math.random() > 0);
-
- while(true) {
- try {
- if(!a) {
- return;
- }
- } finally {
- System.out.println("1");
- }
- }
-
- }
-
- public static void testFinallyContinue() {
-
- boolean a = (Math.random() > 0);
-
- for(;;) {
- try {
- System.out.println("1");
- } finally {
- if(a) {
- System.out.println("3");
- continue;
- }
- }
-
- System.out.println("4");
- }
-
- }
-
-}
diff --git a/test/unit/classes/TestClassSwitch.java b/test/unit/classes/TestClassSwitch.java
deleted file mode 100644
index 3e29d5e..0000000
--- a/test/unit/classes/TestClassSwitch.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package unit.classes;
-
-public class TestClassSwitch {
-
- public void testCaseOrder(int a) {
-
- switch(a) {
- case 13:
- System.out.println(13);
- return;
- case 5:
- System.out.println(5);
- }
- }
-
-}
diff --git a/test/unit/classes/TestClassTypes.java b/test/unit/classes/TestClassTypes.java
deleted file mode 100644
index a8a5116..0000000
--- a/test/unit/classes/TestClassTypes.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package unit.classes;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TestClassTypes {
-
- public void testBoolean() {
-
- byte var7 = 0;
- long time = System.currentTimeMillis();
-
- if(time % 2 > 0) {
- var7 = 1;
- } else if(time % 3 > 0) {
- var7 = 2;
- }
-
- if(var7 == 1) {
- System.out.println();
- }
- }
-
- public boolean testBit(int var0) {
- return (var0 & 1) == 1;
- }
-
- public void testSwitchConsts(int a) {
-
- switch (a) {
- case 88:
- System.out.println("1");
- break;
- case 656:
- System.out.println("2");
- break;
- case 65201:
- case 65489:
- System.out.println("3");
- }
- }
-
- public void testAssignmentType(List list) {
-
- List a = list;
-
- if(a != null) {
- (a = new ArrayList(a)).add("23");
- }
-
- System.out.println(a.size());
- }
-
-}
diff --git a/test/unit/classes/TestClassVar.java b/test/unit/classes/TestClassVar.java
deleted file mode 100644
index fdba5c6..0000000
--- a/test/unit/classes/TestClassVar.java
+++ /dev/null
@@ -1,44 +0,0 @@
-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();
- }
- }
- }
-
-}
diff --git a/test/unit/results/TestClassFields.dec b/test/unit/results/TestClassFields.dec
deleted file mode 100644
index 85aea77..0000000
--- a/test/unit/results/TestClassFields.dec
+++ /dev/null
@@ -1,14 +0,0 @@
-package unit.classes;
-
-
-public class TestClassFields {
-
- private static int[] sizes;
- private static String[] names = new String[]{"name1", "name2"};
-
-
- static {
- sizes = new int[names.length];
- }
-
-}
diff --git a/test/unit/results/TestClassLambda.dec b/test/unit/results/TestClassLambda.dec
deleted file mode 100644
index 6ff82d8..0000000
--- a/test/unit/results/TestClassLambda.dec
+++ /dev/null
@@ -1,75 +0,0 @@
-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;
- }
-}
diff --git a/test/unit/results/TestClassLoop.dec b/test/unit/results/TestClassLoop.dec
deleted file mode 100644
index a931148..0000000
--- a/test/unit/results/TestClassLoop.dec
+++ /dev/null
@@ -1,45 +0,0 @@
-package unit.classes;
-
-
-public class TestClassLoop {
-
- public static void testSimpleInfinite() {
- while(true) {
- System.out.println();
- }
- }
-
- 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");
- }
- }
-}
diff --git a/test/unit/results/TestClassSwitch.dec b/test/unit/results/TestClassSwitch.dec
deleted file mode 100644
index 386a341..0000000
--- a/test/unit/results/TestClassSwitch.dec
+++ /dev/null
@@ -1,16 +0,0 @@
-package unit.classes;
-
-
-public class TestClassSwitch {
-
- public void testCaseOrder(int var1) {
- switch(var1) {
- case 5:
- System.out.println(5);
- default:
- return;
- case 13:
- System.out.println(13);
- }
- }
-}
diff --git a/test/unit/results/TestClassTypes.dec b/test/unit/results/TestClassTypes.dec
deleted file mode 100644
index 0bda616..0000000
--- a/test/unit/results/TestClassTypes.dec
+++ /dev/null
@@ -1,50 +0,0 @@
-package unit.classes;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TestClassTypes {
-
- public void testBoolean() {
- byte var1 = 0;
- long var2 = System.currentTimeMillis();
- if(var2 % 2L > 0L) {
- var1 = 1;
- } else if(var2 % 3L > 0L) {
- var1 = 2;
- }
-
- if(var1 == 1) {
- System.out.println();
- }
-
- }
-
- public boolean testBit(int var1) {
- return (var1 & 1) == 1;
- }
-
- public void testSwitchConsts(int var1) {
- switch(var1) {
- case 88:
- System.out.println("1");
- break;
- case 656:
- System.out.println("2");
- break;
- case 65201:
- case 65489:
- System.out.println("3");
- }
-
- }
-
- public void testAssignmentType(List var1) {
- Object var2 = var1;
- if(var1 != null) {
- ((List)(var2 = new ArrayList(var1))).add("23");
- }
-
- System.out.println(((List)var2).size());
- }
-}
diff --git a/test/unit/results/TestClassVar.dec b/test/unit/results/TestClassVar.dec
deleted file mode 100644
index cca4d7a..0000000
--- a/test/unit/results/TestClassVar.dec
+++ /dev/null
@@ -1,43 +0,0 @@
-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();
- }
- }
-
- }
-}