From 33cc5289ecd797947fdcf886b2430b3878e0a3bb Mon Sep 17 00:00:00 2001 From: jiyong Date: Thu, 10 Mar 2022 16:35:12 +0800 Subject: [PATCH] add dfx xts case to master Signed-off-by: jiyong --- hiviewdfx/BUILD.gn | 3 + hiviewdfx/bytracetest/BUILD.gn | 30 ++ hiviewdfx/bytracetest/Test.json | 18 + .../bytracetest/signature/openharmony_sx.p7b | Bin 0 -> 3437 bytes hiviewdfx/bytracetest/src/main/config.json | 60 +++ .../bytracetest/src/main/js/default/app.js | 22 + .../src/main/js/default/i18n/en-US.json | 6 + .../src/main/js/default/i18n/zh-CN.json | 6 + .../src/main/js/default/pages/index/index.css | 9 + .../src/main/js/default/pages/index/index.hml | 5 + .../src/main/js/default/pages/index/index.js | 40 ++ .../src/main/js/default/test/List.test.js | 15 + .../src/main/js/default/test/bytrace_test.js | 199 ++++++++ .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes hiviewdfx/hidebugtest/BUILD.gn | 32 ++ hiviewdfx/hidebugtest/Test.json | 18 + .../hidebugtest/entry/src/main/config.json | 73 +++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 65 +++ .../MainAbility/test/HiDebugJsunit.test.ets | 109 +++++ .../main/ets/MainAbility/test/List.test.ets | 20 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../entry/src/main/resources/rawfile/hand.png | Bin 0 -> 976 bytes .../entry/src/main/resources/rawfile/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/rawfile/images.jpg | Bin 0 -> 3377 bytes .../src/main/resources/rawfile/person.png | Bin 0 -> 1636 bytes .../src/main/resources/rawfile/star-1-1.png | Bin 0 -> 5326 bytes .../src/main/resources/rawfile/star-1-2.png | Bin 0 -> 8295 bytes .../src/main/resources/rawfile/star-1-3.png | Bin 0 -> 5545 bytes .../src/main/resources/rawfile/video/show.mp4 | 0 .../hidebugtest/signature/openharmony_sx.p7b | Bin 0 -> 3437 bytes hiviewdfx/hitracechaintest/BUILD.gn | 32 ++ hiviewdfx/hitracechaintest/Test.json | 18 + .../entry/src/main/config.json | 73 +++ .../entry/src/main/ets/MainAbility/app.ets | 23 + .../src/main/ets/MainAbility/pages/index.ets | 65 +++ .../test/ByTraceHiDebugJsunit.test.ets | 384 +++++++++++++++ .../test/HiTraceChainJsunit.test.ets | 443 ++++++++++++++++++ .../main/ets/MainAbility/test/List.test.ets | 22 + .../main/resources/base/element/string.json | 12 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../entry/src/main/resources/rawfile/hand.png | Bin 0 -> 976 bytes .../entry/src/main/resources/rawfile/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/rawfile/images.jpg | Bin 0 -> 3377 bytes .../src/main/resources/rawfile/person.png | Bin 0 -> 1636 bytes .../src/main/resources/rawfile/star-1-1.png | Bin 0 -> 5326 bytes .../src/main/resources/rawfile/star-1-2.png | Bin 0 -> 8295 bytes .../src/main/resources/rawfile/star-1-3.png | Bin 0 -> 5545 bytes .../src/main/resources/rawfile/video/show.mp4 | 0 .../signature/openharmony_sx.p7b | Bin 0 -> 3437 bytes 52 files changed, 1849 insertions(+) create mode 100644 hiviewdfx/bytracetest/BUILD.gn create mode 100644 hiviewdfx/bytracetest/Test.json create mode 100644 hiviewdfx/bytracetest/signature/openharmony_sx.p7b create mode 100644 hiviewdfx/bytracetest/src/main/config.json create mode 100644 hiviewdfx/bytracetest/src/main/js/default/app.js create mode 100644 hiviewdfx/bytracetest/src/main/js/default/i18n/en-US.json create mode 100644 hiviewdfx/bytracetest/src/main/js/default/i18n/zh-CN.json create mode 100644 hiviewdfx/bytracetest/src/main/js/default/pages/index/index.css create mode 100644 hiviewdfx/bytracetest/src/main/js/default/pages/index/index.hml create mode 100644 hiviewdfx/bytracetest/src/main/js/default/pages/index/index.js create mode 100644 hiviewdfx/bytracetest/src/main/js/default/test/List.test.js create mode 100644 hiviewdfx/bytracetest/src/main/js/default/test/bytrace_test.js create mode 100644 hiviewdfx/bytracetest/src/main/resources/base/element/string.json create mode 100644 hiviewdfx/bytracetest/src/main/resources/base/media/icon.png create mode 100644 hiviewdfx/hidebugtest/BUILD.gn create mode 100644 hiviewdfx/hidebugtest/Test.json create mode 100644 hiviewdfx/hidebugtest/entry/src/main/config.json create mode 100644 hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/app.ets create mode 100644 hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/HiDebugJsunit.test.ets create mode 100644 hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/base/element/string.json create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/base/media/icon.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/hand.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/icon.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/images.jpg create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/person.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/star-1-1.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/star-1-2.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/star-1-3.png create mode 100644 hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/video/show.mp4 create mode 100644 hiviewdfx/hidebugtest/signature/openharmony_sx.p7b create mode 100644 hiviewdfx/hitracechaintest/BUILD.gn create mode 100644 hiviewdfx/hitracechaintest/Test.json create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/config.json create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/app.ets create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/pages/index.ets create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/ByTraceHiDebugJsunit.test.ets create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/HiTraceChainJsunit.test.ets create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/List.test.ets create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/base/element/string.json create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/base/media/icon.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/hand.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/icon.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/images.jpg create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/person.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/star-1-1.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/star-1-2.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/star-1-3.png create mode 100644 hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/video/show.mp4 create mode 100644 hiviewdfx/hitracechaintest/signature/openharmony_sx.p7b diff --git a/hiviewdfx/BUILD.gn b/hiviewdfx/BUILD.gn index 0406a0344..34cbeef9a 100755 --- a/hiviewdfx/BUILD.gn +++ b/hiviewdfx/BUILD.gn @@ -15,8 +15,11 @@ group("hiviewdfxtestacts") { testonly = true if (is_standard_system) { deps = [ + "bytracetest:ActsBytraceJsTest", "hiappeventtest/hiappeventjstest:ActsHiAppeventTest", "hicheckertest/hicheckerjstest:hicheckerjstest", + "hidebugtest:ActsHiDebugTest", + "hitracechaintest:ActsHiTraceChainTest", "hiview/faultlogger/faultloggerjs:faultloggerjs_test", ] } diff --git a/hiviewdfx/bytracetest/BUILD.gn b/hiviewdfx/bytracetest/BUILD.gn new file mode 100644 index 000000000..fc4403651 --- /dev/null +++ b/hiviewdfx/bytracetest/BUILD.gn @@ -0,0 +1,30 @@ +# Copyright (C) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//test/xts/tools/build/suite.gni") +ohos_js_hap_suite("ActsBytraceJsTest") { + hap_profile = "./src/main/config.json" + deps = [ + ":bytrace_assets", + ":bytrace_resources", + ] + certificate_profile = "./signature/openharmony_sx.p7b" + hap_name = "ActsByTraceJsTest" +} +ohos_js_assets("bytrace_assets") { + source_dir = "./src/main/js/default" +} +ohos_resources("bytrace_resources") { + sources = [ "./src/main/resources" ] + hap_profile = "./src/main/config.json" +} diff --git a/hiviewdfx/bytracetest/Test.json b/hiviewdfx/bytracetest/Test.json new file mode 100644 index 000000000..ccbfd83b7 --- /dev/null +++ b/hiviewdfx/bytracetest/Test.json @@ -0,0 +1,18 @@ +{ + "description": "Configuration for bytrace demo Tests", + "driver": { + "type": "JSUnitTest", + "test-timeout": "300000", + "package": "ohos.bytrace.test", + "shell-timeout": "60000" + }, + "kits": [ + { + "test-file-name": [ + "ActsByTraceJsTest.hap" + ], + "type": "AppInstallKit", + "cleanup-apps": true + } + ] +} diff --git a/hiviewdfx/bytracetest/signature/openharmony_sx.p7b b/hiviewdfx/bytracetest/signature/openharmony_sx.p7b new file mode 100644 index 0000000000000000000000000000000000000000..9be1e98fa4c0c28ca997ed660112fa16b194f0f5 GIT binary patch literal 3437 zcmcgvX>b$g8MY4FF(5FQyMT=#m||qU)nQ9cId-MBB-<-lvSdq&snM}IENNF>t+bK| zgowuF2vC|SxSZxNN5eHhV%(WPpbeB9Fc3;JDMtzMBv1-XAc2N~c2_tCXW&OCGw6qQ z-s9VS-tT?h=bI0tMS+~WDXqHJyCPmLzdbE-fV8Nd&*MRZfG8(#POFZG3xs@Lb{0ry z=R8j3wWo!5g=yjKx#BoZMFS)uA)H}cTp@-^K`9VV?RC3J59@}eik*>n|pRKOLZ zxdn7G!Yv@9O#y<&eUy{)vMXb;fQR)ffVAADQsEMXm;IBMDLfLD0w^U;6%HVo-0Q_5 zCHEa?DBuauNpZzoF+tK27w#n~?u%toS-DhR4k@Q*{7x^8Q=D6&kd^_~J#VVG2LXkL zaAy=}U*?Jto)9hx5MGjdp9hcQAu@tfk_;l!PeyxPY<8b&+&D!CyaBh9=8BSVKLpk4 z4Ml3yY|&Th)vyK4cpC{!uU8v2YBlVV`d~(nz&<@{G1oe*DHub1z7~J5*;s2bX<)_* zV_GbsPQg`(&rpxRb_*Od7}++3+liSw-$!1 zs5*g}EHWhI3i|!-FcfzYL0`SL-rq>LENC;PMl)G(0(1U2%Va|smp0UFx0xd@soZA* zD5LYc4OlbE7@ARt#h}rr3>K@bf%B#^-c+xz8Hr)0D5ExIFltezN@Hn8>o5d~bSfYtkc+_Z&kI#-N5_GhCg*V-^TSO=!G~ z(fXy{n2XV+k}6w_W`dTOP2a4u0ly;ANZ>4OxSKAzFB!yBzdo`gX zO?o|H@WiAw$y6l?=^3jA_Hy0S)nTYs12;4hKE&ekQ|>?|ZLJ}#F`2BczC7kdE4@xV zZBD_)Otwjhz+NSaz?d45!;FsGSu-#qh#hStD%B}f!mCT!KqzSo>I`NGH_9Dea$1Qi zg29Ydt!~lQVR99_T7#Hije~(12drl-P)SV?QR*9sus`8th-8^OQ7@xI$(Yp|^;bL1 zR50O$mDXw6P>i7B(TJ)ciPzTE>XY%X6HAa)b#OBRXv&~%Bw|J#Y><i4=e%95bjtw|cJp=#P#Pf#*luqI_wR;fISDCJhAqSG6R%xItn%~QtZ@m%&u zjGGLX;t6Ls62eQvNmf@v+}J%54^CygxRZ`?8X#r|wkev7(s;Ou4T#y1XNNf)h;o7z z8a^Lfq<1uH`E{G9E z*(=)Css_LSk=>E9jr)s5^2-!+MN=Ds}>1hRma4`uCIz9%p3O77839E{xf z4c_I?**|1`K2tg4!Hvyrou4BsJQuv*UfF)<%CelYIS>D^o?X)3+MK%la6kooW8&G@BU)Y0hT`+mOm$Z_%rB=a%o>I z!2c6lHyKQN)VjiFwa!eE^p8jc$sy$vB+8i25lI~6KPFFh$!o$avA~rj#L6xvR|Z83 z*WD6T9e+5Pyy=F+)pNTf{ny3cy>7Rkd3o*TS?TZJ`NS^NF2%HMkyS{?uJ$`!P4_L^ z1`NFDUbNyg_qREifgktnp1_v{Jbb`7m}2PTyUdOmtJj~m z9bB=ecw4_^rw1IW=of+>nrW5=d3k`3qHCxsIN_F{T1A545};;+fsyC&qChi+YV zr~M63H8ZLCPYmsjY>ls9cL%I)F|JIW-#+48$+lD4k*(P*kDM%zx_fvu4u5ZYUnI}5 zdrycFq>xFU)&X3p@pP2u%$o}}YcRn(MhJ&B2o?KS@cIVz>Ye%o^xV?CB{_Qhu z;}_q1bvO^g{8<3!gYbo4Di{8qzV+(9 zdlmksohQmRTs@qB;(Wo?dER_ux6XQb@q$tQPW?CMu6GVQd;R=iR;-S{Kr%Zks7>b1 zNs{|-+jhObYE}NR&`TGGr^h^4bjh%c>R#@=8nM&Md>_a+zVulsl;){flFekV1t9ob z+SqfV_Pv3$2f)bQ8%Ul2>fdYR^1zs0BQF~olsOj5AodC&Q_7SMFzsz2 z9newxE&jodk~tNHwl%LBMMDbrk=(^b literal 0 HcmV?d00001 diff --git a/hiviewdfx/bytracetest/src/main/config.json b/hiviewdfx/bytracetest/src/main/config.json new file mode 100644 index 000000000..2cb65c9df --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/config.json @@ -0,0 +1,60 @@ +{ + "app": { + "bundleName": "ohos.bytrace.test", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5 + } + }, + "deviceConfig": {}, + "module": { + "package": "ohos.bytrace.test", + "name": ".MyApplication", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "ohos.bytrace.test.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "MyApplication", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} diff --git a/hiviewdfx/bytracetest/src/main/js/default/app.js b/hiviewdfx/bytracetest/src/main/js/default/app.js new file mode 100644 index 000000000..4b241cccb --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/app.js @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export default { + onCreate() { + console.info('AceApplication onCreate'); + }, + onDestroy() { + console.info('AceApplication onDestroy'); + } +}; diff --git a/hiviewdfx/bytracetest/src/main/js/default/i18n/en-US.json b/hiviewdfx/bytracetest/src/main/js/default/i18n/en-US.json new file mode 100644 index 000000000..e63c70d97 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/i18n/en-US.json @@ -0,0 +1,6 @@ +{ + "strings": { + "hello": "Hello", + "world": "World" + } +} \ No newline at end of file diff --git a/hiviewdfx/bytracetest/src/main/js/default/i18n/zh-CN.json b/hiviewdfx/bytracetest/src/main/js/default/i18n/zh-CN.json new file mode 100644 index 000000000..de6ee5748 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/i18n/zh-CN.json @@ -0,0 +1,6 @@ +{ + "strings": { + "hello": "您好", + "world": "世界" + } +} \ No newline at end of file diff --git a/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.css b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.css new file mode 100644 index 000000000..6fda79275 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.css @@ -0,0 +1,9 @@ +.container { + flex-direction: column; + justify-content: center; + align-items: center; +} + +.title { + font-size: 100px; +} diff --git a/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.hml b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.hml new file mode 100644 index 000000000..f64b040a5 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.hml @@ -0,0 +1,5 @@ +
+ + {{ $t('strings.hello') }} {{ title }} + +
diff --git a/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.js b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.js new file mode 100644 index 000000000..d807d5967 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/pages/index/index.js @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {Core, ExpectExtend, Constant} from 'deccjsunit/index' + +export default { + data: { + title: "" + }, + onInit() { + this.title = this.$t('strings.world'); + }, + onShow() { + console.info('onShow finish') + const core = Core.getInstance() + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }) + core.addService('expect', expectExtend) + core.init() + const configService = core.getDefaultService('config') + configService.setConfig(this) + + require('../../test/List.test') + core.execute() + }, + onReady() { + }, +} \ No newline at end of file diff --git a/hiviewdfx/bytracetest/src/main/js/default/test/List.test.js b/hiviewdfx/bytracetest/src/main/js/default/test/List.test.js new file mode 100644 index 000000000..6a7b6b3b6 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/test/List.test.js @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +require('./bytrace_test.js'); \ No newline at end of file diff --git a/hiviewdfx/bytracetest/src/main/js/default/test/bytrace_test.js b/hiviewdfx/bytracetest/src/main/js/default/test/bytrace_test.js new file mode 100644 index 000000000..11137f8b4 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/js/default/test/bytrace_test.js @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' +import bytrace from "@ohos.bytrace" + +describe("BytraceTest", function () { + + async function msleep(time) { + var promise = new Promise((resolve, reject) => { + setTimeout(() => resolve("done!"), time); + }); + var result = await promise; + } + + it("DFX_DFR_Bytrace_0100", 0, async function (done) { + console.info("-------DFX_DFR_Bytrace_0100 start--------"); + await msleep(3000); + for (var i = 0; i < 3; i++) { + console.info("DFX_DFR_Bytrace_0100 i = " + i) + console.info("DFX_DFR_Bytrace_0100 " + i.toString() + " startTrace start"); + bytrace.startTrace("test-" + i.toString(), 111 + i, 5000); + console.info("DFX_DFR_Bytrace_0100 " + i.toString() + "startTrace end"); + + // await msleep(3000); + + console.info("DFX_DFR_Bytrace_0100 " + i.toString() + " finishTrace start"); + bytrace.finishTrace("test-" + i.toString(), 111 + i); + console.info("DFX_DFR_Bytrace_0100 " + i.toString() + "finishTrace end"); + } + + console.info("DFX_DFR_Bytrace_0100 end"); + done(); + }) + + it("DFX_DFR_Bytrace_0200", 0, async function (done) { + console.info("------DFX_DFR_Bytrace_0200 start------"); + // Normal condition + try { + console.info("DFX_DFR_Bytrace_0200 1 start"); + bytrace.startTrace("test2", 222); + expect(true).assertTrue(); + console.info("DFX_DFR_Bytrace_0200 1 success"); + } catch (err) { + console.info("DFX_DFR_Bytrace_0200 1 fail!"); + console.info("DFX_DFR_Bytrace_0200 1 err = " + err); + expect(false).assertTrue(); + } + // Abnormal condition, Pass only one parameter + try { + console.info("DFX_DFR_Bytrace_0200 2 start"); + bytrace.startTrace("test2"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0200 2 fail!"); + console.info("DFX_DFR_Bytrace_0200 2 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Pass multiple parameters + try { + console.info("DFX_DFR_Bytrace_0200 3 start"); + bytrace.startTrace("test2", 222, 2000, 2); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0200 3 fail!"); + console.info("DFX_DFR_Bytrace_0200 3 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Parameter format mismatch + try { + console.info("DFX_DFR_Bytrace_0200 4 start"); + bytrace.startTrace(2, "222", "2000"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0200 4 fail!"); + console.info("DFX_DFR_Bytrace_0200 4 err = " + err); + expect(true).assertTrue(); + } + console.info("------DFX_DFR_Bytrace_0200 end------"); + done(); + }) + + it("DFX_DFR_Bytrace_0300", 0, async function (done) { + console.info("------DFX_DFR_Bytrace_0300 start------"); + // Normal condition + try { + console.info("DFX_DFR_Bytrace_0300 1 start") + bytrace.finishTrace("test3", 111); + expect(true).assertTrue(); + console.info("DFX_DFR_Bytrace_0300 1 success"); + } catch (err) { + console.info("DFX_DFR_Bytrace_0300 1 fail!"); + console.info("DFX_DFR_Bytrace_0300 1 err = " + err); + expect(false).assertTrue(); + } + // Abnormal condition, Pass only one parameter + try { + console.info("DFX_DFR_Bytrace_0300 2 start") + bytrace.finishTrace("test3"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0300 2 fail!"); + console.info("DFX_DFR_Bytrace_0300 2 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Pass multiple parameters + try { + console.info("DFX_DFR_Bytrace_0300 3 start") + bytrace.finishTrace("test3", 1, 1); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0300 3 fail!"); + console.info("DFX_DFR_Bytrace_0300 3 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Parameter format mismatch + try { + console.info("DFX_DFR_Bytrace_0300 4 start") + bytrace.finishTrace(1, "123"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0300 4 fail!"); + console.info("DFX_DFR_Bytrace_0300 4 err = " + err); + expect(true).assertTrue(); + } + console.info("------DFX_DFR_Bytrace_0300 end------"); + done(); + }) + + it("DFX_DFR_Bytrace_0400", 0, async function (done) { + console.info("-------DFX_DFR_Bytrace_0400 start--------"); + for (var i = 0; i < 3; i++) { + console.info("DFX_DFR_Bytrace_0400 :" + i); + bytrace.traceByValue("test4-" + i.toString(), 3 + i); + await msleep(1000); + } + console.info("DFX_DFR_Bytrace_0400 end"); + done(); + }) + + it("DFX_DFR_Bytrace_0500", 0, async function (done) { + console.info("-------DFX_DFR_Bytrace_0500 start--------"); + // Normal condition + try { + console.info("DFX_DFR_Bytrace_0500 1 start") + bytrace.traceByValue("test5", 5); + expect(true).assertTrue(); + console.info("DFX_DFR_Bytrace_0500 1 success") + } catch (err) { + console.info("DFX_DFR_Bytrace_0500 1 fail!"); + console.info("DFX_DFR_Bytrace_0500 1 err = " + err); + expect(false).assertTrue(); + } + // Abnormal condition, Pass only one parameter + try { + console.info("DFX_DFR_Bytrace_0500 2 start") + bytrace.traceByValue("test5"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0500 2 fail!"); + console.info("DFX_DFR_Bytrace_0500 2 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Pass multiple parameters + try { + console.info("DFX_DFR_Bytrace_0500 3 start") + bytrace.traceByValue("test5", 3, 1); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0500 3 fail!"); + console.info("DFX_DFR_Bytrace_0500 3 err = " + err); + expect(true).assertTrue(); + } + // Abnormal condition, Parameter format mismatch + try { + console.info("DFX_DFR_Bytrace_0500 4 start") + bytrace.traceByValue(1, "123"); + expect(false).assertTrue(); + } catch (err) { + console.info("DFX_DFR_Bytrace_0500 4 fail!"); + console.info("DFX_DFR_Bytrace_0500 4 err = " + err); + expect(true).assertTrue(); + } + console.info("------DFX_DFR_Bytrace_0500 end------"); + done(); + }) + +}) \ No newline at end of file diff --git a/hiviewdfx/bytracetest/src/main/resources/base/element/string.json b/hiviewdfx/bytracetest/src/main/resources/base/element/string.json new file mode 100644 index 000000000..3b8a6fe60 --- /dev/null +++ b/hiviewdfx/bytracetest/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "app_name", + "value": "FaultloggerJs" + }, + { + "name": "mainability_description", + "value": "hap sample empty page" + } + ] +} diff --git a/hiviewdfx/bytracetest/src/main/resources/base/media/icon.png b/hiviewdfx/bytracetest/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + Want.parameters['timeout'] = 100000 + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('ACE ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('100%') + } +} + diff --git a/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/HiDebugJsunit.test.ets b/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/HiDebugJsunit.test.ets new file mode 100644 index 000000000..e058ca8be --- /dev/null +++ b/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/HiDebugJsunit.test.ets @@ -0,0 +1,109 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {describe, it, expect} from "deccjsunit/index.ets"; +import hiDebug from '@ohos.hidebug' + +export default function hiDebugJsunit() { + describe('hiDebugTest', function () { + console.log("************* hiDebug Test start*************"); + /* + * @tc.number : DFX_DFR_Hiprofiler_Interface_0001 + * @tc.name : getNativeHeapSize + * @tc.desc : Get total native heap memory size + */ + it('DFX_DFR_Hiprofiler_Interface_0001', 0, async function (done) { + console.log("************* DFX_DFR_Hiprofiler_Interface_0001 Test start*************"); + try { + let heapSize = hiDebug.getNativeHeapSize(); + expect(heapSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_DFR_Hiprofiler_Interface_0001 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_DFR_Hiprofiler_Interface_0002 + * @tc.name : getNativeHeapAllocatedSize + * @tc.desc : Get Native heap memory allocation size. + */ + it('DFX_DFR_Hiprofiler_Interface_0002', 0, async function (done) { + console.log("************* DFX_DFR_Hiprofiler_Interface_0002 Test start*************"); + try { + let heapAllocatedSize = hiDebug.getNativeHeapAllocatedSize(); + expect(heapAllocatedSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_DFR_Hiprofiler_Interface_0002 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_DFR_Hiprofiler_Interface_0003 + * @tc.name : getNativeHeapFreeSize + * @tc.desc : Get Native heap memory free size + */ + it('DFX_DFR_Hiprofiler_Interface_0003', 0, async function (done) { + console.log("************* DFX_DFR_Hiprofiler_Interface_0003 Test start*************"); + try { + let heapFreeSize = hiDebug.getNativeHeapFreeSize(); + expect(heapFreeSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_DFR_Hiprofiler_Interface_0003 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_DFR_Hiprofiler_Interface_0004 + * @tc.name : getPss + * @tc.desc : Get application process proportional set size memory information + */ + it('DFX_DFR_Hiprofiler_Interface_0004', 0, async function (done) { + console.log("************* DFX_DFR_Hiprofiler_Interface_0004 Test start*************"); + try { + let pss = hiDebug.getPss(); + expect(pss).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_DFR_Hiprofiler_Interface_0004 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_DFR_Hiprofiler_Interface_0005 + * @tc.name : getSharedDirty + * @tc.desc : Obtains the size of the shared dirty memory of a process. + */ + it('DFX_DFR_Hiprofiler_Interface_0005', 0, async function (done) { + console.log("************* DFX_DFR_Hiprofiler_Interface_0005 Test start*************"); + try { + let dirty = hiDebug.getSharedDirty(); + expect(dirty).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_DFR_Hiprofiler_Interface_0005 Test end*************"); + done(); + }); + + console.log("************* hiDebug Test end*************"); + }) +} diff --git a/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/List.test.ets b/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..e44193683 --- /dev/null +++ b/hiviewdfx/hidebugtest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,20 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import hiDebugJsunit from './HiDebugJsunit.test.ets'; +export default function testsuite() { + hiDebugJsunit(); +} \ No newline at end of file diff --git a/hiviewdfx/hidebugtest/entry/src/main/resources/base/element/string.json b/hiviewdfx/hidebugtest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..03b8532c5 --- /dev/null +++ b/hiviewdfx/hidebugtest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/hiviewdfx/hidebugtest/entry/src/main/resources/base/media/icon.png b/hiviewdfx/hidebugtest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 zcmX|G1ymHk)?T_}Vd;>R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y126oEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D17%4>K~z{r?U>7J z6hRP&_n#BRn+Go*ym=7BLqIPcGz1g^3Zg_MA_*7*5fKp;l>|Z{paujDN|3NI@7Y(f zkJ-&Ww4ASYYuUth&1@z(f&)K#rn|c9o9gP`*-pqmbR{-7Hzf{Ar_++nW~ERlNWETf z;qAT>l}bh8Am8_;SS-rc)|P@J>N~I4!0r{`2Hj{hny{r($!Q!H<@0&*JWs0Csw8r` zoRrIDr(s+~lmSi<;!GyvG>Ve|)~$=x=rV|#{==3RW~IEo;A}gHB8LUk8@(uNLuV!X z{Fc+ES49q+dvjlMQzKH}_9Q)VHB#WnVS!BcACuDO8L6a}WMkxlzJSX%tPTZs<@zaw z^_S;0cS(uT^qA8=j3S5qQLkxa0X31w8tsph&OZB9*5z22Uy^dAt4giGoumuN;-Sx9IHmCq)WN3NYpD1{&R`Hx#U%StGCZILA$8&Wm*ca z?zBO9Mnv2jKCi(0$>E-1S=p@k+FUTLpC*41FJkwAG3^G4tc|pw4Y4>~zDzyA7C*d} zrGewJGczvL*@>oOpj)Dzb^x?Js3WrZ7el-3XhSSQQiWf>ZeMGmVcC)Z!MQo>bV@`^ zfelfoBrmPb?veGew!+K1+TQIuA`~psM2<4JIx)DQq|Tgr;{zHcoD)rQ67h{dJ2GhN zgB?3cWUxRnpgL$xD>7$HB?79m1b$x+1%{!n0Ta8>ZliVTSMwc$P$ z=|Y5oro^6mY^|U5MYKf<%YZB#n`Q*00g|gIdHINb#IQX9L<+HZs8?YAO$7GVSIbCY z1Lq7##MpAov4RF=GWfZrzS|ZAF!@VLwEMP10J?ofhJr-^+Xjwfn_BxTv)BH2;s*j~ z(uPIL7`&*<))X4{Z%ScPsg$1LxeVeYh2{8&;~AGhoTRWE;BqeNGKiBDmg7V_yp6LI ymW#ZNdn&YHIirpH(PtZ$i&WsG*=6|mRgs_JbF5c~;V8fW0000R?p|tHQo6fg38|$UVM!6BLrPFWk?s;$LOP{GmJpBl$qoSA!PUg~PA65-S00{{S`XKG6NkG0RgjEntPrmV+?0|00mu7;+5 zrdpa{2QLqPJ4Y{j7=Mrl{BaxrkdY69+c~(w{Fv-v&aR%aEI&JYSeRTLWm!zbv;?)_ ziZB;fwGbbeL5Q}YLx`J$lp~A09KK8t_z}PZ=4ZzgdeKtgoc+o5EvN9A1K1_<>M?MBqb#!ASf&# zEX?<)!RH(7>1P+j=jqG(58}TVN-$psA6K}atCuI!KTJD&FMmH-78ZejBm)0qc{ESp z|LuG1{QnBUJRg_E=h1#XMWt2%fcoN@l7eAS!Es?Q+;XsRNPhiiE=@AqlLkJzF`O18 zbsbSmKN=aaq8k3NFYZfDWpKmM!coBU0(XnL8R{4=i|wi{!uWYM2je{U{B*K2PVdu&=E zTq*-XsEsJ$u5H4g6DIm2Y!DN`>^v|AqlwuCD;w45K0@eqauiqWf7l&o)+YLHm~|L~ z7$0v5mkobriU!H<@mVJHLlmQqzQ3d6Rh_-|%Yy2li*tHO>_vcnuZ7OR_xkAIuIU&x z-|8Y0wj|6|a6_I(v91y%k_kNw6pnkNdxjqG8!%Vz_d%c_!X+6-;1`GC9_FpjoHev5fEV7RhJ>r=mh-jp$fqbqRJ=obwdgLDVP5+s zy1=_DWG0Y-Jb3t^WXmkr(d9~08k-|#Ly zaNOmT(^9tIb&eb4%CzIT zAm3CUtWSr1t4?h1kk#NBi{U|pJslvME{q|_eS^3En>SOqSxyuN1x;Is@8~m?*>}** znrRFArP!K_52RpX*&JHMR<^lVdm8ypJ}0R(SD(51j;6@ni$6bQ+2XL+R^|NnSp5}(kzvMZ^(@4fD_{QVu$(&K6H|C37TG1Am9Re{<<3gd zh@`>;BqkXMW&p0T6rt|iB$)~CvFe(XC)F9WgAZn*0@t$oZo;!*}r@_`h?KKH&6A@3= zISXoQB+~`op>NP-buiA*^0n{@i{_?MRG)&k)c)k_F+-2Lud!S9pc+i`s74NpBCaGF zXN+pHkubw*msGBTY27BKHv)RRh3;nMg4&$fD_6X9Vt~;_4D+5XPH~#Kn-yjcy!$}1 zigv#FNY>TqMhtIBb@UoF!cE~Q8~;!Pek>SQQwHnHuWKoVBosAiOr}q>!>aE*Krc)V zBUMEcJ5NU0g8}-h6i1zpMY9>m4ne?=U2~`w7K7Q0gB_=p@$5K7p6}thw z-~3dMj?YNX2X$lZ+7ngQ$=s}3mizNN@kE%OtB)?c&i~2L55z8^=yz;xMHLmlY>&Q# zJj?!)M#q_SyfkQh)k?j8IfLtB)ZCp|*vf4_B zos?73yd^h-Ac+;?E4*bpf=o*^3x3-`TVjbY4n6!EN10K6o@fxdyps05Vo3PU)otB} z`3kR+2w7_C#8Z!q`J)p{Vh!+m9-UP!$STp+Hb}}#@#_u^SsUQg<}59< zTvH3%XS4G+6FF^(m6bVF&nSUIXcl;nw{=H$%fgeJ>CgDYiLdpDXr{;-AnG z8dvcrHYVMI&`R6;GWekI@Ir3!uo)oz4^{6q0m^}@f2tM9&=YHNi6-?rh0-{+k@cQm zdp`g#YdQn%MDVg2GR>wZ`n2<0l4)9nx1Wfr&!Dvz=bPwU!h2S?ez6MVc5APE4-xLB zi&W9Q8k2@0w!C53g?iAIQ}~p*3O(@zja6KQ=M3zfW*_6o5SwR-)6VBh~m7{^-=MC-owYH5-u40a}a0liho3QZZ5L{bS_xM1)4}19)zTU$$MY zq3eZML1WC{K%YFd`Be0M-rkO^l?h{kM{$2oK1*A@HVJ57*yhDkUF!2WZ&oA4Y-sK( zCY69%#`mBCi6>6uw(x4gbFaP0+FD*JKJ-q!F1E?vLJ+d35!I5d7@^eU?(CS|C^tmI5?lv@s{{*|1F zFg|OzNpZ0hxljdjaW%45O0MOttRrd(Z?h{HYbB-KFUx&9GfFL3b8NwZ$zNu)WbBD` zYkj$^UB5%3Pj1MDr>S2Ejr9pUcgA!;ZG!@{uAy12)vG=*^9-|dNQBc8&`oxBlU~#y zs!anJX&T?57Jdr^sb>e+V`MVfY>Y0ESg7MG<7W0g&bR-ZYzzZ%2H&Etcp zcd6QeXO1D!5A#zM0lx*GH}`M)2~ZFLE;sP^RSB5wVMNfiZXPd(cmO>j=OSA3`o5r& zna(|^jGXbdN7PK)U8b7^zYtYkkeb%<%F~=OqB~kXMQkq}ii|skh@WSRt>5za;cjP0 zZ~nD%6)wzedqE}BMLt~qKwlvTr33))#uP~xyw#*Eaa|DbMQ_%mG0U8numf8)0DX`r zRoG2bM;#g|p-8gWnwRV5SCW0tLjLO&9Z?K>FImeIxlGUgo0Zk`9Qzhj1eco~7XZy+hXc@YF&ZQ=? zn*^1O56yK^x{y}q`j7}blGCx%dydV!c7)g~tJzmHhV=W~jbWRRR{1<^oDK+1clprm zz$eCy7y9+?{E|YgkW~}}iB#I4XoJ*xr8R?i_Hv$=Cof5bo-Nj~f`-DLebH}&0% zfQj9@WGd4;N~Y?mzQsHJTJq6!Qzl^-vwol(+fMt#Pl=Wh#lI5Vmu@QM0=_r+1wHt` z+8WZ~c2}KQQ+q)~2Ki77QvV&`xb|xVcTms99&cD$Zz4+-^R4kvUBxG8gDk7Y`K*)JZ^2rL(+ZWV~%W(@6 z)0bPArG#BROa_PHs~&WplQ_UIrpd)1N1QGPfv!J(Z9jNT#i%H?CE6|pPZb9hJ1JW4 z^q;ft#!HRNV0YgPojzIYT`8LuET2rUe-J|c!9l4`^*;4WtY@Ew@pL>wkjmMgGfN7 ze}}GtmU0@<_#08~I-Suk=^*9GLW=H4xhsml;vAV{%hy5Eegl@!6qKqbG024%n2HHw zCc@ivW_$@5ZoHP70(7D+(`PvgjW1Pd`wsiuv-aCukMrafwDm)B!xXVy*j2opohhoU zcJz%ADmj>i3`-3-$7nQKBQQuGY;2Qt&+(L~C>vSGFj5{Mlv?T_^dql;{zkpe4R1}R z%XfZyQ}wr*sr>jrKgm*PWLjuVc%6&&`Kbf1SuFpHPN&>W)$GmqC;pIoBC`=4-hPY8 zT*>%I2fP}vGW;R=^!1be?ta2UQd2>alOFFbVl;(SQJ4Jk#)4Z0^wpWEVvY4=vyDk@ zqlModi@iVPMC+{?rm=4(n+<;|lmUO@UKYA>EPTS~AndtK^Wy^%#3<;(dQdk3WaUkRtzSMC9}7x2||CNpF#(3T4C)@ z$~RWs`BNABKX|{cmBt>Q=&gkXl&x!!NK_%5hW0LS)Z4PB>%sV?F-{Wyj#s7W%$F{D zXdK^Fp3wvy+48+GP6F_|^PCRx=ddcTO3sG;B23A49~Qaw31SZ0Rc~`r4qqt%#OGW{ zCA_(LG5^N>yzUn&kAgVmxb=EA8s&tBXC}S1CZ(KoW)(%^JjLTPo^fs`Va;`=YlVPgmB$!yB}<(4ym6OeZ3xAJJ#;)2+B%p3P1Wt+d$eo`vz`T zXfUP2))kBDPoscH;Jc7I3NU<({|@wM$&GaDt`n7WLgIY3IA7A6-_R?z8N3mz|}*i z(zl5ot--Oq@f2-nv{X(ujT2T(k1vY_qh93pK@>H-qc%2Xta)IP0Q%zt%bqYgI`o!wv!0QerB`nCN^1n|@$sVOQ!V0teVG!I z_fD%JvfDeT1cK#-{o6Gv7}& zY0#NWin~kVaf$aufV&;63Hbs|`QVZWpDX6IMk1Hj2G}fiH9e-^6u2zf^FIr^BwD<6zjw63+{yUe8PUFvk8v{sJ=R{d#`O!sz`Q13~< zPT$JS(w=yQfU2`zPCNfSw=&zup@DXc(98afjhv@1w_f!m2Z>rMJ19AB&dB%P#Ls3b z=lK7OILM+SQ&VEd=1GN6o&>YVVtIzoZ%=Z_SdqJN2}E43{bE`>w+A;=y->@^k{oCC z$F*WTY&?34;kfyFV?b*Xb1Pq`Z=%OgwEg)Rz)tx=`f%5#w_INP=x&z5!jI;#;N$ma zhO)+MDm;SxOEVL15; zGq(v2pL3&P1Sl)8P*;G-fd{l1QJsv@e@d8)1PK4w2m*M%V3j-V~L^$i|&C@b?D?9tfwE{B^}Z$k8e5FmQ>v7Xz)sG32g9t}YBt zyR$+*_00RmPx+0mW+vVG4mxd(n$(eQf3-w>JPl2UJpafrPaL5@2j}%{VE-) zBI%6Qpj*dsdH<;g!S!avA~bv^0E+ zfyJbSjPb+j;J52U)<|cIcntQBI2T#>2;tOxu{%D?kML476AErF(qN9hPva5Nkc@BF zC-tLF@3ZFb%Kpj)M<{)x*l|*Ia@ECeXo2E4h2f!aV=cHAhi_E_mfUth(sM4^hJq7B zQsGWqdZUm9S%F`$nQ*_#NcuD`&)Ek%_s{&^78{9Hm ztri&rYLOxgFdG>O@+XHy z9#;|&vBCPXH5Mon^I`jSuR$&~ZWtyB67ujzFSj!51>#C}C17~TffQ{c-!QFQkTQ%! zIR^b1`zHx|*1GU?tbBx23weFLz5H?y_Q%N&t$}k?w+``2A=aotj0;2v$~AL z{scF-cL{wsdrmPvf#a9OHyYLcwQD4Kcm)`LLwMh4WT~p29f7M!iafJSU`IV}QY5Wa z(n44-9oA}?J{a+ah*@31WTs#&J#o1`H98#6IQf;Wv0N_!);f&9g7o-k(lW5rWnDUR zQBFIRG+X=6NnsI@mxnwm;tf5;_Uxg?jZ8m-m0}&6+DA!qam(p$mN5R})yA_7m$q@| zFEd|dpS595rxQr-n#GjI5i-AhnUE>Cr;jpCqSrD~EwK_DqI^7%3#p5)%T_od!t3SOmH9MyXeeGO2(UQL;ax|x?Ncixmeo1=$ z{-);Au{*tfzOG?KQ~K|ak8-HQ?`Pekhe2WM(8s{xv-p>Zmu_6{G!-oE$7$mY`MOJorI=+mMx?H;`pr!;fVYz?5~yXBACruWB`Ph zZM}90_<^OBxIhyZ9BW$`>6JvO;%VFpqVr8|7t3~AmxYak6?`Pp#c;**_SYmi`&z23 z`p6_~ePvH)C6x-G9$hgL=eVALq`-AiamN>!3~Lxw&{H(b{B(7xSRm6<3<{%{yXiH# zos5Rv1L+8fUKJLo%P>4I&$}y29{wk28?7Y>V_$0DTSBYFbis&S5<5j(Muyohi86StEao`je zhlX-N0aIZAJ!q%!KUx2e8T>OCq{#8ED5e0Zs8ISH4R8aHq!cg&43YzJ-8DG6-i6xgi3%o3022L%6PI(ztY3Sjr`H~$b3OX zN~&K^)42IrxK6P&kP(v?fH2Lw)Y2^BfjmNIZw7QHW( zdEB?B$%Q@Pt94IYO@Ezh@0ucd&fF*r4BRz7#YaM$!QuSA-(?r~Go^FeJM!}ho{n{~ zwg_iie|t>hREPLnHo|iGZ=)jJF-BBUw~rUgmTB-XY2Z-r7#ipjuu@ft= zzivoaGDWBogX1@BwRtH^E(OD5Y7fxkb=m$#>&ALLT_G;r?kne7a5iYi&>VzLbl_h0 z2MsJ5?W+HVLZ8ij=Aj-y4zQmN>(k7YqR%#{OBpXyF1sDJ}+m8l@C_L z!VfO6=Ocoe;Erp2X8Ft2>CEHRZ#Cz3SUq3jbS3HEjborGfr)ABYgPgE!{z+a#ZSDH zB<(VHOPJ!|zI1Lg35aMSz^NRkOqYCt6y=le-&N#S+=Zy_KjJkVpJ=9ScpweNLWQbM z#|COx7r*J&=7FPFy^8acz5c|Bno$JKev5(|{0K8BlC+yF*0zZHu&dDtkwRQ=l9Mo4$;YJzt6dPpw%>~4iEb%Z%c&MB!D z;PQxBITXlxI~GVJ(di_FyvegGH7{v3&Yp0mTEbw#5l|NZpT6j@YdY&Qn5DH4IaF@Z z{iq=5gA3+%7J<0pH*D5o=RP02H~$@Kt#i-*#o`EcJi6{0%JY2h*2YVfD=Di95>`=t z#t!#gkb6s!bA9a_*;{#8rN!zVr$4m)g=k**C3VCrX9=?gA^45g7Hsv~wF+0i>$iB8 zxK3XRoyBAEIX&x30nP-I;9}bQ8WQ2EXMy*Mz8MjHfXS6n(e~JfpL@3%bp#||vAr*> z*LGEHZL#;op-AbMYwZH=*a;J?BOA4tZ9s(8uJ`;k-#H!Z(Q^4s>SbYCkLdbSqt@gh zZS_XWR`U5HpsgyrexYQ==Y8R3>-_mc9;a`Tctrm%8wQV`kY$iVPr2}9pUK@COjZ`7 z`qu}yBI->RluhX5z~0HtJC)P2bG>qF<538o;IYpm5qYEIef|*hYuu0 zw_bv8jmN!Z4q54rI~tjGTdSdjU0VF&S)#F)Yk&v*@}**ck&i9WBeR86^`;ZSN0 zN2@%19$gimkd{`XRvjg6a;v7rn16i9X1wP&*2ihTbJ>a+w&B=m?W&TcTIFo9XqM?? zQ}Y)X@~dh%eJ4C1(R$CY@J7LKSKjyjk~cE27HR^xS(UWPzA=3pxgc#Wqt{c6C&ol- zVK9C2Hrsugfi}7~QC)FalYO`8{;pdp(8UPfIkU`Fm(!9a+(W4+=!IBU&%>LYBL|(c zD*`yA79m?lanf2#^0$Z~&y`uL=id2Y`TeOuo+XCrbX@BWQX(zf_BvY4B;Z1s(q-p9 zY|*FzDrf^ehtD^uTXU>uAR{x7(F~1<)=9>j6ZzpAqr|&juP#oq`nF8`VKIS; z75-R3HpPWp&6<5`a6!*G!RycHI0+^)ES^eq-1GCMc&!GY9p~jkk~pn(60a_|5U3v%M_Ry#b7vGhrw!WGHVYFAI$E{kT6qiM{E1=CxW{Lhy9&|~649(voF2}5Z8ae>QxR=Rx5P{w;Ph~eGM6N^PDiRn zQh@(NDub{{^77ZPkUqIe$h4)87F6Y%2GNj3-~Oz+$*#PI5O2O?-B+``M%InNAF{lZ zGyP+{_S4`*NdZfhi+oE?Ja{^LI z4~CfoZ-g@~H&2i&^S=7WTC*yzHuem68=u>ke?w%m0$IJK+YS7FSm=V%IKqcWgyS1M zACXd`*&(j_mX$+9D(&Wg69&pmUI_mi_jO$?>Wmvoz9jqI|91NXDzIVo5QSv znT)x24GX)SQMOf5*2ir#gJrz8n-5-SZXzjdq%@7wqLgPehtVx3%I<-H#Mpl1@aJhE z-BG)~lOnA2)5m?gEGN2572}6;V?s`OM!hDr6Frp29cK)MMqRv)*@-M<*tgYoVYb#3 zWaRa|i}byRTC%sJTbTZkD|khzaJOV!eAYJH{UnN9q!UGC!p#c(0SMKcocoePOY-JKLEwm_57yT&DU`iHnKfH3J1%cUL=bzmNlr5QwWUoFcixa|qJ* z51D4}(0pQMk7(9>P=e}P zlqc#E)5eMYb@#)_!@|6n#}YHlaCEdoBFftR+HD!tij%P`>2^$7p_F0 zD4Uk-?&>QimIn@&A_`V0_R%FtwI5mR7|uFJ%aFe;WYME zq#hMh>)KQ+H7H%hpLZmyNUsQ`qGuM3P=w zrCTPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1^G!tK~#8N<(!FD z8cPs{dH;vGQBY(DQNf)>5oHq?#E1fl3+{F2Z+na}W!$ZiJ9x~F?Q z>Afpjs1GO-iPF?`fd2b2{jKr)gA|FyDb+kDPs$pqf6UAT*@M3$fnbQDi8=BlGCN8f z?x61sdXfi!_{MA7;PfCZ0*J zpZ!3JN$(8hH@4{HWI%U!cXWS$&w|gcudk`muqYJ%H{IUD{ig(>aDrN`Hr?Ld(t8bJ z^?H5EW;f`^gnK`xxHuD&GqkdrRas!dP6h*t+1-z8%QWKRl*?87m)DUQGGyQ4(kk1Y zNkqlT`4<;}!j^7`qo0}W$y1WgCLn>~USYJMiadGD67q#2&*{;y|%D6Z_Uyv>@ zue96l7$)pFUp|XS&B00WEbwnIUh_QA`ZY) zhttzD9fpjxTKl6pO$xSmDmn}qlYS~HDo!jur^7IBr>AmL6%L}}fPVi(hhx?(!2zd( zxH!1Im#{U#iFF5YaRR{@-QM2mkjxmKhk5P$DXu+}h>HU-=VH?G`2yRHX+n8jR?~8A8H#J-_@;t%em>M8e$39!&M2FaFT@V6i36~t z?W2#0(VZIgI;9uo=5LWX%2HQH;nD49&N=as;9ai;wts+7yr z?RM3=zrPsQLy%P%8gvd0 zsL^OV3iES+UmcfD%dhBi_$T7D+xt|jRv!a@jb^iH4@3G&oMKUCN|eKOaWIvEKzqF& zRVx)%jHfu6<P<}E>f2DH&RJhZcHk1Ev~?bz+3CT(sO)%_5rYdK%v%BRG^ZG3VrZC_P> z70j;$R=w|(Dr#nc^ZzwIEDj3m=H?db)K{a^Ii!f4+3y{beMlUnYrWoJ9r>!D3#L-b zY&q z;3~##ZkzT8$dlaIeR1nFh6313#+`JWXg00ih9N&})YfUdkpMe{vC;ggFd&o3vnLxz zip5_GFN2{FMeRF(B@SLqfb2mkIR{{yAX1Jy(KyoW_SEGwKo5XQ|NKiYLUQG4)fW+HLz~L%uF#d6h$l_x$^2mBIh-YC+hTztC1KE zx^uxv@vKb!T=kl31!gaveT^yb<`r%fx@gJBKlJ%5TT%%8eMkZiOUx2o_5>;$qaO0` zFs|y6b~b0^vrb~w&>qz|*(3T#x~I8pcTL^i39ga4)}6l0h4i^(7rI(Qn7*YpeO##( zyp-UGVG{$ z(o&Iu@*~Yw5|TJox#q)kNig0xWw(?8NK!P{Qp13UF+5ac{%&u3j|BU_jX2z&9jPXk zPf828ln;%5)HOt$W=0U6tvlw8MuJ2{Ju^QWdP%i8l}Z-OSMoxfh9d~BdlxTU_*Y9y zs|EzsFc@ZBhG>Xa)&z=iQ2wv5^k=3@Gx0mRg*^oI6-^TsFp|jhi6GEZUC7`pPLF54zRFfnSlC~*xK$_AGnu>| z6sdgLuAD_(bxNw`@I2r&`&qsdSM%<^Ha`OeV>VOj&?jqaYg-!&p78O|!6#m#3M`h& zmy6tnF;I9;-!q~akA{K<*>evcp{YIZ#r-Rs1E9Da^1UsJv)P`#so1=w42Iv6`Q1_p zMepgC#MUO{~FV!JgGMRQ7T9 zk`oLR_9^zJRZm=1t-66+)XALb;WD1Mc#mJz#FdGhoE$Tt;GLZTSfP(BEVZk4S~-S* zr76JLl4Jsmsn}GE8&O#FESz7$gmfpx9>u!!zm!=n=#C zJ%i*aBZ^!CZyZNSX|Y;%_dqD9mSFiO?gD!4@|osan_ov??OG{nzAL%jqEK3-lfUnY zrgdxPNcg)+V`F&Yf=`%zUZiQAK?dI&TH3yKDy>T~)moAHYTfl|1n|V9!PZw|heBRY zGv{}!Zh|6&F@KX`f}(YXSXFQWF>{so8dy`mPk%Xk_Ux!||6+X#H1@JTPZ)oMomE5a!KQ&8-KfTVKq4ZS$dxt;^ zPxYOwHv9Lp%bvvxoK*6$QOUScQ7h^92Tz_b15TQm%y)9{5n5B$?1(fhcz zNc$f7=mlo0)C_uu^I0!0FM1|!51QjQ3kVMW&WI1*mMrQmaJ24O78T!{J+8c3o4NcF ze9!gXym>P^m#C6?cn!;&Yad<70Vt#w`qov;U!s1ZjB5L@wvryc%Tj?{t*)TieV8^n z=U>PR0Z)l1Yz3FqX)|kVlgLORC+hK%qH1~L$a-gSEKRGvY{R~oG~P~}kmGlqLNO$F z*tiYe-6HH`0`W|iZvw$B{foJ`p9c%+QQS$r!s77j)2evWB~)4q|=)Tc+qeb;B-KX{<%bN|<~fj6l_ojCcQX)8(uB(*d^ z7PtSDWh0wHmQSZ;DC0y^*IBx(jhp>R>0Dlu(P{q*pcS!6(TVz1X-Qx@P49%Z6aRbnQpy(Rs?v zdVpn+VFXyj;E{8g4mTJM4#6xL(az<^r|BBD2L=XCKa=kEIsuNfIXgKy>0w&kl*XKw zZD^`^Q9+j2qn#f=ew4k5RoJilx^6->%VuOkv#RQDasrD^05B3L@`q9ps1gNk!|Q{1 z8PV*Aro}fpgXvF{T`{ZL3_psZ80wTVhJf6L$O&n4F1m)GOeH4db~a5c>{UNZH%tOo z#15-kb&8$z3a8KMb#Uev5crcR=ErSQ%uO;xHeNHeV*I0{5;x3mhz!o+u$3*nXQ{Je z-l~kpGmhCyrVib{ecL?e=3p%>-l?;)5&ok_v_PtbiLOj(TDNm5`DxK5E-^&W&X{S&BuP+llkV#zaROCJ`)>0bYK76WW~nV&$;M zD5r2KcDUgdJviG66le==QA-AF;CRO)3vf5Aq@zM!Q zKjWIMn>_SWHOPcQPVJ(5$rpExMYO!yn&R5%Y!sAo=}9JeJ>C9+2CMo>RmTbG0O9AH zE?=2@lwkNn5H-;vUPxhR=96mq1OT@(ThQe;^uqe}3j6X(ntMm$t`Ff4{rpUqN9&G7 zzD$mY|Eahl@`FeZ+6g0rOO?S#T{k=FKo1U8ntFEkp75>jnj$jgE7|bvIlbZm(;GK$ z?mKbUCBq6kJeLMb#gXs>{6h2Pj!Jfse~RGw;(X8DiW;q~ztV#etLtAy1tnx;_E>O# z2w%PwdFx}J!?(E(Bna(~-_E%|85$-TKAW7Jyd`_%#)b{Bn;_Tl#6tfSl72DV?7Qv8 zB8^51>~zdWDaQN8ho)=K+yU+CCa0sg-f0HOgI;e@jSBYP{ka&x=gk4r4$*sJD)H4< zov^8J>pcC1=<)IKQ^g*E&iTr)Ic1KpaeY8K_Z@bCP2`C*J*Y0l_q-d*=|uKE$?wOa zm^eC)gU~T>Ie}+DdeZC~kWq_oO0+dWsc~0s}C!#epohq8AfhCFJ(r z^!M`Wf4F$-ad{V@fh~L#am)&s8s1)YavS6F5<&)d4=!yl7m+V<#nHvr^K5wI{d|oy z3Pu|4k-#!2QQl||X?kyb6FbtyYrWWz=*O})_IyfAEI=V<^2R}7xAiDcD9mfEzzP`r z`IIjPrh`1h`1{5fz>GN`4Y?6B6c$ z@h?U0!*Kf-4<@YYwwvY|ESRuN=TgzG)~|(&u3K>JMxrK6@oDqK-~`wMPS&PX2At*= z)5ALY2Z0G9s}$6PAAZzkX8qHjCzIAiECts@sJ}8t2{POcte}>Wkl9}KEYsn_f05=fv6LDRoN__$^_ zPagZ_?o(S#s|k7yG>@N<+%l-IwLKTIYdCV&1CA1z=J7~Uu9%GB<06^OoP zKBF)mtla^`4_9Qu0ncYueU;d&tzPQ%AIXG(7B1&B__<__09Q}XpDrF%&0H^JIuOh# zz;ucOBWX7SXe?`JgOj@pED<+mjij$85){VnHfy}nhIfUAfQudLtrZvcNuP(9g2%cb zrbB;f!;>2&vc0>zJD;4KoDZ*m7d64I_-$KaD~d|?3>3d8nhh(ARMXwu*UsLMz~9%_ zukU^pVRr!;?4b;bR;6Wakk09p#~=XNmzb5O*Zm^W!MCt6KPq`6yv7HnzV3FXfMMv$Pta+mR5!%XMz?udDR7+)<3at_H7<^*bFc@qIx# zQE;Y%nv+Pv>$*E&T9Z3If1De0JM%${&~9Ri6xWJ2hd+oel%)*6yp428)q#*5OlYq@ zd)1Hr_av~I;dg%Kmk^hix#nIA+23Jw_>N-9Pn|OpDTBEy2Bbn%Rs^{H8UOgIDC~L* z{xCrQxYZ6tcd>M6>3FtoW?jyQQGFdGKK70;oT@yD%_2f$G}d^*5w+IQWZS{o{?C}J5Ot*UTk2O?$RDUasjkV1Q;9&)*r+|i z;mQh5?|#9uO3N}QYNra4-JTInqLeQyHYXFJ4J>>9j@YKk1Tf|XH;^mjR5kbVdn-kM z78{W6-o1M{H6x=;RA^oA1svSfJ`*C}*ckOy1R7CC517=vi+-cg1eu=Go6o z_&_#%*zhF=LZv-ha!!W|N6kfo^J%jxx_)gC!=^zc#n6`NCm;m8#-dXF(re5|$uHs- zGFW2C^T57uV+|g6De@Oj>sq;)Xqe6#C(V~k2psp(t_6w|VyyEOw%q+K2b>crWP{3# z@KYon>&0%7|9nN$iZyejsx!hxN&Q>w|JBU1pprWT2bSoe)m#EAx}GUb=`rKo(+KTz zD{g5JK{2-CS>ADY=pE03`^cp%edHgr@z>~3_4XC>T8Fm)?oT1A@qcyCu{3>+XbWI$ zG&nk0VWBy~00_=%?$LwTm;Ld;~g zgBUUcL1NbwI<93~JLelR!T{8ny!2;GlTZ0>^ml(^+R|_~_~ni`Q?nE>&S;CQV>t6lK;O%Wu7Z9iVioo2e;2N-6Q>12y&KznfGiYm5kKXj%s&4C#DoOaz{#a9g>V#}`+uu3TK`_GLGEAH6-}!7+gP8V$ z7a!V3qrpV33gMMuno|cXUM@6Qcx-aT?t@4ED0$2S@#?)rC7Fh3j(i;L&54!|0FMe3x*bXtFnlJzLL3aH zpi;lr6%&X;C%SVM=P%MJ6(}KH>m0w_WKuWy{X2p4!2Pqrwm;>=<2o}Dhu*bisL!?5 z)6?@AU&4YWUN)^*jr!Ozt&JdTDOw)?fw~F17S(d{|7GG(G(KeJZ0N2`FVv?5 NG*q?mAC)bG{|A+36q*14 literal 0 HcmV?d00001 diff --git a/hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/star-1-2.png b/hiviewdfx/hidebugtest/entry/src/main/resources/rawfile/star-1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..450c3dd3ca68bf601bd08e5f41797d376e20d00d GIT binary patch literal 8295 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%0D*GJaR&Y1N=rCc(^We0TJHHZE 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 literal 0 HcmV?d00001 diff --git a/hiviewdfx/hitracechaintest/BUILD.gn b/hiviewdfx/hitracechaintest/BUILD.gn new file mode 100644 index 000000000..71d9d0344 --- /dev/null +++ b/hiviewdfx/hitracechaintest/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//test/xts/tools/build/suite.gni") + +ohos_js_hap_suite("ActsHiTraceChainTest") { + hap_profile = "./entry/src/main/config.json" + deps = [ + ":hitracechain_ets_assets", + ":hitracechain_ets_resources", + ] + ets2abc = true + certificate_profile = "./signature/openharmony_sx.p7b" + hap_name = "ActsHiTraceChainTest" +} +ohos_js_assets("hitracechain_ets_assets") { + source_dir = "./entry/src/main/ets/MainAbility" +} +ohos_resources("hitracechain_ets_resources") { + sources = [ "./entry/src/main/resources" ] + hap_profile = "./entry/src/main/config.json" +} diff --git a/hiviewdfx/hitracechaintest/Test.json b/hiviewdfx/hitracechaintest/Test.json new file mode 100644 index 000000000..db0929043 --- /dev/null +++ b/hiviewdfx/hitracechaintest/Test.json @@ -0,0 +1,18 @@ +{ + "description": "Configuration for ActsHiTraceChainTest Tests", + "driver": { + "type": "JSUnitTest", + "test-timeout": "1800000", + "package": "com.hitracechain.test", + "shell-timeout": "60000" + }, + "kits": [ + { + "test-file-name": [ + "$module.hap" + ], + "type": "AppInstallKit", + "cleanup-apps": true + } + ] +} diff --git a/hiviewdfx/hitracechaintest/entry/src/main/config.json b/hiviewdfx/hitracechaintest/entry/src/main/config.json new file mode 100644 index 000000000..94b74dfc2 --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/config.json @@ -0,0 +1,73 @@ +{ + "app": { + "bundleName": "ohos.hitracechain.test", + "vendor": "open", + "version": { + "code": 1000000, + "name": "1.0.0" + }, + "apiVersion": { + "compatible": 7, + "releaseType": "Release", + "target": 7 + } + }, + "deviceConfig": {}, + "module": { + "package": "ohos.hitracechain.test", + "name": ".MyApplication", + "mainAbility": ".MainAbility", + "srcPath": "MainAbility", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:entry_MainAbility", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/app.ets b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 000000000..261fadca2 --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/pages/index.ets b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 000000000..10359134d --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,65 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import file from '@system.file'; + +import {Core, ExpectExtend, InstrumentLog, ReportExtend} from "deccjsunit/index.ets"; +import testsuite from "../test/List.test.ets"; +import featureAbility from "@ohos.ability.featureAbility"; + +@Entry +@Component +struct MyComponent { + aboutToAppear() { + console.info("start run testcase!!!!") + featureAbility.getWant() + .then((Want) => { + const core = Core.getInstance(); + const expectExtend = new ExpectExtend({ + 'id': 'extend' + }); + core.addService('expect', expectExtend); + const reportExtend = new ReportExtend(file); + core.addService('report', reportExtend); + core.init(); + core.subscribeEvent('task', reportExtend); + const configService = core.getDefaultService('config'); + Want.parameters['timeout'] = 100000 + console.info('parameters---->' + JSON.stringify(Want.parameters)); + configService.setConfig(Want.parameters); + testsuite(); + core.execute(); + console.info('Operation successful. Data: ' + JSON.stringify(Want)); + }) + .catch((error) => { + console.error('Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text('ACE ETS TEST') + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('100%') + } +} + diff --git a/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/ByTraceHiDebugJsunit.test.ets b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/ByTraceHiDebugJsunit.test.ets new file mode 100644 index 000000000..feeeaa8b6 --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/ByTraceHiDebugJsunit.test.ets @@ -0,0 +1,384 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {describe, it, expect} from "deccjsunit/index.ets"; +import byTrace from '@ohos.bytrace' +import hiAppEvent from '@ohos.hiAppEvent' +import hiDebug from '@ohos.hidebug' +import hiLog from '@ohos.hilog' + +export default function byTraceHiDebugJsunit() { + describe('byTraceHiDebugTest', function () { + console.log("************* byTraceHiDebug Test start*************"); + + /* + * @tc.number : DFX_ByTrace_ByTrace_startTrace_0100 + * @tc.name : startTrace + * @tc.desc : Records a trace marking it as the start of a task, can with the expected completion time between + startTrace and finishTrace. + */ + it('DFX_ByTrace_ByTrace_startTrace_0100', 0, async function (done) { + console.log("************* DFX_ByTrace_ByTrace_startTrace_0100 Test start*************"); + try { + byTrace.startTrace("test1", 1, 1000); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_ByTrace_ByTrace_startTrace_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_ByTrace_ByTrace_startTrace_0200 + * @tc.name : startTrace + * @tc.desc : Records a trace marking it as the start of a task, can with the expected completion time between + startTrace and finishTrace. + */ + it('DFX_ByTrace_ByTrace_startTrace_0200', 0, async function (done) { + console.log("************* DFX_ByTrace_ByTrace_startTrace_0200 Test start*************"); + try { + byTrace.startTrace("test2", 2, 5000); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_ByTrace_ByTrace_startTrace_0200 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_ByTrace_ByTrace_startTrace_0300 + * @tc.name : startTrace + * @tc.desc : Records a trace marking it as the start of a task, can with the expected completion time between + startTrace and finishTrace. + */ + it('DFX_ByTrace_ByTrace_startTrace_0300', 0, async function (done) { + console.log("************* DFX_ByTrace_ByTrace_startTrace_0300 Test start*************"); + try { + byTrace.startTrace("test3", 3); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_ByTrace_ByTrace_startTrace_0300 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_ByTrace_ByTrace_traceByValue_0100 + * @tc.name : traceByValue + * @tc.desc : Records a trace for generating a count, such as clock pulse and the number of layers. + */ + it('DFX_ByTrace_ByTrace_traceByValue_0100', 0, async function (done) { + console.log("************* DFX_ByTrace_ByTrace_traceByValue_0100 Test start*************"); + try { + byTrace.traceByValue("test1", 1); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_ByTrace_ByTrace_traceByValue_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_ByTrace_ByTrace_traceByValue_0200 + * @tc.name : traceByValue + * @tc.desc : Records a trace for generating a count, such as clock pulse and the number of layers. + */ + it('DFX_ByTrace_ByTrace_traceByValue_0200', 0, async function (done) { + console.log("************* DFX_ByTrace_ByTrace_traceByValue_0200 Test start*************"); + try { + byTrace.traceByValue("test1", 1); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_ByTrace_ByTrace_traceByValue_0200 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiAppEvent_Event_DISTRIBUTED_SERVICE_START_0100 + * @tc.name : DISTRIBUTED_SERVICE_START + * @tc.desc : distributed service event. + */ + it('DFX_HiAppEvent_Event_DISTRIBUTED_SERVICE_START_0100', 0, async function (done) { + console.log("************* DFX_HiAppEvent_Event_DISTRIBUTED_SERVICE_START_0100 Test start*************"); + try { + expect('hiappevent.distributed_service_start').assertEqual(hiAppEvent.Event.DISTRIBUTED_SERVICE_START); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiAppEvent_Event_DISTRIBUTED_SERVICE_START_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_getNativeHeapSize_0100 + * @tc.name : getNativeHeapSize + * @tc.desc : Get total native heap memory size + */ + it('DFX_HiDebug_HiDebug_getNativeHeapSize_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapSize_0100 Test start*************"); + try { + let heapSize = hiDebug.getNativeHeapSize(); + expect(heapSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapSize_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_getNativeHeapAllocatedSize_0100 + * @tc.name : getNativeHeapAllocatedSize + * @tc.desc : Get Native heap memory allocation size. + */ + it('DFX_HiDebug_HiDebug_getNativeHeapAllocatedSize_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapAllocatedSize_0100 Test start*************"); + try { + let heapAllocatedSize = hiDebug.getNativeHeapAllocatedSize(); + expect(heapAllocatedSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapAllocatedSize_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_getNativeHeapFreeSize_0100 + * @tc.name : getNativeHeapFreeSize + * @tc.desc : Get Native heap memory free size + */ + it('DFX_HiDebug_HiDebug_getNativeHeapFreeSize_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapFreeSize_0100 Test start*************"); + try { + let heapFreeSize = hiDebug.getNativeHeapFreeSize(); + expect(heapFreeSize).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_getNativeHeapFreeSize_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_getPss_0100 + * @tc.name : getPss + * @tc.desc : Get application process proportional set size memory information + */ + it('DFX_HiDebug_HiDebug_getPss_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_getPss_0100 Test start*************"); + try { + let pss = hiDebug.getPss(); + expect(pss).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_getPss_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_getSharedDirty_0100 + * @tc.name : getSharedDirty + * @tc.desc : Obtains the size of the shared dirty memory of a process. + */ + it('DFX_HiDebug_HiDebug_getSharedDirty_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_getSharedDirty_0100 Test start*************"); + try { + let dirty = hiDebug.getSharedDirty(); + expect(dirty).assertEqual(undefined); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_getSharedDirty_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_startProfiling_0100 + * @tc.name : startProfiling + * @tc.desc : Start CPU Profiling. + */ + it('DFX_HiDebug_HiDebug_startProfiling_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_startProfiling_0100 Test start*************"); + try { + hiDebug.startProfiling('/data/accounts/account_0/appdata/[package name]/files/cpuprofile_test.json'); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_startProfiling_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_stopProfiling_0100 + * @tc.name : stopProfiling + * @tc.desc : Stop CPU Profiling. + */ + it('DFX_HiDebug_HiDebug_stopProfiling_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_stopProfiling_0100 Test start*************"); + try { + hiDebug.stopProfiling(); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_stopProfiling_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiDebug_HiDebug_dumpHeapData_0100 + * @tc.name : dumpHeapData + * @tc.desc : Dump JS Virtual Machine Heap Snapshot. + */ + it('DFX_HiDebug_HiDebug_dumpHeapData_0100', 0, async function (done) { + console.log("************* DFX_HiDebug_HiDebug_dumpHeapData_0100 Test start*************"); + try { + hiDebug.dumpHeapData(); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiDebug_HiDebug_dumpHeapData_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_HiLog_info_0100 + * @tc.name : info + * @tc.desc : Outputs info-level logs. + */ + it('DFX_HiLog_HiLog_info_0100', 0, async function (done) { + console.log("************* DFX_HiLog_HiLog_info_0100 Test start*************"); + try { + hiLog.info(0xFFFF1, "HILOGTEST", "%{public}s", 'DFX_HiLog_HiLog_info_0100') + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_HiLog_info_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_HiLog_error_0100 + * @tc.name : error + * @tc.desc : Outputs error-level logs. + */ + it('DFX_HiLog_HiLog_error_0100', 0, async function (done) { + console.log("************* DFX_HiLog_HiLog_error_0100 Test start*************"); + try { + hiLog.error(0xFFFF2, "HILOGTEST", "%{public}s", 'DFX_HiLog_HiLog_error_0100') + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_HiLog_error_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_HiLog_fatal_0100 + * @tc.name : fatal + * @tc.desc : Outputs fatal-level logs. + */ + it('DFX_HiLog_HiLog_fatal_0100', 0, async function (done) { + console.log("************* DFX_HiLog_HiLog_fatal_0100 Test start*************"); + try { + hiLog.fatal(0xFFFF3, "HILOGTEST", "%{public}s", 'DFX_HiLog_HiLog_fatal_0100') + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_HiLog_fatal_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_HiLog_isLoggable_0100 + * @tc.name : isLoggable + * @tc.desc : Checks whether logs of the specified tag, and level can be printed. + */ + it('DFX_HiLog_HiLog_isLoggable_0100', 0, async function (done) { + console.log("************* DFX_HiLog_HiLog_isLoggable_0100 Test start*************"); + try { + const res = hiLog.isLoggable(0xD000700, "HILOGTEST", 3) + expect(res).assertEqual(true); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_HiLog_isLoggable_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_LogLevel_WARN_0100 + * @tc.name : WARN + * @tc.desc : enum test + */ + it('DFX_HiLog_LogLevel_WARN_0100', 0, async function (done) { + console.log("************* DFX_HiLog_LogLevel_WARN_0100 Test start*************"); + try { + expect(5).assertEqual(hiLog.WARN); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_LogLevel_WARN_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_LogLevel_ERROR_0100 + * @tc.name : ERROR + * @tc.desc : enum test + */ + it('DFX_HiLog_LogLevel_ERROR_0100', 0, async function (done) { + console.log("************* DFX_HiLog_LogLevel_ERROR_0100 Test start*************"); + try { + expect(6).assertEqual(hiLog.ERROR); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_LogLevel_ERROR_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiLog_LogLevel_FATAL_0100 + * @tc.name : FATAL + * @tc.desc : enum test + */ + it('DFX_HiLog_LogLevel_FATAL_0100', 0, async function (done) { + console.log("************* DFX_HiLog_LogLevel_FATAL_0100 Test start*************"); + try { + expect(7).assertEqual(hiLog.FATAL); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiLog_LogLevel_FATAL_0100 Test end*************"); + done(); + }); + + console.log("************* byTraceHiDebug Test end*************"); + }) +} diff --git a/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/HiTraceChainJsunit.test.ets b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/HiTraceChainJsunit.test.ets new file mode 100644 index 000000000..b465a7092 --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/HiTraceChainJsunit.test.ets @@ -0,0 +1,443 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {describe, it, expect} from "deccjsunit/index.ets"; +import hiTraceChain from '@ohos.hiTraceChain' +import hiTraceMeter from '@ohos.hiTraceMeter' + +export default function hiTraceChainJsunit() { + describe('hiTraceChainTest', function () { + console.log("************* byTraceHiDebug Test start*************"); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_INCLUDE_ASYNC_0100 + * @tc.name : INCLUDE_ASYNC + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_INCLUDE_ASYNC_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_INCLUDE_ASYNC_0100 Test start*************"); + try { + expect(1).assertEqual(hiTraceChain.HiTraceFlag.INCLUDE_ASYNC); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_INCLUDE_ASYNC_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_DONOT_CREATE_SPAN_0100 + * @tc.name : DONOT_CREATE_SPAN + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_DONOT_CREATE_SPAN_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_DONOT_CREATE_SPAN_0100 Test start*************"); + try { + expect(1 << 1).assertEqual(hiTraceChain.HiTraceFlag.DONOT_CREATE_SPAN); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_DONOT_CREATE_SPAN_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_TP_INFO_0100 + * @tc.name : TP_INFO + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_TP_INFO_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_TP_INFO_0100 Test start*************"); + try { + expect(1 << 2).assertEqual(hiTraceChain.HiTraceFlag.TP_INFO); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_TP_INFO_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_NO_BE_INFO_0100 + * @tc.name : NO_BE_INFO + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_NO_BE_INFO_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_NO_BE_INFO_0100 Test start*************"); + try { + expect(1 << 3).assertEqual(hiTraceChain.HiTraceFlag.NO_BE_INFO); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_NO_BE_INFO_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_DISABLE_LOG_0100 + * @tc.name : DISABLE_LOG + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_DISABLE_LOG_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_DISABLE_LOG_0100 Test start*************"); + try { + expect(1 << 4).assertEqual(hiTraceChain.HiTraceFlag.DISABLE_LOG); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_DISABLE_LOG_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_FAILURE_TRIGGER_0100 + * @tc.name : FAILURE_TRIGGER + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_FAILURE_TRIGGER_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_FAILURE_TRIGGER_0100 Test start*************"); + try { + expect(1 << 5).assertEqual(hiTraceChain.HiTraceFlag.FAILURE_TRIGGER); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_FAILURE_TRIGGER_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceFlag_D2D_TP_INFO_0100 + * @tc.name : D2D_TP_INFO + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceFlag_D2D_TP_INFO_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceFlag_D2D_TP_INFO_0100 Test start*************"); + try { + expect(1 << 6).assertEqual(hiTraceChain.HiTraceFlag.D2D_TP_INFO); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceFlag_D2D_TP_INFO_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceTracepointType_CS_0100 + * @tc.name : CS + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceTracepointType_CS_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_CS_0100 Test start*************"); + try { + expect(0).assertEqual(hiTraceChain.HiTraceTracepointType.CS); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_CS_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceTracepointType_CR_0100 + * @tc.name : CR + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceTracepointType_CR_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_CR_0100 Test start*************"); + try { + expect(1).assertEqual(hiTraceChain.HiTraceTracepointType.CR); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_CR_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceTracepointType_SS_0100 + * @tc.name : SS + * @tc.desc : enum test + */ + it('DFX_HiTraceChain_HiTraceTracepointType_SS_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_SS_0100 Test start*************"); + try { + expect(2).assertEqual(hiTraceChain.HiTraceTracepointType.SS); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceTracepointType_SS_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_chainId_0100 + * @tc.name : chainId + * @tc.desc : chainId test + */ + it('DFX_HiTraceChain_HiTraceChain_chainId_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_chainId_0100 Test start*************"); + try { + let hiTraceId = { + chainId: 1, + spanId: 2, + parentSpanId: 3 + } + hiTraceChain.setId(hiTraceId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_chainId_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_spanId_0100 + * @tc.name : spanId + * @tc.desc : spanId test + */ + it('DFX_HiTraceChain_HiTraceChain_spanId_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_spanId_0100 Test start*************"); + try { + let hiTraceId = { + chainId: 2, + spanId: 3, + parentSpanId: 4 + } + hiTraceChain.setId(hiTraceId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_spanId_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_createSpan_0100 + * @tc.name : createSpan + * @tc.desc : createSpan method test + */ + it('DFX_HiTraceChain_HiTraceChain_createSpan_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_createSpan_0100 Test start*************"); + try { + let hiTraceId = hiTraceChain.createSpan(); + console.log("DFX_HiTraceChain_HiTraceChain_createSpan_0100 chainId " + hiTraceId.chainId); + console.log("DFX_HiTraceChain_HiTraceChain_createSpan_0100 spanId " + hiTraceId.spanId); + console.log("DFX_HiTraceChain_HiTraceChain_createSpan_0100 parentSpanId " + hiTraceId.parentSpanId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_createSpan_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_setId_0100 + * @tc.name : setId + * @tc.desc : setId method test + */ + it('DFX_HiTraceChain_HiTraceChain_setId_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_setId_0100 Test start*************"); + try { + let hiTraceId = { + chainId: 3, + spanId: 4, + parentSpanId: 5 + } + hiTraceChain.setId(hiTraceId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_setId_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_end_0100 + * @tc.name : end + * @tc.desc : end test + */ + it('DFX_HiTraceChain_HiTraceChain_end_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_end_0100 Test start*************"); + try { + let hiTraceId = { + chainId: 5, + spanId: 6, + parentSpanId: 7 + } + hiTraceChain.end(hiTraceId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_end_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_clearId_0100 + * @tc.name : clearId + * @tc.desc : clearId test + */ + it('DFX_HiTraceChain_HiTraceChain_clearId_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_clearId_0100 Test start*************"); + try { + hiTraceChain.clearId(); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_clearId_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_tracepoint_0100 + * @tc.name : tracepoint + * @tc.desc : tracepoint test + */ + it('DFX_HiTraceChain_HiTraceChain_tracepoint_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_tracepoint_0100 Test start*************"); + try { + let hiTraceId = { + chainId: 5, + spanId: 6, + parentSpanId: 7 + } + hiTraceChain.tracepoint(hiTraceChain.HiTraceCommunicationMode.DEFAULT, hiTraceChain.HiTraceTracepointType.CS, hiTraceId); + expect(true).assertTrue(); + } catch (error) { + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_tracepoint_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_isValid_0100 + * @tc.name : isValid + * @tc.desc : isValid method test + */ + it('DFX_HiTraceChain_HiTraceChain_isValid_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_isValid_0100 Test start*************"); + try { + let hiTraceId = hiTraceChain.createSpan(); + let isValid = hiTraceChain.isValid(hiTraceId); + console.log("DFX_HiTraceChain_HiTraceChain_isValid_0100 isValid " + isValid); + expect(true).assertTrue(); + } catch (error) { + console.log("DFX_HiTraceChain_HiTraceChain_isValid_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_isValid_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_enableFlag_0100 + * @tc.name : enableFlag + * @tc.desc : enableFlag method test + */ + it('DFX_HiTraceChain_HiTraceChain_enableFlag_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_enableFlag_0100 Test start*************"); + try { + let hiTraceId = hiTraceChain.createSpan(); + hiTraceChain.enableFlag(hiTraceId, hiTraceChain.HiTraceFlag.DEFAULT); + expect(true).assertTrue(); + } catch (error) { + console.log("DFX_HiTraceChain_HiTraceChain_enableFlag_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_enableFlag_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100 + * @tc.name : isFlagEnabled + * @tc.desc : isFlagEnabled method test + */ + it('DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100', 0, async function (done) { + console.log("************* DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100 Test start*************"); + try { + let hiTraceId = hiTraceChain.createSpan(); + let isFlagEnabled = hiTraceChain.isFlagEnabled(hiTraceId, hiTraceChain.HiTraceFlag.DEFAULT); + console.log("DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100 isFlagEnabled " + isFlagEnabled); + expect(true).assertTrue(); + } catch (error) { + console.log("DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceChain_HiTraceChain_isFlagEnabled_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceMeter_HiTraceMeter_startTrace_0100 + * @tc.name : startTrace + * @tc.desc : Records a trace marking it as the start of a task, can with the expected completion time between + startTrace and finishTrace. + */ + it('DFX_HiTraceMeter_HiTraceMeter_startTrace_0100', 0, async function (done) { + console.log("************* DFX_HiTraceMeter_HiTraceMeter_startTrace_0100 Test start*************"); + try { + hiTraceMeter.startTrace('testName', 1); + } catch (error) { + console.log("DFX_HiTraceMeter_HiTraceMeter_startTrace_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceMeter_HiTraceMeter_startTrace_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceMeter_HiTraceMeter_finishTrace_0100 + * @tc.name : finishTrace + * @tc.desc : Records a trace and marks it as the end of a task. + */ + it('DFX_HiTraceMeter_HiTraceMeter_finishTrace_0100', 0, async function (done) { + console.log("************* DFX_HiTraceMeter_HiTraceMeter_finishTrace_0100 Test start*************"); + try { + hiTraceMeter.finishTrace('testName', 1); + } catch (error) { + console.log("DFX_HiTraceMeter_HiTraceMeter_finishTrace_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceMeter_HiTraceMeter_finishTrace_0100 Test end*************"); + done(); + }); + + /* + * @tc.number : DFX_HiTraceMeter_HiTraceMeter_traceByValue_0100 + * @tc.name : traceByValue + * @tc.desc : Records a trace and marks it as the end of a task. + */ + it('DFX_HiTraceMeter_HiTraceMeter_traceByValue_0100', 0, async function (done) { + console.log("************* DFX_HiTraceMeter_HiTraceMeter_traceByValue_0100 Test start*************"); + try { + hiTraceMeter.traceByValue('testName', 2); + } catch (error) { + console.log("DFX_HiTraceMeter_HiTraceMeter_traceByValue_0100 error " + error); + expect().assertFail(); + } + console.log("************* DFX_HiTraceMeter_HiTraceMeter_traceByValue_0100 Test end*************"); + done(); + }); + console.log("************* byTraceHiDebug Test end*************"); + }) +} diff --git a/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/List.test.ets b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/List.test.ets new file mode 100644 index 000000000..c055f6dea --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/ets/MainAbility/test/List.test.ets @@ -0,0 +1,22 @@ +// @ts-nocheck +/** + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import byTraceHiDebugJsunit from './ByTraceHiDebugJsunit.test.ets'; +import hiTraceChainJsunit from './HiTraceChainJsunit.test.ets'; +export default function testsuite() { + byTraceHiDebugJsunit(); + hiTraceChainJsunit(); +} \ No newline at end of file diff --git a/hiviewdfx/hitracechaintest/entry/src/main/resources/base/element/string.json b/hiviewdfx/hitracechaintest/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..03b8532c5 --- /dev/null +++ b/hiviewdfx/hitracechaintest/entry/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "entry_MainAbility" + }, + { + "name": "description_mainability", + "value": "ETS_Empty Ability" + } + ] +} \ No newline at end of file diff --git a/hiviewdfx/hitracechaintest/entry/src/main/resources/base/media/icon.png b/hiviewdfx/hitracechaintest/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 NG*q?mAC)bG{|A+36q*14 literal 0 HcmV?d00001 diff --git a/hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/star-1-2.png b/hiviewdfx/hitracechaintest/entry/src/main/resources/rawfile/star-1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..450c3dd3ca68bf601bd08e5f41797d376e20d00d GIT binary patch literal 8295 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%0D*GJaR&Y1N=rCc(^We0TJHHZE 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 literal 0 HcmV?d00001 -- GitLab