1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Tests taken from: 6// http://mathias.html5.org/tests/javascript/string/ 7 8assertEquals('_'.anchor('b'), '<a name="b">_</a>'); 9assertEquals('<'.anchor('<'), '<a name="<"><</a>'); 10assertEquals('_'.anchor(0x2A), '<a name="42">_</a>'); 11assertEquals('_'.anchor('\x22'), '<a name=""">_</a>'); 12assertEquals(String.prototype.anchor.call(0x2A, 0x2A), '<a name="42">42</a>'); 13assertThrows(function() { 14 String.prototype.anchor.call(undefined); 15}, TypeError); 16assertThrows(function() { 17 String.prototype.anchor.call(null); 18}, TypeError); 19assertEquals(String.prototype.anchor.length, 1); 20 21assertEquals('_'.big(), '<big>_</big>'); 22assertEquals('<'.big(), '<big><</big>'); 23assertEquals(String.prototype.big.call(0x2A), '<big>42</big>'); 24assertThrows(function() { 25 String.prototype.big.call(undefined); 26}, TypeError); 27assertThrows(function() { 28 String.prototype.big.call(null); 29}, TypeError); 30assertEquals(String.prototype.big.length, 0); 31 32assertEquals('_'.blink(), '<blink>_</blink>'); 33assertEquals('<'.blink(), '<blink><</blink>'); 34assertEquals(String.prototype.blink.call(0x2A), '<blink>42</blink>'); 35assertThrows(function() { 36 String.prototype.blink.call(undefined); 37}, TypeError); 38assertThrows(function() { 39 String.prototype.blink.call(null); 40}, TypeError); 41assertEquals(String.prototype.blink.length, 0); 42 43assertEquals('_'.bold(), '<b>_</b>'); 44assertEquals('<'.bold(), '<b><</b>'); 45assertEquals(String.prototype.bold.call(0x2A), '<b>42</b>'); 46assertThrows(function() { 47 String.prototype.bold.call(undefined); 48}, TypeError); 49assertThrows(function() { 50 String.prototype.bold.call(null); 51}, TypeError); 52assertEquals(String.prototype.bold.length, 0); 53 54assertEquals('_'.fixed(), '<tt>_</tt>'); 55assertEquals('<'.fixed(), '<tt><</tt>'); 56assertEquals(String.prototype.fixed.call(0x2A), '<tt>42</tt>'); 57assertThrows(function() { 58 String.prototype.fixed.call(undefined); 59}, TypeError); 60assertThrows(function() { 61 String.prototype.fixed.call(null); 62}, TypeError); 63assertEquals(String.prototype.fixed.length, 0); 64 65assertEquals('_'.fontcolor('b'), '<font color="b">_</font>'); 66assertEquals('<'.fontcolor('<'), '<font color="<"><</font>'); 67assertEquals('_'.fontcolor(0x2A), '<font color="42">_</font>'); 68assertEquals('_'.fontcolor('\x22'), '<font color=""">_</font>'); 69assertEquals(String.prototype.fontcolor.call(0x2A, 0x2A), 70 '<font color="42">42</font>'); 71assertThrows(function() { 72 String.prototype.fontcolor.call(undefined); 73}, TypeError); 74assertThrows(function() { 75 String.prototype.fontcolor.call(null); 76}, TypeError); 77assertEquals(String.prototype.fontcolor.length, 1); 78 79assertEquals('_'.fontsize('b'), '<font size="b">_</font>'); 80assertEquals('<'.fontsize('<'), '<font size="<"><</font>'); 81assertEquals('_'.fontsize(0x2A), '<font size="42">_</font>'); 82assertEquals('_'.fontsize('\x22'), '<font size=""">_</font>'); 83assertEquals(String.prototype.fontsize.call(0x2A, 0x2A), 84 '<font size="42">42</font>'); 85assertThrows(function() { 86 String.prototype.fontsize.call(undefined); 87}, TypeError); 88assertThrows(function() { 89 String.prototype.fontsize.call(null); 90}, TypeError); 91assertEquals(String.prototype.fontsize.length, 1); 92 93assertEquals('_'.italics(), '<i>_</i>'); 94assertEquals('<'.italics(), '<i><</i>'); 95assertEquals(String.prototype.italics.call(0x2A), '<i>42</i>'); 96assertThrows(function() { 97 String.prototype.italics.call(undefined); 98}, TypeError); 99assertThrows(function() { 100 String.prototype.italics.call(null); 101}, TypeError); 102assertEquals(String.prototype.italics.length, 0); 103 104assertEquals('_'.link('b'), '<a href="b">_</a>'); 105assertEquals('<'.link('<'), '<a href="<"><</a>'); 106assertEquals('_'.link(0x2A), '<a href="42">_</a>'); 107assertEquals('_'.link('\x22'), '<a href=""">_</a>'); 108assertEquals(String.prototype.link.call(0x2A, 0x2A), '<a href="42">42</a>'); 109assertThrows(function() { 110 String.prototype.link.call(undefined); 111}, TypeError); 112assertThrows(function() { 113 String.prototype.link.call(null); 114}, TypeError); 115assertEquals(String.prototype.link.length, 1); 116 117assertEquals('_'.small(), '<small>_</small>'); 118assertEquals('<'.small(), '<small><</small>'); 119assertEquals(String.prototype.small.call(0x2A), '<small>42</small>'); 120assertThrows(function() { 121 String.prototype.small.call(undefined); 122}, TypeError); 123assertThrows(function() { 124 String.prototype.small.call(null); 125}, TypeError); 126assertEquals(String.prototype.small.length, 0); 127 128assertEquals('_'.strike(), '<strike>_</strike>'); 129assertEquals('<'.strike(), '<strike><</strike>'); 130assertEquals(String.prototype.strike.call(0x2A), '<strike>42</strike>'); 131assertThrows(function() { 132 String.prototype.strike.call(undefined); 133}, TypeError); 134assertThrows(function() { 135 String.prototype.strike.call(null); 136}, TypeError); 137assertEquals(String.prototype.strike.length, 0); 138 139assertEquals('_'.sub(), '<sub>_</sub>'); 140assertEquals('<'.sub(), '<sub><</sub>'); 141assertEquals(String.prototype.sub.call(0x2A), '<sub>42</sub>'); 142assertThrows(function() { 143 String.prototype.sub.call(undefined); 144}, TypeError); 145assertThrows(function() { 146 String.prototype.sub.call(null); 147}, TypeError); 148assertEquals(String.prototype.sub.length, 0); 149 150assertEquals('_'.sup(), '<sup>_</sup>'); 151assertEquals('<'.sup(), '<sup><</sup>'); 152assertEquals(String.prototype.sup.call(0x2A), '<sup>42</sup>'); 153assertThrows(function() { 154 String.prototype.sup.call(undefined); 155}, TypeError); 156assertThrows(function() { 157 String.prototype.sup.call(null); 158}, TypeError); 159assertEquals(String.prototype.sup.length, 0); 160 161 162(function TestToString() { 163 var calls = 0; 164 var obj = { 165 toString() { 166 calls++; 167 return 'abc'; 168 }, 169 valueOf() { 170 assertUnreachable(); 171 } 172 }; 173 174 var methodNames = [ 175 'anchor', 176 'big', 177 'blink', 178 'bold', 179 'fixed', 180 'fontcolor', 181 'fontsize', 182 'italics', 183 'link', 184 'small', 185 'strike', 186 'sub', 187 'sup', 188 ]; 189 for (var name of methodNames) { 190 calls = 0; 191 String.prototype[name].call(obj); 192 assertEquals(1, calls); 193 } 194})(); 195 196 197(function TestDeleteStringRelace() { 198 assertEquals('<a name="n">s</a>', 's'.anchor('n')); 199 assertTrue(delete String.prototype.replace); 200 assertEquals('<a name="n">s</a>', 's'.anchor('n')); 201})(); 202