Skip to content

Python and JS support #1197 #1199

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 112 commits into from
Nov 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
9fcf5c0
UTBotFamily
denis-fokin Oct 5, 2022
eee8f85
Add CodeGenLanguage.id
tamarinvs19 Oct 5, 2022
08ccb65
Update Renderers
tamarinvs19 Oct 5, 2022
301f2d5
Move codeGenLanguage to CgRenderContext
tamarinvs19 Oct 5, 2022
ddc57d9
Add init to CodeLanguage
tamarinvs19 Oct 5, 2022
8086a63
UTBotFamily
denis-fokin Oct 5, 2022
0708155
Fix after merge bugs
tamarinvs19 Oct 5, 2022
64ade72
Fix bug with variableConstructors and remove ExecutionStateAnalyzer from
tamarinvs19 Oct 6, 2022
50c9a57
Update generated_tests__dicts
tamarinvs19 Oct 6, 2022
6a6a337
Change targetCompatibility verstion
tamarinvs19 Oct 6, 2022
9e9725c
Refactor js
tamarinvs19 Oct 6, 2022
8a53d09
Fix PycharmUltimate code and uncomment js
tamarinvs19 Oct 6, 2022
8abe0b7
Fix Windows symbols problem
tamarinvs19 Oct 6, 2022
542aeae
Disable runIde tasks in modules where we need only Idea sdk dependencies
denis-fokin Oct 6, 2022
ee45191
Merge actual UTBot Go, set up and fix its CLI
GlebSolovev Oct 4, 2022
e44813d
Improve requirements description for UTBot Go
GlebSolovev Oct 4, 2022
a3ad833
Merge UTBot Go IntelliJ plugin support
tamarinvs19 Oct 7, 2022
a7b8d25
Fix Go
tamarinvs19 Oct 7, 2022
8def007
New file chooser in Python plugin
tochilinak Oct 7, 2022
0af38e8
Fixed bug in Python cli
tochilinak Oct 7, 2022
14ff580
Refactored Slava's CodegenLanguage
zishkaz Oct 7, 2022
d8328e2
disable go runIde
Markoutte Oct 10, 2022
8a91164
Change "\\" to File.separator
tamarinvs19 Oct 10, 2022
14ccaf6
Add relation sys.path support
tamarinvs19 Oct 10, 2022
894707b
Change cli result output
tamarinvs19 Oct 10, 2022
78e8f9d
[WIP] Linux cmd possible fix
rudolf101 Oct 11, 2022
99c5d8b
[WIP] universal JsCmdExec implementation
zishkaz Oct 14, 2022
e6b0168
Moved OsProvider for a wider access scope
zishkaz Oct 14, 2022
299452d
Getting node and npm from IDEA settings
zishkaz Oct 14, 2022
ba23868
JsDynamicSettings added
zishkaz Oct 14, 2022
4b3fb14
[WIP] Added nyc path field to dialog window
rudolf101 Oct 14, 2022
079e8d0
New js coverage algo implementation
zishkaz Oct 16, 2022
319bc54
Added nyc path field into dialog window
rudolf101 Oct 17, 2022
54f079c
Update samples
tamarinvs19 Oct 17, 2022
ff1b093
Added replace separator in Nyc validation
rudolf101 Oct 18, 2022
9ed03f0
Added new options to js CLI and fixed exports managers
zishkaz Oct 18, 2022
074d0d1
Fix after rebase problems
tamarinvs19 Oct 19, 2022
b11718f
Fixed js samples and help tips in js CLI
zishkaz Oct 19, 2022
18f514f
Fixed js exports managers regexes
zishkaz Oct 19, 2022
eae8efe
Move language-specific UtModels to utbo-<lang> and remove CodegenLang…
tamarinvs19 Oct 20, 2022
d99deb9
Fix cli bug
tamarinvs19 Oct 20, 2022
e74317f
Simle style fix
tamarinvs19 Oct 20, 2022
3887c93
Moved test directory chooser to ui-commons and fixed graal error
zishkaz Oct 20, 2022
1247455
Removing go from pr branch
zishkaz Oct 24, 2022
037098f
Added gitignore file for js samples
zishkaz Oct 24, 2022
97f4d6a
Fix changes
tamarinvs19 Oct 24, 2022
7688990
Fix testClassName bug
tamarinvs19 Oct 25, 2022
29180b9
Rebase FileUtil.kt onto main
tamarinvs19 Oct 26, 2022
3129d70
Rebase files onto main
tamarinvs19 Oct 26, 2022
0152df5
Remove internal UtilMethodProvider
tamarinvs19 Oct 26, 2022
84ec8fc
Rebase onto main
tamarinvs19 Oct 26, 2022
b24caf9
Update language settings
tamarinvs19 Oct 26, 2022
fc52711
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
52085ec
Update gradle files
tamarinvs19 Oct 26, 2022
eba7d57
Fix js npm path and nyc validator for linux
tamarinvs19 Oct 26, 2022
be1adc7
Add conditions for ideType
tamarinvs19 Oct 26, 2022
f997039
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
9e0b25a
Update ide settings
tamarinvs19 Oct 26, 2022
83a9dcd
Add docs page about IDE
tamarinvs19 Oct 26, 2022
fcca3bf
Add docs link
tamarinvs19 Oct 26, 2022
f21a1cb
Fix Coverage error
tamarinvs19 Oct 26, 2022
2d7d817
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
05af2c5
Rebase onto main
tamarinvs19 Oct 26, 2022
68c5d7d
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
92f6f72
Rebase onto main
tamarinvs19 Oct 26, 2022
55c278b
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 27, 2022
1f1b016
Rebase onto main
tamarinvs19 Oct 27, 2022
1d5b379
Make GgGetClass sealed
tamarinvs19 Oct 27, 2022
3d98f82
Fix deprecated showYesNoDialog and ProjectFileIndex.SERVICE
tamarinvs19 Oct 27, 2022
dc242fe
Change IU to IC
tamarinvs19 Oct 27, 2022
bdd4442
Remove open from ClassId.elementClassId
tamarinvs19 Oct 27, 2022
c7b69a1
Code style refactoring
tamarinvs19 Oct 27, 2022
4432359
Add file with changes description
tamarinvs19 Oct 27, 2022
284928b
Update gitignores
tamarinvs19 Oct 27, 2022
7ee92d1
Remove com.jetbrains.intellij.idea:ideaIC dependency
tamarinvs19 Oct 27, 2022
67b9fe0
Change IU to IC
tamarinvs19 Oct 27, 2022
6d9522a
Added coverage mode buttons | JS
rudolf101 Oct 27, 2022
54faab1
Update CLI docs
rudolf101 Oct 28, 2022
5a50a55
Fixed JS basic coverage service algo
zishkaz Oct 28, 2022
60e96e9
Fixes JsConstantsModelProvider after master merge
zishkaz Oct 28, 2022
972607e
Removed unnecessary check for Mocha framework that failed in built pl…
zishkaz Oct 28, 2022
05d7b4e
Removed lateinit modifier
zishkaz Oct 28, 2022
f578890
Removed export statements from js samples
zishkaz Oct 28, 2022
f8f064a
Merge branch 'tamarinvs19/UnitTestBot_Family_PR' of https://github.co…
zishkaz Oct 28, 2022
aa4c1a8
Fix in Python CLI
tochilinak Oct 28, 2022
3409678
JS cli naming fix
zishkaz Oct 31, 2022
289b6b9
Rename python cli class
tamarinvs19 Oct 31, 2022
5f205e3
Move comment line in CodeGeneratorResult
tamarinvs19 Oct 31, 2022
ec8f1dd
Remove jClass from python/js branch
tamarinvs19 Oct 31, 2022
d66c1ba
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 31, 2022
6295f85
Reworked text annotations in Mocha object
zishkaz Oct 31, 2022
1781fa8
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
zishkaz Oct 31, 2022
d53325b
Remove soot dependency from utbot-python and implement new CgRender m…
tamarinvs19 Oct 31, 2022
18acd32
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
tamarinvs19 Oct 31, 2022
2385dc6
Used withUtContext in JsTestGenerator and reworked Mocha TestFramewor…
zishkaz Oct 31, 2022
20e416a
Locally fixed explicit File.separator replacements
zishkaz Oct 31, 2022
6dff767
Removed unnecessary catch
rudolf101 Nov 1, 2022
766616c
Fix weak comments
rudolf101 Nov 1, 2022
58415b3
Removed unnecessary try catch
rudolf101 Nov 1, 2022
f73d3fd
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 2, 2022
5c9e7fb
Fix CgRenderer bugs after merge
tamarinvs19 Nov 2, 2022
a8d4d92
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 2, 2022
0b66cab
Add README.md to utbot-python-cli
tamarinvs19 Nov 2, 2022
7a8893c
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 3, 2022
98ac84a
JS code refactoring
zishkaz Nov 3, 2022
d0815c8
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
zishkaz Nov 3, 2022
7e16b66
Removed unnecessary JS file parsing
zishkaz Nov 7, 2022
dcfa7eb
Refactor utbot-intellij-python
tamarinvs19 Nov 7, 2022
a781aa9
Refactor utbot-python
tamarinvs19 Nov 7, 2022
9074ed2
Fix "Language <> is disabled" problem from Issue #1329
tamarinvs19 Nov 9, 2022
f9698b3
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 9, 2022
37c9564
Change GenerateTestsModel to BaseTestsModel
tamarinvs19 Nov 9, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions docs/ChoosingLanguageSpecificIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Choosing language specific IDE

