// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

// Tests taken from:
// http://mathias.html5.org/tests/javascript/string/

/*---
 description: >
     String.prototype.link returns a string of HTML describing a single HTML
     link element. The element's content is the `this` value of the function
     invocation, coerced to a string. If specified, the first argument will be
     coerced to a string, escaped, and set as the element's `href` attribute.
 es6id: B.2.3.10
---*/

assert.sameValue('_'.link('b'), '<a href="b">_</a>');
assert.sameValue('<'.link('<'), '<a href="<"><</a>');
assert.sameValue('_'.link(0x2A), '<a href="42">_</a>');
assert.sameValue('_'.link('\x22'), '<a href="&quot;">_</a>');
assert.sameValue(String.prototype.link.call(0x2A, 0x2A), '<a href="42">42</a>');
assert.throws(TypeError, function() {
  String.prototype.link.call(undefined);
});
assert.throws(TypeError, function() {
  String.prototype.link.call(null);
});
