16a23e08bSopenharmony_ci/* 26a23e08bSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 36a23e08bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46a23e08bSopenharmony_ci * you may not use this file except in compliance with the License. 56a23e08bSopenharmony_ci * You may obtain a copy of the License at 66a23e08bSopenharmony_ci * 76a23e08bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86a23e08bSopenharmony_ci * 96a23e08bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106a23e08bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116a23e08bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126a23e08bSopenharmony_ci * See the License for the specific language governing permissions and 136a23e08bSopenharmony_ci * limitations under the License. 146a23e08bSopenharmony_ci */ 156a23e08bSopenharmony_ci 166a23e08bSopenharmony_ci'use strict'; 176a23e08bSopenharmony_ci 186a23e08bSopenharmony_ciconst fs = require('fs'); 196a23e08bSopenharmony_ciconst path =require('path'); 206a23e08bSopenharmony_ci 216a23e08bSopenharmony_ciconst chai = require('chai'); 226a23e08bSopenharmony_ciconst sinon = require('sinon'); 236a23e08bSopenharmony_ciconst expect = chai.expect; 246a23e08bSopenharmony_ci 256a23e08bSopenharmony_cifunction getActualString(componentName) { 266a23e08bSopenharmony_ci const filePath = path.join(__dirname, 'testcase/build/pages', `${componentName}`, `${componentName}.js`); 276a23e08bSopenharmony_ci const fileContent = fs.readFileSync(filePath, 'utf-8'); 286a23e08bSopenharmony_ci const fileString = fileContent.toString(); 296a23e08bSopenharmony_ci return fileString; 306a23e08bSopenharmony_ci} 316a23e08bSopenharmony_ci 326a23e08bSopenharmony_cifunction getExpectJSON(componentName) { 336a23e08bSopenharmony_ci const matchHashComment = /\/\*(.|\n)+\*\//; 346a23e08bSopenharmony_ci const filepath = path.join(__dirname, 'expected', `${componentName}.js`); 356a23e08bSopenharmony_ci const expectedContent = fs.readFileSync(filepath, 'utf-8').substring(607); 366a23e08bSopenharmony_ci const expectedObj = JSON.parse(expectedContent.toString().replace(matchHashComment, '')); 376a23e08bSopenharmony_ci return expectedObj; 386a23e08bSopenharmony_ci} 396a23e08bSopenharmony_ci 406a23e08bSopenharmony_cifunction stringifyActual(json) { 416a23e08bSopenharmony_ci return JSON.stringify(json, function(key, value) { 426a23e08bSopenharmony_ci if (typeof value === 'function') { 436a23e08bSopenharmony_ci value = value.toString(); 446a23e08bSopenharmony_ci } 456a23e08bSopenharmony_ci return value; 466a23e08bSopenharmony_ci }, ' '); 476a23e08bSopenharmony_ci} 486a23e08bSopenharmony_ci 496a23e08bSopenharmony_cidescribe('build', () => { 506a23e08bSopenharmony_ci let $app_define$; 516a23e08bSopenharmony_ci let $app_bootstrap$; 526a23e08bSopenharmony_ci let components; 536a23e08bSopenharmony_ci let requireStub; 546a23e08bSopenharmony_ci let bootstrapStub; 556a23e08bSopenharmony_ci 566a23e08bSopenharmony_ci function expectActual(name) { 576a23e08bSopenharmony_ci const actualStr = getActualString(name); 586a23e08bSopenharmony_ci const fn = new Function('$app_define$', '$app_bootstrap$', actualStr); 596a23e08bSopenharmony_ci fn($app_define$, $app_bootstrap$); 606a23e08bSopenharmony_ci const expectJSON = getExpectJSON(name); 616a23e08bSopenharmony_ci expect(JSON.parse(stringifyActual(components))).eql(expectJSON); 626a23e08bSopenharmony_ci expect(components).to.include.keys($app_bootstrap$.firstCall.args[0]); 636a23e08bSopenharmony_ci return actualStr; 646a23e08bSopenharmony_ci } 656a23e08bSopenharmony_ci 666a23e08bSopenharmony_ci beforeEach(() => { 676a23e08bSopenharmony_ci components = {}; 686a23e08bSopenharmony_ci requireStub = sinon.stub(); 696a23e08bSopenharmony_ci bootstrapStub = sinon.stub(); 706a23e08bSopenharmony_ci 716a23e08bSopenharmony_ci $app_define$ = function(componentName, deps, factory) { 726a23e08bSopenharmony_ci if (components[componentName]) { 736a23e08bSopenharmony_ci throw new Error(`${componentName} is defined repeatly`); 746a23e08bSopenharmony_ci } 756a23e08bSopenharmony_ci 766a23e08bSopenharmony_ci let $app_require$ = requireStub; 776a23e08bSopenharmony_ci let $app_exports$ = {}; 786a23e08bSopenharmony_ci let $app_module$ = {exports : $app_exports$}; 796a23e08bSopenharmony_ci 806a23e08bSopenharmony_ci factory($app_require$, $app_exports$, $app_module$); 816a23e08bSopenharmony_ci components[componentName] = $app_module$.exports; 826a23e08bSopenharmony_ci } 836a23e08bSopenharmony_ci 846a23e08bSopenharmony_ci $app_bootstrap$ = bootstrapStub; 856a23e08bSopenharmony_ci }); 866a23e08bSopenharmony_ci 876a23e08bSopenharmony_ci it('class', () => { 886a23e08bSopenharmony_ci expectActual('class'); 896a23e08bSopenharmony_ci }); 906a23e08bSopenharmony_ci it('event', () => { 916a23e08bSopenharmony_ci expectActual('event'); 926a23e08bSopenharmony_ci }); 936a23e08bSopenharmony_ci it('expression', () => { 946a23e08bSopenharmony_ci expectActual('expression'); 956a23e08bSopenharmony_ci }); 966a23e08bSopenharmony_ci it('commonAttr', () => { 976a23e08bSopenharmony_ci expectActual('commonAttr'); 986a23e08bSopenharmony_ci }); 996a23e08bSopenharmony_ci it('uncommonAttr', () => { 1006a23e08bSopenharmony_ci expectActual('uncommonAttr'); 1016a23e08bSopenharmony_ci }); 1026a23e08bSopenharmony_ci it('privateAttr', () => { 1036a23e08bSopenharmony_ci expectActual('privateAttr'); 1046a23e08bSopenharmony_ci }); 1056a23e08bSopenharmony_ci it('forDirective', () => { 1066a23e08bSopenharmony_ci expectActual('forDirective'); 1076a23e08bSopenharmony_ci }); 1086a23e08bSopenharmony_ci it('ifDirective', () => { 1096a23e08bSopenharmony_ci expectActual('ifDirective'); 1106a23e08bSopenharmony_ci }); 1116a23e08bSopenharmony_ci it('inlineStyle', () => { 1126a23e08bSopenharmony_ci expectActual('inlineStyle'); 1136a23e08bSopenharmony_ci }); 1146a23e08bSopenharmony_ci it('exteriorStyle', () => { 1156a23e08bSopenharmony_ci expectActual('exteriorStyle'); 1166a23e08bSopenharmony_ci }); 1176a23e08bSopenharmony_ci it('importCSS', () => { 1186a23e08bSopenharmony_ci expectActual('importCSS'); 1196a23e08bSopenharmony_ci }); 1206a23e08bSopenharmony_ci it('mediaQuery', () => { 1216a23e08bSopenharmony_ci expectActual('mediaQuery'); 1226a23e08bSopenharmony_ci }); 1236a23e08bSopenharmony_ci});