Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: test/cctest/test-api.cc

Issue 17155014: API for DataView. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2648 matching lines...) Expand 10 before | Expand all | Expand 10 after
2659 CHECK_EQ(100, result->Int32Value()); 2659 CHECK_EQ(100, result->Int32Value());
2660 CHECK_EQ(0xBB, my_data[0]); 2660 CHECK_EQ(0xBB, my_data[0]);
2661 CHECK_EQ(0xCC, my_data[1]); 2661 CHECK_EQ(0xCC, my_data[1]);
2662 my_data[0] = 0xCC; 2662 my_data[0] = 0xCC;
2663 my_data[1] = 0x11; 2663 my_data[1] = 0x11;
2664 result = CompileRun("u8_b[0] + u8_b[1]"); 2664 result = CompileRun("u8_b[0] + u8_b[1]");
2665 CHECK_EQ(0xDD, result->Int32Value()); 2665 CHECK_EQ(0xDD, result->Int32Value());
2666 } 2666 }
2667 2667
2668 2668
2669 static void CheckDataViewIsNeutered(v8::Handle<v8::DataView> dv) {
2670 CHECK_EQ(0, static_cast<int>(dv->ByteLength()));
2671 CHECK_EQ(0, static_cast<int>(dv->ByteOffset()));
2672 }
2673
2674
2669 static void CheckIsNeutered(v8::Handle<v8::TypedArray> ta) { 2675 static void CheckIsNeutered(v8::Handle<v8::TypedArray> ta) {
2670 CHECK_EQ(0, static_cast<int>(ta->ByteLength())); 2676 CHECK_EQ(0, static_cast<int>(ta->ByteLength()));
2671 CHECK_EQ(0, static_cast<int>(ta->Length())); 2677 CHECK_EQ(0, static_cast<int>(ta->Length()));
2672 CHECK_EQ(0, static_cast<int>(ta->ByteOffset())); 2678 CHECK_EQ(0, static_cast<int>(ta->ByteOffset()));
2673 } 2679 }
2674 2680
2681
2682 static void CheckIsTypedArrayVarNeutered(const char* name) {
2683 i::ScopedVector<char> source(1024);
2684 i::OS::SNPrintF(source,
2685 "%s.byteLength == 0 && %s.byteOffset == 0 && %s.length == 0",
2686 name, name, name);
2687 CHECK(CompileRun(source.start())->IsTrue());
2688 v8::Handle<v8::TypedArray> ta =
2689 v8::Handle<v8::TypedArray>::Cast(CompileRun(name));
2690 CheckIsNeutered(ta);
2691 }
2692
2693
2675 template <typename TypedArray, int kElementSize> 2694 template <typename TypedArray, int kElementSize>
2676 static Handle<TypedArray> CreateAndCheck(Handle<v8::ArrayBuffer> ab, 2695 static Handle<TypedArray> CreateAndCheck(Handle<v8::ArrayBuffer> ab,
2677 int byteOffset, 2696 int byteOffset,
2678 int length) { 2697 int length) {
2679 v8::Handle<TypedArray> ta = TypedArray::New(ab, byteOffset, length); 2698 v8::Handle<TypedArray> ta = TypedArray::New(ab, byteOffset, length);
2680 CHECK_EQ(byteOffset, static_cast<int>(ta->ByteOffset())); 2699 CHECK_EQ(byteOffset, static_cast<int>(ta->ByteOffset()));
2681 CHECK_EQ(length, static_cast<int>(ta->Length())); 2700 CHECK_EQ(length, static_cast<int>(ta->Length()));
2682 CHECK_EQ(length * kElementSize, static_cast<int>(ta->ByteLength())); 2701 CHECK_EQ(length * kElementSize, static_cast<int>(ta->ByteLength()));
2683 return ta; 2702 return ta;
2684 } 2703 }
(...skipping 21 matching lines...) Expand all
2706 v8::Handle<v8::Uint32Array> u32a = 2725 v8::Handle<v8::Uint32Array> u32a =
2707 CreateAndCheck<v8::Uint32Array, 4>(buffer, 4, 255); 2726 CreateAndCheck<v8::Uint32Array, 4>(buffer, 4, 255);
2708 v8::Handle<v8::Int32Array> i32a = 2727 v8::Handle<v8::Int32Array> i32a =
2709 CreateAndCheck<v8::Int32Array, 4>(buffer, 4, 255); 2728 CreateAndCheck<v8::Int32Array, 4>(buffer, 4, 255);
2710 2729
2711 v8::Handle<v8::Float32Array> f32a = 2730 v8::Handle<v8::Float32Array> f32a =
2712 CreateAndCheck<v8::Float32Array, 4>(buffer, 4, 255); 2731 CreateAndCheck<v8::Float32Array, 4>(buffer, 4, 255);
2713 v8::Handle<v8::Float64Array> f64a = 2732 v8::Handle<v8::Float64Array> f64a =
2714 CreateAndCheck<v8::Float64Array, 8>(buffer, 8, 127); 2733 CreateAndCheck<v8::Float64Array, 8>(buffer, 8, 127);
2715 2734
2735 v8::Handle<v8::DataView> dv = v8::DataView::New(buffer, 1, 1023);
2736 CHECK_EQ(1, static_cast<int>(dv->ByteOffset()));
2737 CHECK_EQ(1023, static_cast<int>(dv->ByteLength()));
2738
2716 ScopedArrayBufferContents contents(buffer->Externalize()); 2739 ScopedArrayBufferContents contents(buffer->Externalize());
2717 buffer->Neuter(); 2740 buffer->Neuter();
2718 CHECK_EQ(0, static_cast<int>(buffer->ByteLength())); 2741 CHECK_EQ(0, static_cast<int>(buffer->ByteLength()));
2719 CheckIsNeutered(u8a); 2742 CheckIsNeutered(u8a);
2720 CheckIsNeutered(u8c); 2743 CheckIsNeutered(u8c);
2721 CheckIsNeutered(i8a); 2744 CheckIsNeutered(i8a);
2722 CheckIsNeutered(u16a); 2745 CheckIsNeutered(u16a);
2723 CheckIsNeutered(i16a); 2746 CheckIsNeutered(i16a);
2724 CheckIsNeutered(u32a); 2747 CheckIsNeutered(u32a);
2725 CheckIsNeutered(i32a); 2748 CheckIsNeutered(i32a);
2726 CheckIsNeutered(f32a); 2749 CheckIsNeutered(f32a);
2727 CheckIsNeutered(f64a); 2750 CheckIsNeutered(f64a);
2751 CheckDataViewIsNeutered(dv);
2728 } 2752 }
2729 2753
2730 THREADED_TEST(ArrayBuffer_NeuteringScript) { 2754 THREADED_TEST(ArrayBuffer_NeuteringScript) {
2731 LocalContext env; 2755 LocalContext env;
2732 v8::Isolate* isolate = env->GetIsolate(); 2756 v8::Isolate* isolate = env->GetIsolate();
2733 v8::HandleScope handle_scope(isolate); 2757 v8::HandleScope handle_scope(isolate);
2734 2758
2735 CompileRun( 2759 CompileRun(
2736 "var ab = new ArrayBuffer(1024);" 2760 "var ab = new ArrayBuffer(1024);"
2737 "var u8a = new Uint8Array(ab, 1, 1023);" 2761 "var u8a = new Uint8Array(ab, 1, 1023);"
2738 "var u8c = new Uint8ClampedArray(ab, 1, 1023);" 2762 "var u8c = new Uint8ClampedArray(ab, 1, 1023);"
2739 "var i8a = new Int8Array(ab, 1, 1023);" 2763 "var i8a = new Int8Array(ab, 1, 1023);"
2740 "var u16a = new Uint16Array(ab, 2, 511);" 2764 "var u16a = new Uint16Array(ab, 2, 511);"
2741 "var i16a = new Int16Array(ab, 2, 511);" 2765 "var i16a = new Int16Array(ab, 2, 511);"
2742 "var u32a = new Uint32Array(ab, 4, 255);" 2766 "var u32a = new Uint32Array(ab, 4, 255);"
2743 "var i32a = new Int32Array(ab, 4, 255);" 2767 "var i32a = new Int32Array(ab, 4, 255);"
2744 "var f32a = new Float32Array(ab, 4, 255);" 2768 "var f32a = new Float32Array(ab, 4, 255);"
2745 "var f64a = new Float64Array(ab, 8, 127);" 2769 "var f64a = new Float64Array(ab, 8, 127);"
2746 "var dv = new DataView(ab, 1, 1023);"); 2770 "var dv = new DataView(ab, 1, 1023);");
2747 2771
2748 v8::Handle<v8::ArrayBuffer> ab = 2772 v8::Handle<v8::ArrayBuffer> ab =
2749 Local<v8::ArrayBuffer>::Cast(CompileRun("ab")); 2773 Local<v8::ArrayBuffer>::Cast(CompileRun("ab"));
2750 2774
2751 v8::Handle<v8::Uint8Array> u8a = 2775 v8::Handle<v8::DataView> dv =
2752 v8::Handle<v8::Uint8Array>::Cast(CompileRun("u8a")); 2776 v8::Handle<v8::DataView>::Cast(CompileRun("dv"));
2753 v8::Handle<v8::Uint8ClampedArray> u8c =
2754 v8::Handle<v8::Uint8ClampedArray>::Cast(CompileRun("u8c"));
2755 v8::Handle<v8::Int8Array> i8a =
2756 v8::Handle<v8::Int8Array>::Cast(CompileRun("i8a"));
2757
2758 v8::Handle<v8::Uint16Array> u16a =
2759 v8::Handle<v8::Uint16Array>::Cast(CompileRun("u16a"));
2760 v8::Handle<v8::Int16Array> i16a =
2761 v8::Handle<v8::Int16Array>::Cast(CompileRun("i16a"));
2762 v8::Handle<v8::Uint32Array> u32a =
2763 v8::Handle<v8::Uint32Array>::Cast(CompileRun("u32a"));
2764 v8::Handle<v8::Int32Array> i32a =
2765 v8::Handle<v8::Int32Array>::Cast(CompileRun("i32a"));
2766 v8::Handle<v8::Float32Array> f32a =
2767 v8::Handle<v8::Float32Array>::Cast(CompileRun("f32a"));
2768 v8::Handle<v8::Float64Array> f64a =
2769 v8::Handle<v8::Float64Array>::Cast(CompileRun("f64a"));
2770 2777
2771 ScopedArrayBufferContents contents(ab->Externalize()); 2778 ScopedArrayBufferContents contents(ab->Externalize());
2772 ab->Neuter(); 2779 ab->Neuter();
2773 CHECK_EQ(0, static_cast<int>(ab->ByteLength())); 2780 CHECK_EQ(0, static_cast<int>(ab->ByteLength()));
2774 CheckIsNeutered(u8a); 2781 CHECK_EQ(0, CompileRun("ab.byteLength")->Int32Value());
2775 CheckIsNeutered(u8c); 2782
2776 CheckIsNeutered(i8a); 2783 CheckIsTypedArrayVarNeutered("u8a");
2777 CheckIsNeutered(u16a); 2784 CheckIsTypedArrayVarNeutered("u8c");
2778 CheckIsNeutered(i16a); 2785 CheckIsTypedArrayVarNeutered("i8a");
2779 CheckIsNeutered(u32a); 2786 CheckIsTypedArrayVarNeutered("u16a");
2780 CheckIsNeutered(i32a); 2787 CheckIsTypedArrayVarNeutered("i16a");
2781 CheckIsNeutered(f32a); 2788 CheckIsTypedArrayVarNeutered("u32a");
2782 CheckIsNeutered(f64a); 2789 CheckIsTypedArrayVarNeutered("i32a");
2790 CheckIsTypedArrayVarNeutered("f32a");
2791 CheckIsTypedArrayVarNeutered("f64a");
2792
2783 CHECK(CompileRun("dv.byteLength == 0 && dv.byteOffset == 0")->IsTrue()); 2793 CHECK(CompileRun("dv.byteLength == 0 && dv.byteOffset == 0")->IsTrue());
2794 CheckDataViewIsNeutered(dv);
2784 } 2795 }
2785 2796
2786 2797
2787 2798
2788 THREADED_TEST(HiddenProperties) { 2799 THREADED_TEST(HiddenProperties) {
2789 LocalContext env; 2800 LocalContext env;
2790 v8::HandleScope scope(env->GetIsolate()); 2801 v8::HandleScope scope(env->GetIsolate());
2791 2802
2792 v8::Local<v8::Object> obj = v8::Object::New(); 2803 v8::Local<v8::Object> obj = v8::Object::New();
2793 v8::Local<v8::String> key = v8_str("api-test::hidden-key"); 2804 v8::Local<v8::String> key = v8_str("api-test::hidden-key");
(...skipping 12657 matching lines...) Expand 10 before | Expand all | Expand 10 after
15451 ExternalArrayLimitTestHelper(v8::kExternalPixelArray, 0x40000000); 15462 ExternalArrayLimitTestHelper(v8::kExternalPixelArray, 0x40000000);
15452 ExternalArrayLimitTestHelper(v8::kExternalPixelArray, 0xffffffff); 15463 ExternalArrayLimitTestHelper(v8::kExternalPixelArray, 0xffffffff);
15453 } 15464 }
15454 15465
15455 15466
15456 template <typename ElementType, typename TypedArray, 15467 template <typename ElementType, typename TypedArray,
15457 class ExternalArrayClass> 15468 class ExternalArrayClass>
15458 void TypedArrayTestHelper(v8::ExternalArrayType array_type, 15469 void TypedArrayTestHelper(v8::ExternalArrayType array_type,
15459 int64_t low, int64_t high) { 15470 int64_t low, int64_t high) {
15460 const int kElementCount = 50; 15471 const int kElementCount = 50;
15461 i::FLAG_harmony_array_buffer = true;
15462 i::FLAG_harmony_typed_arrays = true;
15463 15472
15464 i::ScopedVector<ElementType> backing_store(kElementCount+2); 15473 i::ScopedVector<ElementType> backing_store(kElementCount+2);
15465 15474
15466 LocalContext env; 15475 LocalContext env;
15467 v8::Isolate* isolate = env->GetIsolate(); 15476 v8::Isolate* isolate = env->GetIsolate();
15468 v8::HandleScope handle_scope(isolate); 15477 v8::HandleScope handle_scope(isolate);
15469 15478
15470 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New( 15479 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(
15471 backing_store.start(), (kElementCount+2)*sizeof(ElementType)); 15480 backing_store.start(), (kElementCount+2)*sizeof(ElementType));
15472 Local<TypedArray> ta = 15481 Local<TypedArray> ta =
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
15536 v8::kExternalDoubleArray, -500, 500); 15545 v8::kExternalDoubleArray, -500, 500);
15537 } 15546 }
15538 15547
15539 15548
15540 THREADED_TEST(Uint8ClampedArray) { 15549 THREADED_TEST(Uint8ClampedArray) {
15541 TypedArrayTestHelper<uint8_t, v8::Uint8ClampedArray, i::ExternalPixelArray>( 15550 TypedArrayTestHelper<uint8_t, v8::Uint8ClampedArray, i::ExternalPixelArray>(
15542 v8::kExternalPixelArray, 0, 0xFF); 15551 v8::kExternalPixelArray, 0, 0xFF);
15543 } 15552 }
15544 15553
15545 15554
15546 #define IS_TYPED_ARRAY_TEST(TypedArray) \ 15555 THREADED_TEST(DataView) {
15547 THREADED_TEST(Is##TypedArray) { \ 15556 const int kSize = 50;
15557
15558 i::ScopedVector<uint8_t> backing_store(kSize+2);
15559
15560 LocalContext env;
15561 v8::Isolate* isolate = env->GetIsolate();
15562 v8::HandleScope handle_scope(isolate);
15563
15564 Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(
15565 backing_store.start(), 2 + kSize);
15566 Local<v8::DataView> dv =
15567 v8::DataView::New(ab, 2, kSize);
15568 CHECK_EQ(2, static_cast<int>(dv->ByteOffset()));
15569 CHECK_EQ(kSize, static_cast<int>(dv->ByteLength()));
15570 CHECK_EQ(ab, dv->Buffer());
15571 }
15572
15573
15574 #define IS_ARRAY_BUFFER_VIEW_TEST(View) \
15575 THREADED_TEST(Is##View) { \
15548 i::FLAG_harmony_array_buffer = true; \ 15576 i::FLAG_harmony_array_buffer = true; \
15549 i::FLAG_harmony_typed_arrays = true; \ 15577 i::FLAG_harmony_typed_arrays = true; \
15550 LocalContext env; \ 15578 LocalContext env; \
15551 v8::Isolate* isolate = env->GetIsolate(); \ 15579 v8::Isolate* isolate = env->GetIsolate(); \
15552 v8::HandleScope handle_scope(isolate); \ 15580 v8::HandleScope handle_scope(isolate); \
15553 \ 15581 \
15554 Handle<Value> result = CompileRun( \ 15582 Handle<Value> result = CompileRun( \
15555 "var ab = new ArrayBuffer(128);" \ 15583 "var ab = new ArrayBuffer(128);" \
15556 "new " #TypedArray "(ab)"); \ 15584 "new " #View "(ab)"); \
15557 CHECK(result->Is##TypedArray()); \ 15585 CHECK(result->IsArrayBufferView()); \
15586 CHECK(result->Is##View()); \
15558 } 15587 }
15559 15588
15560 IS_TYPED_ARRAY_TEST(Uint8Array) 15589 IS_ARRAY_BUFFER_VIEW_TEST(Uint8Array)
15561 IS_TYPED_ARRAY_TEST(Int8Array) 15590 IS_ARRAY_BUFFER_VIEW_TEST(Int8Array)
15562 IS_TYPED_ARRAY_TEST(Uint16Array) 15591 IS_ARRAY_BUFFER_VIEW_TEST(Uint16Array)
15563 IS_TYPED_ARRAY_TEST(Int16Array) 15592 IS_ARRAY_BUFFER_VIEW_TEST(Int16Array)
15564 IS_TYPED_ARRAY_TEST(Uint32Array) 15593 IS_ARRAY_BUFFER_VIEW_TEST(Uint32Array)
15565 IS_TYPED_ARRAY_TEST(Int32Array) 15594 IS_ARRAY_BUFFER_VIEW_TEST(Int32Array)
15566 IS_TYPED_ARRAY_TEST(Float32Array) 15595 IS_ARRAY_BUFFER_VIEW_TEST(Float32Array)
15567 IS_TYPED_ARRAY_TEST(Float64Array) 15596 IS_ARRAY_BUFFER_VIEW_TEST(Float64Array)
15568 IS_TYPED_ARRAY_TEST(Uint8ClampedArray) 15597 IS_ARRAY_BUFFER_VIEW_TEST(Uint8ClampedArray)
15598 IS_ARRAY_BUFFER_VIEW_TEST(DataView)
15569 15599
15570 #undef IS_TYPED_ARRAY_TEST 15600 #undef IS_ARRAY_BUFFER_VIEW_TEST
15571 15601
15572 15602
15573 15603
15574 THREADED_TEST(ScriptContextDependence) { 15604 THREADED_TEST(ScriptContextDependence) {
15575 LocalContext c1; 15605 LocalContext c1;
15576 v8::HandleScope scope(c1->GetIsolate()); 15606 v8::HandleScope scope(c1->GetIsolate());
15577 const char *source = "foo"; 15607 const char *source = "foo";
15578 v8::Handle<v8::Script> dep = v8::Script::Compile(v8::String::New(source)); 15608 v8::Handle<v8::Script> dep = v8::Script::Compile(v8::String::New(source));
15579 v8::Handle<v8::Script> indep = v8::Script::New(v8::String::New(source)); 15609 v8::Handle<v8::Script> indep = v8::Script::New(v8::String::New(source));
15580 c1->Global()->Set(v8::String::New("foo"), v8::Integer::New(100)); 15610 c1->Global()->Set(v8::String::New("foo"), v8::Integer::New(100));
(...skipping 3770 matching lines...) Expand 10 before | Expand all | Expand 10 after
19351 i::Semaphore* sem_; 19381 i::Semaphore* sem_;
19352 volatile int sem_value_; 19382 volatile int sem_value_;
19353 }; 19383 };
19354 19384
19355 19385
19356 THREADED_TEST(SemaphoreInterruption) { 19386 THREADED_TEST(SemaphoreInterruption) {
19357 ThreadInterruptTest().RunTest(); 19387 ThreadInterruptTest().RunTest();
19358 } 19388 }
19359 19389
19360 #endif // WIN32 19390 #endif // WIN32
OLDNEW
« src/api.cc ('K') | « src/api.cc ('k') | test/cctest/test-weaktypedarrays.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698