Some language-specific modules depends on specific IntelliJ IDE:
* Python can work with IntelliJ Community, IntelliJ Ultimate, PyCharm Community, PyCharm Professional
* JavaScript can work with IntelliJ Ultimate, PyCharm Professional and WebStorm
* Java and Kotlin - IntelliJ Community and IntelliJ Ultimate

You should select correct IDE in `gradle.properties` file:
```
ideType=<IU>
ideVersion=<222.4167.29>
```

### IDE marking

| Mark | Full name | Supported plugin |
|------|----------------------|----------------------------------------|
| IC | IntelliJ Community | JVM, Python, AndroidStudio |
| IU | IntelliJ Ultimate | JVM, Python, JavaScript, AndroidStudio |
| PC | PyCharm Community | Python |
| PY | PyCharm Professional | Python, JavaScript |

[IntelliJ Platform Plugin SDK documentation](https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#tasks-runpluginverifier)
87 changes: 87 additions & 0 deletions docs/UtbotFamilyChanges.md

Large diffs are not rendered by default.

10 changes: 8 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
kotlin.code.style=official

# IU, IC, PC, PY, WS...
# IU, IC, PC, PY
# IC for AndroidStudio
ideType=IC
ideVersion=222.4167.29

pythonIde=IC,IU,PC,PY
jsIde=IU,PY,WS

# In order to run Android Studion instead of Intellij Community,
# specify the path to your Android Studio installation
//androidStudioPath=your_path_to_android_studio

pythonCommunityPluginVersion=222.4167.37
#Version numbers: https://plugins.jetbrains.com/plugin/631-python/versions
pythonCommunityPluginVersion=222.4167.37
pythonUltimatePluginVersion=222.4167.37

kotlinPluginVersion=222-1.7.20-release-201-IJ4167.29

junit5Version=5.8.0-RC1
junit4Version=4.13.2
junit4PlatformVersion=1.9.0
Expand Down
34 changes: 0 additions & 34 deletions settings.gradle

This file was deleted.

54 changes: 54 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
val ideType: String by settings

val pythonIde: String by settings
val jsIde: String by settings

pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.name == "rdgen") {
useModule("com.jetbrains.rd:rd-gen:${requested.version}")
}
}
}
}

