diff --git a/.editorconfig b/.editorconfig index 613091e9..d3537b13 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,6 +5,7 @@ end_of_line = lf insert_final_newline = true charset = utf-8 -[*.kt] +[*.{kt,kts}] indent_style = space indent_size = 2 +ktlint_standard_filename = disabled diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..fb2eab52 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,3 @@ +# .git-blame-ignore-revs +# Ktlint 0.42.1 -> 0.50.0 update: +2e91decb0f3cea8fd7ab953639cae74f01ce8a04 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 297a7388..18b73c65 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## Issues -- Before submitting a bug, make sure that its source is not the libGDX framework itself. +- Before submitting a bug report, verify that it is not caused by the libGDX framework itself. - Feel free to create issues or start discussions with feature requests and questions about the libraries. Issues and discussions are among the fastest way to contact the developers. @@ -25,10 +25,9 @@ the changes. For example: - Make sure to include unit tests of your code. Test names should use the `` `backtick method name` `` syntax. JUnit and [Spek](http://spekframework.org/) can be used to write tests, although JUnit is encouraged for its commonness. Use [Mockito-Kotlin](https://github.com/nhaarman/mockito-kotlin) for mocking. -- If your pull request is not a simple bug fix or small utility, make sure to link it to an existing issue or create -an issue with your proposal first. Major API changes or new modules have to be discussed with the maintainers first. -Skipping the issue will not get your pull request rejected outright, but note that major changes without approval might -require a rewrite. +- In case of a larger pull request, make sure to link it to an existing issue or create a corresponding issue first. +Major API changes or new modules should be discussed with the maintainers. Skipping the issue will not get your pull +request rejected outright, but note that major changes without approval might require a rewrite. - All notable changes should be added to the [changelog](../CHANGELOG.md) with an appropriate label: - **[FEATURE]** - a new functionality. - **[CHANGE]** - an API breaking change. @@ -93,7 +92,7 @@ projectDesc=Description of your module as it will appear in Maven Central. leave it empty. By adding `import ktx.*` at the top of this file, you will be able to access the versions of major dependencies of the modules as defined in the [`buildSrc`](../buildSrc) directory. - Add a `README.md` file describing your module. Refer to other `README.md` files for examples. `README.md` files -should generally consist of the following sections: +can consist of the following sections: - _General description_ - in a single sentence, what problem does the module solve? - _Motivation_ - why was the module created? - _Guide_ - what features does the module provide? Does it require additional setup? @@ -139,12 +138,14 @@ to update the [version.txt](../version.txt) and [milestones](https://github.com/ - **Kotlin**: update the `kotlinVersion` in the properties file and the Kotlin tag in the [README.md](../README.md). - **Kotlin Coroutines**: update `kotlinCoroutinesVersion` in the versions file and the tag in the `ktx-async` [README.md](../async/README.md). -- **Gradle**: run `gradle wrapper` in the root project folder. Make sure that the +- **Gradle**: run `gradle wrapper --distribution-type all` in the root project folder. Make sure that the [Gradle wrapper properties file](../gradle/wrapper/gradle-wrapper.properties) points the `all` Gradle release under -`distributionUrl` rather than just the binaries (`bin`). +`distributionUrl` rather than just the binaries (`bin`). Note that you do not have to install the corresponding Gradle +version locally: instead, you can update the version in `gradle-wrapper.properties` first, and then run `./gradlew wrapper` +to update the Gradle wrapper scripts and configuration files. - **VisUI**: update `visUiVersion` in the versions file and VisUI version in the tag on the top of the [vis/README.md](../vis/README.md) file. -- **Ashley**: update `ashleyVersion` in the versions file and Ashely version in the tag on the top of the +- **Ashley**: update `ashleyVersion` in the versions file and Ashley version in the tag on the top of the [ashley/README.md](../ashley/README.md) file. - **Artemis-odb**: update `artemisOdbVersion` in the versions file and Artemis-odb version in the tag on the top of the [artemis/README.md](../artemis/README.md) file. @@ -204,3 +205,8 @@ Triggered by pushing to the `develop` branch. * [publish-documentation](workflows/publish-documentation.yml) - builds and replaces the Dokka documentation published to [the official website](https://libktx.github.io/ktx/). Triggered by pushing to the `master` branch, which is generally only done before stable releases. +- [publish-project-samples](workflows/publish-project-samples.yml) - generates sample projects with +[gdx-liftoff](https://github.com/tommyettinger/gdx-liftoff) based on the latest **KTX** version from the `master` +branch, and pushes them to the [ktx-sample-project](https://github.com/libktx/ktx-sample-project) and +[ktx-sample-web-project](https://github.com/libktx/ktx-sample-web-project) repositories. Triggered by creating new +release tags. diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a9248695..66a55004 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: [8, 11] + java-version: [8, 11, 17] steps: - name: Repository checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 83900286..76b0b802 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ _See also: [the official libGDX changelog](https://github.com/libgdx/libgdx/blob/master/CHANGES)._ +#### 1.12.0-rc1 + +- **[UPDATE]** Updated to libGDX 1.12.0. +- **[UPDATE]** Updated to Kotlin 1.9.0. +- **[UPDATE]** Updated to Kotlin Coroutines 1.7.2. +- **[UPDATE]** Updated to VisUI 1.5.2. +- **[UPDATE]** Updated to Dokka 1.8.20. +- **[MISC]** **KTX** project should now work locally under JDK 17, including the test suite. +- **[FEATURE]** (`ktx-app`) `KtxInputAdapter` now supports the `touchCancelled` event handling. +By default, it calls the `touchUp` method for consistency with the previous libGDX versions. + #### 1.11.0-rc6 - **[UPDATE]** Updated to Kotlin 1.8.21. diff --git a/README.md b/README.md index 02bcbf9f..9a2bc319 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![GitHub Build](https://github.com/libktx/ktx/workflows/build/badge.svg)](https://github.com/libktx/ktx/actions?query=workflow%3Abuild) -[![Kotlin](https://img.shields.io/badge/kotlin-1.8.21-orange.svg)](http://kotlinlang.org/) -[![libGDX](https://img.shields.io/badge/libgdx-1.11.0-red.svg)](https://libgdx.com/) +[![Kotlin](https://img.shields.io/badge/kotlin-1.9.0-orange.svg)](http://kotlinlang.org/) +[![libGDX](https://img.shields.io/badge/libgdx-1.12.0-red.svg)](https://libgdx.com/) [![Maven Central](https://img.shields.io/maven-central/v/io.github.libktx/ktx-async.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.github.libktx%22) [![KTX](.github/ktx-logo.png "KTX")](http://libktx.github.io) @@ -221,7 +221,7 @@ with the `ktx-app` identifier would require the following changes in your `build // Groovy DSL: ext { // Update this version to match the latest KTX release: - ktxVersion = '1.11.0-rc6' + ktxVersion = '1.12.0-rc1' } dependencies { @@ -235,7 +235,7 @@ dependencies { ```kotlin // Update this version to match the latest KTX release: -val ktxVersion = "1.11.0-rc6" +val ktxVersion = "1.12.0-rc1" dependencies { api(group = "io.github.libktx", name = "ktx-app", version = ktxVersion) @@ -305,7 +305,7 @@ repositories { ext { // Update this version to match the latest libGDX release: - ktxVersion = '1.11.0-SNAPSHOT' + ktxVersion = '1.12.0-SNAPSHOT' } ``` @@ -320,7 +320,7 @@ repositories { } // Update this version to match the latest libGDX release: -val ktxVersion = "1.11.0-SNAPSHOT" +val ktxVersion = "1.12.0-SNAPSHOT" ``` diff --git a/actors/src/main/kotlin/ktx/actors/actors.kt b/actors/src/main/kotlin/ktx/actors/actors.kt index 79bc8340..99424c26 100644 --- a/actors/src/main/kotlin/ktx/actors/actors.kt +++ b/actors/src/main/kotlin/ktx/actors/actors.kt @@ -8,6 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage * Min value of alpha in libGDX Color instances. */ const val MIN_ALPHA = 0f + /** * Max value of alpha in libGDX Color instances. */ diff --git a/actors/src/main/kotlin/ktx/actors/events.kt b/actors/src/main/kotlin/ktx/actors/events.kt index 7612054e..f20adce8 100644 --- a/actors/src/main/kotlin/ktx/actors/events.kt +++ b/actors/src/main/kotlin/ktx/actors/events.kt @@ -36,7 +36,7 @@ inline fun T.onChange(crossinline listener: T.() -> Unit): ChangeLis * @return [ChangeListener] instance. */ inline fun T.onChangeEvent( - crossinline listener: T.(event: ChangeEvent) -> Unit + crossinline listener: T.(event: ChangeEvent) -> Unit, ): ChangeListener { val changeListener = object : ChangeListener() { override fun changed(event: ChangeEvent, actor: Actor) = listener(event) @@ -65,7 +65,7 @@ inline fun T.onClick(crossinline listener: T.() -> Unit): ClickListe * @return [ClickListener] instance. */ inline fun T.onClickEvent( - crossinline listener: T.(event: InputEvent) -> Unit + crossinline listener: T.(event: InputEvent) -> Unit, ): ClickListener { val clickListener = object : ClickListener() { override fun clicked(event: InputEvent, x: Float, y: Float) = listener(event) @@ -81,7 +81,7 @@ inline fun T.onClickEvent( * @return [ClickListener] instance. */ inline fun T.onClickEvent( - crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit + crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit, ): ClickListener { val clickListener = object : ClickListener() { override fun clicked(event: InputEvent, x: Float, y: Float) = listener(event, x, y) @@ -97,7 +97,7 @@ inline fun T.onClickEvent( * @return [ClickListener] instance. */ inline fun T.onEnter( - crossinline listener: T.() -> Unit + crossinline listener: T.() -> Unit, ): InputListener { val clickListener = object : ClickListener() { override fun enter(event: InputEvent?, x: Float, y: Float, pointer: Int, fromActor: Actor?) { @@ -116,7 +116,7 @@ inline fun T.onEnter( * @return [ClickListener] instance. */ inline fun T.onExit( - crossinline listener: T.() -> Unit + crossinline listener: T.() -> Unit, ): InputListener { val clickListener = object : ClickListener() { override fun exit(event: InputEvent?, x: Float, y: Float, pointer: Int, toActor: Actor?) { @@ -137,7 +137,7 @@ inline fun T.onExit( * @see onEnter */ inline fun T.onEnterEvent( - crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit + crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit, ): ClickListener { val clickListener = object : ClickListener() { override fun enter(event: InputEvent, x: Float, y: Float, pointer: Int, fromActor: Actor?) { @@ -158,7 +158,7 @@ inline fun T.onEnterEvent( * @see onExit */ inline fun T.onExitEvent( - crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit + crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit, ): ClickListener { val clickListener = object : ClickListener() { override fun exit(event: InputEvent, x: Float, y: Float, pointer: Int, toActor: Actor?) { @@ -178,7 +178,7 @@ inline fun T.onExitEvent( * @return [ChangeListener] instance. */ inline fun > Tree.onSelectionChange( - crossinline listener: ((Selection) -> Unit) + crossinline listener: ((Selection) -> Unit), ): ChangeListener { val changeListener = object : ChangeListener() { override fun changed(event: ChangeEvent, actor: Actor) { @@ -230,7 +230,7 @@ inline fun T.onTouchUp(crossinline listener: T.() -> Unit): InputLis */ inline fun T.onTouchEvent( crossinline onDown: T.(event: InputEvent) -> Unit, - crossinline onUp: T.(event: InputEvent) -> Unit + crossinline onUp: T.(event: InputEvent) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -254,7 +254,7 @@ inline fun T.onTouchEvent( * @see InputListener.touchUp */ inline fun T.onTouchEvent( - crossinline listener: T.(event: InputEvent) -> Unit + crossinline listener: T.(event: InputEvent) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -280,7 +280,7 @@ inline fun T.onTouchEvent( */ inline fun T.onTouchEvent( crossinline onDown: T.(event: InputEvent, x: Float, y: Float) -> Unit, - crossinline onUp: T.(event: InputEvent, x: Float, y: Float) -> Unit + crossinline onUp: T.(event: InputEvent, x: Float, y: Float) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -305,7 +305,7 @@ inline fun T.onTouchEvent( * @see InputListener.touchUp */ inline fun T.onTouchEvent( - crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit + crossinline listener: T.(event: InputEvent, x: Float, y: Float) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -331,7 +331,7 @@ inline fun T.onTouchEvent( */ inline fun T.onTouchEvent( crossinline onDown: T.(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int) -> Unit, - crossinline onUp: T.(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int) -> Unit + crossinline onUp: T.(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -357,7 +357,7 @@ inline fun T.onTouchEvent( * @see InputListener.touchUp */ inline fun T.onTouchEvent( - crossinline listener: T.(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int) -> Unit + crossinline listener: T.(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int) -> Unit, ): InputListener { val inputListener = object : KtxInputListener() { override fun touchDown(event: InputEvent, x: Float, y: Float, pointer: Int, button: Int): Boolean { @@ -382,13 +382,15 @@ inline fun T.onTouchEvent( */ inline fun T.onKey( catchEvent: Boolean = false, - crossinline listener: T.(character: Char) -> Unit + crossinline listener: T.(character: Char) -> Unit, ): EventListener { val keyListener = EventListener { event -> if (event is InputEvent && event.type === keyTyped) { listener(event.character) catchEvent - } else false + } else { + false + } } addListener(keyListener) return keyListener @@ -404,13 +406,15 @@ inline fun T.onKey( */ inline fun T.onKeyEvent( catchEvent: Boolean = false, - crossinline listener: T.(event: InputEvent, character: Char) -> Unit + crossinline listener: T.(event: InputEvent, character: Char) -> Unit, ): EventListener { val keyListener = EventListener { event -> if (event is InputEvent && event.type === keyTyped) { listener(event, event.character) catchEvent - } else false + } else { + false + } } addListener(keyListener) return keyListener @@ -427,13 +431,15 @@ inline fun T.onKeyEvent( */ inline fun T.onKeyDown( catchEvent: Boolean = false, - crossinline listener: T.(keyCode: Int) -> Unit + crossinline listener: T.(keyCode: Int) -> Unit, ): EventListener { val keyDownListener = EventListener { event -> if (event is InputEvent && event.type === keyDown) { listener(event.keyCode) catchEvent - } else false + } else { + false + } } addListener(keyDownListener) return keyDownListener @@ -450,13 +456,15 @@ inline fun T.onKeyDown( */ inline fun T.onKeyDownEvent( catchEvent: Boolean = false, - crossinline listener: T.(event: InputEvent, keyCode: Int) -> Unit + crossinline listener: T.(event: InputEvent, keyCode: Int) -> Unit, ): EventListener { val keyDownListener = EventListener { event -> if (event is InputEvent && event.type === keyDown) { listener(event, event.keyCode) catchEvent - } else false + } else { + false + } } addListener(keyDownListener) return keyDownListener @@ -473,13 +481,15 @@ inline fun T.onKeyDownEvent( */ inline fun T.onKeyUp( catchEvent: Boolean = false, - crossinline listener: T.(keyCode: Int) -> Unit + crossinline listener: T.(keyCode: Int) -> Unit, ): EventListener { val keyUpListener = EventListener { event -> if (event is InputEvent && event.type === keyUp) { listener(event.keyCode) catchEvent - } else false + } else { + false + } } addListener(keyUpListener) return keyUpListener @@ -496,13 +506,15 @@ inline fun T.onKeyUp( */ inline fun T.onKeyUpEvent( catchEvent: Boolean = false, - crossinline listener: T.(event: InputEvent, keyCode: Int) -> Unit + crossinline listener: T.(event: InputEvent, keyCode: Int) -> Unit, ): EventListener { val keyUpListener = EventListener { event -> if (event is InputEvent && event.type === keyUp) { listener(event, event.keyCode) catchEvent - } else false + } else { + false + } } addListener(keyUpListener) return keyUpListener @@ -518,13 +530,15 @@ inline fun T.onKeyUpEvent( */ inline fun T.onScrollFocus( catchEvent: Boolean = false, - crossinline listener: T.(focused: Boolean) -> Unit + crossinline listener: T.(focused: Boolean) -> Unit, ): EventListener { val focusListener = EventListener { event -> if (event is FocusEvent && event.type === scroll) { listener(event.isFocused) catchEvent - } else false + } else { + false + } } addListener(focusListener) return focusListener @@ -541,13 +555,15 @@ inline fun T.onScrollFocus( */ inline fun T.onScrollFocusEvent( catchEvent: Boolean = false, - crossinline listener: T.(event: FocusEvent) -> Unit + crossinline listener: T.(event: FocusEvent) -> Unit, ): EventListener { val focusListener = EventListener { event -> if (event is FocusEvent && event.type === scroll) { listener(event) catchEvent - } else false + } else { + false + } } addListener(focusListener) return focusListener @@ -563,13 +579,15 @@ inline fun T.onScrollFocusEvent( */ inline fun T.onKeyboardFocus( catchEvent: Boolean = false, - crossinline listener: T.(focused: Boolean) -> Unit + crossinline listener: T.(focused: Boolean) -> Unit, ): EventListener { val focusListener = EventListener { event -> if (event is FocusEvent && event.type === keyboard) { listener(event.isFocused) catchEvent - } else false + } else { + false + } } addListener(focusListener) return focusListener @@ -586,13 +604,15 @@ inline fun T.onKeyboardFocus( */ inline fun T.onKeyboardFocusEvent( catchEvent: Boolean = false, - crossinline listener: T.(event: FocusEvent) -> Unit + crossinline listener: T.(event: FocusEvent) -> Unit, ): EventListener { val focusListener = EventListener { event -> if (event is FocusEvent && event.type === keyboard) { listener(event) catchEvent - } else false + } else { + false + } } addListener(focusListener) return focusListener diff --git a/actors/src/main/kotlin/ktx/actors/stages.kt b/actors/src/main/kotlin/ktx/actors/stages.kt index 1a4b639a..096cb82b 100644 --- a/actors/src/main/kotlin/ktx/actors/stages.kt +++ b/actors/src/main/kotlin/ktx/actors/stages.kt @@ -23,5 +23,5 @@ private fun getDefaultViewport() = ScalingViewport( stretch, Gdx.graphics.width.toFloat(), Gdx.graphics.height.toFloat(), - OrthographicCamera() + OrthographicCamera(), ) diff --git a/actors/src/test/kotlin/ktx/actors/EventsTest.kt b/actors/src/test/kotlin/ktx/actors/EventsTest.kt index 872f815d..a2de4db6 100644 --- a/actors/src/test/kotlin/ktx/actors/EventsTest.kt +++ b/actors/src/test/kotlin/ktx/actors/EventsTest.kt @@ -191,7 +191,7 @@ class EventsTest { val listener = actor.onTouchEvent( onDown = { event -> }, - onUp = { event -> } + onUp = { event -> }, ) assertNotNull(listener) @@ -204,7 +204,7 @@ class EventsTest { val listener = actor.onTouchEvent( onDown = { event, x, y -> }, - onUp = { event, x, y -> } + onUp = { event, x, y -> }, ) assertNotNull(listener) @@ -217,7 +217,7 @@ class EventsTest { val listener = actor.onTouchEvent( onDown = { event, x, y, pointer, button -> }, - onUp = { event, x, y, pointer, button -> } + onUp = { event, x, y, pointer, button -> }, ) assertNotNull(listener) diff --git a/actors/src/test/kotlin/ktx/actors/StagesTest.kt b/actors/src/test/kotlin/ktx/actors/StagesTest.kt index b96ad335..7891bd6a 100644 --- a/actors/src/test/kotlin/ktx/actors/StagesTest.kt +++ b/actors/src/test/kotlin/ktx/actors/StagesTest.kt @@ -9,15 +9,15 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.utils.Scaling.stretch import com.badlogic.gdx.utils.viewport.ScalingViewport import com.badlogic.gdx.utils.viewport.Viewport -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.doAnswer -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertSame import org.junit.Before import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock import java.nio.IntBuffer class StagesTest { @@ -36,7 +36,8 @@ class StagesTest { } on(it.glGetShaderiv(any(), any(), any())) doAnswer { invocation -> if (invocation.arguments[1] == GL20.GL_COMPILE_STATUS) { - invocation.getArgument(2).put(0, 1); Unit + invocation.getArgument(2).put(0, 1) + Unit } } } diff --git a/actors/src/test/kotlin/ktx/actors/WidgetsTest.kt b/actors/src/test/kotlin/ktx/actors/WidgetsTest.kt index fe3ad1ca..37ca96fe 100644 --- a/actors/src/test/kotlin/ktx/actors/WidgetsTest.kt +++ b/actors/src/test/kotlin/ktx/actors/WidgetsTest.kt @@ -9,10 +9,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle -import com.nhaarman.mockitokotlin2.mock import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.mockito.kotlin.mock class WidgetsTest { @Before diff --git a/actors/src/test/kotlin/ktx/actors/utils.kt b/actors/src/test/kotlin/ktx/actors/utils.kt index 4d71861e..e01b938d 100644 --- a/actors/src/test/kotlin/ktx/actors/utils.kt +++ b/actors/src/test/kotlin/ktx/actors/utils.kt @@ -3,13 +3,13 @@ package ktx.actors import com.badlogic.gdx.Gdx import com.badlogic.gdx.scenes.scene2d.Stage import com.badlogic.gdx.utils.viewport.Viewport -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock /** @return [Stage] with mocked viewport and batch. */ internal fun getMockStage( viewportWidth: Float = 800f, - viewportHeight: Float = 600f + viewportHeight: Float = 600f, ): Stage { Gdx.graphics = mock() // Referenced by Stage constructor. val viewport = mock { diff --git a/ai/src/main/kotlin/ktx/ai/behaviorTree.kt b/ai/src/main/kotlin/ktx/ai/behaviorTree.kt index 0622577f..e8debe40 100644 --- a/ai/src/main/kotlin/ktx/ai/behaviorTree.kt +++ b/ai/src/main/kotlin/ktx/ai/behaviorTree.kt @@ -44,7 +44,7 @@ typealias GdxAiRandom = com.badlogic.gdx.ai.btree.decorator.Random AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, - AnnotationTarget.TYPEALIAS + AnnotationTarget.TYPEALIAS, ) annotation class GdxAiDsl @@ -62,7 +62,7 @@ annotation class GdxAiDsl inline fun behaviorTree( rootTask: Task? = null, blackboard: E? = null, - init: (@GdxAiDsl BehaviorTree).() -> Unit = {} + init: (@GdxAiDsl BehaviorTree).() -> Unit = {}, ): BehaviorTree { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val behaviorTree = BehaviorTree(rootTask, blackboard) @@ -83,7 +83,7 @@ inline fun behaviorTree( @GdxAiDsl inline fun > Task.add( task: T, - init: (@GdxAiDsl T).() -> Unit = {} + init: (@GdxAiDsl T).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } task.init() @@ -102,7 +102,7 @@ inline fun > Task.add( @GdxAiDsl inline fun Task.dynamicGuardSelector( tasks: Array> = Array(), - init: (@GdxAiDsl DynamicGuardSelector).() -> Unit = {} + init: (@GdxAiDsl DynamicGuardSelector).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val dynamicGuardSelector = DynamicGuardSelector(tasks) @@ -126,7 +126,7 @@ inline fun Task.parallel( policy: Policy = Policy.Sequence, orchestrator: Orchestrator = Orchestrator.Resume, tasks: Array> = Array(), - init: (@GdxAiDsl Parallel).() -> Unit = {} + init: (@GdxAiDsl Parallel).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val parallel = Parallel(policy, orchestrator, tasks) @@ -146,7 +146,7 @@ inline fun Task.parallel( @GdxAiDsl inline fun Task.randomSelector( tasks: Array> = Array(), - init: (@GdxAiDsl RandomSelector).() -> Unit = {} + init: (@GdxAiDsl RandomSelector).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val randomSelector = RandomSelector(tasks) @@ -166,7 +166,7 @@ inline fun Task.randomSelector( @GdxAiDsl inline fun Task.randomSequence( tasks: Array> = Array(), - init: (@GdxAiDsl RandomSequence).() -> Unit = {} + init: (@GdxAiDsl RandomSequence).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val randomSequence = RandomSequence(tasks) @@ -186,7 +186,7 @@ inline fun Task.randomSequence( @GdxAiDsl inline fun Task.selector( tasks: Array> = Array(), - init: (@GdxAiDsl GdxAiSelector).() -> Unit = {} + init: (@GdxAiDsl GdxAiSelector).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val selector = GdxAiSelector(tasks) @@ -206,7 +206,7 @@ inline fun Task.selector( @GdxAiDsl inline fun Task.sequence( tasks: Array> = Array(), - init: (@GdxAiDsl GdxAiSequence).() -> Unit = {} + init: (@GdxAiDsl GdxAiSequence).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val sequence = GdxAiSequence(tasks) @@ -226,7 +226,7 @@ inline fun Task.sequence( @GdxAiDsl inline fun Task.alwaysFail( task: Task? = null, - init: (@GdxAiDsl AlwaysFail).() -> Unit = {} + init: (@GdxAiDsl AlwaysFail).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val alwaysFail = AlwaysFail(task) @@ -246,7 +246,7 @@ inline fun Task.alwaysFail( @GdxAiDsl inline fun Task.alwaysSucceed( task: Task? = null, - init: (@GdxAiDsl AlwaysSucceed).() -> Unit = {} + init: (@GdxAiDsl AlwaysSucceed).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val alwaysSucceed = AlwaysSucceed(task) @@ -269,7 +269,7 @@ inline fun Task.alwaysSucceed( inline fun Task.include( subtree: String? = null, lazy: Boolean = false, - init: (@GdxAiDsl Include).() -> Unit = {} + init: (@GdxAiDsl Include).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val include = Include(subtree, lazy) @@ -289,7 +289,7 @@ inline fun Task.include( @GdxAiDsl inline fun Task.invert( task: Task? = null, - init: Invert.() -> Unit = {} + init: Invert.() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val invert = Invert(task) @@ -311,7 +311,7 @@ inline fun Task.invert( inline fun Task.random( success: FloatDistribution = ConstantFloatDistribution.ZERO_POINT_FIVE, task: Task? = null, - init: (@GdxAiDsl GdxAiRandom).() -> Unit = {} + init: (@GdxAiDsl GdxAiRandom).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val random = GdxAiRandom(success, task) @@ -333,7 +333,7 @@ inline fun Task.random( inline fun Task.repeat( times: IntegerDistribution = ConstantIntegerDistribution.NEGATIVE_ONE, task: Task? = null, - init: (@GdxAiDsl Repeat).() -> Unit = {} + init: (@GdxAiDsl Repeat).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val repeat = Repeat(times, task) @@ -355,7 +355,7 @@ inline fun Task.repeat( inline fun Task.semaphoreGuard( name: String? = null, task: Task? = null, - init: (@GdxAiDsl SemaphoreGuard).() -> Unit = {} + init: (@GdxAiDsl SemaphoreGuard).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val semaphoreGuard = SemaphoreGuard(name, task) @@ -375,7 +375,7 @@ inline fun Task.semaphoreGuard( @GdxAiDsl inline fun Task.untilFail( task: Task? = null, - init: (@GdxAiDsl UntilFail).() -> Unit = {} + init: (@GdxAiDsl UntilFail).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val untilFail = UntilFail(task) @@ -395,7 +395,7 @@ inline fun Task.untilFail( @GdxAiDsl inline fun Task.untilSuccess( task: Task? = null, - init: (@GdxAiDsl UntilSuccess).() -> Unit = {} + init: (@GdxAiDsl UntilSuccess).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val untilSuccess = UntilSuccess(task) @@ -413,7 +413,7 @@ inline fun Task.untilSuccess( @OptIn(ExperimentalContracts::class) @GdxAiDsl inline fun Task.failureLeaf( - init: (@GdxAiDsl Failure).() -> Unit = {} + init: (@GdxAiDsl Failure).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val failure = Failure() @@ -431,7 +431,7 @@ inline fun Task.failureLeaf( @OptIn(ExperimentalContracts::class) @GdxAiDsl inline fun Task.successLeaf( - init: (@GdxAiDsl Success).() -> Unit = {} + init: (@GdxAiDsl Success).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val success = Success() @@ -451,7 +451,7 @@ inline fun Task.successLeaf( @GdxAiDsl inline fun Task.waitLeaf( seconds: Float, - init: (@GdxAiDsl Wait).() -> Unit = {} + init: (@GdxAiDsl Wait).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val wait = Wait(seconds) @@ -471,7 +471,7 @@ inline fun Task.waitLeaf( @GdxAiDsl inline fun Task.waitLeaf( seconds: FloatDistribution = ConstantFloatDistribution.ZERO, - init: (@GdxAiDsl Wait).() -> Unit = {} + init: (@GdxAiDsl Wait).() -> Unit = {}, ): Int { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val wait = Wait(seconds) diff --git a/app/src/main/kotlin/ktx/app/Platform.kt b/app/src/main/kotlin/ktx/app/Platform.kt index 7dbfcc0d..03479665 100644 --- a/app/src/main/kotlin/ktx/app/Platform.kt +++ b/app/src/main/kotlin/ktx/app/Platform.kt @@ -27,7 +27,7 @@ object Platform { */ @Deprecated( message = "Java Applets are deprecated since Java 9 in 2017.", - replaceWith = ReplaceWith("isWeb") + replaceWith = ReplaceWith("isWeb"), ) val isApplet: Boolean get() = currentPlatform === ApplicationType.Applet @@ -81,7 +81,7 @@ object Platform { */ @Deprecated( message = "Java Applets are deprecated since Java 9 in 2017.", - replaceWith = ReplaceWith("runOnWeb") + replaceWith = ReplaceWith("runOnWeb"), ) @Suppress("DEPRECATION") @OptIn(ExperimentalContracts::class) @@ -171,7 +171,7 @@ object Platform { minVersion: Int? = null, maxVersion: Int? = null, platform: ApplicationType? = null, - action: () -> T? + action: () -> T?, ): T? { contract { callsInPlace(action, InvocationKind.AT_MOST_ONCE) } val matchesMinVersion = minVersion === null || minVersion <= version diff --git a/app/src/main/kotlin/ktx/app/application.kt b/app/src/main/kotlin/ktx/app/application.kt index 630a7abf..db670808 100644 --- a/app/src/main/kotlin/ktx/app/application.kt +++ b/app/src/main/kotlin/ktx/app/application.kt @@ -33,4 +33,8 @@ interface KtxInputAdapter : InputProcessor { override fun scrolled(amountX: Float, amountY: Float) = false override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int) = false override fun touchDragged(screenX: Int, screenY: Int, pointer: Int) = false + + /** Calls [InputProcessor.touchUp] for consistency with libGDX 1.11.0 and older. Override for custom handling. */ + override fun touchCancelled(screenX: Int, screenY: Int, pointer: Int, button: Int) = + touchUp(screenX, screenY, pointer, button) } diff --git a/app/src/main/kotlin/ktx/app/game.kt b/app/src/main/kotlin/ktx/app/game.kt index 18c54264..1786446c 100644 --- a/app/src/main/kotlin/ktx/app/game.kt +++ b/app/src/main/kotlin/ktx/app/game.kt @@ -24,15 +24,17 @@ import com.badlogic.gdx.utils.ObjectMap */ open class KtxGame( firstScreen: ScreenType? = null, - private val clearScreen: Boolean = true + private val clearScreen: Boolean = true, ) : KtxApplicationAdapter { /** Holds references to all screens registered with [addScreen]. Allows to get a reference of the screen instance * knowing only its type. */ protected val screens: ObjectMap, ScreenType> = ObjectMap() + /** Currently shown screen. Unless overridden with [setScreen], uses an empty mock-up implementation to work around * nullability and `lateinit` issues. [shownScreen] is a public property exposing this value as [ScreenType]. * @see shownScreen */ protected var currentScreen: Screen = firstScreen ?: emptyScreen() + /** Provides direct access to current [Screen] instance handling game events. */ open val shownScreen: ScreenType @Suppress("UNCHECKED_CAST") diff --git a/app/src/main/kotlin/ktx/app/profiling.kt b/app/src/main/kotlin/ktx/app/profiling.kt index 6dc9eefa..9fbbdd72 100644 --- a/app/src/main/kotlin/ktx/app/profiling.kt +++ b/app/src/main/kotlin/ktx/app/profiling.kt @@ -19,7 +19,7 @@ inline fun profile( name: String = "Profiler", repeats: Int = 10, printResults: Boolean = true, - operation: () -> Unit + operation: () -> Unit, ): PerformanceCounter { val performanceCounter = PerformanceCounter(name, repeats) performanceCounter.profile(repeats, printResults, operation) @@ -40,7 +40,7 @@ inline fun profile( inline fun PerformanceCounter.profile( repeats: Int = if (time.mean != null) time.mean.windowSize else 10, printResults: Boolean = true, - operation: () -> Unit + operation: () -> Unit, ) { if (this.time.count == 0) tick() repeat(repeats) { @@ -68,7 +68,7 @@ fun PerformanceCounter.prettyPrint(decimalFormat: String = "%.6fs") { Gdx.app.log( name, "Average OP time: ${decimalFormat.format(mean.mean)} " + - "± ${decimalFormat.format(mean.standardDeviation())}" + "± ${decimalFormat.format(mean.standardDeviation())}", ) minimum = mean.lowest maximum = mean.highest diff --git a/app/src/test/kotlin/ktx/app/GraphicsTest.kt b/app/src/test/kotlin/ktx/app/GraphicsTest.kt index df8c1218..5d2fa67b 100644 --- a/app/src/test/kotlin/ktx/app/GraphicsTest.kt +++ b/app/src/test/kotlin/ktx/app/GraphicsTest.kt @@ -2,9 +2,9 @@ package ktx.app import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.GL20 -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify /** * Tests general utilities related to libGDX graphics API. diff --git a/app/src/test/kotlin/ktx/app/PlatformTest.kt b/app/src/test/kotlin/ktx/app/PlatformTest.kt index 57666373..8251c4bd 100644 --- a/app/src/test/kotlin/ktx/app/PlatformTest.kt +++ b/app/src/test/kotlin/ktx/app/PlatformTest.kt @@ -4,8 +4,6 @@ import com.badlogic.gdx.Application import com.badlogic.gdx.Application.ApplicationType import com.badlogic.gdx.Gdx import com.badlogic.gdx.utils.GdxRuntimeException -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock import io.kotlintest.matchers.shouldThrow import org.junit.After import org.junit.Assert.assertEquals @@ -13,6 +11,8 @@ import org.junit.Assert.assertFalse import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock /** * Tests [Platform] utilities. diff --git a/app/src/test/kotlin/ktx/app/ProfilingTest.kt b/app/src/test/kotlin/ktx/app/ProfilingTest.kt index 85968416..92ac57de 100644 --- a/app/src/test/kotlin/ktx/app/ProfilingTest.kt +++ b/app/src/test/kotlin/ktx/app/ProfilingTest.kt @@ -2,11 +2,11 @@ package ktx.app import com.badlogic.gdx.Gdx import com.badlogic.gdx.utils.PerformanceCounter -import com.nhaarman.mockitokotlin2.mock import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.mockito.kotlin.mock class ProfilingTest { @Before diff --git a/app/src/test/kotlin/ktx/app/applicationTest.kt b/app/src/test/kotlin/ktx/app/applicationTest.kt index 3f4b642e..9ee93456 100644 --- a/app/src/test/kotlin/ktx/app/applicationTest.kt +++ b/app/src/test/kotlin/ktx/app/applicationTest.kt @@ -1,3 +1,5 @@ +@file:Suppress("ktlint:standard:class-naming") + package ktx.app @Suppress("unused") diff --git a/app/src/test/kotlin/ktx/app/gameTest.kt b/app/src/test/kotlin/ktx/app/gameTest.kt index 43282eca..512a08f1 100644 --- a/app/src/test/kotlin/ktx/app/gameTest.kt +++ b/app/src/test/kotlin/ktx/app/gameTest.kt @@ -4,15 +4,6 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.Screen import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.utils.GdxRuntimeException -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.argThat -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.doThrow -import com.nhaarman.mockitokotlin2.eq -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.times -import com.nhaarman.mockitokotlin2.verify import org.junit.After import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -20,6 +11,15 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.argThat +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.times +import org.mockito.kotlin.verify /** * Tests [KtxGame]: KTX equivalent of [com.badlogic.gdx.Game]. diff --git a/artemis/src/main/kotlin/ktx/artemis/world.kt b/artemis/src/main/kotlin/ktx/artemis/world.kt index 30ac6252..15be5202 100644 --- a/artemis/src/main/kotlin/ktx/artemis/world.kt +++ b/artemis/src/main/kotlin/ktx/artemis/world.kt @@ -29,5 +29,5 @@ operator fun World.get(type: KClass): T? = getSystem(type.ja * Thrown when accessing an [BaseSystem] via [getSystem] that does not exist in the [World]. */ class MissingBaseSystemException(type: Class) : GdxRuntimeException( - "Could not access system of type ${type.simpleName} - is it added to the world?" + "Could not access system of type ${type.simpleName} - is it added to the world?", ) diff --git a/artemis/src/test/kotlin/ktx/artemis/ArchetypeSpec.kt b/artemis/src/test/kotlin/ktx/artemis/ArchetypeSpec.kt index e9a62300..88635dc3 100644 --- a/artemis/src/test/kotlin/ktx/artemis/ArchetypeSpec.kt +++ b/artemis/src/test/kotlin/ktx/artemis/ArchetypeSpec.kt @@ -29,7 +29,7 @@ object ArchetypeSpec : Spek({ val archetype = archetypeBuilder .add( Transform::class, - Texture::class + Texture::class, ) .build(world) @@ -64,7 +64,7 @@ object ArchetypeSpec : Spek({ ) .remove( Transform::class, - Texture::class + Texture::class, ) .build(world) diff --git a/ashley/src/main/kotlin/ktx/ashley/engines.kt b/ashley/src/main/kotlin/ktx/ashley/engines.kt index dbedf900..d7d6420d 100644 --- a/ashley/src/main/kotlin/ktx/ashley/engines.kt +++ b/ashley/src/main/kotlin/ktx/ashley/engines.kt @@ -21,7 +21,7 @@ import kotlin.reflect.KClass @AshleyDsl class EngineEntity( val engine: Engine, - val entity: Entity + val entity: Entity, ) /** @@ -122,12 +122,13 @@ operator fun Engine.get(type: KClass): T? = getSystem(type * Thrown when unable to create a component of given type. */ class CreateComponentException(type: KClass<*>, cause: Throwable? = null) : RuntimeException( - "Could not create component ${type.javaObjectType} - is a visible no-arg constructor available?", cause + "Could not create component ${type.javaObjectType} - is a visible no-arg constructor available?", + cause, ) /** * Thrown when accessing an [EntitySystem] via [getSystem] that does not exist in the [Engine]. */ class MissingEntitySystemException(type: KClass) : GdxRuntimeException( - "Could not access system of type ${type.qualifiedName} - is it added to the engine?" + "Could not access system of type ${type.qualifiedName} - is it added to the engine?", ) diff --git a/ashley/src/main/kotlin/ktx/ashley/listeners.kt b/ashley/src/main/kotlin/ktx/ashley/listeners.kt index f048760c..44168186 100644 --- a/ashley/src/main/kotlin/ktx/ashley/listeners.kt +++ b/ashley/src/main/kotlin/ktx/ashley/listeners.kt @@ -63,7 +63,7 @@ interface EntityRemovalListener : EntityListener { inline fun Engine.onEntityAdded( family: Family = anyFamily, priority: Int = 0, - crossinline onAdded: (entity: Entity) -> Unit + crossinline onAdded: (entity: Entity) -> Unit, ): EntityAdditionListener { val listener = object : EntityAdditionListener { override fun entityAdded(entity: Entity) { @@ -91,7 +91,7 @@ inline fun Engine.onEntityAdded( inline fun Engine.onEntityRemoved( family: Family = anyFamily, priority: Int = 0, - crossinline onRemoved: (entity: Entity) -> Unit + crossinline onRemoved: (entity: Entity) -> Unit, ): EntityRemovalListener { val listener = object : EntityRemovalListener { override fun entityRemoved(entity: Entity) { @@ -109,7 +109,7 @@ inline fun Engine.onEntityRemoved( */ inline fun IteratingSystem.onEntityAdded( priority: Int = 0, - crossinline onAdded: (entity: Entity) -> Unit + crossinline onAdded: (entity: Entity) -> Unit, ): EntityAdditionListener = engine.onEntityAdded(family, priority, onAdded) /** @@ -118,7 +118,7 @@ inline fun IteratingSystem.onEntityAdded( */ inline fun IteratingSystem.onEntityRemoved( priority: Int = 0, - crossinline onRemoved: (entity: Entity) -> Unit + crossinline onRemoved: (entity: Entity) -> Unit, ): EntityRemovalListener = engine.onEntityRemoved(family, priority, onRemoved) /** @@ -127,7 +127,7 @@ inline fun IteratingSystem.onEntityRemoved( */ inline fun IntervalIteratingSystem.onEntityAdded( priority: Int = 0, - crossinline onAdded: (entity: Entity) -> Unit + crossinline onAdded: (entity: Entity) -> Unit, ): EntityAdditionListener = engine.onEntityAdded(family, priority, onAdded) /** @@ -136,7 +136,7 @@ inline fun IntervalIteratingSystem.onEntityAdded( */ inline fun IntervalIteratingSystem.onEntityRemoved( priority: Int = 0, - crossinline onRemoved: (entity: Entity) -> Unit + crossinline onRemoved: (entity: Entity) -> Unit, ): EntityRemovalListener = engine.onEntityRemoved(family, priority, onRemoved) /** @@ -145,7 +145,7 @@ inline fun IntervalIteratingSystem.onEntityRemoved( */ inline fun SortedIteratingSystem.onEntityAdded( priority: Int = 0, - crossinline onAdded: (entity: Entity) -> Unit + crossinline onAdded: (entity: Entity) -> Unit, ): EntityAdditionListener = engine.onEntityAdded(family, priority, onAdded) /** @@ -154,5 +154,5 @@ inline fun SortedIteratingSystem.onEntityAdded( */ inline fun SortedIteratingSystem.onEntityRemoved( priority: Int = 0, - crossinline onRemoved: (entity: Entity) -> Unit + crossinline onRemoved: (entity: Entity) -> Unit, ): EntityRemovalListener = engine.onEntityRemoved(family, priority, onRemoved) diff --git a/ashley/src/main/kotlin/ktx/ashley/mappers.kt b/ashley/src/main/kotlin/ktx/ashley/mappers.kt index cb725939..d2f28839 100644 --- a/ashley/src/main/kotlin/ktx/ashley/mappers.kt +++ b/ashley/src/main/kotlin/ktx/ashley/mappers.kt @@ -38,12 +38,12 @@ abstract class Mapper { val enclosingClass = javaClass.enclosingClass ?: throw GdxRuntimeException( "Classes extending ktx.ashley.Mapper must be nested objects inside component classes. ${javaClass.name} " + - "is a top-level class defined outside of the corresponding com.badlogic.ashley.core.Component." + "is a top-level class defined outside of the corresponding com.badlogic.ashley.core.Component.", ) if (!ClassReflection.isAssignableFrom(Component::class.java, enclosingClass)) { throw GdxRuntimeException( "Classes extending ktx.ashley.Mapper must be nested objects inside component classes. ${javaClass.name} " + - "is defined in ${enclosingClass.name}, which does not implement com.badlogic.ashley.core.Component." + "is defined in ${enclosingClass.name}, which does not implement com.badlogic.ashley.core.Component.", ) } @Suppress("UNCHECKED_CAST") diff --git a/ashley/src/main/kotlin/ktx/ashley/properties.kt b/ashley/src/main/kotlin/ktx/ashley/properties.kt index 0fb36854..d3e8a493 100644 --- a/ashley/src/main/kotlin/ktx/ashley/properties.kt +++ b/ashley/src/main/kotlin/ktx/ashley/properties.kt @@ -47,7 +47,7 @@ inline fun propertyFor(mapper: ComponentMapper = mapp */ class OptionalComponentDelegate( private val mapper: ComponentMapper, - private val componentClass: Class + private val componentClass: Class, ) { operator fun getValue(thisRef: Entity, property: KProperty<*>): T? = if (mapper.has(thisRef)) mapper[thisRef] else null @@ -73,7 +73,7 @@ class OptionalComponentDelegate( * @see OptionalComponentDelegate **/ inline fun optionalPropertyFor( - mapper: ComponentMapper = mapperFor() + mapper: ComponentMapper = mapperFor(), ): OptionalComponentDelegate = OptionalComponentDelegate(mapper, T::class.java) @@ -96,7 +96,7 @@ interface TagDelegate { class ProviderTagDelegate( private val mapper: ComponentMapper, private val componentClass: Class, - private val defaultValueProvider: () -> T + private val defaultValueProvider: () -> T, ) : TagDelegate { override operator fun getValue(thisRef: Entity, property: KProperty<*>): Boolean = mapper.has(thisRef) @@ -119,7 +119,7 @@ class ProviderTagDelegate( class SingletonTagDelegate( private val mapper: ComponentMapper, private val componentClass: Class, - private val defaultValue: T + private val defaultValue: T, ) : TagDelegate { override operator fun getValue(thisRef: Entity, property: KProperty<*>): Boolean = mapper.has(thisRef) @@ -184,7 +184,7 @@ inline fun tagFor(singleton: Boolean = true): TagDelegat "ktx-ashley", "$componentClass does not have a no-argument constructor. " + "tagFor can only be used in read-only mode. Singleton tag delegate cannot be constructed.", - exception + exception, ) } } diff --git a/ashley/src/test/kotlin/ktx/ashley/ComponentMappersSpec.kt b/ashley/src/test/kotlin/ktx/ashley/ComponentMappersSpec.kt index f22f9b40..6a7c0751 100644 --- a/ashley/src/test/kotlin/ktx/ashley/ComponentMappersSpec.kt +++ b/ashley/src/test/kotlin/ktx/ashley/ComponentMappersSpec.kt @@ -13,6 +13,7 @@ import org.jetbrains.spek.api.dsl.it class CustomComponent : Component { companion object : Mapper() } + /** For [Mapper] testing. Must not be enclosed by another class for test purposes. */ class TopLevelMapper : Mapper() diff --git a/assets-async/src/main/kotlin/ktx/assets/async/AssetManager.kt b/assets-async/src/main/kotlin/ktx/assets/async/AssetManager.kt index f581b730..8130ad66 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/AssetManager.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/AssetManager.kt @@ -1,6 +1,7 @@ @file:Suppress("PackageDirectoryMismatch") -// This extension method has to appear in the libGDX package in order to access package-private fields. +// This extension methods have to appear in the libGDX package in order to access package-private fields. + package com.badlogic.gdx.assets /** Attempts to cancel loading of asset identified by [fileName]. For internal use. */ diff --git a/assets-async/src/main/kotlin/ktx/assets/async/AssetManagerWrapper.kt b/assets-async/src/main/kotlin/ktx/assets/async/AssetManagerWrapper.kt index b84c4961..2c0a8be0 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/AssetManagerWrapper.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/AssetManagerWrapper.kt @@ -18,7 +18,7 @@ import com.badlogic.gdx.utils.Array as GdxArray */ @Suppress("DEPRECATION") internal class AssetManagerWrapper( - val assetStorage: AssetStorage + val assetStorage: AssetStorage, ) : AssetManager(assetStorage.fileResolver, false) { private var initiated = false @@ -35,13 +35,13 @@ internal class AssetManagerWrapper( @Deprecated( "This operation is non-blocking. Assets might still be loaded after this call.", - replaceWith = ReplaceWith("AssetStorage.dispose") + replaceWith = ReplaceWith("AssetStorage.dispose"), ) override fun clear() = dispose() @Deprecated( "This operation is non-blocking. Assets might still be loaded after this call.", - replaceWith = ReplaceWith("AssetStorage.dispose") + replaceWith = ReplaceWith("AssetStorage.dispose"), ) override fun dispose() { if (initiated) { @@ -56,7 +56,7 @@ internal class AssetManagerWrapper( @Deprecated( "AssetStorage requires asset class to check if it is loaded.", - replaceWith = ReplaceWith("contains(fileName, type)") + replaceWith = ReplaceWith("contains(fileName, type)"), ) override fun contains(fileName: String): Boolean = try { getIdentifier(fileName) != null @@ -70,7 +70,7 @@ internal class AssetManagerWrapper( @Deprecated( "This operation is non-blocking. Assets might not be available in storage after call.", - replaceWith = ReplaceWith("AssetStorage.add") + replaceWith = ReplaceWith("AssetStorage.add"), ) override fun addAsset(fileName: String, type: Class, asset: T) { logIncompleteSupportWarning("addAsset") @@ -102,7 +102,9 @@ internal class AssetManagerWrapper( return try { assetStorage[identifier] } catch (exception: Throwable) { - if (required) throw MissingDependencyException(identifier, exception) else { + if (required) { + throw MissingDependencyException(identifier, exception) + } else { logWarning("Missing asset requested: $fileName", exception) null } @@ -116,8 +118,11 @@ internal class AssetManagerWrapper( val identifier = getIdentifier(fileName) as Identifier? val asset = identifier?.let { try { assetStorage[it] } catch (exception: Throwable) { null } } if (asset == null) { - if (required) throw MissingDependencyException("Required asset not found: $fileName") - else logWarning("Missing asset requested: $fileName") + if (required) { + throw MissingDependencyException("Required asset not found: $fileName") + } else { + logWarning("Missing asset requested: $fileName") + } } return asset } @@ -130,7 +135,7 @@ internal class AssetManagerWrapper( @Deprecated( "Multiple assets with different types can be listed under the same path.", - replaceWith = ReplaceWith("Nothing") + replaceWith = ReplaceWith("Nothing"), ) override fun getAssetType(fileName: String): Class<*>? { logCollisionWarning("getAssetType", fileName) @@ -164,7 +169,7 @@ internal class AssetManagerWrapper( @Deprecated( "AssetStorage requires asset type to check if it is loaded.", - replaceWith = ReplaceWith("isLoaded(fileName, type)") + replaceWith = ReplaceWith("isLoaded(fileName, type)"), ) override fun isLoaded(fileName: String): Boolean { logCollisionWarning("isLoaded(String)", fileName) @@ -174,7 +179,7 @@ internal class AssetManagerWrapper( @Deprecated( "AssetStorage requires type of asset to unload.", - replaceWith = ReplaceWith("AssetStorage.unload") + replaceWith = ReplaceWith("AssetStorage.unload"), ) override fun unload(fileName: String) { logCollisionWarning("unload", fileName) @@ -197,7 +202,7 @@ internal class AssetManagerWrapper( @Deprecated( "AssetLoader instances can be mutable." + "AssetStorage requires functional providers of loaders rather than singular instances.", - replaceWith = ReplaceWith("AssetStorage.setLoader") + replaceWith = ReplaceWith("AssetStorage.setLoader"), ) override fun ?> setLoader(type: Class, loader: AssetLoader) = setLoader(type, null, loader) @@ -205,12 +210,12 @@ internal class AssetManagerWrapper( @Deprecated( "AssetLoader instances can be mutable." + "AssetStorage requires functional providers of loaders rather than singular instances.", - replaceWith = ReplaceWith("AssetStorage.setLoader") + replaceWith = ReplaceWith("AssetStorage.setLoader"), ) override fun ?> setLoader( type: Class, suffix: String?, - loader: AssetLoader + loader: AssetLoader, ) { logIncompleteSupportWarning("setLoader") assetStorage.setLoader(type, suffix) { @@ -221,18 +226,21 @@ internal class AssetManagerWrapper( @Deprecated( "AssetStorage requires type to find exact dependencies.", - replaceWith = ReplaceWith("AssetStorage.getDependencies") + replaceWith = ReplaceWith("AssetStorage.getDependencies"), ) override fun getDependencies(fileName: String): GdxArray { logCollisionWarning("getDependencies", fileName) val identifier = getIdentifier(fileName) - return if (identifier != null) + return if (identifier != null) { GdxArray(assetStorage.getDependencies(identifier).map { it.path }.toTypedArray()) - else GdxArray.with() + } else { + GdxArray.with() + } } + @Deprecated( "AssetStorage requires type to find reference count.", - replaceWith = ReplaceWith("AssetStorage.getReferenceCount") + replaceWith = ReplaceWith("AssetStorage.getReferenceCount"), ) override fun getReferenceCount(fileName: String): Int { logCollisionWarning("getReferenceCount", fileName) @@ -283,8 +291,11 @@ internal class AssetManagerWrapper( private fun logWarning(warning: String, cause: Throwable? = null) { if (!assetStorage.silenceAssetManagerWarnings) { - if (cause != null) logger.error(warning, cause) - else logger.error(warning) + if (cause != null) { + logger.error(warning, cause) + } else { + logger.error(warning) + } } } @@ -300,7 +311,7 @@ internal class AssetManagerWrapper( logWarning( "AssetManagerWrapper.$method method called by an asset loader might throw an exception " + "if multiple assets from the same path are loaded with different types. " + - "Warning issued for asset loaded from path: $path" + "Warning issued for asset loaded from path: $path", ) } diff --git a/assets-async/src/main/kotlin/ktx/assets/async/LoadingProgress.kt b/assets-async/src/main/kotlin/ktx/assets/async/LoadingProgress.kt index 0e8e6c10..35c8f912 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/LoadingProgress.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/LoadingProgress.kt @@ -31,12 +31,15 @@ class LoadingProgress { /** Total number of scheduled assets. */ val total: Int get() = totalCounter.get() + /** Total number of successfully loaded assets. */ val loaded: Int get() = loadedCounter.get() + /** Total number of assets that failed to load. */ val failed: Int get() = failedCounter.get() + /** Current asset loading percent. Does not take [failed] assets into account. */ val percent: Float get() { @@ -57,6 +60,7 @@ class LoadingProgress { */ val isFinished: Boolean get() = total > 0 && (loadedCounter.get() + failedCounter.get()) == totalCounter.get() + /** True if there are any [failed] assets. */ val isFailed: Boolean get() = failedCounter.get() > 0 diff --git a/assets-async/src/main/kotlin/ktx/assets/async/errors.kt b/assets-async/src/main/kotlin/ktx/assets/async/errors.kt index 57a538e6..9d7035eb 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/errors.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/errors.kt @@ -50,7 +50,7 @@ class AlreadyLoadedAssetException(identifier: Identifier<*>) : class MissingLoaderException(descriptor: AssetDescriptor<*>) : AssetStorageException( message = "No loader available for assets of type: ${descriptor.type} " + - "with path: ${descriptor.fileName}." + "with path: ${descriptor.fileName}.", ) /** @@ -62,7 +62,7 @@ class MissingLoaderException(descriptor: AssetDescriptor<*>) : class InvalidLoaderException(loader: Loader<*>) : AssetStorageException( message = "Invalid loader: $loader. It must extend either " + - "SynchronousAssetLoader or AsynchronousAssetLoader." + "SynchronousAssetLoader or AsynchronousAssetLoader.", ) /** @@ -93,7 +93,7 @@ class AssetLoadingException(message: String, cause: Throwable? = null) : class UnsupportedMethodException(method: String) : AssetStorageException( message = "AssetLoader used unsupported operation of AssetManager wrapper: $method " + - "Please refactor AssetLoader not to call this method on AssetManager." + "Please refactor AssetLoader not to call this method on AssetManager.", ) /** @@ -126,7 +126,7 @@ class MissingDependencyException(message: String, cause: Throwable? = null) : message = "A loader has requested an instance of ${identifier.type} at path ${identifier.path}. " + "This asset was either not listed in dependencies, loaded with exception, is not loaded yet " + "or was unloaded asynchronously.", - cause = cause + cause = cause, ) } @@ -138,5 +138,5 @@ class MissingDependencyException(message: String, cause: Throwable? = null) : class DependencyLoadingException(path: String, dependency: String, cause: Throwable) : AssetStorageException( message = "The asset at path $path cannot be loaded due to the $dependency dependency loading exception.", - cause = cause + cause = cause, ) diff --git a/assets-async/src/main/kotlin/ktx/assets/async/loaders.kt b/assets-async/src/main/kotlin/ktx/assets/async/loaders.kt index bf260f38..66150cb1 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/loaders.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/loaders.kt @@ -123,7 +123,8 @@ private val AssetDescriptor.parameters: AssetLoaderParameters.getDependencies(assetDescriptor: AssetDescriptor<*>): GdxArray> = @Suppress("UNCHECKED_CAST") (this as AssetLoader<*, AssetLoaderParameters<*>>) - .getDependencies(assetDescriptor.fileName, assetDescriptor.file, assetDescriptor.parameters) ?: GdxArray(0) + .getDependencies(assetDescriptor.fileName, assetDescriptor.file, assetDescriptor.parameters) + ?: GdxArray(0) /** * Allows to use [SynchronousAssetLoader.load] method with [AssetDescriptor]. @@ -166,7 +167,7 @@ internal object ManualLoader : AssetLoader(Absolut override fun getDependencies( fileName: String?, file: FileHandle?, - parameter: ManualLoadingParameters? + parameter: ManualLoadingParameters?, ): GdxArray> = emptyDependencies } @@ -175,13 +176,13 @@ internal object ManualLoader : AssetLoader(Absolut * Tested via the [AssetStorage] test suite. */ internal class AssetStoragePolygonRegionLoader( - fileHandleResolver: FileHandleResolver + fileHandleResolver: FileHandleResolver, ) : PolygonRegionLoader(fileHandleResolver) { override fun load( manager: AssetManager, fileName: String, file: FileHandle, - parameter: PolygonRegionParameters? + parameter: PolygonRegionParameters?, ): PolygonRegion { val assetStorage = (manager as AssetManagerWrapper).assetStorage val texturePath = assetStorage.getDependencies(fileName).first().path diff --git a/assets-async/src/main/kotlin/ktx/assets/async/manager.kt b/assets-async/src/main/kotlin/ktx/assets/async/manager.kt index 4554af57..71f447cb 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/manager.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/manager.kt @@ -77,7 +77,7 @@ import com.badlogic.gdx.utils.Array as GdxArray */ class AsyncAssetManager( fileResolver: FileHandleResolver = InternalFileHandleResolver(), - useDefaultLoaders: Boolean = true + useDefaultLoaders: Boolean = true, ) : AssetManager(fileResolver, useDefaultLoaders) { private val callbacks = mutableMapOf>() private val loaderParameterSuppliers = mutableMapOf>, ParameterSupplier<*>>() @@ -127,7 +127,7 @@ class AsyncAssetManager( */ inline fun loadAsync( path: String, - parameters: AssetLoaderParameters? = null + parameters: AssetLoaderParameters? = null, ): Deferred = loadAsync(AssetDescriptor(path, T::class.java, parameters)) /** @@ -151,7 +151,8 @@ class AsyncAssetManager( // Increasing reference count: load(assetDescriptor) // Returning existing callback to the asset: - @Suppress("UNCHECKED_CAST") return callbacks[assetDescriptor.fileName] as Deferred + @Suppress("UNCHECKED_CAST") + return callbacks[assetDescriptor.fileName] as Deferred } val result = CompletableDeferred() @@ -245,14 +246,16 @@ class AsyncAssetManager( Gdx.app?.error( "KTX", "Unable to load $path asset with $dependencies dependencies due to $asset exception", - exception + exception, ) val error = DependencyLoadingException(path, asset.fileName, exception) handled = callback.completeExceptionally(error) || handled cancelLoading(path) cancelLoading(dependencies) true - } else false + } else { + false + } } } // If no callback was completed, the asset was loaded non-asynchronously. diff --git a/assets-async/src/main/kotlin/ktx/assets/async/storage.kt b/assets-async/src/main/kotlin/ktx/assets/async/storage.kt index 907eadae..fb421bfe 100644 --- a/assets-async/src/main/kotlin/ktx/assets/async/storage.kt +++ b/assets-async/src/main/kotlin/ktx/assets/async/storage.kt @@ -146,7 +146,7 @@ class AssetStorage( inline fun getAssetDescriptor( path: String, parameters: AssetLoaderParameters? = null, - fileHandle: FileHandle? = null + fileHandle: FileHandle? = null, ): AssetDescriptor { val descriptor = AssetDescriptor(path.normalizePath(), T::class.java, parameters) descriptor.file = fileHandle ?: fileResolver.resolve(path) @@ -476,7 +476,7 @@ class AssetStorage( reference = CompletableDeferred(asset), dependencies = emptyList(), referenceCount = 1, - loader = ManualLoader as Loader + loader = ManualLoader as Loader, ) registerAssetPath(identifier) progress.registerAddedAsset() @@ -712,7 +712,7 @@ class AssetStorage( descriptor = descriptor, dependencies = dependencies.map { obtainAsset(it) }, loader = loader, - referenceCount = 0 + referenceCount = 0, ) } @@ -743,7 +743,7 @@ class AssetStorage( } private suspend fun loadAsset( - asset: Asset + asset: Asset, ): T { asset.dependencies.forEach { dependency -> withAssetLoadingErrorHandling(asset) { @@ -783,7 +783,7 @@ class AssetStorage( private suspend fun loadWithSynchronousLoader( synchronousLoader: SynchronousLoader, - asset: Asset + asset: Asset, ) { // If any of the isCompleted checks returns true, asset is likely to be unloaded asynchronously. if (asset.reference.isCompleted) { @@ -799,7 +799,7 @@ class AssetStorage( private suspend fun loadWithAsynchronousLoader( asynchronousLoader: AsynchronousLoader, - asset: Asset + asset: Asset, ) { // If any of the isCompleted checks returns true, asset is likely to be unloaded asynchronously. withContext(asyncContext) { @@ -825,13 +825,15 @@ class AssetStorage( try { // Notifying the libGDX loading callback to support AssetManager behavior: asset.descriptor.params?.loadedCallback?.finishedLoading( - asAssetManager, asset.identifier.path, asset.identifier.type + asAssetManager, + asset.identifier.path, + asset.identifier.type, ) } catch (exception: Throwable) { // We are unable to propagate the exception at this point, so we just log it: logger.error( "Exception occurred during execution of loaded callback of asset: ${asset.identifier}", - exception + exception, ) } } else { @@ -962,7 +964,10 @@ class AssetStorage( // Preparing an exception if such a dependency occurs: .map { MissingDependencyException(it.identifier) } // Setting parent asset as exceptionally loaded: - .forEach { exception -> setLoadedExceptionally(asset, exception); exceptions.add(exception) } + .forEach { exception -> + setLoadedExceptionally(asset, exception) + exceptions.add(exception) + } } // Throwing one of the exceptions if any occurs: exceptions.firstOrNull()?.let { throw it } @@ -1240,7 +1245,8 @@ class AssetStorage( lock.withLock { // Creating a safe copy of all assets without unfinished internal completable deferred instances: val assetsCopy = assets.mapValues { - @Suppress("UNCHECKED_CAST") val asset: Asset = it.value as Asset + @Suppress("UNCHECKED_CAST") + val asset: Asset = it.value as Asset val reference: CompletableDeferred = if (asset.reference.isCompleted || asset.reference.isCancelled) { asset.reference } else { @@ -1258,10 +1264,10 @@ class AssetStorage( asset.copy( dependencies = asset.dependencies.mapNotNull { dependency -> assetsCopy[dependency.identifier] - } + }, ) } - } + }, ) } } @@ -1334,7 +1340,7 @@ class AssetStorage( } override fun toString(): String = "AssetStorage(assets=${ - assets.keys.sortedBy { it.path }.joinToString(separator = ", ", prefix = "[", postfix = "]") + assets.keys.sortedBy { it.path }.joinToString(separator = ", ", prefix = "[", postfix = "]") })" } @@ -1354,7 +1360,7 @@ data class Asset( val loader: Loader, /** Control variable. Lists how many times the asset is referenced by other assets as dependency * or by direct manual load requests. */ - @Volatile var referenceCount: Int = 0 + @Volatile var referenceCount: Int = 0, ) /** @@ -1371,7 +1377,7 @@ data class Identifier( /** File path to the asset compatible with the [AssetStorage.fileResolver]. Must be normalized. */ val path: String, /** [Class] of the asset specified during loading. */ - val type: Class + val type: Class, ) { /** * Converts this [Identifier] to an [AssetDescriptor] that describes the asset and its loading data. @@ -1388,7 +1394,7 @@ data class Identifier( */ fun toAssetDescriptor( parameters: AssetLoaderParameters? = null, - fileHandle: FileHandle? = null + fileHandle: FileHandle? = null, ): AssetDescriptor = AssetDescriptor(path, type, parameters).apply { if (fileHandle != null) { @@ -1415,7 +1421,7 @@ fun AssetDescriptor.toIdentifier(): Identifier = Identifier(fileName, * Stores a copy of state of an [AssetStorage]. For debugging purposes. */ data class AssetStorageSnapshot( - val assets: Map, Asset<*>> + val assets: Map, Asset<*>>, ) { /** * Prints [AssetStorage] state for debugging. Lists registered assets with their dependencies @@ -1424,21 +1430,21 @@ data class AssetStorageSnapshot( fun prettyPrint(): String { return """[ ${ - assets.values - .sortedBy { it.identifier.type.name } - .sortedBy { it.identifier.path } - .joinToString(separator = "\n") { - """ "${it.identifier.path}" (${it.identifier.type.name}) { + assets.values + .sortedBy { it.identifier.type.name } + .sortedBy { it.identifier.path } + .joinToString(separator = "\n") { + """ "${it.identifier.path}" (${it.identifier.type.name}) { references=${it.referenceCount}, dependencies=${ - it.dependencies.joinToString(separator = ", ", prefix = "[", postfix = "]") { dependency -> - "\"${dependency.identifier.path}\" (${dependency.identifier.type.name})" - } - }, + it.dependencies.joinToString(separator = ", ", prefix = "[", postfix = "]") { dependency -> + "\"${dependency.identifier.path}\" (${dependency.identifier.type.name})" + } + }, loaded=${it.reference.isCompleted || it.reference.isCancelled}, loader=${it.loader.javaClass.name}, },""" - } + } } ]""" } diff --git a/assets-async/src/test/kotlin/ktx/assets/async/AssetStorageTest.kt b/assets-async/src/test/kotlin/ktx/assets/async/AssetStorageTest.kt index c64f97c6..cb4ac39e 100644 --- a/assets-async/src/test/kotlin/ktx/assets/async/AssetStorageTest.kt +++ b/assets-async/src/test/kotlin/ktx/assets/async/AssetStorageTest.kt @@ -26,12 +26,6 @@ import com.badlogic.gdx.utils.GdxRuntimeException import com.badlogic.gdx.utils.I18NBundle import com.badlogic.gdx.utils.Logger import com.google.common.collect.Sets -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.doAnswer -import com.nhaarman.mockitokotlin2.doThrow -import com.nhaarman.mockitokotlin2.eq -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.matchers.shouldThrow import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Deferred @@ -60,6 +54,12 @@ import org.junit.BeforeClass import org.junit.Rule import org.junit.Test import org.junit.rules.TestName +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify import java.lang.Integer.min import java.util.IdentityHashMap import java.util.concurrent.CompletableFuture @@ -124,7 +124,7 @@ class AssetStorageTest : AsyncTest() { loaded: Int = 0, failed: Int = 0, total: Int = loaded + failed, - warn: Boolean = false + warn: Boolean = false, ) { if (warn) { val progress = storage.progress @@ -137,7 +137,7 @@ class AssetStorageTest : AsyncTest() { loaded | ${"%8d".format(loaded)} | ${progress.loaded} failed | ${"%8d".format(failed)} | ${progress.failed} If this warning is repeated consistently, there might be a related bug in progress reporting. - """.trimIndent() + """.trimIndent(), ) } } else { @@ -294,7 +294,7 @@ class AssetStorageTest : AsyncTest() { assertEquals("Content.", storage.get(path)) assertEquals("Content.", storage.getOrNull(path)) assertEquals("Content.", runBlocking { storage.getAsync(path).await() }) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) assertEquals(storage.getIdentifier(path), storage.getAssetIdentifiers(path).first()) checkProgress(storage, loaded = 1, warn = true) } @@ -314,7 +314,7 @@ class AssetStorageTest : AsyncTest() { assertEquals("Content.", storage[identifier]) assertEquals("Content.", storage.getOrNull(identifier)) assertEquals("Content.", runBlocking { storage.getAsync(identifier).await() }) - assertEquals(emptyList(), storage.getDependencies(identifier)) + assertEquals(emptyList>(), storage.getDependencies(identifier)) assertEquals(identifier, storage.getAssetIdentifiers(identifier.path).first()) checkProgress(storage, loaded = 1, warn = true) } @@ -334,7 +334,7 @@ class AssetStorageTest : AsyncTest() { assertEquals("Content.", storage[descriptor]) assertEquals("Content.", storage.getOrNull(descriptor)) assertEquals("Content.", runBlocking { storage.getAsync(descriptor).await() }) - assertEquals(emptyList(), storage.getDependencies(descriptor)) + assertEquals(emptyList>(), storage.getDependencies(descriptor)) assertEquals(descriptor.toIdentifier(), storage.getAssetIdentifiers(descriptor.fileName).first()) checkProgress(storage, loaded = 1, warn = true) } @@ -585,7 +585,7 @@ class AssetStorageTest : AsyncTest() { assertSame(asset, storage.get(path)) assertEquals( setOf(storage.getIdentifier(path), storage.getIdentifier(path)), - storage.getAssetIdentifiers(path).toSet() + storage.getAssetIdentifiers(path).toSet(), ) storage.dispose() @@ -608,10 +608,10 @@ class AssetStorageTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertEquals(1, storage.getReferenceCount(path)) assertEquals(1, storage.getReferenceCount(path)) - assertNotSame(storage.get(path), storage.get(path)) + assertNotSame(storage.get(path), storage.get(path) as Any) assertEquals( setOf(storage.getIdentifier(path), storage.getIdentifier(path)), - storage.getAssetIdentifiers(path).toSet() + storage.getAssetIdentifiers(path).toSet(), ) checkProgress(storage, loaded = 2, warn = true) @@ -623,7 +623,7 @@ class AssetStorageTest : AsyncTest() { // Given: val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = newAsyncContext(2) + asyncContext = newAsyncContext(2), ) val firstPath = "ktx/assets/async/texture.png" val secondPath = "ktx/assets/async/model.obj" @@ -780,7 +780,7 @@ class AssetStorageTest : AsyncTest() { val path = "ktx/assets/async/skin.json" val dependencies = arrayOf( storage.getIdentifier("ktx/assets/async/skin.atlas"), - storage.getIdentifier("ktx/assets/async/texture.png") + storage.getIdentifier("ktx/assets/async/texture.png"), ) val loadedAssets = IdentityHashMap() @@ -808,7 +808,7 @@ class AssetStorageTest : AsyncTest() { val descriptor = storage.getAssetDescriptor("ktx/assets/async/skin.json") val dependencies = arrayOf( storage.getIdentifier("ktx/assets/async/skin.atlas"), - storage.getIdentifier("ktx/assets/async/texture.png") + storage.getIdentifier("ktx/assets/async/texture.png"), ) val loadedAssets = IdentityHashMap() @@ -838,7 +838,7 @@ class AssetStorageTest : AsyncTest() { val identifier = storage.getIdentifier("ktx/assets/async/skin.json") val dependencies = arrayOf( storage.getIdentifier("ktx/assets/async/skin.atlas"), - storage.getIdentifier("ktx/assets/async/texture.png") + storage.getIdentifier("ktx/assets/async/texture.png"), ) val loadedAssets = IdentityHashMap() @@ -893,7 +893,7 @@ class AssetStorageTest : AsyncTest() { val loaders = newAsyncContext(threads = 4) val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = loaders + asyncContext = loaders, ) val path = "com/badlogic/gdx/utils/lsans-15.fnt" val dependency = "com/badlogic/gdx/utils/lsans-15.png" @@ -942,7 +942,7 @@ class AssetStorageTest : AsyncTest() { val loaders = newAsyncContext(threads = 4) val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = loaders + asyncContext = loaders, ) val path = "ktx/assets/async/string.txt" @@ -978,7 +978,7 @@ class AssetStorageTest : AsyncTest() { val loaders = newAsyncContext(threads = 4) val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = loaders + asyncContext = loaders, ) val path = "com/badlogic/gdx/utils/lsans-15.fnt" val dependency = "com/badlogic/gdx/utils/lsans-15.png" @@ -1006,7 +1006,7 @@ class AssetStorageTest : AsyncTest() { assertEquals(1, storage.getReferenceCount(dependency)) assertSame( storage.get(path).region.texture, - storage.get(dependency) + storage.get(dependency), ) checkProgress(storage, loaded = 2, warn = true) @@ -1020,7 +1020,7 @@ class AssetStorageTest : AsyncTest() { val loaders = newAsyncContext(threads = 4) val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = loaders + asyncContext = loaders, ) val path = "ktx/assets/async/skin.json" val dependency = "ktx/assets/async/skin.atlas" @@ -1065,7 +1065,7 @@ class AssetStorageTest : AsyncTest() { val loaders = newAsyncContext(threads = 4) val storage = AssetStorage( fileResolver = ClasspathFileHandleResolver(), - asyncContext = loaders + asyncContext = loaders, ) val path = "ktx/assets/async/skin.json" val dependency = "ktx/assets/async/skin.atlas" @@ -1324,7 +1324,7 @@ class AssetStorageTest : AsyncTest() { "\\path.txt" to "/path.txt", "dir\\path.txt" to "dir/path.txt", "home\\dir\\path.txt" to "home/dir/path.txt", - "\\home\\dir\\dir\\" to "/home/dir/dir/" + "\\home\\dir\\dir\\" to "/home/dir/dir/", ) paths.forEach { (original, expected) -> @@ -1436,7 +1436,10 @@ class AssetStorageTest : AsyncTest() { val loggingFinished = CompletableFuture() val exception = IllegalStateException("Expected.") val logger = mock { - on(it.error(any(), any())) doAnswer { loggingFinished.complete(true); Unit } + on(it.error(any(), any())) doAnswer { + loggingFinished.complete(true) + Unit + } } storage.logger = logger val parameters = TextAssetLoaderParameters().apply { @@ -1478,7 +1481,7 @@ class AssetStorageTest : AsyncTest() { val path = "ktx/assets/async/skin.json" val dependencies = arrayOf( storage.getIdentifier("ktx/assets/async/skin.atlas"), - storage.getIdentifier("ktx/assets/async/texture.png") + storage.getIdentifier("ktx/assets/async/texture.png"), ) // When: @@ -1508,13 +1511,13 @@ class AssetStorageTest : AsyncTest() { class FakeAsyncLoader( private val onAsync: (assetManager: AssetManager) -> Unit, private val onSync: (asset: FakeAsset) -> Unit, - private val dependencies: GdxArray> = GdxArray.with() + private val dependencies: GdxArray> = GdxArray.with(), ) : AsynchronousAssetLoader(ClasspathFileHandleResolver()) { override fun loadAsync( manager: AssetManager, fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ) { onAsync(manager) } @@ -1523,34 +1526,34 @@ class AssetStorageTest : AsyncTest() { manager: AssetManager, fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ): FakeAsset = FakeAsset().also(onSync) @Suppress("UNCHECKED_CAST") override fun getDependencies( fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ): GdxArray> = dependencies as GdxArray> } /** For loaders testing. */ open class FakeSyncLoader( private val onLoad: (asset: FakeAsset) -> Unit = {}, - private val dependencies: GdxArray> = GdxArray.with() + private val dependencies: GdxArray> = GdxArray.with(), ) : SynchronousAssetLoader(ClasspathFileHandleResolver()) { @Suppress("UNCHECKED_CAST") override fun getDependencies( fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ): GdxArray> = dependencies as GdxArray> override fun load( assetManager: AssetManager, fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ): FakeAsset = FakeAsset().also(onLoad) } @@ -1570,7 +1573,7 @@ class AssetStorageTest : AsyncTest() { onAsync = { isAsyncThread.complete(asyncThread === Thread.currentThread()) isRenderingThreadDuringAsync.complete(KtxAsync.isOnRenderingThread()) - } + }, ) val storage = AssetStorage(asyncContext = asyncContext, useDefaultLoaders = false) storage.setLoader { loader } @@ -1589,7 +1592,7 @@ class AssetStorageTest : AsyncTest() { // Given: val isRenderingThread = CompletableFuture() val loader = FakeSyncLoader( - onLoad = { isRenderingThread.complete(KtxAsync.isOnRenderingThread()) } + onLoad = { isRenderingThread.complete(KtxAsync.isOnRenderingThread()) }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1606,7 +1609,7 @@ class AssetStorageTest : AsyncTest() { // Given: val isRenderingThread = CompletableFuture() val loader = FakeSyncLoader( - onLoad = { isRenderingThread.complete(KtxAsync.isOnRenderingThread()) } + onLoad = { isRenderingThread.complete(KtxAsync.isOnRenderingThread()) }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1625,7 +1628,7 @@ class AssetStorageTest : AsyncTest() { val isRenderingThreadDuringSync = CompletableFuture() val loader = FakeAsyncLoader( onAsync = { isRenderingThreadDuringAsync.complete(KtxAsync.isOnRenderingThread()) }, - onSync = { isRenderingThreadDuringSync.complete(KtxAsync.isOnRenderingThread()) } + onSync = { isRenderingThreadDuringSync.complete(KtxAsync.isOnRenderingThread()) }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1642,7 +1645,7 @@ class AssetStorageTest : AsyncTest() { fun `should handle loading exceptions`() { // Given: val loader = FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1674,7 +1677,7 @@ class AssetStorageTest : AsyncTest() { // Given: val loader = FakeAsyncLoader( onAsync = { throw IllegalStateException("Expected.") }, - onSync = {} + onSync = {}, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1706,7 +1709,7 @@ class AssetStorageTest : AsyncTest() { // Given: val loader = FakeAsyncLoader( onAsync = { }, - onSync = { throw IllegalStateException("Expected.") } + onSync = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1748,7 +1751,7 @@ class AssetStorageTest : AsyncTest() { onLoad = { loadingStarted.complete(true) unloadingFinished.join() - } + }, ) } KtxAsync.launch { @@ -1785,7 +1788,7 @@ class AssetStorageTest : AsyncTest() { storage.setLoader { FakeAsyncLoader( onAsync = { assetManager -> assetManager.containsAsset("Calling an unsupported method.") }, - onSync = {} + onSync = {}, ) } @@ -1812,7 +1815,7 @@ class AssetStorageTest : AsyncTest() { storage.setLoader { FakeAsyncLoader( onAsync = { assetManager -> assetManager.get("Missing", FakeAsset::class.java) }, - onSync = {} + onSync = {}, ) } @@ -1835,7 +1838,7 @@ class AssetStorageTest : AsyncTest() { fun `should not fail to unload asset that was loaded exceptionally`() { // Given: val loader = FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) val path = "fake path" @@ -1869,7 +1872,7 @@ class AssetStorageTest : AsyncTest() { storage.setLoader { FakeSyncLoader( onLoad = {}, - dependencies = GdxArray.with(storage.getAssetDescriptor(dependency)) + dependencies = GdxArray.with(storage.getAssetDescriptor(dependency)), ) } @@ -1892,11 +1895,11 @@ class AssetStorageTest : AsyncTest() { val dependency = "path.async" val loader = FakeSyncLoader( onLoad = {}, - dependencies = GdxArray.with(storage.getAssetDescriptor(dependency)) + dependencies = GdxArray.with(storage.getAssetDescriptor(dependency)), ) val dependencyLoader = FakeAsyncLoader( onAsync = {}, - onSync = { throw IllegalStateException("Expected.") } + onSync = { throw IllegalStateException("Expected.") }, ) storage.setLoader(suffix = ".sync") { loader } storage.setLoader(suffix = ".async") { dependencyLoader } @@ -1935,7 +1938,7 @@ class AssetStorageTest : AsyncTest() { loadingStarted.join() loading.complete(true) loadingFinished.join() - } + }, ) val storage = AssetStorage(useDefaultLoaders = false) val path = "fake.path" @@ -1974,7 +1977,7 @@ class AssetStorageTest : AsyncTest() { storage.setLoader { FakeAsyncLoader( onAsync = { asyncLoadingThreads.add(Thread.currentThread()) }, - onSync = { syncLoadingThreads.add(Thread.currentThread()) } + onSync = { syncLoadingThreads.add(Thread.currentThread()) }, ) } @@ -2012,7 +2015,7 @@ class AssetStorageTest : AsyncTest() { asset = it loadingStarted.complete(true) unloadingFinished.join() - } + }, ) } @@ -2053,7 +2056,7 @@ class AssetStorageTest : AsyncTest() { val path = "fake path" storage.setLoader { FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) } runBlocking { @@ -2081,7 +2084,7 @@ class AssetStorageTest : AsyncTest() { lateinit var identifier: Identifier<*> storage.setLoader { FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) } runBlocking { @@ -2118,7 +2121,7 @@ class AssetStorageTest : AsyncTest() { onLoad = { loadingStarted.complete(true) loadingFinished.join() - } + }, ) } val reference = storage.loadAsync(path) @@ -2149,13 +2152,13 @@ class AssetStorageTest : AsyncTest() { storage.setLoader { object : FakeSyncLoader( dependencies = GdxArray.with(storage.getAssetDescriptor(dependency)), - onLoad = {} + onLoad = {}, ) { override fun load( assetManager: AssetManager, fileName: String?, file: FileHandle?, - parameter: FakeParameters? + parameter: FakeParameters?, ): FakeAsset { assetManager.get(dependency, FakeAsset::class.java) return super.load(assetManager, fileName, file, parameter) @@ -2167,7 +2170,7 @@ class AssetStorageTest : AsyncTest() { onLoad = { loadingStarted.complete(true) loadingFinished.join() - } + }, ) } val reference = storage.loadAsync(dependency) @@ -2226,7 +2229,7 @@ class AssetStorageTest : AsyncTest() { onLoad = { loadingStarted.complete(true) loadingFinished.join() - } + }, ) } val reference = storage.loadAsync(path) @@ -2237,7 +2240,8 @@ class AssetStorageTest : AsyncTest() { // Then: assertFalse(storage.isLoaded(path)) - @Suppress("UNCHECKED_CAST") val asset: Asset = snapshot.assets[id] as Asset + @Suppress("UNCHECKED_CAST") + val asset: Asset = snapshot.assets[id] as Asset assertEquals(id, asset.identifier) assertFalse(asset.reference.isCompleted) assertFalse(asset.reference.isCancelled) @@ -2271,28 +2275,32 @@ class AssetStorageTest : AsyncTest() { fun `should pretty print snapshot`() { // Given: val firstId = Identifier("first.file", String::class.java) - @Suppress("UNCHECKED_CAST") val first = Asset( + + @Suppress("UNCHECKED_CAST") + val first = Asset( descriptor = firstId.toAssetDescriptor(), identifier = firstId, reference = CompletableDeferred("test"), dependencies = listOf(), loader = FakeSyncLoader() as Loader, - referenceCount = 2 + referenceCount = 2, ) val secondId = Identifier("second.file", Int::class.java) - @Suppress("UNCHECKED_CAST") val second = Asset( + + @Suppress("UNCHECKED_CAST") + val second = Asset( descriptor = secondId.toAssetDescriptor(), identifier = secondId, reference = CompletableDeferred(), dependencies = listOf(first), loader = FakeSyncLoader() as Loader, - referenceCount = 1 + referenceCount = 1, ) val snapshot = AssetStorageSnapshot( assets = mapOf( firstId to first, - secondId to second - ) + secondId to second, + ), ) // When: @@ -2314,7 +2322,7 @@ class AssetStorageTest : AsyncTest() { loader=ktx.assets.async.AssetStorageTest${"$"}FakeSyncLoader, }, ]""", - output + output, ) } } diff --git a/assets-async/src/test/kotlin/ktx/assets/async/AsyncAssetManagerTest.kt b/assets-async/src/test/kotlin/ktx/assets/async/AsyncAssetManagerTest.kt index 6f8a039a..4404b32c 100644 --- a/assets-async/src/test/kotlin/ktx/assets/async/AsyncAssetManagerTest.kt +++ b/assets-async/src/test/kotlin/ktx/assets/async/AsyncAssetManagerTest.kt @@ -33,7 +33,6 @@ import com.badlogic.gdx.graphics.glutils.ShaderProgram import com.badlogic.gdx.scenes.scene2d.ui.Skin import com.badlogic.gdx.utils.GdxRuntimeException import com.badlogic.gdx.utils.I18NBundle -import com.nhaarman.mockitokotlin2.mock import io.kotlintest.matchers.shouldThrow import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking @@ -51,6 +50,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.BeforeClass import org.junit.Test +import org.mockito.kotlin.mock import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect as ParticleEffect3D import com.badlogic.gdx.graphics.g3d.particles.ParticleEffectLoader as ParticleEffect3dLoader diff --git a/assets-async/src/test/kotlin/ktx/assets/async/assetStorageLoadingTest.kt b/assets-async/src/test/kotlin/ktx/assets/async/assetStorageLoadingTest.kt index 510aac4a..7b2328a3 100644 --- a/assets-async/src/test/kotlin/ktx/assets/async/assetStorageLoadingTest.kt +++ b/assets-async/src/test/kotlin/ktx/assets/async/assetStorageLoadingTest.kt @@ -22,7 +22,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Button import com.badlogic.gdx.scenes.scene2d.ui.Skin import com.badlogic.gdx.utils.I18NBundle import com.badlogic.gdx.utils.Logger -import com.nhaarman.mockitokotlin2.mock import io.kotlintest.matchers.shouldThrow import kotlinx.coroutines.runBlocking import ktx.assets.TextAssetLoader @@ -40,6 +39,7 @@ import org.junit.BeforeClass import org.junit.Rule import org.junit.Test import org.junit.rules.TestName +import org.mockito.kotlin.mock import java.util.IdentityHashMap import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect as ParticleEffect3D @@ -68,12 +68,12 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { protected abstract fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T private inline fun AssetStorage.testLoad( path: String, - parameters: AssetLoaderParameters? = null + parameters: AssetLoaderParameters? = null, ): T = testLoad(path, T::class.java, parameters) // --- Asset support tests: @@ -92,7 +92,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) } @Test @@ -109,7 +109,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) } @Test @@ -181,7 +181,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -214,7 +214,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -288,7 +288,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -321,7 +321,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -406,7 +406,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertEquals("Value.", asset["key"]) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -439,7 +439,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -554,7 +554,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -587,7 +587,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -620,7 +620,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -655,7 +655,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -690,7 +690,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertSame(asset, storage.get(path)) assertEquals(1, storage.getReferenceCount(path)) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) storage.dispose() } @@ -730,7 +730,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { storage.getIdentifier("ktx/assets/async/model.g3dj"), storage.getIdentifier("ktx/assets/async/model.g3db"), storage.getIdentifier("ktx/assets/async/shader.frag"), - storage.getIdentifier("ktx/assets/async/cubemap.zktx") + storage.getIdentifier("ktx/assets/async/cubemap.zktx"), ) assets.forEach { storage.testLoad(it.path, it.type, parameters = null) @@ -745,7 +745,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertFalse(it in storage) assertFalse(storage.isLoaded(it)) assertEquals(0, storage.getReferenceCount(it)) - assertEquals(emptyList(), storage.getDependencies(it)) + assertEquals(emptyList>(), storage.getDependencies(it)) shouldThrow { storage[it] } @@ -789,7 +789,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertEquals("Content.", storage.get(path)) assertEquals("Content.", storage.getOrNull(path)) assertEquals("Content.", runBlocking { storage.getAsync(path).await() }) - assertEquals(emptyList(), storage.getDependencies(path)) + assertEquals(emptyList>(), storage.getDependencies(path)) checkProgress(storage, loaded = 1, warn = true) } @@ -808,7 +808,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertEquals("Content.", storage[identifier]) assertEquals("Content.", storage.getOrNull(identifier)) assertEquals("Content.", runBlocking { storage.getAsync(identifier).await() }) - assertEquals(emptyList(), storage.getDependencies(identifier)) + assertEquals(emptyList>(), storage.getDependencies(identifier)) checkProgress(storage, loaded = 1, warn = true) } @@ -827,7 +827,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertEquals("Content.", storage[descriptor]) assertEquals("Content.", storage.getOrNull(descriptor)) assertEquals("Content.", runBlocking { storage.getAsync(descriptor).await() }) - assertEquals(emptyList(), storage.getDependencies(descriptor)) + assertEquals(emptyList>(), storage.getDependencies(descriptor)) checkProgress(storage, loaded = 1, warn = true) } @@ -896,7 +896,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { assertTrue(storage.isLoaded(path)) assertEquals(1, storage.getReferenceCount(path)) assertEquals(1, storage.getReferenceCount(path)) - assertNotSame(storage.get(path), storage.get(path)) + assertNotSame(storage.get(path), storage.get(path) as Any) checkProgress(storage, loaded = 2, warn = true) storage.dispose() @@ -943,7 +943,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { val path = "ktx/assets/async/skin.json" val dependencies = arrayOf( storage.getIdentifier("ktx/assets/async/skin.atlas"), - storage.getIdentifier("ktx/assets/async/texture.png") + storage.getIdentifier("ktx/assets/async/texture.png"), ) val loadedAssets = IdentityHashMap() @@ -966,7 +966,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { fun `should handle loading exceptions`() { // Given: val loader = AssetStorageTest.FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -998,7 +998,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { // Given: val loader = AssetStorageTest.FakeAsyncLoader( onAsync = { throw IllegalStateException("Expected.") }, - onSync = {} + onSync = {}, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1030,7 +1030,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { // Given: val loader = AssetStorageTest.FakeAsyncLoader( onAsync = { }, - onSync = { throw IllegalStateException("Expected.") } + onSync = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) storage.setLoader { loader } @@ -1061,7 +1061,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { fun `should not fail to unload asset that was loaded exceptionally`() { // Given: val loader = AssetStorageTest.FakeSyncLoader( - onLoad = { throw IllegalStateException("Expected.") } + onLoad = { throw IllegalStateException("Expected.") }, ) val storage = AssetStorage(useDefaultLoaders = false) val path = "fake path" @@ -1100,7 +1100,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { loaded: Int = 0, failed: Int = 0, total: Int = loaded + failed, - warn: Boolean = false + warn: Boolean = false, ) { if (warn) { val progress = storage.progress @@ -1113,7 +1113,7 @@ abstract class AbstractAssetStorageLoadingTest : AsyncTest() { loaded | ${"%8d".format(loaded)} | ${progress.loaded} failed | ${"%8d".format(failed)} | ${progress.failed} If this warning is repeated consistently, there might be a related bug in progress reporting. - """.trimIndent() + """.trimIndent(), ) } } else { @@ -1166,7 +1166,7 @@ class AssetStorageLoadingTestWithAssetDescriptorLoadAsync : AbstractAssetStorage override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = runBlocking { loadAsync(AssetDescriptor(path, type, parameters)).await() } @@ -1179,7 +1179,7 @@ class AssetStorageLoadingTestWithIdentifierLoadAsync : AbstractAssetStorageLoadi override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = runBlocking { loadAsync(Identifier(path, type), parameters).await() } @@ -1192,7 +1192,7 @@ class AssetStorageLoadingTestWithAssetDescriptorLoad : AbstractAssetStorageLoadi override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = runBlocking { load(AssetDescriptor(path, type, parameters)) } @@ -1205,7 +1205,7 @@ class AssetStorageLoadingTestWithIdentifierLoad : AbstractAssetStorageLoadingTes override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = runBlocking { load(Identifier(path, type), parameters) } @@ -1218,7 +1218,7 @@ class AssetStorageLoadingTestWithAssetDescriptorLoadSync : AbstractAssetStorageL override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = loadSync(AssetDescriptor(path, type, parameters)) } @@ -1229,6 +1229,6 @@ class AssetStorageLoadingTestWithIdentifierLoadSync : AbstractAssetStorageLoadin override fun AssetStorage.testLoad( path: String, type: Class, - parameters: AssetLoaderParameters? + parameters: AssetLoaderParameters?, ): T = loadSync(Identifier(path, type), parameters) } diff --git a/assets-async/src/test/kotlin/ktx/assets/async/loadersTest.kt b/assets-async/src/test/kotlin/ktx/assets/async/loadersTest.kt index b9133b85..66fa9682 100644 --- a/assets-async/src/test/kotlin/ktx/assets/async/loadersTest.kt +++ b/assets-async/src/test/kotlin/ktx/assets/async/loadersTest.kt @@ -6,15 +6,15 @@ import com.badlogic.gdx.assets.AssetManager import com.badlogic.gdx.assets.loaders.AssetLoader import com.badlogic.gdx.assets.loaders.SynchronousAssetLoader import com.badlogic.gdx.files.FileHandle -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.matchers.shouldThrow import org.junit.Assert.assertEquals import org.junit.Assert.assertNotSame import org.junit.Assert.assertNull import org.junit.Assert.assertSame import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify import java.io.File import com.badlogic.gdx.utils.Array as GdxArray @@ -260,7 +260,9 @@ class ManualLoaderTest { fun `should return empty dependencies array with loading parameters`() { // When: val dependencies = ManualLoader.getDependencies( - "file.path", mock(), ManualLoadingParameters() + "file.path", + mock(), + ManualLoadingParameters(), ) // Then: diff --git a/assets/src/main/kotlin/ktx/assets/TextAssetLoader.kt b/assets/src/main/kotlin/ktx/assets/TextAssetLoader.kt index 764095c9..8ba2c4f0 100644 --- a/assets/src/main/kotlin/ktx/assets/TextAssetLoader.kt +++ b/assets/src/main/kotlin/ktx/assets/TextAssetLoader.kt @@ -24,7 +24,7 @@ import ktx.assets.TextAssetLoader.TextAssetLoaderParameters */ class TextAssetLoader( fileResolver: FileHandleResolver = InternalFileHandleResolver(), - private val charset: String = "UTF-8" + private val charset: String = "UTF-8", ) : AsynchronousAssetLoader(fileResolver) { @Volatile var fileContent: String? = null @@ -33,7 +33,7 @@ class TextAssetLoader( assetManager: AssetManager?, fileName: String?, file: FileHandle, - parameter: TextAssetLoaderParameters? + parameter: TextAssetLoaderParameters?, ) { fileContent = file.readString(parameter?.charset ?: charset) } @@ -42,15 +42,14 @@ class TextAssetLoader( assetManager: AssetManager?, fileName: String?, file: FileHandle, - parameter: TextAssetLoaderParameters? + parameter: TextAssetLoaderParameters?, ): String = try { fileContent ?: throw GdxRuntimeException("File $fileName was not loaded asynchronously. Call #loadAsync first.") } finally { fileContent = null } - override fun getDependencies(fileName: String?, file: FileHandle?, parameter: TextAssetLoaderParameters?): - Array>? = null + override fun getDependencies(fileName: String?, file: FileHandle?, parameter: TextAssetLoaderParameters?): Array>? = null /** * Optional parameters used to load text files. diff --git a/assets/src/main/kotlin/ktx/assets/assets.kt b/assets/src/main/kotlin/ktx/assets/assets.kt index bd3a283c..b2f5992f 100644 --- a/assets/src/main/kotlin/ktx/assets/assets.kt +++ b/assets/src/main/kotlin/ktx/assets/assets.kt @@ -113,7 +113,7 @@ class DelayedAsset(val manager: AssetManager, override val assetDescriptor */ inline fun AssetManager.load( path: String, - parameters: AssetLoaderParameters? = null + parameters: AssetLoaderParameters? = null, ): Asset { val assetDescriptor = AssetDescriptor(path, Type::class.java, parameters) this.load(assetDescriptor) @@ -137,7 +137,7 @@ fun AssetManager.loadAsset(assetDescriptor: AssetDescriptor): Asset */ inline fun AssetManager.loadOnDemand( path: String, - parameters: AssetLoaderParameters? = null + parameters: AssetLoaderParameters? = null, ): Asset = DelayedAsset(this, AssetDescriptor(path, Type::class.java, parameters)) /** @@ -154,8 +154,7 @@ fun AssetManager.loadOnDemand(assetDescriptor: AssetDescriptor): As * @param parameters optional loading parameters that might affect how the asset is loaded. * @return typed [AssetDescriptor] instance storing the passed data. */ -inline fun assetDescriptor(path: String, parameters: AssetLoaderParameters? = null): - AssetDescriptor = AssetDescriptor(path, Type::class.java, parameters) +inline fun assetDescriptor(path: String, parameters: AssetLoaderParameters? = null): AssetDescriptor = AssetDescriptor(path, Type::class.java, parameters) /** * Allows to quickly prepare a typed [AssetDescriptor] instance with more Kotlin-friendly syntax. @@ -163,8 +162,7 @@ inline fun assetDescriptor(path: String, parameters: AssetL * @param parameters optional loading parameters that might affect how the asset is loaded. * @return typed [AssetDescriptor] instance storing the passed data. */ -inline fun assetDescriptor(file: FileHandle, parameters: AssetLoaderParameters? = null): - AssetDescriptor = AssetDescriptor(file, Type::class.java, parameters) +inline fun assetDescriptor(file: FileHandle, parameters: AssetLoaderParameters? = null): AssetDescriptor = AssetDescriptor(file, Type::class.java, parameters) /** * @param path path of the asset. Note that the asset must have been already scheduled for loading and fully loaded for @@ -221,7 +219,7 @@ inline fun AssetManager.getLoader(suffix: String? = null): */ inline fun > AssetManager.setLoader( assetLoader: AssetLoader, - suffix: String? = null + suffix: String? = null, ) { setLoader(Type::class.java, suffix, assetLoader) } diff --git a/assets/src/test/kotlin/ktx/assets/AssetsTest.kt b/assets/src/test/kotlin/ktx/assets/AssetsTest.kt index 30114f03..7fd30894 100644 --- a/assets/src/test/kotlin/ktx/assets/AssetsTest.kt +++ b/assets/src/test/kotlin/ktx/assets/AssetsTest.kt @@ -10,9 +10,6 @@ import com.badlogic.gdx.files.FileHandle import com.badlogic.gdx.utils.Array import com.badlogic.gdx.utils.Disposable import com.badlogic.gdx.utils.GdxRuntimeException -import com.nhaarman.mockitokotlin2.doThrow -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import ktx.assets.AssetsTest.MockAssetLoader.MockParameter import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -23,6 +20,9 @@ import org.junit.Assert.assertTrue import org.junit.Assert.fail import org.junit.Before import org.junit.Test +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify /** * Tests asset-related utilities and [AssetManager] extensions. @@ -484,8 +484,9 @@ class AssetsTest { val group = TestAssetGroup() nonmember.load() while (true) { - if (group.update()) + if (group.update()) { break + } } assertTrue(group.isLoaded()) assertTrue(listOf(group.member1, group.member2, group.member3).all { !it.disposed }) @@ -569,15 +570,14 @@ class AssetsTest { manager: AssetManager, fileName: String, file: FileHandle, - parameter: MockParameter? + parameter: MockParameter?, ): MockAsset { val asset = MockAsset(file.path(), additional) additional = null return asset } - override fun getDependencies(fileName: String?, file: FileHandle?, parameter: MockParameter?): - Array>? = null + override fun getDependencies(fileName: String?, file: FileHandle?, parameter: MockParameter?): Array>? = null /** Allows to set [MockAsset.additional] via loader. Tests assets parameters API. */ class MockParameter(val additional: String?) : AssetLoaderParameters() diff --git a/assets/src/test/kotlin/ktx/assets/DisposablesTest.kt b/assets/src/test/kotlin/ktx/assets/DisposablesTest.kt index e8041931..2d06b0ad 100644 --- a/assets/src/test/kotlin/ktx/assets/DisposablesTest.kt +++ b/assets/src/test/kotlin/ktx/assets/DisposablesTest.kt @@ -2,11 +2,6 @@ package ktx.assets import com.badlogic.gdx.utils.Disposable import com.badlogic.gdx.utils.GdxRuntimeException -import com.nhaarman.mockitokotlin2.doThrow -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.verifyZeroInteractions import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -14,6 +9,11 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Assert.fail import org.junit.Test +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions import com.badlogic.gdx.utils.Array as GdxArray /** @@ -93,10 +93,11 @@ class DisposablesTest { @Test fun shouldSafelyDisposeIterablesOfAssets() { val disposables = GdxArray.with( - mock(), null, + mock(), + null, mock { on(it.dispose()) doThrow GdxRuntimeException("Expected.") - } + }, ) disposables.disposeSafely() @@ -117,10 +118,11 @@ class DisposablesTest { fun `should pass exception on dispose of iterables of assets with catch block`() { val exception = GdxRuntimeException("Expected.") val disposables = GdxArray.with( - mock(), null, + mock(), + null, mock { on(it.dispose()) doThrow exception - } + }, ) disposables.dispose { assertSame(exception, it) } @@ -140,10 +142,11 @@ class DisposablesTest { @Test fun `should safely dispose arrays of assets`() { val disposables = arrayOf( - mock(), mock(), + mock(), + mock(), mock { on(it.dispose()) doThrow GdxRuntimeException("Expected.") - } + }, ) disposables.disposeSafely() @@ -164,10 +167,11 @@ class DisposablesTest { fun `should pass exception on dispose of arrays of assets with catch block`() { val exception = GdxRuntimeException("Expected.") val disposables = arrayOf( - mock(), mock(), + mock(), + mock(), mock { on(it.dispose()) doThrow exception - } + }, ) disposables.dispose { assertSame(exception, it) } @@ -181,7 +185,7 @@ class DisposablesTest { exception.ignore() - verifyZeroInteractions(exception) + verifyNoInteractions(exception) } @Test diff --git a/assets/src/test/kotlin/ktx/assets/TextAssetLoaderTest.kt b/assets/src/test/kotlin/ktx/assets/TextAssetLoaderTest.kt index 079f5031..cdfafe72 100644 --- a/assets/src/test/kotlin/ktx/assets/TextAssetLoaderTest.kt +++ b/assets/src/test/kotlin/ktx/assets/TextAssetLoaderTest.kt @@ -3,13 +3,13 @@ package ktx.assets import com.badlogic.gdx.assets.loaders.AssetLoader import com.badlogic.gdx.files.FileHandle import com.badlogic.gdx.utils.GdxRuntimeException -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.matchers.shouldThrow import ktx.assets.TextAssetLoader.TextAssetLoaderParameters import org.junit.Assert import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify /** * Tests [TextAssetLoader]: [AssetLoader] implementation for asynchronous reading of text files. diff --git a/async/README.md b/async/README.md index 5efec86a..e348fc9c 100644 --- a/async/README.md +++ b/async/README.md @@ -1,4 +1,4 @@ -[![Kotlin Coroutines](https://img.shields.io/badge/kotlin--coroutines-1.7.1-orange.svg)](http://kotlinlang.org/) +[![Kotlin Coroutines](https://img.shields.io/badge/kotlin--coroutines-1.7.2-orange.svg)](http://kotlinlang.org/) [![Maven Central](https://img.shields.io/maven-central/v/io.github.libktx/ktx-async.svg)](https://search.maven.org/artifact/io.github.libktx/ktx-async) # KTX: Coroutines support and parallelization utilities diff --git a/async/src/main/kotlin/ktx/async/dispatchers.kt b/async/src/main/kotlin/ktx/async/dispatchers.kt index 1b3341ed..a4d378e2 100644 --- a/async/src/main/kotlin/ktx/async/dispatchers.kt +++ b/async/src/main/kotlin/ktx/async/dispatchers.kt @@ -72,7 +72,7 @@ class DisposableTimerTask(val task: Timer.Task) : DisposableHandle, Disposable { */ class AsyncExecutorDispatcher( val executor: AsyncExecutor, - val threads: Int = -1 + val threads: Int = -1, ) : AbstractKtxDispatcher(), Closeable, Disposable { override fun execute(block: Runnable) { executor.submit(block::run) diff --git a/async/src/main/kotlin/ktx/async/http.kt b/async/src/main/kotlin/ktx/async/http.kt index d1446c5d..18cfaf64 100644 --- a/async/src/main/kotlin/ktx/async/http.kt +++ b/async/src/main/kotlin/ktx/async/http.kt @@ -38,7 +38,7 @@ suspend fun httpRequest( contentStream: Pair? = null, followRedirects: Boolean = true, includeCredentials: Boolean = false, - onCancel: ((HttpRequest) -> Unit)? = null + onCancel: ((HttpRequest) -> Unit)? = null, ): HttpRequestResult = coroutineScope { suspendCancellableCoroutine { continuation -> val httpRequest = HttpRequest(method).apply { @@ -74,10 +74,11 @@ class HttpRequestResult( val method: String, val statusCode: Int, val content: ByteArray, - val headers: Map> + val headers: Map>, ) { /** Returns cached representation of the response stored as a string with default encoding.*/ val contentAsString by lazy { getContentAsString() } + /** Returns a new instance of [ByteArrayInputStream] with raw response bytes each time the getter is invoked. */ val contentAsStream get() = ByteArrayInputStream(content) @@ -131,7 +132,7 @@ fun HttpResponse.toHttpRequestResult(requestData: HttpRequest) = HttpRequestResu method = requestData.method, statusCode = this.status?.statusCode ?: -1, // -1 matches libGDX default behaviour on unknown status. content = this.result ?: ByteArray(0), - headers = this.headers ?: emptyMap() + headers = this.headers ?: emptyMap(), ) /** @@ -143,7 +144,7 @@ fun HttpResponse.toHttpRequestResult(requestData: HttpRequest) = HttpRequestResu internal class KtxHttpResponseListener( val httpRequest: HttpRequest, val continuation: CancellableContinuation, - val onCancel: ((HttpRequest) -> Unit)? + val onCancel: ((HttpRequest) -> Unit)?, ) : HttpResponseListener { @Volatile var completed = false diff --git a/async/src/main/kotlin/ktx/async/timer.kt b/async/src/main/kotlin/ktx/async/timer.kt index e6748f6c..7f8c3414 100644 --- a/async/src/main/kotlin/ktx/async/timer.kt +++ b/async/src/main/kotlin/ktx/async/timer.kt @@ -10,14 +10,14 @@ import com.badlogic.gdx.utils.Timer */ inline fun schedule( delaySeconds: Float, - crossinline task: () -> Unit + crossinline task: () -> Unit, ) = Timer.schedule( object : Timer.Task() { override fun run() { task() } }, - delaySeconds + delaySeconds, )!! /** @@ -33,12 +33,14 @@ inline fun interval( intervalSeconds: Float, delaySeconds: Float = 0f, repeatCount: Int = -2, // Timer.FOREVER - crossinline task: () -> Unit + crossinline task: () -> Unit, ) = Timer.schedule( object : Timer.Task() { override fun run() { task() } }, - delaySeconds, intervalSeconds, repeatCount + delaySeconds, + intervalSeconds, + repeatCount, )!! diff --git a/async/src/test/kotlin/ktx/async/AsyncTest.kt b/async/src/test/kotlin/ktx/async/AsyncTest.kt index 67637b5a..06c5eaff 100644 --- a/async/src/test/kotlin/ktx/async/AsyncTest.kt +++ b/async/src/test/kotlin/ktx/async/AsyncTest.kt @@ -52,7 +52,7 @@ abstract class AsyncTest { executor( Runnable { thread.complete(Thread.currentThread()) - } + }, ) return thread.get(5L, SECONDS) } diff --git a/async/src/test/kotlin/ktx/async/KtxAsyncTest.kt b/async/src/test/kotlin/ktx/async/KtxAsyncTest.kt index e4e55e0b..79d680ca 100644 --- a/async/src/test/kotlin/ktx/async/KtxAsyncTest.kt +++ b/async/src/test/kotlin/ktx/async/KtxAsyncTest.kt @@ -253,6 +253,7 @@ class KtxAsyncTest : AsyncTest() { assertNotSame(getMainRenderingThread(), executionThread.join()) assertFalse(isOnRenderingThread.get()) } + @Test fun `should detect nested non-rendering threads with separate context`() { // Given: diff --git a/async/src/test/kotlin/ktx/async/dispatchersTest.kt b/async/src/test/kotlin/ktx/async/dispatchersTest.kt index d2590b52..33e80a08 100644 --- a/async/src/test/kotlin/ktx/async/dispatchersTest.kt +++ b/async/src/test/kotlin/ktx/async/dispatchersTest.kt @@ -5,7 +5,6 @@ package ktx.async import com.badlogic.gdx.Gdx import com.badlogic.gdx.utils.Timer import com.badlogic.gdx.utils.async.AsyncExecutor -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.mock.mock import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope @@ -20,6 +19,7 @@ import org.junit.Assert.assertNotSame import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.verify import java.util.concurrent.CompletableFuture import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicInteger @@ -98,7 +98,7 @@ abstract class CoroutineDispatcherTest : AsyncTest() { Runnable { executionTime.set(System.currentTimeMillis() - start) }, - GlobalScope.coroutineContext + GlobalScope.coroutineContext, ) // Then: diff --git a/async/src/test/kotlin/ktx/async/httpTest.kt b/async/src/test/kotlin/ktx/async/httpTest.kt index 6adbf44a..a39d2c87 100644 --- a/async/src/test/kotlin/ktx/async/httpTest.kt +++ b/async/src/test/kotlin/ktx/async/httpTest.kt @@ -12,15 +12,6 @@ import com.badlogic.gdx.utils.async.AsyncExecutor import com.github.tomakehurst.wiremock.client.WireMock.aResponse import com.github.tomakehurst.wiremock.client.WireMock.get import com.github.tomakehurst.wiremock.junit.WireMockRule -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.doAnswer -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.spy -import com.nhaarman.mockitokotlin2.times -import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.verifyZeroInteractions import io.kotlintest.matchers.shouldThrow import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.async @@ -34,6 +25,15 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Rule import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions /** * Tests [HttpRequest] API utilities. @@ -154,12 +154,13 @@ class HttpTest { method: String = "GET", content: ByteArray = ByteArray(0), status: Int = 200, - headers: Map> = emptyMap() + headers: Map> = emptyMap(), ) = HttpRequestResult(url, method, status, content, headers) } abstract class AsynchronousHttpRequestsTest(private val configuration: LwjglApplicationConfiguration) : AsyncTest() { private val port = FreePortFinder.findFreeLocalPort() + @get:Rule val wireMock = WireMockRule(port) @@ -172,8 +173,8 @@ abstract class AsynchronousHttpRequestsTest(private val configuration: LwjglAppl aResponse() .withStatus(200) .withHeader("Content-Type", "text/plain") - .withBody("Test HTTP request.") - ) + .withBody("Test HTTP request."), + ), ) // When: @@ -181,7 +182,7 @@ abstract class AsynchronousHttpRequestsTest(private val configuration: LwjglAppl httpRequest( url = "http://localhost:$port/test", method = "GET", - headers = mapOf("Accept" to "text/plain") + headers = mapOf("Accept" to "text/plain"), ) } @@ -223,8 +224,8 @@ abstract class AsynchronousHttpRequestsTest(private val configuration: LwjglAppl .withStatus(200) .withHeader("Content-Type", "text/plain") .withBody("Test HTTP request.") - .withFixedDelay(1000) - ) + .withFixedDelay(1000), + ), ) // When: @@ -249,7 +250,7 @@ abstract class AsynchronousHttpRequestsTest(private val configuration: LwjglAppl class SingleThreadAsynchronousHttpRequestsTest : AsynchronousHttpRequestsTest( LwjglApplicationConfiguration().apply { maxNetThreads = 1 - } + }, ) /** @@ -330,7 +331,7 @@ class KtxHttpResponseListenerTest { // Then: verify(coroutine, times(1)).resumeWith(Result.failure(exception)) - verifyZeroInteractions(onCancel) + verifyNoInteractions(onCancel) } @Test diff --git a/box2d/src/main/kotlin/ktx/box2d/bodies.kt b/box2d/src/main/kotlin/ktx/box2d/bodies.kt index f34f4a38..c4e701d6 100644 --- a/box2d/src/main/kotlin/ktx/box2d/bodies.kt +++ b/box2d/src/main/kotlin/ktx/box2d/bodies.kt @@ -60,7 +60,7 @@ class BodyDefinition : BodyDef() { inline fun BodyDefinition.fixture( shape: ShapeType, disposeOfShape: Boolean = false, - init: FixtureDefinition.(ShapeType) -> Unit = {} + init: FixtureDefinition.(ShapeType) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val fixtureDefinition = FixtureDefinition() @@ -83,7 +83,7 @@ inline fun BodyDefinition.fixture( inline fun BodyDefinition.circle( radius: Float = 1f, position: Vector2 = Vector2.Zero, - init: FixtureDefinition.(CircleShape) -> Unit = {} + init: FixtureDefinition.(CircleShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = CircleShape() @@ -110,7 +110,7 @@ inline fun BodyDefinition.box( height: Float = 1f, position: Vector2 = Vector2.Zero, angle: Float = 0f, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -132,7 +132,7 @@ inline fun BodyDefinition.box( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.polygon( vertices: FloatArray? = null, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -151,7 +151,7 @@ inline fun BodyDefinition.polygon( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.polygon( vararg vertices: Vector2, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -170,7 +170,7 @@ inline fun BodyDefinition.polygon( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.chain( vararg vertices: Vector2, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -191,7 +191,7 @@ inline fun BodyDefinition.chain( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.chain( vertices: FloatArray, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -210,7 +210,7 @@ inline fun BodyDefinition.chain( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.loop( vararg vertices: Vector2, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -232,7 +232,7 @@ inline fun BodyDefinition.loop( @OptIn(ExperimentalContracts::class) inline fun BodyDefinition.loop( vertices: FloatArray, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -253,7 +253,7 @@ inline fun BodyDefinition.loop( inline fun BodyDefinition.edge( from: Vector2, to: Vector2, - init: FixtureDefinition.(EdgeShape) -> Unit = {} + init: FixtureDefinition.(EdgeShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = EdgeShape() @@ -280,7 +280,7 @@ inline fun BodyDefinition.edge( fromY: Float, toX: Float, toY: Float, - init: FixtureDefinition.(EdgeShape) -> Unit = {} + init: FixtureDefinition.(EdgeShape) -> Unit = {}, ): FixtureDefinition { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = EdgeShape() @@ -305,7 +305,7 @@ inline fun BodyDefinition.edge( inline fun Body.fixture( shape: S, disposeOfShape: Boolean = false, - init: FixtureDefinition.(S) -> Unit = {} + init: FixtureDefinition.(S) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val fixtureDefinition = FixtureDefinition() @@ -331,7 +331,7 @@ inline fun Body.fixture( inline fun Body.circle( radius: Float = 1f, position: Vector2 = Vector2.Zero, - init: FixtureDefinition.(CircleShape) -> Unit = {} + init: FixtureDefinition.(CircleShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = CircleShape() @@ -358,7 +358,7 @@ inline fun Body.box( height: Float = 1f, position: Vector2 = Vector2.Zero, angle: Float = 0f, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -380,7 +380,7 @@ inline fun Body.box( @OptIn(ExperimentalContracts::class) inline fun Body.polygon( vertices: FloatArray? = null, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -399,7 +399,7 @@ inline fun Body.polygon( @OptIn(ExperimentalContracts::class) inline fun Body.polygon( vararg vertices: Vector2, - init: FixtureDefinition.(PolygonShape) -> Unit = {} + init: FixtureDefinition.(PolygonShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = PolygonShape() @@ -419,7 +419,7 @@ inline fun Body.polygon( @OptIn(ExperimentalContracts::class) inline fun Body.chain( vararg vertices: Vector2, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -440,7 +440,7 @@ inline fun Body.chain( @OptIn(ExperimentalContracts::class) inline fun Body.chain( vertices: FloatArray, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -459,7 +459,7 @@ inline fun Body.chain( @OptIn(ExperimentalContracts::class) inline fun Body.loop( vararg vertices: Vector2, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -481,7 +481,7 @@ inline fun Body.loop( @OptIn(ExperimentalContracts::class) inline fun Body.loop( vertices: FloatArray, - init: FixtureDefinition.(ChainShape) -> Unit = {} + init: FixtureDefinition.(ChainShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = ChainShape() @@ -502,7 +502,7 @@ inline fun Body.loop( inline fun Body.edge( from: Vector2, to: Vector2, - init: FixtureDefinition.(EdgeShape) -> Unit = {} + init: FixtureDefinition.(EdgeShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = EdgeShape() @@ -529,7 +529,7 @@ inline fun Body.edge( fromY: Float, toX: Float, toY: Float, - init: FixtureDefinition.(EdgeShape) -> Unit = {} + init: FixtureDefinition.(EdgeShape) -> Unit = {}, ): Fixture { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val shape = EdgeShape() diff --git a/box2d/src/main/kotlin/ktx/box2d/joints.kt b/box2d/src/main/kotlin/ktx/box2d/joints.kt index f177f536..c282b33b 100644 --- a/box2d/src/main/kotlin/ktx/box2d/joints.kt +++ b/box2d/src/main/kotlin/ktx/box2d/joints.kt @@ -53,7 +53,7 @@ import kotlin.contracts.contract inline fun Body.jointWith( body: Body, jointDefinition: J, - init: (@Box2DDsl J).() -> Unit = {} + init: (@Box2DDsl J).() -> Unit = {}, ): Joint { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } jointDefinition.bodyA = this @@ -133,7 +133,7 @@ inline fun Body.pulleyJointWith(body: Body, init: (@Box2DDsl PulleyJointDef).() localAnchorA.set(0f, 0f) localAnchorB.set(0f, 0f) }, - init + init, ) as PulleyJoint } @@ -244,7 +244,7 @@ inline fun Body.ropeJointWith(body: Body, init: (@Box2DDsl RopeJointDef).() -> U localAnchorA.set(0f, 0f) localAnchorB.set(0f, 0f) }, - init + init, ) as RopeJoint } diff --git a/box2d/src/main/kotlin/ktx/box2d/worlds.kt b/box2d/src/main/kotlin/ktx/box2d/worlds.kt index 7587afea..0fdad548 100644 --- a/box2d/src/main/kotlin/ktx/box2d/worlds.kt +++ b/box2d/src/main/kotlin/ktx/box2d/worlds.kt @@ -101,7 +101,7 @@ typealias KtxRayCastCallback = ( fixture: Fixture, point: Vector2, normal: Vector2, - fraction: Float + fraction: Float, ) -> Float /** @@ -141,7 +141,7 @@ object RayCast { fun World.rayCast( start: Vector2, end: Vector2, - callback: KtxRayCastCallback + callback: KtxRayCastCallback, ) { rayCast(callback, start, end) } @@ -163,7 +163,7 @@ fun World.rayCast( startY: Float, endX: Float, endY: Float, - callback: KtxRayCastCallback + callback: KtxRayCastCallback, ) { rayCast(callback, startX, startY, endX, endY) } @@ -183,7 +183,7 @@ fun World.query( lowerY: Float, upperX: Float, upperY: Float, - callback: KtxQueryCallback + callback: KtxQueryCallback, ) { QueryAABB(callback, lowerX, lowerY, upperX, upperY) } diff --git a/box2d/src/test/kotlin/ktx/box2d/BodiesTest.kt b/box2d/src/test/kotlin/ktx/box2d/BodiesTest.kt index 2d20a16e..4f02572b 100644 --- a/box2d/src/test/kotlin/ktx/box2d/BodiesTest.kt +++ b/box2d/src/test/kotlin/ktx/box2d/BodiesTest.kt @@ -11,15 +11,15 @@ import com.badlogic.gdx.physics.box2d.Fixture import com.badlogic.gdx.physics.box2d.PolygonShape import com.badlogic.gdx.physics.box2d.Shape import com.badlogic.gdx.physics.box2d.World -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.spy -import com.nhaarman.mockitokotlin2.verify import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.verify // TODO Kotlin Contracts in 1.3 do not support vararg methods such as polygon, chain or loop. // Once that compiler bug is fixed, their tests with init blocks should be extended to test the contracts. @@ -120,7 +120,7 @@ class BodiesTest : Box2DTest() { width = 2f, height = 2f, position = Vector2(1f, 1f), - angle = 90f * MathUtils.degreesToRadians + angle = 90f * MathUtils.degreesToRadians, ) assertTrue(fixtureDef.shape is PolygonShape) @@ -130,9 +130,9 @@ class BodiesTest : Box2DTest() { Vector2(2f, 0f), Vector2(2f, 2f), Vector2(0f, 2f), - Vector2(0f, 0f) + Vector2(0f, 0f), ), - shape + shape, ) assertTrue(fixtureDef in bodyDefinition.fixtureDefinitions) assertTrue(fixtureDef.disposeOfShape) @@ -147,7 +147,7 @@ class BodiesTest : Box2DTest() { width = 2f, height = 2f, position = Vector2(1f, 1f), - angle = 90f * MathUtils.degreesToRadians + angle = 90f * MathUtils.degreesToRadians, ) { density = 0.5f variable = 42 @@ -160,9 +160,9 @@ class BodiesTest : Box2DTest() { Vector2(2f, 0f), Vector2(2f, 2f), Vector2(0f, 2f), - Vector2(0f, 0f) + Vector2(0f, 0f), ), - shape + shape, ) assertEquals(0.5f, fixtureDef.density) assertEquals(0.5f, fixtureDef.density) @@ -335,9 +335,9 @@ class BodiesTest : Box2DTest() { Vector2(1f, 1f), Vector2(2f, 2f), Vector2(1f, 2f), - Vector2(1f, 1f) + Vector2(1f, 1f), ), - shape + shape, ) assertEquals(0.5f, fixtureDef.density) assertTrue(fixtureDef in bodyDefinition.fixtureDefinitions) @@ -360,9 +360,9 @@ class BodiesTest : Box2DTest() { Vector2(1f, 1f), Vector2(2f, 2f), Vector2(1f, 2f), - Vector2(1f, 1f) + Vector2(1f, 1f), ), - shape + shape, ) assertTrue(fixtureDef in bodyDefinition.fixtureDefinitions) assertTrue(fixtureDef.disposeOfShape) @@ -385,9 +385,9 @@ class BodiesTest : Box2DTest() { Vector2(1f, 1f), Vector2(2f, 2f), Vector2(1f, 2f), - Vector2(1f, 1f) + Vector2(1f, 1f), ), - shape + shape, ) assertEquals(0.5f, fixtureDef.density) assertTrue(fixtureDef in bodyDefinition.fixtureDefinitions) @@ -560,7 +560,7 @@ class BodiesTest : Box2DTest() { width = 2f, height = 2f, position = Vector2(1f, 1f), - angle = 90f * MathUtils.degreesToRadians + angle = 90f * MathUtils.degreesToRadians, ) assertTrue(fixture.shape is PolygonShape) @@ -570,9 +570,9 @@ class BodiesTest : Box2DTest() { Vector2(2f, 0f), Vector2(2f, 2f), Vector2(0f, 2f), - Vector2(0f, 0f) + Vector2(0f, 0f), ), - shape + shape, ) assertSame(body, fixture.body) assertTrue(fixture in body.fixtureList) @@ -587,7 +587,7 @@ class BodiesTest : Box2DTest() { width = 2f, height = 2f, position = Vector2(1f, 1f), - angle = 90f * MathUtils.degreesToRadians + angle = 90f * MathUtils.degreesToRadians, ) { density = 0.5f variable = 42 @@ -600,9 +600,9 @@ class BodiesTest : Box2DTest() { Vector2(2f, 0f), Vector2(2f, 2f), Vector2(0f, 2f), - Vector2(0f, 0f) + Vector2(0f, 0f), ), - shape + shape, ) assertEquals(0.5f, fixture.density) assertSame(body, fixture.body) diff --git a/box2d/src/test/kotlin/ktx/box2d/Box2DTest.kt b/box2d/src/test/kotlin/ktx/box2d/Box2DTest.kt index 655ac7c9..d57b26e7 100644 --- a/box2d/src/test/kotlin/ktx/box2d/Box2DTest.kt +++ b/box2d/src/test/kotlin/ktx/box2d/Box2DTest.kt @@ -18,7 +18,8 @@ abstract class Box2DTest { protected fun assertChainEquals(vertices: Array, shape: ChainShape) { assertEquals( "${vertices.size} vertices expected, ${shape.vertexCount} found instead.", - vertices.size, shape.vertexCount + vertices.size, + shape.vertexCount, ) val vertex = Vector2() vertices.forEachIndexed { index, expected -> @@ -32,7 +33,8 @@ abstract class Box2DTest { protected fun assertPolygonEquals(vertices: Array, shape: PolygonShape) { assertEquals( "${vertices.size} vertices expected, ${shape.vertexCount} found instead.", - vertices.size, shape.vertexCount + vertices.size, + shape.vertexCount, ) val vertex = Vector2() vertices.forEachIndexed { index, expected -> diff --git a/box2d/src/test/kotlin/ktx/box2d/WorldsTest.kt b/box2d/src/test/kotlin/ktx/box2d/WorldsTest.kt index b6688f04..d7e8f721 100644 --- a/box2d/src/test/kotlin/ktx/box2d/WorldsTest.kt +++ b/box2d/src/test/kotlin/ktx/box2d/WorldsTest.kt @@ -9,14 +9,14 @@ import com.badlogic.gdx.physics.box2d.CircleShape import com.badlogic.gdx.physics.box2d.EdgeShape import com.badlogic.gdx.physics.box2d.Fixture import com.badlogic.gdx.physics.box2d.World -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.spy -import com.nhaarman.mockitokotlin2.verify import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.verify /** * Tests [World] utilities and extension methods. diff --git a/build.gradle.kts b/build.gradle.kts index aa1c023d..e23d4cc0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,17 +67,17 @@ subprojects { val projectDesc: String by project base { - archivesBaseName = projectName + archivesName.set(projectName) } java { - sourceCompatibility = JavaVersion.VERSION_1_7 // For RoboVM compatibility. + sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } tasks.withType { kotlinOptions { - jvmTarget = "1.8" + jvmTarget = JavaVersion.VERSION_1_8.toString() freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" } } @@ -90,14 +90,14 @@ subprojects { testImplementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion") testImplementation("junit:junit:$junitVersion") testImplementation("io.kotlintest:kotlintest:$kotlinTestVersion") - testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:$kotlinMockitoVersion") + testImplementation("org.mockito.kotlin:mockito-kotlin:$kotlinMockitoVersion") testImplementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") } tasks.register("lint", JavaExec::class) { + mainClass.set("com.pinterest.ktlint.Main") description = "Check Kotlin code style." group = "verification" - main = "com.pinterest.ktlint.Main" classpath = configurations["linter"] args = listOf("src/**/*.kt") @@ -105,9 +105,9 @@ subprojects { } tasks.register("format", JavaExec::class) { + mainClass.set("com.pinterest.ktlint.Main") description = "Fix Kotlin code style." group = "formatting" - main = "com.pinterest.ktlint.Main" classpath = configurations["linter"] args = listOf("-F", "src/**/*.kt") } @@ -250,8 +250,8 @@ nexusStaging { } tasks.register("linterIdeSetup") { + mainClass.set("com.pinterest.ktlint.Main") description = "Apply Kotlin code style changes to IntelliJ formatter." - main = "com.pinterest.ktlint.Main" classpath = configurations["linter"] - args = listOf("applyToIDEAProject", "-y") + args = listOf("applyToIDEAProject") } diff --git a/buildSrc/src/main/kotlin/ktx/Versions.kt b/buildSrc/src/main/kotlin/ktx/Versions.kt index 8f3be7ac..3267b97d 100644 --- a/buildSrc/src/main/kotlin/ktx/Versions.kt +++ b/buildSrc/src/main/kotlin/ktx/Versions.kt @@ -1,18 +1,18 @@ package ktx -const val gdxVersion = "1.11.0" -const val kotlinCoroutinesVersion = "1.7.1" +const val gdxVersion = "1.12.0" +const val kotlinCoroutinesVersion = "1.7.2" const val artemisOdbVersion = "2.3.0" const val ashleyVersion = "1.7.4" const val gdxAiVersion = "1.8.2" -const val visUiVersion = "1.5.1" +const val visUiVersion = "1.5.2" const val spekVersion = "1.1.5" const val kotlinTestVersion = "2.0.7" -const val kotlinMockitoVersion = "2.1.0" +const val kotlinMockitoVersion = "4.1.0" const val assertjVersion = "3.11.1" const val junitVersion = "4.12" const val slf4jVersion = "1.7.26" const val wireMockVersion = "2.24.0" -const val ktlintVersion = "0.42.1" +const val ktlintVersion = "0.50.0" diff --git a/collections/src/main/kotlin/ktx/collections/arrays.kt b/collections/src/main/kotlin/ktx/collections/arrays.kt index b0ab6ec4..9417ea4f 100644 --- a/collections/src/main/kotlin/ktx/collections/arrays.kt +++ b/collections/src/main/kotlin/ktx/collections/arrays.kt @@ -440,7 +440,7 @@ inline fun GdxArray.flatMap(transform: (Type) -> Iterable): G */ fun GdxArray.toGdxSet( initialCapacity: Int = this.size, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxSet { val set = GdxSet(initialCapacity, loadFactor) set.addAll(this) @@ -455,7 +455,7 @@ fun GdxArray.toGdxSet( */ inline fun Iterable.toGdxArray( ordered: Boolean = true, - initialCapacity: Int = defaultArraySize + initialCapacity: Int = defaultArraySize, ): GdxArray { val array = GdxArray(ordered, initialCapacity, Type::class.java) array.addAll(this) @@ -470,7 +470,7 @@ inline fun Iterable.toGdxArray( */ inline fun Array.toGdxArray( ordered: Boolean = true, - initialCapacity: Int = this.size + initialCapacity: Int = this.size, ): GdxArray { val array = GdxArray(ordered, initialCapacity, Type::class.java) array.addAll(this, 0, this.size) diff --git a/collections/src/main/kotlin/ktx/collections/maps.kt b/collections/src/main/kotlin/ktx/collections/maps.kt index af899512..ce790de1 100644 --- a/collections/src/main/kotlin/ktx/collections/maps.kt +++ b/collections/src/main/kotlin/ktx/collections/maps.kt @@ -46,7 +46,7 @@ fun gdxMapOf(initialCapacity: Int = defaultMapSize, loadFactor: Flo inline fun gdxMapOf( vararg keysToValues: Pair, initialCapacity: Int = defaultMapSize, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxMap { val map = GdxMap(initialCapacity, loadFactor) keysToValues.forEach { map[it.first] = it.second } @@ -122,7 +122,7 @@ fun GdxMap.toGdxSet(): ObjectSet = this.keys().toGdxSet() inline fun Iterable.toGdxMap( initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor, - keyProvider: (Value) -> Key + keyProvider: (Value) -> Key, ): GdxMap { val map = GdxMap(initialCapacity, loadFactor) this.forEach { map[keyProvider(it)] = it } @@ -140,7 +140,7 @@ inline fun Iterable.toGdxMap( initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor, valueProvider: (Type) -> Value, - keyProvider: (Type) -> Key + keyProvider: (Type) -> Key, ): GdxMap { val map = GdxMap(initialCapacity, loadFactor) this.forEach { map[keyProvider(it)] = valueProvider(it) } @@ -156,7 +156,7 @@ inline fun Iterable.toGdxMap( inline fun Array.toGdxMap( initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor, - keyProvider: (Value) -> Key + keyProvider: (Value) -> Key, ): GdxMap { val map = GdxMap(initialCapacity, loadFactor) this.forEach { map[keyProvider(it)] = it } @@ -174,7 +174,7 @@ inline fun Array.toGdxMap( initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor, valueProvider: (Type) -> Value, - keyProvider: (Type) -> Key + keyProvider: (Type) -> Key, ): GdxMap { val map = GdxMap(initialCapacity, loadFactor) this.forEach { map[keyProvider(it)] = valueProvider(it) } @@ -186,8 +186,7 @@ inline fun Array.toGdxMap( * @param loadFactor decides under what load the map is resized. * @return a new [IdentityMap], which compares keys by references. */ -fun gdxIdentityMapOf(initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor): - GdxIdentityMap = IdentityMap(initialCapacity, loadFactor) +fun gdxIdentityMapOf(initialCapacity: Int = defaultMapSize, loadFactor: Float = defaultLoadFactor): GdxIdentityMap = IdentityMap(initialCapacity, loadFactor) /** * @param keysToValues will be added to the map. @@ -198,7 +197,7 @@ fun gdxIdentityMapOf(initialCapacity: Int = defaultMapSize, loadFac inline fun gdxIdentityMapOf( vararg keysToValues: Pair, initialCapacity: Int = defaultMapSize, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxIdentityMap { val map = IdentityMap(initialCapacity, loadFactor) keysToValues.forEach { map[it.first] = it.second } diff --git a/collections/src/main/kotlin/ktx/collections/sets.kt b/collections/src/main/kotlin/ktx/collections/sets.kt index 8b3d45ad..3607b09c 100644 --- a/collections/src/main/kotlin/ktx/collections/sets.kt +++ b/collections/src/main/kotlin/ktx/collections/sets.kt @@ -37,7 +37,7 @@ fun gdxSetOf(initialCapacity: Int = defaultSetSize, loadFactor: Float = d inline fun gdxSetOf( vararg elements: Type, initialCapacity: Int = defaultSetSize, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxSet { val set = GdxSet(initialCapacity, loadFactor) set.addAll(*elements) @@ -269,7 +269,7 @@ inline fun GdxSet.flatMap(transform: (Type) -> Iterable): Gdx */ inline fun GdxSet.toGdxArray( ordered: Boolean = true, - initialCapacity: Int = this.size + initialCapacity: Int = this.size, ): GdxArray { val array = com.badlogic.gdx.utils.Array(ordered, initialCapacity, Type::class.java) array.addAll(this) @@ -283,7 +283,7 @@ inline fun GdxSet.toGdxArray( */ fun Iterable.toGdxSet( initialCapacity: Int = defaultSetSize, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxSet { val set = GdxSet(initialCapacity, loadFactor) set.addAll(this) @@ -297,7 +297,7 @@ fun Iterable.toGdxSet( */ fun Array.toGdxSet( initialCapacity: Int = this.size, - loadFactor: Float = defaultLoadFactor + loadFactor: Float = defaultLoadFactor, ): GdxSet = gdxSetOf(*this, initialCapacity = initialCapacity, loadFactor = loadFactor) /** diff --git a/collections/src/test/kotlin/ktx/collections/MapsTest.kt b/collections/src/test/kotlin/ktx/collections/MapsTest.kt index 5fecf81c..6911b5fb 100644 --- a/collections/src/test/kotlin/ktx/collections/MapsTest.kt +++ b/collections/src/test/kotlin/ktx/collections/MapsTest.kt @@ -182,7 +182,7 @@ class MapsTest { fun `should convert Iterables to GdxMap`() { val map = listOf("1", "2", "3").toGdxMap( keyProvider = { it.toInt() }, - valueProvider = { it + it } + valueProvider = { it + it }, ) assertEquals(gdxMapOf(1 to "11", 2 to "22", 3 to "33"), map) @@ -192,7 +192,7 @@ class MapsTest { fun `should convert customized Arrays to GdxMap`() { val map = arrayOf("1", "2", "3").toGdxMap( keyProvider = { it.toInt() }, - valueProvider = { it + it } + valueProvider = { it + it }, ) assertEquals(gdxMapOf(1 to "11", 2 to "22", 3 to "33"), map) diff --git a/freetype-async/src/main/kotlin/ktx/freetype/async/freetypeAsync.kt b/freetype-async/src/main/kotlin/ktx/freetype/async/freetypeAsync.kt index 41c8d63b..46d9ee07 100644 --- a/freetype-async/src/main/kotlin/ktx/freetype/async/freetypeAsync.kt +++ b/freetype-async/src/main/kotlin/ktx/freetype/async/freetypeAsync.kt @@ -28,7 +28,7 @@ import kotlin.contracts.contract */ fun AssetStorage.registerFreeTypeFontLoaders( fileExtensions: Array = arrayOf(".ttf", ".otf"), - replaceDefaultBitmapFontLoader: Boolean = false + replaceDefaultBitmapFontLoader: Boolean = false, ) { setLoader { FreeTypeFontGeneratorLoader(fileResolver) } @@ -57,7 +57,7 @@ fun AssetStorage.registerFreeTypeFontLoaders( @OptIn(ExperimentalContracts::class) suspend inline fun AssetStorage.loadFreeTypeFont( path: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): BitmapFont { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return load(path, parameters = freeTypeFontParameters(path, setup)) @@ -79,7 +79,7 @@ suspend inline fun AssetStorage.loadFreeTypeFont( @OptIn(ExperimentalContracts::class) inline fun AssetStorage.loadFreeTypeFontAsync( path: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): Deferred { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return loadAsync(path, parameters = freeTypeFontParameters(path, setup)) @@ -106,7 +106,7 @@ inline fun AssetStorage.loadFreeTypeFontAsync( @OptIn(ExperimentalContracts::class) inline fun AssetStorage.loadFreeTypeFontSync( path: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): BitmapFont { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return loadSync(path, parameters = freeTypeFontParameters(path, setup)) @@ -121,7 +121,7 @@ inline fun AssetStorage.loadFreeTypeFontSync( @OptIn(ExperimentalContracts::class) inline fun AsyncAssetManager.loadFreeTypeFontAsync( file: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): Deferred { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return loadAsync(file, parameters = freeTypeFontParameters(file, setup)) diff --git a/freetype-async/src/test/kotlin/ktx/freetype/async/freeTypeAsyncTest.kt b/freetype-async/src/test/kotlin/ktx/freetype/async/freeTypeAsyncTest.kt index 906136db..6cdfa534 100644 --- a/freetype-async/src/test/kotlin/ktx/freetype/async/freeTypeAsyncTest.kt +++ b/freetype-async/src/test/kotlin/ktx/freetype/async/freeTypeAsyncTest.kt @@ -7,12 +7,12 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader -import com.nhaarman.mockitokotlin2.mock import io.kotlintest.matchers.shouldThrow import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import ktx.assets.async.AssetStorage import ktx.assets.async.AsyncAssetManager +import ktx.assets.async.Identifier import ktx.assets.async.MissingAssetException import ktx.async.AsyncTest import ktx.async.newAsyncContext @@ -27,6 +27,7 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.BeforeClass import org.junit.Test +import org.mockito.kotlin.mock /** * Tests FreeType font loading utilities for [AssetStorage]. @@ -114,7 +115,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -137,7 +138,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -160,7 +161,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -188,7 +189,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -216,7 +217,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -242,7 +243,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -282,7 +283,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -305,7 +306,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -328,7 +329,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -356,7 +357,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -384,7 +385,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -410,7 +411,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -454,7 +455,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$otfFile.gen")), - storage.getDependencies(otfFile) + storage.getDependencies(otfFile), ) assertTrue(storage.isLoaded("$otfFile.gen")) @@ -481,7 +482,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { // Automatically loads a generator for the font: assertEquals( listOf(storage.getIdentifier("$ttfFile.gen")), - storage.getDependencies(ttfFile) + storage.getDependencies(ttfFile), ) assertTrue(storage.isLoaded("$ttfFile.gen")) @@ -501,7 +502,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { assertTrue(storage.isLoaded(otfFile)) assertSame(asset, storage.get(otfFile)) assertEquals(1, storage.getReferenceCount(otfFile)) - assertEquals(emptyList(), storage.getDependencies(otfFile)) + assertEquals(emptyList>(), storage.getDependencies(otfFile)) storage.dispose() } @@ -519,7 +520,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { assertTrue(storage.isLoaded(ttfFile)) assertSame(asset, storage.get(ttfFile)) assertEquals(1, storage.getReferenceCount(ttfFile)) - assertEquals(emptyList(), storage.getDependencies(ttfFile)) + assertEquals(emptyList>(), storage.getDependencies(ttfFile)) storage.dispose() } @@ -548,7 +549,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { val storage = AssetStorage( useDefaultLoaders = false, fileResolver = ClasspathFileHandleResolver(), - asyncContext = newAsyncContext(threads = 4) + asyncContext = newAsyncContext(threads = 4), ) storage.registerFreeTypeFontLoaders() @@ -559,7 +560,10 @@ class AssetStorageFreeTypeTest : AsyncTest() { val otfGenerator = async { storage.load(otfFile) } val ttfGenerator = async { storage.load(ttfFile) } - otf.await(); ttf.await(); otfGenerator.await(); ttfGenerator.await() + otf.await() + ttf.await() + otfGenerator.await() + ttfGenerator.await() } // Then: @@ -589,7 +593,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { storage.getAssetDescriptor(otfFile, parameters = freeTypeFontParameters(otfFile)), storage.getAssetDescriptor(ttfFile, parameters = freeTypeFontParameters(otfFile)), storage.getAssetDescriptor(otfFile), - storage.getAssetDescriptor(ttfFile) + storage.getAssetDescriptor(ttfFile), ) runBlocking { assets.forEach { @@ -606,7 +610,7 @@ class AssetStorageFreeTypeTest : AsyncTest() { assertFalse(it in storage) assertFalse(storage.isLoaded(it)) assertEquals(0, storage.getReferenceCount(it)) - assertEquals(emptyList(), storage.getDependencies(it)) + assertEquals(emptyList>(), storage.getDependencies(it)) shouldThrow { storage[it] } diff --git a/freetype/src/main/kotlin/ktx/freetype/freetype.kt b/freetype/src/main/kotlin/ktx/freetype/freetype.kt index ec69de0c..453a8e19 100644 --- a/freetype/src/main/kotlin/ktx/freetype/freetype.kt +++ b/freetype/src/main/kotlin/ktx/freetype/freetype.kt @@ -25,7 +25,7 @@ import kotlin.contracts.contract */ fun AssetManager.registerFreeTypeFontLoaders( fileExtensions: Array = arrayOf(".ttf", ".otf"), - replaceDefaultBitmapFontLoader: Boolean = false + replaceDefaultBitmapFontLoader: Boolean = false, ) { val fontGeneratorLoader = FreeTypeFontGeneratorLoader(fileHandleResolver) setLoader(fontGeneratorLoader) @@ -49,7 +49,7 @@ fun AssetManager.registerFreeTypeFontLoaders( @OptIn(ExperimentalContracts::class) inline fun AssetManager.loadFreeTypeFont( file: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): Asset { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return load(file, parameters = freeTypeFontParameters(file, setup)) @@ -63,7 +63,7 @@ inline fun AssetManager.loadFreeTypeFont( @OptIn(ExperimentalContracts::class) inline fun freeTypeFontParameters( file: String, - setup: FreeTypeFontParameter.() -> Unit = {} + setup: FreeTypeFontParameter.() -> Unit = {}, ): FreeTypeFontLoaderParameter { contract { callsInPlace(setup, InvocationKind.EXACTLY_ONCE) } return FreeTypeFontLoaderParameter().apply { diff --git a/freetype/src/test/kotlin/ktx/freetype/FreeTypeTest.kt b/freetype/src/test/kotlin/ktx/freetype/FreeTypeTest.kt index 4465d4c3..c74bb456 100644 --- a/freetype/src/test/kotlin/ktx/freetype/FreeTypeTest.kt +++ b/freetype/src/test/kotlin/ktx/freetype/FreeTypeTest.kt @@ -9,7 +9,6 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGeneratorLoader import com.badlogic.gdx.graphics.g2d.freetype.FreetypeFontLoader -import com.nhaarman.mockitokotlin2.mock import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -18,6 +17,7 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test +import org.mockito.kotlin.mock /** * Tests FreeType font loading utilities. diff --git a/gradle.properties b/gradle.properties index 83084593..d3aa9fed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ libGroup=io.github.libktx -kotlinVersion=1.8.21 +kotlinVersion=1.9.0 -dokkaVersion=1.8.10 +dokkaVersion=1.8.20 junitPlatformVersion=1.2.0 configurationsPluginVersion=3.0.3 diff --git a/graphics/src/main/kotlin/ktx/graphics/camera.kt b/graphics/src/main/kotlin/ktx/graphics/camera.kt index 16128056..745a1ac2 100644 --- a/graphics/src/main/kotlin/ktx/graphics/camera.kt +++ b/graphics/src/main/kotlin/ktx/graphics/camera.kt @@ -22,7 +22,7 @@ fun Camera.center( width: Float = Gdx.graphics.width.toFloat(), height: Float = Gdx.graphics.height.toFloat(), x: Float = 0f, - y: Float = 0f + y: Float = 0f, ) { position.set(x + width / 2f, y + height / 2f, 0f) } @@ -92,11 +92,12 @@ inline fun Camera.update(operation: Camera.() -> Unit) { class LetterboxingViewport( var targetPpiX: Float = defaultTargetPpi, var targetPpiY: Float = defaultTargetPpi, - var aspectRatio: Float = 4f / 3f + var aspectRatio: Float = 4f / 3f, ) : ScalingViewport(Scaling.fit, 0f, 0f) { /** You can directly modify unit per pixel ratio (bypassing PPI check) by modifying this value. * @see updateScale */ var scaleX = 0f + /** You can directly modify unit per pixel ratio (bypassing PPI check) by modifying this value. * @see updateScale */ var scaleY = 0f diff --git a/graphics/src/main/kotlin/ktx/graphics/shapeRenderer.kt b/graphics/src/main/kotlin/ktx/graphics/shapeRenderer.kt index 85a1273c..cc7bd29d 100644 --- a/graphics/src/main/kotlin/ktx/graphics/shapeRenderer.kt +++ b/graphics/src/main/kotlin/ktx/graphics/shapeRenderer.kt @@ -160,7 +160,7 @@ fun ShapeRenderer.triangle( pointC: Vector2, colorA: Color, colorB: Color, - colorC: Color + colorC: Color, ) { triangle(pointA.x, pointA.y, pointB.x, pointB.y, pointC.x, pointC.y, colorA, colorB, colorC) } diff --git a/graphics/src/test/kotlin/ktx/graphics/GraphicsTest.kt b/graphics/src/test/kotlin/ktx/graphics/GraphicsTest.kt index 3a35599a..73b6e6f7 100644 --- a/graphics/src/test/kotlin/ktx/graphics/GraphicsTest.kt +++ b/graphics/src/test/kotlin/ktx/graphics/GraphicsTest.kt @@ -8,15 +8,15 @@ import com.badlogic.gdx.graphics.g2d.Batch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.ShaderProgram import com.badlogic.gdx.math.Matrix4 -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.spy -import com.nhaarman.mockitokotlin2.verify import org.junit.Assert.assertEquals import org.junit.Assert.assertSame import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.verify import java.io.File /** diff --git a/graphics/src/test/kotlin/ktx/graphics/ShapeRendererTest.kt b/graphics/src/test/kotlin/ktx/graphics/ShapeRendererTest.kt index cec35f68..900200f7 100644 --- a/graphics/src/test/kotlin/ktx/graphics/ShapeRendererTest.kt +++ b/graphics/src/test/kotlin/ktx/graphics/ShapeRendererTest.kt @@ -7,12 +7,12 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType import com.badlogic.gdx.math.Matrix4 import com.badlogic.gdx.math.Vector2 import com.badlogic.gdx.math.Vector3 -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.verify import org.junit.Assert.assertEquals import org.junit.Assert.assertSame import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify class ShapeRendererTest { @Test @@ -101,8 +101,11 @@ class ShapeRendererTest { val tested = mock() tested.rectLine( - positionA = Vector2(1f, 2f), positionB = Vector2(3f, 4f), width = 10f, - colorA = Color.BLACK, colorB = Color.WHITE + positionA = Vector2(1f, 2f), + positionB = Vector2(3f, 4f), + width = 10f, + colorA = Color.BLACK, + colorB = Color.WHITE, ) verify(tested).rectLine(1f, 2f, 3f, 4f, 10f, Color.BLACK, Color.WHITE) @@ -176,8 +179,12 @@ class ShapeRendererTest { val tested = mock() tested.triangle( - pointA = Vector2(1f, 2f), pointB = Vector2(3f, 4f), pointC = Vector2(5f, 6f), - colorA = Color.WHITE, colorB = Color.GRAY, colorC = Color.BLACK + pointA = Vector2(1f, 2f), + pointB = Vector2(3f, 4f), + pointC = Vector2(5f, 6f), + colorA = Color.WHITE, + colorB = Color.GRAY, + colorC = Color.BLACK, ) verify(tested).triangle(1f, 2f, 3f, 4f, 5f, 6f, Color.WHITE, Color.GRAY, Color.BLACK) diff --git a/graphics/src/test/kotlin/ktx/graphics/TextUtilitiesTest.kt b/graphics/src/test/kotlin/ktx/graphics/TextUtilitiesTest.kt index 17e8031f..322fef33 100644 --- a/graphics/src/test/kotlin/ktx/graphics/TextUtilitiesTest.kt +++ b/graphics/src/test/kotlin/ktx/graphics/TextUtilitiesTest.kt @@ -3,11 +3,11 @@ package ktx.graphics import com.badlogic.gdx.Gdx import com.badlogic.gdx.backends.lwjgl.LwjglFiles import com.badlogic.gdx.graphics.g2d.BitmapFont -import com.nhaarman.mockitokotlin2.mock import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.mockito.kotlin.mock import com.badlogic.gdx.utils.Array as GdxArray class TextUtilitiesTest { @@ -27,6 +27,7 @@ class TextUtilitiesTest { assertEquals(38.5f, position.x, 0.1f) assertEquals(105.5f, position.y, 0.1f) } + @Test fun `should center text on a rectangle at given position`() { val font = FakeFont() @@ -49,7 +50,7 @@ class TextUtilitiesTest { class FakeFont : BitmapFont( BitmapFontData(Gdx.files.classpath("com/badlogic/gdx/utils/lsans-15.fnt"), true), GdxArray.with(mock()), - true + true, ) { override fun load(data: BitmapFontData?) { // Do nothing. diff --git a/graphics/src/test/kotlin/ktx/graphics/cameraTest.kt b/graphics/src/test/kotlin/ktx/graphics/cameraTest.kt index f0ee6e75..890129ea 100644 --- a/graphics/src/test/kotlin/ktx/graphics/cameraTest.kt +++ b/graphics/src/test/kotlin/ktx/graphics/cameraTest.kt @@ -5,15 +5,15 @@ import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.math.Vector2 import com.badlogic.gdx.math.Vector3 -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.never -import com.nhaarman.mockitokotlin2.spy -import com.nhaarman.mockitokotlin2.times -import com.nhaarman.mockitokotlin2.verify import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.times +import org.mockito.kotlin.verify class CameraUtilitiesTest { @Before diff --git a/i18n/src/test/kotlin/ktx/i18n/I18nTest.kt b/i18n/src/test/kotlin/ktx/i18n/I18nTest.kt index e9e4b9a1..ddfbfa9b 100644 --- a/i18n/src/test/kotlin/ktx/i18n/I18nTest.kt +++ b/i18n/src/test/kotlin/ktx/i18n/I18nTest.kt @@ -82,11 +82,15 @@ keyWithArgument=Value with {0} argument. } /** For [BundleLine] tests. */ + @Suppress("ktlint:standard:enum-entry-name-case") internal enum class BundleEnum : BundleLine { /** "Value." */ key, + /** "Value with {0} argument." */ - keyWithArgument; + keyWithArgument, + + ; override val bundle: I18NBundle get() = i18nBundle!! diff --git a/inject/src/main/kotlin/ktx/inject/inject.kt b/inject/src/main/kotlin/ktx/inject/inject.kt index 8a9998c5..800ec17e 100644 --- a/inject/src/main/kotlin/ktx/inject/inject.kt +++ b/inject/src/main/kotlin/ktx/inject/inject.kt @@ -195,7 +195,7 @@ open class Context : Disposable { */ fun bindSingleton( vararg to: KClass, - singleton: Type + singleton: Type, ) = bind(*to, provider = SingletonProvider(singleton)) /** @@ -207,7 +207,7 @@ open class Context : Disposable { */ inline fun bindSingleton( vararg to: KClass, - provider: () -> Type + provider: () -> Type, ) = bind(*to, provider = SingletonProvider(provider())) /** diff --git a/inject/src/test/kotlin/ktx/inject/injectTest.kt b/inject/src/test/kotlin/ktx/inject/injectTest.kt index 9778d13a..0c0207f2 100644 --- a/inject/src/test/kotlin/ktx/inject/injectTest.kt +++ b/inject/src/test/kotlin/ktx/inject/injectTest.kt @@ -4,12 +4,6 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.utils.Disposable import com.badlogic.gdx.utils.GdxRuntimeException import com.badlogic.gdx.utils.reflect.ReflectionException -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.argThat -import com.nhaarman.mockitokotlin2.doThrow -import com.nhaarman.mockitokotlin2.eq -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.matchers.shouldThrow import ktx.reflect.Reflection import org.junit.After @@ -21,6 +15,12 @@ import org.junit.Assert.assertNull import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.argThat +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify import java.util.Random /** @@ -389,6 +389,7 @@ class ReflectionInjectionTest { class Dependant(val dependency: Dependency) class InvalidClass private constructor() + @Suppress("unused", "UNUSED_PARAMETER") class MultipleConstructors() { constructor(a: String) : this() diff --git a/json/src/test/kotlin/ktx/json/JsonTest.kt b/json/src/test/kotlin/ktx/json/JsonTest.kt index 1f97604a..b14f8fd4 100644 --- a/json/src/test/kotlin/ktx/json/JsonTest.kt +++ b/json/src/test/kotlin/ktx/json/JsonTest.kt @@ -23,14 +23,14 @@ class JsonTest { "int": 10, "bool": true, "str": "Hello world" - }""" + }""", ) // Then: simple shouldEqual Simple( int = 10, bool = true, - str = "Hello world" + str = "Hello world", ) } @@ -49,7 +49,7 @@ class JsonTest { "str": "a" }, "list": [1, 1, 2, 3, 5, 8, 13] - }""" + }""", ) // Then: @@ -58,9 +58,9 @@ class JsonTest { simple = Simple( int = 31, bool = true, - str = "a" + str = "a", ), - list = listOf(1, 1, 2, 3, 5, 8, 13) + list = listOf(1, 1, 2, 3, 5, 8, 13), ) } @@ -77,7 +77,7 @@ class JsonTest { simple shouldEqual Simple( int = 10, bool = true, - str = "test" + str = "test", ) } @@ -160,7 +160,7 @@ class JsonTest { // Expect: json.readValue(JsonReader().parse("str")) shouldEqual "str" json.readArrayValue, Int>(JsonReader().parse("[1,2,3,4,5,6]")) shouldEqual arrayListOf( - 1, 2, 3, 4, 5, 6 + 1, 2, 3, 4, 5, 6, ) } @@ -182,15 +182,15 @@ class JsonTest { "str": "yes" } ] - }""" + }""", ) // Then: container shouldEqual ListContainer( listOf( Simple(bool = true, int = 42), - Simple(str = "yes") - ) + Simple(str = "yes"), + ), ) } @@ -200,7 +200,7 @@ class JsonTest { private data class Simple( var int: Int = 0, var bool: Boolean = false, - var str: String = "" + var str: String = "", ) /** @@ -209,14 +209,14 @@ class JsonTest { private data class Complex( var bool: Boolean = false, var simple: Simple = Simple(), - var list: List = emptyList() + var list: List = emptyList(), ) /** * Serializable class with a list of [Simple] objects. */ private data class ListContainer( - var list: List = emptyList() + var list: List = emptyList(), ) /** @@ -225,7 +225,7 @@ class JsonTest { private data class Custom( var float: Float = 0f, var simple: Simple = Simple(), - var list: List = emptyList() + var list: List = emptyList(), ) : Json.Serializable { override fun read(json: Json, jsonData: JsonValue) { diff --git a/json/src/test/kotlin/ktx/json/serializersTest.kt b/json/src/test/kotlin/ktx/json/serializersTest.kt index a66215e9..85f010a7 100644 --- a/json/src/test/kotlin/ktx/json/serializersTest.kt +++ b/json/src/test/kotlin/ktx/json/serializersTest.kt @@ -2,11 +2,11 @@ package ktx.json import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.JsonValue -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify import io.kotlintest.matchers.shouldEqual import io.kotlintest.matchers.shouldThrow import org.junit.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify /** * Guarantees that [write] method is optional to implement. diff --git a/log/src/main/kotlin/ktx/log/log.kt b/log/src/main/kotlin/ktx/log/log.kt index a8af0a39..7f7521bf 100644 --- a/log/src/main/kotlin/ktx/log/log.kt +++ b/log/src/main/kotlin/ktx/log/log.kt @@ -8,8 +8,10 @@ import kotlin.contracts.contract /** Debug logging tag. */ const val DEBUG = "DEBUG" + /** Info logging tag. */ const val INFO = "INFO" + /** Error logging tag. */ const val ERROR = "ERROR" @@ -112,7 +114,7 @@ open class Logger( open val name: String, open val debugTag: String = DEBUG, open val infoTag: String = INFO, - open val errorTag: String = ERROR + open val errorTag: String = ERROR, ) { // Implementation note: tags and some internal methods are not private as they are referenced by the inlined methods // and can be overridden. diff --git a/math/src/main/kotlin/ktx/math/ImmutableVector2.kt b/math/src/main/kotlin/ktx/math/ImmutableVector2.kt index 852d5bc9..37aa313d 100644 --- a/math/src/main/kotlin/ktx/math/ImmutableVector2.kt +++ b/math/src/main/kotlin/ktx/math/ImmutableVector2.kt @@ -91,7 +91,7 @@ data class ImmutableVector2(val x: Float, val y: Float) : ImmutableVector.random() = MathUtils.random.nextFloat() * (endInclusive - */ fun ClosedRange.randomGaussian(clamped: Boolean = true) = ((MathUtils.random.nextGaussian() / 6.0 + 0.5).toFloat() * (endInclusive - start) + start).let { - if (clamped) + if (clamped) { it.coerceIn(this) - else + } else { it + } } /** @@ -127,8 +128,9 @@ fun ClosedRange.randomTriangular() = MathUtils.randomTriangular(start, en */ fun ClosedRange.randomTriangular(normalizedMode: Float): Float = MathUtils.randomTriangular( - start, endInclusive, - normalizedMode * (endInclusive - start) + start + start, + endInclusive, + normalizedMode * (endInclusive - start) + start, ) /** diff --git a/math/src/main/kotlin/ktx/math/vector3.kt b/math/src/main/kotlin/ktx/math/vector3.kt index 5fb4c231..e8be11c3 100644 --- a/math/src/main/kotlin/ktx/math/vector3.kt +++ b/math/src/main/kotlin/ktx/math/vector3.kt @@ -276,5 +276,5 @@ infix fun Vector3.dot(vector3: Vector3): Float = dot(vector3) infix fun Vector3.x(vector3: Vector3): Vector3 = Vector3( y * vector3.z - z * vector3.y, z * vector3.x - x * vector3.z, - x * vector3.y - y * vector3.x + x * vector3.y - y * vector3.x, ) diff --git a/math/src/test/kotlin/ktx/math/ImmutableVector2Test.kt b/math/src/test/kotlin/ktx/math/ImmutableVector2Test.kt index c95495f9..6cfc8cbe 100644 --- a/math/src/test/kotlin/ktx/math/ImmutableVector2Test.kt +++ b/math/src/test/kotlin/ktx/math/ImmutableVector2Test.kt @@ -36,7 +36,7 @@ class ImmutableVector2Test { // small vectors ImmutableVector2(0.001f, 0f), ImmutableVector2(0f, 0.001f), - ImmutableVector2(0f, -0.001f) + ImmutableVector2(0f, -0.001f), ) /** List scalar values to use in tests */ @@ -53,7 +53,7 @@ class ImmutableVector2Test { Interpolation.pow2In, Interpolation.pow2Out, Interpolation.smooth, - Interpolation.smooth2 + Interpolation.smooth2, ) @Test @@ -555,7 +555,7 @@ class ImmutableVector2Test { preTranslate(-2f, 3f) preRotate(18f) preScale(1.5f, 2f) - } + }, ) transformations.forEach { transformation -> @@ -892,7 +892,7 @@ class ImmutableVector2Test { interpolations.forEach { interpolation -> assertEquals( v1.toMutable().interpolate(v2.toMutable(), alpha, interpolation).toImmutable(), - v1.withInterpolation(v2, alpha, interpolation) + v1.withInterpolation(v2, alpha, interpolation), ) } } diff --git a/math/src/test/kotlin/ktx/math/Matrix3Test.kt b/math/src/test/kotlin/ktx/math/Matrix3Test.kt index 15aa24b3..3f650fe3 100644 --- a/math/src/test/kotlin/ktx/math/Matrix3Test.kt +++ b/math/src/test/kotlin/ktx/math/Matrix3Test.kt @@ -15,14 +15,14 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertMatrixEquals( matrix, 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) } @@ -31,7 +31,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = -matrix @@ -40,13 +40,13 @@ class Matrix3Test { result, -1f, -2f, -3f, -4f, -5f, -6f, - -7f, -8f, -9f + -7f, -8f, -9f, ) assertMatrixEquals( matrix, 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) } @@ -55,7 +55,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 1f, 0f, 1f, 1f, - 0f, 0f, 1f + 0f, 0f, 1f, ) val result = !matrix @@ -64,13 +64,13 @@ class Matrix3Test { result, +1f, -2f, +1f, +0f, +1f, -1f, - +0f, +0f, +1f + +0f, +0f, +1f, ) assertMatrixEquals( matrix, 1f, 2f, 1f, 0f, 1f, 1f, - 0f, 0f, 1f + 0f, 0f, 1f, ) } @@ -79,20 +79,20 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix += mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertMatrixEquals( matrix, +2f, +4f, +6f, +8f, 10f, 12f, - 14f, 16f, 18f + 14f, 16f, 18f, ) } @@ -101,20 +101,20 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix -= mat3( 9f, 8f, 7f, 6f, 5f, 4f, - 3f, 2f, 1f + 3f, 2f, 1f, ) assertMatrixEquals( matrix, -8f, -6f, -4f, -2f, +0f, +2f, - +4f, +6f, +8f + +4f, +6f, +8f, ) } @@ -123,13 +123,13 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix *= mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertMatrixEquals( @@ -144,7 +144,7 @@ class Matrix3Test { 7f * 1f + 8f * 4f + 9f * 7f, 7f * 2f + 8f * 5f + 9f * 8f, - 7f * 3f + 8f * 6f + 9f * 9f + 7f * 3f + 8f * 6f + 9f * 9f, ) } @@ -153,7 +153,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix *= 3f @@ -162,7 +162,7 @@ class Matrix3Test { matrix, 3f, +2f, 3f, 4f, 15f, 6f, - 7f, +8f, 9f + 7f, +8f, 9f, ) } @@ -171,7 +171,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix *= vec2(3f, 2f / 5f) @@ -180,7 +180,7 @@ class Matrix3Test { matrix, 3f, 2f, 3f, 4f, 2f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) } @@ -189,7 +189,7 @@ class Matrix3Test { val matrix = mat3( 3f, 2f, 3f, 4f, 2f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) matrix *= vec3(3f, 2f, 0f) // Last value is ignored. @@ -198,7 +198,7 @@ class Matrix3Test { matrix, 9f, 2f, 3f, 4f, 4f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) } @@ -209,7 +209,7 @@ class Matrix3Test { vector *= mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertEquals(1f * 1f + 2f * 2f + 1f * 3f, vector.x, floatTolerance) @@ -221,20 +221,20 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = matrix + mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertMatrixEquals( result, +2f, +4f, +6f, +8f, 10f, 12f, - 14f, 16f, 18f + 14f, 16f, 18f, ) } @@ -243,20 +243,20 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = matrix - mat3( 9f, 8f, 7f, 6f, 5f, 4f, - 3f, 2f, 1f + 3f, 2f, 1f, ) assertMatrixEquals( result, -8f, -6f, -4f, -2f, +0f, +2f, - +4f, +6f, +8f + +4f, +6f, +8f, ) } @@ -265,13 +265,13 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = matrix * mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) assertMatrixEquals( @@ -286,7 +286,7 @@ class Matrix3Test { 7f * 1f + 8f * 4f + 9f * 7f, 7f * 2f + 8f * 5f + 9f * 8f, - 7f * 3f + 8f * 6f + 9f * 9f + 7f * 3f + 8f * 6f + 9f * 9f, ) } @@ -295,7 +295,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = matrix * 3f @@ -304,7 +304,7 @@ class Matrix3Test { result, 3f, +2f, 3f, 4f, 15f, 6f, - 7f, +8f, 9f + 7f, +8f, 9f, ) } @@ -313,7 +313,7 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val result = matrix * vec2(3f, 2f) @@ -327,13 +327,13 @@ class Matrix3Test { val matrix = mat3( 1f, 2f, 3f, 4f, 5f, 6f, - 7f, 8f, 9f + 7f, 8f, 9f, ) val ( x0y0, x0y1, x0y2, x1y0, x1y1, x1y2, - x2y0, x2y1, x2y2 + x2y0, x2y1, x2y2, ) = matrix assertEquals(1f, x0y0, floatTolerance) @@ -360,7 +360,7 @@ class Matrix3Test { m20: Float, m21: Float, m22: Float, - tolerance: Float = floatTolerance + tolerance: Float = floatTolerance, ) { val values = matrix.`val` assertEquals(m00, values[Matrix3.M00], tolerance) diff --git a/math/src/test/kotlin/ktx/math/Matrix4Test.kt b/math/src/test/kotlin/ktx/math/Matrix4Test.kt index 0fec2e8e..ac4ec6d6 100644 --- a/math/src/test/kotlin/ktx/math/Matrix4Test.kt +++ b/math/src/test/kotlin/ktx/math/Matrix4Test.kt @@ -17,7 +17,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertMatrixEquals( @@ -25,7 +25,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) } @@ -35,7 +35,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = -matrix @@ -45,14 +45,14 @@ class Matrix4Test { -1f, -2f, -3f, -4f, -5f, -6f, -7f, -8f, -9f, -10f, -11f, -12f, - -13f, -14f, -15f, -16f + -13f, -14f, -15f, -16f, ) assertMatrixEquals( matrix, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) } @@ -62,7 +62,7 @@ class Matrix4Test { 1f, 0f, 1f, 0f, 0f, 1f, 0f, 1f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 1f + 0f, 0f, 0f, 1f, ) val result = !matrix @@ -72,14 +72,14 @@ class Matrix4Test { 1f, 0f, -1f, 0f, 0f, 1f, 0f, -1f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 1f + 0f, 0f, 0f, 1f, ) assertMatrixEquals( matrix, 1f, 0f, 1f, 0f, 0f, 1f, 0f, 1f, 0f, 0f, 1f, 0f, - 0f, 0f, 0f, 1f + 0f, 0f, 0f, 1f, ) } @@ -89,14 +89,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) matrix += mat4( +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertMatrixEquals( @@ -104,7 +104,7 @@ class Matrix4Test { +2f, +4f, +6f, +8f, 10f, 12f, 14f, 16f, 18f, 20f, 22f, 24f, - 26f, 28f, 30f, 32f + 26f, 28f, 30f, 32f, ) } @@ -114,14 +114,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) matrix -= mat4( 16f, 15f, 14f, 13f, 12f, 11f, 10f, +9f, +8f, +7f, +6f, +5f, - +4f, +3f, +2f, +1f + +4f, +3f, +2f, +1f, ) assertMatrixEquals( @@ -129,7 +129,7 @@ class Matrix4Test { -15f, -13f, -11f, -9f, -7f, -5.0f, -3f, -1f, 1.0f, 3.0f, 5.0f, 7f, - 9.0f, 11.0f, 13f, 15f + 9.0f, 11.0f, 13f, 15f, ) } @@ -141,14 +141,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) matrix *= mat4( +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertMatrixEquals( @@ -171,7 +171,7 @@ class Matrix4Test { 13f * 1f + 14f * 5f + 15f * 9f + 16f * 13f, 13f * 2f + 14f * 6f + 15f * 10f + 16f * 14f, 13f * 3f + 14f * 7f + 15f * 11f + 16f * 15f, - 13f * 4f + 14f * 8f + 15f * 12f + 16f * 16f + 13f * 4f + 14f * 8f + 15f * 12f + 16f * 16f, ) } @@ -181,7 +181,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) matrix *= 3f @@ -191,7 +191,7 @@ class Matrix4Test { +3f, +2f, +3f, +4f, +5f, 18f, +7f, +8f, +9f, 10f, 33f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) } @@ -201,7 +201,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) matrix *= vec3(3f, 4f, 5f) @@ -211,7 +211,7 @@ class Matrix4Test { +3f, +2f, +3f, +4f, +5f, 24f, +7f, +8f, +9f, 10f, 55f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) } @@ -223,7 +223,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertEquals(1f * 1f + 2f * 2f + 3f * 3f + 1f * 4f, vector.x, floatTolerance) @@ -237,14 +237,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = matrix + mat4( +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertMatrixEquals( @@ -252,7 +252,7 @@ class Matrix4Test { +2f, +4f, +6f, +8f, 10f, 12f, 14f, 16f, 18f, 20f, 22f, 24f, - 26f, 28f, 30f, 32f + 26f, 28f, 30f, 32f, ) } @@ -262,14 +262,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = matrix - mat4( 16f, 15f, 14f, 13f, 12f, 11f, 10f, +9f, +8f, +7f, +6f, +5f, - +4f, +3f, +2f, +1f + +4f, +3f, +2f, +1f, ) assertMatrixEquals( @@ -277,7 +277,7 @@ class Matrix4Test { -15f, -13f, -11f, -9f, -7f, -5.0f, -3f, -1f, 1.0f, 3.0f, 5.0f, 7f, - 9.0f, 11.0f, 13f, 15f + 9.0f, 11.0f, 13f, 15f, ) } @@ -289,14 +289,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = matrix * mat4( +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) assertMatrixEquals( @@ -319,7 +319,7 @@ class Matrix4Test { 13f * 1f + 14f * 5f + 15f * 9f + 16f * 13f, 13f * 2f + 14f * 6f + 15f * 10f + 16f * 14f, 13f * 3f + 14f * 7f + 15f * 11f + 16f * 15f, - 13f * 4f + 14f * 8f + 15f * 12f + 16f * 16f + 13f * 4f + 14f * 8f + 15f * 12f + 16f * 16f, ) } @@ -329,7 +329,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = matrix * 3f @@ -339,7 +339,7 @@ class Matrix4Test { +3f, +2f, +3f, +4f, +5f, 18f, +7f, +8f, +9f, 10f, 33f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) } @@ -349,7 +349,7 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val result = matrix * vec3(3f, 4f, 5f) @@ -365,14 +365,14 @@ class Matrix4Test { +1f, +2f, +3f, +4f, +5f, +6f, +7f, +8f, +9f, 10f, 11f, 12f, - 13f, 14f, 15f, 16f + 13f, 14f, 15f, 16f, ) val ( x0y0, x0y1, x0y2, x0y3, x1y0, x1y1, x1y2, x1y3, x2y0, x2y1, x2y2, x2y3, - x3y0, x3y1, x3y2, x3y3 + x3y0, x3y1, x3y2, x3y3, ) = matrix assertEquals(1f, x0y0, floatTolerance) @@ -414,7 +414,7 @@ class Matrix4Test { m31: Float, m32: Float, m33: Float, - tolerance: Float = floatTolerance + tolerance: Float = floatTolerance, ) { val values = matrix.`val` assertEquals(m00, values[Matrix4.M00], tolerance) diff --git a/math/src/test/kotlin/ktx/math/RangesTest.kt b/math/src/test/kotlin/ktx/math/RangesTest.kt index 5733e570..422a24b3 100644 --- a/math/src/test/kotlin/ktx/math/RangesTest.kt +++ b/math/src/test/kotlin/ktx/math/RangesTest.kt @@ -175,7 +175,7 @@ class RangesTest { val resultsToExpected = listOf( withinRange.toFloat() / count to 0.9973f, withinFourSigma.toFloat() / count to 0.9545f, - withinTwoSigma.toFloat() / count to 0.6827f + withinTwoSigma.toFloat() / count to 0.6827f, ) for ((result, expected) in resultsToExpected) { assertTrue(abs(result - expected) / expected <= allowableError) diff --git a/preferences/src/main/kotlin/ktx/preferences/preferences.kt b/preferences/src/main/kotlin/ktx/preferences/preferences.kt index 7712a39c..1b8228d0 100644 --- a/preferences/src/main/kotlin/ktx/preferences/preferences.kt +++ b/preferences/src/main/kotlin/ktx/preferences/preferences.kt @@ -40,7 +40,7 @@ operator fun Preferences.set(key: String, value: Float): Preferences = putFloat( @Deprecated( message = "Doubles are not supported by libGDX Preferences. " + "Value will be stored as Float instead. Please add explicit cast.", - replaceWith = ReplaceWith("set(key, value.toFloat()") + replaceWith = ReplaceWith("set(key, value.toFloat()"), ) operator fun Preferences.set(key: String, value: Double): Preferences = putFloat(key, value.asFloat()) @@ -109,14 +109,18 @@ fun Preferences.set(pair: Pair): Preferences { * Will return `null` if the key is absent in the [Preferences]. */ inline operator fun Preferences.get(key: String): T? = - if (key !in this) null else when (T::class) { - String::class -> getString(key) as T - Boolean::class -> getBoolean(key) as T - Int::class -> getInteger(key) as T - Float::class -> getFloat(key) as T - Double::class -> getFloat(key).toDouble() as T - Long::class -> getLong(key) as T - else -> Json().fromJson(T::class.java, getString(key)) + if (key !in this) { + null + } else { + when (T::class) { + String::class -> getString(key) as T + Boolean::class -> getBoolean(key) as T + Int::class -> getInteger(key) as T + Float::class -> getFloat(key) as T + Double::class -> getFloat(key).toDouble() as T + Long::class -> getLong(key) as T + else -> Json().fromJson(T::class.java, getString(key)) + } } /** diff --git a/preferences/src/test/kotlin/ktx/preferences/preferencesTest.kt b/preferences/src/test/kotlin/ktx/preferences/preferencesTest.kt index bb884ab7..16aa37b2 100644 --- a/preferences/src/test/kotlin/ktx/preferences/preferencesTest.kt +++ b/preferences/src/test/kotlin/ktx/preferences/preferencesTest.kt @@ -156,7 +156,7 @@ class PreferencesTest { assertEquals(true, preferences.getBoolean("Key6")) assertEquals( JsonSerializable("test"), - Json().fromJson(JsonSerializable::class.java, preferences.getString("Key7")) + Json().fromJson(JsonSerializable::class.java, preferences.getString("Key7")), ) } @@ -172,7 +172,7 @@ class PreferencesTest { assertTrue("Key" in preferences) assertEquals( JsonSerializable("test"), - Json().fromJson(JsonSerializable::class.java, preferences.getString("Key")) + Json().fromJson(JsonSerializable::class.java, preferences.getString("Key")), ) } diff --git a/reflect/src/main/kotlin/ktx/reflect/reflect.kt b/reflect/src/main/kotlin/ktx/reflect/reflect.kt index a4bd4e8e..ba11b15d 100644 --- a/reflect/src/main/kotlin/ktx/reflect/reflect.kt +++ b/reflect/src/main/kotlin/ktx/reflect/reflect.kt @@ -28,7 +28,7 @@ the ForceLinkClasses section in order to work on iOS. Further reading: * https://libgdx.com/wiki/utils/reflection * https://kotlinlang.org/docs/opt-in-requirements.html -""" +""", ) @Retention(AnnotationRetention.BINARY) @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @@ -95,11 +95,13 @@ value class ReflectedClass(val javaClass: Class) { val constructor: Constructor get() { val constructors = ClassReflection.getConstructors(javaClass) - return if (constructors.size == 1) + return if (constructors.size == 1) { constructors.first() - else throw ReflectionException( - "Expected constructors for class $simpleName: 1, found: ${constructors.size}." - ) + } else { + throw ReflectionException( + "Expected constructors for class $simpleName: 1, found: ${constructors.size}.", + ) + } } /** @see Class.getMethods */ diff --git a/reflect/src/test/kotlin/ktx/reflect/reflectTest.kt b/reflect/src/test/kotlin/ktx/reflect/reflectTest.kt index ab65b65b..c4d4f04a 100644 --- a/reflect/src/test/kotlin/ktx/reflect/reflectTest.kt +++ b/reflect/src/test/kotlin/ktx/reflect/reflectTest.kt @@ -15,11 +15,13 @@ import org.junit.Test interface Super open class Tested : Super annotation class Annotation(val value: String) + @Annotation("Test") data class Extension(val a: String, val b: String) : Tested() { @Suppress("unused") fun test(c: String): String = a + b + c } + @Suppress("unused") class Container(@JvmField val field: String) enum class Enum { RED, BLUE } @@ -205,6 +207,7 @@ class ReflectTest { // Then: assertTrue(isArray) } + @Test fun `should check if is a primitive class`() { // Given: @@ -288,6 +291,7 @@ class ReflectTest { // Then: assertTrue(isInterface) } + @Test fun `should check if is an abstract class`() { // Given: diff --git a/scene2d/src/main/kotlin/ktx/scene2d/factory.kt b/scene2d/src/main/kotlin/ktx/scene2d/factory.kt index b8c85d46..9c361392 100644 --- a/scene2d/src/main/kotlin/ktx/scene2d/factory.kt +++ b/scene2d/src/main/kotlin/ktx/scene2d/factory.kt @@ -53,7 +53,7 @@ inline fun RootWidget.window( title: String, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KWindow.() -> Unit = {} + init: KWindow.() -> Unit = {}, ): KWindow { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return storeActor(KWindow(title, skin, style)).apply(init) @@ -73,7 +73,7 @@ inline fun RootWidget.dialog( title: String, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KDialog.() -> Unit = {} + init: KDialog.() -> Unit = {}, ): KDialog { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return storeActor(KDialog(title, skin, style)).apply(init) @@ -110,7 +110,7 @@ inline fun KWidget.actor(actor: A, init: (@Scene2dDsl A).(S) - inline fun KWidget.button( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KButton.(S) -> Unit = {} + init: KButton.(S) -> Unit = {}, ): KButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KButton(skin, style), init) @@ -132,7 +132,7 @@ inline fun KWidget.buttonGroup( minCheckedCount: Int, maxCheckedCount: Int, skin: Skin = Scene2DSkin.defaultSkin, - init: KButtonTable.(S) -> Unit = {} + init: KButtonTable.(S) -> Unit = {}, ): KButtonTable { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KButtonTable(minCheckedCount, maxCheckedCount, skin), init) @@ -153,7 +153,7 @@ inline fun KWidget.checkBox( text: String, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KCheckBox.(S) -> Unit = {} + init: KCheckBox.(S) -> Unit = {}, ): KCheckBox { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KCheckBox(text, skin, style), init) @@ -168,7 +168,7 @@ inline fun KWidget.checkBox( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.container( - init: KContainer.(S) -> Unit = {} + init: KContainer.(S) -> Unit = {}, ): KContainer { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KContainer(), init) @@ -187,7 +187,7 @@ inline fun KWidget.container( @OptIn(ExperimentalContracts::class) inline fun KWidget.container( actor: A, - init: KContainer.(S) -> Unit = {} + init: KContainer.(S) -> Unit = {}, ): KContainer { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KContainer(actor), init) @@ -202,7 +202,7 @@ inline fun KWidget.container( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.horizontalGroup( - init: KHorizontalGroup.(S) -> Unit = {} + init: KHorizontalGroup.(S) -> Unit = {}, ): KHorizontalGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KHorizontalGroup(), init) @@ -221,7 +221,7 @@ inline fun KWidget.horizontalGroup( inline fun KWidget.image( drawableName: String, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl Image).(S) -> Unit = {} + init: (@Scene2dDsl Image).(S) -> Unit = {}, ): Image { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Image(skin.getDrawable(drawableName)), init) @@ -238,7 +238,7 @@ inline fun KWidget.image( @OptIn(ExperimentalContracts::class) inline fun KWidget.image( ninePatch: NinePatch, - init: (@Scene2dDsl Image).(S) -> Unit = {} + init: (@Scene2dDsl Image).(S) -> Unit = {}, ): Image { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Image(ninePatch), init) @@ -255,7 +255,7 @@ inline fun KWidget.image( @OptIn(ExperimentalContracts::class) inline fun KWidget.image( textureRegion: TextureRegion, - init: (@Scene2dDsl Image).(S) -> Unit = {} + init: (@Scene2dDsl Image).(S) -> Unit = {}, ): Image { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Image(textureRegion), init) @@ -272,7 +272,7 @@ inline fun KWidget.image( @OptIn(ExperimentalContracts::class) inline fun KWidget.image( texture: Texture, - init: (@Scene2dDsl Image).(S) -> Unit = {} + init: (@Scene2dDsl Image).(S) -> Unit = {}, ): Image { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Image(texture), init) @@ -289,7 +289,7 @@ inline fun KWidget.image( @OptIn(ExperimentalContracts::class) inline fun KWidget.image( drawable: Drawable, - init: (@Scene2dDsl Image).(S) -> Unit = {} + init: (@Scene2dDsl Image).(S) -> Unit = {}, ): Image { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Image(drawable), init) @@ -308,7 +308,7 @@ inline fun KWidget.image( inline fun KWidget.imageButton( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KImageButton.(S) -> Unit = {} + init: KImageButton.(S) -> Unit = {}, ): KImageButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KImageButton(skin, style), init) @@ -329,7 +329,7 @@ inline fun KWidget.imageTextButton( text: String, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KImageTextButton.(S) -> Unit = {} + init: KImageTextButton.(S) -> Unit = {}, ): KImageTextButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KImageTextButton(text, skin, style), init) @@ -350,7 +350,7 @@ inline fun KWidget.label( text: CharSequence, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl Label).(S) -> Unit = {} + init: (@Scene2dDsl Label).(S) -> Unit = {}, ): Label { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Label(text, skin, style), init) @@ -367,7 +367,7 @@ inline fun KWidget.label( fun KWidget<*>.listWidgetOf( items: GdxArray? = null, style: String = defaultStyle, - skin: Skin = Scene2DSkin.defaultSkin + skin: Skin = Scene2DSkin.defaultSkin, ): KListWidget { val list = KListWidget(skin, style) storeActor(list) @@ -391,7 +391,7 @@ fun KWidget<*>.listWidgetOf( inline fun KWidget<*>.listWidget( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KListWidget.() -> Unit = {} + init: KListWidget.() -> Unit = {}, ): KListWidget { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val list = KListWidget(skin, style) @@ -416,7 +416,7 @@ inline fun KWidget<*>.listWidget( inline fun KWidget.particleEffect( particleEffect: ParticleEffect, resetOnStart: Boolean = true, - init: (@Scene2dDsl ParticleEffectActor).(S) -> Unit = {} + init: (@Scene2dDsl ParticleEffectActor).(S) -> Unit = {}, ): ParticleEffectActor { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(ParticleEffectActor(particleEffect, resetOnStart), init) @@ -444,7 +444,7 @@ inline fun KWidget.progressBar( vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl ProgressBar).(S) -> Unit = {} + init: (@Scene2dDsl ProgressBar).(S) -> Unit = {}, ): ProgressBar { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(ProgressBar(min, max, step, vertical, skin, style), init) @@ -463,7 +463,7 @@ inline fun KWidget.progressBar( inline fun KWidget.scrollPane( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KScrollPane.(S) -> Unit = {} + init: KScrollPane.(S) -> Unit = {}, ): KScrollPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KScrollPane(skin, style), init) @@ -480,7 +480,7 @@ inline fun KWidget.scrollPane( fun KWidget<*>.selectBoxOf( items: GdxArray? = null, style: String = defaultStyle, - skin: Skin = Scene2DSkin.defaultSkin + skin: Skin = Scene2DSkin.defaultSkin, ): KSelectBox { val selectBox = KSelectBox(skin, style) storeActor(selectBox) @@ -504,7 +504,7 @@ fun KWidget<*>.selectBoxOf( inline fun KWidget<*>.selectBox( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KSelectBox.() -> Unit = {} + init: KSelectBox.() -> Unit = {}, ): KSelectBox { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val selectBox = KSelectBox(skin, style) @@ -536,7 +536,7 @@ inline fun KWidget.slider( vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl Slider).(S) -> Unit = {} + init: (@Scene2dDsl Slider).(S) -> Unit = {}, ): Slider { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Slider(min, max, step, vertical, skin, style), init) @@ -558,7 +558,7 @@ inline fun KWidget.splitPane( vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KSplitPane.(S) -> Unit = {} + init: KSplitPane.(S) -> Unit = {}, ): KSplitPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KSplitPane(vertical, skin, style), init) @@ -573,7 +573,7 @@ inline fun KWidget.splitPane( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.stack( - init: KStack.(S) -> Unit = {} + init: KStack.(S) -> Unit = {}, ): KStack { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KStack(), init) @@ -590,7 +590,7 @@ inline fun KWidget.stack( @OptIn(ExperimentalContracts::class) inline fun KWidget.table( skin: Skin = Scene2DSkin.defaultSkin, - init: KTableWidget.(S) -> Unit = {} + init: KTableWidget.(S) -> Unit = {}, ): KTableWidget { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KTableWidget(skin), init) @@ -611,7 +611,7 @@ inline fun KWidget.textArea( text: String = "", style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl TextArea).(S) -> Unit = {} + init: (@Scene2dDsl TextArea).(S) -> Unit = {}, ): TextArea { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(TextArea(text, skin, style), init) @@ -632,7 +632,7 @@ inline fun KWidget.textField( text: String = "", style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl TextField).(S) -> Unit = {} + init: (@Scene2dDsl TextField).(S) -> Unit = {}, ): TextField { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(TextField(text, skin, style), init) @@ -653,7 +653,7 @@ inline fun KWidget.textButton( text: String, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KTextButton.(S) -> Unit = {} + init: KTextButton.(S) -> Unit = {}, ): KTextButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KTextButton(text, skin, style), init) @@ -674,7 +674,7 @@ inline fun KWidget.touchpad( deadzone: Float, style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: (@Scene2dDsl Touchpad).(S) -> Unit = {} + init: (@Scene2dDsl Touchpad).(S) -> Unit = {}, ): Touchpad { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Touchpad(deadzone, skin, style), init) @@ -693,7 +693,7 @@ inline fun KWidget.touchpad( inline fun KWidget.tree( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, - init: KTreeWidget.(S) -> Unit = {} + init: KTreeWidget.(S) -> Unit = {}, ): KTreeWidget { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KTreeWidget(skin, style), init) @@ -708,7 +708,7 @@ inline fun KWidget.tree( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.verticalGroup( - init: KVerticalGroup.(S) -> Unit = {} + init: KVerticalGroup.(S) -> Unit = {}, ): KVerticalGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVerticalGroup(), init) diff --git a/scene2d/src/main/kotlin/ktx/scene2d/skin.kt b/scene2d/src/main/kotlin/ktx/scene2d/skin.kt index 6338aac3..2deed26d 100644 --- a/scene2d/src/main/kotlin/ktx/scene2d/skin.kt +++ b/scene2d/src/main/kotlin/ktx/scene2d/skin.kt @@ -8,10 +8,12 @@ import com.badlogic.gdx.utils.Array as GdxArray * chosen. */ const val defaultStyle = "default" + /** * Style used by default by constructors of some aligned widgets like SplitPane. */ const val defaultVerticalStyle = "default-vertical" + /** * Style used by default by constructors of some aligned widgets like SplitPane. */ @@ -33,7 +35,7 @@ object Scene2DSkin { get() = skin ?: throw IllegalStateException( "Default Scene2D Skin was accessed before initiation. In order to avoid this exception, " + "import ktx.scene2d.Scene2DSkin and override its defaultSkin property. For example: " + - "Scene2DSkin.defaultSkin = Skin(); Scene2DSkin.defaultSkin = VisUI.getSkin()" + "Scene2DSkin.defaultSkin = Skin(); Scene2DSkin.defaultSkin = VisUI.getSkin()", ) set(value) { skin = value diff --git a/scene2d/src/main/kotlin/ktx/scene2d/tooltip.kt b/scene2d/src/main/kotlin/ktx/scene2d/tooltip.kt index 4abb9d10..e3fbdbd8 100644 --- a/scene2d/src/main/kotlin/ktx/scene2d/tooltip.kt +++ b/scene2d/src/main/kotlin/ktx/scene2d/tooltip.kt @@ -29,7 +29,7 @@ inline fun Actor.textTooltip( style: String = defaultStyle, skin: Skin = Scene2DSkin.defaultSkin, tooltipManager: TooltipManager = TooltipManager.getInstance(), - init: (@Scene2dDsl Label).(TextTooltip) -> Unit = {} + init: (@Scene2dDsl Label).(TextTooltip) -> Unit = {}, ): TextTooltip { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val tooltip = TextTooltip(text, tooltipManager, skin, style) @@ -55,7 +55,7 @@ inline fun Actor.tooltip( background: String? = null, skin: Skin = Scene2DSkin.defaultSkin, tooltipManager: TooltipManager = TooltipManager.getInstance(), - init: KTableWidget.(Tooltip) -> Unit = {} + init: KTableWidget.(Tooltip) -> Unit = {}, ): Tooltip { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val table = KTableWidget(skin) diff --git a/scene2d/src/main/kotlin/ktx/scene2d/widget.kt b/scene2d/src/main/kotlin/ktx/scene2d/widget.kt index d09f8279..0cca9a17 100644 --- a/scene2d/src/main/kotlin/ktx/scene2d/widget.kt +++ b/scene2d/src/main/kotlin/ktx/scene2d/widget.kt @@ -170,7 +170,7 @@ interface KTable : KWidget> { spaceLeft: Float? = null, spaceRight: Float? = null, spaceBottom: Float? = null, - row: Boolean = false + row: Boolean = false, ): T { val cell = this.inCell if (grow) cell.grow() @@ -219,7 +219,7 @@ interface KTable : KWidget> { val T.inCell: Cell get() = userObject as? Cell ?: throw IllegalStateException( "This actor has no declared Cell. " + - "Was it properly added to the table? Was its user object cleared?" + "Was it properly added to the table? Was its user object cleared?", ) } @@ -268,7 +268,7 @@ interface KTree : KWidget> { icon: Drawable? = null, expanded: Boolean? = null, selectable: Boolean? = null, - userObject: Any? = null + userObject: Any? = null, ): T { val node = inNode icon?.let { node.icon = icon } @@ -288,7 +288,7 @@ interface KTree : KWidget> { val T.inNode: KNode get() = userObject as? KNode ?: throw IllegalStateException( "This actor has no declared Node. " + - "Was it properly added to the tree? Was its user object cleared?" + "Was it properly added to the tree? Was its user object cleared?", ) } @@ -428,7 +428,7 @@ class KSelectBox(skin: Skin, style: String) : SelectBox(skin, style) { class KSplitPane( vertical: Boolean, skin: Skin, - style: String + style: String, ) : SplitPane(null, null, vertical, skin, style), KGroup { override fun addActor(actor: Actor?) { when (this.children.size) { diff --git a/scene2d/src/test/kotlin/ktx/scene2d/StageWidgetTest.kt b/scene2d/src/test/kotlin/ktx/scene2d/StageWidgetTest.kt index d15d487d..a80a40af 100644 --- a/scene2d/src/test/kotlin/ktx/scene2d/StageWidgetTest.kt +++ b/scene2d/src/test/kotlin/ktx/scene2d/StageWidgetTest.kt @@ -7,12 +7,12 @@ import com.badlogic.gdx.scenes.scene2d.ui.Dialog import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Window -import com.nhaarman.mockitokotlin2.mock import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.mock class StageWidgetTest : ApplicationTest() { @Test diff --git a/scene2d/src/test/kotlin/ktx/scene2d/factoryTest.kt b/scene2d/src/test/kotlin/ktx/scene2d/factoryTest.kt index 32ab415f..afd74a92 100644 --- a/scene2d/src/test/kotlin/ktx/scene2d/factoryTest.kt +++ b/scene2d/src/test/kotlin/ktx/scene2d/factoryTest.kt @@ -6,12 +6,12 @@ import com.badlogic.gdx.scenes.scene2d.ui.Cell import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Tree.Node import com.kotcrab.vis.ui.VisUI -import com.nhaarman.mockitokotlin2.mock import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Test +import org.mockito.kotlin.mock import com.badlogic.gdx.utils.Array as GdxArray /** @@ -112,7 +112,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { checkBox("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -126,7 +126,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { image(drawableName = "button") }, validate = { assertEquals(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -143,7 +143,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { image(VisUI.getSkin().getDrawable("button")) }, validate = { Assert.assertSame(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -154,7 +154,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { imageTextButton("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -162,7 +162,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { label("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -173,7 +173,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { listWidgetOf(GdxArray.with("one", "two", "three")) }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -183,7 +183,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -197,7 +197,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { selectBoxOf(GdxArray.with("one", "two", "three")) }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -207,7 +207,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -224,7 +224,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { textArea("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -232,7 +232,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { textButton("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -240,7 +240,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { textField("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -305,7 +305,8 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertTrue(child in parent.children) assertEquals( "For the purpose of this test, the actor must include 'color = Color.BLUE' in its init block.", - Color.BLUE, child!!.color + Color.BLUE, + child!!.color, ) validate(child) // Performing widget-specific validation. } @@ -333,7 +334,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -354,7 +355,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertTrue(it.actor is Label) val label = it.actor as Label assertEquals("Test.", label.text.toString()) - } + }, ) @Test @@ -373,7 +374,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -392,7 +393,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -404,7 +405,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -420,7 +421,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -432,7 +433,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertTrue(it.isResetOnStart) - } + }, ) @Test @@ -446,7 +447,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -469,7 +470,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -483,7 +484,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -509,7 +510,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(Scene2DSkin.defaultSkin, it.skin) - } + }, ) @Test @@ -521,7 +522,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -533,7 +534,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -545,7 +546,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test diff --git a/scene2d/src/test/kotlin/ktx/scene2d/testUtilities.kt b/scene2d/src/test/kotlin/ktx/scene2d/testUtilities.kt index 723d40ce..2db08642 100644 --- a/scene2d/src/test/kotlin/ktx/scene2d/testUtilities.kt +++ b/scene2d/src/test/kotlin/ktx/scene2d/testUtilities.kt @@ -4,10 +4,10 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.backends.lwjgl.LwjglFiles import com.badlogic.gdx.backends.lwjgl.LwjglNativesLoader import com.kotcrab.vis.ui.VisUI -import com.nhaarman.mockitokotlin2.mock import org.junit.AfterClass import org.junit.Before import org.junit.BeforeClass +import org.mockito.kotlin.mock /** * Utility value for numeric tests. diff --git a/scene2d/src/test/kotlin/ktx/scene2d/widgetTest.kt b/scene2d/src/test/kotlin/ktx/scene2d/widgetTest.kt index 4ee60073..82ab1ac1 100644 --- a/scene2d/src/test/kotlin/ktx/scene2d/widgetTest.kt +++ b/scene2d/src/test/kotlin/ktx/scene2d/widgetTest.kt @@ -156,7 +156,7 @@ class KTableTest : ApplicationTest() { spaceLeft = 27f, spaceRight = 28f, spaceBottom = 29f, - row = true + row = true, ).inCell assertEquals(1, cell.expandX) @@ -225,7 +225,7 @@ class KTreeTest : ApplicationTest() { icon = icon, selectable = false, expanded = true, - userObject = "Test" + userObject = "Test", ).inNode assertSame(icon, node.icon) diff --git a/script/src/main/kotlin/ktx/script/script.kt b/script/src/main/kotlin/ktx/script/script.kt index 273b8616..3df27218 100644 --- a/script/src/main/kotlin/ktx/script/script.kt +++ b/script/src/main/kotlin/ktx/script/script.kt @@ -17,7 +17,7 @@ class KotlinScriptEngine { val engine: ScriptEngine = ScriptEngineManager().getEngineByExtension("kts") ?: throw ScriptEngineException( "Unable to find engine for extension: kts. " + - "Make sure to include the org.jetbrains.kotlin:kotlin-scripting-jsr223 dependency." + "Make sure to include the org.jetbrains.kotlin:kotlin-scripting-jsr223 dependency.", ) /** @@ -122,7 +122,7 @@ class KotlinScriptEngine { fun evaluateOn( receiver: Any, script: String, - receiverVariableName: String = getRandomReceiverName() + receiverVariableName: String = getRandomReceiverName(), ) { try { this[receiverVariableName] = receiver @@ -143,7 +143,7 @@ class KotlinScriptEngine { fun evaluateOn( receiver: Any, scriptFile: FileHandle, - receiverVariableName: String = getRandomReceiverName() + receiverVariableName: String = getRandomReceiverName(), ) { try { evaluateOn(receiver, scriptFile.readString(), receiverVariableName) diff --git a/script/src/test/kotlin/ktx/script/KotlinScriptEngineTest.kt b/script/src/test/kotlin/ktx/script/KotlinScriptEngineTest.kt index afc465b2..788b0a67 100644 --- a/script/src/test/kotlin/ktx/script/KotlinScriptEngineTest.kt +++ b/script/src/test/kotlin/ktx/script/KotlinScriptEngineTest.kt @@ -78,6 +78,7 @@ class KotlinScriptEngineTest { // Then: assertEquals(Data("test"), engine.evaluateAs("""Alias("test")""")) } + @Test fun `should import classes from iterable`() { // When: @@ -201,7 +202,7 @@ class KotlinScriptEngineTest { val lambda: () -> String = { "test" } Helper().toArray(data(lambda()), data(lambda()), data(lambda())) - """.trimIndent() + """.trimIndent(), ) // Then: @@ -218,7 +219,7 @@ class KotlinScriptEngineTest { receiver, """ text = "test" - """.trimIndent() + """.trimIndent(), ) // Then: @@ -238,7 +239,7 @@ class KotlinScriptEngineTest { import com.badlogic.gdx.Gdx text = "test" - """.trimIndent() + """.trimIndent(), ) } } @@ -279,7 +280,7 @@ class KotlinScriptEngineTest { engine.evaluate( """ variable.text = "new" - """.trimIndent() + """.trimIndent(), ) // Then: diff --git a/style/src/main/kotlin/ktx/style/style.kt b/style/src/main/kotlin/ktx/style/style.kt index 8d724043..f1ba827c 100644 --- a/style/src/main/kotlin/ktx/style/style.kt +++ b/style/src/main/kotlin/ktx/style/style.kt @@ -185,7 +185,7 @@ fun Skin.color( red: Float, green: Float, blue: Float, - alpha: Float = 1f + alpha: Float = 1f, ): Color { val color = Color(red, green, blue, alpha) this.add(name, color) @@ -204,7 +204,7 @@ fun Skin.color( inline fun Skin.button( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ButtonStyle).() -> Unit = {} + init: (@SkinDsl ButtonStyle).() -> Unit = {}, ): ButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ButtonStyle() else ButtonStyle(get(extend)), init) @@ -222,7 +222,7 @@ inline fun Skin.button( inline fun Skin.checkBox( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl CheckBoxStyle).() -> Unit = {} + init: (@SkinDsl CheckBoxStyle).() -> Unit = {}, ): CheckBoxStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) CheckBoxStyle() else CheckBoxStyle(get(extend)), init) @@ -240,7 +240,7 @@ inline fun Skin.checkBox( inline fun Skin.imageButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ImageButtonStyle).() -> Unit = {} + init: (@SkinDsl ImageButtonStyle).() -> Unit = {}, ): ImageButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ImageButtonStyle() else ImageButtonStyle(get(extend)), init) @@ -258,7 +258,7 @@ inline fun Skin.imageButton( inline fun Skin.imageTextButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ImageTextButtonStyle).() -> Unit = {} + init: (@SkinDsl ImageTextButtonStyle).() -> Unit = {}, ): ImageTextButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ImageTextButtonStyle() else ImageTextButtonStyle(get(extend)), init) @@ -276,7 +276,7 @@ inline fun Skin.imageTextButton( inline fun Skin.label( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl LabelStyle).() -> Unit = {} + init: (@SkinDsl LabelStyle).() -> Unit = {}, ): LabelStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) LabelStyle() else LabelStyle(get(extend)), init) @@ -294,7 +294,7 @@ inline fun Skin.label( inline fun Skin.list( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ListStyle).() -> Unit = {} + init: (@SkinDsl ListStyle).() -> Unit = {}, ): ListStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ListStyle() else ListStyle(get(extend)), init) @@ -312,7 +312,7 @@ inline fun Skin.list( inline fun Skin.progressBar( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ProgressBarStyle).() -> Unit = {} + init: (@SkinDsl ProgressBarStyle).() -> Unit = {}, ): ProgressBarStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ProgressBarStyle() else ProgressBarStyle(get(extend)), init) @@ -330,7 +330,7 @@ inline fun Skin.progressBar( inline fun Skin.scrollPane( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ScrollPaneStyle).() -> Unit = {} + init: (@SkinDsl ScrollPaneStyle).() -> Unit = {}, ): ScrollPaneStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ScrollPaneStyle() else ScrollPaneStyle(get(extend)), init) @@ -348,7 +348,7 @@ inline fun Skin.scrollPane( inline fun Skin.selectBox( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SelectBoxStyle).() -> Unit = {} + init: (@SkinDsl SelectBoxStyle).() -> Unit = {}, ): SelectBoxStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SelectBoxStyle() else SelectBoxStyle(get(extend)), init) @@ -366,7 +366,7 @@ inline fun Skin.selectBox( inline fun Skin.slider( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SliderStyle).() -> Unit = {} + init: (@SkinDsl SliderStyle).() -> Unit = {}, ): SliderStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SliderStyle() else SliderStyle(get(extend)), init) @@ -384,7 +384,7 @@ inline fun Skin.slider( inline fun Skin.splitPane( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SplitPaneStyle).() -> Unit = {} + init: (@SkinDsl SplitPaneStyle).() -> Unit = {}, ): SplitPaneStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SplitPaneStyle() else SplitPaneStyle(get(extend)), init) @@ -402,7 +402,7 @@ inline fun Skin.splitPane( inline fun Skin.textButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TextButtonStyle).() -> Unit = {} + init: (@SkinDsl TextButtonStyle).() -> Unit = {}, ): TextButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TextButtonStyle() else TextButtonStyle(get(extend)), init) @@ -420,7 +420,7 @@ inline fun Skin.textButton( inline fun Skin.textField( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TextFieldStyle).() -> Unit = {} + init: (@SkinDsl TextFieldStyle).() -> Unit = {}, ): TextFieldStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TextFieldStyle() else TextFieldStyle(get(extend)), init) @@ -438,7 +438,7 @@ inline fun Skin.textField( inline fun Skin.textTooltip( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TextTooltipStyle).() -> Unit = {} + init: (@SkinDsl TextTooltipStyle).() -> Unit = {}, ): TextTooltipStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TextTooltipStyle() else TextTooltipStyle(get(extend)), init) @@ -456,7 +456,7 @@ inline fun Skin.textTooltip( inline fun Skin.touchpad( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TouchpadStyle).() -> Unit = {} + init: (@SkinDsl TouchpadStyle).() -> Unit = {}, ): TouchpadStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TouchpadStyle() else TouchpadStyle(get(extend)), init) @@ -474,7 +474,7 @@ inline fun Skin.touchpad( inline fun Skin.tree( name: String = defaultStyle, extend: String? = null, - init: TreeStyle.() -> Unit = {} + init: TreeStyle.() -> Unit = {}, ): TreeStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TreeStyle() else TreeStyle(get(extend)), init) @@ -492,7 +492,7 @@ inline fun Skin.tree( inline fun Skin.window( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl WindowStyle).() -> Unit = {} + init: (@SkinDsl WindowStyle).() -> Unit = {}, ): WindowStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) WindowStyle() else WindowStyle(get(extend)), init) diff --git a/style/src/test/kotlin/ktx/style/StyleTest.kt b/style/src/test/kotlin/ktx/style/StyleTest.kt index 47bcc90a..3c8c6f81 100644 --- a/style/src/test/kotlin/ktx/style/StyleTest.kt +++ b/style/src/test/kotlin/ktx/style/StyleTest.kt @@ -822,6 +822,6 @@ class StyleTest { /** For [StyleTest] tests. */ internal enum class TestEnum { - TEST + TEST, } } diff --git a/tiled/src/test/kotlin/ktx/tiled/TiledMapTest.kt b/tiled/src/test/kotlin/ktx/tiled/TiledMapTest.kt index 09f1c7f7..38b5abde 100644 --- a/tiled/src/test/kotlin/ktx/tiled/TiledMapTest.kt +++ b/tiled/src/test/kotlin/ktx/tiled/TiledMapTest.kt @@ -32,12 +32,12 @@ class TiledMapTest { add(MapObject()) add(MapObject()) } - } + }, ) layers.add( MapLayer().apply { name = "layer-2" - } + }, ) } diff --git a/version.txt b/version.txt index cf41abd7..1f488021 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.11.0-rc6 +1.12.0-rc1 diff --git a/vis-style/src/main/kotlin/ktx/style/visStyle.kt b/vis-style/src/main/kotlin/ktx/style/visStyle.kt index 2709af5f..89c4ea73 100644 --- a/vis-style/src/main/kotlin/ktx/style/visStyle.kt +++ b/vis-style/src/main/kotlin/ktx/style/visStyle.kt @@ -41,7 +41,7 @@ import kotlin.contracts.contract inline fun Skin.sizes( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl Sizes).() -> Unit = {} + init: (@SkinDsl Sizes).() -> Unit = {}, ): Sizes { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) Sizes() else Sizes(get(extend)), init) @@ -59,7 +59,7 @@ inline fun Skin.sizes( inline fun Skin.busyBar( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl BusyBarStyle).() -> Unit = {} + init: (@SkinDsl BusyBarStyle).() -> Unit = {}, ): BusyBarStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) BusyBarStyle() else BusyBarStyle(get(extend)), init) @@ -77,7 +77,7 @@ inline fun Skin.busyBar( inline fun Skin.colorPicker( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ColorPickerStyle).() -> Unit = {} + init: (@SkinDsl ColorPickerStyle).() -> Unit = {}, ): ColorPickerStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ColorPickerStyle() else ColorPickerStyle(get(extend)), init) @@ -95,7 +95,7 @@ inline fun Skin.colorPicker( inline fun Skin.colorPickerWidget( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ColorPickerWidgetStyle).() -> Unit = {} + init: (@SkinDsl ColorPickerWidgetStyle).() -> Unit = {}, ): ColorPickerWidgetStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ColorPickerWidgetStyle() else ColorPickerWidgetStyle(get(extend)), init) @@ -113,7 +113,7 @@ inline fun Skin.colorPickerWidget( inline fun Skin.formValidator( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl FormValidatorStyle).() -> Unit = {} + init: (@SkinDsl FormValidatorStyle).() -> Unit = {}, ): FormValidatorStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) FormValidatorStyle() else FormValidatorStyle(get(extend)), init) @@ -131,7 +131,7 @@ inline fun Skin.formValidator( inline fun Skin.linkLabel( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl LinkLabelStyle).() -> Unit = {} + init: (@SkinDsl LinkLabelStyle).() -> Unit = {}, ): LinkLabelStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) LinkLabelStyle() else LinkLabelStyle(get(extend)), init) @@ -149,7 +149,7 @@ inline fun Skin.linkLabel( inline fun Skin.listView( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ListViewStyle).() -> Unit = {} + init: (@SkinDsl ListViewStyle).() -> Unit = {}, ): ListViewStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ListViewStyle() else ListViewStyle(get(extend)), init) @@ -167,7 +167,7 @@ inline fun Skin.listView( inline fun Skin.menu( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl MenuStyle).() -> Unit = {} + init: (@SkinDsl MenuStyle).() -> Unit = {}, ): MenuStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) MenuStyle() else MenuStyle(get(extend)), init) @@ -185,7 +185,7 @@ inline fun Skin.menu( inline fun Skin.menuBar( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl MenuBarStyle).() -> Unit = {} + init: (@SkinDsl MenuBarStyle).() -> Unit = {}, ): MenuBarStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) MenuBarStyle() else MenuBarStyle(get(extend)), init) @@ -203,7 +203,7 @@ inline fun Skin.menuBar( inline fun Skin.menuItem( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl MenuItemStyle).() -> Unit = {} + init: (@SkinDsl MenuItemStyle).() -> Unit = {}, ): MenuItemStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) MenuItemStyle() else MenuItemStyle(get(extend)), init) @@ -221,7 +221,7 @@ inline fun Skin.menuItem( inline fun Skin.multiSplitPane( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl MultiSplitPaneStyle).() -> Unit = {} + init: (@SkinDsl MultiSplitPaneStyle).() -> Unit = {}, ): MultiSplitPaneStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) MultiSplitPaneStyle() else MultiSplitPaneStyle(get(extend)), init) @@ -239,7 +239,7 @@ inline fun Skin.multiSplitPane( inline fun Skin.popupMenu( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl PopupMenuStyle).() -> Unit = {} + init: (@SkinDsl PopupMenuStyle).() -> Unit = {}, ): PopupMenuStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) PopupMenuStyle() else PopupMenuStyle(get(extend)), init) @@ -257,7 +257,7 @@ inline fun Skin.popupMenu( inline fun Skin.separator( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SeparatorStyle).() -> Unit = {} + init: (@SkinDsl SeparatorStyle).() -> Unit = {}, ): SeparatorStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SeparatorStyle() else SeparatorStyle(get(extend)), init) @@ -275,7 +275,7 @@ inline fun Skin.separator( inline fun Skin.simpleListAdapter( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SimpleListAdapterStyle).() -> Unit = {} + init: (@SkinDsl SimpleListAdapterStyle).() -> Unit = {}, ): SimpleListAdapterStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SimpleListAdapterStyle() else SimpleListAdapterStyle(get(extend)), init) @@ -293,7 +293,7 @@ inline fun Skin.simpleListAdapter( inline fun Skin.spinner( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl SpinnerStyle).() -> Unit = {} + init: (@SkinDsl SpinnerStyle).() -> Unit = {}, ): SpinnerStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) SpinnerStyle() else SpinnerStyle(get(extend)), init) @@ -311,7 +311,7 @@ inline fun Skin.spinner( inline fun Skin.tabbedPane( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TabbedPaneStyle).() -> Unit = {} + init: (@SkinDsl TabbedPaneStyle).() -> Unit = {}, ): TabbedPaneStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TabbedPaneStyle() else TabbedPaneStyle(get(extend)), init) @@ -329,7 +329,7 @@ inline fun Skin.tabbedPane( inline fun Skin.toast( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl ToastStyle).() -> Unit = {} + init: (@SkinDsl ToastStyle).() -> Unit = {}, ): ToastStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) ToastStyle() else ToastStyle(get(extend)), init) @@ -347,7 +347,7 @@ inline fun Skin.toast( inline fun Skin.visCheckBox( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisCheckBoxStyle).() -> Unit = {} + init: (@SkinDsl VisCheckBoxStyle).() -> Unit = {}, ): VisCheckBoxStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisCheckBoxStyle() else VisCheckBoxStyle(get(extend)), init) @@ -365,7 +365,7 @@ inline fun Skin.visCheckBox( inline fun Skin.visImageButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisImageButtonStyle).() -> Unit = {} + init: (@SkinDsl VisImageButtonStyle).() -> Unit = {}, ): VisImageButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisImageButtonStyle() else VisImageButtonStyle(get(extend)), init) @@ -383,7 +383,7 @@ inline fun Skin.visImageButton( inline fun Skin.visImageTextButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisImageTextButtonStyle).() -> Unit = {} + init: (@SkinDsl VisImageTextButtonStyle).() -> Unit = {}, ): VisImageTextButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisImageTextButtonStyle() else VisImageTextButtonStyle(get(extend)), init) @@ -401,7 +401,7 @@ inline fun Skin.visImageTextButton( inline fun Skin.visSplitPane( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisSplitPaneStyle).() -> Unit = {} + init: (@SkinDsl VisSplitPaneStyle).() -> Unit = {}, ): VisSplitPaneStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisSplitPaneStyle() else VisSplitPaneStyle(get(extend)), init) @@ -419,7 +419,7 @@ inline fun Skin.visSplitPane( inline fun Skin.visTextButton( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisTextButtonStyle).() -> Unit = {} + init: (@SkinDsl VisTextButtonStyle).() -> Unit = {}, ): VisTextButtonStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisTextButtonStyle() else VisTextButtonStyle(get(extend)), init) @@ -437,7 +437,7 @@ inline fun Skin.visTextButton( inline fun Skin.visTextField( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl VisTextFieldStyle).() -> Unit = {} + init: (@SkinDsl VisTextFieldStyle).() -> Unit = {}, ): VisTextFieldStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) VisTextFieldStyle() else VisTextFieldStyle(get(extend)), init) @@ -455,7 +455,7 @@ inline fun Skin.visTextField( inline fun Skin.visTooltip( name: String = defaultStyle, extend: String? = null, - init: (@SkinDsl TooltipStyle).() -> Unit = {} + init: (@SkinDsl TooltipStyle).() -> Unit = {}, ): TooltipStyle { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return addStyle(name, if (extend == null) TooltipStyle() else TooltipStyle(get(extend)), init) diff --git a/vis-style/src/test/kotlin/ktx/style/VisStyleTest.kt b/vis-style/src/test/kotlin/ktx/style/VisStyleTest.kt index bff0f76f..66a69234 100644 --- a/vis-style/src/test/kotlin/ktx/style/VisStyleTest.kt +++ b/vis-style/src/test/kotlin/ktx/style/VisStyleTest.kt @@ -27,9 +27,9 @@ import com.kotcrab.vis.ui.widget.color.ColorPickerWidgetStyle import com.kotcrab.vis.ui.widget.spinner.Spinner.SpinnerStyle import com.kotcrab.vis.ui.widget.tabbedpane.TabbedPane.TabbedPaneStyle import com.kotcrab.vis.ui.widget.toast.Toast.ToastStyle -import com.nhaarman.mockitokotlin2.mock import org.junit.Assert.assertEquals import org.junit.Test +import org.mockito.kotlin.mock /** * Tests building utilities of VisUI widget styles. diff --git a/vis/README.md b/vis/README.md index 49b176f0..f9756079 100644 --- a/vis/README.md +++ b/vis/README.md @@ -1,4 +1,4 @@ -[![VisUI](https://img.shields.io/badge/vis--ui-1.5.1-blue.svg)](https://github.com/kotcrab/vis-ui) +[![VisUI](https://img.shields.io/badge/vis--ui-1.5.2-blue.svg)](https://github.com/kotcrab/vis-ui) [![Maven Central](https://img.shields.io/maven-central/v/io.github.libktx/ktx-vis.svg)](https://search.maven.org/artifact/io.github.libktx/ktx-vis) # KTX: VisUI type-safe builders diff --git a/vis/src/main/kotlin/ktx/scene2d/vis/factory.kt b/vis/src/main/kotlin/ktx/scene2d/vis/factory.kt index 4697217f..97a44d72 100644 --- a/vis/src/main/kotlin/ktx/scene2d/vis/factory.kt +++ b/vis/src/main/kotlin/ktx/scene2d/vis/factory.kt @@ -75,7 +75,7 @@ import com.badlogic.gdx.utils.Array as GdxArray inline fun RootWidget.visWindow( title: String, style: String = defaultStyle, - init: KVisWindow.() -> Unit = {} + init: KVisWindow.() -> Unit = {}, ): KVisWindow { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return storeActor(KVisWindow(title, style)).apply(init) @@ -93,7 +93,7 @@ inline fun RootWidget.visWindow( inline fun RootWidget.visDialog( title: String, style: String = defaultStyle, - init: KVisDialog.() -> Unit = {} + init: KVisDialog.() -> Unit = {}, ): KVisDialog { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return storeActor(KVisDialog(title, style)).apply(init) @@ -109,7 +109,7 @@ inline fun RootWidget.visDialog( @OptIn(ExperimentalContracts::class) inline fun RootWidget.toastTable( defaultSpacing: Boolean = false, - init: KToastTable.() -> Unit = {} + init: KToastTable.() -> Unit = {}, ): KToastTable { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return storeActor(KToastTable(defaultSpacing)).apply(init) @@ -128,7 +128,7 @@ inline fun RootWidget.toastTable( inline fun KWidget.visLabel( text: CharSequence, style: String = defaultStyle, - init: (@Scene2dDsl VisLabel).(S) -> Unit = {} + init: (@Scene2dDsl VisLabel).(S) -> Unit = {}, ): VisLabel { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisLabel(text, style), init) @@ -149,7 +149,7 @@ inline fun KWidget.linkLabel( text: CharSequence, url: CharSequence = text, style: String = defaultStyle, - init: (@Scene2dDsl LinkLabel).(S) -> Unit = {} + init: (@Scene2dDsl LinkLabel).(S) -> Unit = {}, ): LinkLabel { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(LinkLabel(text, url, style), init) @@ -168,7 +168,7 @@ inline fun KWidget.visImage( drawable: Drawable, scaling: Scaling = Scaling.stretch, align: Int = Align.center, - init: (@Scene2dDsl VisImage).(S) -> Unit = {} + init: (@Scene2dDsl VisImage).(S) -> Unit = {}, ): VisImage { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisImage(drawable, scaling, align), init) @@ -185,7 +185,7 @@ inline fun KWidget.visImage( @OptIn(ExperimentalContracts::class) inline fun KWidget.visImage( drawableName: String, - init: (@Scene2dDsl VisImage).(S) -> Unit = {} + init: (@Scene2dDsl VisImage).(S) -> Unit = {}, ): VisImage { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisImage(drawableName), init) @@ -202,7 +202,7 @@ inline fun KWidget.visImage( @OptIn(ExperimentalContracts::class) inline fun KWidget.visImage( texture: Texture, - init: (@Scene2dDsl VisImage).(S) -> Unit = {} + init: (@Scene2dDsl VisImage).(S) -> Unit = {}, ): VisImage { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisImage(texture), init) @@ -219,7 +219,7 @@ inline fun KWidget.visImage( @OptIn(ExperimentalContracts::class) inline fun KWidget.visImage( ninePatch: NinePatch, - init: (@Scene2dDsl VisImage).(S) -> Unit = {} + init: (@Scene2dDsl VisImage).(S) -> Unit = {}, ): VisImage { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisImage(ninePatch), init) @@ -236,7 +236,7 @@ inline fun KWidget.visImage( @OptIn(ExperimentalContracts::class) inline fun KWidget.visImage( textureRegion: TextureRegion, - init: (@Scene2dDsl VisImage).(S) -> Unit = {} + init: (@Scene2dDsl VisImage).(S) -> Unit = {}, ): VisImage { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisImage(textureRegion), init) @@ -254,7 +254,7 @@ inline fun KWidget.visImage( @OptIn(ExperimentalContracts::class) inline fun KWidget<*>.visList( style: String = defaultStyle, - init: KVisList.() -> Unit = {} + init: KVisList.() -> Unit = {}, ): KVisList { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val list = KVisList(style) @@ -273,7 +273,7 @@ inline fun KWidget<*>.visList( @Scene2dDsl fun KWidget<*>.visListOf( items: GdxArray? = null, - style: String = defaultStyle + style: String = defaultStyle, ): KVisList { val list = KVisList(style) storeActor(list) @@ -303,7 +303,7 @@ inline fun KWidget.visProgressBar( step: Float = 1f, vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, - init: (@Scene2dDsl VisProgressBar).(S) -> Unit = {} + init: (@Scene2dDsl VisProgressBar).(S) -> Unit = {}, ): VisProgressBar { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisProgressBar(min, max, step, vertical, style), init) @@ -318,7 +318,7 @@ inline fun KWidget.visProgressBar( @Scene2dDsl fun KWidget<*>.visSelectBoxOf( items: GdxArray? = null, - style: String = defaultStyle + style: String = defaultStyle, ): KVisSelectBox { val selectBox = KVisSelectBox(style) storeActor(selectBox) @@ -340,7 +340,7 @@ fun KWidget<*>.visSelectBoxOf( @OptIn(ExperimentalContracts::class) inline fun KWidget<*>.visSelectBox( style: String = defaultStyle, - init: KVisSelectBox.() -> Unit = {} + init: KVisSelectBox.() -> Unit = {}, ): KVisSelectBox { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val selectBox = KVisSelectBox(style) @@ -370,7 +370,7 @@ inline fun KWidget.visSlider( step: Float = 1f, vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, - init: (@Scene2dDsl VisSlider).(S) -> Unit = {} + init: (@Scene2dDsl VisSlider).(S) -> Unit = {}, ): VisSlider { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisSlider(min, max, step, vertical, style), init) @@ -389,7 +389,7 @@ inline fun KWidget.visSlider( inline fun KWidget.visTextArea( text: String = "", style: String = defaultStyle, - init: (@Scene2dDsl VisTextArea).(S) -> Unit = {} + init: (@Scene2dDsl VisTextArea).(S) -> Unit = {}, ): VisTextArea { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisTextArea(text, style), init) @@ -408,7 +408,7 @@ inline fun KWidget.visTextArea( inline fun KWidget.highlightTextArea( text: String = "", style: String = defaultStyle, - init: (@Scene2dDsl HighlightTextArea).(S) -> Unit = {} + init: (@Scene2dDsl HighlightTextArea).(S) -> Unit = {}, ): HighlightTextArea { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(HighlightTextArea(text, style), init) @@ -427,7 +427,7 @@ inline fun KWidget.highlightTextArea( inline fun KWidget.scrollableTextArea( text: String = "", style: String = defaultStyle, - init: (@Scene2dDsl ScrollableTextArea).(S) -> Unit = {} + init: (@Scene2dDsl ScrollableTextArea).(S) -> Unit = {}, ): ScrollableTextArea { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(ScrollableTextArea(text, style), init) @@ -446,7 +446,7 @@ inline fun KWidget.scrollableTextArea( inline fun KWidget.visTextField( text: String = "", style: String = defaultStyle, - init: (@Scene2dDsl VisTextField).(S) -> Unit = {} + init: (@Scene2dDsl VisTextField).(S) -> Unit = {}, ): VisTextField { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisTextField(text, style), init) @@ -465,7 +465,7 @@ inline fun KWidget.visTextField( inline fun KWidget.visValidatableTextField( text: String = "", style: String = defaultStyle, - init: (@Scene2dDsl VisValidatableTextField).(S) -> Unit = {} + init: (@Scene2dDsl VisValidatableTextField).(S) -> Unit = {}, ): VisValidatableTextField { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(VisValidatableTextField(text, style), init) @@ -482,7 +482,7 @@ inline fun KWidget.visValidatableTextField( @OptIn(ExperimentalContracts::class) inline fun KWidget.busyBar( style: String = defaultStyle, - init: (@Scene2dDsl BusyBar).(S) -> Unit = {} + init: (@Scene2dDsl BusyBar).(S) -> Unit = {}, ): BusyBar { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(BusyBar(style), init) @@ -499,7 +499,7 @@ inline fun KWidget.busyBar( @OptIn(ExperimentalContracts::class) inline fun KWidget.separator( style: String = defaultStyle, - init: (@Scene2dDsl Separator).(S) -> Unit = {} + init: (@Scene2dDsl Separator).(S) -> Unit = {}, ): Separator { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(Separator(style), init) @@ -518,7 +518,7 @@ inline fun KWidget.separator( inline fun KWidget.visTextButton( text: String, style: String = defaultStyle, - init: KVisTextButton.(S) -> Unit = {} + init: KVisTextButton.(S) -> Unit = {}, ): KVisTextButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisTextButton(text, style), init) @@ -535,7 +535,7 @@ inline fun KWidget.visTextButton( @OptIn(ExperimentalContracts::class) inline fun KWidget.visImageButton( style: String = defaultStyle, - init: KVisImageButton.(S) -> Unit = {} + init: KVisImageButton.(S) -> Unit = {}, ): KVisImageButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisImageButton(style), init) @@ -554,7 +554,7 @@ inline fun KWidget.visImageButton( inline fun KWidget.visImageTextButton( text: String, style: String = defaultStyle, - init: KVisImageTextButton.(S) -> Unit = {} + init: KVisImageTextButton.(S) -> Unit = {}, ): KVisImageTextButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisImageTextButton(text, style), init) @@ -573,7 +573,7 @@ inline fun KWidget.visImageTextButton( inline fun KWidget.visCheckBox( text: String, style: String = defaultStyle, - init: KVisCheckBox.(S) -> Unit = {} + init: KVisCheckBox.(S) -> Unit = {}, ): KVisCheckBox { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisCheckBox(text, style), init) @@ -592,7 +592,7 @@ inline fun KWidget.visCheckBox( inline fun KWidget.visRadioButton( text: String, style: String = "radio", - init: KVisRadioButton.(S) -> Unit = {} + init: KVisRadioButton.(S) -> Unit = {}, ): KVisRadioButton { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisRadioButton(text, style), init) @@ -609,7 +609,7 @@ inline fun KWidget.visRadioButton( @OptIn(ExperimentalContracts::class) inline fun KWidget.visTree( style: String = defaultStyle, - init: KVisTree.(S) -> Unit = {} + init: KVisTree.(S) -> Unit = {}, ): KVisTree { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisTree(style), init) @@ -626,7 +626,7 @@ inline fun KWidget.visTree( @OptIn(ExperimentalContracts::class) inline fun KWidget.basicColorPicker( style: String = defaultStyle, - init: KBasicColorPicker.(S) -> Unit = {} + init: KBasicColorPicker.(S) -> Unit = {}, ): KBasicColorPicker { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KBasicColorPicker(style), init) @@ -643,7 +643,7 @@ inline fun KWidget.basicColorPicker( @OptIn(ExperimentalContracts::class) inline fun KWidget.extendedColorPicker( style: String = defaultStyle, - init: KExtendedColorPicker.(S) -> Unit = {} + init: KExtendedColorPicker.(S) -> Unit = {}, ): KExtendedColorPicker { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KExtendedColorPicker(style), init) @@ -664,7 +664,7 @@ inline fun KWidget.spinner( name: String, model: SpinnerModel, style: String = defaultStyle, - init: KSpinner.(S) -> Unit = {} + init: KSpinner.(S) -> Unit = {}, ): KSpinner { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KSpinner(style, name, model), init) @@ -681,7 +681,7 @@ inline fun KWidget.spinner( @OptIn(ExperimentalContracts::class) inline fun KWidget.visTable( defaultSpacing: Boolean = false, - init: KVisTable.(S) -> Unit = {} + init: KVisTable.(S) -> Unit = {}, ): KVisTable { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisTable(defaultSpacing), init) @@ -701,7 +701,7 @@ inline fun KWidget.visTable( @Deprecated("Use KFlowGroup instead.", replaceWith = ReplaceWith("flowGroup")) inline fun KWidget.horizontalFlowGroup( spacing: Float = 0f, - init: KHorizontalFlowGroup.(S) -> Unit = {} + init: KHorizontalFlowGroup.(S) -> Unit = {}, ): KHorizontalFlowGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KHorizontalFlowGroup(spacing), init) @@ -721,7 +721,7 @@ inline fun KWidget.horizontalFlowGroup( @Deprecated("Use KFlowGroup instead.", replaceWith = ReplaceWith("flowGroup")) inline fun KWidget.verticalFlowGroup( spacing: Float = 0f, - init: KVerticalFlowGroup.(S) -> Unit = {} + init: KVerticalFlowGroup.(S) -> Unit = {}, ): KVerticalFlowGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVerticalFlowGroup(spacing), init) @@ -740,7 +740,7 @@ inline fun KWidget.verticalFlowGroup( inline fun KWidget.flowGroup( vertical: Boolean = false, spacing: Float = 0f, - init: KFlowGroup.(S) -> Unit = {} + init: KFlowGroup.(S) -> Unit = {}, ): KFlowGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KFlowGroup(vertical, spacing), init) @@ -759,7 +759,7 @@ inline fun KWidget.flowGroup( inline fun KWidget.gridGroup( itemSize: Float = 256f, spacing: Float = 8f, - init: KGridGroup.(S) -> Unit = {} + init: KGridGroup.(S) -> Unit = {}, ): KGridGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KGridGroup(itemSize, spacing), init) @@ -774,7 +774,7 @@ inline fun KWidget.gridGroup( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.floatingGroup( - init: KFloatingGroup.(S) -> Unit = {} + init: KFloatingGroup.(S) -> Unit = {}, ): KFloatingGroup { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KFloatingGroup(), init) @@ -789,7 +789,7 @@ inline fun KWidget.floatingGroup( @Scene2dDsl @OptIn(ExperimentalContracts::class) inline fun KWidget.dragPane( - init: KDragPane.(S) -> Unit = {} + init: KDragPane.(S) -> Unit = {}, ): KDragPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KDragPane(), init) @@ -806,7 +806,7 @@ inline fun KWidget.dragPane( @OptIn(ExperimentalContracts::class) inline fun KWidget.visScrollPane( style: String = defaultStyle, - init: KVisScrollPane.(S) -> Unit = {} + init: KVisScrollPane.(S) -> Unit = {}, ): KVisScrollPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisScrollPane(style), init) @@ -826,7 +826,7 @@ inline fun KWidget.visScrollPane( inline fun KWidget.visSplitPane( vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, - init: KVisSplitPane.(S) -> Unit = {} + init: KVisSplitPane.(S) -> Unit = {}, ): KVisSplitPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KVisSplitPane(vertical, style), init) @@ -846,7 +846,7 @@ inline fun KWidget.visSplitPane( inline fun KWidget.multiSplitPane( vertical: Boolean = false, style: String = if (vertical) defaultVerticalStyle else defaultHorizontalStyle, - init: KMultiSplitPane.(S) -> Unit = {} + init: KMultiSplitPane.(S) -> Unit = {}, ): KMultiSplitPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KMultiSplitPane(vertical, style), init) @@ -863,7 +863,7 @@ inline fun KWidget.multiSplitPane( @OptIn(ExperimentalContracts::class) inline fun KWidget.collapsible( defaultSpacing: Boolean = false, - init: KCollapsible.(S) -> Unit = {} + init: KCollapsible.(S) -> Unit = {}, ): KCollapsible { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KCollapsible(KVisTable(defaultSpacing)), init) @@ -880,7 +880,7 @@ inline fun KWidget.collapsible( @OptIn(ExperimentalContracts::class) inline fun KWidget.horizontalCollapsible( defaultSpacing: Boolean = false, - init: KHorizontalCollapsible.(S) -> Unit = {} + init: KHorizontalCollapsible.(S) -> Unit = {}, ): KHorizontalCollapsible { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return actor(KHorizontalCollapsible(KVisTable(defaultSpacing)), init) @@ -899,7 +899,7 @@ inline fun KWidget.horizontalCollapsible( inline fun KWidget.buttonBar( order: String? = null, tableInit: VisTable.(S) -> Unit = {}, - init: (@Scene2dDsl ButtonBar).() -> Unit = {} + init: (@Scene2dDsl ButtonBar).() -> Unit = {}, ): ButtonBar { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val bar = if (order == null) ButtonBar() else ButtonBar(order) @@ -919,7 +919,7 @@ inline fun KWidget.buttonBar( inline fun KWidget<*>.listView( itemAdapter: ListAdapter, style: String = defaultStyle, - init: ListView.() -> Unit = {} + init: ListView.() -> Unit = {}, ): ListView { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val view = ListView(itemAdapter, style) @@ -938,7 +938,7 @@ inline fun KWidget<*>.listView( @OptIn(ExperimentalContracts::class) inline fun KWidget.tabbedPane( style: String = defaultStyle, - init: KTabbedPane.(S) -> Unit = {} + init: KTabbedPane.(S) -> Unit = {}, ): KTabbedPane { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val pane = KTabbedPane(style) diff --git a/vis/src/main/kotlin/ktx/scene2d/vis/menu.kt b/vis/src/main/kotlin/ktx/scene2d/vis/menu.kt index 887f1670..b9c3df6b 100644 --- a/vis/src/main/kotlin/ktx/scene2d/vis/menu.kt +++ b/vis/src/main/kotlin/ktx/scene2d/vis/menu.kt @@ -23,9 +23,10 @@ import kotlin.contracts.contract */ @Scene2dDsl @OptIn(ExperimentalContracts::class) -inline fun @Suppress("unused") scene2d.popupMenu( +@Suppress("UnusedReceiverParameter") +inline fun scene2d.popupMenu( style: String = defaultStyle, - init: (@Scene2dDsl PopupMenu).() -> Unit = {} + init: (@Scene2dDsl PopupMenu).() -> Unit = {}, ): PopupMenu { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val popupMenu = PopupMenu(style) @@ -44,7 +45,7 @@ inline fun @Suppress("unused") scene2d.popupMenu( @OptIn(ExperimentalContracts::class) inline fun KWidget.menuBar( style: String = defaultStyle, - init: (@Scene2dDsl MenuBar).(S) -> Unit = {} + init: (@Scene2dDsl MenuBar).(S) -> Unit = {}, ): MenuBar { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val menuBar = MenuBar(style) @@ -63,7 +64,7 @@ inline fun KWidget.menuBar( fun MenuBar.menu( title: String, style: String = defaultStyle, - init: (@Scene2dDsl PopupMenu).() -> Unit = {} + init: (@Scene2dDsl PopupMenu).() -> Unit = {}, ): Menu { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val menu = Menu(title, style) @@ -82,7 +83,7 @@ fun MenuBar.menu( @OptIn(ExperimentalContracts::class) fun MenuItem.subMenu( style: String = defaultStyle, - init: (@Scene2dDsl PopupMenu).() -> Unit = {} + init: (@Scene2dDsl PopupMenu).() -> Unit = {}, ): PopupMenu { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val subMenu = PopupMenu(style) @@ -103,7 +104,7 @@ fun MenuItem.subMenu( fun PopupMenu.menuItem( text: String, style: String = defaultStyle, - init: (@Scene2dDsl MenuItem).() -> Unit = {} + init: (@Scene2dDsl MenuItem).() -> Unit = {}, ): MenuItem { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val item = MenuItem(text, style) @@ -126,7 +127,7 @@ fun PopupMenu.menuItem( text: String, image: Image, style: String = defaultStyle, - init: (@Scene2dDsl MenuItem).() -> Unit = {} + init: (@Scene2dDsl MenuItem).() -> Unit = {}, ): MenuItem { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val item = MenuItem(text, image, style) @@ -149,7 +150,7 @@ fun PopupMenu.menuItem( text: String, drawable: Drawable, style: String = defaultStyle, - init: (@Scene2dDsl MenuItem).() -> Unit = {} + init: (@Scene2dDsl MenuItem).() -> Unit = {}, ): MenuItem { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val item = MenuItem(text, drawable, style) @@ -172,7 +173,7 @@ fun PopupMenu.menuItem( text: String, drawableName: String, style: String = defaultStyle, - init: (@Scene2dDsl MenuItem).() -> Unit = {} + init: (@Scene2dDsl MenuItem).() -> Unit = {}, ): MenuItem { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return menuItem(text, VisUI.getSkin().getDrawable(drawableName), style, init) diff --git a/vis/src/main/kotlin/ktx/scene2d/vis/tooltip.kt b/vis/src/main/kotlin/ktx/scene2d/vis/tooltip.kt index 4db42be8..623e43c3 100644 --- a/vis/src/main/kotlin/ktx/scene2d/vis/tooltip.kt +++ b/vis/src/main/kotlin/ktx/scene2d/vis/tooltip.kt @@ -23,7 +23,7 @@ import kotlin.contracts.contract fun Actor.visTooltip( content: Actor, style: String = defaultStyle, - init: (@Scene2dDsl Tooltip).() -> Unit = {} + init: (@Scene2dDsl Tooltip).() -> Unit = {}, ): Tooltip { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val tooltip = Tooltip(style) @@ -47,7 +47,7 @@ fun Actor.visTextTooltip( text: CharSequence, textAlign: Int = Align.center, style: String = defaultStyle, - init: (@Scene2dDsl Tooltip).() -> Unit = {} + init: (@Scene2dDsl Tooltip).() -> Unit = {}, ): Tooltip { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val label = VisLabel(text) diff --git a/vis/src/main/kotlin/ktx/scene2d/vis/validation.kt b/vis/src/main/kotlin/ktx/scene2d/vis/validation.kt index 796d1764..2fa0f6b0 100644 --- a/vis/src/main/kotlin/ktx/scene2d/vis/validation.kt +++ b/vis/src/main/kotlin/ktx/scene2d/vis/validation.kt @@ -22,7 +22,7 @@ inline fun validator( targetToDisable: Disableable? = null, messageLabel: Label? = null, style: String = defaultStyle, - init: FormValidator.() -> Unit + init: FormValidator.() -> Unit, ): FormValidator { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } return FormValidator(targetToDisable, messageLabel, style).apply(init) diff --git a/vis/src/main/kotlin/ktx/scene2d/vis/widget.kt b/vis/src/main/kotlin/ktx/scene2d/vis/widget.kt index 7935cd33..e211d2d4 100644 --- a/vis/src/main/kotlin/ktx/scene2d/vis/widget.kt +++ b/vis/src/main/kotlin/ktx/scene2d/vis/widget.kt @@ -73,7 +73,7 @@ class KVisCheckBox(text: String, styleName: String) : VisCheckBox(text, styleNam @Scene2dDsl class KVisRadioButton( text: String, - styleName: String + styleName: String, ) : VisRadioButton(text, VisUI.getSkin()[styleName, VisCheckBoxStyle::class.java]), KTable /** Extends [VisTextButton] with type-safe widget builders. */ @@ -158,7 +158,7 @@ inline fun KTabbedPane.tab( title: String, savable: Boolean = false, closeableByUser: Boolean = true, - init: KTab.() -> Unit = {} + init: KTab.() -> Unit = {}, ): Tab { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val tab = KTab(title, savable, closeableByUser) @@ -213,7 +213,7 @@ private inline fun TabbedPane.addPaneContentListener(crossinline contentChanged: class KTab( private val title: String, savable: Boolean, - closeableByUser: Boolean + closeableByUser: Boolean, ) : Tab(savable, closeableByUser), KTable { private val content = VisTable() override fun add(actor: T): Cell = content.add(actor) @@ -269,7 +269,7 @@ class KVisSelectBox(style: String) : VisSelectBox(style) { @Scene2dDsl class KVisSplitPane( vertical: Boolean, - style: String + style: String, ) : VisSplitPane(null, null, vertical, style), KGroup { override fun addActor(actor: Actor?) { when (this.children.size) { @@ -308,7 +308,7 @@ class KCollapsible(val table: KVisTable) : CollapsibleWidget(table), KTable { @Deprecated( message = "Table is set on construction and should not be changed.", - replaceWith = ReplaceWith("Nothing") + replaceWith = ReplaceWith("Nothing"), ) override fun setTable(table: Table?) { throw GdxRuntimeException("Use default table instead.") @@ -322,7 +322,7 @@ class KHorizontalCollapsible(val table: KVisTable) : HorizontalCollapsibleWidget @Deprecated( message = "Table is set on construction and should not be changed.", - replaceWith = ReplaceWith("Nothing") + replaceWith = ReplaceWith("Nothing"), ) override fun setTable(table: Table?) { throw GdxRuntimeException("Use default table instead.") diff --git a/vis/src/test/kotlin/ktx/scene2d/vis/factoryTest.kt b/vis/src/test/kotlin/ktx/scene2d/vis/factoryTest.kt index f8316a72..331d55c2 100644 --- a/vis/src/test/kotlin/ktx/scene2d/vis/factoryTest.kt +++ b/vis/src/test/kotlin/ktx/scene2d/vis/factoryTest.kt @@ -14,7 +14,6 @@ import com.kotcrab.vis.ui.widget.VisLabel import com.kotcrab.vis.ui.widget.VisWindow import com.kotcrab.vis.ui.widget.spinner.IntSpinnerModel import com.kotcrab.vis.ui.widget.toast.ToastTable -import com.nhaarman.mockitokotlin2.mock import ktx.scene2d.ApplicationTest import ktx.scene2d.KWidget import ktx.scene2d.TOLERANCE @@ -28,6 +27,7 @@ import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Ignore import org.junit.Test +import org.mockito.kotlin.mock import com.badlogic.gdx.utils.Array as GdxArray class TopLevelActorFactoriesTest : ApplicationTest() { @@ -170,7 +170,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visLabel("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -179,7 +179,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { validate = { assertEquals("Text.", it.text.toString()) assertEquals("URL", it.url) - } + }, ) @Test @@ -187,7 +187,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImage(VisUI.getSkin().getDrawable("button")) }, validate = { assertSame(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -195,7 +195,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImage("button") }, validate = { assertSame(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -215,7 +215,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visListOf(GdxArray.with("one", "two", "three")) }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -225,7 +225,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -236,7 +236,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visSelectBoxOf(GdxArray.with("one", "two", "three")) }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -246,7 +246,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -254,7 +254,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextArea("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -262,7 +262,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { highlightTextArea("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -270,7 +270,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { scrollableTextArea("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -278,7 +278,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextField("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -286,7 +286,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visValidatableTextField("Test.") }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -300,7 +300,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextButton("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -311,7 +311,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImageTextButton("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -319,7 +319,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visCheckBox("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -327,7 +327,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { visRadioButton("Test.") }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -346,7 +346,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { spinner("Name", IntSpinnerModel(0, 0, 10)) }, validate = { assertEquals("Name", (it.children[0] as Label).text.toString()) - } + }, ) @Test @@ -358,7 +358,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { horizontalFlowGroup(spacing = 10f) }, validate = { assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -367,7 +367,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { widget = { verticalFlowGroup(spacing = 10f) }, validate = { assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -376,7 +376,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { validate = { assertTrue(it.isVertical) assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -386,7 +386,7 @@ class NoInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(10f, it.spacing, TOLERANCE) assertEquals(100f, it.itemWidth, TOLERANCE) assertEquals(100f, it.itemHeight, TOLERANCE) - } + }, ) @Test @@ -470,7 +470,8 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertTrue(child in parent.children) assertEquals( "For the purpose of this test, the actor must include 'color = Color.BLUE' in its init block.", - Color.BLUE, child!!.color + Color.BLUE, + child!!.color, ) validate(child) // Performing widget-specific validation. } @@ -480,7 +481,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visLabel("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -489,7 +490,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { validate = { assertEquals("Text.", it.text.toString()) assertEquals("URL", it.url) - } + }, ) @Test @@ -497,7 +498,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImage(VisUI.getSkin().getDrawable("button")) { color = Color.BLUE } }, validate = { assertSame(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -505,7 +506,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImage("button") { color = Color.BLUE } }, validate = { assertSame(VisUI.getSkin().getDrawable("button"), it.drawable) - } + }, ) @Test @@ -536,7 +537,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -546,7 +547,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -562,7 +563,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals(GdxArray.with("one", "two", "three"), it.items) - } + }, ) @Test @@ -572,7 +573,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(1f, it.minValue, TOLERANCE) assertEquals(2f, it.maxValue, TOLERANCE) assertEquals(0.5f, it.stepSize, TOLERANCE) - } + }, ) @Test @@ -580,7 +581,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextArea("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -588,7 +589,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { highlightTextArea("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -596,7 +597,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { scrollableTextArea("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -604,7 +605,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextField("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -612,7 +613,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visValidatableTextField("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text) - } + }, ) @Test @@ -626,7 +627,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visTextButton("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -637,7 +638,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visImageTextButton("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -645,7 +646,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visCheckBox("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -653,7 +654,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { visRadioButton("Test.") { color = Color.BLUE } }, validate = { assertEquals("Test.", it.text.toString()) - } + }, ) @Test @@ -676,7 +677,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { }, validate = { assertEquals("Name", (it.children[0] as Label).text.toString()) - } + }, ) @Test @@ -688,7 +689,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { horizontalFlowGroup(spacing = 10f) { color = Color.BLUE } }, validate = { assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -697,7 +698,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { widget = { verticalFlowGroup(spacing = 10f) { color = Color.BLUE } }, validate = { assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -706,7 +707,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { validate = { assertFalse(it.isVertical) assertEquals(10f, it.spacing, TOLERANCE) - } + }, ) @Test @@ -716,7 +717,7 @@ class InlinedInitBlockActorFactoriesTest : ApplicationTest() { assertEquals(10f, it.spacing, TOLERANCE) assertEquals(100f, it.itemWidth, TOLERANCE) assertEquals(100f, it.itemHeight, TOLERANCE) - } + }, ) @Test diff --git a/vis/src/test/kotlin/ktx/scene2d/vis/widgetTest.kt b/vis/src/test/kotlin/ktx/scene2d/vis/widgetTest.kt index f43155be..9353780f 100644 --- a/vis/src/test/kotlin/ktx/scene2d/vis/widgetTest.kt +++ b/vis/src/test/kotlin/ktx/scene2d/vis/widgetTest.kt @@ -66,7 +66,7 @@ class KVisTreeTest : ApplicationTest() { icon = icon, selectable = false, expanded = true, - userObject = "Test" + userObject = "Test", ).inNode assertSame(icon, node.icon)