summaryrefslogtreecommitdiffstats
path: root/jack-tests/tests/com/android/jack/shrob
diff options
context:
space:
mode:
Diffstat (limited to 'jack-tests/tests/com/android/jack/shrob')
-rw-r--r--jack-tests/tests/com/android/jack/shrob/AbstractTest.java561
-rw-r--r--jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java166
2 files changed, 727 insertions, 0 deletions
diff --git a/jack-tests/tests/com/android/jack/shrob/AbstractTest.java b/jack-tests/tests/com/android/jack/shrob/AbstractTest.java
new file mode 100644
index 0000000..319abaf
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/AbstractTest.java
@@ -0,0 +1,561 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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 com.android.jack.shrob;
+
+import com.android.jack.Main;
+import com.android.jack.ProguardFlags;
+import com.android.jack.TestTools;
+import com.android.jack.category.KnownBugs;
+import com.android.jack.category.SlowTests;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Abstract class for running shrob tests
+ */
+public abstract class AbstractTest {
+
+ @BeforeClass
+ public static void setUpClass() {
+ Main.class.getClassLoader().setDefaultAssertionStatus(true);
+ }
+
+ protected abstract void runTest(
+ @Nonnull String testNumber,
+ @Nonnull String flagNumber,
+ @Nonnull String mappingNumber)
+ throws Exception;
+
+ protected ProguardFlags generateApplyMapping(@Nonnull File mappingFile) throws IOException {
+ File applyMapping = TestTools.createTempFile("mapping.flags", null);
+ BufferedWriter writer = new BufferedWriter(new FileWriter(applyMapping));
+ writer.append("-applymapping ");
+ writer.append(mappingFile.getAbsolutePath());
+ writer.close();
+ return new ProguardFlags(applyMapping);
+ }
+
+ protected ProguardFlags generateInjars(@Nonnull File injar) throws IOException {
+ File injarFlags = TestTools.createTempFile("injars", ".flags");
+ BufferedWriter writer = new BufferedWriter(new FileWriter(injarFlags));
+ writer.append("-injars ");
+ writer.append(injar.getAbsolutePath());
+ writer.close();
+ return new ProguardFlags(injarFlags);
+ }
+
+ @Test
+ public void test1_001() throws Exception {
+ runTest("001", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_002() throws Exception {
+ runTest("001", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_003() throws Exception {
+ runTest("001", "003", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_004() throws Exception {
+ runTest("001", "004", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_005() throws Exception {
+ runTest("001", "005", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_005_002() throws Exception {
+ runTest("001", "005", "002");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_005_003() throws Exception {
+ runTest("001", "005", "003");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_006() throws Exception {
+ runTest("001", "006", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_007() throws Exception {
+ runTest("001", "007", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_008() throws Exception {
+ runTest("001", "008", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_009() throws Exception {
+ runTest("001", "009", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_010() throws Exception {
+ runTest("001", "010", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_011() throws Exception {
+ runTest("001", "011", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_012() throws Exception {
+ runTest("001", "012", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_013() throws Exception {
+ runTest("001", "013", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_014() throws Exception {
+ runTest("001", "014", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_015() throws Exception {
+ runTest("001", "015", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_016() throws Exception {
+ runTest("001", "016", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_017() throws Exception {
+ runTest("001", "017", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_018() throws Exception {
+ runTest("001", "018", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_019() throws Exception {
+ runTest("001", "019", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_020() throws Exception {
+ runTest("001", "020", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_021() throws Exception {
+ runTest("001", "021", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test1_022() throws Exception {
+ runTest("001", "022", "");
+ }
+
+ @Test
+ public void test2_001() throws Exception {
+ runTest("002", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test2_002() throws Exception {
+ runTest("002", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test2_003() throws Exception {
+ runTest("002", "003", "");
+ }
+
+ @Test
+ public void test4_001() throws Exception {
+ runTest("004", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test4_002() throws Exception {
+ runTest("004", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test4_003() throws Exception {
+ runTest("004", "003", "");
+ }
+
+ @Test
+ public void test5_001() throws Exception {
+ runTest("005", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_002() throws Exception {
+ runTest("005", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_003() throws Exception {
+ runTest("005", "003", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_004() throws Exception {
+ runTest("005", "004", "");
+ }
+
+ @Test
+ public void test5_005() throws Exception {
+ runTest("005", "005", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_006() throws Exception {
+ runTest("005", "006", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_007() throws Exception {
+ runTest("005", "007", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test5_008() throws Exception {
+ runTest("005", "008", "");
+ }
+
+ @Test
+ public void test6_001() throws Exception {
+ runTest("006", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test6_002() throws Exception {
+ runTest("006", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test6_003() throws Exception {
+ runTest("006", "003", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test6_004() throws Exception {
+ runTest("006", "004", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test6_005() throws Exception {
+ runTest("006", "005", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test6_006() throws Exception {
+ runTest("006", "006", "");
+ }
+
+ @Test
+ public void test7_001() throws Exception {
+ runTest("007", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test7_002() throws Exception {
+ runTest("007", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test7_003() throws Exception {
+ runTest("007", "003", "");
+ }
+
+ @Test
+ public void test8_001() throws Exception {
+ runTest("008", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test8_002() throws Exception {
+ runTest("008", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test8_003() throws Exception {
+ runTest("008", "003", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test8_004() throws Exception {
+ runTest("008", "004", "");
+ }
+
+ @Test
+ public void test9_001() throws Exception {
+ runTest("009", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test9_002() throws Exception {
+ runTest("009", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test9_003() throws Exception {
+ runTest("009", "003", "");
+ }
+
+ @Test
+ public void test10_001() throws Exception {
+ runTest("010", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test10_002() throws Exception {
+ runTest("010", "002", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test10_003() throws Exception {
+ runTest("010", "003", "");
+ }
+
+ @Test
+ public void test11_001() throws Exception {
+ runTest("011", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test11_002() throws Exception {
+ runTest("011", "002", "");
+ }
+
+ @Test
+ public void test12_001() throws Exception {
+ runTest("012", "001", "");
+ }
+
+ @Test
+ public void test13_001() throws Exception {
+ runTest("013", "001", "");
+ }
+
+ @Test
+ public void test14_001() throws Exception {
+ runTest("014", "001", "");
+ }
+
+ @Test
+ public void test15_001() throws Exception {
+ runTest("015", "001", "");
+ }
+
+ @Test
+ public void test16_001() throws Exception {
+ runTest("016", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test16_002() throws Exception {
+ runTest("016", "002", "");
+ }
+
+ @Test
+ public void test17_001() throws Exception {
+ runTest("017", "001", "");
+ }
+
+ @Test
+ public void test18_001() throws Exception {
+ runTest("018", "001", "");
+ }
+
+ @Test
+ public void test19_001() throws Exception {
+ runTest("019", "001", "");
+ }
+
+ @Test
+ public void test21_001() throws Exception {
+ runTest("021", "001", "");
+ }
+
+ @Test
+ public void test22_001() throws Exception {
+ runTest("022", "001", "");
+ }
+
+ @Test
+ public void test23_001() throws Exception {
+ runTest("023", "001", "");
+ }
+
+ @Test
+ public void test25_001() throws Exception {
+ runTest("025", "001", "");
+ }
+
+ @Test
+ public void test26_001() throws Exception {
+ runTest("026", "001", "");
+ }
+
+ @Test
+ public void test29_001() throws Exception {
+ runTest("029", "001", "");
+ }
+
+ @Test
+ public void test30_001() throws Exception {
+ runTest("030", "001", "");
+ }
+
+ @Test
+ public void test31_001() throws Exception {
+ runTest("031", "001", "");
+ }
+
+ @Test
+ public void test31_002() throws Exception {
+ runTest("031", "002", "");
+ }
+
+ @Test
+ public void test32_001() throws Exception {
+ runTest("032", "001", "");
+ }
+
+ @Test
+ public void test33_001() throws Exception {
+ runTest("033", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test33_002() throws Exception {
+ runTest("033", "002", "");
+ }
+
+ @Test
+ public void test34_001() throws Exception {
+ runTest("034", "001", "");
+ }
+
+ @Test
+ public void test35_001() throws Exception {
+ runTest("035", "001", "");
+ }
+
+ @Test
+ public void test36_001() throws Exception {
+ runTest("036", "001", "");
+ }
+
+ @Test
+ public void test37_001() throws Exception {
+ runTest("037", "001", "");
+ }
+
+ @Test
+ public void test38_001() throws Exception {
+ runTest("038", "001", "");
+ }
+
+ @Test
+ public void test39_001() throws Exception {
+ runTest("039", "001", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test40_001() throws Exception {
+ runTest("040", "001", "");
+ }
+
+ @Test
+ @Category(KnownBugs.class)
+ public void test41_001() throws Exception {
+ runTest("041", "001", "");
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
new file mode 100644
index 0000000..26cba49
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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 com.android.jack.shrob;
+
+import com.android.jack.Options;
+import com.android.jack.category.KnownBugs;
+import com.android.jack.shrob.obfuscation.NameProviderFactory;
+import com.android.jack.shrob.proguard.GrammarActions;
+import com.android.jack.shrob.spec.Flags;
+import com.android.jack.test.comparator.ComparatorMapping;
+import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.DummyToolchain;
+import com.android.jack.test.toolchain.JackApiToolchain;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.File;
+
+import javax.annotation.Nonnull;
+
+public class ObfuscationWithoutMappingTests extends AbstractTest {
+
+ @Override
+ protected void runTest(
+ @Nonnull String testNumber,
+ @Nonnull String flagNumber,
+ @Nonnull String mappingNumber)
+ throws Exception {
+
+ String testName = "shrob/test" + testNumber;
+
+ String testPackageName = "com.android.jack.shrob.test" + testNumber;
+ File testFolder = AbstractTestTools.getTestRootDir(testPackageName);
+
+ JackApiToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchain.class);
+ Flags flags = new Flags();
+ toolchain.setShrobFlags(flags);
+ GrammarActions.parse("proguard.flags" + flagNumber, testFolder.getAbsolutePath(), flags);
+ File refFolder = new File(testFolder, "refsObfuscationWithoutMapping");
+
+ toolchain.addProperty(NameProviderFactory.NAMEPROVIDER.getName(), "rot13");
+ toolchain.addProperty(Options.METHOD_FILTER.getName(), "supported-methods");
+
+ File candidateOutputMapping = AbstractTestTools.createTempFile("mapping", ".txt");
+ File refOutputMapping = new File(refFolder, "expected-" + flagNumber + ".txt");
+ flags.setOutputMapping(candidateOutputMapping);
+ flags.setPrintMapping(true);
+
+ SourceToDexComparisonTestHelper env =
+ new SourceToDexComparisonTestHelper(new File(testFolder, "jack"));
+
+ env.setCandidateTestTools(toolchain);
+ env.setReferenceTestTools(new DummyToolchain());
+
+ env.runTest(new ComparatorMapping(candidateOutputMapping, refOutputMapping));
+
+ // // ==============================================================
+
+ /*
+ * Comment for reviewers: the following code is an attempt to use jack based toolchain.
+ * It works, but requires to manipulate (copy, write...) shrob flags.
+ * Here I added a shrob option manually, but ideally to be able to use
+ * a Flags like object for CLI based toochains, we must be able to dump
+ * the flags as a file (TBD). Plus, if flags have "-include" directives with relative
+ * paths, files must be in the same location.
+ */
+
+//
+// String testName = "shrob/test" + testNumber;
+// File testFolder = TestTools.getJackTestFolder(testName);
+// File refFolder = new File(testFolder, "refsObfuscationWithoutMapping");
+//
+// JackBasedToolchain jackToolchain = AbstractTestTools.getJackBasedToolchainAsCandidate();
+//
+// jackToolchain.addProperty(NameProviderFactory.NAMEPROVIDER.getName(), "rot13");
+// jackToolchain.addProperty(Options.METHOD_FILTER.getName(), "supported-methods");
+//
+// File candidateOutputMapping = TestTools.createTempFile("mapping", ".txt");
+// File refOutputMapping = new File(refFolder, "expected-" + flagNumber + ".txt");
+//
+// jackToolchain.getCompilationResult().proguardMappingFile = candidateOutputMapping;
+//
+// // TODO(jmhenaff): having to seems like a no go for JackBasedToolchain (i.e. cli)
+// File candidateFlags = new File(testFolder.getAbsolutePath(), "tmp-proguard.flags" + flagNumber);
+// candidateFlags.deleteOnExit();
+// appendStringToFileCopy(new File(testFolder.getAbsolutePath(), "proguard.flags" + flagNumber),
+// candidateFlags, "-printmapping " + candidateOutputMapping.getAbsolutePath());
+//
+// SourceToDexComparisonTestEnv env = new SourceToDexComparisonTestEnv(bootclasspath, classpath,
+// TestTools.getJackTestsWithJackFolder(testName));
+//
+// env.setProguardFlags(new ProguardFlags[] {new ProguardFlags(candidateFlags)});
+//
+// CompilationResult compilationResult = new CompilationResult();
+// compilationResult.proguardMappingFile = refOutputMapping;
+//
+// env.setCandidateTestTools(jackToolchain);
+// env.setReferenceTestTools(new DummyTestTools(compilationResult));
+//
+// env.addComparator(env.createMappingComparator());
+// env.compare();
+
+ }
+
+ @Override
+ @Test
+ @Category(KnownBugs.class)
+ public void test33_001() throws Exception {
+ super.test33_001();
+ }
+
+ @Override
+ @Test
+ @Category(KnownBugs.class)
+ public void test34_001() throws Exception {
+ super.test34_001();
+ }
+
+ @Override
+ @Test
+ @Category(KnownBugs.class)
+ public void test35_001() throws Exception {
+ super.test35_001();
+ }
+
+// private void appendStringToFileCopy(File source, File dest, String appended) throws IOException {
+// BufferedReader reader = null;
+// BufferedWriter writer = null;
+// try {
+// reader = new BufferedReader(new FileReader(source));
+// writer = new BufferedWriter(new FileWriter(dest));
+// String line;
+// while ((line = reader.readLine()) != null) {
+// writer.write(line);
+// writer.write("\n");
+// }
+// writer.write(appended);
+// } finally {
+// try {
+// reader.close();
+// } catch (IOException e) {
+// }
+// try {
+// writer.close();
+// } catch (IOException e) {
+// }
+// }
+// }
+
+}