Update ICU to ICU 70-1 with tests

Size Impact:
Android   +143K
Cast      -143K
ChromeOS  -154.7K
Common    -159K
flutter   -123.1K
iOS       -157.6K
Diary https://docs.google.com/document/d/1NqMw7DAVFCZRx67auC7sgOvrikHvCYuaB87JUf21yG8

Bug: 1260116
Change-Id: I90102bf8c5a9d54a59658b2d2f7fb25b405917ad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/3268349
Reviewed-by: Jungshik Shin <jshin@chromium.org>
diff --git a/source/test/intltest/winutil.cpp b/source/test/intltest/winutil.cpp
new file mode 100644
index 0000000..87b2d40
--- /dev/null
+++ b/source/test/intltest/winutil.cpp
@@ -0,0 +1,100 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+********************************************************************************
+*   Copyright (C) 2005-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+********************************************************************************
+*
+* File WINUTIL.CPP
+*
+********************************************************************************
+*/
+
+#include "unicode/utypes.h"
+
+#if U_PLATFORM_HAS_WIN32_API
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "cmemory.h"
+#include "winutil.h"
+#include "locmap.h"
+#include "unicode/uloc.h"
+
+#   define WIN32_LEAN_AND_MEAN
+#   define VC_EXTRALEAN
+#   define NOUSER
+#   define NOSERVICE
+#   define NOIME
+#   define NOMCX
+#   include <windows.h>
+#   include <stdio.h>
+#   include <string.h>
+
+static Win32Utilities::LCIDRecord *lcidRecords = NULL;
+static int32_t lcidCount  = 0;
+static int32_t lcidMax = 0;
+
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
+BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString)
+{
+    char localeID[ULOC_FULLNAME_CAPACITY];
+	int32_t localeIDLen;
+    UErrorCode status = U_ZERO_ERROR;
+
+    if (lcidCount >= lcidMax) {
+        Win32Utilities::LCIDRecord *newRecords = new Win32Utilities::LCIDRecord[lcidMax + 32];
+
+        for (int i = 0; i < lcidMax; i += 1) {
+            newRecords[i] = lcidRecords[i];
+        }
+
+        delete[] lcidRecords;
+        lcidRecords = newRecords;
+        lcidMax += 32;
+    }
+
+    sscanf(lpLocaleString, "%8x", &lcidRecords[lcidCount].lcid);
+
+    localeIDLen = uprv_convertToPosix(lcidRecords[lcidCount].lcid, localeID, UPRV_LENGTHOF(localeID), &status);
+    if (U_SUCCESS(status)) {
+        lcidRecords[lcidCount].localeID = new char[localeIDLen + 1];
+        memcpy(lcidRecords[lcidCount].localeID, localeID, localeIDLen);
+        lcidRecords[lcidCount].localeID[localeIDLen] = 0;
+    } else {
+        lcidRecords[lcidCount].localeID = NULL;
+    }
+
+    lcidCount += 1;
+
+    return TRUE;
+}
+
+// TODO: Note that this test will skip locale names and only hit locales with assigned LCIDs
+Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount)
+{
+    LCIDRecord *result;
+
+    EnumSystemLocalesA(EnumLocalesProc, LCID_INSTALLED);
+
+    localeCount = lcidCount;
+    result      = lcidRecords;
+
+    lcidCount = lcidMax = 0;
+    lcidRecords = NULL;
+
+    return result;
+}
+
+void Win32Utilities::freeLocales(LCIDRecord *records)
+{
+    for (int i = 0; i < lcidCount; i++) {
+        delete lcidRecords[i].localeID;
+    }
+    delete[] records;
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+
+#endif /* U_PLATFORM_HAS_WIN32_API */