| // Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8.shaking; |
| |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| import com.android.tools.r8.graph.DexItemFactory; |
| import org.junit.Test; |
| |
| public class ProguardPackageNameMatcherTest { |
| private DexItemFactory dexItemFactory = new DexItemFactory(); |
| |
| private boolean matches(ProguardPackageNameList matcher, String packageName) { |
| return matcher.matches(dexItemFactory.createType("L" + packageName.replace('.', '/') + "/A;")); |
| } |
| |
| @Test |
| public void testSimple() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("com.example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertFalse(matches(matcher, "com.exampl")); |
| assertFalse(matches(matcher, "com.example.a")); |
| } |
| |
| @Test |
| public void testSingleEnd() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("com.example*")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "com.example1")); |
| assertTrue(matches(matcher, "com.example2")); |
| assertFalse(matches(matcher, "com.exampl")); |
| assertFalse(matches(matcher, "com.example.a")); |
| } |
| |
| @Test |
| public void testSingleBeginning() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("*.example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "org.example")); |
| assertFalse(matches(matcher, "com.example1")); |
| assertFalse(matches(matcher, "org.example1")); |
| assertFalse(matches(matcher, "com.exampl")); |
| assertFalse(matches(matcher, "com.example.a")); |
| } |
| |
| @Test |
| public void testDoubleEnd() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("com.example**")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "com.example1")); |
| assertTrue(matches(matcher, "com.example2")); |
| assertTrue(matches(matcher, "com.example.a")); |
| assertTrue(matches(matcher, "com.example.a.a")); |
| assertFalse(matches(matcher, "com.exampl")); |
| } |
| |
| @Test |
| public void testDoubleBeginning() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("**example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "org.example")); |
| assertTrue(matches(matcher, "com.a.example")); |
| assertTrue(matches(matcher, "com.a.a.example")); |
| assertTrue(matches(matcher, "comexample")); |
| assertFalse(matches(matcher, "com.example1")); |
| } |
| |
| @Test |
| public void testQuestionMark() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("com.e?ample")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "com.eyample")); |
| assertFalse(matches(matcher, "com.example1")); |
| assertFalse(matches(matcher, "com.example.a")); |
| } |
| |
| @Test |
| public void testList() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("com.example")) |
| .addPackageName(false, new ProguardPackageMatcher("org.example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "org.example")); |
| assertFalse(matches(matcher, "com.example1")); |
| assertFalse(matches(matcher, "com.example.a")); |
| assertFalse(matches(matcher, "org.example1")); |
| assertFalse(matches(matcher, "org.example.a")); |
| } |
| |
| @Test |
| public void testListNegation() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(true, new ProguardPackageMatcher("!org.example")) |
| .addPackageName(false, new ProguardPackageMatcher("*.example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| assertTrue(matches(matcher, "org.example")); |
| } |
| |
| @Test |
| public void testListNegationNotMatched() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(false, new ProguardPackageMatcher("*.example")) |
| .addPackageName(true, new ProguardPackageMatcher("!org.example")) |
| .build(); |
| assertTrue(matches(matcher, "com.example")); |
| // Negations only stops attempts on subsequent names. |
| assertTrue(matches(matcher, "org.example")); |
| } |
| |
| @Test |
| public void testNegateAll() { |
| ProguardPackageNameList matcher = |
| ProguardPackageNameList.builder() |
| .addPackageName(true, new ProguardPackageMatcher("!**")) |
| .build(); |
| assertFalse(matches(matcher, "com")); |
| assertFalse(matches(matcher, "com.example")); |
| assertFalse(matches(matcher, "com.example.a")); |
| } |
| } |