parent
ff382a6fdf
commit
7a8097321f
@ -0,0 +1,110 @@ |
||||
/* |
||||
* 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.hamcrest.Matchers; |
||||
import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler; |
||||
import org.jetbrains.java.decompiler.util.InterpreterUtil; |
||||
import org.junit.After; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
|
||||
import java.io.*; |
||||
import java.util.Enumeration; |
||||
import java.util.zip.ZipEntry; |
||||
import java.util.zip.ZipFile; |
||||
|
||||
import static org.junit.Assert.assertThat; |
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
public class BulkDecompilationTest { |
||||
private DecompilerTestFixture fixture; |
||||
|
||||
@Before |
||||
public void setUp() throws IOException { |
||||
fixture = new DecompilerTestFixture(); |
||||
fixture.setUp(); |
||||
} |
||||
|
||||
@After |
||||
public void tearDown() { |
||||
fixture.tearDown(); |
||||
fixture = null; |
||||
} |
||||
|
||||
@Test |
||||
public void testDirectory() { |
||||
File classes = new File(fixture.getTempDir(), "classes"); |
||||
unpack(new File(fixture.getTestDataDir(), "bulk.jar"), classes); |
||||
|
||||
ConsoleDecompiler decompiler = fixture.getDecompiler(); |
||||
decompiler.addSpace(classes, true); |
||||
decompiler.decompileContext(); |
||||
|
||||
compareDirectories(new File(fixture.getTestDataDir(), "bulk"), fixture.getTargetDir()); |
||||
} |
||||
|
||||
@Test |
||||
public void testJar() { |
||||
ConsoleDecompiler decompiler = fixture.getDecompiler(); |
||||
decompiler.addSpace(new File(fixture.getTestDataDir(), "bulk.jar"), true); |
||||
decompiler.decompileContext(); |
||||
|
||||
File unpacked = new File(fixture.getTempDir(), "unpacked"); |
||||
unpack(new File(fixture.getTargetDir(), "bulk.jar"), unpacked); |
||||
|
||||
compareDirectories(new File(fixture.getTestDataDir(), "bulk"), unpacked); |
||||
} |
||||
|
||||
private static void unpack(File archive, File targetDir) { |
||||
try { |
||||
ZipFile zip = new ZipFile(archive); |
||||
try { |
||||
Enumeration<? extends ZipEntry> entries = zip.entries(); |
||||
while (entries.hasMoreElements()) { |
||||
ZipEntry entry = entries.nextElement(); |
||||
if (!entry.isDirectory()) { |
||||
File file = new File(targetDir, entry.getName()); |
||||
assertTrue(file.getParentFile().mkdirs() || file.getParentFile().isDirectory()); |
||||
InputStream in = zip.getInputStream(entry); |
||||
OutputStream out = new FileOutputStream(file); |
||||
InterpreterUtil.copyStream(in, out); |
||||
out.close(); |
||||
in.close(); |
||||
} |
||||
} |
||||
} |
||||
finally { |
||||
zip.close(); |
||||
} |
||||
} |
||||
catch (IOException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
|
||||
private static void compareDirectories(File expected, File actual) { |
||||
String[] expectedList = expected.list(); |
||||
String[] actualList = actual.list(); |
||||
assertThat(actualList, Matchers.arrayContainingInAnyOrder(expectedList)); |
||||
for (String name : expectedList) { |
||||
File child = new File(expected, name); |
||||
if (child.isDirectory()) { |
||||
compareDirectories(child, new File(actual, name)); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,86 @@ |
||||
/* |
||||
* 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 java.io.*; |
||||
import java.util.HashMap; |
||||
|
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
public class DecompilerTestFixture { |
||||
private File testDataDir; |
||||
private File tempDir; |
||||
private File targetDir; |
||||
private ConsoleDecompiler decompiler; |
||||
|
||||
public void setUp() 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"); |
||||
assertTrue(isTestDataDir(testDataDir)); |
||||
|
||||
//noinspection SSBasedInspection
|
||||
tempDir = File.createTempFile("decompiler_test_", "_dir"); |
||||
assertTrue(tempDir.delete()); |
||||
|
||||
targetDir = new File(tempDir, "decompiled"); |
||||
assertTrue(targetDir.mkdirs()); |
||||
decompiler = new ConsoleDecompiler(this.targetDir, new HashMap<String, Object>() {{ |
||||
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"); |
||||
}}); |
||||
} |
||||
|
||||
public void tearDown() { |
||||
delete(tempDir); |
||||
} |
||||
|
||||
public File getTestDataDir() { |
||||
return testDataDir; |
||||
} |
||||
|
||||
public File getTempDir() { |
||||
return tempDir; |
||||
} |
||||
|
||||
public File getTargetDir() { |
||||
return targetDir; |
||||
} |
||||
|
||||
public ConsoleDecompiler getDecompiler() { |
||||
return decompiler; |
||||
} |
||||
|
||||
private static boolean isTestDataDir(File dir) { |
||||
return dir.isDirectory() && new File(dir, "classes").isDirectory() && new File(dir, "results").isDirectory(); |
||||
} |
||||
|
||||
private static void delete(File file) { |
||||
if (file.isDirectory()) { |
||||
File[] files = file.listFiles(); |
||||
if (files != null) { |
||||
for (File f : files) delete(f); |
||||
} |
||||
} |
||||
assertTrue(file.delete()); |
||||
} |
||||
} |
Binary file not shown.
Loading…
Reference in new issue