rootProject.name = "utbot"

include("utbot-core")
include("utbot-framework")
include("utbot-framework-api")
include("utbot-intellij")
include("utbot-sample")
include("utbot-fuzzers")
include("utbot-junit-contest")
include("utbot-analytics")
include("utbot-analytics-torch")

include("utbot-cli")

include("utbot-api")
include("utbot-instrumentation")
include("utbot-instrumentation-tests")

include("utbot-summary")
include("utbot-gradle")
include("utbot-maven")
include("utbot-summary-tests")
include("utbot-framework-test")
include("utbot-rd")
include("utbot-android-studio")

include("utbot-ui-commons")

if (pythonIde.split(",").contains(ideType)) {
include("utbot-python")
include("utbot-cli-python")
include("utbot-intellij-python")
}

if (jsIde.split(",").contains(ideType)) {
include("utbot-js")
include("utbot-cli-js")
include("utbot-intellij-js")
}
75 changes: 75 additions & 0 deletions utbot-cli-js/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11
freeCompilerArgs += ["-Xallow-result-return-type", "-Xsam-conversions=class"]
}
}

tasks.withType(JavaCompile) {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_11
}

configurations {
fetchInstrumentationJar
}

dependencies {
implementation project(':utbot-framework')
implementation project(':utbot-cli')
implementation project(':utbot-js')

// Without this dependency testng tests do not run.
implementation group: 'com.beust', name: 'jcommander', version: '1.48'
implementation group: 'org.junit.platform', name: 'junit-platform-console-standalone', version: junit4PlatformVersion
implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
implementation group: 'com.github.ajalt.clikt', name: 'clikt', version: cliktVersion
implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junit5Version
implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junit5Version
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version
implementation group: 'org.json', name: 'json', version: '20220320'
//noinspection GroovyAssignabilityCheck
fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')
}

