blob: d942bad9b6a82cc87a30cd681e88451975b661b4 [file] [log] [blame]
/*
* Copyright (C) 2019 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.preload.check;
import dalvik.system.DexFile;
import java.util.Collection;
import java.util.Enumeration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Test boot classpath classes that satisfy a given regular expression to be not initialized.
* Optionally check that at least one class was matched.
*/
public class NotInitializedRegex {
/**
* First arg (mandatory): regular exception. Second arg (optional): boolean to denote a
* required match.
*/
public static void main(String[] args) throws Exception {
Matcher m = Pattern.compile(args[0]).matcher("");
boolean requiresMatch = args.length > 1 ? Boolean.parseBoolean(args[1]) : false;
Collection<DexFile> dexFiles = Util.getBootDexFiles();
int matched = 0, notMatched = 0;
for (DexFile dexFile : dexFiles) {
Enumeration<String> entries = dexFile.entries();
while (entries.hasMoreElements()) {
String entry = entries.nextElement();
m.reset(entry);
if (m.matches()) {
System.out.println(entry + ": match");
matched++;
check(entry);
} else {
System.out.println(entry + ": no match");
notMatched++;
}
}
}
System.out.println("Matched: " + matched + " Not-Matched: " + notMatched);
if (requiresMatch && matched == 0) {
throw new RuntimeException("Did not find match");
}
System.out.println("OK");
}
private static void check(String name) {
Util.assertNotInitialized(name, null);
}
}