From 02cdfacd31442d32ff81aecf725f2f2ccd66a92b Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Mon, 22 Feb 2016 13:44:39 -0500
Subject: [PATCH] Add tests for %TypedArray%.prototype get methods

Includes buffer, byteLength, byteOffset, length, and @@toStringTag
---
 .../return-typedarrayname.js                  | 21 ++++++++
 .../this-has-no-typedarrayname-internal.js    | 29 +++++++++++
 .../Symbol.toStringTag/this-is-not-object.js  | 27 +++++++++++
 .../prototype/buffer/return-buffer.js         | 21 ++++++++
 .../buffer/return-dataview-buffer.js          | 24 ++++++++++
 .../this-has-no-viewedarraybuffer-internal.js | 35 ++++++++++++++
 .../prototype/buffer/this-is-not-object.js    | 48 +++++++++++++++++++
 .../prototype/byteLength/return-bytelength.js | 23 +++++++++
 .../byteLength/return-dataview-bytelength.js  | 24 ++++++++++
 .../this-has-no-viewedarraybuffer-internal.js | 35 ++++++++++++++
 .../byteLength/this-is-not-object.js          | 48 +++++++++++++++++++
 .../prototype/byteOffset/return-byteoffset.js | 30 ++++++++++++
 .../byteOffset/return-dataview-byteoffset.js  | 27 +++++++++++
 .../this-has-no-viewedarraybuffer-internal.js | 35 ++++++++++++++
 .../byteOffset/this-is-not-object.js          | 48 +++++++++++++++++++
 .../prototype/length/return-length.js         | 27 +++++++++++
 .../this-has-no-typedarrayname-internal.js    | 41 ++++++++++++++++
 .../length/this-is-not-object-strict-mode.js  | 27 +++++++++++
 .../prototype/length/this-is-not-object.js    | 40 ++++++++++++++++
 19 files changed, 610 insertions(+)
 create mode 100644 test/built-ins/TypedArray/prototype/Symbol.toStringTag/return-typedarrayname.js
 create mode 100644 test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-has-no-typedarrayname-internal.js
 create mode 100644 test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-is-not-object.js
 create mode 100644 test/built-ins/TypedArray/prototype/buffer/return-buffer.js
 create mode 100644 test/built-ins/TypedArray/prototype/buffer/return-dataview-buffer.js
 create mode 100644 test/built-ins/TypedArray/prototype/buffer/this-has-no-viewedarraybuffer-internal.js
 create mode 100644 test/built-ins/TypedArray/prototype/buffer/this-is-not-object.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteLength/return-bytelength.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteLength/return-dataview-bytelength.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteLength/this-has-no-viewedarraybuffer-internal.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteLength/this-is-not-object.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteOffset/return-byteoffset.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteOffset/return-dataview-byteoffset.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteOffset/this-has-no-viewedarraybuffer-internal.js
 create mode 100644 test/built-ins/TypedArray/prototype/byteOffset/this-is-not-object.js
 create mode 100644 test/built-ins/TypedArray/prototype/length/return-length.js
 create mode 100644 test/built-ins/TypedArray/prototype/length/this-has-no-typedarrayname-internal.js
 create mode 100644 test/built-ins/TypedArray/prototype/length/this-is-not-object-strict-mode.js
 create mode 100644 test/built-ins/TypedArray/prototype/length/this-is-not-object.js

