Fork of the Fernflower decompiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fernflower/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java

99 lines
3.0 KiB

/*
* Copyright 2000-2017 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.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.jetbrains.java.decompiler.DecompilerTestFixture.assertFilesEqual;
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();
assertFilesEqual(new File(fixture.getTestDataDir(), "bulk"), fixture.getTargetDir());
}
@Test
public void testJar() {
doTestJar("bulk");
}
@Test
public void testObfuscated() {
doTestJar("obfuscated");
}
private void doTestJar(String name) {
ConsoleDecompiler decompiler = fixture.getDecompiler();
String jarName = name + ".jar";
decompiler.addSpace(new File(fixture.getTestDataDir(), jarName), true);
decompiler.decompileContext();
File unpacked = new File(fixture.getTempDir(), "unpacked");
unpack(new File(fixture.getTargetDir(), jarName), unpacked);
assertFilesEqual(new File(fixture.getTestDataDir(), name), unpacked);
}
private static void unpack(File archive, File targetDir) {
try (ZipFile zip = new ZipFile(archive)) {
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());
try (InputStream in = zip.getInputStream(entry); OutputStream out = new FileOutputStream(file)) {
InterpreterUtil.copyStream(in, out);
}
}
}
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
}