14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#include "builtin_test_util.h"
174514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_dataview.h"
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_arraybuffer.h"
204514f5e3Sopenharmony_ci#include "ecmascript/ecma_runtime_call_info.h"
214514f5e3Sopenharmony_ci#include "ecmascript/ecma_vm.h"
224514f5e3Sopenharmony_ci#include "ecmascript/global_env.h"
234514f5e3Sopenharmony_ci#include "ecmascript/js_arraybuffer.h"
244514f5e3Sopenharmony_ci#include "ecmascript/js_dataview.h"
254514f5e3Sopenharmony_ci#include "ecmascript/js_handle.h"
264514f5e3Sopenharmony_ci#include "ecmascript/js_tagged_value.h"
274514f5e3Sopenharmony_ci#include "ecmascript/tests/test_helper.h"
284514f5e3Sopenharmony_ci
294514f5e3Sopenharmony_ciusing namespace panda::ecmascript;
304514f5e3Sopenharmony_ciusing namespace panda::ecmascript::builtins;
314514f5e3Sopenharmony_ci
324514f5e3Sopenharmony_cinamespace panda::test {
334514f5e3Sopenharmony_ciusing DataViewType = ecmascript::DataViewType;
344514f5e3Sopenharmony_ciclass BuiltinsDataViewTest : public BaseTestWithScope<false> {
354514f5e3Sopenharmony_ci};
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_cienum class AlgorithmType {
384514f5e3Sopenharmony_ci    GET_OFFSET,
394514f5e3Sopenharmony_ci    GET_BYTELENGTH,
404514f5e3Sopenharmony_ci    GET_BUFFER,
414514f5e3Sopenharmony_ci    GET_INT8,
424514f5e3Sopenharmony_ci    SET_INT8,
434514f5e3Sopenharmony_ci    GET_UINT8,
444514f5e3Sopenharmony_ci    SET_UINT8,
454514f5e3Sopenharmony_ci    GET_UINT16,
464514f5e3Sopenharmony_ci    SET_UINT16,
474514f5e3Sopenharmony_ci    GET_INT16,
484514f5e3Sopenharmony_ci    SET_INT16,
494514f5e3Sopenharmony_ci    GET_UINT32,
504514f5e3Sopenharmony_ci    SET_UINT32,
514514f5e3Sopenharmony_ci    GET_INT32,
524514f5e3Sopenharmony_ci    SET_INT32,
534514f5e3Sopenharmony_ci    GET_FLOAT32,
544514f5e3Sopenharmony_ci    SET_FLOAT32,
554514f5e3Sopenharmony_ci    GET_FLOAT64,
564514f5e3Sopenharmony_ci    SET_FLOAT64,
574514f5e3Sopenharmony_ci    GET_BIGINT64,
584514f5e3Sopenharmony_ci    SET_BIGINT64,
594514f5e3Sopenharmony_ci};
604514f5e3Sopenharmony_ci
614514f5e3Sopenharmony_cistatic JSTaggedValue DataViewAlgorithmGet(AlgorithmType type, EcmaRuntimeCallInfo* ecmaRuntimeCallInfo)
624514f5e3Sopenharmony_ci{
634514f5e3Sopenharmony_ci    JSTaggedValue result;
644514f5e3Sopenharmony_ci    switch (type) {
654514f5e3Sopenharmony_ci        case AlgorithmType::GET_OFFSET:
664514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetOffset(ecmaRuntimeCallInfo);
674514f5e3Sopenharmony_ci            break;
684514f5e3Sopenharmony_ci        case AlgorithmType::GET_BYTELENGTH:
694514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetByteLength(ecmaRuntimeCallInfo);
704514f5e3Sopenharmony_ci            break;
714514f5e3Sopenharmony_ci        case AlgorithmType::GET_BUFFER:
724514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetBuffer(ecmaRuntimeCallInfo);
734514f5e3Sopenharmony_ci            break;
744514f5e3Sopenharmony_ci        case AlgorithmType::GET_INT8:
754514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetInt8(ecmaRuntimeCallInfo);
764514f5e3Sopenharmony_ci            break;
774514f5e3Sopenharmony_ci        case AlgorithmType::GET_UINT16:
784514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetUint16(ecmaRuntimeCallInfo);
794514f5e3Sopenharmony_ci            break;
804514f5e3Sopenharmony_ci        case AlgorithmType::GET_INT16:
814514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetInt16(ecmaRuntimeCallInfo);
824514f5e3Sopenharmony_ci            break;
834514f5e3Sopenharmony_ci        case AlgorithmType::GET_UINT32:
844514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetUint32(ecmaRuntimeCallInfo);
854514f5e3Sopenharmony_ci            break;
864514f5e3Sopenharmony_ci        case AlgorithmType::GET_INT32:
874514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetInt32(ecmaRuntimeCallInfo);
884514f5e3Sopenharmony_ci            break;
894514f5e3Sopenharmony_ci        case AlgorithmType::GET_FLOAT32:
904514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetFloat32(ecmaRuntimeCallInfo);
914514f5e3Sopenharmony_ci            break;
924514f5e3Sopenharmony_ci        case AlgorithmType::GET_FLOAT64:
934514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetFloat64(ecmaRuntimeCallInfo);
944514f5e3Sopenharmony_ci            break;
954514f5e3Sopenharmony_ci        case AlgorithmType::GET_BIGINT64:
964514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetBigInt64(ecmaRuntimeCallInfo);
974514f5e3Sopenharmony_ci            break;
984514f5e3Sopenharmony_ci        default:
994514f5e3Sopenharmony_ci            break;
1004514f5e3Sopenharmony_ci    }
1014514f5e3Sopenharmony_ci    return result;
1024514f5e3Sopenharmony_ci}
1034514f5e3Sopenharmony_ci
1044514f5e3Sopenharmony_cistatic JSTaggedValue DataViewAlgorithm(JSThread *thread, std::vector<JSTaggedValue>& args, int32_t maxArgLen,
1054514f5e3Sopenharmony_ci    AlgorithmType type, JSTaggedValue thisValue = JSTaggedValue::Undefined())
1064514f5e3Sopenharmony_ci{
1074514f5e3Sopenharmony_ci    auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, args, maxArgLen, thisValue);
1084514f5e3Sopenharmony_ci    auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
1094514f5e3Sopenharmony_ci    JSTaggedValue result;
1104514f5e3Sopenharmony_ci    switch (type) {
1114514f5e3Sopenharmony_ci        case AlgorithmType::SET_INT8:
1124514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetInt8(ecmaRuntimeCallInfo);
1134514f5e3Sopenharmony_ci            break;
1144514f5e3Sopenharmony_ci        case AlgorithmType::GET_UINT8:
1154514f5e3Sopenharmony_ci            result = BuiltinsDataView::GetUint8(ecmaRuntimeCallInfo);
1164514f5e3Sopenharmony_ci            break;
1174514f5e3Sopenharmony_ci        case AlgorithmType::SET_UINT8:
1184514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetUint8(ecmaRuntimeCallInfo);
1194514f5e3Sopenharmony_ci            break;
1204514f5e3Sopenharmony_ci        case AlgorithmType::SET_UINT16:
1214514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetUint16(ecmaRuntimeCallInfo);
1224514f5e3Sopenharmony_ci            break;
1234514f5e3Sopenharmony_ci        case AlgorithmType::SET_INT16:
1244514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetInt16(ecmaRuntimeCallInfo);
1254514f5e3Sopenharmony_ci            break;
1264514f5e3Sopenharmony_ci        case AlgorithmType::SET_UINT32:
1274514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetUint32(ecmaRuntimeCallInfo);
1284514f5e3Sopenharmony_ci            break;
1294514f5e3Sopenharmony_ci        case AlgorithmType::SET_INT32:
1304514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetInt32(ecmaRuntimeCallInfo);
1314514f5e3Sopenharmony_ci            break;
1324514f5e3Sopenharmony_ci        case AlgorithmType::SET_FLOAT32:
1334514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetFloat32(ecmaRuntimeCallInfo);
1344514f5e3Sopenharmony_ci            break;
1354514f5e3Sopenharmony_ci        case AlgorithmType::SET_FLOAT64:
1364514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetFloat64(ecmaRuntimeCallInfo);
1374514f5e3Sopenharmony_ci            break;
1384514f5e3Sopenharmony_ci        case AlgorithmType::SET_BIGINT64:
1394514f5e3Sopenharmony_ci            result = BuiltinsDataView::SetBigInt64(ecmaRuntimeCallInfo);
1404514f5e3Sopenharmony_ci            break;
1414514f5e3Sopenharmony_ci        default:
1424514f5e3Sopenharmony_ci            result = DataViewAlgorithmGet(type, ecmaRuntimeCallInfo);
1434514f5e3Sopenharmony_ci            break;
1444514f5e3Sopenharmony_ci    }
1454514f5e3Sopenharmony_ci    TestHelper::TearDownFrame(thread, prev);
1464514f5e3Sopenharmony_ci    return result;
1474514f5e3Sopenharmony_ci}
1484514f5e3Sopenharmony_ci
1494514f5e3Sopenharmony_ciJSTaggedValue CreateBuiltinsDataviewArrayBuffer(JSThread *thread, int32_t length)
1504514f5e3Sopenharmony_ci{
1514514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1524514f5e3Sopenharmony_ci    JSHandle<JSFunction> arrayBuffer(thread, env->GetArrayBufferFunction().GetTaggedValue());
1534514f5e3Sopenharmony_ci    JSHandle<JSObject> globalObject(thread, env->GetGlobalObject());
1544514f5e3Sopenharmony_ci    // 6 : test case
1554514f5e3Sopenharmony_ci    auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*arrayBuffer), 6);
1564514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetFunction(arrayBuffer.GetTaggedValue());
1574514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue());
1584514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(0, JSTaggedValue(length));
1594514f5e3Sopenharmony_ci
1604514f5e3Sopenharmony_ci    [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
1614514f5e3Sopenharmony_ci    JSTaggedValue result = BuiltinsArrayBuffer::ArrayBufferConstructor(ecmaRuntimeCallInfo);
1624514f5e3Sopenharmony_ci    TestHelper::TearDownFrame(thread, prev);
1634514f5e3Sopenharmony_ci    return result;
1644514f5e3Sopenharmony_ci}
1654514f5e3Sopenharmony_ci
1664514f5e3Sopenharmony_ciJSTaggedValue CreateBuiltinsDataView(JSThread *thread, int32_t length, int32_t byte_offset)
1674514f5e3Sopenharmony_ci{
1684514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1694514f5e3Sopenharmony_ci    JSHandle<JSFunction> dataView(thread, env->GetDataViewFunction().GetTaggedValue());
1704514f5e3Sopenharmony_ci    JSHandle<JSObject> globalObject(thread, env->GetGlobalObject());
1714514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataviewArrayBuffer(thread, length);
1724514f5e3Sopenharmony_ci    JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
1734514f5e3Sopenharmony_ci    // 8 : test case
1744514f5e3Sopenharmony_ci    auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8);
1754514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue());
1764514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue());
1774514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue());
1784514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(byte_offset));
1794514f5e3Sopenharmony_ci
1804514f5e3Sopenharmony_ci    [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
1814514f5e3Sopenharmony_ci    JSTaggedValue result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo);
1824514f5e3Sopenharmony_ci    TestHelper::TearDownFrame(thread, prev);
1834514f5e3Sopenharmony_ci    return result;
1844514f5e3Sopenharmony_ci}
1854514f5e3Sopenharmony_ci
1864514f5e3Sopenharmony_civoid SetUint8(JSThread *thread, const JSHandle<JSDataView> &view, int32_t offset, JSTaggedValue value)
1874514f5e3Sopenharmony_ci{
1884514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(offset), value};
1894514f5e3Sopenharmony_ci    DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_UINT8, view.GetTaggedValue());  // 8: data max len
1904514f5e3Sopenharmony_ci}
1914514f5e3Sopenharmony_ci
1924514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1)
1934514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, Constructor)
1944514f5e3Sopenharmony_ci{
1954514f5e3Sopenharmony_ci    JSHandle<GlobalEnv> env = thread->GetEcmaVM()->GetGlobalEnv();
1964514f5e3Sopenharmony_ci    JSHandle<JSFunction> dataView(thread, env->GetDataViewFunction().GetTaggedValue());
1974514f5e3Sopenharmony_ci    JSHandle<JSObject> globalObject(thread, env->GetGlobalObject());
1984514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataviewArrayBuffer(thread, 10);
1994514f5e3Sopenharmony_ci    JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
2004514f5e3Sopenharmony_ci    auto ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8);
2014514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue());
2024514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue());
2034514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue());
2044514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1));
2054514f5e3Sopenharmony_ci
2064514f5e3Sopenharmony_ci    [[maybe_unused]] auto prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
2074514f5e3Sopenharmony_ci    JSTaggedValue result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo);
2084514f5e3Sopenharmony_ci    ASSERT_TRUE(result.IsECMAObject());
2094514f5e3Sopenharmony_ci    TestHelper::TearDownFrame(thread, prev);
2104514f5e3Sopenharmony_ci
2114514f5e3Sopenharmony_ci    // case: Detached Buffer
2124514f5e3Sopenharmony_ci    arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null());
2134514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo = TestHelper::CreateEcmaRuntimeCallInfo(thread, JSTaggedValue(*dataView), 8);
2144514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetFunction(dataView.GetTaggedValue());
2154514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetThis(globalObject.GetTaggedValue());
2164514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(0, arrBuf.GetTaggedValue());
2174514f5e3Sopenharmony_ci    ecmaRuntimeCallInfo->SetCallArg(1, JSTaggedValue(1));
2184514f5e3Sopenharmony_ci
2194514f5e3Sopenharmony_ci    prev = TestHelper::SetupFrame(thread, ecmaRuntimeCallInfo);
2204514f5e3Sopenharmony_ci    result = BuiltinsDataView::DataViewConstructor(ecmaRuntimeCallInfo);
2214514f5e3Sopenharmony_ci    TestHelper::TearDownFrame(thread, prev);
2224514f5e3Sopenharmony_ci    EXPECT_TRUE(thread->HasPendingException());
2234514f5e3Sopenharmony_ci    EXPECT_EQ(result, JSTaggedValue::Exception());
2244514f5e3Sopenharmony_ci    thread->ClearException();
2254514f5e3Sopenharmony_ci}
2264514f5e3Sopenharmony_ci
2274514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1).byteOffset
2284514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, byteOffset)
2294514f5e3Sopenharmony_ci{
2304514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 1);
2314514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
2324514f5e3Sopenharmony_ci
2334514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{};
2344514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_OFFSET, view.GetTaggedValue());
2354514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(1).GetRawData());
2364514f5e3Sopenharmony_ci
2374514f5e3Sopenharmony_ci    // case: Detached Buffer
2384514f5e3Sopenharmony_ci    JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10);
2394514f5e3Sopenharmony_ci    JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData())));
2404514f5e3Sopenharmony_ci    arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null());
2414514f5e3Sopenharmony_ci    view->SetViewedArrayBuffer(thread, arrBuf);
2424514f5e3Sopenharmony_ci
2434514f5e3Sopenharmony_ci    result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_OFFSET, view.GetTaggedValue());
2444514f5e3Sopenharmony_ci    EXPECT_TRUE(thread->HasPendingException());
2454514f5e3Sopenharmony_ci    EXPECT_EQ(result, JSTaggedValue::Exception());
2464514f5e3Sopenharmony_ci    thread->ClearException();
2474514f5e3Sopenharmony_ci}
2484514f5e3Sopenharmony_ci
2494514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 2).byteLength
2504514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, byteLength)
2514514f5e3Sopenharmony_ci{
2524514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 2);
2534514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
2544514f5e3Sopenharmony_ci
2554514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{};
2564514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BYTELENGTH, view.GetTaggedValue());
2574514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(8).GetRawData());
2584514f5e3Sopenharmony_ci
2594514f5e3Sopenharmony_ci    // case: Detached Buffer
2604514f5e3Sopenharmony_ci    JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10);
2614514f5e3Sopenharmony_ci    JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData())));
2624514f5e3Sopenharmony_ci    arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null());
2634514f5e3Sopenharmony_ci    view->SetViewedArrayBuffer(thread, arrBuf);
2644514f5e3Sopenharmony_ci    result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BYTELENGTH, view.GetTaggedValue());
2654514f5e3Sopenharmony_ci    EXPECT_TRUE(thread->HasPendingException());
2664514f5e3Sopenharmony_ci    EXPECT_EQ(result, JSTaggedValue::Exception());
2674514f5e3Sopenharmony_ci    thread->ClearException();
2684514f5e3Sopenharmony_ci}
2694514f5e3Sopenharmony_ci
2704514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(10), 1).buffer
2714514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, buffer)
2724514f5e3Sopenharmony_ci{
2734514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 1);
2744514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
2754514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{};
2764514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 4, AlgorithmType::GET_BUFFER, view.GetTaggedValue());
2774514f5e3Sopenharmony_ci    ASSERT_EQ(result.IsArrayBuffer(), true);
2784514f5e3Sopenharmony_ci}
2794514f5e3Sopenharmony_ci
2804514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint16/GetUint16
2814514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, getUint16)
2824514f5e3Sopenharmony_ci{
2834514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
2844514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
2854514f5e3Sopenharmony_ci
2864514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::False()};
2874514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_UINT16, view.GetTaggedValue());
2884514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
2894514f5e3Sopenharmony_ci
2904514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::True()};
2914514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_UINT16, view.GetTaggedValue());
2924514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(63488).GetRawData());
2934514f5e3Sopenharmony_ci}
2944514f5e3Sopenharmony_ci
2954514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt16/GetInt16
2964514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, getInt16)
2974514f5e3Sopenharmony_ci{
2984514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
2994514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3004514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::False()};
3014514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_INT16, view.GetTaggedValue());
3024514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
3034514f5e3Sopenharmony_ci
3044514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::True()};
3054514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_INT16, view.GetTaggedValue());
3064514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(-2048).GetRawData());
3074514f5e3Sopenharmony_ci}
3084514f5e3Sopenharmony_ci
3094514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetUint32
3104514f5e3Sopenharmony_cistatic JSHandle<JSDataView> GetCommonInt32(JSThread *thread)
3114514f5e3Sopenharmony_ci{
3124514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0); // 8: data len
3134514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3144514f5e3Sopenharmony_ci    SetUint8(thread, view, 0, JSTaggedValue(127)); // 127:value
3154514f5e3Sopenharmony_ci    SetUint8(thread, view, 1, JSTaggedValue(255)); // 1: the second value, 255:value
3164514f5e3Sopenharmony_ci    SetUint8(thread, view, 2, JSTaggedValue(255)); // 2: the third value, 255:value
3174514f5e3Sopenharmony_ci    SetUint8(thread, view, 3, JSTaggedValue(255)); // 3: the forth value, 255:value
3184514f5e3Sopenharmony_ci    return view;
3194514f5e3Sopenharmony_ci}
3204514f5e3Sopenharmony_ci
3214514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetUint32)
3224514f5e3Sopenharmony_ci{
3234514f5e3Sopenharmony_ci    auto view = GetCommonInt32(thread);
3244514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()};
3254514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_UINT32, view.GetTaggedValue());
3264514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(2147483647).GetRawData());
3274514f5e3Sopenharmony_ci}
3284514f5e3Sopenharmony_ci
3294514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetInt32
3304514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetInt32)
3314514f5e3Sopenharmony_ci{
3324514f5e3Sopenharmony_ci    auto view = GetCommonInt32(thread);
3334514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()};
3344514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_INT32, view.GetTaggedValue());
3354514f5e3Sopenharmony_ci
3364514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(2147483647).GetRawData());
3374514f5e3Sopenharmony_ci}
3384514f5e3Sopenharmony_ci
3394514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetInt8
3404514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetInt8)
3414514f5e3Sopenharmony_ci{
3424514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
3434514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3444514f5e3Sopenharmony_ci    SetUint8(thread, view, 0, JSTaggedValue(255));
3454514f5e3Sopenharmony_ci
3464514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0)};
3474514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 6, AlgorithmType::GET_INT8, view.GetTaggedValue());
3484514f5e3Sopenharmony_ci
3494514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(-1).GetRawData());
3504514f5e3Sopenharmony_ci}
3514514f5e3Sopenharmony_ci
3524514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint8/GetUint8
3534514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetUint8)
3544514f5e3Sopenharmony_ci{
3554514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
3564514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3574514f5e3Sopenharmony_ci    SetUint8(thread, view, 0, JSTaggedValue(127));
3584514f5e3Sopenharmony_ci
3594514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0)};
3604514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 6, AlgorithmType::GET_UINT8, view.GetTaggedValue());
3614514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(127).GetRawData());
3624514f5e3Sopenharmony_ci}
3634514f5e3Sopenharmony_ci
3644514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 4).SetUint8/GetFloat32
3654514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetFloat32)
3664514f5e3Sopenharmony_ci{
3674514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
3684514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3694514f5e3Sopenharmony_ci    SetUint8(thread, view, 4, JSTaggedValue(75));
3704514f5e3Sopenharmony_ci    SetUint8(thread, view, 5, JSTaggedValue(75));
3714514f5e3Sopenharmony_ci    SetUint8(thread, view, 6, JSTaggedValue(75));
3724514f5e3Sopenharmony_ci    SetUint8(thread, view, 7, JSTaggedValue(75));
3734514f5e3Sopenharmony_ci
3744514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(4), JSTaggedValue::False()};
3754514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_FLOAT32, view.GetTaggedValue());
3764514f5e3Sopenharmony_ci
3774514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(13323083)).GetRawData());
3784514f5e3Sopenharmony_ci}
3794514f5e3Sopenharmony_ci
3804514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(12), 4).SetUint8/GetFloat64
3814514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetFloat64)
3824514f5e3Sopenharmony_ci{
3834514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 12, 0);
3844514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
3854514f5e3Sopenharmony_ci    SetUint8(thread, view, 4, JSTaggedValue(67));
3864514f5e3Sopenharmony_ci    SetUint8(thread, view, 5, JSTaggedValue(67));
3874514f5e3Sopenharmony_ci    SetUint8(thread, view, 6, JSTaggedValue(68));
3884514f5e3Sopenharmony_ci    SetUint8(thread, view, 7, JSTaggedValue(68));
3894514f5e3Sopenharmony_ci    SetUint8(thread, view, 8, JSTaggedValue(67));
3904514f5e3Sopenharmony_ci    SetUint8(thread, view, 9, JSTaggedValue(67));
3914514f5e3Sopenharmony_ci    SetUint8(thread, view, 10, JSTaggedValue(68));
3924514f5e3Sopenharmony_ci    SetUint8(thread, view, 11, JSTaggedValue(68));
3934514f5e3Sopenharmony_ci
3944514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(4), JSTaggedValue::False()};
3954514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_FLOAT64, view.GetTaggedValue());
3964514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue(static_cast<double>(10846169068898440)).GetRawData());
3974514f5e3Sopenharmony_ci}
3984514f5e3Sopenharmony_ci
3994514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetUint32/GetUint32
4004514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetUint32)
4014514f5e3Sopenharmony_ci{
4024514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
4034514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4044514f5e3Sopenharmony_ci
4054514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(0x907f00f8), JSTaggedValue::True()};
4064514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_UINT32, view.GetTaggedValue());
4074514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
4084514f5e3Sopenharmony_ci
4094514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()};
4104514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_UINT32, view.GetTaggedValue());
4114514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(0xf8007f90)).GetRawData());
4124514f5e3Sopenharmony_ci}
4134514f5e3Sopenharmony_ci
4144514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt32/GetInt32
4154514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetInt32)
4164514f5e3Sopenharmony_ci{
4174514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
4184514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4194514f5e3Sopenharmony_ci
4204514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1870724872), JSTaggedValue::True()};
4214514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_INT32, view.GetTaggedValue());
4224514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
4234514f5e3Sopenharmony_ci
4244514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()};
4254514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_INT32, view.GetTaggedValue());
4264514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(-134185072).GetRawData());
4274514f5e3Sopenharmony_ci}
4284514f5e3Sopenharmony_ci
4294514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetInt8/GetUint8
4304514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetInt8)
4314514f5e3Sopenharmony_ci{
4324514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
4334514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4344514f5e3Sopenharmony_ci
4354514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(-1)};
4364514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_INT8, view.GetTaggedValue());
4374514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
4384514f5e3Sopenharmony_ci
4394514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0)};
4404514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 6, AlgorithmType::GET_UINT8, view.GetTaggedValue());
4414514f5e3Sopenharmony_ci
4424514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(255).GetRawData());
4434514f5e3Sopenharmony_ci}
4444514f5e3Sopenharmony_ci
4454514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(4), 0).SetFloat32/GetFloat32
4464514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetFloat32)
4474514f5e3Sopenharmony_ci{
4484514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 4, 0);
4494514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4504514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(42), JSTaggedValue::True()};
4514514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_FLOAT32, view.GetTaggedValue());
4524514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
4534514f5e3Sopenharmony_ci
4544514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()};
4554514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_FLOAT32, view.GetTaggedValue());
4564514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(1.4441781973331565e-41)).GetRawData());
4574514f5e3Sopenharmony_ci}
4584514f5e3Sopenharmony_ci
4594514f5e3Sopenharmony_ci// new DataView(new ArrayBuffer(8), 0).SetFloat64/GetFloat64
4604514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetFloat64)
4614514f5e3Sopenharmony_ci{
4624514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 8, 0);
4634514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4644514f5e3Sopenharmony_ci
4654514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(42), JSTaggedValue::True()};
4664514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 10, AlgorithmType::SET_FLOAT64, view.GetTaggedValue());
4674514f5e3Sopenharmony_ci    ASSERT_EQ(result.GetRawData(), JSTaggedValue::VALUE_UNDEFINED);
4684514f5e3Sopenharmony_ci
4694514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals2{JSTaggedValue(0), JSTaggedValue::False()};
4704514f5e3Sopenharmony_ci    auto result1 = DataViewAlgorithm(thread, vals2, 8, AlgorithmType::GET_FLOAT64, view.GetTaggedValue());
4714514f5e3Sopenharmony_ci
4724514f5e3Sopenharmony_ci    ASSERT_EQ(result1.GetRawData(), JSTaggedValue(static_cast<double>(8.759e-320)).GetRawData());
4734514f5e3Sopenharmony_ci}
4744514f5e3Sopenharmony_ci
4754514f5e3Sopenharmony_cistatic JSHandle<JSDataView> BigInt64Common(JSThread *thread)
4764514f5e3Sopenharmony_ci{
4774514f5e3Sopenharmony_ci    JSTaggedValue tagged = CreateBuiltinsDataView(thread, 10, 2);
4784514f5e3Sopenharmony_ci    JSHandle<JSDataView> view(thread, JSDataView::Cast(reinterpret_cast<TaggedObject *>(tagged.GetRawData())));
4794514f5e3Sopenharmony_ci    JSTaggedValue tagged1 = BuiltTestUtil::CreateBuiltinsArrayBuffer(thread, 10);
4804514f5e3Sopenharmony_ci    JSHandle<JSArrayBuffer> arrBuf(thread, JSArrayBuffer::Cast(reinterpret_cast<TaggedObject *>(tagged1.GetRawData())));
4814514f5e3Sopenharmony_ci    arrBuf->SetArrayBufferData(thread, JSTaggedValue::Null());
4824514f5e3Sopenharmony_ci    view->SetViewedArrayBuffer(thread, arrBuf);
4834514f5e3Sopenharmony_ci    return view;
4844514f5e3Sopenharmony_ci}
4854514f5e3Sopenharmony_ci
4864514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, GetBigInt64)
4874514f5e3Sopenharmony_ci{
4884514f5e3Sopenharmony_ci    // case: Detached Buffer
4894514f5e3Sopenharmony_ci    auto view = BigInt64Common(thread);
4904514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue::False()};
4914514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::GET_BIGINT64, view.GetTaggedValue());
4924514f5e3Sopenharmony_ci    EXPECT_TRUE(thread->HasPendingException());
4934514f5e3Sopenharmony_ci    EXPECT_EQ(result, JSTaggedValue::Exception());
4944514f5e3Sopenharmony_ci    thread->ClearException();
4954514f5e3Sopenharmony_ci}
4964514f5e3Sopenharmony_ci
4974514f5e3Sopenharmony_ciHWTEST_F_L0(BuiltinsDataViewTest, SetBigInt64)
4984514f5e3Sopenharmony_ci{
4994514f5e3Sopenharmony_ci    auto view = BigInt64Common(thread);
5004514f5e3Sopenharmony_ci    std::vector<JSTaggedValue> vals{JSTaggedValue(0), JSTaggedValue(10)};
5014514f5e3Sopenharmony_ci    auto result = DataViewAlgorithm(thread, vals, 8, AlgorithmType::SET_BIGINT64, view.GetTaggedValue());
5024514f5e3Sopenharmony_ci    EXPECT_TRUE(thread->HasPendingException());
5034514f5e3Sopenharmony_ci    EXPECT_EQ(result, JSTaggedValue::Exception());
5044514f5e3Sopenharmony_ci    thread->ClearException();
5054514f5e3Sopenharmony_ci    // case index < 0 is unreachable
5064514f5e3Sopenharmony_ci}
5074514f5e3Sopenharmony_ci}  // namespace panda::test
508