package com.intellij.flex.parser;
import com.intellij.flex.util.FlexTestUtils;
import com.intellij.lang.javascript.flex.importer.FlexImporter;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@SuppressWarnings({"ALL"})
public class FlexImporterTest extends TestCase {
public final void testAbc() throws Exception {
doTestFor("builtin.abc");
}
public final void testEmptySwf() throws Exception {
doTestFor("Assets.swf");
}
public final void testHelloWorld() throws Exception {
doTestFor("HelloWorld.swc");
}
public final void testDoNotCreateNsReference() throws Exception {
doTestFor("debugger-0.2alpha2.swc");
}
public final void testSwf() throws Exception {
doTestFor("employeedirectory.swf");
}
public final void testParamNames() throws Exception {
doTestFor("ParamNames.swc");
}
public final void testCustomNsForMethod() throws Exception {
doTestFor("Lib1.swc");
}
public final void testAlchemy() throws Exception {
doTestFor("Alchemy.swc");
}
public final void testGenericSyntax() throws Exception {
doTestFor("PlayerGlobal10.swc");
}
public final void testObfuscated() throws Exception {
doTestFor("Obfuscated.swc");
}
public final void testAirGlobal_1_5() throws Exception {
doTestFor("airglobal_1_5.swc");
}
public final void testDs() throws Exception {
doTestFor("ds.swc");
}
public final void testHotbook() throws Exception {
doTestFor("hotbook.swf");
}
private void doTestFor(final String fileName) throws IOException {
final File file = new File(getTestDataPath() + fileName);
final byte[] contents;
if (file.getName().endsWith(".swc")) {
final ZipFile zipFile = new ZipFile(file);
final ZipEntry zipEntry = zipFile.getEntry("library.swf");
final InputStream inputStream = zipFile.getInputStream(zipEntry);
contents = FileUtil.loadBytes(inputStream, (int)zipEntry.getSize());
inputStream.close();
zipFile.close();
}
else {
contents = FileUtil.loadFileBytes(file);
}
String result = FlexImporter.buildInterfaceFromStream(new ByteArrayInputStream(contents));
String resultFileName = getTestDataPath() + fileName + ".txt";
try {
String expected =
StringUtil.convertLineSeparators(FileUtil.loadFile(new File(resultFileName), CharsetToolkit.UTF8_CHARSET));
assertEquals("interface stubs do not match", expected, result);
result = FlexImporter.dumpContentsFromStream(new ByteArrayInputStream(contents), getName().equals("testAbc"));
resultFileName = getTestDataPath() + fileName + ".il";
expected =
StringUtil.convertLineSeparators(FileUtil.loadFile(new File(resultFileName), CharsetToolkit.UTF8_CHARSET));
assertEquals(expected, result);
}
catch (IOException ex) {
if (!new File(resultFileName).exists()) {
FileUtil.writeToFile(new File(resultFileName), result);
System.out.println("File " + resultFileName + " was created");
throw ex;
}
}
}
public static String getTestDataPath() {
return FlexTestUtils.getTestDataPath("flex_importer") + "/";
}
}