Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Redesign Intl API and implement some services #2478

Closed
wants to merge 20 commits into from

Conversation

jedel1043
Copy link
Member

This Pull Request fixes/closes #1180. (I'll open a tracking issue for the progress)

It changes the following:

  • Redesigns the internal API of Intl to (hopefully!) make it easier to implement a service.
  • Implements the Intl.Locale service.
  • Implements the Intl.Collator service.
  • Implements the Intl.ListFormat service.

On the subject of the failing tests. Some of them are caused by missing locale data in the icu_testdata crate; we would need to regenerate that with the missing locales, or vendor a custom default data.

On the other hand, there are some tests that are bugs from the ICU4X crate. The repo https://github.com/jedel1043/icu4x-test262 currently tracks the found bugs when running test262. I'll sync with the ICU4X team to try to fix those.

cc @sffc

@jedel1043 jedel1043 added enhancement New feature or request builtins PRs and Issues related to builtins/intrinsics labels Dec 10, 2022
@jedel1043 jedel1043 added this to the v0.17.0 milestone Dec 10, 2022
@jedel1043
Copy link
Member Author

Oops, forgot this was on my personal fork 😅. I'll copy-paste the CI results

@codecov
Copy link

codecov bot commented Dec 10, 2022

Codecov Report

Merging #2478 (6097f4f) into main (f871697) will decrease coverage by 1.46%.
The diff coverage is 17.29%.

@@            Coverage Diff             @@
##             main    #2478      +/-   ##
==========================================
- Coverage   52.99%   51.53%   -1.47%     
==========================================
  Files         343      353      +10     
  Lines       34755    35615     +860     
==========================================
- Hits        18419    18353      -66     
- Misses      16336    17262     +926     
Impacted Files Coverage Δ
boa_ast/src/lib.rs 75.00% <ø> (ø)
boa_engine/src/builtins/intl/collator/options.rs 0.00% <0.00%> (ø)
boa_engine/src/builtins/intl/date_time_format.rs 4.59% <0.00%> (-53.10%) ⬇️
...oa_engine/src/builtins/intl/list_format/options.rs 0.00% <0.00%> (ø)
boa_engine/src/builtins/intl/locale/options.rs 0.00% <0.00%> (ø)
boa_engine/src/builtins/intl/options.rs 0.00% <0.00%> (ø)
boa_engine/src/builtins/intl/segmenter/options.rs 0.00% <0.00%> (ø)
boa_engine/src/context/mod.rs 61.61% <0.00%> (-4.73%) ⬇️
boa_engine/src/lib.rs 100.00% <ø> (ø)
boa_engine/src/object/mod.rs 44.22% <0.00%> (-2.32%) ⬇️
... and 34 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@jedel1043
Copy link
Member Author

jedel1043 commented Dec 10, 2022

Test262 conformance changes

