blob: 0522ed0865d4a2c32d931d2011dca9b6b63d9976 [file] [log] [blame]
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
*******************************************************************************
* Copyright (C) 2001-2007, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.ibm.icu.dev.test.TestDataModule.DataMap;
import com.ibm.icu.dev.test.TestDataModule.DataModuleFormatError;
import com.ibm.icu.dev.test.TestDataModule.Factory;
import com.ibm.icu.dev.test.TestDataModule.TestData;
/**
* Ray: An adapter class for TestDataMoule to make it like TestFmwk
*
* A convenience extension of TestFmwk for use by data module-driven tests.
*
* Tests can implement this if they make extensive use of information in a
* TestDataModule.
*
* Subclasses can allow for test methods that don't use data from the module by
* overriding validateMethod to return true for these methods. Tests are also
* free to instantiate their own modules and run from them, though care should
* be taken not to interfere with the methods in this class.
*
* See CollationTest for an example.
*/
public class ModuleTest {
private ModuleTest() {
// prevent construction
}
/**
*
* TestFmwk calls this before trying to run a suite of tests. The test suite
* if valid if a module whose name is the name of this class + "Data" can be
* opened. Subclasses can override this if there are different or additional
* data required.
*/
public static TestDataModule loadTestData(String baseName, String testName) throws DataModuleFormatError {
return Factory.get(baseName, testName);
}
static TestData openTestData(TestDataModule module, String name) throws DataModuleFormatError {
return module.getTestData(name);
}
public static class TestDataPair {
public TestData td;
public DataMap dm;
public TestDataPair(TestData td, DataMap dm) {
this.td = td;
this.dm = dm;
}
}
public static List<TestDataPair> getTestData(String moduleLocation, String moduleName) throws Exception {
List<TestDataPair> list = new ArrayList<TestDataPair>();
TestDataModule m = ModuleTest.loadTestData(moduleLocation, moduleName);
Iterator<TestData> tIter = m.getTestDataIterator();
while (tIter.hasNext()) {
TestData t = tIter.next();
for (Iterator siter = t.getSettingsIterator(); siter.hasNext();) {
DataMap settings = (DataMap) siter.next();
list.add(new TestDataPair(t, settings));
}
}
return list;
}
}