]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.11-3.js
1 /* The contents of this file are subject to the Netscape Public
2 * License Version 1.1 (the "License"); you may not use this file
3 * except in compliance with the License. You may obtain a copy of
4 * the License at http://www.mozilla.org/NPL/
6 * Software distributed under the License is distributed on an "AS
7 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8 * implied. See the License for the specific language governing
9 * rights and limitations under the License.
11 * The Original Code is Mozilla Communicator client code, released March
14 * The Initial Developer of the Original Code is Netscape Communications
15 * Corporation. Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation. All
23 File Name: 15.5.4.11-2.js
24 ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
27 Returns a string equal in length to the length of the result of converting
28 this object to a string. The result is a string value, not a String object.
30 Every character of the result is equal to the corresponding character of the
31 string, unless that character has a Unicode 2.0 uppercase equivalent, in which
32 case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
33 mapping shall be used, which does not depend on implementation or locale.)
35 Note that the toLowerCase function is intentionally generic; it does not require
36 that its this value be a String object. Therefore it can be transferred to other
37 kinds of objects for use as a method.
39 Author: christine@netscape.com
40 Date: 12 november 1997
43 var SECTION
= "15.5.4.11-2";
44 var VERSION
= "ECMA_1";
46 var TITLE
= "String.prototype.toLowerCase()";
48 writeHeaderToLog( SECTION
+ " "+ TITLE
);
50 var testcases
= getTestCases();
53 function getTestCases() {
54 var array
= new Array();
56 // Halfwidth and Fullwidth Forms
57 // Range: U+FF00 to U+FFEF
58 for ( var i
= 0xFF00; i
<= 0xFFEF; i
++ ) {
59 var U
= new Unicode(i
);
61 array[item++] = new TestCase( SECTION,
62 "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
63 String.fromCharCode(U.lower),
64 eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
66 array
[item
++] = new TestCase( SECTION
,
67 "var s = new String( String.fromCharCode("+i
+") ); s.toLowerCase().charCodeAt(0)",
69 eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
75 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
76 testcases
[tc
].passed
= writeTestCaseResult(
79 testcases
[tc
].description
+" = "+
80 testcases
[tc
].actual
);
82 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
87 function MyObject( value
) {
89 this.substring
= String
.prototype.substring
;
90 this.toString
= new Function ( "return this.value+''" );
92 function Unicode( c
) {
93 u
= GetUnicodeValues( c
);
98 function GetUnicodeValues( c
) {
104 // upper case Basic Latin
106 if ( c
>= 0x0041 && c
<= 0x005A) {
112 // lower case Basic Latin
113 if ( c
>= 0x0061 && c
<= 0x007a ) {
119 // upper case Latin-1 Supplement
125 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
131 // lower case Latin-1 Supplement
132 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
143 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
144 // special case for capital I
157 // if it's even, it's a capital and the lower case is c +1
161 // if it's odd, it's a lower case and upper case is c-1
173 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
175 // if it's odd, it's a capital and the lower case is c +1
179 // if it's even, it's a lower case and upper case is c-1
191 // need to improve this set
193 if ( c
>= 0x0200 && c
<= 0x0217 ) {
204 // Latin Extended Additional
205 // Range: U+1E00 to U+1EFF
206 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
208 // Spacing Modifier Leters
209 // Range: U+02B0 to U+02FF
211 // Combining Diacritical Marks
212 // Range: U+0300 to U+036F
214 // skip Greek for now
216 // Range: U+0370 to U+03FF
219 // Range: U+0400 to U+04FF
221 if ( c
>= 0x0400 && c
<= 0x040F) {
228 if ( c
>= 0x0410 && c
<= 0x042F ) {
234 if ( c
>= 0x0430 && c
<= 0x044F ) {
240 if ( c
>= 0x0450 && c
<= 0x045F ) {
246 if ( c
>= 0x0460 && c
<= 0x047F ) {
258 // Range: U+0530 to U+058F
259 if ( c
>= 0x0531 && c
<= 0x0556 ) {
264 if ( c
>= 0x0561 && c
< 0x0587 ) {
271 // Range: U+0590 to U+05FF
275 // Range: U+0600 to U+06FF
278 // Range: U+0900 to U+097F
282 // Range: U+0980 to U+09FF
286 // Range: U+0A00 to U+0A7F
290 // Range: U+0A80 to U+0AFF
294 // Range: U+0B00 to U+0B7F
295 // no capital / lower case
299 // Range: U+0B80 to U+0BFF
300 // no capital / lower case
304 // Range: U+0C00 to U+0C7F
305 // no capital / lower case
309 // Range: U+0C80 to U+0CFF
310 // no capital / lower case
314 // Range: U+0D00 to U+0D7F
317 // Range: U+0E00 to U+0E7F
321 // Range: U+0E80 to U+0EFF
325 // Range: U+0F00 to U+0FBF
328 // Range: U+10A0 to U+10F0
331 // Range: U+1100 to U+11FF
334 // Range: U+1F00 to U+1FFF
338 // General Punctuation
339 // Range: U+2000 to U+206F
341 // Superscripts and Subscripts
342 // Range: U+2070 to U+209F
345 // Range: U+20A0 to U+20CF
348 // Combining Diacritical Marks for Symbols
349 // Range: U+20D0 to U+20FF
354 // Range: U+2150 to U+218F
359 // Range: U+2190 to U+21FF
361 // Mathematical Operators
362 // Range: U+2200 to U+22FF
364 // Miscellaneous Technical
365 // Range: U+2300 to U+23FF
368 // Range: U+2400 to U+243F
370 // Optical Character Recognition
371 // Range: U+2440 to U+245F
373 // Enclosed Alphanumerics
374 // Range: U+2460 to U+24FF
377 // Range: U+2500 to U+257F
380 // Range: U+2580 to U+259F
383 // Range: U+25A0 to U+25FF
385 // Miscellaneous Symbols
386 // Range: U+2600 to U+26FF
389 // Range: U+2700 to U+27BF
391 // CJK Symbols and Punctuation
392 // Range: U+3000 to U+303F
395 // Range: U+3040 to U+309F
398 // Range: U+30A0 to U+30FF
401 // Range: U+3100 to U+312F
403 // Hangul Compatibility Jamo
404 // Range: U+3130 to U+318F
407 // Range: U+3190 to U+319F
410 // Enclosed CJK Letters and Months
411 // Range: U+3200 to U+32FF
414 // Range: U+3300 to U+33FF
417 // Range: U+AC00 to U+D7A3
420 // Range: U+D800 to U+DB7F
422 // Private Use High Surrogates
423 // Range: U+DB80 to U+DBFF
426 // Range: U+DC00 to U+DFFF
429 // Range: U+E000 to U+F8FF
431 // CJK Compatibility Ideographs
432 // Range: U+F900 to U+FAFF
434 // Alphabetic Presentation Forms
435 // Range: U+FB00 to U+FB4F
437 // Arabic Presentation Forms-A
438 // Range: U+FB50 to U+FDFF
440 // Combining Half Marks
441 // Range: U+FE20 to U+FE2F
443 // CJK Compatibility Forms
444 // Range: U+FE30 to U+FE4F
446 // Small Form Variants
447 // Range: U+FE50 to U+FE6F
449 // Arabic Presentation Forms-B
450 // Range: U+FE70 to U+FEFF
452 // Halfwidth and Fullwidth Forms
453 // Range: U+FF00 to U+FFEF
455 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
461 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
468 // Range: U+FFF0 to U+FFFF
473 function DecimalToHexString( n
) {
477 for ( var i
= 3; i
>= 0; i
-- ) {
478 if ( n
>= Math
.pow(16, i
) ){
479 var t
= Math
.floor( n
/ Math
.pow(16, i
));
480 n
-= t
* Math
.pow(16, i
);