1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* ***** BEGIN LICENSE BLOCK *****
3
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
* The contents of this file are subject to the Mozilla Public License Version
6
* 1.1 (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
8
* http://www.mozilla.org/MPL/
10
* Software distributed under the License is distributed on an "AS IS" basis,
11
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
* for the specific language governing rights and limitations under the
15
* The Original Code is Mozilla Communicator client code, released
18
* The Initial Developer of the Original Code is
19
* Netscape Communications Corporation.
20
* Portions created by the Initial Developer are Copyright (C) 1998
21
* the Initial Developer. All Rights Reserved.
25
* Alternatively, the contents of this file may be used under the terms of
26
* either the GNU General Public License Version 2 or later (the "GPL"), or
27
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
* in which case the provisions of the GPL or the LGPL are applicable instead
29
* of those above. If you wish to allow use of your version of this file only
30
* under the terms of either the GPL or the LGPL, and not to allow others to
31
* use your version of this file under the terms of the MPL, indicate your
32
* decision by deleting the provisions above and replace them with the notice
33
* and other provisions required by the GPL or the LGPL. If you do not delete
34
* the provisions above, a recipient may use your version of this file under
35
* the terms of any one of the MPL, the GPL or the LGPL.
37
* ***** END LICENSE BLOCK ***** */
39
gTestfile = '15.5.4.11-5.js';
42
File Name: 15.5.4.11-5.js
43
ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
46
Returns a string equal in length to the length of the result of converting
47
this object to a string. The result is a string value, not a String object.
49
Every character of the result is equal to the corresponding character of the
50
string, unless that character has a Unicode 2.0 uppercase equivalent, in which
51
case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
52
mapping shall be used, which does not depend on implementation or locale.)
54
Note that the toLowerCase function is intentionally generic; it does not require
55
that its this value be a String object. Therefore it can be transferred to other
56
kinds of objects for use as a method.
58
Author: christine@netscape.com
59
Date: 12 november 1997
62
var SECTION = "15.5.4.11-5";
63
var VERSION = "ECMA_1";
65
var TITLE = "String.prototype.toLowerCase()";
67
writeHeaderToLog( SECTION + " "+ TITLE);
69
new TestCase( SECTION, "String.prototype.toLowerCase.length", 0, String.prototype.toLowerCase.length );
71
new TestCase( SECTION, "delete String.prototype.toLowerCase.length", false, delete String.prototype.toLowerCase.length );
73
new TestCase( SECTION, "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0, eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") );
76
// Range: U+0400 to U+04FF
77
for ( var i = 0x0400; i <= 0x047F; i++ ) {
78
var U = new Unicode( i );
80
new TestCase( SECTION,
81
"var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
82
String.fromCharCode(U.lower),
83
eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
85
new TestCase( SECTION,
86
"var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)",
88
eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
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
126
if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
132
// lower case Latin-1 Supplement
133
if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
144
if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
145
// special case for capital I
158
// if it's even, it's a capital and the lower case is c +1
162
// if it's odd, it's a lower case and upper case is c-1
174
if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
176
// if it's odd, it's a capital and the lower case is c +1
180
// if it's even, it's a lower case and upper case is c-1
192
// need to improve this set
194
if ( c >= 0x0200 && c <= 0x0217 ) {
205
// Latin Extended Additional
206
// Range: U+1E00 to U+1EFF
207
// http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
209
// Spacing Modifier Leters
210
// Range: U+02B0 to U+02FF
212
// Combining Diacritical Marks
213
// Range: U+0300 to U+036F
215
// skip Greek for now
217
// Range: U+0370 to U+03FF
220
// Range: U+0400 to U+04FF
222
if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
229
if ( c >= 0x0410 && c <= 0x042F ) {
235
if ( c >= 0x0430 && c<= 0x044F ) {
241
if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
247
if ( c >= 0x0460 && c <= 0x047F ) {
259
// Range: U+0530 to U+058F
260
if ( c >= 0x0531 && c <= 0x0556 ) {
265
if ( c >= 0x0561 && c < 0x0587 ) {
272
// Range: U+0590 to U+05FF
276
// Range: U+0600 to U+06FF
279
// Range: U+0900 to U+097F
283
// Range: U+0980 to U+09FF
287
// Range: U+0A00 to U+0A7F
291
// Range: U+0A80 to U+0AFF
295
// Range: U+0B00 to U+0B7F
296
// no capital / lower case
300
// Range: U+0B80 to U+0BFF
301
// no capital / lower case
305
// Range: U+0C00 to U+0C7F
306
// no capital / lower case
310
// Range: U+0C80 to U+0CFF
311
// no capital / lower case
315
// Range: U+0D00 to U+0D7F
318
// Range: U+0E00 to U+0E7F
322
// Range: U+0E80 to U+0EFF
326
// Range: U+0F00 to U+0FBF
329
// Range: U+10A0 to U+10F0
330
if ( c >= 0x10A0 && c <= 0x10C5 ) {
335
if ( c >= 0x10D0 && c <= 0x10F5 ) {
342
// Range: U+1100 to U+11FF
345
// Range: U+1F00 to U+1FFF
349
// General Punctuation
350
// Range: U+2000 to U+206F
352
// Superscripts and Subscripts
353
// Range: U+2070 to U+209F
356
// Range: U+20A0 to U+20CF
359
// Combining Diacritical Marks for Symbols
360
// Range: U+20D0 to U+20FF
365
// Range: U+2150 to U+218F
370
// Range: U+2190 to U+21FF
372
// Mathematical Operators
373
// Range: U+2200 to U+22FF
375
// Miscellaneous Technical
376
// Range: U+2300 to U+23FF
379
// Range: U+2400 to U+243F
381
// Optical Character Recognition
382
// Range: U+2440 to U+245F
384
// Enclosed Alphanumerics
385
// Range: U+2460 to U+24FF
388
// Range: U+2500 to U+257F
391
// Range: U+2580 to U+259F
394
// Range: U+25A0 to U+25FF
396
// Miscellaneous Symbols
397
// Range: U+2600 to U+26FF
400
// Range: U+2700 to U+27BF
402
// CJK Symbols and Punctuation
403
// Range: U+3000 to U+303F
406
// Range: U+3040 to U+309F
409
// Range: U+30A0 to U+30FF
412
// Range: U+3100 to U+312F
414
// Hangul Compatibility Jamo
415
// Range: U+3130 to U+318F
418
// Range: U+3190 to U+319F
421
// Enclosed CJK Letters and Months
422
// Range: U+3200 to U+32FF
425
// Range: U+3300 to U+33FF
428
// Range: U+AC00 to U+D7A3
431
// Range: U+D800 to U+DB7F
433
// Private Use High Surrogates
434
// Range: U+DB80 to U+DBFF
437
// Range: U+DC00 to U+DFFF
440
// Range: U+E000 to U+F8FF
442
// CJK Compatibility Ideographs
443
// Range: U+F900 to U+FAFF
445
// Alphabetic Presentation Forms
446
// Range: U+FB00 to U+FB4F
448
// Arabic Presentation Forms-A
449
// Range: U+FB50 to U+FDFF
451
// Combining Half Marks
452
// Range: U+FE20 to U+FE2F
454
// CJK Compatibility Forms
455
// Range: U+FE30 to U+FE4F
457
// Small Form Variants
458
// Range: U+FE50 to U+FE6F
460
// Arabic Presentation Forms-B
461
// Range: U+FE70 to U+FEFF
463
// Halfwidth and Fullwidth Forms
464
// Range: U+FF00 to U+FFEF
466
if ( c >= 0xFF21 && c <= 0xFF3A ) {
472
if ( c >= 0xFF41 && c <= 0xFF5A ) {
479
// Range: U+FFF0 to U+FFFF
484
function DecimalToHexString( n ) {
488
for ( var i = 3; i >= 0; i-- ) {
489
if ( n >= Math.pow(16, i) ){
490
var t = Math.floor( n / Math.pow(16, i));
491
n -= t * Math.pow(16, i);