• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 开发实例<a name="ZH-CN_TOPIC_0000001128096218"></a>
2
3- [开发实例<a name="ZH-CN_TOPIC_0000001128096218"></a>](#开发实例)
4  - [HelloWorld<a name="section105987593810"></a>](#helloworld)
5    - [运行前准备](#运行前准备)
6    - [运行hello-world.js](#运行hello-worldjs)
7    - [反汇编hello-world.abc](#反汇编hello-worldabc)
8  - [运行Test262测试用例<a name="section118471435115815"></a>](#运行test262测试用例)
9    - [运行前准备](#运行前准备-1)
10    - [运行Test262](#运行test262)
11    - [测试运行示例](#测试运行示例)
12    - [测试输出](#测试输出)
13
14本章节将介绍基于方舟运行时的开发测试实例。
15
16## HelloWorld<a name="section105987593810"></a>
17
18### 运行前准备
19
201.  编译方舟运行时,编译命令:
21
22	编译x64版本:
23	```
24	./build.sh --product-name hispark_taurus_standard --build-target ark_js_host_linux_tools_packages --build-target ark_ts2abc_build  # arm平台和host端运行工具
25	```
26
27	编译arm64版本:
28	```
29	./build.sh --product-name hispark_taurus_standard --gn-args use_musl=true --target-cpu arm64 --build-target ark_js_vm
30	```
31
32	编译arm32版本:
33	```
34	./build.sh --product-name hispark_taurus_standard --build-target  ark_js_runtime
35	```
36
372.  编译方舟前端,编译命令:
38
39	```
40	./build.sh --product-name hispark_taurus_standard --build-target ark_ts2abc_build
41	```
42
43**说明**:上述编译命令为release版本,且执行路径为项目根目录。编译debug版本需增加编译选项:--gn-args is_debug=true。
44
45### 运行hello-world.js
46
47新建hello-world.js文件,写入以下源码:
48
49```
50 print("Hello World!!!");
51```
52
53运行步骤:
54
551.  通过方舟前端生成hello-world.abc文件,编译命令:
56
57    ```
58    node --expose-gc /your code path/out/hispark_taurus/clang_x64/arkcompiler/ets_frontend/build/src/index.js hello-world.js
59    ```
60
612.  执行hello-world.abc文件:
62    1.  设置搜索路径:
63
64        ```
65        export LD_LIBRARY_PATH= /your code path/out/hispark_taurus/clang_x64/arkcompiler/ets_runtime:/your code path/out/hispark_taurus/clang_x64/global/i18n_standard:/your code path/prebuilts/clang/ohos/linux-x86_64/llvm/lib
66        ```
67
68    2.  执行ark\_js\_vm:
69
70        ```
71        /your code path/out/hispark_taurus/clang_x64/arkcompiler/ets_runtime/ark_js_vm hello-world.abc
72        ```
73
74        执行结果如下:
75
76        ```
77        Hello World!!!
78        ```
79
80
81
82**说明**:此处“_your code path_”为源码目录路径。
83
84### 反汇编hello-world.abc
85
86编译生成反汇编工具:
87
88```
89./build.sh --product-name hispark_taurus_standard --build-target ark_host_linux_tools_packages
90```
91
92执行如下命令,结果输出到output.pa文件中:
93
94```
95./your code path/out/hispark_taurus/clang_x64/arkcompiler/runtime_core/ark_disasm hello-world.abc output.pa
96```
97
98hello-world.abc反汇编结果如下:
99
100```
101#
102# source binary: hello-world.abc
103#
104
105# ====================
106# LITERALS
107
108# ====================
109# RECORDS
110
111.record _ESAnnotation <external>
112
113.record _ESModuleMode {
114	u8 isModule
115}
116
117# ====================
118# METHODS
119
120.function any func_main_0_any_any_any_any_(any a0, any a1, any a2) <static> {
121	mov v2, a2
122	mov v1, a1
123	mov v0, a0
124	builtin.acc
125	sta v5
126	builtin.idi "print", 0x0 // 加载print函数
127	sta v3
128	lda.str "Hello World!!!"  // 加载Hello World!!!字符串
129	sta v4
130	builtin.tern3 v3, v4  // 调用print函数
131	builtin.acc
132}
133```
134
135## 运行Test262测试用例<a name="section118471435115815"></a>
136
137### 运行前准备
138
1391.  编译方舟运行时,编译命令:
140
141```
142./build.sh --product-name hispark_taurus_standard --build-target ark_js_host_linux_tools_packages
143```
144
1451.  编译方舟前端,编译命令:
146
147```
148./build.sh --product-name hispark_taurus_standard --build-target ark_ts2abc_build
149```
150
151**说明**:编译命令执行路径为项目根目录。
152
153### 运行Test262
154
155运行run\_test262.py脚本,下载及运行Test262用例。
156
157命令行格式:
158
159```
160python3 test262/run_test262.py [options]
161```
162
163执行路径为:项目根目录/arkcompiler/ets_frontend164
165<a name="table11141827153017"></a>
166<table><thead align="left"><tr id="row101462717303"><th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.1"><p id="p51552743010"><a name="p51552743010"></a><a name="p51552743010"></a>选项</p>
167</th>
168<th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.2"><p id="p11592710304"><a name="p11592710304"></a><a name="p11592710304"></a>描述</p>
169</th>
170</tr>
171</thead>
172<tbody><tr id="row2015172763014"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p171592710306"><a name="p171592710306"></a><a name="p171592710306"></a>--h,--help</p>
173</td>
174<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p13151527133011"><a name="p13151527133011"></a><a name="p13151527133011"></a>帮助提示</p>
175</td>
176</tr>
177<tr id="row1015527173015"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p1615182712308"><a name="p1615182712308"></a><a name="p1615182712308"></a>--dir  DIR</p>
178</td>
179<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p9556101593120"><a name="p9556101593120"></a><a name="p9556101593120"></a>选定要测试的目录</p>
180</td>
181</tr>
182<tr id="row1015112763020"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p1815182733012"><a name="p1815182733012"></a><a name="p1815182733012"></a>--file  FILE</p>
183</td>
184<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1615627173019"><a name="p1615627173019"></a><a name="p1615627173019"></a>选定要测试的文件</p>
185</td>
186</tr>
187<tr id="row131515277307"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p111572716304"><a name="p111572716304"></a><a name="p111572716304"></a>--mode  [{1, 2, 3}]</p>
188</td>
189<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1655718513105"><a name="p1655718513105"></a><a name="p1655718513105"></a>模式选择,1:仅默认值;2:仅严格模式;3:默认模式和严格模式</p>
190</td>
191</tr>
192<tr id="row1815112753020"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p2151927193015"><a name="p2151927193015"></a><a name="p2151927193015"></a>--es51</p>
193</td>
194<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1715312588115"><a name="p1715312588115"></a><a name="p1715312588115"></a>运行Test262 ES5.1版本</p>
195</td>
196</tr>
197<tr id="row1915182703012"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p17151527133017"><a name="p17151527133017"></a><a name="p17151527133017"></a>--es2015  [{all, only}]</p>
198</td>
199<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p15761152983113"><a name="p15761152983113"></a><a name="p15761152983113"></a>运行Test262 ES2015版本,all:包含的所有用例;only:仅包括ES2015</p>
200</td>
201</tr>
202<tr id="row10924204611109"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p18924846111013"><a name="p18924846111013"></a><a name="p18924846111013"></a>--esnext</p>
203</td>
204<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p15495042191410"><a name="p15495042191410"></a><a name="p15495042191410"></a>运行Test262-ES.next</p>
205</td>
206</tr>
207<tr id="row5161145010105"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p716125071020"><a name="p716125071020"></a><a name="p716125071020"></a>--engine  FILE</p>
208</td>
209<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p121612050181014"><a name="p121612050181014"></a><a name="p121612050181014"></a>运行测试的其他引擎,指定二进制文件(如:d8,hermes,jsc,qjs...)</p>
210</td>
211</tr>
212<tr id="row1325585931120"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p112561595112"><a name="p112561595112"></a><a name="p112561595112"></a>--babel</p>
213</td>
214<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p32561959111112"><a name="p32561959111112"></a><a name="p32561959111112"></a>是否使用Babel转换</p>
215</td>
216</tr>
217<tr id="row95230818126"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p12523158191210"><a name="p12523158191210"></a><a name="p12523158191210"></a>--timeout  TIMEOUT</p>
218</td>
219<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p65233871210"><a name="p65233871210"></a><a name="p65233871210"></a>设置测试超时时间(以毫秒为单位)</p>
220</td>
221</tr>
222<tr id="row474911612120"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p1274912166123"><a name="p1274912166123"></a><a name="p1274912166123"></a>--threads  THREADS</p>
223</td>
224<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p4749121631210"><a name="p4749121631210"></a><a name="p4749121631210"></a>设置并行运行线程数</p>
225</td>
226</tr>
227<tr id="row561512363122"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p26152036191218"><a name="p26152036191218"></a><a name="p26152036191218"></a>--hostArgs  HOSTARGS</p>
228</td>
229<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p156151636161215"><a name="p156151636161215"></a><a name="p156151636161215"></a>传递给eshost主机的命令行参数</p>
230</td>
231</tr>
232<tr id="row77091648111210"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p18709164871213"><a name="p18709164871213"></a><a name="p18709164871213"></a>--ark-tool  ARK_TOOL</p>
233</td>
234<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p16709194812126"><a name="p16709194812126"></a><a name="p16709194812126"></a>方舟运行时的二进制工具</p>
235</td>
236</tr>
237<tr id="row3767145231210"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p3767155201216"><a name="p3767155201216"></a><a name="p3767155201216"></a>--ark-frontend-tool  ARK_FRONTEND_TOOL</p>
238</td>
239<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p4767195251220"><a name="p4767195251220"></a><a name="p4767195251220"></a>方舟前端转换工具</p>
240</td>
241</tr>
242<tr id="row753817001311"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p553870111318"><a name="p553870111318"></a><a name="p553870111318"></a>--libs-dir  LIBS_DIR</p>
243</td>
244<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p35384041313"><a name="p35384041313"></a><a name="p35384041313"></a>依赖so的路径集合,通过“:”分割</p>
245</td>
246</tr>
247<tr id="row08504716135"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p11851747161314"><a name="p11851747161314"></a><a name="p11851747161314"></a>--ark-frontend  [{ts2panda, es2panda}]</p>
248</td>
249<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1085144712137"><a name="p1085144712137"></a><a name="p1085144712137"></a>指定前端</p>
250</td>
251</tr>
252</tbody>
253</table>
254
255### 测试运行示例
256
257-   运行ES51测试用例:
258
259    ```
260     python3 test262/run_test262.py --es51
261    ```
262
263-   仅运行ES2015测试用例:
264
265    ```
266     python3 test262/run_test262.py --es2015
267    ```
268-   仅运行ES2021测试用例:
269
270    ```
271     python3 test262/run_test262.py --es2021 only
272
273-   运行ES2015和ES51和ES2021所有测试用例:
274
275    ```
276     python3 test262/run_test262.py --es2021 all
277    ```
278
279-   运行单一测试用例:
280
281    ```
282     python3 test262/run_test262.py --file test262/data/test_es5/language/statements/break/12.8-1.js
283    ```
284
285-   运行某目录下所有测试用例:
286
287    ```
288     python3 test262/run_test262.py --dir test262/data/test_es5/language/statements
289    ```
290
291
292-   使用\`babel\`把单个测试用例转换成es5后再运行:
293
294    ```
295     python3 test262/run_test262.py  --babel --file test262/data/test_es5/language/statements/break/12.8-1.js
296    ```
297
298
299### 测试输出
300
301Test262所有用例的测试结果位于项目根目录/arkcompiler/ets_frontend/out下。shell中测试输出结果如下:
302
303```
304$python3 test262/run_test262.py --file test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js
305
306Wait a moment..........
307Test command:
308node
309        test262/harness/bin/run.js
310        --hostType=panda
311        --hostPath=python3
312        --hostArgs='-B test262/run_sunspider.py --ark-tool=/your code path/out/hispark_taurus/clang_x64/arkcompiler/ets_runtime/ark_js_vm --ark-frontend-tool=/your code path/out/hispark_taurus/clang_x64/arkcompiler/ets_frontend/build/src/index.js --libs-dir=/your code path/out/hispark_taurus/clang_x64/global/i18n:/your code path/prebuilts/clang/ohos/linux-x86_64/llvm/lib/ --ark-frontend=ts2panda'
313        --threads=15
314        --mode=only strict mode
315        --timeout=60000
316        --tempDir=build/test262
317        --test262Dir=test262/data
318        --saveCompiledTests
319        test262/data/test_es5/language/statements/break/12.8-1.js
320
321PASS test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js (strict mode)
322Ran 1 tests
3231 passed
3240 failed
325used time is: 0:01:04.439642
326```
327
328