Index: source/test/intltest/datadrivennumberformattestsuite.cpp |
diff --git a/source/test/intltest/datadrivennumberformattestsuite.cpp b/source/test/intltest/datadrivennumberformattestsuite.cpp |
deleted file mode 100644 |
index d3c650c24700d4000ebbac5f49c62614f0a4b796..0000000000000000000000000000000000000000 |
--- a/source/test/intltest/datadrivennumberformattestsuite.cpp |
+++ /dev/null |
@@ -1,303 +0,0 @@ |
-/******************************************************************** |
- * COPYRIGHT: |
- * Copyright (c) 2015, International Business Machines Corporation and |
- * others. All Rights Reserved. |
- ********************************************************************/ |
- |
-#include "datadrivennumberformattestsuite.h" |
- |
-#if !UCONFIG_NO_FORMATTING |
- |
-#include "charstr.h" |
-#include "ucbuf.h" |
-#include "unicode/localpointer.h" |
-#include "ustrfmt.h" |
- |
-static UBool isCROrLF(UChar c) { return c == 0xa || c == 0xd; } |
-static UBool isSpace(UChar c) { return c == 9 || c == 0x20 || c == 0x3000; } |
- |
-void DataDrivenNumberFormatTestSuite::run(const char *fileName, UBool runAllTests) { |
- fFileLineNumber = 0; |
- fFormatTestNumber = 0; |
- UErrorCode status = U_ZERO_ERROR; |
- for (int32_t i = 0; i < UPRV_LENGTHOF(fPreviousFormatters); ++i) { |
- delete fPreviousFormatters[i]; |
- fPreviousFormatters[i] = newFormatter(status); |
- } |
- if (!assertSuccess("Can't create previous formatters", status)) { |
- return; |
- } |
- CharString path(getSourceTestData(status), status); |
- path.appendPathPart(fileName, status); |
- const char *codePage = "UTF-8"; |
- LocalUCHARBUFPointer f(ucbuf_open(path.data(), &codePage, TRUE, FALSE, &status)); |
- if (!assertSuccess("Can't open data file", status)) { |
- return; |
- } |
- UnicodeString columnValues[kNumberFormatTestTupleFieldCount]; |
- ENumberFormatTestTupleField columnTypes[kNumberFormatTestTupleFieldCount]; |
- int32_t columnCount; |
- int32_t state = 0; |
- while(U_SUCCESS(status)) { |
- // Read a new line if necessary. |
- if(fFileLine.isEmpty()) { |
- if(!readLine(f.getAlias(), status)) { break; } |
- if (fFileLine.isEmpty() && state == 2) { |
- state = 0; |
- } |
- continue; |
- } |
- if (fFileLine.startsWith("//")) { |
- fFileLine.remove(); |
- continue; |
- } |
- // Initial setup of test. |
- if (state == 0) { |
- if (fFileLine.startsWith(UNICODE_STRING("test ", 5))) { |
- fFileTestName = fFileLine; |
- fTuple.clear(); |
- } else if(fFileLine.startsWith(UNICODE_STRING("set ", 4))) { |
- setTupleField(status); |
- } else if(fFileLine.startsWith(UNICODE_STRING("begin", 5))) { |
- state = 1; |
- } else { |
- showError("Unrecognized verb."); |
- return; |
- } |
- // column specification |
- } else if (state == 1) { |
- columnCount = splitBy(columnValues, UPRV_LENGTHOF(columnValues), 0x9); |
- for (int32_t i = 0; i < columnCount; ++i) { |
- columnTypes[i] = NumberFormatTestTuple::getFieldByName( |
- columnValues[i]); |
- if (columnTypes[i] == kNumberFormatTestTupleFieldCount) { |
- showError("Unrecognized field name."); |
- return; |
- } |
- } |
- state = 2; |
- // run the tests |
- } else { |
- int32_t columnsInThisRow = splitBy(columnValues, columnCount, 0x9); |
- for (int32_t i = 0; i < columnsInThisRow; ++i) { |
- fTuple.setField( |
- columnTypes[i], columnValues[i].unescape(), status); |
- } |
- for (int32_t i = columnsInThisRow; i < columnCount; ++i) { |
- fTuple.clearField(columnTypes[i], status); |
- } |
- if (U_FAILURE(status)) { |
- showError("Invalid column values"); |
- return; |
- } |
- if (!breaksC() || runAllTests) { |
- UnicodeString errorMessage; |
- if (!isPass(fTuple, errorMessage, status)) { |
- showFailure(errorMessage); |
- } |
- } |
- } |
- fFileLine.remove(); |
- } |
-} |
- |
-DataDrivenNumberFormatTestSuite::~DataDrivenNumberFormatTestSuite() { |
- for (int32_t i = 0; i < UPRV_LENGTHOF(fPreviousFormatters); ++i) { |
- delete fPreviousFormatters[i]; |
- } |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::breaksC() { |
- return (NFTT_GET_FIELD(fTuple, breaks, "").toUpper().indexOf(0x43) != -1); |
-} |
- |
-void DataDrivenNumberFormatTestSuite::setTupleField(UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return; |
- } |
- UnicodeString parts[3]; |
- int32_t partCount = splitBy(parts, UPRV_LENGTHOF(parts), 0x20); |
- if (partCount < 3) { |
- showError("Set expects 2 parameters"); |
- status = U_PARSE_ERROR; |
- return; |
- } |
- if (!fTuple.setField( |
- NumberFormatTestTuple::getFieldByName(parts[1]), |
- parts[2].unescape(), |
- status)) { |
- showError("Invalid field value"); |
- } |
-} |
- |
- |
-int32_t |
-DataDrivenNumberFormatTestSuite::splitBy( |
- UnicodeString *columnValues, |
- int32_t columnValuesCount, |
- UChar delimiter) { |
- int32_t colIdx = 0; |
- int32_t colStart = 0; |
- int32_t len = fFileLine.length(); |
- for (int32_t idx = 0; colIdx < columnValuesCount - 1 && idx < len; ++idx) { |
- UChar ch = fFileLine.charAt(idx); |
- if (ch == delimiter) { |
- columnValues[colIdx++] = |
- fFileLine.tempSubString(colStart, idx - colStart); |
- colStart = idx + 1; |
- } |
- } |
- columnValues[colIdx++] = |
- fFileLine.tempSubString(colStart, len - colStart); |
- return colIdx; |
-} |
- |
-void DataDrivenNumberFormatTestSuite::showLineInfo() { |
- UnicodeString indent(" "); |
- infoln(indent + fFileTestName); |
- infoln(indent + fFileLine); |
-} |
- |
-void DataDrivenNumberFormatTestSuite::showError(const char *message) { |
- errln("line %d: %s", (int) fFileLineNumber, message); |
- showLineInfo(); |
-} |
- |
-void DataDrivenNumberFormatTestSuite::showFailure(const UnicodeString &message) { |
- UChar lineStr[20]; |
- uprv_itou( |
- lineStr, UPRV_LENGTHOF(lineStr), (uint32_t) fFileLineNumber, 10, 1); |
- UnicodeString fullMessage("line "); |
- dataerrln(fullMessage.append(lineStr).append(": ") |
- .append(prettify(message))); |
- showLineInfo(); |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::readLine( |
- UCHARBUF *f, UErrorCode &status) { |
- int32_t lineLength; |
- const UChar *line = ucbuf_readline(f, &lineLength, &status); |
- if(line == NULL || U_FAILURE(status)) { |
- if (U_FAILURE(status)) { |
- errln("Error reading line from file."); |
- } |
- fFileLine.remove(); |
- return FALSE; |
- } |
- ++fFileLineNumber; |
- // Strip trailing CR/LF, comments, and spaces. |
- while(lineLength > 0 && isCROrLF(line[lineLength - 1])) { --lineLength; } |
- fFileLine.setTo(FALSE, line, lineLength); |
- while(lineLength > 0 && isSpace(line[lineLength - 1])) { --lineLength; } |
- if (lineLength == 0) { |
- fFileLine.remove(); |
- } |
- return TRUE; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isPass( |
- const NumberFormatTestTuple &tuple, |
- UnicodeString &appendErrorMessage, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- UBool result = FALSE; |
- if (tuple.formatFlag && tuple.outputFlag) { |
- ++fFormatTestNumber; |
- result = isFormatPass( |
- tuple, |
- fPreviousFormatters[ |
- fFormatTestNumber % UPRV_LENGTHOF(fPreviousFormatters)], |
- appendErrorMessage, |
- status); |
- } |
- else if (tuple.toPatternFlag || tuple.toLocalizedPatternFlag) { |
- result = isToPatternPass(tuple, appendErrorMessage, status); |
- } else if (tuple.parseFlag && tuple.outputFlag && tuple.outputCurrencyFlag) { |
- result = isParseCurrencyPass(tuple, appendErrorMessage, status); |
- |
- } else if (tuple.parseFlag && tuple.outputFlag) { |
- result = isParsePass(tuple, appendErrorMessage, status); |
- } else if (tuple.pluralFlag) { |
- result = isSelectPass(tuple, appendErrorMessage, status); |
- } else { |
- appendErrorMessage.append("Unrecognized test type."); |
- status = U_ILLEGAL_ARGUMENT_ERROR; |
- } |
- if (!result) { |
- if (appendErrorMessage.length() > 0) { |
- appendErrorMessage.append(": "); |
- } |
- if (U_FAILURE(status)) { |
- appendErrorMessage.append(u_errorName(status)); |
- appendErrorMessage.append(": "); |
- } |
- tuple.toString(appendErrorMessage); |
- } |
- return result; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isFormatPass( |
- const NumberFormatTestTuple & /* tuple */, |
- UnicodeString & /*appendErrorMessage*/, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return TRUE; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isFormatPass( |
- const NumberFormatTestTuple &tuple, |
- UObject * /* somePreviousFormatter */, |
- UnicodeString &appendErrorMessage, |
- UErrorCode &status) { |
- return isFormatPass(tuple, appendErrorMessage, status); |
-} |
- |
-UObject *DataDrivenNumberFormatTestSuite::newFormatter( |
- UErrorCode & /*status*/) { |
- return NULL; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isToPatternPass( |
- const NumberFormatTestTuple & /* tuple */, |
- UnicodeString & /*appendErrorMessage*/, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return TRUE; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isParsePass( |
- const NumberFormatTestTuple & /* tuple */, |
- UnicodeString & /*appendErrorMessage*/, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return TRUE; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isParseCurrencyPass( |
- const NumberFormatTestTuple & /* tuple */, |
- UnicodeString & /*appendErrorMessage*/, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return TRUE; |
-} |
- |
-UBool DataDrivenNumberFormatTestSuite::isSelectPass( |
- const NumberFormatTestTuple & /* tuple */, |
- UnicodeString & /*appendErrorMessage*/, |
- UErrorCode &status) { |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return TRUE; |
-} |
-#endif /* !UCONFIG_NO_FORMATTING */ |