package jp.aegif.nemaki.test.tck;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.tck.CmisTestReport;
import org.apache.chemistry.opencmis.tck.impl.AbstractCmisTestGroup;
import org.apache.chemistry.opencmis.tck.report.TextReport;
import org.apache.chemistry.opencmis.tck.report.XmlReport;
import org.junit.ClassRule;
import org.junit.rules.ExternalResource;
import jp.aegif.nemaki.test.tck.tests.BasicsTestGroup;
import jp.aegif.nemaki.test.tck.tests.ControlTestGroup;
import jp.aegif.nemaki.test.tck.tests.CrudTestGroup;
import jp.aegif.nemaki.test.tck.tests.FilingTestGroup;
import jp.aegif.nemaki.test.tck.tests.QueryTestGroup;
import jp.aegif.nemaki.test.tck.tests.TypesTestGroup;
import jp.aegif.nemaki.test.tck.tests.VersioningTestGroup;
public class TckSuite extends TestGroupBase{
private static Map<String, DummyTestGroup> groupMapForReport = new HashMap<>();
private static Map<String, String> parameters = new HashMap<>();
@ClassRule
public static ExternalResource testRule = new ExternalResource(){
@Override
protected void before() throws Throwable{
TestGroupBase dummy = new TestGroupBase();
dummy.loadParameters(parametersFile);
parameters = dummy.getParameters();
};
@Override
protected void after(){
try{
List<CmisTestGroup> groups = new ArrayList<>();
groups.addAll(groupMapForReport.values());
CmisTestReport report = new TextReport();
report.createReport(parameters, groups, new PrintWriter(System.out));
CmisTestReport xmlReport = new XmlReport();
xmlReport.createReport(parameters, groups, new PrintWriter(System.out));
}catch(Exception e){
e.printStackTrace();
}
};
};
public static <T extends TestGroupBase> void addToGroup(Class<T> clazz, CmisTest test) throws Exception{
String simpleClassName = clazz.getSimpleName();
DummyTestGroup group = groupMapForReport.get(simpleClassName);
if(group == null){
DummyTestGroup _group = null;
if(simpleClassName.equals(BasicsTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.basics.BasicsTestGroup());
}else if(simpleClassName.equals(ControlTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.control.ControlTestGroup());
}else if(simpleClassName.equals(CrudTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.crud.CRUDTestGroup());
}else if(simpleClassName.equals(FilingTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.filing.FilingTestGroup());
}else if(simpleClassName.equals(QueryTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.query.QueryTestGroup());
}else if(simpleClassName.equals(TypesTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.types.TypesTestGroup());
}else if(simpleClassName.equals(VersioningTestGroup.class.getSimpleName())){
_group = new DummyTestGroup(new org.apache.chemistry.opencmis.tck.tests.versioning.VersioningTestGroup());
}
if(_group != null){
_group.init(parameters);
groupMapForReport.put(simpleClassName, _group);
group = groupMapForReport.get(simpleClassName);
}
}
group.addTestWithoutInit(test);
groupMapForReport.put(simpleClassName, group);
}
private static class DummyTestGroup extends AbstractCmisTestGroup{
private List<CmisTest> dummyTests = new ArrayList<CmisTest>();
public DummyTestGroup(AbstractCmisTestGroup group) throws Exception{
super.init(parameters);
String name = group.getName();
setName(name);
String description = group.getDescription();
setDescription(description);
Boolean enabled = group.isEnabled();
setEnabled(enabled);
}
public void addTestWithoutInit(CmisTest test){
dummyTests.add(test);
}
@Override
public List<CmisTest> getTests() {
return dummyTests;
}
}
}