• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http:// www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import { describe, it, expect } from '@ohos/hypium';
17import { Driver, ON } from '@ohos.UiTest';
18
19async function asyncTest() {
20    return 1;
21}
22
23class TestClass {
24    async asyncFunction() {
25        return 2;
26    }
27}
28
29export default function softwareJsTest() {
30    describe('SoftwareJsTest', function () {
31        /*
32         * @tc.number: STD-SOFTWARE-0200
33         * @tc.name: testJsAsyncAwait0100
34         * @tc.desc: 【STD-SOFTWARE-0200】为了方便应用的书写,JS 运行时必须支持 ES2017 中的async/await 特性
35         * @tc.size: MediumTest
36         * @tc.type: Function
37         * @tc.level: Level 0
38         */
39        it('testJsAsyncAwait0100', 0, async function (done) {
40            let res1 = await asyncTest()
41            expect(res1).assertEqual(1)
42            let testClass = new TestClass()
43            let res2 = await testClass.asyncFunction()
44            expect(res2).assertEqual(2)
45            done()
46        })
47
48        /*
49         * @tc.number: G-SOFTWARE-0301
50         * @tc.name: testJsES50100
51         * @tc.desc: 【G-SOFTWARE-0301】JS 运行时支持 ES5、ES6 语法规范
52         * @tc.size: MediumTest
53         * @tc.type: Function
54         * @tc.level: Level 0
55         */
56        it('testJsES50100', 0, async function (done) {
57            // ES5
58            var array = [1, 2, 3, 4, 5, 6]
59            expect(Array.isArray(array)).assertTrue()
60            var arraymap = array.map(function (value) {
61                return value -= 1
62            })
63            arraymap.forEach(function (index, value) {
64                expect(value).assertEqual(index)
65            })
66            var arrayfilter = array.filter(function (item) {
67                return item < 4
68            })
69            expect(arrayfilter.length).assertEqual(3)
70            var sum = array.reduce(function (sum, value) {
71                return sum + value;
72            }, 0)
73            expect(sum).assertEqual(21)
74            var res1 = array.every(function (value) {
75                return value < 4
76            })
77            expect(res1).assertFalse()
78            var res2 = array.some(function (value) {
79                return value < 4
80            })
81            expect(res2).assertTrue()
82            expect(array.indexOf(2)).assertEqual(1)
83            expect(array.lastIndexOf(5)).assertEqual(4)
84            var jsonObj = {
85                "str": "str", "num": 0
86            }
87            var jsonStr = JSON.stringify(jsonObj)
88            expect(jsonStr).assertEqual('{"str":"str","num":0}')
89            var jsonObj2 = JSON.parse(jsonStr)
90            var str = "  test  "
91            expect(str.trim()).assertEqual("test")
92            var obj = {
93                a: 1, b: 2, c: 3
94            }
95            expect(Object.keys(obj).toString()).assertEqual("a,b,c")
96            expect(Object.values(obj).toString()).assertEqual("1,2,3")
97            Object.defineProperty(obj, "c", {
98                writable: false,
99                value: 4,
100            })
101            expect(obj.c).assertEqual(4)
102            done()
103        })
104
105        /*
106         * @tc.number: G-SOFTWARE-0301
107         * @tc.name: testJsES60100
108         * @tc.desc: 【G-SOFTWARE-0301】JS 运行时支持 ES5、ES6 语法规范
109         * @tc.size: MediumTest
110         * @tc.type: Function
111         * @tc.level: Level 0
112         */
113        it('testJsES60100', 0, async function (done) {
114            const num1 = 1
115            let num2 = 1
116            expect(num1).assertEqual(num2)
117            const sumFunc = (num1, num2) => num1 + num2
118            console.log("sssss %d", sumFunc(num1, num2))
119            expect(sumFunc(num1, num2)).assertEqual(2)
120            expect(`num1 = ${num1}`).assertEqual("num1 = 1")
121            var obj = {
122                a: 1, b: 2, c: 3
123            }
124            var { a, b, c } = obj
125            expect(a).assertEqual(1)
126            var array1 = [1, 2, 3]
127            var array2 = [4, 5, 6]
128            var array3 = [...array1, ...array2]
129            expect(array3.length).assertEqual(6)
130            var i = 1
131            for (const num of array1) {
132                expect(num).assertEqual(i)
133                i++
134            }
135            expect(array1.includes(1)).assertTrue()
136            var map = new Map([['a', 1], ['b', 2], ['c', 3]])
137            expect(map.get('a')).assertEqual(1)
138            const set = new Set([1, 2, 3])
139            expect(set.has(1)).assertTrue()
140            var obj1 = { a: 1 }
141            var obj2 = { b: 2 }
142            var obj3 = Object.assign({}, obj1, obj2)
143            expect(obj3.a).assertEqual(1)
144            expect(obj3.b).assertEqual(2)
145            done()
146        })
147
148        /*
149         * @tc.number: G-SOFTWARE-0302
150         * @tc.name: testJsStrictMode0100
151         * @tc.desc: 【G-SOFTWARE-0302】JS 运行时环境必须运行在严格模式
152         * @tc.size: MediumTest
153         * @tc.type: Function
154         * @tc.level: Level 0
155         */
156        it('testJsStrictMode0100', 0, async function (done) {
157            expect(this).assertUndefined()
158            done()
159        })
160
161        /*
162         * @tc.number: G-SOFTWARE-0603
163         * @tc.name: testWeblikeAccessPath0100
164         * @tc.desc: 【G-SOFTWARE-0603】类 web 范式限制应用访问的绝对路径应统一用"/"开头、相对路径统一用"./"或"../"开头
165         * @tc.size: MediumTest
166         * @tc.type: Function
167         * @tc.level: Level 0
168         */
169        it('testWeblikeAccessPath0100', 0, async function (done) {
170            let driver = Driver.create()
171            await driver.delayMs(2000)
172            let text1 = await driver.findComponent(ON.id('absolutionPathImageCompleted'))
173            expect(text1 != undefined).assertTrue()
174            expect(await text1.getText()).assertEqual('AbsolutionPathSuccess')
175            let text2 = await driver.findComponent(ON.id('relativePathImageCompleted1'))
176            expect(text2 != undefined).assertTrue()
177            expect(await text2.getText()).assertEqual('RelativePath1Success')
178            let text3 = await driver.findComponent(ON.id('relativePathImageCompleted2'))
179            expect(text3 != undefined).assertTrue()
180            expect(await text3.getText()).assertEqual('RelativePath2Success')
181            let text4 = await driver.findComponent(ON.id('relativePathImageCompleted3'))
182            expect(text4 != undefined).assertTrue()
183            expect(await text4.getText()).assertEqual('RelativePath3Fail')
184            done()
185        })
186
187        /*
188         * @tc.number: G-SOFTWARE-0604
189         * @tc.name: testWeblikePrivateDirectoryPath0100
190         * @tc.desc: 【G-SOFTWARE-0604】类 web 范式限制应用私有目录的路径前缀应为 internal://app/,
191         *             仅本应用可见,随应用卸载删除
192         * @tc.size: MediumTest
193         * @tc.type: Function
194         * @tc.level: Level 0
195         */
196        it('testWeblikePrivateDirectoryPath0100', 0, async function (done) {
197            let driver = Driver.create()
198            await driver.delayMs(5000)
199            let text = await driver.findComponent(ON.id('fileText1'))
200            expect(text != undefined).assertTrue()
201            expect(await text.getText()).assertEqual('test text')
202            done()
203        })
204    })
205}
206