]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.12-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.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();
57 array
[item
++] = new TestCase( SECTION
, "String.prototype.toUpperCase.length", 0, String
.prototype.toUpperCase
.length
);
58 array
[item
++] = new TestCase( SECTION
, "delete String.prototype.toUpperCase.length", false, delete String
.prototype.toUpperCase
.length
);
59 array
[item
++] = new TestCase( SECTION
, "delete String.prototype.toupperCase.length; String.prototype.toupperCase.length", 0, eval("delete String.prototype.toUpperCase.length; String.prototype.toUpperCase.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 // XXX DF fails in java
72 array
[item
++] = new TestCase( SECTION
,
73 "var s = new String( String.fromCharCode("+i
+") ); s.toUpperCase().charCodeAt(0)",
75 eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") );
81 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
82 testcases
[tc
].passed
= writeTestCaseResult(
85 testcases
[tc
].description
+" = "+
86 testcases
[tc
].actual
);
88 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
93 function MyObject( value
) {
95 this.substring
= String
.prototype.substring
;
96 this.toString
= new Function ( "return this.value+''" );
98 function Unicode( c
) {
99 u
= GetUnicodeValues( c
);
104 function GetUnicodeValues( c
) {
110 // upper case Basic Latin
112 if ( c
>= 0x0041 && c
<= 0x005A) {
118 // lower case Basic Latin
119 if ( c
>= 0x0061 && c
<= 0x007a ) {
125 // upper case Latin-1 Supplement
131 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
137 // lower case Latin-1 Supplement
138 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
149 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
150 // special case for capital I
163 // if it's even, it's a capital and the lower case is c +1
167 // if it's odd, it's a lower case and upper case is c-1
179 // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE, uppercase takes two code points
186 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
188 // if it's odd, it's a capital and the lower case is c +1
192 // if it's even, it's a lower case and upper case is c-1
204 // need to improve this set
206 if ( c
>= 0x0200 && c
<= 0x0217 ) {
217 // Latin Extended Additional
218 // Range: U+1E00 to U+1EFF
219 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
221 // Spacing Modifier Leters
222 // Range: U+02B0 to U+02FF
224 // Combining Diacritical Marks
225 // Range: U+0300 to U+036F
227 // skip Greek for now
229 // Range: U+0370 to U+03FF
232 // Range: U+0400 to U+04FF
234 if ( c
>= 0x0400 && c
<= 0x040F) {
241 if ( c
>= 0x0410 && c
<= 0x042F ) {
247 if ( c
>= 0x0430 && c
<= 0x044F ) {
253 if ( c
>= 0x0450 && c
<= 0x045F ) {
259 if ( c
>= 0x0460 && c
<= 0x047F ) {
271 // Range: U+0530 to U+058F
272 if ( c
>= 0x0531 && c
<= 0x0556 ) {
277 if ( c
>= 0x0561 && c
< 0x0587 ) {
289 // Range: U+0590 to U+05FF
293 // Range: U+0600 to U+06FF
296 // Range: U+0900 to U+097F
300 // Range: U+0980 to U+09FF
304 // Range: U+0A00 to U+0A7F
308 // Range: U+0A80 to U+0AFF
312 // Range: U+0B00 to U+0B7F
313 // no capital / lower case
317 // Range: U+0B80 to U+0BFF
318 // no capital / lower case
322 // Range: U+0C00 to U+0C7F
323 // no capital / lower case
327 // Range: U+0C80 to U+0CFF
328 // no capital / lower case
332 // Range: U+0D00 to U+0D7F
335 // Range: U+0E00 to U+0E7F
339 // Range: U+0E80 to U+0EFF
343 // Range: U+0F00 to U+0FBF
346 // Range: U+10A0 to U+10F0
349 // Range: U+1100 to U+11FF
352 // Range: U+1F00 to U+1FFF
356 // General Punctuation
357 // Range: U+2000 to U+206F
359 // Superscripts and Subscripts
360 // Range: U+2070 to U+209F
363 // Range: U+20A0 to U+20CF
366 // Combining Diacritical Marks for Symbols
367 // Range: U+20D0 to U+20FF
372 // Range: U+2150 to U+218F
377 // Range: U+2190 to U+21FF
379 // Mathematical Operators
380 // Range: U+2200 to U+22FF
382 // Miscellaneous Technical
383 // Range: U+2300 to U+23FF
386 // Range: U+2400 to U+243F
388 // Optical Character Recognition
389 // Range: U+2440 to U+245F
391 // Enclosed Alphanumerics
392 // Range: U+2460 to U+24FF
395 // Range: U+2500 to U+257F
398 // Range: U+2580 to U+259F
401 // Range: U+25A0 to U+25FF
403 // Miscellaneous Symbols
404 // Range: U+2600 to U+26FF
407 // Range: U+2700 to U+27BF
409 // CJK Symbols and Punctuation
410 // Range: U+3000 to U+303F
413 // Range: U+3040 to U+309F
416 // Range: U+30A0 to U+30FF
419 // Range: U+3100 to U+312F
421 // Hangul Compatibility Jamo
422 // Range: U+3130 to U+318F
425 // Range: U+3190 to U+319F
428 // Enclosed CJK Letters and Months
429 // Range: U+3200 to U+32FF
432 // Range: U+3300 to U+33FF
435 // Range: U+AC00 to U+D7A3
438 // Range: U+D800 to U+DB7F
440 // Private Use High Surrogates
441 // Range: U+DB80 to U+DBFF
444 // Range: U+DC00 to U+DFFF
447 // Range: U+E000 to U+F8FF
449 // CJK Compatibility Ideographs
450 // Range: U+F900 to U+FAFF
452 // Alphabetic Presentation Forms
453 // Range: U+FB00 to U+FB4F
455 // Arabic Presentation Forms-A
456 // Range: U+FB50 to U+FDFF
458 // Combining Half Marks
459 // Range: U+FE20 to U+FE2F
461 // CJK Compatibility Forms
462 // Range: U+FE30 to U+FE4F
464 // Small Form Variants
465 // Range: U+FE50 to U+FE6F
467 // Arabic Presentation Forms-B
468 // Range: U+FE70 to U+FEFF
470 // Halfwidth and Fullwidth Forms
471 // Range: U+FF00 to U+FFEF
473 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
479 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
486 // Range: U+FFF0 to U+FFFF
491 function DecimalToHexString( n
) {
495 for ( var i
= 3; i
>= 0; i
-- ) {
496 if ( n
>= Math
.pow(16, i
) ){
497 var t
= Math
.floor( n
/ Math
.pow(16, i
));
498 n
-= t
* Math
.pow(16, i
);