From cf6f9f54fe7f74a4b005c56f4715e077792939e8 Mon Sep 17 00:00:00 2001 From: Jacek Weremko Date: Sat, 15 Jun 2024 13:55:33 +0200 Subject: [PATCH] Add jacoco dependency, convert TexttestFixtures to tests. Update README with results and next steps. --- Kotlin/README.md | 11 +++++ Kotlin/build.gradle.kts | 6 +++ Kotlin/img.png | Bin 0 -> 59002 bytes .../kotlin/com/gildedrose/GildedRoseTest.kt | 42 +++++++++++++++++- 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Kotlin/img.png diff --git a/Kotlin/README.md b/Kotlin/README.md index c97a1db1..01b53561 100644 --- a/Kotlin/README.md +++ b/Kotlin/README.md @@ -32,3 +32,14 @@ There are instructions in the [TextTest Readme](../texttests/README.md) for sett 2. Break complex statements, make code longer and simpler 3. understand algorithm and propose better solution + +### Execution +TexttestFixtures indeed do not cover all paths, based on jacoco coverage: + ![img.png](img.png) + +There are two ways to advance: +1. manually craft extra test cases +2. auto generate a bunch of test cases + +I prefer to go with (2) because it seems to me to be more resilient way. I need to check if execution +time is not bloated. Also minimize number of test cases. diff --git a/Kotlin/build.gradle.kts b/Kotlin/build.gradle.kts index 4d392304..277a6197 100644 --- a/Kotlin/build.gradle.kts +++ b/Kotlin/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") version "1.9.10" application + jacoco } group = "com.gildedrose" @@ -22,6 +23,11 @@ tasks.test { testLogging { events("passed", "skipped", "failed") } + finalizedBy(tasks.jacocoTestReport) +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) } // config JVM target to 1.8 for kotlin compilation tasks diff --git a/Kotlin/img.png b/Kotlin/img.png new file mode 100644 index 0000000000000000000000000000000000000000..0521f577859df3cb811dd9ba7716cd8adef6dd3d GIT binary patch literal 59002 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 literal 0 HcmV?d00001 diff --git a/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt b/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt index c5216d8a..52af8f7d 100644 --- a/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt +++ b/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt @@ -2,6 +2,15 @@ package com.gildedrose import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertAll +import org.junit.jupiter.api.extension.ExtensionContext +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.Arguments.of +import org.junit.jupiter.params.provider.ArgumentsProvider +import org.junit.jupiter.params.provider.ArgumentsSource +import java.util.stream.Stream + internal class GildedRoseTest { @@ -10,10 +19,41 @@ internal class GildedRoseTest { val items = listOf(Item("foo", 0, 0)) val app = GildedRose(items) app.updateQuality() - assertEquals("fixme", app.items[0].name) + assertEquals("foo", app.items[0].name) } + @ParameterizedTest + @ArgumentsSource(GildedRoseArgumentsProvider::class) + fun `should update quality`(item: Item, expectedQuality: Int, expectedSellIn: Int) { + val itemName = item.name + val items = listOf(item) + val app = GildedRose(items) + app.updateQuality() + assertAll( + { assertEquals(itemName, app.items[0].name) }, + { assertEquals(expectedQuality, app.items[0].quality) }, + { assertEquals(expectedSellIn, app.items[0].sellIn) } + ) + } + + class GildedRoseArgumentsProvider : ArgumentsProvider { + override fun provideArguments(context: ExtensionContext): Stream { + return Stream.of( + of(Item("+5 Dexterity Vest", 10, 20), 19, 9), + of(Item("Aged Brie", 2, 0), 1, 1), + of(Item("Elixir of the Mongoose", 5, 7), 6, 4), + of(Item("Sulfuras, Hand of Ragnaros", 0, 80), 80, 0), + of(Item("Sulfuras, Hand of Ragnaros", -1, 80), 80, -1), + of(Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), 21, 14), + of(Item("Backstage passes to a TAFKAL80ETC concert", 10, 49), 50, 9), + of(Item("Backstage passes to a TAFKAL80ETC concert", 5, 49), 50, 4), + // this conjured item does not work properly yet + // of(Item("Conjured Mana Cake", 3, 6), 5, 2), // TODO: enabled and fix after refactor + ) + } + } + }