js/src/tests/ecma/String/15.5.4.12-5.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/tests/ecma/String/15.5.4.12-5.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,481 @@
     1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +
    1.10 +/**
    1.11 +   File Name:          15.5.4.12-1.js
    1.12 +   ECMA Section:       15.5.4.12 String.prototype.toUpperCase()
    1.13 +   Description:
    1.14 +
    1.15 +   Returns a string equal in length to the length of the result of converting
    1.16 +   this object to a string. The result is a string value, not a String object.
    1.17 +
    1.18 +   Every character of the result is equal to the corresponding character of the
    1.19 +   string, unless that character has a Unicode 2.0 uppercase equivalent, in which
    1.20 +   case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
    1.21 +   mapping shall be used, which does not depend on implementation or locale.)
    1.22 +
    1.23 +   Note that the toUpperCase function is intentionally generic; it does not require
    1.24 +   that its this value be a String object. Therefore it can be transferred to other
    1.25 +   kinds of objects for use as a method.
    1.26 +
    1.27 +   Author:             christine@netscape.com
    1.28 +   Date:               12 november 1997
    1.29 +*/
    1.30 +
    1.31 +var SECTION = "15.5.4.12-1";
    1.32 +var VERSION = "ECMA_1";
    1.33 +startTest();
    1.34 +var TITLE   = "String.prototype.toUpperCase()";
    1.35 +
    1.36 +writeHeaderToLog( SECTION + " "+ TITLE);
    1.37 +
    1.38 +// Armenian
    1.39 +// Range: U+0530 to U+058F
    1.40 +for ( var i = 0x0530; i <= 0x058F; i++ ) {
    1.41 +  var U = new Unicode( i );
    1.42 +/*
    1.43 +  new TestCase(   SECTION,
    1.44 +  "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
    1.45 +  String.fromCharCode(U.upper),
    1.46 +  eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
    1.47 +*/
    1.48 +  new TestCase(   SECTION,
    1.49 +		  "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)",
    1.50 +		  U.upper,
    1.51 +		  eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") );
    1.52 +
    1.53 +}
    1.54 +
    1.55 +test();
    1.56 +
    1.57 +function MyObject( value ) {
    1.58 +  this.value = value;
    1.59 +  this.substring = String.prototype.substring;
    1.60 +  this.toString = new Function ( "return this.value+''" );
    1.61 +}
    1.62 +function Unicode( c ) {
    1.63 +  u = GetUnicodeValues( c );
    1.64 +  this.upper = u[0];
    1.65 +  this.lower = u[1]
    1.66 +    return this;
    1.67 +}
    1.68 +function GetUnicodeValues( c ) {
    1.69 +  u = new Array();
    1.70 +
    1.71 +  u[0] = c;
    1.72 +  u[1] = c;
    1.73 +
    1.74 +  // upper case Basic Latin
    1.75 +
    1.76 +  if ( c >= 0x0041 && c <= 0x005A) {
    1.77 +    u[0] = c;
    1.78 +    u[1] = c + 32;
    1.79 +    return u;
    1.80 +  }
    1.81 +
    1.82 +  // lower case Basic Latin
    1.83 +  if ( c >= 0x0061 && c <= 0x007a ) {
    1.84 +    u[0] = c - 32;
    1.85 +    u[1] = c;
    1.86 +    return u;
    1.87 +  }
    1.88 +
    1.89 +  // upper case Latin-1 Supplement
    1.90 +  if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
    1.91 +    u[0] = c;
    1.92 +    u[1] = c + 32;
    1.93 +    return u;
    1.94 +  }
    1.95 +
    1.96 +  // lower case Latin-1 Supplement
    1.97 +  if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
    1.98 +    u[0] = c - 32;
    1.99 +    u[1] = c;
   1.100 +    return u;
   1.101 +  }
   1.102 +  if ( c == 0x00FF ) {
   1.103 +    u[0] = 0x0178;
   1.104 +    u[1] = c;
   1.105 +    return u;
   1.106 +  }
   1.107 +  // Latin Extended A
   1.108 +  if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
   1.109 +    // special case for capital I
   1.110 +    if ( c == 0x0130 ) {
   1.111 +      u[0] = c;
   1.112 +      u[1] = 0x0069;
   1.113 +      return u;
   1.114 +    }
   1.115 +    if ( c == 0x0131 ) {
   1.116 +      u[0] = 0x0049;
   1.117 +      u[1] = c;
   1.118 +      return u;
   1.119 +    }
   1.120 +
   1.121 +    if ( c % 2 == 0 ) {
   1.122 +      // if it's even, it's a capital and the lower case is c +1
   1.123 +      u[0] = c;
   1.124 +      u[1] = c+1;
   1.125 +    } else {
   1.126 +      // if it's odd, it's a lower case and upper case is c-1
   1.127 +      u[0] = c-1;
   1.128 +      u[1] = c;
   1.129 +    }
   1.130 +    return u;
   1.131 +  }
   1.132 +  if ( c == 0x0178 ) {
   1.133 +    u[0] = c;
   1.134 +    u[1] = 0x00FF;
   1.135 +    return u;
   1.136 +  }
   1.137 +
   1.138 +  if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
   1.139 +    if ( c % 2 == 1 ) {
   1.140 +      // if it's odd, it's a capital and the lower case is c +1
   1.141 +      u[0] = c;
   1.142 +      u[1] = c+1;
   1.143 +    } else {
   1.144 +      // if it's even, it's a lower case and upper case is c-1
   1.145 +      u[0] = c-1;
   1.146 +      u[1] = c;
   1.147 +    }
   1.148 +    return u;
   1.149 +  }
   1.150 +  if ( c == 0x017F ) {
   1.151 +    u[0] = 0x0053;
   1.152 +    u[1] = c;
   1.153 +  }
   1.154 +
   1.155 +  // Latin Extended B
   1.156 +  // need to improve this set
   1.157 +
   1.158 +  if ( c >= 0x0200 && c <= 0x0217 ) {
   1.159 +    if ( c % 2 == 0 ) {
   1.160 +      u[0] = c;
   1.161 +      u[1] = c+1;
   1.162 +    } else {
   1.163 +      u[0] = c-1;
   1.164 +      u[1] = c;
   1.165 +    }
   1.166 +    return u;
   1.167 +  }
   1.168 +
   1.169 +  // Latin Extended Additional
   1.170 +  // Range: U+1E00 to U+1EFF
   1.171 +  // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
   1.172 +
   1.173 +  // Spacing Modifier Leters
   1.174 +  // Range: U+02B0 to U+02FF
   1.175 +
   1.176 +  // Combining Diacritical Marks
   1.177 +  // Range: U+0300 to U+036F
   1.178 +
   1.179 +  // skip Greek for now
   1.180 +  // Greek
   1.181 +  // Range: U+0370 to U+03FF
   1.182 +
   1.183 +  // Cyrillic
   1.184 +  // Range: U+0400 to U+04FF
   1.185 +
   1.186 +  if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
   1.187 +    u[0] = c;
   1.188 +    u[1] = c + 80;
   1.189 +    return u;
   1.190 +  }
   1.191 +
   1.192 +
   1.193 +  if ( c >= 0x0410  && c <= 0x042F ) {
   1.194 +    u[0] = c;
   1.195 +    u[1] = c + 32;
   1.196 +    return u;
   1.197 +  }
   1.198 +
   1.199 +  if ( c >= 0x0430 && c<= 0x044F ) {
   1.200 +    u[0] = c - 32;
   1.201 +    u[1] = c;
   1.202 +    return u;
   1.203 +
   1.204 +  }
   1.205 +  if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
   1.206 +    u[0] = c -80;
   1.207 +    u[1] = c;
   1.208 +    return u;
   1.209 +  }
   1.210 +
   1.211 +  if ( c >= 0x0460 && c <= 0x047F ) {
   1.212 +    if ( c % 2 == 0 ) {
   1.213 +      u[0] = c;
   1.214 +      u[1] = c +1;
   1.215 +    } else {
   1.216 +      u[0] = c - 1;
   1.217 +      u[1] = c;
   1.218 +    }
   1.219 +    return u;
   1.220 +  }
   1.221 +
   1.222 +  // Armenian
   1.223 +  // Range: U+0530 to U+058F
   1.224 +  if ( c >= 0x0531 && c <= 0x0556 ) {
   1.225 +    u[0] = c;
   1.226 +    u[1] = c + 48;
   1.227 +    return u;
   1.228 +  }
   1.229 +  if ( c >= 0x0561 && c < 0x0587 ) {
   1.230 +    u[0] = c - 48;
   1.231 +    u[1] = c;
   1.232 +    return u;
   1.233 +  }
   1.234 +
   1.235 +  // Hebrew
   1.236 +  // Range: U+0590 to U+05FF
   1.237 +
   1.238 +
   1.239 +  // Arabic
   1.240 +  // Range: U+0600 to U+06FF
   1.241 +
   1.242 +  // Devanagari
   1.243 +  // Range: U+0900 to U+097F
   1.244 +
   1.245 +
   1.246 +  // Bengali
   1.247 +  // Range: U+0980 to U+09FF
   1.248 +
   1.249 +
   1.250 +  // Gurmukhi
   1.251 +  // Range: U+0A00 to U+0A7F
   1.252 +
   1.253 +
   1.254 +  // Gujarati
   1.255 +  // Range: U+0A80 to U+0AFF
   1.256 +
   1.257 +
   1.258 +  // Oriya
   1.259 +  // Range: U+0B00 to U+0B7F
   1.260 +  // no capital / lower case
   1.261 +
   1.262 +
   1.263 +  // Tamil
   1.264 +  // Range: U+0B80 to U+0BFF
   1.265 +  // no capital / lower case
   1.266 +
   1.267 +
   1.268 +  // Telugu
   1.269 +  // Range: U+0C00 to U+0C7F
   1.270 +  // no capital / lower case
   1.271 +
   1.272 +
   1.273 +  // Kannada
   1.274 +  // Range: U+0C80 to U+0CFF
   1.275 +  // no capital / lower case
   1.276 +
   1.277 +
   1.278 +  // Malayalam
   1.279 +  // Range: U+0D00 to U+0D7F
   1.280 +
   1.281 +  // Thai
   1.282 +  // Range: U+0E00 to U+0E7F
   1.283 +
   1.284 +
   1.285 +  // Lao
   1.286 +  // Range: U+0E80 to U+0EFF
   1.287 +
   1.288 +
   1.289 +  // Tibetan
   1.290 +  // Range: U+0F00 to U+0FBF
   1.291 +
   1.292 +  // Georgian
   1.293 +  // Range: U+10A0 to U+10F0
   1.294 +  if ( c >= 0x10A0 && c <= 0x10C5 ) {
   1.295 +    u[0] = c;
   1.296 +    u[1] = c + 48;
   1.297 +    return u;
   1.298 +  }
   1.299 +  if ( c >= 0x10D0 && c <= 0x10F5 ) {
   1.300 +    u[0] = c;
   1.301 +    u[1] = c;
   1.302 +    return u;
   1.303 +  }
   1.304 +
   1.305 +  // Hangul Jamo
   1.306 +  // Range: U+1100 to U+11FF
   1.307 +
   1.308 +  // Greek Extended
   1.309 +  // Range: U+1F00 to U+1FFF
   1.310 +  // skip for now
   1.311 +
   1.312 +
   1.313 +  // General Punctuation
   1.314 +  // Range: U+2000 to U+206F
   1.315 +
   1.316 +  // Superscripts and Subscripts
   1.317 +  // Range: U+2070 to U+209F
   1.318 +
   1.319 +  // Currency Symbols
   1.320 +  // Range: U+20A0 to U+20CF
   1.321 +
   1.322 +
   1.323 +  // Combining Diacritical Marks for Symbols
   1.324 +  // Range: U+20D0 to U+20FF
   1.325 +  // skip for now
   1.326 +
   1.327 +
   1.328 +  // Number Forms
   1.329 +  // Range: U+2150 to U+218F
   1.330 +  // skip for now
   1.331 +
   1.332 +
   1.333 +  // Arrows
   1.334 +  // Range: U+2190 to U+21FF
   1.335 +
   1.336 +  // Mathematical Operators
   1.337 +  // Range: U+2200 to U+22FF
   1.338 +
   1.339 +  // Miscellaneous Technical
   1.340 +  // Range: U+2300 to U+23FF
   1.341 +
   1.342 +  // Control Pictures
   1.343 +  // Range: U+2400 to U+243F
   1.344 +
   1.345 +  // Optical Character Recognition
   1.346 +  // Range: U+2440 to U+245F
   1.347 +
   1.348 +  // Enclosed Alphanumerics
   1.349 +  // Range: U+2460 to U+24FF
   1.350 +
   1.351 +  // Box Drawing
   1.352 +  // Range: U+2500 to U+257F
   1.353 +
   1.354 +  // Block Elements
   1.355 +  // Range: U+2580 to U+259F
   1.356 +
   1.357 +  // Geometric Shapes
   1.358 +  // Range: U+25A0 to U+25FF
   1.359 +
   1.360 +  // Miscellaneous Symbols
   1.361 +  // Range: U+2600 to U+26FF
   1.362 +
   1.363 +  // Dingbats
   1.364 +  // Range: U+2700 to U+27BF
   1.365 +
   1.366 +  // CJK Symbols and Punctuation
   1.367 +  // Range: U+3000 to U+303F
   1.368 +
   1.369 +  // Hiragana
   1.370 +  // Range: U+3040 to U+309F
   1.371 +
   1.372 +  // Katakana
   1.373 +  // Range: U+30A0 to U+30FF
   1.374 +
   1.375 +  // Bopomofo
   1.376 +  // Range: U+3100 to U+312F
   1.377 +
   1.378 +  // Hangul Compatibility Jamo
   1.379 +  // Range: U+3130 to U+318F
   1.380 +
   1.381 +  // Kanbun
   1.382 +  // Range: U+3190 to U+319F
   1.383 +
   1.384 +
   1.385 +  // Enclosed CJK Letters and Months
   1.386 +  // Range: U+3200 to U+32FF
   1.387 +
   1.388 +  // CJK Compatibility
   1.389 +  // Range: U+3300 to U+33FF
   1.390 +
   1.391 +  // Hangul Syllables
   1.392 +  // Range: U+AC00 to U+D7A3
   1.393 +
   1.394 +  // High Surrogates
   1.395 +  // Range: U+D800 to U+DB7F
   1.396 +
   1.397 +  // Private Use High Surrogates
   1.398 +  // Range: U+DB80 to U+DBFF
   1.399 +
   1.400 +  // Low Surrogates
   1.401 +  // Range: U+DC00 to U+DFFF
   1.402 +
   1.403 +  // Private Use Area
   1.404 +  // Range: U+E000 to U+F8FF
   1.405 +
   1.406 +  // CJK Compatibility Ideographs
   1.407 +  // Range: U+F900 to U+FAFF
   1.408 +
   1.409 +  // Alphabetic Presentation Forms
   1.410 +  // Range: U+FB00 to U+FB4F
   1.411 +
   1.412 +  // Arabic Presentation Forms-A
   1.413 +  // Range: U+FB50 to U+FDFF
   1.414 +
   1.415 +  // Combining Half Marks
   1.416 +  // Range: U+FE20 to U+FE2F
   1.417 +
   1.418 +  // CJK Compatibility Forms
   1.419 +  // Range: U+FE30 to U+FE4F
   1.420 +
   1.421 +  // Small Form Variants
   1.422 +  // Range: U+FE50 to U+FE6F
   1.423 +
   1.424 +  // Arabic Presentation Forms-B
   1.425 +  // Range: U+FE70 to U+FEFF
   1.426 +
   1.427 +  // Halfwidth and Fullwidth Forms
   1.428 +  // Range: U+FF00 to U+FFEF
   1.429 +
   1.430 +  if ( c >= 0xFF21 && c <= 0xFF3A ) {
   1.431 +    u[0] = c;
   1.432 +    u[1] = c + 32;
   1.433 +    return u;
   1.434 +  }
   1.435 +
   1.436 +  if ( c >= 0xFF41 && c <= 0xFF5A ) {
   1.437 +    u[0] = c - 32;
   1.438 +    u[1] = c;
   1.439 +    return u;
   1.440 +  }
   1.441 +
   1.442 +  // Specials
   1.443 +  // Range: U+FFF0 to U+FFFF
   1.444 +
   1.445 +  return u;
   1.446 +}
   1.447 +
   1.448 +function DecimalToHexString( n ) {
   1.449 +  n = Number( n );
   1.450 +  var h = "0x";
   1.451 +
   1.452 +  for ( var i = 3; i >= 0; i-- ) {
   1.453 +    if ( n >= Math.pow(16, i) ){
   1.454 +      var t = Math.floor( n  / Math.pow(16, i));
   1.455 +      n -= t * Math.pow(16, i);
   1.456 +      if ( t >= 10 ) {
   1.457 +	if ( t == 10 ) {
   1.458 +	  h += "A";
   1.459 +	}
   1.460 +	if ( t == 11 ) {
   1.461 +	  h += "B";
   1.462 +	}
   1.463 +	if ( t == 12 ) {
   1.464 +	  h += "C";
   1.465 +	}
   1.466 +	if ( t == 13 ) {
   1.467 +	  h += "D";
   1.468 +	}
   1.469 +	if ( t == 14 ) {
   1.470 +	  h += "E";
   1.471 +	}
   1.472 +	if ( t == 15 ) {
   1.473 +	  h += "F";
   1.474 +	}
   1.475 +      } else {
   1.476 +	h += String( t );
   1.477 +      }
   1.478 +    } else {
   1.479 +      h += "0";
   1.480 +    }
   1.481 +  }
   1.482 +
   1.483 +  return h;
   1.484 +}

mercurial