13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ciconst fs = require('fs'); 173af6ab5fSopenharmony_ciconst path = require('path'); 183af6ab5fSopenharmony_ciconst { exec } = require('child_process'); 193af6ab5fSopenharmony_ciimport { Extension } from '../src/common/type'; 203af6ab5fSopenharmony_ci 213af6ab5fSopenharmony_cifunction obfuscateDirs(obfConfig, obfDir) { 223af6ab5fSopenharmony_ci const command = `node --loader=ts-node/esm src/cli/SecHarmony.ts ${obfDir} --config-path ${obfConfig} --test-type grammar`; 233af6ab5fSopenharmony_ci exec(command, (error, stdout, stderr) => { 243af6ab5fSopenharmony_ci if (error) { 253af6ab5fSopenharmony_ci console.error(`Error executing command: ${error.message}`); 263af6ab5fSopenharmony_ci return; 273af6ab5fSopenharmony_ci } 283af6ab5fSopenharmony_ci if (stdout) { 293af6ab5fSopenharmony_ci console.log('Debug info: ', stdout); 303af6ab5fSopenharmony_ci } 313af6ab5fSopenharmony_ci }); 323af6ab5fSopenharmony_ci} 333af6ab5fSopenharmony_ci 343af6ab5fSopenharmony_cifunction traverseDirs(rootDirPath, configPath) { 353af6ab5fSopenharmony_ci const currentEntries = fs.readdirSync(rootDirPath); 363af6ab5fSopenharmony_ci let configFile = 'obfConfig.json'; 373af6ab5fSopenharmony_ci if (currentEntries.includes(configFile)) { 383af6ab5fSopenharmony_ci configPath = rootDirPath; 393af6ab5fSopenharmony_ci } 403af6ab5fSopenharmony_ci 413af6ab5fSopenharmony_ci const hasJsOrTsFiles = currentEntries.some(entry => { 423af6ab5fSopenharmony_ci return entry.endsWith(Extension.TS) || entry.endsWith(Extension.JS) || entry.endsWith(Extension.DETS); 433af6ab5fSopenharmony_ci }); 443af6ab5fSopenharmony_ci 453af6ab5fSopenharmony_ci if (hasJsOrTsFiles) { 463af6ab5fSopenharmony_ci obfuscateDirs(path.join(configPath, configFile), rootDirPath); 473af6ab5fSopenharmony_ci return; 483af6ab5fSopenharmony_ci } 493af6ab5fSopenharmony_ci 503af6ab5fSopenharmony_ci for (const currentEntry of currentEntries) { 513af6ab5fSopenharmony_ci const currentPath = path.join(rootDirPath, currentEntry); 523af6ab5fSopenharmony_ci if (fs.statSync(currentPath).isDirectory()) { 533af6ab5fSopenharmony_ci traverseDirs(currentPath, configPath); 543af6ab5fSopenharmony_ci } 553af6ab5fSopenharmony_ci } 563af6ab5fSopenharmony_ci} 573af6ab5fSopenharmony_ci 583af6ab5fSopenharmony_cifunction run() { 593af6ab5fSopenharmony_ci const testCasesRootDir = path.join(__dirname, '../test/grammar'); 603af6ab5fSopenharmony_ci traverseDirs(testCasesRootDir, testCasesRootDir); 613af6ab5fSopenharmony_ci} 623af6ab5fSopenharmony_ci 633af6ab5fSopenharmony_cifunction main() { 643af6ab5fSopenharmony_ci run(); 653af6ab5fSopenharmony_ci} 663af6ab5fSopenharmony_ci 673af6ab5fSopenharmony_cimain();