const fs = require("fs"); const path = require("path"); const fourslashCasesNameArray = [ "addMemberNotInNodeModulesDeclarationFile.ts", "codeFixAddMissingFunctionDeclaration16.ts", "codeFixCannotFindModule_all.ts", "codeFixCannotFindModule_suggestion_falsePositive.ts", "codeFixCannotFindModule_suggestion_js.ts", "codeFixCannotFindModule_suggestion.ts", "codeFixCannotFindModule.ts", "codeFixGenerateDefinitions.ts", "completionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved.ts", "completionForStringLiteralNonrelativeImport1.ts", "completionForStringLiteralNonrelativeImport2.ts", "completionForStringLiteralNonrelativeImport3.ts", "completionForStringLiteralNonrelativeImport4.ts", "completionForStringLiteralNonrelativeImport7.ts", "completionForStringLiteralNonrelativeImport10.ts", "completionForStringLiteralNonrelativeImport11.ts", "completionForStringLiteralNonrelativeImport13.ts", "completionForStringLiteralNonrelativeImportTypings3.ts", "completionInJsDocQualifiedNames.ts", "completionListForExportEquals.ts", "completionListForExportEquals2.ts", "completionListInImportClause05.ts", "completionsImport_compilerOptionsModule.ts", "completionsImport_default_symbolName.ts", "completionsImport_defaultFalsePositive.ts", "completionsImport_exportEqualsNamespace_noDuplicate.ts", "completionsImport_filteredByInvalidPackageJson_direct.ts", "completionsImport_filteredByPackageJson_@typesImplicit.ts", "completionsImport_filteredByPackageJson_@typesOnly.ts", "completionsImport_filteredByPackageJson_ambient.ts", "completionsImport_filteredByPackageJson_direct.ts", "completionsImport_filteredByPackageJson_nested.ts", "completionsImport_filteredByPackageJson_peerDependencies.ts", "completionsImport_filteredByPackageJson_reexport.ts", "completionsImport_filteredByPackageJson_reexport2.ts", "completionsImport_filteredByPackageJson_reexport3.ts", "completionsImport_filteredByPackageJson_reexport4.ts", "completionsImport_notFromUnrelatedNodeModules.ts", "completionsImport_umdModules1_globalAccess.ts", "completionsImport_umdModules2_moduleExports.ts", "completionsImport_umdModules3_script.ts", "completionsPathsJsonModule.ts", "completionsPaths.ts", "completionsPaths_fromTypings.ts", "completionsPaths_importType.ts", "documentHighlights_moduleImport_filesToSearch.ts", "documentHighlights_moduleImport_filesToSearchWithInvalidFile.ts", "duplicatePackageServices_fileChanges.ts", "duplicatePackageServices.ts", "exportEqualNamespaceClassESModuleInterop.ts", "findAllReferencesTripleSlash.ts", "findAllReferencesUmdModuleAsGlobalConst.ts", "findAllRefsExportAsNamespace.ts", "findAllRefsForModuleGlobal.ts", "findAllRefsImportStarOfExportEquals.ts", "findAllRefsModuleAugmentation.ts", "getEditsForFileRename_ambientModule.ts", "getEditsForFileRename_directory_noUpdateNodeModulesImport.ts", "getEditsForFileRename_nodeModuleDirectoryCase.ts", "getEditsForFileRename_symlink.ts", "goToDefinition_untypedModule.ts", "importFixesGlobalTypingsCache.ts", "importFixesWithPackageJsonInSideAnotherPackage.ts", "importJsNodeModule1.ts", "importJsNodeModule2.ts", "importJsNodeModule3.ts", "importJsNodeModule4.ts", "importNameCodeFixExistingImport5.ts", "importNameCodeFixExistingImport6.ts", "importNameCodeFixNewImportFromAtTypes.ts", "importNameCodeFixNewImportFromAtTypesScopedPackage.ts", "importNameCodeFixNewImportIndex_notForClassicResolution.ts", "importNameCodeFixNewImportNodeModules0.ts", "importNameCodeFixNewImportNodeModules1.ts", "importNameCodeFixNewImportNodeModules2.ts", "importNameCodeFixNewImportNodeModules3.ts", "importNameCodeFixNewImportNodeModules4.ts", "importNameCodeFixNewImportNodeModules5.ts", "importNameCodeFixNewImportNodeModules6.ts", "importNameCodeFixNewImportNodeModules7.ts", "importNameCodeFixNewImportNodeModules8.ts", "importNameCodeFix_avoidRelativeNodeModules.ts", "importNameCodeFix_getCanonicalFileName.ts", "importNameCodeFix_symlink.ts", "importNameCodeFix_symlink_own_package.ts", "importNameCodeFix_symlink_own_package_2.ts", "importNameCodeFix_types_classic.ts", "importNameCodeFixOptionalImport1.ts", "importNameCodeFixUMDGlobalReact0.ts", "importNameCodeFixUMDGlobalReact1.ts", "importTypesDeclarationDiagnosticsNoServerError.ts", "moduleReexportedIntoGlobalQuickInfo.ts", "noImportCompletionsInOtherJavaScriptFile.ts" ]; const compilerCasesNameArray = [ "declarationEmitForGlobalishSpecifierSymlink.ts", "declarationEmitForGlobalishSpecifierSymlink2.ts", "declarationEmitHasTypesRefOnNamespaceUse.ts", "declarationEmitReexportedSymlinkReference.ts", "declarationEmitReexportedSymlinkReference2.ts", "declarationEmitReexportedSymlinkReference3.ts", "declarationEmitSymlinkPaths.ts", "declarationEmitUnnessesaryTypeReferenceNotAdded.ts", "declarationEmitWithInvalidPackageJsonTypings.ts", "duplicatePackage_globalMerge.ts", "duplicatePackage.ts", "duplicatePackage_packageIdIncludesSubModule.ts", "duplicatePackage_referenceTypes.ts", "duplicatePackage_relativeImportWithinPackage.ts", "duplicatePackage_relativeImportWithinPackage_scoped.ts", "duplicatePackage_subModule.ts", "duplicatePackage_withErrors.ts", "moduleLocalImportNotIncorrectlyRedirected.ts", "moduleResolutionPackageIdWithRelativeAndAbsolutePath.ts", "moduleResolutionWithExtensions_unexpected.ts", "moduleResolutionWithExtensions_unexpected2.ts", "moduleResolution_packageJson_notAtPackageRoot.ts", "moduleResolution_packageJson_notAtPackageRoot_fakeScopedPackage.ts", "moduleResolution_packageJson_scopedPackage.ts", "moduleResolution_packageJson_yesAtPackageRoot.ts", "moduleResolution_packageJson_yesAtPackageRoot_fakeScopedPackage.ts", "moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts", "symbolLinkDeclarationEmitModuleNamesImportRef.ts" ]; const thisFilePath = __dirname; function GenOHFourslashTestCases() { const ohFourslashCasesDir = path.join(thisFilePath, "../tests/cases/fourslash/oh"); if (!fs.existsSync(ohFourslashCasesDir)) { fs.mkdirSync(ohFourslashCasesDir); } for (const caseName of fourslashCasesNameArray) { const fourslashCasesNamePath = path.join(thisFilePath, "../tests/cases/fourslash", caseName); const ohFourslashCasesName = caseName.replace(/NodeModules/g, "OHModules").replace(/PackageJson/g, "OHPackageJson5"); const ohFourslashCasesNamePath = path.join(ohFourslashCasesDir, ohFourslashCasesName); const fileContent = fs.readFileSync(fourslashCasesNamePath).toString(); let ohfileContent = fileContent.replace(/node_modules/g, "oh_modules").replace(/package.json/g, "oh-package.json5"); if (caseName === "completionForStringLiteralNonrelativeImport7.ts" || caseName === "completionForStringLiteralNonrelativeImport11.ts") { ohfileContent = ohfileContent.replace("fourslash/modules", "fourslash/oh/modules") } fs.writeFileSync(ohFourslashCasesNamePath, ohfileContent); } } function GenOHCompilerTestCases() { const ohCompilerCasesDir = path.join(thisFilePath, "../tests/cases/compiler-oh"); const baselineDir = path.join(thisFilePath, "../tests/baselines/reference"); const baselineTypes = [".js", ".symbols", ".types", ".errors.txt", ".trace.json"]; if (!fs.existsSync(ohCompilerCasesDir)) { fs.mkdirSync(ohCompilerCasesDir); } for (const caseName of compilerCasesNameArray) { const compilerCasesNamePath = path.join(thisFilePath, "../tests/cases/compiler", caseName); let ohCompilerCasesName = ""; if (RegExp(/NodeModules|PackageJson/g).test(caseName)) { ohCompilerCasesName = caseName.replace(/NodeModules/g, "OHModules").replace(/PackageJson/g, "OHPackageJson5"); } else { ohCompilerCasesName = caseName.replace(".ts", "_isohpm.ts"); } const ohCompilerCasesNamePath = path.join(ohCompilerCasesDir, ohCompilerCasesName); const fileContent = fs.readFileSync(compilerCasesNamePath).toString(); let ohfileContent = ""; if (fileContent.startsWith("// @filename")) { ohfileContent = "// @packageManagerType: ohpm\r\n" + fileContent.replace(/node_modules/g, "oh_modules").replace(/package.json/g, "oh-package.json5"); } else { ohfileContent = "// @packageManagerType: ohpm\n" + fileContent.replace(/node_modules/g, "oh_modules").replace(/package.json/g, "oh-package.json5"); } fs.writeFileSync(ohCompilerCasesNamePath, ohfileContent); const baselineCaseNamePath = path.join(baselineDir, caseName); for (const type of baselineTypes) { const baselineNamePath = baselineCaseNamePath.replace(".ts", type); if (!fs.existsSync(baselineNamePath)) { continue; } const content = fs.readFileSync(baselineNamePath).toString(); let ohContent = content.replace(/node_modules/g, "oh_modules").replace(/package.json/g, "oh-package.json5").replace(caseName, ohCompilerCasesName); if (type == ".js") { ohContent = ohContent.replace("tests/cases/compiler", "tests/cases/compiler-oh"); } const ohBaselineNamePath = path.join(baselineDir, ohCompilerCasesName).replace(".ts", type); fs.writeFileSync(ohBaselineNamePath, ohContent); } } } function main() { GenOHFourslashTestCases(); GenOHCompilerTestCases(); } main()