General comment on ES 402 test suite (i18n)

Norbert Lindenberg ecmascript at
Mon Sep 10 13:05:07 PDT 2012

Hi Nebojša,

Thanks for the information - this is really valuable data!

My comments are embedded below. Some of them are based on my own two partial implementations:

1) The prototype/reference implementation that I've been maintaining for quite a while parallel to the spec prose, and which is loaded as a normal JavaScript library.

2) A port thereof into the new environment for self-hosted JavaScript within SpiderMonkey.

The first one doesn't connect to a full internationalization library at all, and the connection for the second is still under construction, so some tests fail for this reason. In addition, I have a failure because SpiderMonkey bug 598996 prevents me from making the length of the array returned by supportedLocalesOf non-writable. Other failures are a subset of the ones you're discussing.


On Sep 7, 2012, at 14:31 , Nebojša Ćirić wrote:

> I am making my implementation conform to the spec/tests as much as possible. It's currently passing  (P) 106, failing (F) 6 and expecting (EF) 25 to fail.

What's the difference between "failing" and "expecting to fail"?

> 3/25 EF are ICU problems, or ISO vs CLDR data differences. Bugs submitted, waiting for update.

Can you provide bug IDs?

> 8/25 EF are from not implementing the i18n support for localeCompare and similar functions (yet).

Looking forward to more info on this once you get there.

> 6/25 EF are from not being able to detect if the function was called as constructor. V8 has a way of detecting that in C++ but there is no way to do it in JavaScript alone - which I need. Any pointers?

Do you mean detecting in order to throw a TypeError when someone uses a non-constructor with new, or do you mean for purposes of differing behavior within an actual constructor? I see problems only with the first one in my prototype library. In the self-hosted environment in SpiderMonkey, there's no problem at all, because self-hosted functions by default are not constructors, and I have to call a special intrinsic %_MakeConstructible to register a function as a constructor.

I suspect that other ECMAScript functions implemented in JavaScript in V8 don't meet this ES5 clause 15 requirement either.

> 6/25 EF are from not being able to delete prototype property from a function. Any pointers?

This is a problem in SpiderMonkey as well:

As above, I suspect that other ECMAScript functions implemented in JavaScript in V8 don't meet this ES5 clause 15 requirement either.

> 2/25 EF are from hour12 field being requested from resolvedOptions() in absence of hour field. Norbert said he would update this requirement in spec/tests.

The spec change is in the September 4 draft, and I just updated the tests as well.

> 1/6 F is from failing on de-DD locale test. I think we should remove this test case (does spec say anything about deprecated locales support?).

6.2.3 CanonicalizeLanguageTag refers to RFC 5646 section 4.5, and step 3 of that section says "Subtags are replaced by their 'Preferred-Value', if there is one." The entry for region DD in the IANA Language Subtag Registry has Preferred-Value DE.

> 2/6 F are from 1x.3_a.js tests, where 0 property of Array.prototype is tainted. I don't know how to guard against this. Any pointers?

You mean 9.2.1_2.js and 9.2.6_2.js? The spec here refers to the List specification type, and I implemented List objects using Array methods that you have to grab before anybody can replace them.

> 3/6 F are from invoking Constructor.prototype.format/compare directly. I'll have to find a way to deal with these 3.

What's the problem you're seeing?

More information about the es-discuss mailing list