X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/a01113dcd0f39d5da295ef82785beff9ed86fe38..HEAD:/icuSources/test/intltest/intltest.cpp diff --git a/icuSources/test/intltest/intltest.cpp b/icuSources/test/intltest/intltest.cpp index c1b6e5b2..15cd2d30 100644 --- a/icuSources/test/intltest/intltest.cpp +++ b/icuSources/test/intltest/intltest.cpp @@ -593,6 +593,7 @@ void IntlTest::setCaller( IntlTest* callingTest ) quick = caller->quick; threadCount = caller->threadCount; testoutfp = caller->testoutfp; + write_golden_data = caller->write_golden_data; LL_indentlevel = caller->LL_indentlevel + indentLevel_offset; numProps = caller->numProps; for (int32_t i = 0; i < numProps; i++) { @@ -637,6 +638,13 @@ UBool IntlTest::setWarnOnMissingData( UBool warn_on_missing_dataVal ) return rval; } +UBool IntlTest::setWriteGoldenData( UBool write_golden_data ) +{ + UBool rval = this->write_golden_data; + this->write_golden_data = write_golden_data; + return rval; +} + UBool IntlTest::setNoErrMsg( UBool no_err_msgVal ) { UBool rval = this->no_err_msg; @@ -1116,8 +1124,8 @@ void IntlTest::LL_message( UnicodeString message, UBool newline ) // All error messages generated by tests funnel through here. // Multithreaded tests can concurrently generate errors, requiring synchronization // to keep each message together. - static UMutex *messageMutex = STATIC_NEW(UMutex); - Mutex lock(messageMutex); + static UMutex messageMutex; + Mutex lock(&messageMutex); // string that starts with a LineFeed character and continues // with spaces according to the current indentation @@ -1224,6 +1232,7 @@ main(int argc, char* argv[]) UBool utf8 = FALSE; const char *summary_file = NULL; UBool warnOnMissingData = FALSE; + UBool writeGoldenData = FALSE; UBool defaultDataFound = FALSE; int32_t threadCount = 12; UErrorCode errorCode = U_ZERO_ERROR; @@ -1265,6 +1274,9 @@ main(int argc, char* argv[]) else if (strcmp("notime", str) == 0 || strcmp("T", str) == 0) no_time = TRUE; + else if (strcmp("goldens", str) == 0 || + strcmp("G", str) == 0) + writeGoldenData = TRUE; else if (strncmp("E", str, 1) == 0) summary_file = str+1; else if (strcmp("x", str)==0) { @@ -1338,6 +1350,7 @@ main(int argc, char* argv[]) major.setLeaks( leaks ); major.setThreadCount( threadCount ); major.setWarnOnMissingData( warnOnMissingData ); + major.setWriteGoldenData( writeGoldenData ); major.setNotime (no_time); for (int32_t i = 0; i < nProps; i++) { major.setProperty(props[i]); @@ -1371,9 +1384,10 @@ main(int argc, char* argv[]) fprintf(stdout, " Exhaustive (e) : %s\n", (!quick? "On" : "Off")); fprintf(stdout, " Leaks (l) : %s\n", (leaks? "On" : "Off")); fprintf(stdout, " utf-8 (u) : %s\n", (utf8? "On" : "Off")); - fprintf(stdout, " notime (T) : %s\n", (no_time? "On" : "Off")); - fprintf(stdout, " noknownissues (K) : %s\n", (noKnownIssues? "On" : "Off")); + fprintf(stdout, " notime (T) : %s\n", (no_time? "On" : "Off")); + fprintf(stdout, " noknownissues (K) : %s\n", (noKnownIssues? "On" : "Off")); fprintf(stdout, " Warn on missing data (w) : %s\n", (warnOnMissingData? "On" : "Off")); + fprintf(stdout, " Write golden data (G) : %s\n", (writeGoldenData? "On" : "Off")); fprintf(stdout, " Threads : %d\n", threadCount); for (int32_t i = 0; i < nProps; i++) { fprintf(stdout, " Custom property (prop:) : %s\n", props[i]); @@ -2105,6 +2119,42 @@ UBool IntlTest::assertEquals(const char* message, } #endif +std::string vectorToString(const std::vector& strings) { + std::string result = "{"; + bool first = true; + for (auto element : strings) { + if (first) { + first = false; + } else { + result += ", "; + } + result += "\""; + result += element; + result += "\""; + } + result += "}"; + return result; +} + +UBool IntlTest::assertEquals(const char* message, + const std::vector& expected, + const std::vector& actual) { + if (expected != actual) { + std::string expectedAsString = vectorToString(expected); + std::string actualAsString = vectorToString(actual); + errln((UnicodeString)"FAIL: " + message + + "; got " + actualAsString.c_str() + + "; expected " + expectedAsString.c_str()); + return FALSE; + } +#ifdef VERBOSE_ASSERTIONS + else { + logln((UnicodeString)"Ok: " + message + "; got " + vectorToString(actual).c_str()); + } +#endif + return TRUE; +} + static char ASSERT_BUF[256]; static const char* extractToAssertBuf(const UnicodeString& message) { @@ -2169,6 +2219,11 @@ UBool IntlTest::assertEquals(const UnicodeString& message, const UnicodeSet& actual) { return assertEquals(extractToAssertBuf(message), expected, actual); } +UBool IntlTest::assertEquals(const UnicodeString& message, + const std::vector& expected, + const std::vector& actual) { + return assertEquals(extractToAssertBuf(message), expected, actual); +} #if !UCONFIG_NO_FORMATTING UBool IntlTest::assertEquals(const UnicodeString& message,