1/* 2 * Copyright (c) 2022 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/js_symbol.h" 17#include "ecmascript/tests/test_helper.h" 18 19using namespace panda; 20using namespace panda::ecmascript; 21 22namespace panda::test { 23class JSSymbolTest : public BaseTestWithScope<false> { 24}; 25 26HWTEST_F_L0(JSSymbolTest, SymbolCreate) 27{ 28 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 29 JSHandle<JSSymbol> normallSymbol = factory->NewJSSymbol(); 30 EXPECT_TRUE(*normallSymbol != nullptr); 31 EXPECT_TRUE(normallSymbol->GetDescription().IsUndefined()); 32 33 JSHandle<JSSymbol> privateSymbol = factory->NewPrivateSymbol(); 34 EXPECT_TRUE(*privateSymbol != nullptr); 35 EXPECT_TRUE(privateSymbol->IsPrivate()); 36 EXPECT_TRUE(privateSymbol->GetDescription().IsUndefined()); 37 38 JSHandle<JSTaggedValue> symbolName(factory->NewFromASCII("hello world")); 39 JSHandle<JSSymbol> privateNameSymbol = factory->NewPrivateNameSymbol(symbolName); 40 EXPECT_TRUE(*privateNameSymbol != nullptr); 41 EXPECT_TRUE(privateNameSymbol->IsPrivateNameSymbol()); 42 EXPECT_FALSE(privateNameSymbol->GetDescription().IsUndefined()); 43 44 JSHandle<JSSymbol> wellKnowSymbol = factory->NewWellKnownSymbol(symbolName); 45 EXPECT_TRUE(*wellKnowSymbol != nullptr); 46 EXPECT_TRUE(wellKnowSymbol->IsWellKnownSymbol()); 47 EXPECT_FALSE(wellKnowSymbol->GetDescription().IsUndefined()); 48} 49 50HWTEST_F_L0(JSSymbolTest, SymbolEqual) 51{ 52 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 53 JSHandle<JSTaggedValue> helloWord(factory->NewFromASCII("hello world")); 54 JSHandle<JSTaggedValue> hiWord(factory->NewFromASCII("hi world")); 55 56 JSHandle<JSTaggedValue> helloWord1SymbolVal(factory->NewPrivateNameSymbol(helloWord)); 57 JSHandle<JSTaggedValue> helloWord2SymbolVal(factory->NewPrivateNameSymbol(helloWord)); 58 JSHandle<JSTaggedValue> hiWordSymbolVal(factory->NewPrivateNameSymbol(hiWord)); 59 JSSymbol *helloWord1Symbol = JSSymbol::Cast(helloWord1SymbolVal->GetTaggedObject()); 60 JSSymbol *helloWord2Symbol = JSSymbol::Cast(helloWord2SymbolVal->GetTaggedObject()); 61 JSSymbol *hiWordSymbol = JSSymbol::Cast(hiWordSymbolVal->GetTaggedObject()); 62 EXPECT_TRUE(JSSymbol::Equal(*helloWord1Symbol, *helloWord2Symbol)); 63 helloWord2Symbol->SetFlags(1); 64 EXPECT_FALSE(JSSymbol::Equal(*helloWord1Symbol, *helloWord2Symbol)); 65 EXPECT_FALSE(JSSymbol::Equal(*helloWord1Symbol, *hiWordSymbol)); 66} 67} // namespace panda::test 68