summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/String/thisv-error.js
blob: 9126a6e05eab9e4acb21de971d116b44f1d67162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function testName(thisv) {
  var failures = [
    // Not a function
    "length",
    // TODO: Different implementation
    "toString",
    "toSource",
    "valueOf",
    // Aliases
    "trimLeft",
    "trimRight",
    // Returns empty string
    "constructor"
  ]

  var keys = Object.getOwnPropertyNames(String.prototype);
  for (var key of keys) {
    var message;
    try {
      String.prototype[key].call(thisv);
    } catch (e) {
      message = e.message;
    }

    var expected = `String.prototype.${key} called on incompatible ${thisv}`;
    if (failures.includes(key)) {
      assertEq(message !== expected, true)
    } else {
      assertEq(message, expected);
    }
  }
}
testName(null);
testName(undefined);

// On-off test for Symbol.iterator
function testIterator(thisv) {
  var message;
  try {
    String.prototype[Symbol.iterator].call(thisv);
  } catch (e) {
    message = e.message;
  }

  assertEq(message, `String.prototype[Symbol.iterator] called on incompatible ${thisv}`);
}
testIterator(null);
testIterator(undefined);

if (typeof reportCompare === "function")
    reportCompare(true, true);