• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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