blob: ffb4b6eb0d32008d653ff725c5566fc3c6809bb5 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.openoffice.test.common;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.junit.runner.Description;
import org.junit.runner.Request;
import org.junit.runner.Runner;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.ParentRunner;
import org.junit.runners.model.InitializationError;
import org.openoffice.test.Run;
public class NamedRequest extends Request {
private static Logger log = Logger.getLogger(Run.class);
private Suite suite = null;
protected NamedRequest() {
}
private String init(String arg) throws InitializationError {
String name = null;
int ci = arg.indexOf(":");
if (ci >= 0) {
name = arg.substring(0, ci);
arg = arg.substring(++ci);
} else {
name = arg;
if (name.length() > 128) {
name = name.substring(0, 128) + "...";
}
}
suite = new Suite(name);
return arg;
}
private void addRunner(Runner runner) {
suite.getChildren().add(runner);
}
public static NamedRequest tc(String arg) {
NamedRequest namedRequest = new NamedRequest();
try {
arg = namedRequest.init(arg);
} catch (InitializationError e1) {
return null;
}
String[] klasses = arg.split(",");
List<Class<?>> classes = new ArrayList<Class<?>>();
for (String k : klasses) {
try {
classes.add(Class.forName(k));
} catch (Throwable e) {
log.log(Level.WARNING, MessageFormat.format("Test class {0} can not be tested!", k), e);
}
}
namedRequest.addRunner(Request.classes(classes.toArray(new Class[0])).getRunner());
return namedRequest;
}
public static NamedRequest tp(String arg) {
NamedRequest namedRequest = new NamedRequest();
try {
arg = namedRequest.init(arg);
} catch (InitializationError e1) {
return null;
}
String[] packages = arg.split(",");
List<Class<?>> classes = new ArrayList<Class<?>>();
for (String p : packages) {
List<String> klasses = SystemUtil.getClassesInPackage(p);
for (String k : klasses) {
if (k.matches(".+[$]{1}.*"))
continue;
try {
classes.add(Class.forName(k));
} catch (Throwable e) {
log.log(Level.WARNING, MessageFormat.format("Test class {0} can not be tested!", k), e);
}
}
}
namedRequest.addRunner(Request.classes(classes.toArray(new Class[0])).getRunner());
return namedRequest;
}
public static NamedRequest tm(String arg) {
NamedRequest namedRequest = new NamedRequest();
try {
arg = namedRequest.init(arg);
} catch (InitializationError e1) {
return null;
}
String[] methods = arg.split(",");
for (String m : methods) {
int i = m.lastIndexOf(".");
String className = m.substring(0, i);
String methodName = m.substring(++i);
try {
namedRequest.addRunner(Request.method(Class.forName(className), methodName).getRunner());
} catch (Throwable e) {
log.log(Level.WARNING, MessageFormat.format("Test method {0} can not be tested!", m), e);
}
}
return namedRequest;
}
public void merge(NamedRequest other) {
suite.getChildren().addAll(other.suite.getChildren());
}
public String getName() {
return suite.getName();
}
@Override
public Runner getRunner() {
return suite;
}
public static class Suite extends ParentRunner<Runner> {
protected final List<Runner> fRunners = new ArrayList<Runner>();
protected String name;
protected Suite(String name) throws InitializationError {
super(null);
this.name = name;
}
protected String getName() {
return name;
}
@Override
protected List<Runner> getChildren() {
return fRunners;
}
@Override
protected Description describeChild(Runner child) {
return child.getDescription();
}
@Override
protected void runChild(Runner runner, final RunNotifier notifier) {
runner.run(notifier);
}
}
}