1 /*
2 * Copyright (c) 2024 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 <cstdlib>
17 #include <gtest/gtest.h>
18 #include <iostream>
19 #include <string>
20 #include <vector>
21 #include "abc2program_driver.h"
22 #include "abc2program_test_utils.h"
23 #include "common/abc_file_utils.h"
24 #include "dump_utils.h"
25 #include "modifiers.h"
26
27 using namespace testing::ext;
28
29 namespace panda::abc2program {
30
31 struct FuncName {
32 std::string es = "default.#~ES=#ES";
33 std::string ets = "ets.#~AT=#AT";
34 std::string js = "js.#~JS=#JS";
35 std::string ts = "ts.#*#TS";
36 };
37
38 struct RecordName {
39 std::string defaultRec = "default";
40 std::string ets = "ets";
41 std::string js = "js";
42 std::string ts = "ts";
43 std::string tsAnno = "ts.TsAnno";
44 std::string etsStrAnno = "ets.EtsStringAnno";
45 std::string pandaString = "panda.String";
46 };
47
48 const FuncName FUNC_NAME;
49 const RecordName RECORD_NAME;
50 const std::string SOURCE_LANG_TEST_FILE_NAME = GRAPH_TEST_ABC_DIR "sourceLang.abc";
51
GetFunction(const std::string & name,const pandasm::Program & program)52 static const pandasm::Function *GetFunction(const std::string &name,
53 const pandasm::Program &program)
54 {
55 auto it = program.function_table.find(name);
56 if (it == program.function_table.end()) {
57 return nullptr;
58 }
59 return &(it->second);
60 }
61
GetRecord(const std::string & name,const pandasm::Program & program)62 static const pandasm::Record *GetRecord(const std::string &name,
63 const pandasm::Program &program)
64 {
65 return &(program.record_table.find(name)->second);
66 }
67
68 class Abc2ProgramSourceLangTest : public testing::Test {
69 public:
SetUpTestCase(void)70 static void SetUpTestCase(void) {}
TearDownTestCase(void)71 static void TearDownTestCase(void) {}
SetUp()72 void SetUp()
73 {
74 (void)driver_.Compile(SOURCE_LANG_TEST_FILE_NAME);
75 prog_ = &(driver_.GetProgram());
76 es_function_ = GetFunction(FUNC_NAME.es, *prog_);
77 ASSERT_NE(es_function_, nullptr);
78 js_function_ = GetFunction(FUNC_NAME.js, *prog_);
79 ASSERT_NE(js_function_, nullptr);
80 ts_function_ = GetFunction(FUNC_NAME.ts, *prog_);
81 ASSERT_NE(ts_function_, nullptr);
82 ets_function_ = GetFunction(FUNC_NAME.ets, *prog_);
83 ASSERT_NE(ets_function_, nullptr);
84
85 es_record_ = GetRecord(RECORD_NAME.defaultRec, *prog_);
86 ASSERT_NE(es_record_, nullptr);
87 js_record_ = GetRecord(RECORD_NAME.js, *prog_);
88 ASSERT_NE(js_record_, nullptr);
89 ts_record_ = GetRecord(RECORD_NAME.ts, *prog_);
90 ASSERT_NE(ts_record_, nullptr);
91 ets_record_ = GetRecord(RECORD_NAME.ets, *prog_);
92 ASSERT_NE(ets_record_, nullptr);
93
94 ets_str_anno_record_ = GetRecord(RECORD_NAME.etsStrAnno, *prog_);
95 ASSERT_NE(ets_str_anno_record_, nullptr);
96 ts_anno_record_ = GetRecord(RECORD_NAME.tsAnno, *prog_);
97 ASSERT_NE(ts_anno_record_, nullptr);
98 panda_string_record_ = GetRecord(RECORD_NAME.pandaString, *prog_);
99 ASSERT_NE(panda_string_record_, nullptr);
100 }
101
TearDown()102 void TearDown() {}
103
104 Abc2ProgramDriver driver_;
105 const pandasm::Program *prog_ = nullptr;
106 const pandasm::Function *es_function_ = nullptr;
107 const pandasm::Function *js_function_ = nullptr;
108 const pandasm::Function *ts_function_ = nullptr;
109 const pandasm::Function *ets_function_ = nullptr;
110
111 const pandasm::Record *es_record_ = nullptr;
112 const pandasm::Record *ts_record_ = nullptr;
113 const pandasm::Record *js_record_ = nullptr;
114 const pandasm::Record *ets_record_ = nullptr;
115 const pandasm::Record *ets_str_anno_record_ = nullptr;
116 const pandasm::Record *ts_anno_record_ = nullptr;
117 const pandasm::Record *panda_string_record_ = nullptr;
118 };
119
120 /*------------------------------------- Cases of release mode below -------------------------------------*/
121
122 /**
123 * @tc.name: abc2program_hello_world_test_dump
124 * @tc.desc: check dump result in release mode.
125 * @tc.type: FUNC
126 * @tc.require: IADG92
127 */
128 HWTEST_F(Abc2ProgramSourceLangTest, abc2program_source_lang_test, TestSize.Level1)
129 {
130 EXPECT_EQ(es_function_->language, pandasm::extensions::Language::ECMASCRIPT);
131 EXPECT_EQ(js_function_->language, pandasm::extensions::Language::JAVASCRIPT);
132 EXPECT_EQ(ts_function_->language, pandasm::extensions::Language::TYPESCRIPT);
133 EXPECT_EQ(ets_function_->language, pandasm::extensions::Language::ARKTS);
134
135 EXPECT_EQ(es_record_->language, pandasm::extensions::Language::ECMASCRIPT);
136 EXPECT_EQ(ts_record_->language, pandasm::extensions::Language::TYPESCRIPT);
137 EXPECT_EQ(js_record_->language, pandasm::extensions::Language::JAVASCRIPT);
138 EXPECT_EQ(ets_record_->language, pandasm::extensions::Language::ARKTS);
139
140 EXPECT_EQ(ets_str_anno_record_->language, pandasm::extensions::Language::ARKTS);
141 EXPECT_EQ(ts_anno_record_->language, pandasm::extensions::Language::TYPESCRIPT);
142 EXPECT_EQ(panda_string_record_->language, pandasm::extensions::Language::ECMASCRIPT);
143 }
144 }; // panda::abc2program