/* Copyright 2004, Carnegie Mellon, All Rights Reserved */ package edu.cmu.minorthird.ui; import junit.framework.TestCase; import junit.framework.TestSuite; import org.apache.log4j.Logger; import edu.cmu.minorthird.classify.Classifier; import edu.cmu.minorthird.classify.TestUI; import edu.cmu.minorthird.classify.experiments.Evaluation; import edu.cmu.minorthird.text.Annotator; import edu.cmu.minorthird.text.learn.experiments.ExtractionEvaluation; /** * * @author William Cohen */ public class TestPackage extends TestSuite{ static Logger log=Logger.getLogger(TestUI.class); public TestPackage(String name) { super(name); } public static TestSuite suite() { TestSuite suite = new TestSuite(); // // test ui // suite.addTest( new UITest(TrainTestClassifier.class, new String[]{ "-labels","sample3.train", "-spanType","fun", "-splitter","k5", "-showTestDetails", "false", "-learner","new NaiveBayes()"}) { public void checkResult(Object result) { Evaluation e = (Evaluation)result; assertEquals( 1.0/9.0, e.errorRate(), 0.2 ); } }); suite.addTest( new UITest(TrainClassifier.class, new String[]{ "-labels","sample3.train", "-spanType","fun", "-saveAs","tmp.ann", "-learner","new NaiveBayes()"}) { public void checkResult(Object result) { assertTrue( result instanceof Classifier); } }); suite.addTest( new UITest(TestClassifier.class, new String[]{ "-labels","sample3.train", "-showTestDetails", "false", "-spanType","fun", "-loadFrom","tmp.ann"}) { public void checkResult(Object result) { Evaluation e = (Evaluation)result; assertEquals( 0.0, e.errorRate(), 0.2 ); } }); // // test ui routines on span candidate-filtering tasks // suite.addTest( new UITest(TrainTestClassifier.class, new String[]{ "-labels","sample1.train", "-candidateType","bigram", "-spanType","trueName", "-showTestDetails", "false", "-splitter","k5", "-fe", "Recommended.MultitokenSpanFE()", "-learner","new NaiveBayes()"}) { public void checkResult(Object result) { Evaluation e = (Evaluation)result; assertEquals( 0.75, e.maxF1(), 0.25 ); } }); suite.addTest( new UITest(TrainClassifier.class, new String[]{ "-labels","sample1.train", "-candidateType","bigram", "-spanType","trueName", "-saveAs","tmp.ann", "-fe", "Recommended.MultitokenSpanFE()", "-learner","new NaiveBayes()"}) { public void checkResult(Object result) { assertTrue( result instanceof Classifier); } }); suite.addTest( new UITest(TestClassifier.class, new String[]{ "-labels","sample1.test", "-showTestDetails", "false", "-candidateType","bigram", "-spanType","trueName", "-loadFrom","tmp.ann"}) { public void checkResult(Object result) { Evaluation e = (Evaluation)result; assertEquals( 8.0/9.0, e.maxF1(), 0.15 ); } }); // // test on extraction tasks // suite.addTest( new UITest(TrainTestExtractor.class, new String[]{ "-labels","sample1.train", "-spanType","trueName", "-showTestDetails", "false", "-learner", "new Recommended.VPHMMLearner()", "-splitter","k8"}) { public void checkResult(Object result) { ExtractionEvaluation e = (ExtractionEvaluation)result; //assertEquals( 0.5, e.spanF1(), 0.125 ); assertEquals(0.5,e.spanF1(),0.25); } }); suite.addTest( new UITest(TrainTestExtractor.class, new String[]{ "-labels","sample1.train", "-spanType","trueName", "-showTestDetails", "false", "-learner", "new Recommended.VPHMMLearner()", "-test","sample1.test"}) { public void checkResult(Object result) { ExtractionEvaluation e = (ExtractionEvaluation)result; assertEquals( 0.75, e.spanF1(), 0.125 ); } }); suite.addTest( new UITest(TrainExtractor.class, new String[]{ "-labels","sample1.train", "-spanType","trueName", "-learner", "new Recommended.VPHMMLearner()", "-saveAs","tmp.ann"}) { public void checkResult(Object result) { assertTrue( result instanceof Annotator ); } }); suite.addTest( new UITest(TestExtractor.class, new String[]{ "-labels","sample1.test", "-spanType","trueName", "-loadFrom","tmp.ann"}) { public void checkResult(Object result) { ExtractionEvaluation e = (ExtractionEvaluation)result; //assertEquals( 0.5, e.spanF1(), 0.1 ); assertEquals( 0.5, e.spanF1(), 0.25 ); } }); return suite; } // test the TrainTestClassifier package abstract public static class UITest extends TestCase { private String[] args; private Class<?> mainClass; public UITest(Class<?> mainClass,String[] args) { super("doTest"); this.mainClass = mainClass; this.args = args; } public void doTest() { try { UIMain m = (UIMain)mainClass.newInstance(); m.callMain(args); checkResult(m.getMainResult()); } catch (InstantiationException ex) { throw new IllegalArgumentException(ex.toString()); } catch (IllegalAccessException ex) { throw new IllegalArgumentException(ex.toString()); } } abstract public void checkResult(Object result); } static public void main(String[] argv) { junit.textui.TestRunner.run(suite()); } }