# 开发实例 - [开发实例](#开发实例) - [HelloWorld](#helloworld) - [运行前准备](#运行前准备) - [运行hello-world.js](#运行hello-worldjs) - [反汇编hello-world.abc](#反汇编hello-worldabc) - [运行Test262测试用例](#运行test262测试用例) - [运行前准备](#运行前准备-1) - [运行Test262](#运行test262) - [测试运行示例](#测试运行示例) - [测试输出](#测试输出) 本章节将介绍基于方舟运行时的开发测试实例。 ## HelloWorld ### 运行前准备 1. 编译方舟运行时,编译命令: ``` ./build.sh --product-name Hi3516DV300 --build-target ark_js_host_linux_tools_packages # arm平台和host端运行工具 ``` 2. 编译方舟前端,编译命令: ``` ./build.sh --product-name Hi3516DV300 --build-target ark_ts2abc_build ``` **说明**:编译命令执行路径为项目根目录。 ### 运行hello-world.js 新建hello-world.js文件,写入以下源码: ``` print("Hello World!!!"); ``` 运行步骤: 1. 通过方舟前端生成hello-world.abc文件,编译命令: ``` node --expose-gc /your code path/out/hi3516dv300/clang_x64/ark/ark/build/src/index.js hello-world.js ``` 2. 执行hello-world.abc文件: 1. 设置搜索路径: ``` 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 ``` 2. 执行ark\_js\_vm: ``` /your code path/out/hi3516dv300/clang_x64/ark/ark_js_runtime/ark_js_vm hello-world.abc ``` 执行结果如下: ``` Hello World!!! ``` **说明**:此处“_your code path_”为源码目录路径。 ### 反汇编hello-world.abc 执行如下命令,结果输出到output文件中: ``` ./your code path/out/hi3516dv300/clang_x64/ark/ark/ark_disasm hello-world.abc output ``` hello-world.abc反汇编结果如下: ``` # # source binary: hello-world.abc # # ==================== # LITERALS # ==================== # RECORDS .record _ESAnnotation .record _ESModuleMode { u8 isModule } # ==================== # METHODS .function any func_main_0_any_any_any_any_(any a0, any a1, any a2) { mov.dyn v2, a2 mov.dyn v1, a1 mov.dyn v0, a0 builtin.acc sta.dyn v5 builtin.idi "print", 0x0 // 加载print函数 sta.dyn v3 lda.str "Hello World!!!" // 加载Hello World!!!字符串 sta.dyn v4 builtin.tern3 v3, v4 // 调用print函数 builtin.acc } ``` ## 运行Test262测试用例 ### 运行前准备 1. 编译方舟运行时,编译命令: ``` ./build.sh --product-name Hi3516DV300 --build-target ark_js_host_linux_tools_packages ``` 1. 编译方舟前端,编译命令: ``` ./build.sh --product-name Hi3516DV300 --build-target ark_ts2abc_build ``` **说明**:编译命令执行路径为项目根目录。 ### 运行Test262 运行run\_test262.py脚本,下载及运行Test262用例。 命令行格式: ``` python3 test262/run_test262.py [options] ``` 执行路径为:项目根目录/ark/ts2abc。 选项 描述 --h,--help 帮助提示 --dir DIR 选定要测试的目录 --file FILE 选定要测试的文件 --mode [{1, 2, 3}] 模式选择,1:仅默认值;2:仅严格模式;3:默认模式和严格模式 --es51 运行Test262 ES5.1版本 --es2015 [{all, only}] 运行Test262 ES2015版本,all:包含的所有用例;only:仅包括ES2015 --esnext 运行Test262-ES.next --engine FILE 运行测试的其他引擎,指定二进制文件(如:d8,hermes,jsc,qjs...) --babel 是否使用Babel转换 --timeout TIMEOUT 设置测试超时时间(以毫秒为单位) --threads THREADS 设置并行运行线程数 --hostArgs HOSTARGS 传递给eshost主机的命令行参数 --ark-tool ARK_TOOL 方舟运行时的二进制工具 --ark-frontend-tool ARK_FRONTEND_TOOL 方舟前端转换工具 --libs-dir LIBS_DIR 依赖so的路径集合,通过“:”分割 --ark-frontend [{ts2panda, es2panda}] 指定前端 ### 测试运行示例 - 运行ES51测试用例: ``` python3 test262/run_test262.py --es51 ``` - 仅运行ES2015测试用: ``` python3 test262/run_test262.py --es2015 only ``` - 运行ES2015和ES51所有测试用例: ``` python3 test262/run_test262.py --es2015 all ``` - 运行单一测试用例: ``` python3 test262/run_test262.py --file test262/data/test_es5/language/statements/break/12.8-1.js ``` - 运行某目录下所有测试用例: ``` python3 test262/run_test262.py --dir test262/data/test_es5/language/statements ``` - 使用\`babel\`把单个测试用例转换成es5后再运行: ``` python3 test262/run_test262.py --babel --file test262/data/test_es5/language/statements/break/12.8-1.js ``` ### 测试输出 Test262所有用例的测试结果位于项目根目录/ark/ts2abc/out下。shell中测试输出结果如下: ``` $python3 test262/run_test262.py --file test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js Wait a moment.......... Test command: node test262/harness/bin/run.js --hostType=panda --hostPath=python3 --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' --threads=15 --mode=only strict mode --timeout=60000 --tempDir=build/test262 --test262Dir=test262/data --saveCompiledTests test262/data/test_es5/language/statements/break/12.8-1.js PASS test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js (strict mode) Ran 1 tests 1 passed 0 failed used time is: 0:01:04.439642 ```
选项
描述
--h,--help
帮助提示
--dir DIR
选定要测试的目录
--file FILE
选定要测试的文件
--mode [{1, 2, 3}]
模式选择,1:仅默认值;2:仅严格模式;3:默认模式和严格模式
--es51
运行Test262 ES5.1版本
--es2015 [{all, only}]
运行Test262 ES2015版本,all:包含的所有用例;only:仅包括ES2015
--esnext
运行Test262-ES.next
--engine FILE
运行测试的其他引擎,指定二进制文件(如:d8,hermes,jsc,qjs...)
--babel
是否使用Babel转换
--timeout TIMEOUT
设置测试超时时间(以毫秒为单位)
--threads THREADS
设置并行运行线程数
--hostArgs HOSTARGS
传递给eshost主机的命令行参数
--ark-tool ARK_TOOL
方舟运行时的二进制工具
--ark-frontend-tool ARK_FRONTEND_TOOL
方舟前端转换工具
--libs-dir LIBS_DIR
依赖so的路径集合,通过“:”分割
--ark-frontend [{ts2panda, es2panda}]
指定前端