Skip to content

Commit a5c0df4

Browse files
authored
Add Tern auto-installation for JavaScript (#1781)
1 parent 5e964a3 commit a5c0df4

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

utbot-intellij-js/src/main/kotlin/org/utbot/intellij/plugin/language/js/JsDialogProcessor.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import settings.JsDynamicSettings
2929
import settings.JsExportsSettings.endComment
3030
import settings.JsExportsSettings.startComment
3131
import settings.JsPackagesSettings.mochaData
32+
import settings.JsPackagesSettings.nycData
33+
import settings.JsPackagesSettings.ternData
3234
import settings.JsTestGenerationSettings.dummyClassName
3335
import settings.PackageData
3436
import utils.JsCmdExec
@@ -56,9 +58,9 @@ object JsDialogProcessor {
5658
) {
5759
override fun run(indicator: ProgressIndicator) {
5860
invokeLater {
59-
if (!mochaData.findPackageByNpm(model.project.basePath!!, model.pathToNPM)) {
60-
installMissingRequirement(model.project, model.pathToNPM, mochaData)
61-
}
61+
checkAndInstallRequirement(model.project, model.pathToNPM, mochaData)
62+
checkAndInstallRequirement(model.project, model.pathToNPM, nycData)
63+
checkAndInstallRequirement(model.project, model.pathToNPM, ternData)
6264
createDialog(model)?.let { dialogProcessor ->
6365
if (!dialogProcessor.showAndGet()) return@invokeLater
6466
// Since Tern.js accesses containing file, sync with file system required before test generation.
@@ -263,8 +265,21 @@ object JsDialogProcessor {
263265
}
264266
}
265267

266-
// TODO(MINOR): Add indicator.text for each installation
267-
fun installMissingRequirement(project: Project, pathToNPM: String, requirement: PackageData) {
268+
fun checkAndInstallRequirement(
269+
project: Project,
270+
pathToNPM: String,
271+
requirement: PackageData,
272+
) {
273+
if (!requirement.findPackageByNpm(project.basePath!!, pathToNPM)) {
274+
installMissingRequirement(project, pathToNPM, requirement)
275+
}
276+
}
277+
278+
private fun installMissingRequirement(
279+
project: Project,
280+
pathToNPM: String,
281+
requirement: PackageData,
282+
) {
268283
val message = """
269284
Requirement is not installed:
270285
${requirement.packageName}

utbot-intellij-js/src/main/kotlin/org/utbot/intellij/plugin/language/js/NycSourceFileChooser.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class NycSourceFileChooser(val model: JsTestsModel) : TextFieldWithBrowseButton(
2424
addBrowseFolderListener(
2525
TextBrowseFolderListener(descriptor, model.project)
2626
)
27-
nycData.findPackagePath() ?: installMissingRequirement(model.project, model.pathToNPM, nycData)
2827
text = (replaceSeparator(nycData.findPackagePath() ?: "Nyc was not found")
2928
+ OsProvider.getProviderByOs().npmPackagePostfix)
3029
}

utbot-js/src/main/kotlin/settings/JsPackagesSettings.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import utils.OsProvider
66
object JsPackagesSettings {
77
val mochaData: PackageData = PackageData("mocha", "-l")
88
val nycData: PackageData = PackageData("nyc", "-g")
9-
10-
// TODO(MINOR): Add tern auto installation
11-
val ternData: PackageData? = null
9+
val ternData: PackageData = PackageData("tern", "-l")
1210
}
1311

1412
data class PackageData(

0 commit comments

Comments
 (0)