processResources {
from(configurations.fetchInstrumentationJar) {
into "lib"
}
}

task createProperties(dependsOn: processResources) {
doLast {
new File("$buildDir/resources/main/version.properties").withWriter { w ->
Properties properties = new Properties()
//noinspection GroovyAssignabilityCheck
properties['version'] = project.version.toString()
properties.store w, null
}
}
}

classes {
dependsOn createProperties
}

jar {
manifest {
attributes 'Main-Class': 'org.utbot.cli.js.ApplicationKt'
attributes 'Bundle-SymbolicName': 'org.utbot.cli.js'
attributes 'Bundle-Version': "${project.version}"
attributes 'Implementation-Title': 'UtBot JavaScript CLI'
attributes 'JAR-Type': 'Fat JAR'
}

archiveVersion.set(project.version as String)

dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}

duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

87 changes: 87 additions & 0 deletions utbot-cli-js/src/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
## Build

.jar file can be built in GitHub Actions with script publish-plugin-and-cli-from-branch.

## Requirements

* NodeJs 10.0.0 or higher (available to download https://nodejs.org/en/download/)
* Java 11 or higher (available to download https://www.oracle.com/java/technologies/downloads/)
* Nyc 15.1.0 or higher (`> npm install -g nyc`)
* Mocha 10.0.0 or higher (`> npm install -g mocha`)

## Basic usage

Generate tests:

java -jar utbot-cli.jar generate_js --source="dir/file_with_sources.js" --output="dir/generated_tests.js"

This will generate tests for top-level functions from `file_with_sources.js`.

Run generated tests:

java -jar utbot-cli.jar run_js --fileOrDir="generated_tests.js"

This will run generated tests from file or directory.

Generate coverage report:

java -jar utbot-cli.jar coverage_js --source=dir/generated_tests.js

This will generate coverage report from generated tests and print in `StdOut`

## `generate_js` options

- `-s, --source <path>`

(required) Source code file for a test generation.
- `-c, --class <classname>`

If not specified, tests for top-level functions or single class are generated, otherwise for the specified class.

- `-o, --output <dir/filename>`

File for generated tests.
- `-p, --print-test`

Specifies whether test should be printed out to `StdOut` (default = false)
- `-t, --timeout <seconds>`

Timeout for a single test case to generate in seconds (default = 15)
- `--coverage-mode <BASIC/FAST>`

Specifies the coverage mode for test generation. Fast mode can't find timeouts, but works faster (default = FAST)
- `--path-to-node <path>`

Sets path to Node.js executable (default = "node")
- `--path-to-nyc <path>`

Sets path to nyc executable (default = "nyc")
- `--path-to-npm <path>`

Sets path to npm executable (default = "npm")

## `run_js` options

- `-f, --fileOrDir`

(required) File or directory with tests.
- `-o, --output`

Specifies output of .txt file for test framework result (If empty prints to `StdOut`)

- `-t, --test-framework <name>`

Test framework of tests to run. (default = "Mocha")

## `coverage_js` options

- `-s, --source <file>`

(required) File with tests to generate a report.

- `-o, --output`

Specifies output .json file for generated tests (If empty prints .json to `StdOut`)
- `--path-to-nyc <path>`

Sets path to nyc executable (default = "nyc")
35 changes: 35 additions & 0 deletions utbot-cli-js/src/main/kotlin/org/utbot/cli/js/Application.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.utbot.cli.js

import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.core.subcommands
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.options.versionOption
import com.github.ajalt.clikt.parameters.types.enum
import org.slf4j.event.Level
import org.utbot.cli.getVersion
import org.utbot.cli.setVerbosity
import kotlin.system.exitProcess

class UtBotJsCli : CliktCommand(name = "UnitTestBot JavaScript Command Line Interface") {
private val verbosity by option("--verbosity", help = "Changes verbosity level, case insensitive")
.enum<Level>(ignoreCase = true)
.default(Level.INFO)

override fun run() = setVerbosity(verbosity)

init {
versionOption(getVersion())
}
}

fun main(args: Array<String>) = try {
UtBotJsCli().subcommands(
JsCoverageCommand(),
JsGenerateTestsCommand(),
JsRunTestsCommand(),
).main(args)
} catch (ex: Throwable) {
ex.printStackTrace()
exitProcess(1)
}
Loading