--- /dev/null
+var primitives = [
+ ["string", 6],
+ [42, undefined],
+ [Symbol("symbol"), undefined],
+ [true, undefined],
+ [false, undefined]
+];
+
+for (var [primitive, expected] of primitives) {
+ var ret = Object.getOwnPropertyDescriptor(primitive, 'length');
+ if (expected === undefined) {
+ if (ret !== expected)
+ throw new Error("bad value for " + String(primitive) + ": " + String(ret));
+ } else if (ret.value !== expected)
+ throw new Error("bad value for " + String(primitive) + ": " + String(ret));
+}
+
+function canary() {
+ return {
+ called: false,
+ toString() {
+ this.called = true;
+ throw new Error("out");
+ }
+ };
+}
+
+[
+ [ null, "TypeError: null is not an object (evaluating 'Object.getOwnPropertyDescriptor(value, property)')" ],
+ [ undefined, "TypeError: undefined is not an object (evaluating 'Object.getOwnPropertyDescriptor(value, property)')" ]
+].forEach(function ([value, message]) {
+ var property = canary();
+ var error = null;
+ try {
+ Object.getOwnPropertyDescriptor(value, property);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("error not thrown");
+ if (String(error) !== message)
+ throw new Error("bad error: " + String(error));
+});