Skip to content

rtmigo/tempground_py

Repository files navigation

Generic badge Generic badge

A script that allows you to concisely:

  • create a temp directory
  • fill the directory with files of known content
  • run shell commands in the directory
  • check the run results

For example, during integration testing of a library, we can create a small temporary project that imports our library. And we check that the library was imported.

Example: Testing a Kotlin library

Suppose you have created a Kotlin library named mylib. You need to test that third-party projects can use mylib as a dependency.

The test can be run by creating a single file like this:

# lib_test.py

from tempground import *

with TempGround(
        files={
            # minimalistic build script to use the library
            "build.gradle.kts": """
                plugins {
                    id("application")
                    kotlin("jvm") version "1.6.10"
                }
                
                repositories { mavenCentral() }
                application { mainClass.set("MainKt") }
                
                dependencies {
                    implementation("io.github.username:mylib")
                }            
            """,

            # additional settings, if necessary 
            "settings.gradle.kts": """
                sourceControl {
                    gitRepository(java.net.URI("https://github.com/username/mylib.git")) {
                        producesModule("io.github.username:mylib")
                    }
                }            
            """,

            # kotlin code that imports and uses the library
            "src/main/kotlin/Main.kt": """
                import io.github.username:mylib.spanishGreeting
                fun main() = println(spanishGreeting())
            """}) as app:
    
    # print report about our mini-project
    print(app.files_content())
    
    # run our mini-project
    result = app.run(["gradle", "run", "-q"])
    
    # print what was on stdout, the exit code, etc 
    print(result)
    
    # check everything was as excepted
    assert result.returncode == 0
    assert result.stdout == "¡Hola!\n"

print("Everything is OK!")

To run the test on a clean system, install tempground and run the script:

# assuming pip and python are Python 3.10+
# and lib_test.py is a local file

$ pip install tempground
$ python lib_test.py

License

Copyright © 2022 Artsiom iG. Released under the MIT License.