]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.11-4.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();
57 // Hiragana (no upper / lower case)
58 // Range: U+3040 to U+309F
60 for ( var i
= 0x3040; i
<= 0x309F; i
++ ) {
61 var U
= new Unicode( i
);
63 array[item++] = new TestCase( SECTION,
64 "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
65 String.fromCharCode(U.lower),
66 eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
68 array
[item
++] = new TestCase( SECTION
,
69 "var s = new String( String.fromCharCode("+i
+") ); s.toLowerCase().charCodeAt(0)",
71 eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
77 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
78 testcases
[tc
].passed
= writeTestCaseResult(
81 testcases
[tc
].description
+" = "+
82 testcases
[tc
].actual
);
84 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
89 function MyObject( value
) {
91 this.substring
= String
.prototype.substring
;
92 this.toString
= new Function ( "return this.value+''" );
94 function Unicode( c
) {
98 // upper case Basic Latin
100 if ( c
>= 0x0041 && c
<= 0x005A) {
106 // lower case Basic Latin
107 if ( c
>= 0x0061 && c
<= 0x007a ) {
113 // upper case Latin-1 Supplement
114 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
120 // lower case Latin-1 Supplement
121 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
132 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
133 // special case for capital I
146 // if it's even, it's a capital and the lower case is c +1
150 // if it's odd, it's a lower case and upper case is c-1
162 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
164 // if it's odd, it's a capital and the lower case is c +1
168 // if it's even, it's a lower case and upper case is c-1
180 // need to improve this set
182 if ( c
>= 0x0200 && c
<= 0x0217 ) {
193 // Latin Extended Additional
194 // Range: U+1E00 to U+1EFF
195 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
197 // Spacing Modifier Leters
198 // Range: U+02B0 to U+02FF
200 // Combining Diacritical Marks
201 // Range: U+0300 to U+036F
203 // skip Greek for now
205 // Range: U+0370 to U+03FF
208 // Range: U+0400 to U+04FF
210 if ( (c
>= 0x0401 && c
<= 0x040C) || ( c
>= 0x040E && c
<= 0x040F ) ) {
217 if ( c
>= 0x0410 && c
<= 0x042F ) {
223 if ( c
>= 0x0430 && c
<= 0x044F ) {
229 if ( (c
>= 0x0451 && c
<= 0x045C) || (c
>=0x045E && c
<= 0x045F) ) {
235 if ( c
>= 0x0460 && c
<= 0x047F ) {
247 // Range: U+0530 to U+058F
248 if ( c
>= 0x0531 && c
<= 0x0556 ) {
253 if ( c
>= 0x0561 && c
< 0x0587 ) {
260 // Range: U+0590 to U+05FF
264 // Range: U+0600 to U+06FF
267 // Range: U+0900 to U+097F
271 // Range: U+0980 to U+09FF
275 // Range: U+0A00 to U+0A7F
279 // Range: U+0A80 to U+0AFF
283 // Range: U+0B00 to U+0B7F
284 // no capital / lower case
288 // Range: U+0B80 to U+0BFF
289 // no capital / lower case
293 // Range: U+0C00 to U+0C7F
294 // no capital / lower case
298 // Range: U+0C80 to U+0CFF
299 // no capital / lower case
303 // Range: U+0D00 to U+0D7F
306 // Range: U+0E00 to U+0E7F
310 // Range: U+0E80 to U+0EFF
314 // Range: U+0F00 to U+0FBF
317 // Range: U+10A0 to U+10F0
318 if ( c
>= 0x10A0 && c
<= 0x10C5 ) {
323 if ( c
>= 0x10D0 && c
<= 0x10F5 ) {
330 // Range: U+1100 to U+11FF
333 // Range: U+1F00 to U+1FFF
337 // General Punctuation
338 // Range: U+2000 to U+206F
340 // Superscripts and Subscripts
341 // Range: U+2070 to U+209F
344 // Range: U+20A0 to U+20CF
347 // Combining Diacritical Marks for Symbols
348 // Range: U+20D0 to U+20FF
353 // Range: U+2150 to U+218F
358 // Range: U+2190 to U+21FF
360 // Mathematical Operators
361 // Range: U+2200 to U+22FF
363 // Miscellaneous Technical
364 // Range: U+2300 to U+23FF
367 // Range: U+2400 to U+243F
369 // Optical Character Recognition
370 // Range: U+2440 to U+245F
372 // Enclosed Alphanumerics
373 // Range: U+2460 to U+24FF
376 // Range: U+2500 to U+257F
379 // Range: U+2580 to U+259F
382 // Range: U+25A0 to U+25FF
384 // Miscellaneous Symbols
385 // Range: U+2600 to U+26FF
388 // Range: U+2700 to U+27BF
390 // CJK Symbols and Punctuation
391 // Range: U+3000 to U+303F
394 // Range: U+3040 to U+309F
397 // Range: U+30A0 to U+30FF
400 // Range: U+3100 to U+312F
402 // Hangul Compatibility Jamo
403 // Range: U+3130 to U+318F
406 // Range: U+3190 to U+319F
409 // Enclosed CJK Letters and Months
410 // Range: U+3200 to U+32FF
413 // Range: U+3300 to U+33FF
416 // Range: U+AC00 to U+D7A3
419 // Range: U+D800 to U+DB7F
421 // Private Use High Surrogates
422 // Range: U+DB80 to U+DBFF
425 // Range: U+DC00 to U+DFFF
428 // Range: U+E000 to U+F8FF
430 // CJK Compatibility Ideographs
431 // Range: U+F900 to U+FAFF
433 // Alphabetic Presentation Forms
434 // Range: U+FB00 to U+FB4F
436 // Arabic Presentation Forms-A
437 // Range: U+FB50 to U+FDFF
439 // Combining Half Marks
440 // Range: U+FE20 to U+FE2F
442 // CJK Compatibility Forms
443 // Range: U+FE30 to U+FE4F
445 // Small Form Variants
446 // Range: U+FE50 to U+FE6F
448 // Arabic Presentation Forms-B
449 // Range: U+FE70 to U+FEFF
451 // Halfwidth and Fullwidth Forms
452 // Range: U+FF00 to U+FFEF
454 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
460 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
467 // Range: U+FFF0 to U+FFFF
472 function DecimalToHexString( n
) {
476 for ( var i
= 3; i
>= 0; i
-- ) {
477 if ( n
>= Math
.pow(16, i
) ){
478 var t
= Math
.floor( n
/ Math
.pow(16, i
));
479 n
-= t
* Math
.pow(16, i
);