diff --git a/Build/Chakra.Build.Default.props b/Build/Chakra.Build.Default.props
index 5501dbf030e..8566840adcb 100644
--- a/Build/Chakra.Build.Default.props
+++ b/Build/Chakra.Build.Default.props
@@ -29,10 +29,20 @@
true
false
- false
+ windows
true
+
+
+
+ <_UseModernWindowsIcu Condition=" Exists('$(SYSTEMROOT)\System32\icu.dll') ">true
- icuuc.lib;icuin.lib
+ icu.lib
+ icuuc.lib;icuin.lib
+
+
+
+
+
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 7b98a59b686..33d217354e5 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -125,7 +125,7 @@ jobs:
maxParallel: 4
matrix:
x86.Debug:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'debug'
target: 'x86'
special_build: ''
@@ -133,7 +133,7 @@ jobs:
test_tags: ''
build_outdir_suffix: ''
x86.Test:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'test'
target: 'x86'
special_build: ''
@@ -141,7 +141,7 @@ jobs:
test_tags: '--include-slow'
build_outdir_suffix: ''
x86.NoJit:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'debug'
target: 'x86'
special_build: '"/p:BuildJIT=false"'
@@ -149,7 +149,7 @@ jobs:
test_tags: '-disablejit'
build_outdir_suffix: '.NoJIT'
x86.Release:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'release'
target: 'x86'
special_build: ''
@@ -157,7 +157,7 @@ jobs:
test_tags: ''
build_outdir_suffix: ''
x64.Debug:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'debug'
target: 'x64'
special_build: ''
@@ -165,7 +165,7 @@ jobs:
test_tags: ''
build_outdir_suffix: ''
x64.Test:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'test'
target: 'x64'
special_build: ''
@@ -173,23 +173,23 @@ jobs:
test_tags: '--include-slow'
build_outdir_suffix: ''
x64.Release:
- image_name: 'windows-2022'
+ image_name: 'windows-2025'
build_type: 'release'
target: 'x64'
special_build: ''
do_test: false
test_tags: ''
build_outdir_suffix: ''
- win19.x86.Release:
- image_name: 'windows-2019'
+ win22.x86.Release:
+ image_name: 'windows-2022'
build_type: 'release'
target: 'x86'
special_build: ''
do_test: false
test_tags: ''
build_outdir_suffix: ''
- win19.x64.Release:
- image_name: 'windows-2019'
+ win22.x64.Release:
+ image_name: 'windows-2022'
build_type: 'release'
target: 'x64'
special_build: ''
diff --git a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp
index 4468712b383..884119768ed 100644
--- a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp
+++ b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp
@@ -2437,7 +2437,8 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc)
return JavascriptString::NewWithBuffer(formatted, formattedLen, scriptContext);
}
-#if defined(ICU_VERSION) && ICU_VERSION >= 61
+ // windows-icu does not define `ICU_VERSION` but does support `unum_formatDoubleForFields` (ICU 61+) since Windows 10 1809 "Redstone 5" (`NTDDI_WIN10_RS5`).
+#if !defined(ICU_VERSION) || ICU_VERSION >= 61
UErrorCode status = U_ZERO_ERROR;
ScopedUFieldPositionIterator fpi(ufieldpositer_open(&status));
@@ -3012,7 +3013,9 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc)
// For ICU < 61, we can fake it by creating an array of ["other"], which
// uplrules_getKeywords is guaranteed to return at minimum.
// This array is only used in resolved options, so the majority of the functionality can remain (namely, select() still works)
-#if defined(ICU_VERSION) && ICU_VERSION >= 61
+ //
+ // windows-icu does not define `ICU_VERSION` but does support `uplrules_getKeywords` (ICU 61+) since Windows 10 1809 "Redstone 5" (`NTDDI_WIN10_RS5`).
+#if !defined(ICU_VERSION) || ICU_VERSION >= 61
DynamicObject *state = UnsafeVarTo(args[1]);
FinalizableUPluralRules *pr = GetOrCreateCachedUPluralRules(state, scriptContext);
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 4e569d9a4f3..d66b8c1c6e4 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -8,8 +8,6 @@ endif ()
if (NO_ICU)
set(TEST_ICU --not-tag exclude_noicu)
-elseif (NOT EMBED_ICU)
- set(TEST_ICU --not-tag exclude_icu62AndAboveTestFailures)
endif()
if (BuildJIT)
diff --git a/test/DebuggerCommon/ES6_intl_simple_attach.js.dbg.baseline b/test/DebuggerCommon/ES6_intl_simple_attach.js.dbg.baseline
index da61b14b4d8..7ca8fce2bc0 100644
--- a/test/DebuggerCommon/ES6_intl_simple_attach.js.dbg.baseline
+++ b/test/DebuggerCommon/ES6_intl_simple_attach.js.dbg.baseline
@@ -131,7 +131,7 @@
"#__proto__": "Object {...}",
"constructor": "function ",
"resolvedOptions": "function ",
- "compare": "function "
+ "compare": "Error "
},
"length": "number 0",
"name": "string Collator",
@@ -281,7 +281,8 @@
"#__proto__": "Object {...}",
"constructor": "function ",
"resolvedOptions": "function ",
- "format": "function "
+ "format": "Error ",
+ "formatToParts": "function "
},
"length": "number 0",
"name": "string NumberFormat",
@@ -323,6 +324,23 @@
"arguments": "Error "
},
"length": "number 1"
+ },
+ "formatToParts": {
+ "#__proto__": {
+ "#__proto__": "Object {...}",
+ "constructor": "function ",
+ "length": "number 0",
+ "name": "string ",
+ "apply": "function ",
+ "bind": "function ",
+ "call": "function ",
+ "toString": "function ",
+ "Symbol.hasInstance": "function ",
+ "caller": "Error ",
+ "arguments": "Error "
+ },
+ "length": "number 1",
+ "name": "string formatToParts"
}
}
}
@@ -430,17 +448,12 @@
"prototype": {
"#__proto__": "Object {...}",
"constructor": "function ",
- "format": "function ",
+ "format": "Error ",
+ "formatToParts": "function ",
"resolvedOptions": "function "
},
"length": "number 0",
"name": "string DateTimeFormat",
- "__relevantExtensionKeys": {
- "#__proto__": "Array []",
- "length": "number 2",
- "[0]": "string \"ca\"",
- "[1]": "string \"nu\""
- },
"supportedLocalesOf": {
"#__proto__": "function ",
"length": "number 1",
@@ -463,6 +476,23 @@
},
"length": "number 1"
},
+ "formatToParts": {
+ "#__proto__": {
+ "#__proto__": "Object {...}",
+ "constructor": "function ",
+ "length": "number 0",
+ "name": "string ",
+ "apply": "function ",
+ "bind": "function ",
+ "call": "function ",
+ "toString": "function ",
+ "Symbol.hasInstance": "function ",
+ "caller": "Error ",
+ "arguments": "Error "
+ },
+ "length": "number 1",
+ "name": "string formatToParts"
+ },
"resolvedOptions": {
"#__proto__": {
"#__proto__": "Object {...}",
diff --git a/test/DebuggerCommon/rlexe.xml b/test/DebuggerCommon/rlexe.xml
index d7ecbd85c7c..3bbdd011e03 100644
--- a/test/DebuggerCommon/rlexe.xml
+++ b/test/DebuggerCommon/rlexe.xml
@@ -218,8 +218,7 @@
ES6_intl_simple_attach.js
-dbgbaseline:ES6_intl_simple_attach.js.dbg.baseline -Intl
ES6_intl_simple_attach.js.baseline
-
- Intl,require_winglob
+ Intl
diff --git a/test/Intl/GetCanonicalLocales.js b/test/Intl/GetCanonicalLocales.js
index 2fe70ecd745..02983ae3e6c 100644
--- a/test/Intl/GetCanonicalLocales.js
+++ b/test/Intl/GetCanonicalLocales.js
@@ -1,5 +1,6 @@
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
+// Copyright (c) ChakraCore Project Contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
@@ -90,9 +91,15 @@ var tests = [
// V8 and CC-ICU also give the default value of "yes" to non-boolean keys (co), which also is incorrect.
// Everyone (should) correctly re-order extension keys alphabetically
// Microsoft/ChakraCore#4490 tracks the incorrect defaulting, Microsoft/ChakraCore#2964 tracks the overall investigation
- equal("de-DE-u-co-kn", "de-DE-u-co-yes-kn-true", gcl("de-de-u-kn-co")[0]);
- equal("de-DE-u-co-phonebk-kn", "de-DE-u-co-phonebk-kn-true", gcl("de-de-u-kn-co-phonebk")[0]);
- equal("de-DE-u-co-phonebk-kn-yes", "de-DE-u-co-phonebk-kn-true", gcl("de-DE-u-kn-yes-co-phonebk")[0]);
+ if (WScript.Platform.ICU_VERSION < 62) {
+ assert.areEqual(["de-DE-u-co-yes-kn-true"], Intl.getCanonicalLocales("de-de-u-kn-co"))
+ assert.areEqual(["de-DE-u-co-phonebk-kn-true"], Intl.getCanonicalLocales("de-de-u-kn-co-phonebk"))
+ assert.areEqual(["de-DE-u-co-phonebk-kn-true"], Intl.getCanonicalLocales("de-DE-u-kn-yes-co-phonebk"))
+ } else {
+ assert.areEqual(["de-DE-u-co-kn"], Intl.getCanonicalLocales("de-de-u-kn-co"))
+ assert.areEqual(["de-DE-u-co-phonebk-kn"], Intl.getCanonicalLocales("de-de-u-kn-co-phonebk"))
+ assert.areEqual(["de-DE-u-co-phonebk-kn"], Intl.getCanonicalLocales("de-DE-u-kn-yes-co-phonebk"))
+ }
// De-dupe after locales are canonicalized
assert.areEqual(Intl.getCanonicalLocales(['en-us', 'en-us']), ['en-US'], "No duplicates, same input casing (casing was incorrect)");
@@ -100,8 +107,8 @@ var tests = [
assert.areEqual(Intl.getCanonicalLocales(['en-us', 'en-US']), ['en-US'], "No duplicates, different input casing");
assert.areEqual(
+ ["de-DE", "de-DE-u-co-phonebk-kn"],
Intl.getCanonicalLocales(["de-de", "de-DE-u-co-phonebk-kn-true", "de-DE-u-kn-true-co-phonebk"]),
- ["de-DE", "de-DE-u-co-phonebk-kn-true"],
"No duplicates after re-ordering options"
);
}
@@ -122,8 +129,12 @@ var tests = [
// TODO (doilij): Investigate what is correct/allowable here (Microsoft/ChakraCore#2964)
equal("xx-zzz", "zzz", gcl("xx-zzz")[0]);
- // See discussion of defaulting above (V8/CC-ICU and CC-WinGlob/SM distinction remains true here)
- equal("xx-ZZ-u-yy-zz", "xx-ZZ-u-yy-yes-zz-yes", gcl("xx-zz-u-zz-yy")[0]);
+ // See discussion of defaulting above
+ if (WScript.Platform.ICU_VERSION < 62) {
+ assert.areEqual(["xx-ZZ-u-yy-yes-zz-yes"], Intl.getCanonicalLocales("xx-zz-u-zz-yy"));
+ } else {
+ assert.areEqual(["xx-ZZ-u-yy-zz"], Intl.getCanonicalLocales("xx-zz-u-zz-yy"));
+ }
}
},
{
diff --git a/test/Intl/IntlReturnedValueTests.js.dbg.baseline b/test/Intl/IntlReturnedValueTests.js.dbg.baseline
index 8270a3cc2d2..c1c1eeb9911 100644
--- a/test/Intl/IntlReturnedValueTests.js.dbg.baseline
+++ b/test/Intl/IntlReturnedValueTests.js.dbg.baseline
@@ -21,14 +21,14 @@
"this": "Object {...}",
"functionCallsReturn": {
"[get format returned]": "function ",
- "[Intl.DateTimeFormat.prototype.format returned]": "string 2/1/2000"
+ "[Intl.DateTimeFormat.prototype.format returned]": "string 2/1/2000"
},
"locals": {
"Symbol.toStringTag": "string global",
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "undefined undefined",
"numberFormat1": "undefined undefined",
"formattedNumber1": "undefined undefined",
@@ -46,7 +46,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "undefined undefined",
"formattedNumber1": "undefined undefined",
@@ -64,7 +64,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "undefined undefined",
"formattedNumber1": "undefined undefined",
@@ -75,14 +75,14 @@
{
"this": "Object {...}",
"functionCallsReturn": {
- "[resolvedOptions returned]": "Object {...}"
+ "[Intl.DateTimeFormat.prototype.resolvedOptions returned]": "Object {...}"
},
"locals": {
"Symbol.toStringTag": "string global",
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "undefined undefined",
"formattedNumber1": "undefined undefined",
@@ -100,7 +100,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "undefined undefined",
@@ -119,7 +119,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -137,7 +137,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -148,14 +148,14 @@
{
"this": "Object {...}",
"functionCallsReturn": {
- "[resolvedOptions returned]": "Object {...}"
+ "[Intl.NumberFormat.prototype.resolvedOptions returned]": "Object {...}"
},
"locals": {
"Symbol.toStringTag": "string global",
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -173,7 +173,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -192,7 +192,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -210,7 +210,7 @@
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
@@ -221,14 +221,14 @@
{
"this": "Object {...}",
"functionCallsReturn": {
- "[resolvedOptions returned]": "Object {...}"
+ "[Intl.Collator.prototype.resolvedOptions returned]": "Object {...}"
},
"locals": {
"Symbol.toStringTag": "string global",
"options": "Object {...}",
"dateFormat1": "Object {...}",
"date1": "Date ",
- "date2": "string 2/1/2000",
+ "date2": "string 2/1/2000",
"stringDate1": "string ",
"numberFormat1": "Object {...}",
"formattedNumber1": "string 123.456",
diff --git a/test/Intl/rlexe.xml b/test/Intl/rlexe.xml
index 33910ad973c..2e2ba883fba 100644
--- a/test/Intl/rlexe.xml
+++ b/test/Intl/rlexe.xml
@@ -23,7 +23,7 @@
NumberFormat.js
- Intl,exclude_drt,exclude_icu62AndAboveTestFailures
+ Intl,exclude_drt
@@ -37,7 +37,7 @@
GetCanonicalLocales.js
-args summary -endargs
- Intl,exclude_icu62AndAboveTestFailures
+ Intl
@@ -84,7 +84,7 @@
-Intl -debugLaunch -dbgbaseline:IntlReturnedValueTests.js.dbg.baseline
IntlReturnedValueTests.js
- Intl,require_winglob
+ Intl
diff --git a/test/runtests.py b/test/runtests.py
index 4a7d811cb64..f2dcd4c8279 100755
--- a/test/runtests.py
+++ b/test/runtests.py
@@ -175,7 +175,6 @@
# xplat: temp hard coded to exclude unsupported tests
if sys.platform != 'win32':
not_tags.add('exclude_xplat')
- not_tags.add('require_winglob')
not_tags.add('require_simd')
else:
not_tags.add('exclude_windows')