1e484b35bSopenharmony_ci/* 2e484b35bSopenharmony_ci * Licensed to the Apache Software Foundation (ASF) under one 3e484b35bSopenharmony_ci * or more contributor license agreements. See the NOTICE file 4e484b35bSopenharmony_ci * distributed with this work for additional information 5e484b35bSopenharmony_ci * regarding copyright ownership. The ASF licenses this file 6e484b35bSopenharmony_ci * to you under the Apache License, Version 2.0 (the 7e484b35bSopenharmony_ci * "License"); you may not use this file except in compliance 8e484b35bSopenharmony_ci * with the License. You may obtain a copy of the License at 9e484b35bSopenharmony_ci * 10e484b35bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 11e484b35bSopenharmony_ci * 12e484b35bSopenharmony_ci * Unless required by applicable law or agreed to in writing, 13e484b35bSopenharmony_ci * software distributed under the License is distributed on an 14e484b35bSopenharmony_ci * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15e484b35bSopenharmony_ci * KIND, either express or implied. See the License for the 16e484b35bSopenharmony_ci * specific language governing permissions and limitations 17e484b35bSopenharmony_ci * under the License. 18e484b35bSopenharmony_ci */ 19e484b35bSopenharmony_ci 20e484b35bSopenharmony_ciimport chai from 'chai'; 21e484b35bSopenharmony_ciimport { 22e484b35bSopenharmony_ci before, 23e484b35bSopenharmony_ci after, 24e484b35bSopenharmony_ci describe, 25e484b35bSopenharmony_ci it 26e484b35bSopenharmony_ci} from 'mocha'; 27e484b35bSopenharmony_ciimport { 28e484b35bSopenharmony_ci fakeLog, 29e484b35bSopenharmony_ci fakeLogRestore 30e484b35bSopenharmony_ci} from '../fakeLog'; 31e484b35bSopenharmony_ciimport { initFramework } from '../../runtime/preparation/init'; 32e484b35bSopenharmony_ciimport framework from '../../runtime/preparation/methods'; 33e484b35bSopenharmony_ciimport { 34e484b35bSopenharmony_ci getModule, 35e484b35bSopenharmony_ci clearModules, 36e484b35bSopenharmony_ci allModules 37e484b35bSopenharmony_ci} from '../../runtime/main/page/register'; 38e484b35bSopenharmony_ciimport { App } from '../../runtime/main/app/App'; 39e484b35bSopenharmony_ciimport { PageLinkedMap } from '../../runtime/main/app/map'; 40e484b35bSopenharmony_ciimport Page from '../../runtime/main/page'; 41e484b35bSopenharmony_ci 42e484b35bSopenharmony_ciconst expect = chai.expect; 43e484b35bSopenharmony_ci 44e484b35bSopenharmony_cifunction clearRefs(json) { 45e484b35bSopenharmony_ci delete json.ref; 46e484b35bSopenharmony_ci if (json.children) { 47e484b35bSopenharmony_ci json.children.forEach(clearRefs); 48e484b35bSopenharmony_ci } 49e484b35bSopenharmony_ci} 50e484b35bSopenharmony_ci 51e484b35bSopenharmony_cidescribe('framework entry', () => { 52e484b35bSopenharmony_ci fakeLog(); 53e484b35bSopenharmony_ci 54e484b35bSopenharmony_ci const pageMap: PageLinkedMap = App.pageMap; 55e484b35bSopenharmony_ci let instanceId; 56e484b35bSopenharmony_ci const options = { 57e484b35bSopenharmony_ci orientation: 'portrait', 58e484b35bSopenharmony_ci 'device-type': 'phone', 59e484b35bSopenharmony_ci resolution: '3.0', 60e484b35bSopenharmony_ci 'aspect-ratio': 'string', 61e484b35bSopenharmony_ci 'device-width': '1176', 62e484b35bSopenharmony_ci 'device-height': '2400', 63e484b35bSopenharmony_ci 'round-screen': false, 64e484b35bSopenharmony_ci width: '0', 65e484b35bSopenharmony_ci height: '0', 66e484b35bSopenharmony_ci isInit: true, 67e484b35bSopenharmony_ci 'dark-mode': 'false', 68e484b35bSopenharmony_ci pcPreview: 'disable', 69e484b35bSopenharmony_ci appInstanceId: '10002', 70e484b35bSopenharmony_ci packageName: 'com.example.helloworld', 71e484b35bSopenharmony_ci resourcesConfiguration: [], 72e484b35bSopenharmony_ci i18n: { 73e484b35bSopenharmony_ci resources: [ 74e484b35bSopenharmony_ci {'strings': {'hello': 'hello', 'world': 'world'}, 75e484b35bSopenharmony_ci 'Files': {}}, 76e484b35bSopenharmony_ci {'strings': {'hello': 'Hello', 'world': 'World'}, 77e484b35bSopenharmony_ci 'Files': {}} 78e484b35bSopenharmony_ci ] 79e484b35bSopenharmony_ci }, 80e484b35bSopenharmony_ci language: 'zh_CN', 81e484b35bSopenharmony_ci appCreate: true, 82e484b35bSopenharmony_ci appCode: '', 83e484b35bSopenharmony_ci bundleUrl: '' 84e484b35bSopenharmony_ci }; 85e484b35bSopenharmony_ci 86e484b35bSopenharmony_ci before(() => { 87e484b35bSopenharmony_ci initFramework(); 88e484b35bSopenharmony_ci global.callNative = (id, tasks, callbackId) => { 89e484b35bSopenharmony_ci if (callbackId !== '-1') { 90e484b35bSopenharmony_ci framework.callJS(id, [{ 91e484b35bSopenharmony_ci method: 'callback', 92e484b35bSopenharmony_ci args: [callbackId, null, true] 93e484b35bSopenharmony_ci }]); 94e484b35bSopenharmony_ci } 95e484b35bSopenharmony_ci }; 96e484b35bSopenharmony_ci }); 97e484b35bSopenharmony_ci 98e484b35bSopenharmony_ci after(() => { 99e484b35bSopenharmony_ci fakeLogRestore(); 100e484b35bSopenharmony_ci framework.destroyInstance(instanceId); 101e484b35bSopenharmony_ci }); 102e484b35bSopenharmony_ci 103e484b35bSopenharmony_ci it('createInstance', () => { 104e484b35bSopenharmony_ci instanceId = Date.now() + ''; 105e484b35bSopenharmony_ci const code: string = ` 106e484b35bSopenharmony_ci $app_define$('@app-component/index', [], 107e484b35bSopenharmony_ci function($app_require$, $app_exports$, $app_module$) { 108e484b35bSopenharmony_ci $app_module$.exports = { 109e484b35bSopenharmony_ci data: {}, 110e484b35bSopenharmony_ci } 111e484b35bSopenharmony_ci $app_module$.exports.template = { 112e484b35bSopenharmony_ci 'type': 'div', 113e484b35bSopenharmony_ci 'attr': {}, 114e484b35bSopenharmony_ci 'children': [ 115e484b35bSopenharmony_ci { 116e484b35bSopenharmony_ci 'type': 'text', 117e484b35bSopenharmony_ci 'attr': { 118e484b35bSopenharmony_ci 'value': 'This is the index page.' 119e484b35bSopenharmony_ci }, 120e484b35bSopenharmony_ci 'classList': [ 121e484b35bSopenharmony_ci 'title' 122e484b35bSopenharmony_ci ] 123e484b35bSopenharmony_ci } 124e484b35bSopenharmony_ci ] 125e484b35bSopenharmony_ci } 126e484b35bSopenharmony_ci $app_module$.exports.style = { 127e484b35bSopenharmony_ci '.title': { 128e484b35bSopenharmony_ci 'fontSize': '50px' 129e484b35bSopenharmony_ci } 130e484b35bSopenharmony_ci } 131e484b35bSopenharmony_ci }) 132e484b35bSopenharmony_ci $app_bootstrap$('@app-component/index',undefined,undefined) 133e484b35bSopenharmony_ci `; 134e484b35bSopenharmony_ci const expectComponent = { 135e484b35bSopenharmony_ci 'index': { 136e484b35bSopenharmony_ci 'data': {}, 137e484b35bSopenharmony_ci 'template': { 138e484b35bSopenharmony_ci 'type': 'div', 139e484b35bSopenharmony_ci 'attr': {}, 140e484b35bSopenharmony_ci 'children': [{'type': 'text', 'attr': {'value': 'This is the index page.'}, 'classList': ['title']}] 141e484b35bSopenharmony_ci }, 142e484b35bSopenharmony_ci 'style': {'.title': {'fontSize': '50px'}} 143e484b35bSopenharmony_ci } 144e484b35bSopenharmony_ci }; 145e484b35bSopenharmony_ci framework.createInstance(instanceId, code, options, null); 146e484b35bSopenharmony_ci expect(pageMap[instanceId].customComponentMap).eql(expectComponent); 147e484b35bSopenharmony_ci }); 148e484b35bSopenharmony_ci 149e484b35bSopenharmony_ci describe('getRoot', () => { 150e484b35bSopenharmony_ci it('with an exist instanceId', () => { 151e484b35bSopenharmony_ci const json = framework.getRoot(instanceId); 152e484b35bSopenharmony_ci expect(json.ref).eql('_root'); 153e484b35bSopenharmony_ci clearRefs(json); 154e484b35bSopenharmony_ci const expectJSON = { 155e484b35bSopenharmony_ci type: 'div', 156e484b35bSopenharmony_ci attr: {}, 157e484b35bSopenharmony_ci style: {}, 158e484b35bSopenharmony_ci children: [{ 159e484b35bSopenharmony_ci type: 'text', 160e484b35bSopenharmony_ci attr: { 161e484b35bSopenharmony_ci value: 'This is the index page.' 162e484b35bSopenharmony_ci }, 163e484b35bSopenharmony_ci customComponent: false, 164e484b35bSopenharmony_ci style: {fontSize: '50px'} 165e484b35bSopenharmony_ci }], 166e484b35bSopenharmony_ci event: ['viewappear', 'viewdisappear', 'viewsizechanged'], 167e484b35bSopenharmony_ci customComponent: true 168e484b35bSopenharmony_ci }; 169e484b35bSopenharmony_ci expect(json).eql(expectJSON); 170e484b35bSopenharmony_ci }); 171e484b35bSopenharmony_ci }); 172e484b35bSopenharmony_ci 173e484b35bSopenharmony_ci describe('callJS', () => { 174e484b35bSopenharmony_ci it('fireEvent with no params', () => { 175e484b35bSopenharmony_ci const result = framework.callJS(undefined, undefined); 176e484b35bSopenharmony_ci expect(result).to.be.an.instanceof(Error); 177e484b35bSopenharmony_ci }); 178e484b35bSopenharmony_ci 179e484b35bSopenharmony_ci it('non-exist instanceId', () => { 180e484b35bSopenharmony_ci const result = framework.callJS('123', [{ 181e484b35bSopenharmony_ci method: 'fireEvent', 182e484b35bSopenharmony_ci args: [] 183e484b35bSopenharmony_ci }]); 184e484b35bSopenharmony_ci expect(result).to.be.an.instanceof(Error); 185e484b35bSopenharmony_ci }); 186e484b35bSopenharmony_ci 187e484b35bSopenharmony_ci it('non-array tasks', () => { 188e484b35bSopenharmony_ci const result = framework.callJS(instanceId, { 189e484b35bSopenharmony_ci // @ts-ignore 190e484b35bSopenharmony_ci method: 'fireEvent', 191e484b35bSopenharmony_ci args: [] 192e484b35bSopenharmony_ci }); 193e484b35bSopenharmony_ci expect(result).to.be.an.instanceof(Error); 194e484b35bSopenharmony_ci }); 195e484b35bSopenharmony_ci }); 196e484b35bSopenharmony_ci 197e484b35bSopenharmony_ci describe('destroyInstance', () => { 198e484b35bSopenharmony_ci it('with no params', () => { 199e484b35bSopenharmony_ci const result = framework.destroyInstance(undefined); 200e484b35bSopenharmony_ci expect(result).to.be.an.instanceof(Error); 201e484b35bSopenharmony_ci }); 202e484b35bSopenharmony_ci 203e484b35bSopenharmony_ci it('with an exist instanceId', () => { 204e484b35bSopenharmony_ci const result = framework.destroyInstance(instanceId); 205e484b35bSopenharmony_ci expect(result[instanceId]).to.be.undefined; 206e484b35bSopenharmony_ci }); 207e484b35bSopenharmony_ci 208e484b35bSopenharmony_ci it('non-exist instanceId', () => { 209e484b35bSopenharmony_ci const result = framework.destroyInstance('123'); 210e484b35bSopenharmony_ci expect(result).to.be.an.instanceof(Error); 211e484b35bSopenharmony_ci }); 212e484b35bSopenharmony_ci }); 213e484b35bSopenharmony_ci 214e484b35bSopenharmony_ci describe('registerModules', () => { 215e484b35bSopenharmony_ci it('with object of modules', () => { 216e484b35bSopenharmony_ci clearModules(); 217e484b35bSopenharmony_ci expect(allModules()).to.deep.equal({}); 218e484b35bSopenharmony_ci const modules = { 219e484b35bSopenharmony_ci 'system.test': ['getInfo', 'getAvailableStorage', 'getCpuInfo'] 220e484b35bSopenharmony_ci }; 221e484b35bSopenharmony_ci framework.registerModules(modules); 222e484b35bSopenharmony_ci expect(getModule('system')).to.be.an('object'); 223e484b35bSopenharmony_ci clearModules(); 224e484b35bSopenharmony_ci }); 225e484b35bSopenharmony_ci }); 226e484b35bSopenharmony_ci}); 227