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_ciconst sinon = require("sinon"); 216a23e08bSopenharmony_ciconst { expect } = require('chai'); 226a23e08bSopenharmony_ci 236a23e08bSopenharmony_cifunction getJsBundle(componentName) { 246a23e08bSopenharmony_ci const filePath = path.join( 256a23e08bSopenharmony_ci __dirname, 266a23e08bSopenharmony_ci "testcase/build/pages", 276a23e08bSopenharmony_ci `${componentName}`, 286a23e08bSopenharmony_ci `${componentName}.js` 296a23e08bSopenharmony_ci ); 306a23e08bSopenharmony_ci const fileContent = fs.readFileSync(filePath, "utf-8"); 316a23e08bSopenharmony_ci const fileString = fileContent.toString(); 326a23e08bSopenharmony_ci return fileString; 336a23e08bSopenharmony_ci} 346a23e08bSopenharmony_ci 356a23e08bSopenharmony_cifunction getExpectedObj(componentName) { 366a23e08bSopenharmony_ci const matchHashComment = /\/\*(.|\n|\r)+\*\//; 376a23e08bSopenharmony_ci const filepath = path.join(__dirname, "expected", `${componentName}.js`); 386a23e08bSopenharmony_ci const expectedContent = fs.readFileSync(filepath, "utf-8"); 396a23e08bSopenharmony_ci const expectedObj = JSON.parse(expectedContent.toString().replace(matchHashComment, '')); 406a23e08bSopenharmony_ci return expectedObj; 416a23e08bSopenharmony_ci} 426a23e08bSopenharmony_ci 436a23e08bSopenharmony_cifunction getActualObj(data) { 446a23e08bSopenharmony_ci const actualString = JSON.stringify(data, function (key, value) { 456a23e08bSopenharmony_ci if (typeof value === "function") { 466a23e08bSopenharmony_ci value = value.toString(); 476a23e08bSopenharmony_ci } 486a23e08bSopenharmony_ci return value; 496a23e08bSopenharmony_ci }); 506a23e08bSopenharmony_ci const actualObj = JSON.parse(actualString); 516a23e08bSopenharmony_ci return actualObj; 526a23e08bSopenharmony_ci} 536a23e08bSopenharmony_ci 546a23e08bSopenharmony_cidescribe("build", () => { 556a23e08bSopenharmony_ci let viewModelOptions; 566a23e08bSopenharmony_ci function ViewModel(options) { 576a23e08bSopenharmony_ci viewModelOptions = options; 586a23e08bSopenharmony_ci } 596a23e08bSopenharmony_ci const requireNative = sinon.stub(); 606a23e08bSopenharmony_ci function expectActual(componentName) { 616a23e08bSopenharmony_ci const actualStr = getJsBundle(componentName); 626a23e08bSopenharmony_ci const fn = new Function("ViewModel", "requireNative", actualStr); 636a23e08bSopenharmony_ci fn(ViewModel, requireNative); 646a23e08bSopenharmony_ci expect(getActualObj(viewModelOptions)).eql( 656a23e08bSopenharmony_ci getExpectedObj(componentName) 666a23e08bSopenharmony_ci ); 676a23e08bSopenharmony_ci } 686a23e08bSopenharmony_ci it("attribute test", () => { 696a23e08bSopenharmony_ci expectActual("attribute"); 706a23e08bSopenharmony_ci }); 716a23e08bSopenharmony_ci it("class test", () => { 726a23e08bSopenharmony_ci expectActual("class"); 736a23e08bSopenharmony_ci }); 746a23e08bSopenharmony_ci it("event test", () => { 756a23e08bSopenharmony_ci expectActual("event"); 766a23e08bSopenharmony_ci }); 776a23e08bSopenharmony_ci it("expression test", () => { 786a23e08bSopenharmony_ci expectActual("expression"); 796a23e08bSopenharmony_ci }); 806a23e08bSopenharmony_ci it("exteriorStyle test", () => { 816a23e08bSopenharmony_ci expectActual("exteriorStyle"); 826a23e08bSopenharmony_ci }); 836a23e08bSopenharmony_ci it("for directive", () => { 846a23e08bSopenharmony_ci expectActual("forDirective"); 856a23e08bSopenharmony_ci }); 866a23e08bSopenharmony_ci it("if directive", () => { 876a23e08bSopenharmony_ci expectActual("ifDirective"); 886a23e08bSopenharmony_ci }); 896a23e08bSopenharmony_ci it("importJS test", () => { 906a23e08bSopenharmony_ci expectActual("importJS"); 916a23e08bSopenharmony_ci }); 926a23e08bSopenharmony_ci it("inlineStyle test", () => { 936a23e08bSopenharmony_ci expectActual("inlineStyle"); 946a23e08bSopenharmony_ci }); 956a23e08bSopenharmony_ci it("bubbleEvent test", () => { 966a23e08bSopenharmony_ci expectActual("bubble"); 976a23e08bSopenharmony_ci }); 986a23e08bSopenharmony_ci it("globalization performance optimization music test", () => { 996a23e08bSopenharmony_ci expectActual("music"); 1006a23e08bSopenharmony_ci }); 1016a23e08bSopenharmony_ci it("globalization performance optimization sick test", () => { 1026a23e08bSopenharmony_ci expectActual("sick"); 1036a23e08bSopenharmony_ci }); 1046a23e08bSopenharmony_ci}); 105