107ac75b1Sopenharmony_ci/*
207ac75b1Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
307ac75b1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
407ac75b1Sopenharmony_ci * you may not use this file except in compliance with the License.
507ac75b1Sopenharmony_ci * You may obtain a copy of the License at
607ac75b1Sopenharmony_ci *
707ac75b1Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
807ac75b1Sopenharmony_ci *
907ac75b1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1007ac75b1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1107ac75b1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1207ac75b1Sopenharmony_ci * See the License for the specific language governing permissions and
1307ac75b1Sopenharmony_ci * limitations under the License.
1407ac75b1Sopenharmony_ci */
1507ac75b1Sopenharmony_ci
1607ac75b1Sopenharmony_ciimport ts from 'typescript';
1707ac75b1Sopenharmony_ciimport path from 'path';
1807ac75b1Sopenharmony_ciimport chai from 'chai';
1907ac75b1Sopenharmony_ciimport {
2007ac75b1Sopenharmony_ci  describe,
2107ac75b1Sopenharmony_ci  it
2207ac75b1Sopenharmony_ci} from 'mocha';
2307ac75b1Sopenharmony_ciconst expect = chai.expect;
2407ac75b1Sopenharmony_ci
2507ac75b1Sopenharmony_ciimport {
2607ac75b1Sopenharmony_ci  validateUISyntax,
2707ac75b1Sopenharmony_ci  resetComponentCollection,
2807ac75b1Sopenharmony_ci  sourceReplace,
2907ac75b1Sopenharmony_ci  componentCollection
3007ac75b1Sopenharmony_ci} from '../lib/validate_ui_syntax';
3107ac75b1Sopenharmony_ciimport { processUISyntax } from '../lib/process_ui_syntax';
3207ac75b1Sopenharmony_ciimport {
3307ac75b1Sopenharmony_ci  componentInfo,
3407ac75b1Sopenharmony_ci  readFile
3507ac75b1Sopenharmony_ci} from '../lib/utils';
3607ac75b1Sopenharmony_ciimport { BUILD_ON } from '../lib/pre_define';
3707ac75b1Sopenharmony_ci
3807ac75b1Sopenharmony_cifunction expectActual(name: string, filePath: string) {
3907ac75b1Sopenharmony_ci  const content: any = require(filePath);
4007ac75b1Sopenharmony_ci  const source: string = content.source;
4107ac75b1Sopenharmony_ci  process.env.compiler = BUILD_ON;
4207ac75b1Sopenharmony_ci  const afterProcess = sourceReplace(source);
4307ac75b1Sopenharmony_ci  validateUISyntax(source, afterProcess, `${name}.ts`);
4407ac75b1Sopenharmony_ci  const result: ts.TranspileOutput = ts.transpileModule(afterProcess, {
4507ac75b1Sopenharmony_ci    compilerOptions: {
4607ac75b1Sopenharmony_ci      "target": ts.ScriptTarget.ES2021
4707ac75b1Sopenharmony_ci    },
4807ac75b1Sopenharmony_ci    fileName: `${name}.ts`,
4907ac75b1Sopenharmony_ci    transformers: { before: [processUISyntax(null, true)] }
5007ac75b1Sopenharmony_ci  });
5107ac75b1Sopenharmony_ci  componentInfo.id = 0;
5207ac75b1Sopenharmony_ci  componentCollection.customComponents.clear();
5307ac75b1Sopenharmony_ci  resetComponentCollection();
5407ac75b1Sopenharmony_ci  expect(result.outputText).eql(content.expectResult);
5507ac75b1Sopenharmony_ci}
5607ac75b1Sopenharmony_ci
5707ac75b1Sopenharmony_cidescribe('compiler', () => {
5807ac75b1Sopenharmony_ci  const utPath: string = path.resolve(__dirname, './ut');
5907ac75b1Sopenharmony_ci  const utFiles: string[] = [];
6007ac75b1Sopenharmony_ci  readFile(utPath, utFiles);
6107ac75b1Sopenharmony_ci  utFiles.forEach((item) => {
6207ac75b1Sopenharmony_ci    const fileName: string = path.basename(item, '.ts');
6307ac75b1Sopenharmony_ci    it(fileName, () => {
6407ac75b1Sopenharmony_ci      expectActual(fileName, item);
6507ac75b1Sopenharmony_ci    })
6607ac75b1Sopenharmony_ci  })
6707ac75b1Sopenharmony_ci})
68