/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Copyright (C) 2005 University of Waikato, Hamilton, New Zealand */ package weka.datagenerators; import weka.core.CheckGOE; import weka.core.CheckOptionHandler; import weka.core.OptionHandler; import weka.core.SerializationHelper; import java.io.PrintWriter; import java.io.StringWriter; import junit.framework.TestCase; /** * Abstract Test class for DataGenerators. * * @author FracPete (fracpete at waikato dot ac dot nz) * @version $Revision: 1.4 $ */ public abstract class AbstractDataGeneratorTest extends TestCase { /** The datagenerator to be tested */ protected DataGenerator m_Generator; /** for storing the result */ protected StringWriter m_Output; /** the OptionHandler tester */ protected CheckOptionHandler m_OptionTester; /** for testing GOE stuff */ protected CheckGOE m_GOETester; /** * Constructs the <code>AbstractDataGeneratorTest</code>. * Called by subclasses. * * @param name the name of the test class */ public AbstractDataGeneratorTest(String name) { super(name); } /** * Called by JUnit before each test method. This implementation creates * the default datagenerator to test. * * @throws Exception if an error occurs */ protected void setUp() throws Exception { m_Generator = getGenerator(); m_Output = new StringWriter(); m_Generator.setOutput(new PrintWriter(m_Output)); m_OptionTester = getOptionTester(); m_GOETester = getGOETester(); } /** Called by JUnit after each test method */ protected void tearDown() { m_Generator = null; m_Output = null; m_GOETester = null; m_OptionTester = null; } /** * Used to create an instance of a specific DataGenerator. * * @return a suitably configured <code>DataGenerator</code> value */ public abstract DataGenerator getGenerator(); /** * Configures the CheckOptionHandler uses for testing the optionhandling. * Sets the scheme to test. * * @return the fully configured CheckOptionHandler */ protected CheckOptionHandler getOptionTester() { CheckOptionHandler result; result = new CheckOptionHandler(); result.setOptionHandler((OptionHandler) getGenerator()); result.setUserOptions(new String[0]); result.setSilent(true); return result; } /** * Configures the CheckGOE used for testing GOE stuff. * Sets the Generator returned from the getGenerator() method. * * @return the fully configured CheckGOE * @see #getGenerator() */ protected CheckGOE getGOETester() { CheckGOE result; result = new CheckGOE(); result.setObject(getGenerator()); result.setIgnoredProperties(result.getIgnoredProperties() + ",datasetFormat"); result.setSilent(true); return result; } /** * tests whether setting the options returned by getOptions() works */ public void testOptions() { try { m_Generator.setOptions(m_Generator.getOptions()); } catch (Exception e) { fail("setOptions(getOptions()) does not work: " + e.getMessage()); } } /** * tests whether data can be generated with the default options */ public void testMakeData() { try { m_Generator.makeData(m_Generator, new String[0]); } catch (Exception e) { fail("Generation of data failed: " + e.getMessage()); } } /** * tests whether the scheme declares a serialVersionUID. */ public void testSerialVersionUID() { if (SerializationHelper.needsUID(m_Generator.getClass())) fail("Doesn't declare serialVersionUID!"); } /** * tests the listing of the options */ public void testListOptions() { if (!m_OptionTester.checkListOptions()) fail("Options cannot be listed via listOptions."); } /** * tests the setting of the options */ public void testSetOptions() { if (!m_OptionTester.checkSetOptions()) fail("setOptions method failed."); } /** * tests whether the default settings are processed correctly */ public void testDefaultOptions() { if (!m_OptionTester.checkDefaultOptions()) fail("Default options were not processed correctly."); } /** * tests whether there are any remaining options */ public void testRemainingOptions() { if (!m_OptionTester.checkRemainingOptions()) fail("There were 'left-over' options."); } /** * tests the whether the user-supplied options stay the same after setting. * getting, and re-setting again. */ public void testCanonicalUserOptions() { if (!m_OptionTester.checkCanonicalUserOptions()) fail("setOptions method failed"); } /** * tests the resetting of the options to the default ones */ public void testResettingOptions() { if (!m_OptionTester.checkSetOptions()) fail("Resetting of options failed"); } /** * tests for a globalInfo method */ public void testGlobalInfo() { if (!m_GOETester.checkGlobalInfo()) fail("No globalInfo method"); } /** * tests the tool tips */ public void testToolTips() { if (!m_GOETester.checkToolTips()) fail("Tool tips inconsistent"); } }