• 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```
23./build.sh --product-name Hi3516DV300 --build-target ark_js_host_linux_tools_packages  # arm平台和host端运行工具
24```
25
262.  编译方舟前端,编译命令:
27
28```
29./build.sh --product-name Hi3516DV300 --build-target ark_ts2abc_build
30```
31
32**说明**:编译命令执行路径为项目根目录。
33
34### 运行hello-world.js
35
36新建hello-world.js文件,写入以下源码:
37
38```
39 print("Hello World!!!");
40```
41
42运行步骤:
43
441.  通过方舟前端生成hello-world.abc文件,编译命令:
45
46    ```
47    node --expose-gc /your code path/out/hi3516dv300/clang_x64/ark/ark/build/src/index.js hello-world.js
48    ```
49
502.  执行hello-world.abc文件:
51    1.  设置搜索路径:
52
53        ```
54        export LD_LIBRARY_PATH= out/hi3516dv300/clang_x64/ark/ark:out/hi3516dv300/clang_x64/ark/ark_js_runtime:out/hi3516dv300/clang_x64/global/i18n_standard:prebuilts/clang/ohos/linux-x86_64/llvm/lib
55        ```
56
57    2.  执行ark\_js\_vm:
58
59        ```
60        /your code path/out/hi3516dv300/clang_x64/ark/ark_js_runtime/ark_js_vm hello-world.abc
61        ```
62
63        执行结果如下:
64
65        ```
66        Hello World!!!
67        ```
68
69
70
71**说明**:此处“_your code path_”为源码目录路径。
72
73### 反汇编hello-world.abc
74
75执行如下命令,结果输出到output文件中:
76
77```
78./your code path/out/hi3516dv300/clang_x64/ark/ark/ark_disasm hello-world.abc output
79```
80
81hello-world.abc反汇编结果如下:
82
83```
84#
85# source binary: hello-world.abc
86#
87
88# ====================
89# LITERALS
90
91# ====================
92# RECORDS
93
94.record _ESAnnotation <external>
95
96.record _ESModuleMode {
97	u8 isModule
98}
99
100# ====================
101# METHODS
102
103.function any func_main_0_any_any_any_any_(any a0, any a1, any a2) <static> {
104	mov.dyn v2, a2
105	mov.dyn v1, a1
106	mov.dyn v0, a0
107	builtin.acc
108	sta.dyn v5
109	builtin.idi "print", 0x0 // 加载print函数
110	sta.dyn v3
111	lda.str "Hello World!!!"  // 加载Hello World!!!字符串
112	sta.dyn v4
113	builtin.tern3 v3, v4  // 调用print函数
114	builtin.acc
115}
116```
117
118## 运行Test262测试用例<a name="section118471435115815"></a>
119
120### 运行前准备
121
1221.  编译方舟运行时,编译命令:
123
124```
125./build.sh --product-name Hi3516DV300 --build-target ark_js_host_linux_tools_packages
126```
127
1281.  编译方舟前端,编译命令:
129
130```
131./build.sh --product-name Hi3516DV300 --build-target ark_ts2abc_build
132```
133
134**说明**:编译命令执行路径为项目根目录。
135
136### 运行Test262
137
138运行run\_test262.py脚本,下载及运行Test262用例。
139
140命令行格式:
141
142```
143python3 test262/run_test262.py [options]
144```
145
146执行路径为:项目根目录/ark/ts2abc147
148<a name="table11141827153017"></a>
149<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>
150</th>
151<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>
152</th>
153</tr>
154</thead>
155<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>
156</td>
157<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>
158</td>
159</tr>
160<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>
161</td>
162<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>
163</td>
164</tr>
165<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>
166</td>
167<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>
168</td>
169</tr>
170<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>
171</td>
172<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>
173</td>
174</tr>
175<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>
176</td>
177<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>
178</td>
179</tr>
180<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>
181</td>
182<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>
183</td>
184</tr>
185<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>
186</td>
187<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>
188</td>
189</tr>
190<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>
191</td>
192<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>
193</td>
194</tr>
195<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>
196</td>
197<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>
198</td>
199</tr>
200<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>
201</td>
202<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>
203</td>
204</tr>
205<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>
206</td>
207<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>
208</td>
209</tr>
210<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>
211</td>
212<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>
213</td>
214</tr>
215<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>
216</td>
217<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>
218</td>
219</tr>
220<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>
221</td>
222<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>
223</td>
224</tr>
225<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>
226</td>
227<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>
228</td>
229</tr>
230<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>
231</td>
232<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>
233</td>
234</tr>
235</tbody>
236</table>
237
238### 测试运行示例
239
240-   运行ES51测试用例:
241
242    ```
243     python3 test262/run_test262.py --es51
244    ```
245
246-   仅运行ES2015测试用:
247
248    ```
249     python3 test262/run_test262.py --es2015 only
250    ```
251
252-   运行ES2015和ES51所有测试用例:
253
254    ```
255     python3 test262/run_test262.py --es2015 all
256    ```
257
258-   运行单一测试用例:
259
260    ```
261     python3 test262/run_test262.py --file test262/data/test_es5/language/statements/break/12.8-1.js
262    ```
263
264-   运行某目录下所有测试用例:
265
266    ```
267     python3 test262/run_test262.py --dir test262/data/test_es5/language/statements
268    ```
269
270
271-   使用\`babel\`把单个测试用例转换成es5后再运行:
272
273    ```
274     python3 test262/run_test262.py  --babel --file test262/data/test_es5/language/statements/break/12.8-1.js
275    ```
276
277
278### 测试输出
279
280Test262所有用例的测试结果位于项目根目录/ark/ts2abc/out下。shell中测试输出结果如下:
281
282```
283$python3 test262/run_test262.py --file test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js
284
285Wait a moment..........
286Test command:
287node
288        test262/harness/bin/run.js
289        --hostType=panda
290        --hostPath=python3
291        --hostArgs='-B test262/run_sunspider.py --ark-tool=/your code path/out/hi3516dv300/clang_x64/ark/ark_js_runtime/ark_js_vm --ark-frontend-tool=/your code path/out/hi3516dv300/clang_x64/ark/ark/build/src/index.js --libs-dir=/your code path/out/hi3516dv300/clang_x64/ark/ark:/your code path/out/hi3516dv300/clang_x64/global/i18n:/your code path/prebuilts/clang/ohos/linux-x86_64/llvm/lib/ --ark-frontend=ts2panda'
292        --threads=15
293        --mode=only strict mode
294        --timeout=60000
295        --tempDir=build/test262
296        --test262Dir=test262/data
297        --saveCompiledTests
298        test262/data/test_es5/language/statements/break/12.8-1.js
299
300PASS test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js (strict mode)
301Ran 1 tests
3021 passed
3030 failed
304used time is: 0:01:04.439642
305```
306
307