]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.12-5.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-1.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-1";
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+0530 to U+058F
59 for ( var i
= 0x0530; i
<= 0x058F; 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)") );
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
) {
95 u
= GetUnicodeValues( c
);
100 function GetUnicodeValues( c
) {
106 // upper case Basic Latin
108 if ( c
>= 0x0041 && c
<= 0x005A) {
114 // lower case Basic Latin
115 if ( c
>= 0x0061 && c
<= 0x007a ) {
121 // upper case Latin-1 Supplement
127 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
133 // lower case Latin-1 Supplement
134 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
145 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
146 // special case for capital I
159 // if it's even, it's a capital and the lower case is c +1
163 // if it's odd, it's a lower case and upper case is c-1
175 // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE, uppercase takes two code points
182 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
184 // if it's odd, it's a capital and the lower case is c +1
188 // if it's even, it's a lower case and upper case is c-1
200 // need to improve this set
202 if ( c
>= 0x0200 && c
<= 0x0217 ) {
213 // Latin Extended Additional
214 // Range: U+1E00 to U+1EFF
215 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
217 // Spacing Modifier Leters
218 // Range: U+02B0 to U+02FF
220 // Combining Diacritical Marks
221 // Range: U+0300 to U+036F
223 // skip Greek for now
225 // Range: U+0370 to U+03FF
228 // Range: U+0400 to U+04FF
230 if ( c
>= 0x0400 && c
<= 0x040F) {
237 if ( c
>= 0x0410 && c
<= 0x042F ) {
243 if ( c
>= 0x0430 && c
<= 0x044F ) {
249 if ( c
>= 0x0450 && c
<= 0x045F ) {
255 if ( c
>= 0x0460 && c
<= 0x047F ) {
267 // Range: U+0530 to U+058F
268 if ( c
>= 0x0531 && c
<= 0x0556 ) {
273 if ( c
>= 0x0561 && c
< 0x0587 ) {
285 // Range: U+0590 to U+05FF
289 // Range: U+0600 to U+06FF
292 // Range: U+0900 to U+097F
296 // Range: U+0980 to U+09FF
300 // Range: U+0A00 to U+0A7F
304 // Range: U+0A80 to U+0AFF
308 // Range: U+0B00 to U+0B7F
309 // no capital / lower case
313 // Range: U+0B80 to U+0BFF
314 // no capital / lower case
318 // Range: U+0C00 to U+0C7F
319 // no capital / lower case
323 // Range: U+0C80 to U+0CFF
324 // no capital / lower case
328 // Range: U+0D00 to U+0D7F
331 // Range: U+0E00 to U+0E7F
335 // Range: U+0E80 to U+0EFF
339 // Range: U+0F00 to U+0FBF
342 // Range: U+10A0 to U+10F0
345 // Range: U+1100 to U+11FF
348 // Range: U+1F00 to U+1FFF
352 // General Punctuation
353 // Range: U+2000 to U+206F
355 // Superscripts and Subscripts
356 // Range: U+2070 to U+209F
359 // Range: U+20A0 to U+20CF
362 // Combining Diacritical Marks for Symbols
363 // Range: U+20D0 to U+20FF
368 // Range: U+2150 to U+218F
373 // Range: U+2190 to U+21FF
375 // Mathematical Operators
376 // Range: U+2200 to U+22FF
378 // Miscellaneous Technical
379 // Range: U+2300 to U+23FF
382 // Range: U+2400 to U+243F
384 // Optical Character Recognition
385 // Range: U+2440 to U+245F
387 // Enclosed Alphanumerics
388 // Range: U+2460 to U+24FF
391 // Range: U+2500 to U+257F
394 // Range: U+2580 to U+259F
397 // Range: U+25A0 to U+25FF
399 // Miscellaneous Symbols
400 // Range: U+2600 to U+26FF
403 // Range: U+2700 to U+27BF
405 // CJK Symbols and Punctuation
406 // Range: U+3000 to U+303F
409 // Range: U+3040 to U+309F
412 // Range: U+30A0 to U+30FF
415 // Range: U+3100 to U+312F
417 // Hangul Compatibility Jamo
418 // Range: U+3130 to U+318F
421 // Range: U+3190 to U+319F
424 // Enclosed CJK Letters and Months
425 // Range: U+3200 to U+32FF
428 // Range: U+3300 to U+33FF
431 // Range: U+AC00 to U+D7A3
434 // Range: U+D800 to U+DB7F
436 // Private Use High Surrogates
437 // Range: U+DB80 to U+DBFF
440 // Range: U+DC00 to U+DFFF
443 // Range: U+E000 to U+F8FF
445 // CJK Compatibility Ideographs
446 // Range: U+F900 to U+FAFF
448 // Alphabetic Presentation Forms
449 // Range: U+FB00 to U+FB4F
451 // Arabic Presentation Forms-A
452 // Range: U+FB50 to U+FDFF
454 // Combining Half Marks
455 // Range: U+FE20 to U+FE2F
457 // CJK Compatibility Forms
458 // Range: U+FE30 to U+FE4F
460 // Small Form Variants
461 // Range: U+FE50 to U+FE6F
463 // Arabic Presentation Forms-B
464 // Range: U+FE70 to U+FEFF
466 // Halfwidth and Fullwidth Forms
467 // Range: U+FF00 to U+FFEF
469 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
475 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
482 // Range: U+FFF0 to U+FFFF
487 function DecimalToHexString( n
) {
491 for ( var i
= 3; i
>= 0; i
-- ) {
492 if ( n
>= Math
.pow(16, i
) ){
493 var t
= Math
.floor( n
/ Math
.pow(16, i
));
494 n
-= t
* Math
.pow(16, i
);