| Index: source/test/intltest/dadrcoll.cpp
|
| diff --git a/source/test/intltest/dadrcoll.cpp b/source/test/intltest/dadrcoll.cpp
|
| deleted file mode 100644
|
| index 62248096f3132740f7d71001890d640209c29b65..0000000000000000000000000000000000000000
|
| --- a/source/test/intltest/dadrcoll.cpp
|
| +++ /dev/null
|
| @@ -1,291 +0,0 @@
|
| -/********************************************************************
|
| - * COPYRIGHT:
|
| - * Copyright (c) 1997-2010, International Business Machines Corporation and
|
| - * others. All Rights Reserved.
|
| - ********************************************************************/
|
| -
|
| -/**
|
| - * IntlTestCollator is the medium level test class for everything in the directory "collate".
|
| - */
|
| -
|
| -/***********************************************************************
|
| -* Modification history
|
| -* Date Name Description
|
| -* 02/14/2001 synwee Compare with cintltst and commented away tests
|
| -* that are not run.
|
| -***********************************************************************/
|
| -
|
| -#include "unicode/utypes.h"
|
| -
|
| -#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_FILE_IO
|
| -
|
| -#include "unicode/uchar.h"
|
| -#include "unicode/tstdtmod.h"
|
| -#include "cstring.h"
|
| -#include "ucol_tok.h"
|
| -#include "tscoll.h"
|
| -#include "dadrcoll.h"
|
| -
|
| -U_CDECL_BEGIN
|
| -static void U_CALLCONV deleteSeqElement(void *elem) {
|
| - delete((SeqElement *)elem);
|
| -}
|
| -U_CDECL_END
|
| -
|
| -DataDrivenCollatorTest::DataDrivenCollatorTest()
|
| -: seq(StringCharacterIterator("")),
|
| -status(U_ZERO_ERROR),
|
| -sequences(status)
|
| -{
|
| - driver = TestDataModule::getTestDataModule("DataDrivenCollationTest", *this, status);
|
| - sequences.setDeleter(deleteSeqElement);
|
| - UCA = (RuleBasedCollator*)Collator::createInstance("root", status);
|
| -}
|
| -
|
| -DataDrivenCollatorTest::~DataDrivenCollatorTest()
|
| -{
|
| - delete driver;
|
| - delete UCA;
|
| -}
|
| -
|
| -void DataDrivenCollatorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par */)
|
| -{
|
| - if(driver != NULL) {
|
| - if (exec)
|
| - {
|
| - logln("TestSuite Collator: ");
|
| - }
|
| - const DataMap *info = NULL;
|
| - TestData *testData = driver->createTestData(index, status);
|
| - if(U_SUCCESS(status)) {
|
| - name = testData->getName();
|
| - if(testData->getInfo(info, status)) {
|
| - log(info->getString("Description", status));
|
| - }
|
| - if(exec) {
|
| - log(name);
|
| - logln("---");
|
| - logln("");
|
| - processTest(testData);
|
| - }
|
| - delete testData;
|
| - } else {
|
| - name = "";
|
| - }
|
| - } else {
|
| - dataerrln("collate/DataDrivenTest data not initialized!");
|
| - name = "";
|
| - }
|
| -
|
| -
|
| -}
|
| -
|
| -UBool
|
| -DataDrivenCollatorTest::setTestSequence(const UnicodeString &setSequence, SeqElement &el) {
|
| - seq.setText(setSequence);
|
| - return getNextInSequence(el);
|
| -}
|
| -
|
| -// Parses the sequence to be tested
|
| -UBool
|
| -DataDrivenCollatorTest::getNextInSequence(SeqElement &el) {
|
| - el.source.truncate(0);
|
| - UBool quoted = FALSE;
|
| - UBool quotedsingle = FALSE;
|
| - UChar32 currChar = 0;
|
| -
|
| - while(currChar != CharacterIterator::DONE) {
|
| - currChar= seq.next32PostInc();
|
| - if(!quoted) {
|
| - if(u_isWhitespace(currChar)) {
|
| - continue;
|
| - }
|
| - switch(currChar) {
|
| - case CharacterIterator::DONE:
|
| - break;
|
| - case 0x003C /* < */:
|
| - el.relation = Collator::LESS;
|
| - currChar = CharacterIterator::DONE;
|
| - break;
|
| - case 0x003D /* = */:
|
| - el.relation = Collator::EQUAL;
|
| - currChar = CharacterIterator::DONE;
|
| - break;
|
| - case 0x003E /* > */:
|
| - el.relation = Collator::GREATER;
|
| - currChar = CharacterIterator::DONE;
|
| - break;
|
| - case 0x0027 /* ' */: /* very basic quoting */
|
| - quoted = TRUE;
|
| - quotedsingle = FALSE;
|
| - break;
|
| - case 0x005c /* \ */: /* single quote */
|
| - quoted = TRUE;
|
| - quotedsingle = TRUE;
|
| - break;
|
| - default:
|
| - el.source.append(currChar);
|
| - }
|
| - } else {
|
| - if(currChar == CharacterIterator::DONE) {
|
| - status = U_ILLEGAL_ARGUMENT_ERROR;
|
| - errln("Quote in sequence not closed!");
|
| - return FALSE;
|
| - } else if(currChar == 0x0027) {
|
| - quoted = FALSE;
|
| - } else {
|
| - el.source.append(currChar);
|
| - }
|
| - if(quotedsingle) {
|
| - quoted = FALSE;
|
| - }
|
| - }
|
| - }
|
| - return seq.hasNext();
|
| -}
|
| -
|
| -// Reads the options string and sets appropriate attributes in collator
|
| -void
|
| -DataDrivenCollatorTest::processArguments(Collator *col, const UChar *start, int32_t optLen) {
|
| - const UChar *end = start+optLen;
|
| - UColAttribute attrib;
|
| - UColAttributeValue value;
|
| -
|
| - if(optLen == 0) {
|
| - return;
|
| - }
|
| -
|
| - start = ucol_tok_getNextArgument(start, end, &attrib, &value, &status);
|
| - while(start != NULL) {
|
| - if(U_SUCCESS(status)) {
|
| - col->setAttribute(attrib, value, status);
|
| - }
|
| - start = ucol_tok_getNextArgument(start, end, &attrib, &value, &status);
|
| - }
|
| -}
|
| -
|
| -void
|
| -DataDrivenCollatorTest::processTest(TestData *testData) {
|
| - Collator *col = NULL;
|
| - const UChar *arguments = NULL;
|
| - int32_t argLen = 0;
|
| - const DataMap *settings = NULL;
|
| - const DataMap *currentCase = NULL;
|
| - UErrorCode intStatus = U_ZERO_ERROR;
|
| - UnicodeString testSetting;
|
| - while(testData->nextSettings(settings, status)) {
|
| - intStatus = U_ZERO_ERROR;
|
| - // try to get a locale
|
| - testSetting = settings->getString("TestLocale", intStatus);
|
| - if(U_SUCCESS(intStatus)) {
|
| - char localeName[256];
|
| - testSetting.extract(0, testSetting.length(), localeName, "");
|
| - col = Collator::createInstance(localeName, status);
|
| - if(U_SUCCESS(status)) {
|
| - logln("Testing collator for locale "+testSetting);
|
| - } else {
|
| - errln("Unable to instantiate collator for locale "+testSetting);
|
| - return;
|
| - }
|
| - } else {
|
| - // if no locale, try from rules
|
| - intStatus = U_ZERO_ERROR;
|
| - testSetting = settings->getString("Rules", intStatus);
|
| - if(U_SUCCESS(intStatus)) {
|
| - col = new RuleBasedCollator(testSetting, status);
|
| - if(U_SUCCESS(status)) {
|
| - logln("Testing collator for rules "+testSetting);
|
| - } else {
|
| - errln("Unable to instantiate collator for rules "+testSetting+" - "+u_errorName(status));
|
| - return;
|
| - }
|
| - } else {
|
| - errln("No collator definition!");
|
| - return;
|
| - }
|
| - }
|
| -
|
| - int32_t cloneSize = 0;
|
| - uint8_t* cloneBuf = NULL;
|
| - RuleBasedCollator* clone = NULL;
|
| - if(col != NULL){
|
| - RuleBasedCollator* rbc = (RuleBasedCollator*)col;
|
| - cloneSize = rbc->cloneBinary(NULL, 0, intStatus);
|
| - intStatus = U_ZERO_ERROR;
|
| - cloneBuf = (uint8_t*) malloc(cloneSize);
|
| - cloneSize = rbc->cloneBinary(cloneBuf, cloneSize, intStatus);
|
| - clone = new RuleBasedCollator(cloneBuf, cloneSize, UCA, intStatus);
|
| - if(U_FAILURE(intStatus)){
|
| - errln("Could not clone the RuleBasedCollator. Error: %s", u_errorName(intStatus));
|
| - intStatus= U_ZERO_ERROR;
|
| - }
|
| - // get attributes
|
| - testSetting = settings->getString("Arguments", intStatus);
|
| - if(U_SUCCESS(intStatus)) {
|
| - logln("Arguments: "+testSetting);
|
| - argLen = testSetting.length();
|
| - arguments = testSetting.getBuffer();
|
| - processArguments(col, arguments, argLen);
|
| - if(clone != NULL){
|
| - processArguments(clone, arguments, argLen);
|
| - }
|
| - if(U_FAILURE(status)) {
|
| - errln("Couldn't process arguments");
|
| - break;
|
| - }
|
| - } else {
|
| - intStatus = U_ZERO_ERROR;
|
| - }
|
| - // Start the processing
|
| - while(testData->nextCase(currentCase, status)) {
|
| - UnicodeString sequence = currentCase->getString("sequence", status);
|
| - if(U_SUCCESS(status)) {
|
| - processSequence(col, sequence);
|
| - if(clone != NULL){
|
| - processSequence(clone, sequence);
|
| - }
|
| - }
|
| - }
|
| - } else {
|
| - errln("Couldn't instantiate a collator!");
|
| - }
|
| - delete clone;
|
| - free(cloneBuf);
|
| - delete col;
|
| - col = NULL;
|
| - }
|
| -}
|
| -
|
| -
|
| -void
|
| -DataDrivenCollatorTest::processSequence(Collator* col, const UnicodeString &sequence) {
|
| - Collator::EComparisonResult relation = Collator::EQUAL;
|
| - UBool hasNext;
|
| - SeqElement *source = NULL;
|
| - SeqElement *target = NULL;
|
| - int32_t j = 0;
|
| -
|
| - sequences.removeAllElements();
|
| -
|
| - target = new SeqElement();
|
| -
|
| - setTestSequence(sequence, *target);
|
| - sequences.addElement(target, status);
|
| -
|
| - do {
|
| - relation = Collator::EQUAL;
|
| - target = new SeqElement();
|
| - hasNext = getNextInSequence(*target);
|
| - for(j = sequences.size(); j > 0; j--) {
|
| - source = (SeqElement *)sequences.elementAt(j-1);
|
| - if(relation == Collator::EQUAL && source->relation != Collator::EQUAL) {
|
| - relation = source->relation;
|
| - }
|
| - doTest(col, source->source, target->source, relation);
|
| - }
|
| - sequences.addElement(target, status);
|
| - source = target;
|
| - } while(hasNext);
|
| -}
|
| -
|
| -#endif /* #if !UCONFIG_NO_COLLATION */
|
|
|