// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Tests taken from:
// http://mathias.html5.org/tests/javascript/string/
assertEquals('_'.anchor('b'), '_');
assertEquals('<'.anchor('<'), '<');
assertEquals('_'.anchor(0x2A), '_');
assertEquals('_'.anchor('\x22'), '_');
assertEquals(String.prototype.anchor.call(0x2A, 0x2A), '42');
assertThrows(function() {
String.prototype.anchor.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.anchor.call(null);
}, TypeError);
assertEquals(String.prototype.anchor.length, 1);
assertEquals('_'.big(), '_');
assertEquals('<'.big(), '<');
assertEquals(String.prototype.big.call(0x2A), '42');
assertThrows(function() {
String.prototype.big.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.big.call(null);
}, TypeError);
assertEquals(String.prototype.big.length, 0);
assertEquals('_'.blink(), '');
assertEquals('<'.blink(), '');
assertEquals(String.prototype.blink.call(0x2A), '');
assertThrows(function() {
String.prototype.blink.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.blink.call(null);
}, TypeError);
assertEquals(String.prototype.blink.length, 0);
assertEquals('_'.bold(), '_');
assertEquals('<'.bold(), '<');
assertEquals(String.prototype.bold.call(0x2A), '42');
assertThrows(function() {
String.prototype.bold.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.bold.call(null);
}, TypeError);
assertEquals(String.prototype.bold.length, 0);
assertEquals('_'.fixed(), '_');
assertEquals('<'.fixed(), '<');
assertEquals(String.prototype.fixed.call(0x2A), '42');
assertThrows(function() {
String.prototype.fixed.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.fixed.call(null);
}, TypeError);
assertEquals(String.prototype.fixed.length, 0);
assertEquals('_'.fontcolor('b'), '_');
assertEquals('<'.fontcolor('<'), '<');
assertEquals('_'.fontcolor(0x2A), '_');
assertEquals('_'.fontcolor('\x22'), '_');
assertEquals(String.prototype.fontcolor.call(0x2A, 0x2A),
'42');
assertThrows(function() {
String.prototype.fontcolor.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.fontcolor.call(null);
}, TypeError);
assertEquals(String.prototype.fontcolor.length, 1);
assertEquals('_'.fontsize('b'), '_');
assertEquals('<'.fontsize('<'), '<');
assertEquals('_'.fontsize(0x2A), '_');
assertEquals('_'.fontsize('\x22'), '_');
assertEquals(String.prototype.fontsize.call(0x2A, 0x2A),
'42');
assertThrows(function() {
String.prototype.fontsize.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.fontsize.call(null);
}, TypeError);
assertEquals(String.prototype.fontsize.length, 1);
assertEquals('_'.italics(), '_');
assertEquals('<'.italics(), '<');
assertEquals(String.prototype.italics.call(0x2A), '42');
assertThrows(function() {
String.prototype.italics.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.italics.call(null);
}, TypeError);
assertEquals(String.prototype.italics.length, 0);
assertEquals('_'.link('b'), '_');
assertEquals('<'.link('<'), '<');
assertEquals('_'.link(0x2A), '_');
assertEquals('_'.link('\x22'), '_');
assertEquals(String.prototype.link.call(0x2A, 0x2A), '42');
assertThrows(function() {
String.prototype.link.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.link.call(null);
}, TypeError);
assertEquals(String.prototype.link.length, 1);
assertEquals('_'.small(), '_');
assertEquals('<'.small(), '<');
assertEquals(String.prototype.small.call(0x2A), '42');
assertThrows(function() {
String.prototype.small.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.small.call(null);
}, TypeError);
assertEquals(String.prototype.small.length, 0);
assertEquals('_'.strike(), '_');
assertEquals('<'.strike(), '<');
assertEquals(String.prototype.strike.call(0x2A), '42');
assertThrows(function() {
String.prototype.strike.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.strike.call(null);
}, TypeError);
assertEquals(String.prototype.strike.length, 0);
assertEquals('_'.sub(), '_');
assertEquals('<'.sub(), '<');
assertEquals(String.prototype.sub.call(0x2A), '42');
assertThrows(function() {
String.prototype.sub.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.sub.call(null);
}, TypeError);
assertEquals(String.prototype.sub.length, 0);
assertEquals('_'.sup(), '_');
assertEquals('<'.sup(), '<');
assertEquals(String.prototype.sup.call(0x2A), '42');
assertThrows(function() {
String.prototype.sup.call(undefined);
}, TypeError);
assertThrows(function() {
String.prototype.sup.call(null);
}, TypeError);
assertEquals(String.prototype.sup.length, 0);
(function TestToString() {
var calls = 0;
var obj = {
toString() {
calls++;
return 'abc';
},
valueOf() {
assertUnreachable();
}
};
var methodNames = [
'anchor',
'big',
'blink',
'bold',
'fixed',
'fontcolor',
'fontsize',
'italics',
'link',
'small',
'strike',
'sub',
'sup',
];
for (var name of methodNames) {
calls = 0;
String.prototype[name].call(obj);
assertEquals(1, calls);
}
})();
(function TestDeleteStringRelace() {
assertEquals('s', 's'.anchor('n'));
assertTrue(delete String.prototype.replace);
assertEquals('s', 's'.anchor('n'));
})();