1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "ecmascript/ic/property_box.h"
17#include "ecmascript/tests/test_helper.h"
18
19using namespace panda::ecmascript;
20
21namespace panda::test {
22class PropertyBoxTest : public testing::Test {
23public:
24    static void SetUpTestCase()
25    {
26        GTEST_LOG_(INFO) << "SetUpTestCase";
27    }
28
29    static void TearDownTestCase()
30    {
31        GTEST_LOG_(INFO) << "TearDownCase";
32    }
33
34    void SetUp() override
35    {
36        TestHelper::CreateEcmaVMWithScope(instance, thread, scope);
37    }
38
39    void TearDown() override
40    {
41        TestHelper::DestroyEcmaVMWithScope(instance, scope);
42    }
43
44    EcmaVM *instance {nullptr};
45    EcmaHandleScope *scope {nullptr};
46    JSThread *thread {nullptr};
47};
48
49/**
50 * @tc.name: Clear
51 * @tc.desc: Creating PropertyBox object through "NewPropertyBox" function,the Property value is exist,then calling
52 *           "Clear" function make the value be hole.
53 * @tc.type: FUNC
54 * @tc.requre:
55 */
56HWTEST_F_L0(PropertyBoxTest, Clear)
57{
58    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
59
60    JSHandle<JSTaggedValue> handleValue(thread, JSTaggedValue(1));
61    JSHandle<PropertyBox> handlePropertyBox = factory->NewPropertyBox(handleValue);
62    EXPECT_FALSE(handlePropertyBox->GetValue().IsHole());
63
64    handlePropertyBox->Clear(thread);
65    EXPECT_TRUE(handlePropertyBox->GetValue().IsHole());
66    EXPECT_TRUE(handlePropertyBox->IsInvalid());
67}
68
69/**
70 * @tc.name: SetValue
71 * @tc.desc: Creating PropertyBox object through "NewPropertyBox" function,this object call "SetValue" function
72 *           check wether the result returned through "GetValue" function is within expectations.
73 * @tc.type: FUNC
74 * @tc.requre:
75 */
76HWTEST_F_L0(PropertyBoxTest, SetValue)
77{
78    ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
79    JSHandle<JSTaggedValue> handleValue(thread, JSTaggedValue::Undefined());
80    JSHandle<JSTaggedValue> handlePropertyBoxVal(factory->NewPropertyBox(handleValue));
81
82    JSHandle<PropertyBox> handlePropertyBox = JSHandle<PropertyBox>::Cast(handlePropertyBoxVal);
83    handlePropertyBox->SetValue(thread, JSTaggedValue(2));
84    EXPECT_EQ(handlePropertyBox->GetValue().GetInt(), 2);
85    EXPECT_FALSE(handlePropertyBox->IsInvalid());
86}
87} // namespace panda::test