Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

dev.petuska:klip-runner-mingwx86

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dev.petuska:klip-runner-mingwx86

Kotlin multiplatform snapshot (klip) testing. Common test runner.

  • 0.4.1
  • Source
  • Maven
  • Socket score

Version published
Maintainers
1
Source

Gitpod ready-to-code Slack chat Dokka docs Version gradle-plugin-portal Version maven-central

KLIP

Kotlin Multiplatform snapshot ((c|k)lip) manager for tests. Automatically generates and asserts against a persistent @kotlinx.serialization.Serializable representation of the object until you explicitly trigger an update. Powered by kotlin compiler plugin to inject relevant keys and paths.

Support

The plugin only works on targets using new IR kotlin compiler (which is pretty much all of them since kotlin 1.5 except JS which still defaults to legacy compiler).

Versions

The current version was built using the following tooling versions and is guaranteed to work with this setup. Given the experimental nature of kotlin compiler plugin API, the plugin powering this library is likely to stop working on projects using newer/older kotlin versions.

  • Kotlin: 1.7.0
  • Gradle: 7.4.2
  • JDK: 11

Targets

Bellow is a list of currently supported targets and planned targets:

  • android
  • js
  • jvm
  • linuxX64
  • mingwX64
  • macosX64
  • macosArm64
  • iosArm32
  • iosArm64
  • iosSimulatorArm64
  • iosX64
  • watchosX86
  • watchosX64
  • watchosArm64
  • watchosSimulatorArm64
  • watchosArm32
  • tvosArm64
  • tvosSimulatorArm64
  • tvosX64

There's also a subset of targets that you currently cannot run tests on (and as such making the library redundant). These targets will use a fallback implementation that throws an error on native api access (since those targets will not execute tests) to enable the general library usage in commonMain source set. If you have a valid use-case of the library for these targets, please raise an issue to discuss a real implementation.

  • androidNativeArm32
  • androidNativeX86
  • androidNativeArm64
  • androidNativeX64
  • linuxArm32Hfp
  • linuxMips32
  • linuxMipsel32
  • linuxArm64
  • mingwX86

Usage

  1. Apply the plugin and add a runtime dependency.
  2. If you're not using dev.petuska:klip marker dependency, you'll also need to add an appropriate ktor-client-engine for each platform
plugins {
  kotlin("multiplatform")
  id("dev.petuska.klip") version "<<version>>"

  kotlin {
    sourceSets {
      commonTest {
        dependencies {
          implementation("dev.petuska:klip")
        }
      }
    }
  }
}
  1. (Optional) Configure the plugin extension (shown with default values). For property descriptions. see Gradle Properties
klip {
  enabled.set(true) // Turns the compiler plugin on/off
  update.set(false) // Whether to overwrite the existing klips while running tests
  klipAnnotations.set(setOf("dev.petuska.klip.core.Klippable")) // Takes full control of annotations
  klipAnnotation("dev.petuska.klip.core.Klippable") // Appends the annotation to the default ones
  scopeAnnotations.set(
    setOf(
      // Takes full control of annotations
      "kotlin.test.Test",
      "org.junit.Test",
      "org.junit.jupiter.api.Test",
      "org.testng.annotations.Test",
      "io.kotest.core.spec.style.AnnotationSpec.Test",
    )
  )
  scopeAnnotation("kotlin.test.Test") // Appends the annotation to the default ones
  scopeFunctions.set(
    setOf(
      // Takes full control of functions
      "io.kotest.core.spec.style.scopes.FunSpecRootScope.test",
      "io.kotest.core.spec.style.scopes.DescribeSpecContainerScope.it",
      "io.kotest.core.spec.style.scopes.BehaviorSpecWhenContainerScope.Then",
      "io.kotest.core.spec.style.scopes.BehaviorSpecWhenContainerScope.then",
      "io.kotest.core.spec.style.scopes.WordSpecShouldContainerScope.invoke",
      "io.kotest.core.spec.style.scopes.FreeSpecContainerScope.invoke",
      "io.kotest.core.spec.style.scopes.FeatureSpecContainerScope.scenario",
      "io.kotest.core.spec.style.scopes.ExpectSpecContainerScope.expect",
    )
  )
  scopeFunction("io.kotest.core.spec.style.scopes.FunSpecRootContext.test") // Appends the function to the default ones
}
  1. Use provided klip assertions anywhere under one of the scopeAnnotations or scopeFunctions.
class MyTest {
  data class DomainObject(val name: String, val value: String?)

  @Test
  fun test1() = runTest {
    assertMatchesKlip(DomainObject("Dick", "Dickens"))
    DomainObject("John", "Doe").assertKlip()
  }

  @Test
  fun test2() = runTest {
    doAssertions()
  }

  private suspend fun doAssertions() {
    assertMatchesKlip(DomainObject("Joe", "Mama"))
    DomainObject("Ben", "Dover").assertKlip()
  }
}

Gradle Properties

Most of the DSL configuration options can also be set/overridden via gradle properties ./gradlew <some-task> -Pprop.name=propValue, gradle.properties or ~/.gradle/gradle.properties. Environment variables are also supported, however gradle properties take precedence over them. Bellow is the full list of supported properties:

  • klip.enabled (KLIP_ENABLED) - toggles the compiler processing on/off.
  • klip.update (KLIP_UPDATE) - if true, will override and update all previous klips during test run.

Basic Flow

  1. Run tests as normal and use generated klip assertions such as assertMatchesKlip(myObject) or myObject.assertKlip(). New klips will always be written to file, whereas existing ones (identified by test class scope and given id) will be read and used for assertions.
  2. When the actual value changes, tests will fail since they do not match previous klip. In such cases inspect the differences and if everything is as expected, re-run test(s) with klip updates enabled. This is done by either passing a gradle prop ./gradlew test -Pklip.update, setting an environment variable KLIP_UPDATE=true ./gradlew test.

Modules

  • :library:klip-core - main runtime library
  • :library:klip-api - shared api and utility DSLs
  • :library:klip-assertions - assertion api
  • :library:klip-runner - abstraction over kotlinx-coroutines-test to provide truly multiplatform way to run suspending tests
  • :plugin:klip-gradle-plugin - gradle plugin to manage kotlin compiler plugins
  • :plugin:klip-kotlin-plugin - kotlin compiler plugin for jvm & js that does the actual work
  • :plugin:klip-kotlin-plugin-native - kotlin compiler plugin for native that does the actual work
  • klip-sandbox - a playground to test local changes from consumer end

FAQs

Package last updated on 22 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc