blob: 690830ba841dc641ce6d468c82ceb3cf3d8e31e0 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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="&quot;">_</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="&quot;">_</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="&quot;">_</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="&quot;">_</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);
Ben Murdoch014dc512016-03-22 12:00:34 +0000160
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})();