Test result main count PR count difference
Total 94,172 94,172 0
Passed 69,656 70,164 +508
Ignored 18,771 18,593 -178
Failed 5,745 5,415 -330
Panics 0 0 0
Conformance 73.97% 74.51% +0.54%
Fixed tests (516):
test/intl402/Collator/default-options-object-prototype.js [strict mode] (previously Failed)
test/intl402/Collator/default-options-object-prototype.js (previously Failed)
test/intl402/Collator/test-option-numeric-and-caseFirst.js [strict mode] (previously Failed)
test/intl402/Collator/test-option-numeric-and-caseFirst.js (previously Failed)
test/intl402/Collator/unicode-ext-seq-in-private-tag.js [strict mode] (previously Failed)
test/intl402/Collator/unicode-ext-seq-in-private-tag.js (previously Failed)
test/intl402/Collator/constructor-options-throwing-getters.js [strict mode] (previously Failed)
test/intl402/Collator/constructor-options-throwing-getters.js (previously Failed)
test/intl402/Collator/usage-de.js [strict mode] (previously Failed)
test/intl402/Collator/usage-de.js (previously Failed)
test/intl402/Collator/taint-Object-prototype.js [strict mode] (previously Failed)
test/intl402/Collator/taint-Object-prototype.js (previously Failed)
test/intl402/Collator/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/prop-desc.js (previously Failed)
test/intl402/Collator/unicode-ext-seq-with-attribute.js [strict mode] (previously Failed)
test/intl402/Collator/unicode-ext-seq-with-attribute.js (previously Failed)
test/intl402/Collator/instance-proto-and-extensible.js [strict mode] (previously Failed)
test/intl402/Collator/instance-proto-and-extensible.js (previously Failed)
test/intl402/Collator/test-option-sensitivity.js [strict mode] (previously Failed)
test/intl402/Collator/test-option-sensitivity.js (previously Failed)
test/intl402/Collator/name.js [strict mode] (previously Failed)
test/intl402/Collator/name.js (previously Failed)
test/intl402/Collator/test-option-localeMatcher.js [strict mode] (previously Failed)
test/intl402/Collator/test-option-localeMatcher.js (previously Failed)
test/intl402/Collator/test-option-usage.js [strict mode] (previously Failed)
test/intl402/Collator/test-option-usage.js (previously Failed)
test/intl402/Collator/builtin.js [strict mode] (previously Failed)
test/intl402/Collator/builtin.js (previously Failed)
test/intl402/Collator/missing-unicode-ext-value-defaults-to-true.js [strict mode] (previously Failed)
test/intl402/Collator/missing-unicode-ext-value-defaults-to-true.js (previously Failed)
test/intl402/Collator/numeric-and-caseFirst.js [strict mode] (previously Failed)
test/intl402/Collator/numeric-and-caseFirst.js (previously Failed)
test/intl402/Collator/proto-from-ctor-realm.js [strict mode] (previously Failed)
test/intl402/Collator/proto-from-ctor-realm.js (previously Failed)
test/intl402/Collator/unicode-ext-value-collation.js [strict mode] (previously Failed)
test/intl402/Collator/unicode-ext-value-collation.js (previously Failed)
test/intl402/Collator/test-option-ignorePunctuation.js [strict mode] (previously Failed)
test/intl402/Collator/test-option-ignorePunctuation.js (previously Failed)
test/intl402/Collator/legacy-regexp-statics-not-modified.js [strict mode] (previously Failed)
test/intl402/Collator/legacy-regexp-statics-not-modified.js (previously Failed)
test/intl402/Collator/length.js [strict mode] (previously Failed)
test/intl402/Collator/length.js (previously Failed)
test/intl402/Collator/ignore-invalid-unicode-ext-values.js [strict mode] (previously Failed)
test/intl402/Collator/ignore-invalid-unicode-ext-values.js (previously Failed)
test/intl402/Collator/subclassing.js [strict mode] (previously Failed)
test/intl402/Collator/subclassing.js (previously Failed)
test/intl402/Collator/prototype/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/prop-desc.js (previously Failed)
test/intl402/Collator/prototype/builtin.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/builtin.js (previously Failed)
test/intl402/Collator/prototype/this-value-not-collator.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/this-value-not-collator.js (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-length.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-length.js (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-property-order.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-property-order.js (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-builtin.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-builtin.js (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-phonebook.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-phonebook.js (previously Failed)
test/intl402/Collator/prototype/compare/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/prop-desc.js (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-basic.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-basic.js (previously Failed)
test/intl402/Collator/prototype/compare/name.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/name.js (previously Failed)
test/intl402/Collator/prototype/compare/builtin.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/builtin.js (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-name.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/compare-function-name.js (previously Failed)
test/intl402/Collator/prototype/compare/bound-to-collator-instance.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/bound-to-collator-instance.js (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-sensitivity.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/non-normative-sensitivity.js (previously Failed)
test/intl402/Collator/prototype/compare/canonically-equivalent-strings.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/canonically-equivalent-strings.js (previously Failed)
test/intl402/Collator/prototype/compare/length.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/compare/length.js (previously Failed)
test/intl402/Collator/prototype/constructor/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/constructor/prop-desc.js (previously Failed)
test/intl402/Collator/prototype/constructor/value.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/constructor/value.js (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString-removed-tag.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString-removed-tag.js (previously Failed)
test/intl402/Collator/prototype/toStringTag/toStringTag.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/toStringTag/toStringTag.js (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString-changed-tag.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString-changed-tag.js (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/toStringTag/toString.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/prop-desc.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/name.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/name.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/builtin.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/builtin.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/basic.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/basic.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/order.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/order.js (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/length.js [strict mode] (previously Failed)
test/intl402/Collator/prototype/resolvedOptions/length.js (previously Failed)
test/intl402/Collator/supportedLocalesOf/taint-Object-prototype.js [strict mode] (previously Failed)
test/intl402/Collator/supportedLocalesOf/taint-Object-prototype.js (previously Failed)
test/intl402/Collator/supportedLocalesOf/prop-desc.js [strict mode] (previously Failed)
test/intl402/Collator/supportedLocalesOf/prop-desc.js (previously Failed)
test/intl402/Collator/supportedLocalesOf/name.js [strict mode] (previously Failed)
test/intl402/Collator/supportedLocalesOf/name.js (previously Failed)
test/intl402/Collator/supportedLocalesOf/builtin.js [strict mode] (previously Failed)
test/intl402/Collator/supportedLocalesOf/builtin.js (previously Failed)
test/intl402/Collator/supportedLocalesOf/length.js [strict mode] (previously Failed)
test/intl402/Collator/supportedLocalesOf/length.js (previously Failed)
test/intl402/Intl/getCanonicalLocales/Locale-object.js [strict mode] (previously Ignored)
test/intl402/Intl/getCanonicalLocales/Locale-object.js (previously Ignored)
test/intl402/ListFormat/prototype/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/prop-desc.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-getiterator-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-getiterator-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-invalid.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorvalue-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorvalue-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/prop-desc.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-narrow.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-narrow.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-undefined.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-undefined.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorstep-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorstep-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-disjunction.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-disjunction.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-narrow.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-narrow.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/name.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/name.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-default.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-default.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorclose.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/iterable-iteratorclose.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-short.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-short.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/branding.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/branding.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/length.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/length.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-long.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-long.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-short.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/es-es-short.js (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-unit.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/formatToParts/en-us-unit.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-getiterator-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-getiterator-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-invalid.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorvalue-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorvalue-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable.js (previously Ignored)
test/intl402/ListFormat/prototype/format/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/prop-desc.js (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-narrow.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-narrow.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-undefined.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-undefined.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorstep-throw.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorstep-throw.js (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-disjunction.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-disjunction.js (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-narrow.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-narrow.js (previously Ignored)
test/intl402/ListFormat/prototype/format/name.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/name.js (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-default.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-default.js (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorclose.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/iterable-iteratorclose.js (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-short.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-short.js (previously Ignored)
test/intl402/ListFormat/prototype/format/branding.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/branding.js (previously Ignored)
test/intl402/ListFormat/prototype/format/length.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/length.js (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-long.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-long.js (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-short.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/es-es-short.js (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-unit.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/format/en-us-unit.js (previously Ignored)
test/intl402/ListFormat/prototype/constructor/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/constructor/prop-desc.js (previously Ignored)
test/intl402/ListFormat/prototype/toStringTag/toStringTag.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/toStringTag/toStringTag.js (previously Ignored)
test/intl402/ListFormat/prototype/toStringTag/toString.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/toStringTag/toString.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/caching.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/caching.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/prop-desc.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/name.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/name.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/order.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/order.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/branding.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/branding.js (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/length.js [strict mode] (previously Ignored)
test/intl402/ListFormat/prototype/resolvedOptions/length.js (previously Ignored)
test/intl402/ListFormat/constructor/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/prop-desc.js (previously Ignored)
test/intl402/ListFormat/constructor/prototype.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/prototype.js (previously Ignored)
test/intl402/ListFormat/constructor/name.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/name.js (previously Ignored)
test/intl402/ListFormat/constructor/length.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/length.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-getoptionsobject.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-getoptionsobject.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-style-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-style-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/locales-valid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/locales-valid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-style-valid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-style-valid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-undefined.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-undefined.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-localeMatcher-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-localeMatcher-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-type-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-type-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-type-valid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-type-valid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/locales-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/locales-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/proto-from-ctor-realm.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/proto-from-ctor-realm.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-order.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-order.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-throwing-getters.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/options-throwing-getters.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/newtarget-undefined.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/newtarget-undefined.js (previously Ignored)
test/intl402/ListFormat/constructor/constructor/subclassing.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/constructor/subclassing.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/result-type.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/result-type.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/prop-desc.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/prop-desc.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-undefined.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-undefined.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-localeMatcher-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-localeMatcher-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/name.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/name.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/locales-invalid.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/locales-invalid.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-null.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-null.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/basic.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/basic.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/branding.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/branding.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/length.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/length.js (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-toobject.js [strict mode] (previously Ignored)
test/intl402/ListFormat/constructor/supportedLocalesOf/options-toobject.js (previously Ignored)
test/intl402/ListFormat/instance/extensibility.js [strict mode] (previously Ignored)
test/intl402/ListFormat/instance/extensibility.js (previously Ignored)
test/intl402/ListFormat/instance/prototype.js [strict mode] (previously Ignored)
test/intl402/ListFormat/instance/prototype.js (previously Ignored)
test/intl402/Locale/constructor-options-casefirst-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-casefirst-invalid.js (previously Ignored)
test/intl402/Locale/constructor-options-language-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-language-valid.js (previously Ignored)
test/intl402/Locale/constructor-options-throwing-getters.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-throwing-getters.js (previously Ignored)
test/intl402/Locale/constructor-options-numberingsystem-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-numberingsystem-valid.js (previously Ignored)
test/intl402/Locale/constructor-parse-twice.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-parse-twice.js (previously Ignored)
test/intl402/Locale/reject-duplicate-variants.js [strict mode] (previously Ignored)
test/intl402/Locale/reject-duplicate-variants.js (previously Ignored)
test/intl402/Locale/constructor-apply-options-canonicalizes-twice.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-apply-options-canonicalizes-twice.js (previously Ignored)
test/intl402/Locale/invalid-tag-throws-symbol.js [strict mode] (previously Ignored)
test/intl402/Locale/invalid-tag-throws-symbol.js (previously Ignored)
test/intl402/Locale/constructor-options-language-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-language-invalid.js (previously Ignored)
test/intl402/Locale/constructor-locale-object.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-locale-object.js (previously Ignored)
test/intl402/Locale/extensions-private.js [strict mode] (previously Ignored)
test/intl402/Locale/extensions-private.js (previously Ignored)
test/intl402/Locale/constructor-options-numeric-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-numeric-valid.js (previously Ignored)
test/intl402/Locale/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prop-desc.js (previously Ignored)
test/intl402/Locale/constructor-tag-tostring.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-tag-tostring.js (previously Ignored)
test/intl402/Locale/constructor-unicode-ext-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-unicode-ext-valid.js (previously Ignored)
test/intl402/Locale/reject-duplicate-variants-in-tlang.js [strict mode] (previously Ignored)
test/intl402/Locale/reject-duplicate-variants-in-tlang.js (previously Ignored)
test/intl402/Locale/getters-grandfathered.js [strict mode] (previously Ignored)
test/intl402/Locale/getters-grandfathered.js (previously Ignored)
test/intl402/Locale/invalid-tag-throws-boolean.js [strict mode] (previously Ignored)
test/intl402/Locale/invalid-tag-throws-boolean.js (previously Ignored)
test/intl402/Locale/name.js [strict mode] (previously Ignored)
test/intl402/Locale/name.js (previously Ignored)
test/intl402/Locale/invalid-tag-throws-null.js [strict mode] (previously Ignored)
test/intl402/Locale/invalid-tag-throws-null.js (previously Ignored)
test/intl402/Locale/canonicalize-locale-list-take-locale.js [strict mode] (previously Ignored)
test/intl402/Locale/canonicalize-locale-list-take-locale.js (previously Ignored)
test/intl402/Locale/instance.js [strict mode] (previously Ignored)
test/intl402/Locale/instance.js (previously Ignored)
test/intl402/Locale/constructor-options-casefirst-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-casefirst-valid.js (previously Ignored)
test/intl402/Locale/constructor-options-region-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-region-valid.js (previously Ignored)
test/intl402/Locale/constructor-options-script-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-script-invalid.js (previously Ignored)
test/intl402/Locale/constructor-options-collation-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-collation-valid.js (previously Ignored)
test/intl402/Locale/constructor-options-hourcycle-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-hourcycle-valid.js (previously Ignored)
test/intl402/Locale/constructor-tag.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-tag.js (previously Ignored)
test/intl402/Locale/constructor-options-language-valid-undefined.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-language-valid-undefined.js (previously Ignored)
test/intl402/Locale/getters-missing.js [strict mode] (previously Ignored)
test/intl402/Locale/getters-missing.js (previously Ignored)
test/intl402/Locale/constructor-options-hourcycle-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-hourcycle-invalid.js (previously Ignored)
test/intl402/Locale/getters.js [strict mode] (previously Ignored)
test/intl402/Locale/getters.js (previously Ignored)
test/intl402/Locale/constructor-getter-order.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-getter-order.js (previously Ignored)
test/intl402/Locale/instance-extensibility.js [strict mode] (previously Ignored)
test/intl402/Locale/instance-extensibility.js (previously Ignored)
test/intl402/Locale/proto-from-ctor-realm.js [strict mode] (previously Ignored)
test/intl402/Locale/proto-from-ctor-realm.js (previously Ignored)
test/intl402/Locale/constructor-options-calendar-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-calendar-valid.js (previously Ignored)
test/intl402/Locale/constructor-options-calendar-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-calendar-invalid.js (previously Ignored)
test/intl402/Locale/invalid-tag-throws-undefined.js [strict mode] (previously Ignored)
test/intl402/Locale/invalid-tag-throws-undefined.js (previously Ignored)
test/intl402/Locale/constructor-options-language-grandfathered.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-language-grandfathered.js (previously Ignored)
test/intl402/Locale/length.js [strict mode] (previously Ignored)
test/intl402/Locale/length.js (previously Ignored)
test/intl402/Locale/constructor-options-numeric-undefined.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-numeric-undefined.js (previously Ignored)
test/intl402/Locale/constructor-newtarget-undefined.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-newtarget-undefined.js (previously Ignored)
test/intl402/Locale/constructor-options-script-valid-undefined.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-script-valid-undefined.js (previously Ignored)
test/intl402/Locale/extensions-grandfathered.js [strict mode] (previously Ignored)
test/intl402/Locale/extensions-grandfathered.js (previously Ignored)
test/intl402/Locale/constructor-options-region-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-region-invalid.js (previously Ignored)
test/intl402/Locale/constructor-options-script-valid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-script-valid.js (previously Ignored)
test/intl402/Locale/invalid-tag-throws-number.js [strict mode] (previously Ignored)
test/intl402/Locale/invalid-tag-throws-number.js (previously Ignored)
test/intl402/Locale/constructor-options-collation-invalid.js [strict mode] (previously Ignored)
test/intl402/Locale/constructor-options-collation-invalid.js (previously Ignored)
test/intl402/Locale/function-prototype.js [strict mode] (previously Ignored)
test/intl402/Locale/function-prototype.js (previously Ignored)
test/intl402/Locale/subclassing.js [strict mode] (previously Ignored)
test/intl402/Locale/subclassing.js (previously Ignored)
test/intl402/Locale/prototype/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/calendar/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/calendar/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/calendar/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/calendar/name.js (previously Ignored)
test/intl402/Locale/prototype/calendar/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/calendar/branding.js (previously Ignored)
test/intl402/Locale/prototype/language/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/language/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/language/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/language/name.js (previously Ignored)
test/intl402/Locale/prototype/language/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/language/branding.js (previously Ignored)
test/intl402/Locale/prototype/script/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/script/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/script/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/script/name.js (previously Ignored)
test/intl402/Locale/prototype/script/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/script/branding.js (previously Ignored)
test/intl402/Locale/prototype/minimize/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/minimize/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/minimize/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/minimize/name.js (previously Ignored)
test/intl402/Locale/prototype/minimize/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/minimize/branding.js (previously Ignored)
test/intl402/Locale/prototype/minimize/length.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/minimize/length.js (previously Ignored)
test/intl402/Locale/prototype/region/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/region/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/region/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/region/name.js (previously Ignored)
test/intl402/Locale/prototype/region/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/region/branding.js (previously Ignored)
test/intl402/Locale/prototype/caseFirst/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/caseFirst/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/caseFirst/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/caseFirst/name.js (previously Ignored)
test/intl402/Locale/prototype/caseFirst/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/caseFirst/branding.js (previously Ignored)
test/intl402/Locale/prototype/hourCycle/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/hourCycle/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/hourCycle/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/hourCycle/name.js (previously Ignored)
test/intl402/Locale/prototype/hourCycle/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/hourCycle/branding.js (previously Ignored)
test/intl402/Locale/prototype/toString/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/toString/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/toString/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/toString/branding.js (previously Ignored)
test/intl402/Locale/prototype/collation/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/collation/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/collation/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/collation/name.js (previously Ignored)
test/intl402/Locale/prototype/collation/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/collation/branding.js (previously Ignored)
test/intl402/Locale/prototype/constructor/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/constructor/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/numeric/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numeric/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/numeric/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numeric/name.js (previously Ignored)
test/intl402/Locale/prototype/numeric/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numeric/branding.js (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/name.js (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/numberingSystem/branding.js (previously Ignored)
test/intl402/Locale/prototype/baseName/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/baseName/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/baseName/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/baseName/name.js (previously Ignored)
test/intl402/Locale/prototype/baseName/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/baseName/branding.js (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toString-removed-tag.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toString-removed-tag.js (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toStringTag.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toStringTag.js (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toString.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/toStringTag/toString.js (previously Ignored)
test/intl402/Locale/prototype/maximize/prop-desc.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/maximize/prop-desc.js (previously Ignored)
test/intl402/Locale/prototype/maximize/name.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/maximize/name.js (previously Ignored)
test/intl402/Locale/prototype/maximize/branding.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/maximize/branding.js (previously Ignored)
test/intl402/Locale/prototype/maximize/length.js [strict mode] (previously Ignored)
test/intl402/Locale/prototype/maximize/length.js (previously Ignored)
test/intl402/String/prototype/localeCompare/this-value-coerced-to-string.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/this-value-coerced-to-string.js (previously Failed)
test/intl402/String/prototype/localeCompare/default-options-object-prototype.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/default-options-object-prototype.js (previously Failed)
test/intl402/String/prototype/localeCompare/that-arg-coerced-to-string.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/that-arg-coerced-to-string.js (previously Failed)
test/intl402/String/prototype/localeCompare/missing-arguments-coerced-to-undefined.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/missing-arguments-coerced-to-undefined.js (previously Failed)
test/intl402/String/prototype/localeCompare/taint-Intl-Collator.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/taint-Intl-Collator.js (previously Failed)
test/intl402/String/prototype/localeCompare/builtin.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/builtin.js (previously Failed)
test/intl402/String/prototype/localeCompare/returns-same-results-as-Collator.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/returns-same-results-as-Collator.js (previously Failed)
test/intl402/String/prototype/localeCompare/length.js [strict mode] (previously Failed)
test/intl402/String/prototype/localeCompare/length.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A1_T1.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A1_T1.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A6.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A6.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A9.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A9.js (previously Failed)
test/built-ins/String/prototype/localeCompare/15.5.4.9_3.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/15.5.4.9_3.js (previously Failed)
test/built-ins/String/prototype/localeCompare/name.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/name.js (previously Failed)
test/built-ins/String/prototype/localeCompare/this-value-not-obj-coercible.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/this-value-not-obj-coercible.js (previously Failed)
test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/15.5.4.9_CE.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A11.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A11.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A8.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A8.js (previously Failed)
test/built-ins/String/prototype/localeCompare/not-a-constructor.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/not-a-constructor.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A1_T2.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A1_T2.js (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A10.js [strict mode] (previously Failed)
test/built-ins/String/prototype/localeCompare/S15.5.4.9_A10.js (previously Failed)
test/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js [strict mode] (previously Failed)
test/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js (previously Failed)
test/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js [strict mode] (previously Failed)
test/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js (previously Failed)
test/built-ins/Array/prototype/toLocaleString/S15.4.4.3_A1_T1.js [strict mode] (previously Failed)
test/built-ins/Array/prototype/toLocaleString/S15.4.4.3_A1_T1.js (previously Failed)
test/built-ins/Array/prototype/toLocaleString/prop-desc.js [strict mode] (previously Failed)
test/built-ins/Array/prototype/toLocaleString/prop-desc.js (previously Failed)
test/built-ins/Array/prototype/toLocaleString/primitive_this_value_getter.js [strict mode] (previously Failed)
test/built-ins/Array/prototype/toLocaleString/S15.4.4.3_A3_T1.js [strict mode] (previously Failed)
test/built-ins/Array/prototype/toLocaleString/S15.4.4.3_A3_T1.js (previously Failed)
test/built-ins/Array/prototype/toLocaleString/primitive_this_value.js [strict mode] (previously Failed)
Broken tests (6):
test/intl402/String/prototype/localeCompare/throws-same-exceptions-as-Collator.js [strict mode] (previously Passed)
test/intl402/String/prototype/localeCompare/throws-same-exceptions-as-Collator.js (previously Passed)
test/built-ins/TypedArray/prototype/toLocaleString/return-result.js [strict mode] (previously Passed)
test/built-ins/TypedArray/prototype/toLocaleString/return-result.js (previously Passed)
test/built-ins/TypedArray/prototype/toLocaleString/BigInt/return-result.js [strict mode] (previously Passed)
test/built-ins/TypedArray/prototype/toLocaleString/BigInt/return-result.js (previously Passed)

Copy link
Member

@Razican Razican left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work!! This will take quite a while to review this days, though

boa_engine/Cargo.toml Outdated Show resolved Hide resolved
boa_engine/src/builtins/intl/collator/options.rs Outdated Show resolved Hide resolved
boa_engine/src/builtins/intl/collator/options.rs Outdated Show resolved Hide resolved
@Manishearth
Copy link

n.b. left a reply on a resolved comment, which won't be easy to find since it's hidden, see #2478 (comment)

@Manishearth
Copy link

On the subject of the failing tests. Some of them are caused by missing locale data in the icu_testdata crate; we would need to regenerate that with the missing locales, or vendor a custom default data.

Y'all should be generating your own custom default data, not using icu_testdata. icu_testdata is for our tests, and also for people to be able to try ICU4X out without making a full data pipeline.

An easy thing to do woudl be to run the ICU4X datagen tool with the locales you need and produce either postcard or baked (faster) data. Then check that in to this repo or a separate repo that gets submoduled, and regenerate periodically when you start adding more stuff.

@jedel1043
Copy link
Member Author

Y'all should be generating your own custom default data, not using icu_testdata. icu_testdata is for our tests, and also for people to be able to try ICU4X out without making a full data pipeline.

Noted 👍
We've been using icu_testdata because it was convenient, but seeing it doesn't include essential locales such as "de", it might be better to generate the data on this PR.

@jedel1043
Copy link
Member Author

Ok, I generated the locale data using the CldrLocaleSubset::Modern option, and it generated an 8MB file blob, which should be pretty good for our needs. If an user wants to plug the whole locale dataset, they can generate it and pass it to the context easily.

//! implementation.
//!
//! # Crate Overview
//! This crate exports the function [`blob`], which contains an extensive dataset of locale data to

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: y'all might benefit from using the "baked" backend for datagen which generates a very efficient Rust crate.

Copy link
Member Author

@jedel1043 jedel1043 Dec 16, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thought about using that, but when I try to include!() the generated code, Rust-analyzer goes crazy and starts throwing errors on the whole workspace.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah it's a very large crate full of const data that rust-analyzer doesn't like.

The trick we use is include!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/baked/mod.rs"));, and we have the generated code live in data instead of src

Copy link
Member Author

@jedel1043 jedel1043 Dec 16, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I used the exact same trick, but R-A insists on trying to analyze the generated file :(

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The weird thing is that when I open one of the generated files, R-A marks the // @generated with something like "file not included in analysis"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can make it a datagen option to do that so it's easier, if that works

there really needs to be a way to tell r-a to bugger off

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. Though, it'll also need to be accompanied with a way to declare the public exports of a file, or else R-A will complain about missing symbols.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tried to rename the included files with no success 🙁
We'll use binary blobs in the meantime, and I'll try to keep up with R-A to switch to baked data when the issue gets fixed. Are there any related issues I should subscribe to?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We haven't filed any because so far it's worked for us. I think it might be because we use Cargo features.

Y'all should go ahead and file something and cc me.

Copy link
Member Author

@jedel1043 jedel1043 Dec 17, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jedel1043 jedel1043 force-pushed the intl-api branch 3 times, most recently from 645a871 to aeece51 Compare December 20, 2022 21:11
@jedel1043
Copy link
Member Author

Thanks to unicode-org/icu4x#2892, we've got a couple more passing tests after updating the dependencies. I've got some more PRs in the pipeline, such as using &dyn Provider instead of Box<dyn Provider>, or implementing the NumberFormat service, so I think this PR should be merged as it is.

@jedel1043 jedel1043 requested a review from Razican December 20, 2022 21:40
Copy link
Member

@raskad raskad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really impressive work!

Copy link
Member

@HalidOdat HalidOdat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work @jedel1043 , looks perfect to me! :)

@jedel1043
Copy link
Member Author

Thank you for reviewing this in spite of the fact that we're still on holidays 😁
bors r+

bors bot pushed a commit that referenced this pull request Dec 26, 2022
This Pull Request fixes/closes #1180. (I'll open a tracking issue for the progress)

It changes the following:

- Redesigns the internal API of Intl to (hopefully!) make it easier to implement a service.
- Implements the `Intl.Locale` service. 
- Implements the `Intl.Collator` service.
- Implements the `Intl.ListFormat` service.

On the subject of the failing tests. Some of them are caused by missing locale data in the `icu_testdata` crate; we would need to regenerate that with the missing locales, or vendor a custom default data.

On the other hand, there are some tests that are bugs from the ICU4X crate. The repo https://github.com/jedel1043/icu4x-test262 currently tracks the found bugs when running test262. I'll sync with the ICU4X team to try to fix those.

cc @sffc
@bors
Copy link

bors bot commented Dec 26, 2022

Pull request successfully merged into main.

Build succeeded:

@bors bors bot changed the title Redesign Intl API and implement some services [Merged by Bors] - Redesign Intl API and implement some services Dec 26, 2022
@bors bors bot closed this Dec 26, 2022
@jedel1043 jedel1043 deleted the intl-api branch December 26, 2022 18:55
bors bot pushed a commit that referenced this pull request Jan 19, 2023
Follows from #2528, and should complement #2411 to implement the module import hooks.

~~Similarly to the Intl/ICU4X PR (#2478), this has a lot of trivial changes caused by the new lifetimes. I thought about passing the queue and the hooks by value, but it was very painful having to wrap everything with `Rc` in order to be accessible by the host.
In contrast, `&dyn` can be easily provided by the host and has the advantage of not requiring additional allocations, with the downside of adding two more lifetimes to our `Context`, but I think it's worth.~~ I was able to unify all lifetimes into the shortest one of the three, making our API just like before!

Changes:
- Added a new `HostHooks` trait and a `&dyn HostHooks` field to `Context`. This allows hosts to implement the trait for their custom type, then pass it to the context.
- Added a new `JobQueue` trait and a `&dyn JobQueue` field to our `Context`, allowing custom event loops and other fun things.
- Added two simple implementations of `JobQueue`: `IdleJobQueue` which does nothing and `SimpleJobQueue` which runs all jobs until all successfully complete or until any of them throws an error.
- Modified `boa_cli` to run all jobs until the queue is empty, even if a job returns `Err`. This also prints all errors to the user.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
builtins PRs and Issues related to builtins/intrinsics enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Experiment with ICU4X
5 participants