js/src/tests/ecma/String/15.5.4.10-1.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 /**
     8    File Name:          15.5.4.10-1.js
     9    ECMA Section:       15.5.4.10 String.prototype.substring( start, end )
    10    Description:
    12    15.5.4.10 String.prototype.substring(start, end)
    14    Returns a substring of the result of converting this object to a string,
    15    starting from character position start and running to character position
    16    end of the string. The result is a string value, not a String object.
    18    If either argument is NaN or negative, it is replaced with zero; if either
    19    argument is larger than the length of the string, it is replaced with the
    20    length of the string.
    22    If start is larger than end, they are swapped.
    24    When the substring method is called with two arguments start and end, the
    25    following steps are taken:
    27    1.  Call ToString, giving it the this value as its argument.
    28    2.  Call ToInteger(start).
    29    3.  Call ToInteger (end).
    30    4.  Compute the number of characters in Result(1).
    31    5.  Compute min(max(Result(2), 0), Result(4)).
    32    6.  Compute min(max(Result(3), 0), Result(4)).
    33    7.  Compute min(Result(5), Result(6)).
    34    8.  Compute max(Result(5), Result(6)).
    35    9.  Return a string whose length is the difference between Result(8) and
    36    Result(7), containing characters from Result(1), namely the characters
    37    with indices Result(7) through Result(8)1, in ascending order.
    39    Note that the substring function is intentionally generic; it does not require
    40    that its this value be a String object. Therefore it can be transferred to other
    41    kinds of objects for use as a method.
    43    Author:             christine@netscape.com
    44    Date:               12 november 1997
    45 */
    47 var SECTION = "15.5.4.10-1";
    48 var VERSION = "ECMA_1";
    49 startTest();
    50 var TITLE   = "String.prototype.substring( start, end )";
    52 writeHeaderToLog( SECTION + " "+ TITLE);
    54 new TestCase( SECTION,  "String.prototype.substring.length",        2,          String.prototype.substring.length );
    55 new TestCase( SECTION,  "delete String.prototype.substring.length", false,      delete String.prototype.substring.length );
    56 new TestCase( SECTION,  "delete String.prototype.substring.length; String.prototype.substring.length", 2,      eval("delete String.prototype.substring.length; String.prototype.substring.length") );
    58 // test cases for when substring is called with no arguments.
    60 // this is a string object
    62 new TestCase(   SECTION,
    63 		"var s = new String('this is a string object'); typeof s.substring()",
    64 		"string",
    65 		eval("var s = new String('this is a string object'); typeof s.substring()") );
    67 new TestCase(   SECTION,
    68 		"var s = new String(''); s.substring(1,0)",
    69 		"",
    70 		eval("var s = new String(''); s.substring(1,0)") );
    72 new TestCase(   SECTION,
    73 		"var s = new String('this is a string object'); s.substring(true, false)",
    74 		"t",
    75 		eval("var s = new String('this is a string object'); s.substring(false, true)") );
    77 new TestCase(   SECTION,
    78 		"var s = new String('this is a string object'); s.substring(NaN, Infinity)",
    79 		"this is a string object",
    80 		eval("var s = new String('this is a string object'); s.substring(NaN, Infinity)") );
    83 new TestCase(   SECTION,
    84 		"var s = new String('this is a string object'); s.substring(Infinity, NaN)",
    85 		"this is a string object",
    86 		eval("var s = new String('this is a string object'); s.substring(Infinity, NaN)") );
    89 new TestCase(   SECTION,
    90 		"var s = new String('this is a string object'); s.substring(Infinity, Infinity)",
    91 		"",
    92 		eval("var s = new String('this is a string object'); s.substring(Infinity, Infinity)") );
    94 new TestCase(   SECTION,
    95 		"var s = new String('this is a string object'); s.substring(-0.01, 0)",
    96 		"",
    97 		eval("var s = new String('this is a string object'); s.substring(-0.01,0)") );
   100 new TestCase(   SECTION,
   101 		"var s = new String('this is a string object'); s.substring(s.length, s.length)",
   102 		"",
   103 		eval("var s = new String('this is a string object'); s.substring(s.length, s.length)") );
   105 new TestCase(   SECTION,
   106 		"var s = new String('this is a string object'); s.substring(s.length+1, 0)",
   107 		"this is a string object",
   108 		eval("var s = new String('this is a string object'); s.substring(s.length+1, 0)") );
   111 new TestCase(   SECTION,
   112 		"var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)",
   113 		"",
   114 		eval("var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)") );
   116 // this is not a String object, start is not an integer
   119 new TestCase(   SECTION,
   120 		"var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)",
   121 		"1,2,3,4,5",
   122 		eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)") );
   124 new TestCase(   SECTION,
   125 		"var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)",
   126 		"1",
   127 		eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)") );
   129 new TestCase(   SECTION,
   130 		"var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')",
   131 		"3",
   132 		eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')") );
   135 // this is an object object
   136 new TestCase(   SECTION,
   137 		"var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)",
   138 		"[object ",
   139 		eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)") );
   141 new TestCase(   SECTION,
   142 		"var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,obj.toString().length)",
   143 		"Object]",
   144 		eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8, obj.toString().length)") );
   146 // this is a function object
   147 new TestCase(   SECTION,
   148 		"var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8, Infinity)",
   149 		"Function]",
   150 		eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8,Infinity)") );
   151 // this is a number object
   152 new TestCase(   SECTION,
   153 		"var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)",
   154 		"NaN",
   155 		eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)") );
   157 // this is the Math object
   158 new TestCase(   SECTION,
   159 		"var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)",
   160 		"[ob",
   161 		eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)") );
   163 // this is a Boolean object
   165 new TestCase(   SECTION,
   166 		"var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))",
   167 		"f",
   168 		eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))") );
   170 // this is a user defined object
   172 new TestCase( SECTION,
   173 	      "var obj = new MyObject( void 0 ); obj.substring(0, 100)",
   174 	      "undefined",
   175 	      eval( "var obj = new MyObject( void 0 ); obj.substring(0,100)") );
   177 test();
   179 function MyObject( value ) {
   180   this.value = value;
   181   this.substring = String.prototype.substring;
   182   this.toString = new Function ( "return this.value+''" );
   183 }

mercurial