/* * Copyright (C) 2009 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 dalvik.jtreg; import java.io.File; import java.util.LinkedHashSet; import java.util.Set; import java.util.logging.Logger; /** * Create {@link TestRun}s for {@code .java} files with JUnit tests in them. */ class JUnit { private static final Logger logger = Logger.getLogger(JUnit.class.getName()); public Set findTests(File testDirectory) { Set result = new LinkedHashSet(); findTestsRecursive(result, testDirectory); return result; } private void findTestsRecursive(Set sink, File file) { if (file.isDirectory()) { for (File child : file.listFiles()) { findTestsRecursive(sink, child); } } else if (file.getName().endsWith(".java")) { String className = fileToClass(file); File testDirectory = file.getParentFile(); String testName = "junit"; // TODO: try to get names for each method? String testDescription = null; sink.add(new TestRun(testDirectory, file, className, className, testName, className, testDescription, JUnitRunner.class)); } else { logger.fine("skipping " + file); } } /** * Returns the Java classname for the given file. For example, given the * input {@code luni/src/test/java/org/apache/harmony/luni/tests/java/util/ArrayListTest.java}, * this returns {@code org.apache.harmony.luni.tests.java.util.ArrayListTest}. */ private String fileToClass(File file) { String filePath = file.getPath(); if (!filePath.endsWith(".java")) { throw new IllegalArgumentException("Not a .java file: " + file); } String fqClass = filePath.replaceAll(".*/test/java/", ""); return fqClass.replace('/', '.').substring(0, fqClass.length() - 5); } }