1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include "test/cctest/cctest.h"
11 #include "src/heap/heap.h"
12 #include "src/objects.h"
15 using namespace v8::internal;
17 void TestArrayBufferViewContents(LocalContext& env, bool should_use_buffer) {
18 v8::Local<v8::Object> obj_a =
19 v8::Local<v8::Object>::Cast(env->Global()->Get(v8_str("a")));
20 CHECK(obj_a->IsArrayBufferView());
21 v8::Local<v8::ArrayBufferView> array_buffer_view =
22 v8::Local<v8::ArrayBufferView>::Cast(obj_a);
23 CHECK_EQ(array_buffer_view->HasBuffer(), should_use_buffer);
24 unsigned char contents[4] = {23, 23, 23, 23};
25 CHECK_EQ(sizeof(contents),
26 array_buffer_view->CopyContents(contents, sizeof(contents)));
27 CHECK_EQ(array_buffer_view->HasBuffer(), should_use_buffer);
28 for (size_t i = 0; i < sizeof(contents); ++i) {
29 CHECK_EQ(i, contents[i]);
34 TEST(CopyContentsTypedArray) {
36 v8::HandleScope scope(env->GetIsolate());
38 "var a = new Uint8Array(4);"
43 TestArrayBufferViewContents(env, false);
47 TEST(CopyContentsArray) {
49 v8::HandleScope scope(env->GetIsolate());
50 CompileRun("var a = new Uint8Array([0, 1, 2, 3]);");
51 TestArrayBufferViewContents(env, true);
55 TEST(CopyContentsView) {
57 v8::HandleScope scope(env->GetIsolate());
59 "var b = new ArrayBuffer(6);"
60 "var c = new Uint8Array(b);"
67 "var a = new DataView(b, 2);");
68 TestArrayBufferViewContents(env, true);
72 TEST(AllocateNotExternal) {
74 v8::HandleScope scope(env->GetIsolate());
75 void* memory = V8::ArrayBufferAllocator()->Allocate(1024);
76 v8::Local<v8::ArrayBuffer> buffer =
77 v8::ArrayBuffer::New(env->GetIsolate(), memory, 1024,
78 v8::ArrayBufferCreationMode::kInternalized);
79 CHECK(!buffer->IsExternal());
80 CHECK_EQ(memory, buffer->GetContents().Data());