]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.11-1.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-1.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-1";
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();
57 array
[item
++] = new TestCase( SECTION
, "String.prototype.toLowerCase.length", 0, String
.prototype.toLowerCase
.length
);
58 array
[item
++] = new TestCase( SECTION
, "delete String.prototype.toLowerCase.length", false, delete String
.prototype.toLowerCase
.length
);
59 array
[item
++] = new TestCase( SECTION
, "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0, eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") );
61 // Basic Latin, Latin-1 Supplement, Latin Extended A
62 for ( var i
= 0; i
<= 0x017f; i
++ ) {
63 var U
= new Unicode(i
);
65 array[item++] = new TestCase( SECTION,
66 "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
67 String.fromCharCode(U.lower),
68 eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
70 array
[item
++] = new TestCase( SECTION
,
71 "var s = new String( String.fromCharCode("+i
+") ); s.toLowerCase().charCodeAt(0)",
73 eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
80 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
81 testcases
[tc
].passed
= writeTestCaseResult(
84 testcases
[tc
].description
+" = "+
85 testcases
[tc
].actual
);
87 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
92 function MyObject( value
) {
94 this.substring
= String
.prototype.substring
;
95 this.toString
= new Function ( "return this.value+''" );
97 function Unicode( c
) {
98 u
= GetUnicodeValues( c
);
103 function GetUnicodeValues( c
) {
109 // upper case Basic Latin
111 if ( c
>= 0x0041 && c
<= 0x005A) {
117 // lower case Basic Latin
118 if ( c
>= 0x0061 && c
<= 0x007a ) {
124 // upper case Latin-1 Supplement
130 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
136 // lower case Latin-1 Supplement
137 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
148 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
149 // special case for capital I
162 // if it's even, it's a capital and the lower case is c +1
166 // if it's odd, it's a lower case and upper case is c-1
178 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
180 // if it's odd, it's a capital and the lower case is c +1
184 // if it's even, it's a lower case and upper case is c-1
196 // need to improve this set
198 if ( c
>= 0x0200 && c
<= 0x0217 ) {
209 // Latin Extended Additional
210 // Range: U+1E00 to U+1EFF
211 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
213 // Spacing Modifier Leters
214 // Range: U+02B0 to U+02FF
216 // Combining Diacritical Marks
217 // Range: U+0300 to U+036F
219 // skip Greek for now
221 // Range: U+0370 to U+03FF
224 // Range: U+0400 to U+04FF
226 if ( c
>= 0x0400 && c
<= 0x040F) {
233 if ( c
>= 0x0410 && c
<= 0x042F ) {
239 if ( c
>= 0x0430 && c
<= 0x044F ) {
245 if ( c
>= 0x0450 && c
<= 0x045F ) {
251 if ( c
>= 0x0460 && c
<= 0x047F ) {
263 // Range: U+0530 to U+058F
264 if ( c
>= 0x0531 && c
<= 0x0556 ) {
269 if ( c
>= 0x0561 && c
< 0x0587 ) {
276 // Range: U+0590 to U+05FF
280 // Range: U+0600 to U+06FF
283 // Range: U+0900 to U+097F
287 // Range: U+0980 to U+09FF
291 // Range: U+0A00 to U+0A7F
295 // Range: U+0A80 to U+0AFF
299 // Range: U+0B00 to U+0B7F
300 // no capital / lower case
304 // Range: U+0B80 to U+0BFF
305 // no capital / lower case
309 // Range: U+0C00 to U+0C7F
310 // no capital / lower case
314 // Range: U+0C80 to U+0CFF
315 // no capital / lower case
319 // Range: U+0D00 to U+0D7F
322 // Range: U+0E00 to U+0E7F
326 // Range: U+0E80 to U+0EFF
330 // Range: U+0F00 to U+0FBF
333 // Range: U+10A0 to U+10F0
336 // Range: U+1100 to U+11FF
339 // Range: U+1F00 to U+1FFF
343 // General Punctuation
344 // Range: U+2000 to U+206F
346 // Superscripts and Subscripts
347 // Range: U+2070 to U+209F
350 // Range: U+20A0 to U+20CF
353 // Combining Diacritical Marks for Symbols
354 // Range: U+20D0 to U+20FF
359 // Range: U+2150 to U+218F
364 // Range: U+2190 to U+21FF
366 // Mathematical Operators
367 // Range: U+2200 to U+22FF
369 // Miscellaneous Technical
370 // Range: U+2300 to U+23FF
373 // Range: U+2400 to U+243F
375 // Optical Character Recognition
376 // Range: U+2440 to U+245F
378 // Enclosed Alphanumerics
379 // Range: U+2460 to U+24FF
382 // Range: U+2500 to U+257F
385 // Range: U+2580 to U+259F
388 // Range: U+25A0 to U+25FF
390 // Miscellaneous Symbols
391 // Range: U+2600 to U+26FF
394 // Range: U+2700 to U+27BF
396 // CJK Symbols and Punctuation
397 // Range: U+3000 to U+303F
400 // Range: U+3040 to U+309F
403 // Range: U+30A0 to U+30FF
406 // Range: U+3100 to U+312F
408 // Hangul Compatibility Jamo
409 // Range: U+3130 to U+318F
412 // Range: U+3190 to U+319F
415 // Enclosed CJK Letters and Months
416 // Range: U+3200 to U+32FF
419 // Range: U+3300 to U+33FF
422 // Range: U+AC00 to U+D7A3
425 // Range: U+D800 to U+DB7F
427 // Private Use High Surrogates
428 // Range: U+DB80 to U+DBFF
431 // Range: U+DC00 to U+DFFF
434 // Range: U+E000 to U+F8FF
436 // CJK Compatibility Ideographs
437 // Range: U+F900 to U+FAFF
439 // Alphabetic Presentation Forms
440 // Range: U+FB00 to U+FB4F
442 // Arabic Presentation Forms-A
443 // Range: U+FB50 to U+FDFF
445 // Combining Half Marks
446 // Range: U+FE20 to U+FE2F
448 // CJK Compatibility Forms
449 // Range: U+FE30 to U+FE4F
451 // Small Form Variants
452 // Range: U+FE50 to U+FE6F
454 // Arabic Presentation Forms-B
455 // Range: U+FE70 to U+FEFF
457 // Halfwidth and Fullwidth Forms
458 // Range: U+FF00 to U+FFEF
460 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
466 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
473 // Range: U+FFF0 to U+FFFF
478 function DecimalToHexString( n
) {
482 for ( var i
= 3; i
>= 0; i
-- ) {
483 if ( n
>= Math
.pow(16, i
) ){
484 var t
= Math
.floor( n
/ Math
.pow(16, i
));
485 n
-= t
* Math
.pow(16, i
);