/**
 *******************************************************************************
 * Copyright (C) 2001-2003, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 *
 * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/test/sample/ModuleTestSampleData.java,v $
 * $Date: 2003/12/20 03:07:11 $
 * $Revision: 1.5 $
 *
 *******************************************************************************
 */
package com.ibm.icu.dev.test.sample;

import java.util.ListResourceBundle;

/**
 * This is sample data for ModuleTestSample, which is an illustration
 * of a subclass of ModuleTest.  This data is in a format which
 * is understood by ResourceModule, which for simplicity expects
 * all data, including numeric and boolean data, to be represented
 * by Strings.
 */
public class ModuleTestSampleData extends ListResourceBundle {
    public Object[][] getContents() {
	return contents;
    }

    Object[][] contents = {
	{ "Info", new Object[][] {
	    { "Description", "This is a sample test module that illustrates ModuleTest " +
	      "and uses data formatted for ResourceModule." },
	    { "Headers", new String[] {
		"aStringArray", "anIntArray", "aBooleanArray"
	    }},
	}},
	

	{ "TestData", new Object[][] {
	    { "Test01", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A typical test using both settings and cases." },
		    { "Long_Description", "It does not defined its own headers, but instead " +
		      "uses the default headers defined for the module.  " +
		      "There are two sets of settings and three cases." },
		}},
		{ "Settings", new Object[] {
            new Object[][]
		    {{ "aString", "this is a string" },
		     { "anInt", "43" },
		     { "aBoolean", "false" }},
		    new Object[][] 
            {{ "aString", "this is another string" },
		     { "aBoolean", "true" }}
		}},
		{ "Cases", new Object[] {
            new Object[] {
    		    new String[] { "one", "two", "three" },
    		    new String[] { "24", "48", "72" },
    		    new String[] { "true", "false", "true" }
    		},
    		new Object[] { 
                new String[] { "four", "five", "six" },
    		    new String[] { "-1", "-5", "-10" },
    		    new String[] { "true", "false", "false" }
    		},
    		new Object[] { 
                new String[] { "bagel", "peanuts", "carrot" },
    		    new String[] { "0", "00001", "10101" },
    		    new String[] { "false", "false", "False" }
            },
		}}
	    }},

	    { "Test02", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A typical test that uses cases but not settings." },
		    { "Long_Description", "It defines its own headers." },
		    { "Headers", new String[] {
			"aString", "anInt", "aBoolean"
		    }},
		}},
		{ "Cases", new Object[] {
		    new Object[] { "Superstring", "42", "true" },
		    new Object[] { "Underdog", "12", "false" },
		    new Object[] { "ScoobyDoo", "7", "TrUe" }
		}}
	    }},

	    { "Test03", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A typical test that uses just the info, no cases or settings." },
		    { "Extra", "This is some extra information." }
		}},
	    }},

	    // no Test04 data
	    // Test04 should cause an exception to be thrown since ModuleTestSample does not
	    // specify that it is ok for it to have no data.

	    // no Test05 data
	    // Test05 should just log this fact, since ModuleTestSample indicates that it is
	    // ok for Test05 to have no data in its override of validateMethod.

	    { "Test06", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A test that has bad data." },
		    { "Long_Description", "This illustrates how a data error will automatically " +
		      "terminate the settings and cases loop." },
		    { "Headers", new String[] {
			"IsGood", "Data",
		    }},
		}},
		{ "Cases", new Object[] {
		    new Object[] { "Good", "23" },
		    new Object[] { "Good", "-123" },
		    new Object[] { "Bad", "Whoops" },
		    new Object[] { "Not Executed", "35" },
		}},
	    }},

	    { "Test07", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A test that fails with a certain combination of settings and case." },
		    { "Long_Description", "This illustrates how a test error will automatically " +
		      "terminate the settings and cases loop.  Settings data is values, the case " +
		      "data is factors.  The third factor is not a factor of the second value.  " +
		      "The test will log an error, which will automatically stop the loop." },
		    { "Headers", new String[] {
			"Factor",
		    }},
		}},
		{ "Settings" , new Object[] {
		    new Object[][] {{ "Value", "210" }},
		    new Object[][] {{ "Value", "420" }},
		    new Object[][] {{ "Value", "42" }},
		    new Object[][] {{ "Value", "Not reached." }}
		}},
		{ "Cases", new Object[] {
		    new Object[] { "2" },
		    new Object[] { "3" },
		    new Object[] { "5" },
		    new Object[] { "7" },
		}},
	    }},

	    { "Test08", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A test with data missing from a test case." },
		    { "Headers", new String[] {
			"One", "Two", "Three"
		    }},
		}},
		{ "Cases", new Object[] {
		    new Object[] { "1", "2", "3" },
		    new Object[] { "4", "5" }, // too short
		    new Object[] { "6", "7", "8" },
		}},
	    }},

	    { "Test09", new Object[][] {
		{ "Info", new Object[][] {
		    { "Description", "A test with data stored as int arrays instead of strings" },
		    { "Headers", new String[] {
			"Radix", "Power", "Value"
		    }},
		}},
		{ "Cases", new Object[] {
		    new Object[] { "2", new int[] { 1, 2, 3 }, new int[] { 2, 4, 8 }},
		    new Object[] { "3", new int[] { 3, 4, 5 }, new int[] { 27, 81, 243 }},
		    new Object[] { "2", new int[] { 0, 8, 16, 24 }, new int[] { 1, 256, 65536, 65536 * 256 }},
		}},
	    }},
	}},
    };
}
