Fluent Assertion-Library for Kotlin

Overview

Kluent

Changelog Documentation Contributors

Kluent is a "Fluent Assertions" library written specifically for Kotlin.

It uses the Infix-Notations and Extension Functions of Kotlin to provide a fluent wrapper around the JUnit-Assertions.

How to contribute

Download


Include it via gradle/maven

Kluent is hosted here at mavenCentral

Kluent-Android is hosted here at mavenCentral

Gradle

Replace {version} with the current version and chose one of the two artifacts, based on your target platform:

// Add jcenter as a repository for dependencies
repositories {
    mavenCentral()
}

dependencies {
    // for JVM:
    testImplementation 'org.amshove.kluent:kluent:{version}'

    // for Android:
    testImplementation 'org.amshove.kluent:kluent-android:{version}'

    // To get JUnit errors from kotlin.test, to e.g. enable diff windows in failure messages
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}

Maven

Replace {version} with the current version

<!-- Add jcenter as a repository for dependencies -->
<repositories>
    <repository>
        <id>jcenter</id>
        <url>https://jcenter.bintray.com/</url>
    </repository>
</repositories>

<dependency>
    <groupId>org.amshove.kluent</groupId>
    <artifactId>kluent</artifactId>
    <version>{version}</version>
    <type>pom</type>
</dependency>

Examples

More examples can be seen on the Site or in the tests.

assertEquals

"hello" shouldBeEqualTo "hello"

assertNotEquals

"hello" shouldNotBeEqualTo "world"

Assert that an Array/Iterable contains something

val alice = Person("Alice", "Bob")
val jon = Person("Jon", "Doe")
val list = listOf(alice, jon)
list shouldContain jon

Using backticks

Every method that is included in Kluent also has a "backtick version", to make it feel more like a describing sentence.

Some examples:

assertEquals

"hello" `should be equal to` "hello"

assertNotEquals

"hello" `should not be equal to` "world"

Building Kluent

All projects of Kluent are built with Gradle

The default gradlew build will only build the common and jvm module, to keep the build times as small as possible.

If you plan to submit a pull request, it is also fine if you just make sure it builds and tests against common and jvm (which gradlew build will make sure of), because the rest of the heavy work will be done by Travis and AppVeyor. That way you can keep your machine free from NodeJS and Kotlin Native :-)

To build the Android library, pass the parameter ANDROID to Gradle. This will build the common and android artifacts. To pass the parameter, type:

gradlew build -PANDROID

To also build the JS module, pass JS:

gradlew build -PJS

To build native, pass:

gradlew build -PNATIVE

In these cases, the JVM module will also be built, because it is our primary target and everything should pass on the JVM. To skip the JVM build, e.g. for testing only against Native or JS, pass SKIPVM:

gradlew build -PJS -PNATIVE -PSKIPJVM

This command will build common, js, native, but not jvm.

Where to put new features

If you plan to add a feature (e.g. an Assertion), it would be nice to first try adding it to the common module, as it would then be available to all platforms. If it uses specific APIs, like classes from the Java standard library, then it needs to go to the jvm module.

If you're unsure where to put a feature, or if you want to put something in the common module which needs platform specific implementations, you can have a look here (platformIsDigit or platformClassName) where a function in the common module calls a so called expect function, which is defined here in the common module and has specific JVM , JS and Native implementation.

If you're still unsure how to make something platform independent, we can have a look together inside the PR :-)

Attribution

Parts of the assertSoftly feature are based upon the great work of Kotest under the Apache 2.0 License.

