package jp.aegif.nemaki.test.tck; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.apache.chemistry.opencmis.tck.CmisTest; import org.apache.chemistry.opencmis.tck.CmisTestGroup; import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor; import org.apache.chemistry.opencmis.tck.CmisTestResult; import org.apache.chemistry.opencmis.tck.CmisTestResultStatus; import org.apache.chemistry.opencmis.tck.impl.AbstractCmisTestGroup; import org.apache.chemistry.opencmis.tck.runner.AbstractRunner; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestName; public class TestGroupBase extends AbstractRunner { static final String PARAMETERS_FILE_NAME = "cmis-tck-parameters.properties"; static final String FILTERS_FILE_NAME = "cmis-tck-filters.properties"; protected static File parametersFile = new File( TestGroupBase.class.getClassLoader().getResource(PARAMETERS_FILE_NAME).getFile()); protected static Properties filters = PropertyUtil .build(new File(TestGroupBase.class.getClassLoader().getResource("cmis-tck-filters.properties").getFile())); static Map<String, AbstractCmisTestGroup> testGroupMap = new HashMap<>(); @Rule public TestName testName = new TestName(); @Before public void beforeMethod() throws Exception { filterClass(this.getClass().getSimpleName()); filterMethod(testName.getMethodName()); } private void filterClass(String simpleClassName) { Assume.assumeTrue(Boolean.valueOf(filters.getProperty(simpleClassName))); } private void filterMethod(String methodName) { Assume.assumeTrue(Boolean.valueOf(filters.getProperty(methodName))); } private static class PropertyUtil { public static Properties build(File file) { Properties properties = new Properties(); try { properties.load(new FileInputStream(file)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch blocknet e.printStackTrace(); } return properties; } } public void run(CmisTest test) throws Exception { run(new SimpleCmisWrapperTestGroup(test)); TckSuite.addToGroup(this.getClass(), test); } public void run(CmisTestGroup group) throws Exception { JUnitRunner runner = new JUnitRunner(); runner.loadParameters(parametersFile); runner.addGroup(group); runner.run(new JUnitProgressMonitor()); checkForFailures(runner); } private static void checkForFailures(JUnitRunner runner) { for (CmisTestGroup group : runner.getGroups()) { for (CmisTest test : group.getTests()) { for (CmisTestResult result : test.getResults()) { if (result.getStatus().getLevel() >= CmisTestResultStatus.FAILURE.getLevel()) { Assert.fail(result.getMessage() + "\n" + result.getStackTrace().toString()); } } } } } private static class JUnitRunner extends AbstractRunner { } private static class JUnitProgressMonitor implements CmisTestProgressMonitor { @SuppressWarnings("PMD.SystemPrintln") public void startGroup(CmisTestGroup group) { // System.out.println(group.getName() + " (" + // group.getTests().size() + " tests)"); } public void endGroup(CmisTestGroup group) { } @SuppressWarnings("PMD.SystemPrintln") public void startTest(CmisTest test) { System.out.println(" " + test.getName()); } public void endTest(CmisTest test) { } @SuppressWarnings("PMD.SystemPrintln") public void message(String msg) { System.out.println(msg); } } /** * Minor version of CmisWrapperTestGroup * * @author linzhixing * */ private static class SimpleCmisWrapperTestGroup extends AbstractCmisTestGroup { private final CmisTest test; public SimpleCmisWrapperTestGroup(CmisTest test) { if (test == null) { throw new IllegalArgumentException("Test is null!"); } this.test = test; } @Override public void init(Map<String, String> parameters) throws Exception { super.init(parameters); addTest(test); setName(test.getName()); } } }