]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.12-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.12-3.js
24 ECMA Section: 15.5.4.12 String.prototype.toUpperCase()
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 toUpperCase 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.12-3";
44 var VERSION
= "ECMA_1";
46 var TITLE
= "String.prototype.toUpperCase()";
48 writeHeaderToLog( SECTION
+ " "+ TITLE
);
50 var testcases
= getTestCases();
53 function getTestCases() {
54 var array
= new Array();
58 // Range: U+10A0 to U+10FF
59 for ( var i
= 0x10A0; i
<= 0x10FF; i
++ ) {
60 var U
= new Unicode( i
);
62 array[item++] = new TestCase( SECTION,
63 "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
64 String.fromCharCode(U.upper),
65 eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
67 array
[item
++] = new TestCase( SECTION
,
68 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)",
70 eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") );
74 // Halfwidth and Fullwidth Forms
75 // Range: U+FF00 to U+FFEF
76 for ( var i
= 0xFF00; i
<= 0xFFEF; i
++ ) {
77 array
[item
++] = new TestCase( SECTION
,
78 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase()",
79 eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ),
80 eval("var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase()") );
82 array
[item
++] = new TestCase( SECTION
,
83 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)",
84 eval( "var u = new Unicode( i ); u.upper" ),
85 eval("var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)") );
88 // Hiragana (no upper / lower case)
89 // Range: U+3040 to U+309F
91 for ( var i
= 0x3040; i
<= 0x309F; i
++ ) {
92 array
[item
++] = new TestCase( SECTION
,
93 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase()",
94 eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ),
95 eval("var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase()") );
97 array
[item
++] = new TestCase( SECTION
,
98 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)",
99 eval( "var u = new Unicode( i ); u.upper" ),
100 eval("var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)") );
105 var TEST_STRING = "";
106 var EXPECT_STRING = "";
110 for ( var i = 0; i < 0x007A; i++ ) {
111 var u = new Unicode(i);
112 TEST_STRING += String.fromCharCode(i);
113 EXPECT_STRING += String.fromCharCode( u.upper );
122 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
123 testcases
[tc
].passed
= writeTestCaseResult(
124 testcases
[tc
].expect
,
125 testcases
[tc
].actual
,
126 testcases
[tc
].description
+" = "+
127 testcases
[tc
].actual
);
129 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
132 return ( testcases
);
134 function MyObject( value
) {
136 this.substring
= String
.prototype.substring
;
137 this.toString
= new Function ( "return this.value+''" );
139 function Unicode( c
) {
140 u
= GetUnicodeValues( c
);
145 function GetUnicodeValues( c
) {
151 // upper case Basic Latin
153 if ( c
>= 0x0041 && c
<= 0x005A) {
159 // lower case Basic Latin
160 if ( c
>= 0x0061 && c
<= 0x007a ) {
166 // upper case Latin-1 Supplement
172 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
178 // lower case Latin-1 Supplement
179 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
190 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
191 // special case for capital I
204 // if it's even, it's a capital and the lower case is c +1
208 // if it's odd, it's a lower case and upper case is c-1
220 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
222 // if it's odd, it's a capital and the lower case is c +1
226 // if it's even, it's a lower case and upper case is c-1
238 // need to improve this set
240 if ( c
>= 0x0200 && c
<= 0x0217 ) {
251 // Latin Extended Additional
252 // Range: U+1E00 to U+1EFF
253 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
255 // Spacing Modifier Leters
256 // Range: U+02B0 to U+02FF
258 // Combining Diacritical Marks
259 // Range: U+0300 to U+036F
261 // skip Greek for now
263 // Range: U+0370 to U+03FF
266 // Range: U+0400 to U+04FF
268 if ( c
>= 0x0400 && c
<= 0x040F) {
275 if ( c
>= 0x0410 && c
<= 0x042F ) {
281 if ( c
>= 0x0430 && c
<= 0x044F ) {
287 if ( c
>= 0x0450 && c
<= 0x045F ) {
293 if ( c
>= 0x0460 && c
<= 0x047F ) {
305 // Range: U+0530 to U+058F
306 if ( c
>= 0x0531 && c
<= 0x0556 ) {
311 if ( c
>= 0x0561 && c
< 0x0587 ) {
318 // Range: U+0590 to U+05FF
322 // Range: U+0600 to U+06FF
325 // Range: U+0900 to U+097F
329 // Range: U+0980 to U+09FF
333 // Range: U+0A00 to U+0A7F
337 // Range: U+0A80 to U+0AFF
341 // Range: U+0B00 to U+0B7F
342 // no capital / lower case
346 // Range: U+0B80 to U+0BFF
347 // no capital / lower case
351 // Range: U+0C00 to U+0C7F
352 // no capital / lower case
356 // Range: U+0C80 to U+0CFF
357 // no capital / lower case
361 // Range: U+0D00 to U+0D7F
364 // Range: U+0E00 to U+0E7F
368 // Range: U+0E80 to U+0EFF
372 // Range: U+0F00 to U+0FBF
375 // Range: U+10A0 to U+10F0
378 // Range: U+1100 to U+11FF
381 // Range: U+1F00 to U+1FFF
385 // General Punctuation
386 // Range: U+2000 to U+206F
388 // Superscripts and Subscripts
389 // Range: U+2070 to U+209F
392 // Range: U+20A0 to U+20CF
395 // Combining Diacritical Marks for Symbols
396 // Range: U+20D0 to U+20FF
401 // Range: U+2150 to U+218F
406 // Range: U+2190 to U+21FF
408 // Mathematical Operators
409 // Range: U+2200 to U+22FF
411 // Miscellaneous Technical
412 // Range: U+2300 to U+23FF
415 // Range: U+2400 to U+243F
417 // Optical Character Recognition
418 // Range: U+2440 to U+245F
420 // Enclosed Alphanumerics
421 // Range: U+2460 to U+24FF
424 // Range: U+2500 to U+257F
427 // Range: U+2580 to U+259F
430 // Range: U+25A0 to U+25FF
432 // Miscellaneous Symbols
433 // Range: U+2600 to U+26FF
436 // Range: U+2700 to U+27BF
438 // CJK Symbols and Punctuation
439 // Range: U+3000 to U+303F
442 // Range: U+3040 to U+309F
445 // Range: U+30A0 to U+30FF
448 // Range: U+3100 to U+312F
450 // Hangul Compatibility Jamo
451 // Range: U+3130 to U+318F
454 // Range: U+3190 to U+319F
457 // Enclosed CJK Letters and Months
458 // Range: U+3200 to U+32FF
461 // Range: U+3300 to U+33FF
464 // Range: U+AC00 to U+D7A3
467 // Range: U+D800 to U+DB7F
469 // Private Use High Surrogates
470 // Range: U+DB80 to U+DBFF
473 // Range: U+DC00 to U+DFFF
476 // Range: U+E000 to U+F8FF
478 // CJK Compatibility Ideographs
479 // Range: U+F900 to U+FAFF
481 // Alphabetic Presentation Forms
482 // Range: U+FB00 to U+FB4F
484 // Arabic Presentation Forms-A
485 // Range: U+FB50 to U+FDFF
487 // Combining Half Marks
488 // Range: U+FE20 to U+FE2F
490 // CJK Compatibility Forms
491 // Range: U+FE30 to U+FE4F
493 // Small Form Variants
494 // Range: U+FE50 to U+FE6F
496 // Arabic Presentation Forms-B
497 // Range: U+FE70 to U+FEFF
499 // Halfwidth and Fullwidth Forms
500 // Range: U+FF00 to U+FFEF
502 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
508 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
515 // Range: U+FFF0 to U+FFFF
520 function DecimalToHexString( n
) {
524 for ( var i
= 3; i
>= 0; i
-- ) {
525 if ( n
>= Math
.pow(16, i
) ){
526 var t
= Math
.floor( n
/ Math
.pow(16, i
));
527 n
-= t
* Math
.pow(16, i
);