package jadx.tests.api;
import jadx.core.dex.nodes.ClassNode;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.jf.smali.main;
import static org.junit.Assert.fail;
public class SmaliTest extends IntegrationTest {
private static final String SMALI_TESTS_PROJECT = "jadx-core";
private static final String SMALI_TESTS_DIR = "src/test/smali";
private static final String SMALI_TESTS_EXT = ".smali";
protected ClassNode getClassNodeFromSmali(String clsName) {
File smaliFile = getSmaliFile(clsName);
File outDex = createTempFile(".dex");
compileSmali(smaliFile, outDex);
return getClassNodeFromFile(outDex, clsName);
}
private static File getSmaliFile(String clsName) {
File smaliFile = new File(SMALI_TESTS_DIR, clsName + SMALI_TESTS_EXT);
if (smaliFile.exists()) {
return smaliFile;
}
smaliFile = new File(SMALI_TESTS_PROJECT, smaliFile.getPath());
if (smaliFile.exists()) {
return smaliFile;
}
fail("Smali file not found: " + SMALI_TESTS_DIR + "/" + clsName + SMALI_TESTS_EXT);
return null;
}
private static boolean compileSmali(File input, File output) {
List<String> args = new ArrayList<String>();
args.add(input.getAbsolutePath());
args.add("-o");
args.add(output.getAbsolutePath());
main.main(args.toArray(new String[args.size()]));
return true;
}
}