Files
kotlin-fork/libraries/tools/kotlin-gradle-plugin-integration-tests
Ilya Matveev 254a978a06 Gradle, native: Forbid parallel in-process compiler execution
After enabling the in-process compiler execution, we got several
reports related to the race condition that takes place during
system properties configuring (e.g. KT-37442, KT-37444, probably
KT-37362).

The right fix here is to get rid of using system properties at all.
But it requires changes in many places of the K/N compiler and such
a patch is not safe enough to include it into a bug-fix release. So
it's decided to forbid parallel in-process compiler execution in
1.3.71 and 1.4-M2.

Issue #KT-37565 Fixed
Issue #KT-37696 Fixed

Ported from:
https://github.com/JetBrains/kotlin/commit/1c1b637cc46012a22867d8e653bb6d94ed6138ba
https://github.com/JetBrains/kotlin/commit/2128d3dfe77db4e0a8450f4f943cbd13c2e5dd4d
2020-04-11 12:40:50 +07:00
..
2020-04-01 16:42:04 +07:00

Gradle Plugin Integration Tests

This module contains integration tests for libraries/tools/kotlin-gradle-plugin (and the subplugins mentioned there).

How to run

There are three Gradle tasks that run the tests:

  • Run all tests with the oldest possible Gradle version for each test:

    ./gradlew :kotlin-gradle-plugin-integration-tests:test
    
  • Run with the new Gradle release, choose only the tests that support this Gradle version:

    ./gradlew :kotlin-gradle-plugin-integration-tests:testAdvanceGradleVersion
    
  • Run the incremental compilation tests generated from the JPS ones

    ./gradlew :kotlin-gradle-plugin-integration-tests:testFromJps
    

The tests that use the Gradle plugins DSL (PluginsDslIT) also require the Gradle plugin marker artifacts to be installed:

./gradlew -Pdeploy_version=1.2-test :kotlin-gradle-plugin:plugin-marker:install :kotlin-noarg:plugin-marker:install :kotlin-allopen:plugin-marker:install
./gradlew -Pdeploy_version=1.2-test :kotlin-gradle-plugin-integration-tests:test

If you want to run only one test class, you need to set flag --tests with value of test class, which you want to run

  ./gradlew :kotlin-gradle-plugin-integration-tests:test --tests <class-name-with-package>

How to work with the tests

When you create a new test, figure out which Gradle versions it is supposed to run on. Then, when you instantiate a test project, specify one of:

  • project("someProjectName", GradleVersionRequired.None) or just project("someProjectName") the test can run on the whole range of the supported Gradle versions;
  • project("someProjectName", GradleVersionRequired.AtLeast("X.Y")) the test is supposed to run on Gradle version X.Y and newer (e.g. it tests integration with a Gradle feature that was released in version X.Y);
  • project("someProjectName", GradleVersionRequired.Exact("X.Y")) the test is supposed to run only with Gradle version X.Y (e.g. it tests a workaround for that version or records some special behavior that is not reproducible with newer versions).

⚠️ When your tests target multiple Gradle versions, make sure they pass when run with both tasks test and testAdvanceGradleVersion (see above). In the IDE, you can modify a test run configuration to use a Gradle task other than test.

You can check a Gradle version that the test runs with using Project.testGradleVersionAtLeast("X.Y") and Project.testGradleVersionBelow("X.Y").

Since Gradle output layouts differ from version to version, you can access classes and resources output directories using the functions that adapt to the Gradle version that is used for each test: