From a725e5b7b6fa328083ae783b8838309f9c4f48e9 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 28 Dec 2015 15:23:16 +0100 Subject: [PATCH] Cleanup (java decompiler test optimization) --- .../decompiler/BulkDecompilationTest.java | 2 +- .../decompiler/DecompilerTestFixture.java | 31 +++--- .../java/decompiler/SingleClassesTest.java | 81 ++++++++++++++-- .../decompiler/SingleClassesTestBase.java | 97 ------------------- 4 files changed, 88 insertions(+), 123 deletions(-) delete mode 100644 test/org/jetbrains/java/decompiler/SingleClassesTestBase.java diff --git a/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java b/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java index 0211a57..31778cb 100644 --- a/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java +++ b/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java @@ -94,4 +94,4 @@ public class BulkDecompilationTest { throw new RuntimeException(e); } } -} +} \ No newline at end of file diff --git a/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java b/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java index ad36548..b3385e2 100644 --- a/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java +++ b/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java @@ -22,10 +22,10 @@ import org.jetbrains.java.decompiler.util.InterpreterUtil; import java.io.File; import java.io.IOException; -import java.util.Collections; import java.util.HashMap; import java.util.Map; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -35,11 +35,9 @@ public class DecompilerTestFixture { private File targetDir; private ConsoleDecompiler decompiler; - public void setUp() throws IOException { - setUp(Collections.emptyMap()); - } + public void setUp(String... optionPairs) throws IOException { + assertEquals(0, optionPairs.length % 2); - public void setUp(final Map options) throws IOException { 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"); @@ -54,15 +52,18 @@ public class DecompilerTestFixture { targetDir = new File(tempDir, "decompiled"); assertTrue(targetDir.mkdirs()); - decompiler = new ConsoleDecompiler(this.targetDir, new HashMap() {{ - put(IFernflowerPreferences.LOG_LEVEL, "warn"); - put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1"); - put(IFernflowerPreferences.REMOVE_SYNTHETIC, "1"); - put(IFernflowerPreferences.REMOVE_BRIDGE, "1"); - put(IFernflowerPreferences.LITERALS_AS_IS, "1"); - put(IFernflowerPreferences.UNIT_TEST_MODE, "1"); - putAll(options); - }}); + + Map options = new HashMap(); + options.put(IFernflowerPreferences.LOG_LEVEL, "warn"); + options.put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1"); + options.put(IFernflowerPreferences.REMOVE_SYNTHETIC, "1"); + options.put(IFernflowerPreferences.REMOVE_BRIDGE, "1"); + options.put(IFernflowerPreferences.LITERALS_AS_IS, "1"); + options.put(IFernflowerPreferences.UNIT_TEST_MODE, "1"); + for (int i = 0; i < optionPairs.length; i += 2) { + options.put(optionPairs[i], optionPairs[i + 1]); + } + decompiler = new ConsoleDecompiler(targetDir, options); } public void tearDown() { @@ -121,4 +122,4 @@ public class DecompilerTestFixture { throw new RuntimeException(e); } } -} +} \ No newline at end of file diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java index 0da0d3b..1ab4ea2 100644 --- a/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -15,19 +15,34 @@ */ 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.util.HashMap; -import java.util.Map; +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.*; -public class SingleClassesTest extends SingleClassesTestBase { - @Override - protected Map getDecompilerOptions() { - return new HashMap() {{ - put(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1"); - put(IFernflowerPreferences.DUMP_ORIGINAL_LINES, "1"); - }}; +import static org.jetbrains.java.decompiler.DecompilerTestFixture.assertFilesEqual; +import static org.junit.Assert.assertTrue; + +public class SingleClassesTest { + private DecompilerTestFixture fixture; + + @Before + public void setUp() throws IOException { + fixture = new DecompilerTestFixture(); + fixture.setUp(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1", + IFernflowerPreferences.DUMP_ORIGINAL_LINES, "1"); + } + + @After + public void tearDown() { + fixture.tearDown(); + fixture = null; } @Test public void testClassFields() { doTest("pkg/TestClassFields"); } @@ -62,4 +77,50 @@ public class SingleClassesTest extends SingleClassesTestBase { @Test public void testInnerSignature() { doTest("pkg/TestInnerSignature"); } @Test public void testParameterizedTypes() { doTest("pkg/TestParameterizedTypes"); } @Test public void testShadowing() { doTest("pkg/TestShadowing", "pkg/Shadow", "ext/Shadow"); } -} + + protected void doTest(String testFile, String... companionFiles) { + ConsoleDecompiler decompiler = fixture.getDecompiler(); + + File classFile = new File(fixture.getTestDataDir(), "/classes/" + testFile + ".class"); + assertTrue(classFile.isFile()); + for (File file : collectClasses(classFile)) { + decompiler.addSpace(file, true); + } + + for (String companionFile : companionFiles) { + File companionClassFile = new File(fixture.getTestDataDir(), "/classes/" + companionFile + ".class"); + assertTrue(companionClassFile.isFile()); + for (File file : collectClasses(companionClassFile)) { + decompiler.addSpace(file, true); + } + } + + decompiler.decompileContext(); + + String testName = classFile.getName().substring(0, classFile.getName().length() - 6); + File decompiledFile = new File(fixture.getTargetDir(), testName + ".java"); + assertTrue(decompiledFile.isFile()); + File referenceFile = new File(fixture.getTestDataDir(), "results/" + testName + ".dec"); + assertTrue(referenceFile.isFile()); + assertFilesEqual(referenceFile, decompiledFile); + } + + private static List collectClasses(File classFile) { + List files = new ArrayList(); + files.add(classFile); + + File parent = classFile.getParentFile(); + if (parent != null) { + final String pattern = classFile.getName().replace(".class", "") + "\\$.+\\.class"; + File[] inner = parent.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.matches(pattern); + } + }); + if (inner != null) Collections.addAll(files, inner); + } + + return files; + } +} \ No newline at end of file diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java b/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java deleted file mode 100644 index 0601f0e..0000000 --- a/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2000-2015 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.junit.After; -import org.junit.Before; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static org.jetbrains.java.decompiler.DecompilerTestFixture.assertFilesEqual; -import static org.junit.Assert.assertTrue; - -public abstract class SingleClassesTestBase { - private DecompilerTestFixture fixture; - - @Before - public void setUp() throws IOException { - fixture = new DecompilerTestFixture(); - fixture.setUp(getDecompilerOptions()); - } - - @After - public void tearDown() { - fixture.tearDown(); - fixture = null; - } - - protected Map getDecompilerOptions() { - return Collections.emptyMap(); - } - - protected void doTest(String testFile, String... companionFiles) { - ConsoleDecompiler decompiler = fixture.getDecompiler(); - - File classFile = new File(fixture.getTestDataDir(), "/classes/" + testFile + ".class"); - assertTrue(classFile.isFile()); - for (File file : collectClasses(classFile)) { - decompiler.addSpace(file, true); - } - - for (String companionFile : companionFiles) { - File companionClassFile = new File(fixture.getTestDataDir(), "/classes/" + companionFile + ".class"); - assertTrue(companionClassFile.isFile()); - for (File file : collectClasses(companionClassFile)) { - decompiler.addSpace(file, true); - } - } - - decompiler.decompileContext(); - - String testName = classFile.getName().substring(0, classFile.getName().length() - 6); - File decompiledFile = new File(fixture.getTargetDir(), testName + ".java"); - assertTrue(decompiledFile.isFile()); - File referenceFile = new File(fixture.getTestDataDir(), "results/" + testName + ".dec"); - assertTrue(referenceFile.isFile()); - assertFilesEqual(referenceFile, decompiledFile); - } - - private static List collectClasses(File classFile) { - List files = new ArrayList(); - files.add(classFile); - - File parent = classFile.getParentFile(); - if (parent != null) { - final String pattern = classFile.getName().replace(".class", "") + "\\$.+\\.class"; - File[] inner = parent.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.matches(pattern); - } - }); - if (inner != null) Collections.addAll(files, inner); - } - - return files; - } -}