]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/String/15.5.4.12-2.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-2.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-2";
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 var EXPECT_STRING
= "";
62 for ( var i
= 0; i
< 0x007A; i
++ ) {
63 var u
= new Unicode(i
);
64 TEST_STRING
+= String
.fromCharCode(i
);
65 EXPECT_STRING
+= String
.fromCharCode( u
.upper
);
68 // don't print out the value of the strings since they contain control
69 // characters that break the driver
70 var isEqual
= EXPECT_STRING
== (new String( TEST_STRING
)).toUpperCase();
72 array
[item
++] = new TestCase( SECTION
,
79 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
80 testcases
[tc
].passed
= writeTestCaseResult(
83 testcases
[tc
].description
+" = "+
84 testcases
[tc
].actual
);
86 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
91 function MyObject( value
) {
93 this.substring
= String
.prototype.substring
;
94 this.toString
= new Function ( "return this.value+''" );
96 function Unicode( c
) {
97 u
= GetUnicodeValues( c
);
102 function GetUnicodeValues( c
) {
108 // upper case Basic Latin
110 if ( c
>= 0x0041 && c
<= 0x005A) {
116 // lower case Basic Latin
117 if ( c
>= 0x0061 && c
<= 0x007a ) {
123 // upper case Latin-1 Supplement
129 if ( (c
>= 0x00C0 && c
<= 0x00D6) || (c
>= 0x00D8 && c
<=0x00DE) ) {
135 // lower case Latin-1 Supplement
136 if ( (c
>= 0x00E0 && c
<= 0x00F6) || (c
>= 0x00F8 && c
<= 0x00FE) ) {
147 if ( (c
>= 0x0100 && c
< 0x0138) || (c
> 0x0149 && c
< 0x0178) ) {
148 // special case for capital I
161 // if it's even, it's a capital and the lower case is c +1
165 // if it's odd, it's a lower case and upper case is c-1
177 if ( (c
>= 0x0139 && c
< 0x0149) || (c
> 0x0178 && c
< 0x017F) ) {
179 // if it's odd, it's a capital and the lower case is c +1
183 // if it's even, it's a lower case and upper case is c-1
195 // need to improve this set
197 if ( c
>= 0x0200 && c
<= 0x0217 ) {
208 // Latin Extended Additional
209 // Range: U+1E00 to U+1EFF
210 // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
212 // Spacing Modifier Leters
213 // Range: U+02B0 to U+02FF
215 // Combining Diacritical Marks
216 // Range: U+0300 to U+036F
218 // skip Greek for now
220 // Range: U+0370 to U+03FF
223 // Range: U+0400 to U+04FF
225 if ( c
>= 0x0400 && c
<= 0x040F) {
232 if ( c
>= 0x0410 && c
<= 0x042F ) {
238 if ( c
>= 0x0430 && c
<= 0x044F ) {
244 if ( c
>= 0x0450 && c
<= 0x045F ) {
250 if ( c
>= 0x0460 && c
<= 0x047F ) {
262 // Range: U+0530 to U+058F
263 if ( c
>= 0x0531 && c
<= 0x0556 ) {
268 if ( c
>= 0x0561 && c
< 0x0587 ) {
275 // Range: U+0590 to U+05FF
279 // Range: U+0600 to U+06FF
282 // Range: U+0900 to U+097F
286 // Range: U+0980 to U+09FF
290 // Range: U+0A00 to U+0A7F
294 // Range: U+0A80 to U+0AFF
298 // Range: U+0B00 to U+0B7F
299 // no capital / lower case
303 // Range: U+0B80 to U+0BFF
304 // no capital / lower case
308 // Range: U+0C00 to U+0C7F
309 // no capital / lower case
313 // Range: U+0C80 to U+0CFF
314 // no capital / lower case
318 // Range: U+0D00 to U+0D7F
321 // Range: U+0E00 to U+0E7F
325 // Range: U+0E80 to U+0EFF
329 // Range: U+0F00 to U+0FBF
332 // Range: U+10A0 to U+10F0
335 // Range: U+1100 to U+11FF
338 // Range: U+1F00 to U+1FFF
342 // General Punctuation
343 // Range: U+2000 to U+206F
345 // Superscripts and Subscripts
346 // Range: U+2070 to U+209F
349 // Range: U+20A0 to U+20CF
352 // Combining Diacritical Marks for Symbols
353 // Range: U+20D0 to U+20FF
358 // Range: U+2150 to U+218F
363 // Range: U+2190 to U+21FF
365 // Mathematical Operators
366 // Range: U+2200 to U+22FF
368 // Miscellaneous Technical
369 // Range: U+2300 to U+23FF
372 // Range: U+2400 to U+243F
374 // Optical Character Recognition
375 // Range: U+2440 to U+245F
377 // Enclosed Alphanumerics
378 // Range: U+2460 to U+24FF
381 // Range: U+2500 to U+257F
384 // Range: U+2580 to U+259F
387 // Range: U+25A0 to U+25FF
389 // Miscellaneous Symbols
390 // Range: U+2600 to U+26FF
393 // Range: U+2700 to U+27BF
395 // CJK Symbols and Punctuation
396 // Range: U+3000 to U+303F
399 // Range: U+3040 to U+309F
402 // Range: U+30A0 to U+30FF
405 // Range: U+3100 to U+312F
407 // Hangul Compatibility Jamo
408 // Range: U+3130 to U+318F
411 // Range: U+3190 to U+319F
414 // Enclosed CJK Letters and Months
415 // Range: U+3200 to U+32FF
418 // Range: U+3300 to U+33FF
421 // Range: U+AC00 to U+D7A3
424 // Range: U+D800 to U+DB7F
426 // Private Use High Surrogates
427 // Range: U+DB80 to U+DBFF
430 // Range: U+DC00 to U+DFFF
433 // Range: U+E000 to U+F8FF
435 // CJK Compatibility Ideographs
436 // Range: U+F900 to U+FAFF
438 // Alphabetic Presentation Forms
439 // Range: U+FB00 to U+FB4F
441 // Arabic Presentation Forms-A
442 // Range: U+FB50 to U+FDFF
444 // Combining Half Marks
445 // Range: U+FE20 to U+FE2F
447 // CJK Compatibility Forms
448 // Range: U+FE30 to U+FE4F
450 // Small Form Variants
451 // Range: U+FE50 to U+FE6F
453 // Arabic Presentation Forms-B
454 // Range: U+FE70 to U+FEFF
456 // Halfwidth and Fullwidth Forms
457 // Range: U+FF00 to U+FFEF
459 if ( c
>= 0xFF21 && c
<= 0xFF3A ) {
465 if ( c
>= 0xFF41 && c
<= 0xFF5A ) {
472 // Range: U+FFF0 to U+FFFF
477 function DecimalToHexString( n
) {
481 for ( var i
= 3; i
>= 0; i
-- ) {
482 if ( n
>= Math
.pow(16, i
) ){
483 var t
= Math
.floor( n
/ Math
.pow(16, i
));
484 n
-= t
* Math
.pow(16, i
);