diff --git a/test/built-ins/TypedArray/prototype/Symbol.toStringTag/return-typedarrayname.js b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/return-typedarrayname.js
new file mode 100644
index 0000000000..72127f90d2
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/return-typedarrayname.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype-@@tostringtag
+description: |
+  Return value from the [[TypedArrayName]] internal slot
+info: >
+  22.2.3.32 get %TypedArray%.prototype [ @@toStringTag ]
+
+  ...
+  4. Let name be the value of O's [[TypedArrayName]] internal slot.
+  5. Assert: name is a String value.
+  6. Return name.
+includes: [testTypedArray.js]
+features: [Symbol.toStringTag]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var ta = new TA();
+  assert.sameValue(ta[Symbol.toStringTag], TA.name, "property value");
+});
diff --git a/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-has-no-typedarrayname-internal.js b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-has-no-typedarrayname-internal.js
new file mode 100644
index 0000000000..6c6567b824
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-has-no-typedarrayname-internal.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype-@@tostringtag
+description: >
+  Return undefined when `this` does not have a [[TypedArrayName]] internal slot
+info: >
+  22.2.3.32 get %TypedArray%.prototype [ @@toStringTag ]
+
+  1. Let O be the this value.
+  ...
+  3. If O does not have a [[TypedArrayName]] internal slot, return undefined.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol.toStringTag, DataView]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, Symbol.toStringTag
+).get;
+
+assert.sameValue(getter.call({}), undefined);
+assert.sameValue(getter.call([]), undefined);
+assert.sameValue(getter.call(new ArrayBuffer(8)), undefined);
+
+var ab = new ArrayBuffer(8);
+var dv = new DataView(ab, 0, 1);
+assert.sameValue(getter.call(dv), undefined);
diff --git a/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-is-not-object.js b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-is-not-object.js
new file mode 100644
index 0000000000..99a95d608b
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/Symbol.toStringTag/this-is-not-object.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype-@@tostringtag
+description: Return undefined when `this` is not Object
+info: >
+  22.2.3.32 get %TypedArray%.prototype [ @@toStringTag ]
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, return undefined.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol, Symbol.toStringTag]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, Symbol.toStringTag
+).get;
+
+assert.sameValue(getter.call(undefined), undefined, "this is undefined");
+assert.sameValue(getter.call(42), undefined, "this is 42");
+assert.sameValue(getter.call("foo"), undefined, "this is a string");
+assert.sameValue(getter.call(true), undefined, "this is true");
+assert.sameValue(getter.call(false), undefined, "this is false");
+assert.sameValue(getter.call(Symbol("s")), undefined, "this is a Symbol");
+assert.sameValue(getter.call(null), undefined, "this is null");
diff --git a/test/built-ins/TypedArray/prototype/buffer/return-buffer.js b/test/built-ins/TypedArray/prototype/buffer/return-buffer.js
new file mode 100644
index 0000000000..63e3b07139
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/buffer/return-buffer.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.1
+description: |
+  Return buffer from [[ViewedArrayBuffer]] internal slot
+info: >
+  22.2.3.1 get %TypedArray%.prototype.buffer
+
+  ...
+  4. Let buffer be the value of O's [[ViewedArrayBuffer]] internal slot.
+  5. Return buffer.
+includes: [testTypedArray.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var buffer = new ArrayBuffer(TA.BYTES_PER_ELEMENT);
+  var ta = new TA(buffer);
+
+  assert.sameValue(ta.buffer, buffer);
+});
diff --git a/test/built-ins/TypedArray/prototype/buffer/return-dataview-buffer.js b/test/built-ins/TypedArray/prototype/buffer/return-dataview-buffer.js
new file mode 100644
index 0000000000..05992e520e
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/buffer/return-dataview-buffer.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.1
+description: |
+  Return buffer from DataView's instance [[ViewedArrayBuffer]] internal slot
+info: >
+  22.2.3.1 get %TypedArray%.prototype.buffer
+
+  ...
+  4. Let buffer be the value of O's [[ViewedArrayBuffer]] internal slot.
+  5. Return buffer.
+includes: [testTypedArray.js]
+features: [DataView]
+---*/
+
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArray.prototype, "buffer"
+).get;
+
+var buffer = new ArrayBuffer(8);
+var dv = new DataView(buffer, 0);
+
+assert.sameValue(getter.call(dv), buffer);
diff --git a/test/built-ins/TypedArray/prototype/buffer/this-has-no-viewedarraybuffer-internal.js b/test/built-ins/TypedArray/prototype/buffer/this-has-no-viewedarraybuffer-internal.js
new file mode 100644
index 0000000000..8939cad810
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/buffer/this-has-no-viewedarraybuffer-internal.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.1
+description: |
+  Throws a TypeError exception when `this` does not have a [[ViewedArrayBuffer]]
+  internal slot
+info: >
+  22.2.3.1 get %TypedArray%.prototype.buffer
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  3. If O does not have a [[ViewedArrayBuffer]] internal slot, throw a TypeError
+  exception.
+  ...
+includes: [testTypedArray.js]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "buffer"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call({});
+});
+
+assert.throws(TypeError, function() {
+  getter.call([]);
+});
+
+var ab = new ArrayBuffer(8);
+assert.throws(TypeError, function() {
+  getter.call(ab);
+});
diff --git a/test/built-ins/TypedArray/prototype/buffer/this-is-not-object.js b/test/built-ins/TypedArray/prototype/buffer/this-is-not-object.js
new file mode 100644
index 0000000000..b0cdaf828a
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/buffer/this-is-not-object.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.1
+description: Throws a TypeError exception when `this` is not Object
+info: >
+  22.2.3.1 get %TypedArray%.prototype.buffer
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "buffer"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call(undefined);
+}, "this is undefined");
+
+assert.throws(TypeError, function() {
+  getter.call(null);
+}, "this is null");
+
+assert.throws(TypeError, function() {
+  getter.call(42);
+}, "this is 42");
+
+assert.throws(TypeError, function() {
+  getter.call("1");
+}, "this is a string");
+
+assert.throws(TypeError, function() {
+  getter.call(true);
+}, "this is true");
+
+assert.throws(TypeError, function() {
+  getter.call(false);
+}, "this is false");
+
+var s = Symbol("s");
+assert.throws(TypeError, function() {
+  getter.call(s);
+}, "this is a Symbol");
diff --git a/test/built-ins/TypedArray/prototype/byteLength/return-bytelength.js b/test/built-ins/TypedArray/prototype/byteLength/return-bytelength.js
new file mode 100644
index 0000000000..45ac33ac41
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteLength/return-bytelength.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.2
+description: |
+  Return value from [[ByteLength]] internal slot
+info: >
+  22.2.3.2 get %TypedArray%.prototype.byteLength
+
+  ...
+  6. Let size be the value of O's [[ByteLength]] internal slot.
+  7. Return size.
+includes: [testTypedArray.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var bytesPerElement = TA.BYTES_PER_ELEMENT;
+  var ta1 = new TA();
+  assert.sameValue(ta1.byteLength, 0);
+
+  var ta2 = new TA(42);
+  assert.sameValue(ta2.byteLength, 42 * bytesPerElement);
+});
diff --git a/test/built-ins/TypedArray/prototype/byteLength/return-dataview-bytelength.js b/test/built-ins/TypedArray/prototype/byteLength/return-dataview-bytelength.js
new file mode 100644
index 0000000000..8f1930d0d0
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteLength/return-dataview-bytelength.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.2
+description: |
+  Return buffer from DataView's instance [[ViewedArrayBuffer]] internal slot
+info: >
+  22.2.3.2 get %TypedArray%.prototype.byteLength
+
+  ...
+  6. Let size be the value of O's [[ByteLength]] internal slot.
+  7. Return size.
+includes: [testTypedArray.js]
+features: [DataView]
+---*/
+
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArray.prototype, "byteLength"
+).get;
+
+var buffer = new ArrayBuffer(64);
+var dv = new DataView(buffer, 0);
+
+assert.sameValue(getter.call(dv), 64);
diff --git a/test/built-ins/TypedArray/prototype/byteLength/this-has-no-viewedarraybuffer-internal.js b/test/built-ins/TypedArray/prototype/byteLength/this-has-no-viewedarraybuffer-internal.js
new file mode 100644
index 0000000000..935c86c03d
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteLength/this-has-no-viewedarraybuffer-internal.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.2
+description: |
+  Throws a TypeError exception when `this` does not have a [[ViewedArrayBuffer]]
+  internal slot
+info: >
+  22.2.3.2 get %TypedArray%.prototype.byteLength
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  3. If O does not have a [[ViewedArrayBuffer]] internal slot, throw a TypeError
+  exception.
+  ...
+includes: [testTypedArray.js]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "byteLength"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call({});
+});
+
+assert.throws(TypeError, function() {
+  getter.call([]);
+});
+
+var ab = new ArrayBuffer(8);
+assert.throws(TypeError, function() {
+  getter.call(ab);
+});
diff --git a/test/built-ins/TypedArray/prototype/byteLength/this-is-not-object.js b/test/built-ins/TypedArray/prototype/byteLength/this-is-not-object.js
new file mode 100644
index 0000000000..8dd7a61798
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteLength/this-is-not-object.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.2
+description: Throws a TypeError exception when `this` is not Object
+info: >
+  22.2.3.2 get %TypedArray%.prototype.byteLength
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "byteLength"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call(undefined);
+}, "this is undefined");
+
+assert.throws(TypeError, function() {
+  getter.call(null);
+}, "this is null");
+
+assert.throws(TypeError, function() {
+  getter.call(42);
+}, "this is 42");
+
+assert.throws(TypeError, function() {
+  getter.call("1");
+}, "this is a string");
+
+assert.throws(TypeError, function() {
+  getter.call(true);
+}, "this is true");
+
+assert.throws(TypeError, function() {
+  getter.call(false);
+}, "this is false");
+
+var s = Symbol("s");
+assert.throws(TypeError, function() {
+  getter.call(s);
+}, "this is a Symbol");
diff --git a/test/built-ins/TypedArray/prototype/byteOffset/return-byteoffset.js b/test/built-ins/TypedArray/prototype/byteOffset/return-byteoffset.js
new file mode 100644
index 0000000000..51570aa23a
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteOffset/return-byteoffset.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.3
+description: |
+  Return value from [[ByteOffset]] internal slot
+info: >
+  22.2.3.3 get %TypedArray%.prototype.byteOffset
+
+  ...
+  6. Let offset be the value of O's [[ByteOffset]] internal slot.
+  7. Return size.
+includes: [testTypedArray.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var ta1 = new TA();
+  assert.sameValue(ta1.byteOffset, 0, "Regular typedArray");
+
+  var offset = 4 * TA.BYTES_PER_ELEMENT;
+
+  var buffer1 = new ArrayBuffer(8 * TA.BYTES_PER_ELEMENT);
+  var ta2 = new TA(buffer1, offset);
+  assert.sameValue(ta2.byteOffset, offset, "TA(buffer, offset)");
+
+  var buffer2 = new ArrayBuffer(8 * TA.BYTES_PER_ELEMENT);
+  var sample = new TA(buffer2, offset)
+  var ta3 = new TA(sample);
+  assert.sameValue(ta3.byteOffset, 0, "TA(typedArray)");
+});
diff --git a/test/built-ins/TypedArray/prototype/byteOffset/return-dataview-byteoffset.js b/test/built-ins/TypedArray/prototype/byteOffset/return-dataview-byteoffset.js
new file mode 100644
index 0000000000..916514a5c5
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteOffset/return-dataview-byteoffset.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.2
+description: |
+  Return buffer from DataView's instance [[ViewedArrayBuffer]] internal slot
+info: >
+  22.2.3.2 get %TypedArray%.prototype.byteOffset
+
+  ...
+  6. Let offset be the value of O's [[ByteOffset]] internal slot.
+  7. Return size.
+includes: [testTypedArray.js]
+features: [DataView]
+---*/
+
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArray.prototype, "byteOffset"
+).get;
+
+var buffer = new ArrayBuffer(64);
+
+var dv1 = new DataView(buffer, 0);
+assert.sameValue(getter.call(dv1), 0);
+
+var dv2 = new DataView(buffer, 32);
+assert.sameValue(getter.call(dv2), 32);
diff --git a/test/built-ins/TypedArray/prototype/byteOffset/this-has-no-viewedarraybuffer-internal.js b/test/built-ins/TypedArray/prototype/byteOffset/this-has-no-viewedarraybuffer-internal.js
new file mode 100644
index 0000000000..a444fdbf14
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteOffset/this-has-no-viewedarraybuffer-internal.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.3
+description: |
+  Throws a TypeError exception when `this` does not have a [[ViewedArrayBuffer]]
+  internal slot
+info: >
+  22.2.3.3 get %TypedArray%.prototype.byteOffset
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  3. If O does not have a [[ViewedArrayBuffer]] internal slot, throw a TypeError
+  exception.
+  ...
+includes: [testTypedArray.js]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "byteOffset"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call({});
+});
+
+assert.throws(TypeError, function() {
+  getter.call([]);
+});
+
+var ab = new ArrayBuffer(8);
+assert.throws(TypeError, function() {
+  getter.call(ab);
+});
diff --git a/test/built-ins/TypedArray/prototype/byteOffset/this-is-not-object.js b/test/built-ins/TypedArray/prototype/byteOffset/this-is-not-object.js
new file mode 100644
index 0000000000..244072f9fa
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/byteOffset/this-is-not-object.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 22.2.3.3
+description: Throws a TypeError exception when `this` is not Object
+info: >
+  22.2.3.3 get %TypedArray%.prototype.byteOffset
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "byteOffset"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call(undefined);
+}, "this is undefined");
+
+assert.throws(TypeError, function() {
+  getter.call(null);
+}, "this is null");
+
+assert.throws(TypeError, function() {
+  getter.call(42);
+}, "this is 42");
+
+assert.throws(TypeError, function() {
+  getter.call("1");
+}, "this is a string");
+
+assert.throws(TypeError, function() {
+  getter.call(true);
+}, "this is true");
+
+assert.throws(TypeError, function() {
+  getter.call(false);
+}, "this is false");
+
+var s = Symbol("s");
+assert.throws(TypeError, function() {
+  getter.call(s);
+}, "this is a Symbol");
diff --git a/test/built-ins/TypedArray/prototype/length/return-length.js b/test/built-ins/TypedArray/prototype/length/return-length.js
new file mode 100644
index 0000000000..61e3f9dfcb
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/length/return-length.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype.length
+description: |
+  Return value from the [[ArrayLength]] internal slot
+info: >
+  22.2.3.18 get %TypedArray%.prototype.length
+
+  ...
+  6. Let length be the value of O's [[ArrayLength]] internal slot.
+  7. Return length.
+
+  ---
+
+  The current tests on `prop-desc.js` and `length.js` already assert `length` is
+  not a dynamic property as in regular arrays.
+includes: [testTypedArray.js]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+  var ta1 = new TA();
+  assert.sameValue(ta1.length, 0);
+
+  var ta2 = new TA(42);
+  assert.sameValue(ta2.length, 42);
+});
diff --git a/test/built-ins/TypedArray/prototype/length/this-has-no-typedarrayname-internal.js b/test/built-ins/TypedArray/prototype/length/this-has-no-typedarrayname-internal.js
new file mode 100644
index 0000000000..94db7aa579
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/length/this-has-no-typedarrayname-internal.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype.length
+description: |
+  Throws a TypeError exception when `this` does not have a [[TypedArrayName]]
+  internal slot
+info: >
+  22.2.3.18 get %TypedArray%.prototype.length
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  3. If O does not have a [[TypedArrayName]] internal slot, throw a TypeError
+  exception.
+  ...
+includes: [testTypedArray.js]
+features: [DataView]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "length"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call({});
+});
+
+assert.throws(TypeError, function() {
+  getter.call([]);
+});
+
+var ab = new ArrayBuffer(8);
+assert.throws(TypeError, function() {
+  getter.call(ab);
+});
+
+var dv = new DataView(new ArrayBuffer(8), 0);
+assert.throws(TypeError, function() {
+  getter.call(dv);
+});
diff --git a/test/built-ins/TypedArray/prototype/length/this-is-not-object-strict-mode.js b/test/built-ins/TypedArray/prototype/length/this-is-not-object-strict-mode.js
new file mode 100644
index 0000000000..d22f4d5ad7
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/length/this-is-not-object-strict-mode.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype.length
+description: Throws a TypeError exception when `this` is null or undefined
+info: >
+  22.2.3.18 get %TypedArray%.prototype.length
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js]
+flags: [onlyStrict]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "length"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+  getter.call(null);
+});
diff --git a/test/built-ins/TypedArray/prototype/length/this-is-not-object.js b/test/built-ins/TypedArray/prototype/length/this-is-not-object.js
new file mode 100644
index 0000000000..77685b43a1
--- /dev/null
+++ b/test/built-ins/TypedArray/prototype/length/this-is-not-object.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-%typedarray%.prototype.length
+description: Throws a TypeError exception when `this` is not Object
+info: >
+  22.2.3.18 get %TypedArray%.prototype.length
+
+  1. Let O be the this value.
+  2. If Type(O) is not Object, throw a TypeError exception.
+  ...
+includes: [testTypedArray.js]
+features: [Symbol]
+---*/
+
+var TypedArrayPrototype = TypedArray.prototype;
+var getter = Object.getOwnPropertyDescriptor(
+  TypedArrayPrototype, "length"
+).get;
+
+assert.throws(TypeError, function() {
+  getter.call(42);
+});
+
+assert.throws(TypeError, function() {
+  getter.call("1");
+});
+
+assert.throws(TypeError, function() {
+  getter.call(true);
+});
+
+assert.throws(TypeError, function() {
+  getter.call(false);
+});
+
+var s = Symbol("s");
+assert.throws(TypeError, function() {
+  getter.call(s);
+});
-- 
GitLab