Comments
  • java.lang.NoClassDefFoundError: kotlin/test/AssertionsKt Error

    java.lang.NoClassDefFoundError: kotlin/test/AssertionsKt Error

    I have just added testImplementation 'org.amshove.kluent:kluent-android:1.45' to my Android project and when I run a simple test like this:

        @Test
        fun `this should be true`() {
                true.shouldBeTrue()
        }
    

    the following error is thrown:

    `java.lang.NoClassDefFoundError: kotlin/test/AssertionsKt
    
    	at org.amshove.kluent.internal.AssertionsKt.assertTrue(Assertions.kt:7)
    	at org.amshove.kluent.BasicKt.shouldBeTrue(Basic.kt:35)
    	at ro.fortech.mindclub.validators.SimpleTest.this should be true(SimpleTest.kt:16)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    Caused by: java.lang.ClassNotFoundException: kotlin.test.AssertionsKt
    
    opened by laura-diana-prata 38
  • Kluent 2.0 Roadmap

    Kluent 2.0 Roadmap

    I'd like to open a discussion about what we should do and drop with the next major version of Kluent. @javatarz did a lot of work to make Kluent independent of JUnit (and specific test runners in general), thanks for that!

    During those PRs (#71 #72) we started a discussion about what we could do and what we could drop with the next major version. I would love to have a lot of feedback and opinions here :) We should atleast give @Egorand , @eburke56 , @javatarz, @guenhter and @goreRatzete a chance to state their opinions here 👍

    Dropping support

    Mocking

    #73 Is already a proposal to drop the mocking features in Kluent. I do agree with @Egorand points and I think it fits into the "no opinion" discussion. If we don't want to force an opinion on a test runner, we also shouldn't do that on mocking. In the beginning of Kluent I started the mocking support with plain java Mockito which didn't work out really well. Later we transitioned to mockito-kotlin and kept our API backwards compatible, but it still doesn't feel great. Kluent doesn't support all kinds of features that a mocking framework is bringing in and it also led to a lot of confusion (#62).

    I can see multiple ways of doing this. We could either deprecate mocking in the next 1.x version and drop it completely in 2.x, don't deprecate it (as in keep as it is) in 1.x and drop it in 2.x or also maintain it in 2.x.

    Platform independence

    Since Kotlin already supports other targets than the JVM (e.g. JavaScript) and more platforms are being worked on (Kotlin native) we could try to take this next major step to also be platform independent.

    What that means is that we get rid of all external dependencies (e.g. JUnit) and only use builtin Kotlin functionality. @javatarz already experimented this within #72 and could give some insights on this. What we do need if we go into this direction is having tests builtin for each platform, to make sure we don't break anything.

    Even if we can get rid of our Java dependencies, we still have dependencies on the Java library, because we do have assertions for java.time.* and java.io.File. I'm not sure if we can be completely platform independent (as in Kotlin platforms) with just maintaining one project. Having only one core artifact for the Kotlin stdlib and then platform specific assertions (dependent on the core artifact) for Java specific stuff, Android specific stuff and so on, aggregated into one Github organization, might be better in the future.

    Android

    I also see Android as a kind of another platform, because we are locked in Java 1.6 there. @eburke56 has already contributed logic into our buildsystem so that we can have a specific artifact for Android (e.g. no backtick names). I would definitely want to support Android further.

    opened by MarkusAmshove 33
  • "Cannot inline bytecode" error since 1.42

    I've seen this problem referenced here, and marked as resolved, but unfortunately it's still present in our project.

    We were using 1.31 for the longest time, and today we're upgrading a few dependencies including Kluent. I tried the latest (1.47) and I got this compilation error:

    Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option
    

    I then tried to go back versions until one works, and the latest that doesn't have this issue for us is 1.41.

    Ideas?

    opened by BoD 26
  • How to configure Kluent for kotlin native?

    How to configure Kluent for kotlin native?

    Hi! First of all, thank you for this awesome testing library! It's very idiomatic and I have been enjoying using it very much!

    So I am just trying to make it work with Kotlin native. Currently in my build.gradle, I have

            linuxTest {
                dependencies {
                    implementation 'org.amshove.kluent:kluent-common:1.51'
                }
            }
    

    But linking failed with

    > Task :linkDebugTestLinux FAILED
    e: /home/.../ReductionTest.kt: (3, 8): Unresolved reference: org
    e: /home/.../ReductionTest.kt: (138, 77): Unresolved reference: shouldEqual
    

    Am I missing something? Any help would be great! Thank you!

    BTW, it would be great if this could be documented :smile:

    opened by tgeng 13
  • shouldBeNear fails with not finite values.

    shouldBeNear fails with not finite values.

    Hi.

    I think it is reasonable to say that x.shouldBeNear(x, delta) should always pass.

    I think for any value of x it is correct to say x is near x

    If you agree with this statement, then we have to fix the current implementation which fails in the following case:

    val delta = 1.0
    val x = Double.NaN
    x.shouldBeNear(x, delta) // Throws an assertion error, because `NaN` is not between `NaN` and `NaN`
    
    opened by jcornaz 10
  • Failed to resolve mockito-kotlin dependency

    Failed to resolve mockito-kotlin dependency

    Hi! I have

    Error:Failed to resolve: com.nhaarman:mockito-kotlin-kt1.1:1.5.+
    

    in the version 1.32.

    I think it's because of 1.5.+ versioning.

    Excluding the module and adding dependency with 1.5.0 solves the issue.

    opened by Jeevuz 10
  • Does not work on Android projects

    Does not work on Android projects

    Use:

    import org.amshove.kluent.mock
    val m: AppData = mock(AppData::class)
    

    Error:

    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/amshove/kluent/MockingKt;
    at com.myproject.tests.Test.testSomething(Test.kt:91)
    at java.lang.reflect.Method.invoke(Native Method)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
    at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
    at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
    at com.jakewharton.u2020.U2020TestRunner.onStart(U2020TestRunner.java:22)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1932)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "org.amshove.kluent.MockingKt" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.myproject.test-2/base.apk", zip file "/data/app/com.myproject-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myproject.test-2/lib/x86, /data/app/com.myproject-2/lib/x86, /data/app/com.myproject.test-2/base.apk!/lib/x86, /data/app/com.myproject-2/base.apk!/lib/x86, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 34 more
    
    opened by autonomousapps 10
  • Should Throw Used to be able to catch AssertionExceptions

    Should Throw Used to be able to catch AssertionExceptions

    This used to work (1.21), now it leaks the exception (1.29).

    @Test
    fun `Catch assertion exception`() {
        {
            assertEquals("!", "@")
        } `should throw` AssertionError::class
    }
    

    Sorry, maybe that didn't work in 1.21, but this did:

    @Test
    fun `Catch assertion exception (the exception)`() {
        {
            assertEquals("!", "@")
        } `should throw the Exception` AssertionError::class
    }
    
    investigate 
    opened by westonal 9
  • Can't create 'any' matcher for String or Java interface

    Can't create 'any' matcher for String or Java interface

    Heya, I am attempting to 'any' match a String and an interface from a Java library, but contrary to Double, I can't seem to get them to work. Is there a different approach I should take for non-primitives?

    interface Foo {
    
    }
    
    println(Double::class.toString())         // prints "class kotlin.Double" 
    println(Double::class.java.toString())    // prints "double"
    println(any(Double::class))               // prints "0.0"
    
    println(String::class.toString())         // prints "class kotlin.String"
    println(String::class.java.toString())    // prints "class java.lang.String"
    println(any(String::class))               // throws "java.lang.IllegalStateException: any(kClass.javaObjectType) must not be null"
    
    println(Foo::class.toString())            // prints "class Foo"
    println(Foo::class.java.toString())       // prints "interface Foo"
    println(any(Foo::class))                  // throws "java.lang.IllegalStateException: any(kClass.javaObjectType) must not be null"
    

    I'm using Spek 1.1.0-beta4 with Kluent 1.16. The Mockito version that was pulled in is 2.1.0 (explicitly depending on the latest version doesn't seem to change anything).

    Thank you

    opened by fishb6nes 9
  • Remove mockito and all related features

    Remove mockito and all related features

    Since I also suffered from long autocompletion lists (I mainly use mockk), I decided to remove the dependency on Mockito and all related features as outlined in https://github.com/MarkusAmshove/Kluent/issues/73.

    Thus this would fix https://github.com/MarkusAmshove/Kluent/issues/73.

    • [x] I've added my name to the AUTHORS file, if it wasn't already present.
    opened by rubengees 8
  • Make shouldNotBeNull return non-null instance

    Make shouldNotBeNull return non-null instance

    Sometimes you want to test whether a nullable instance is actually null. Most often I want to run futher tests on this instance afterwards.

    It would be nice if the shouldNotBeNull fun returned a non null type when the test passes (and throws if not).

    Sample implementation:

    fun <T : Any> T?.shouldNotBeNull(): T = this ?: throw AssertionError("Expected this to not be null")
    

    This allows one to write the following code:

    val user = userSource.findUser(details.email).shouldNotBeNull()
    user.email.shouldNotBeBlank()
    articleSource.insertArticle(user, it)
    

    Without having to !! every user reference.

    needs migration to 2.0 
    opened by AndreasVolkmann 8
  • Use the newest Multiplatform project structure

    Use the newest Multiplatform project structure

    Kluent currently uses a Gradle structure for realizing multiplatform that is pretty dated. Since the first days of multiplatform targeting, the way to write multiplatform libraries with Gradle has changed significantly, making the Gradle project a lot more simple.

    Migration to the new structure e.g. allows to specify JVM toolchains, which would prevent things like #220 in the future.

    2.0 chore 
    opened by MarkusAmshove 0
  • Potentially misleading behavior of shoudNotThrow

    Potentially misleading behavior of shoudNotThrow

    I think shouldNotThrow could hide a programming error.

    The following code completes without issues:

    invoking { throw IllegalArgumentException() } shouldNotThrow CustomException::class
    

    I think the IllegalArgumentException should be re-thrown so it's not hidden from the developer.

    opened by piotrb5e3 0
  • changed inheritance from AssertionError caused assertion not working with awaitility

    changed inheritance from AssertionError caused assertion not working with awaitility

    After a version update, I saw lot of test started to fail, I've tracked down the issue to a compatibility issue between awaitility and kluent,

    in awaitility ( maybe also in other libraries.. I don't know ) await untilAsserted { X shouldBeEqualTo Y } the untilAsserted function expect the lambda assertion to return a AssertionError error , it seemed to be the case in the past ( with shouldBe , now deprecated in favor of shouldBeEqualTo ) but now it's changed and those assertion are just exceptions in kluent ,

    a ugly workaround for me was overriding all those operators and wrap the exception in AssertionError ie :

    infix fun <I : Iterable<*>> I.assertShouldHaveSize(expectedSize: Int): I {
        return apply { try {
            this shouldHaveSize expectedSize
        }catch (cfe : ComparisonFailedException){
            throw AssertionError(cfe)
        }
    }
    }
    
    opened by fvigotti 1
  • Semantic versioning to allow +notation on library updates

    Semantic versioning to allow +notation on library updates

    Would it be possible to allow for a type major.minor.patch version strategy on this library?

    The 1.65 version seemed to break use of any() in tests. If possible could you allow for a versioning that allows for non breaking minor upgrades like 1.+ and add the breaking ones to the major version number?

    opened by espentj 1
  • Weird behavior of `should throw`

    Weird behavior of `should throw`

    Hi Markus!

    I'm trying to do this:

        @Test
        fun `assert throws exceptions`() {
            invoking { factory.create("") } `should throw` IllegalArgumentException::class
        }
    

    But have a compile error:

    org/junit/ComparisonFailure
    java.lang.NoClassDefFoundError: org/junit/ComparisonFailure
    	at org.amshove.kluent.ExceptionsKt.shouldThrow(Exceptions.kt:14)
    	at org.amshove.kluent.ExceptionsBacktickKt.should throw(ExceptionsBacktick.kt:5)
            ...
    

    Do you have any clues?

    opened by darmen 5
Releases(v1.72)
Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs

Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs. -> you can click on headline and it will open an article of that news in the app(no need to go to chrome or any browser)

SUMIT KUMAR 5 Nov 28, 2022
A general purpose kotlin library that use kotlin coroutines, flows and channels to provide timer features with the most easy and efficient way

Timer Timer is a general purpose kotlin library that use kotlin coroutines, flows and channels to provide timer features with the most easy and effici

Amr Saraya 3 Jul 11, 2022
To Do List App is built in Kotlin using Material 3, Data Binding, Navigation Component Graphs, Room persistence library, Kotlin coroutines, LiveData, Dagger Hilt, and Notifications following MVVM Architecture.

ToDoListApp ToDoList App demonstrates modern Android development with Hilt, Coroutines, LiveData, Jetpack (Room, ViewModel), and Material 3 Design bas

Naman Garg 10 Jan 8, 2023
A music picker library for React Native. Provides access to the system's UI for selecting songs from the phone's music library.

Expo Music Picker A music picker library for React Native. Provides access to the system's UI for selecting songs from the phone's music library. Supp

Bartłomiej Klocek 60 Dec 29, 2022
Utility Android app for generating color palettes of images using the Palette library. Written in Kotlin.

Palette Helper is a simple utility app made to generate color palettes of images using Google's fantastic Palette library. It's mostly a for-fun pet p

Zac Sweers 154 Nov 18, 2022
Utility Android app for generating color palettes of images using the Palette library. Written in Kotlin.

Palette Helper is a simple utility app made to generate color palettes of images using Google's fantastic Palette library. It's mostly a for-fun pet p

Zac Sweers 154 Nov 18, 2022
An library to help android developers working easly with activities and fragments (Kotlin version)

AFM An library to help android developer working easly with activities and fragments (Kotlin) Motivation Accelerate the process and abstract the logic

Massive Disaster 12 Oct 3, 2022
This is a open source library on kotlin for Solana protocol.

Solana + RxSolana This is a open source library on kotlin for Solana protocol. The objective is to create a cross platform, fully functional, highly t

Arturo Jamaica 48 Jan 9, 2023
Kotlin Android app for cataloging books off home/office library.

MyLibrary App Kotlin Android app for cataloging books off home/office library. Features: Searching COBISS, Google Books and OpenLibrary by scanning IS

Marko Đorđević 0 Nov 29, 2021
Android Contacts API Library written in Kotlin with Java interoperability.

Android Contacts API Library written in Kotlin with Java interoperability. No more ContentProviders and cursors. Say goodbye to ContactsContract. Build your own contacts app!

Vandolf Estrellado 463 Jan 2, 2023
This little project provides Kotlin bindings for the popular tree-sitter library

kotlintree This little project provides Kotlin bindings for the popular tree-sitter library. Currently it only supports the Kotlin JVM target, but Kot

Christian Banse 23 Nov 28, 2022
Brazilian Holidays: a Kotlin/Java library that provides resources to consult Brazilian holidays and business days

Leia esta documentação em Português. Brazilian Holidays Brazilian Holidays is a

Quantis 2 Oct 3, 2022
Open-source Kotlin library to connect Alsat pardakht peyment API (Core)

Alsat IPG Core با استفاده از این کتابخانه میتوانید پروژه جاوا یا کاتلین خودتون رو به شبکه پرداخت آل‌سات پرداخت وصل کنید و به راحتی محصولات خودتون رو د

Alsat Pardakht 4 Mar 14, 2022
A Kotlin/JVM based library for BitShares blockchain.

A Kotlin/JVM based library for BitShares blockchain. It implements most functions of BitShares Core including objects (de)serialization, transactions sign/broadcast, wallet create/restore, and more.

Husk 1 Apr 9, 2022
A Kotlin binding to webview, a tiny cross-platform webview library, supports Java and Native.

webviewko provides a Kotlin/JVM and a Kotlin/Native(experimental) binding to webview, a tiny cross-platform webview library to build modern cross-platform GUIs using WebView2, WebKit and WebKitGTK.

Winterreisender 17 Dec 30, 2022
Samples demonstrating the features and use of Koala Plot, a Compose Multiplatform based charting and plotting library written in Kotlin.

Koala Plot Samples This repository houses samples demonstrating the use and features of Koala Plot libraries. How to run Build koalaplot-core with the

Koala Plot 6 Oct 18, 2022
Bindings to the JNI library on Android for Kotlin/Native

JNI Utils using this library: implementation("io.github.landrynorris:jni-utils:0.0.1-alpha01") This library provides bindings to the JNI library on An

Landry Norris 6 Sep 27, 2022
MachOParser is a Kotlin library to parse Mach-O files

MachOParser MachOParser is a Kotlin library to parse Mach-O files Mach-O is a file format for executables, shared libraries and related binaries. This

mobile.dev 5 Nov 21, 2022
A full-stack application showing the power 💪 of KOTLIN. Entire android app + backend Apis written in Kotlin 🔥

Gamebaaz ?? A full-stack application showing the power ?? of KOTLIN. Entire android app + backend Apis written in Kotlin ?? Android Backend Jetpack Co

Sarnava Konar 85 Nov 17, 2022