From 0d466329967d3be6a2561d80711b11e254d98a0a Mon Sep 17 00:00:00 2001 From: Nicolas QUINQUENEL Date: Wed, 29 Jan 2025 11:58:18 +0100 Subject: [PATCH 1/4] JaCoCo on UI tests --- .cirrus.yml | 4 ++- build.gradle.kts | 1 - its/build.gradle.kts | 28 ++++++++++++++++++- .../org/sonarlint/intellij/its/BaseUiTest.kt | 18 ++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 11d84acec..3e3c8ae8f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -369,7 +369,7 @@ qa_task: run_its_script: | echo "Run ITs on ${IDEA_VERSION}" source .cirrus/use-gradle-wrapper.sh - gradle :its:check --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin + gradle :its:check --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin sonar <<: *CLEANUP_GRADLE_CACHE_SCRIPT always: stop_recording_script: | @@ -382,6 +382,8 @@ qa_task: path: "${CIRRUS_WORKING_DIR}/recording_${IDEA_VERSION}.mp4" log_artifacts: path: "its/build/idea-sandbox/system/log" + reportss_artifacts: + path: "**/reports/**/*" on_failure: xvfb_log_artifacts: path: "${CIRRUS_WORKING_DIR}/Xvfb.out" diff --git a/build.gradle.kts b/build.gradle.kts index 871095425..8d2d05915 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -93,7 +93,6 @@ allprojects { } } - tasks.cyclonedxBom { setIncludeConfigs(listOf("runtimeClasspath", "sqplugins_deps")) inputs.files(configurations.runtimeClasspath, configurations.archives.get()) diff --git a/its/build.gradle.kts b/its/build.gradle.kts index 60be8880f..509873083 100644 --- a/its/build.gradle.kts +++ b/its/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("org.jetbrains.intellij") kotlin("jvm") + jacoco } group = "org.sonarsource.sonarlint.intellij.its" @@ -46,6 +47,11 @@ tasks.test { } } testLogging.showStandardStreams = true + + // we need the coverage from Idea process, not from test task + configure { + isEnabled = false + } } license { @@ -75,11 +81,26 @@ intellij { if (!project.hasProperty("slPluginDirectory")) { plugins.set(listOf(rootProject)) } - instrumentCode.set(false) } val runIdeDirectory: String by project +val uiTestsCoverageReport = tasks.register("uiTestsCoverageReport") { + executionData(tasks.runIdeForUiTests.get()) + sourceSets(sourceSets.main.get()) + classDirectories.setFrom(files("../build/instrumented/instrumentCode")) + + reports { + xml.required.set(true) + } +} + +jacoco { + applyTo(tasks.runIdeForUiTests.get()) +} + + + tasks.runIdeForUiTests { systemProperty("sonarlint.internal.sonarcloud.url", "https://sc-staging.io") systemProperty("sonarlint.internal.sonarcloud.websocket.url", "wss://events-api.sc-staging.io/") @@ -103,4 +124,9 @@ tasks.runIdeForUiTests { } } } + configure { + isIncludeNoLocationClasses = true + excludes = listOf("jdk.internal.*") + } + finalizedBy(uiTestsCoverageReport) } diff --git a/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt b/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt index e4d1af7aa..8a7a61042 100644 --- a/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt +++ b/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt @@ -20,6 +20,11 @@ package org.sonarlint.intellij.its import com.intellij.remoterobot.RemoteRobot +import com.intellij.remoterobot.steps.CommonSteps +import com.intellij.remoterobot.utils.keyboard +import java.awt.event.KeyEvent.VK_ALT +import java.awt.event.KeyEvent.VK_F4 +import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.api.fail @@ -101,6 +106,19 @@ open class BaseUiTest { it.close() } } + + private val steps = CommonSteps(remoteRobot) + + @JvmStatic + @AfterAll + fun afterAll() { + steps.invokeAction("Exit") + remoteRobot.idea { + keyboard { + hotKey(VK_ALT, VK_F4) + } + } + } } From 8896976eb76d9aa34eba7386396d72c43285daa2 Mon Sep 17 00:00:00 2001 From: Nicolas Quinquenel Date: Wed, 29 Jan 2025 13:49:40 +0100 Subject: [PATCH 2/4] Test --- .cirrus.yml | 2 +- .../org/sonarlint/intellij/its/BaseUiTest.kt | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 3e3c8ae8f..fb659c2dd 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -382,7 +382,7 @@ qa_task: path: "${CIRRUS_WORKING_DIR}/recording_${IDEA_VERSION}.mp4" log_artifacts: path: "its/build/idea-sandbox/system/log" - reportss_artifacts: + reports_artifacts: path: "**/reports/**/*" on_failure: xvfb_log_artifacts: diff --git a/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt b/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt index 8a7a61042..4f46e7847 100644 --- a/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt +++ b/its/src/test/kotlin/org/sonarlint/intellij/its/BaseUiTest.kt @@ -21,10 +21,6 @@ package org.sonarlint.intellij.its import com.intellij.remoterobot.RemoteRobot import com.intellij.remoterobot.steps.CommonSteps -import com.intellij.remoterobot.utils.keyboard -import java.awt.event.KeyEvent.VK_ALT -import java.awt.event.KeyEvent.VK_F4 -import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.api.fail @@ -108,17 +104,6 @@ open class BaseUiTest { } private val steps = CommonSteps(remoteRobot) - - @JvmStatic - @AfterAll - fun afterAll() { - steps.invokeAction("Exit") - remoteRobot.idea { - keyboard { - hotKey(VK_ALT, VK_F4) - } - } - } } From c7aa05febd58ed5af482d51193693dd6bcb4ac16 Mon Sep 17 00:00:00 2001 From: Nicolas Quinquenel Date: Wed, 29 Jan 2025 14:15:01 +0100 Subject: [PATCH 3/4] Report artifacts --- .cirrus.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index fb659c2dd..20a8991af 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -387,8 +387,6 @@ qa_task: on_failure: xvfb_log_artifacts: path: "${CIRRUS_WORKING_DIR}/Xvfb.out" - reports_artifacts: - path: "**/reports/**/*" junit_artifacts: path: "**/test-results/**/*.xml" format: junit From b60aa4dec50b9c68137a2a0e5176f332c59e77da Mon Sep 17 00:00:00 2001 From: Nicolas Quinquenel Date: Fri, 31 Jan 2025 14:54:37 +0100 Subject: [PATCH 4/4] test --- .cirrus.yml | 4 ++-- its/build.gradle.kts | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 20a8991af..6c35bb0cb 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -359,7 +359,7 @@ qa_task: base64 --decode its/build/idea-sandbox/config-uiTest/webstorm.key.b64 > its/build/idea-sandbox/config-uiTest/webstorm.key metacity --sm-disable --replace & sleep 10 # give metacity some time to start - gradle :its:runIdeForUiTests --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin > ${CIRRUS_WORKING_DIR}/runIdeGradle.log & + gradle :its:runIdeForUiTests --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin > ${CIRRUS_WORKING_DIR}/runIdeGradle.log sonar jacocoTestReport & wait_ide_script: | echo "Wait for IDE to start" .cirrus/wait-for-endpoint.sh http://127.0.0.1:8082 -t 500 @@ -369,7 +369,7 @@ qa_task: run_its_script: | echo "Run ITs on ${IDEA_VERSION}" source .cirrus/use-gradle-wrapper.sh - gradle :its:check --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin sonar + gradle :its:check --stacktrace -i -PijVersion=${IDEA_VERSION} -PslPluginDirectory=${CIRRUS_WORKING_DIR}/staged-plugin <<: *CLEANUP_GRADLE_CACHE_SCRIPT always: stop_recording_script: | diff --git a/its/build.gradle.kts b/its/build.gradle.kts index 509873083..12f9b7234 100644 --- a/its/build.gradle.kts +++ b/its/build.gradle.kts @@ -85,22 +85,10 @@ intellij { val runIdeDirectory: String by project -val uiTestsCoverageReport = tasks.register("uiTestsCoverageReport") { - executionData(tasks.runIdeForUiTests.get()) - sourceSets(sourceSets.main.get()) - classDirectories.setFrom(files("../build/instrumented/instrumentCode")) - - reports { - xml.required.set(true) - } -} - jacoco { applyTo(tasks.runIdeForUiTests.get()) } - - tasks.runIdeForUiTests { systemProperty("sonarlint.internal.sonarcloud.url", "https://sc-staging.io") systemProperty("sonarlint.internal.sonarcloud.websocket.url", "wss://events-api.sc-staging.io/") @@ -128,5 +116,14 @@ tasks.runIdeForUiTests { isIncludeNoLocationClasses = true excludes = listOf("jdk.internal.*") } - finalizedBy(uiTestsCoverageReport) +} + +tasks { + jacocoTestReport { + classDirectories.setFrom(files("../build/instrumented/instrumentCode")) + + reports { + xml.required.set(true) + } + } }