Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,30 @@ appVersionName = "0.3.1"
# SDK Versions
material3 = "1.9.0"
minSdk = "24"
compileSdk = "36"
targetSdk = "36"
compileSdk = "37"
targetSdk = "37"
javaVersion = "21"
jvmVersion = "JVM_21"

agp = "9.0.1"
agp = "9.2.1"
androidx-activity = "1.13.0"
androidx-appcompat = "1.7.1"
androidx-core = "1.18.0"
androidx-core = "1.19.0"
androidx-espresso = "3.7.0"
androidx-lifecycle = "2.10.0"
androidx-testExt = "1.3.0"
composeMultiplatform = "1.11.0-beta01"
composeMultiplatform = "1.11.1"
junit = "4.13.2"
kotlin = "2.3.20"
kotlinx-coroutines = "1.10.2"
kotlinStdlib = "2.3.20"
kotlin = "2.4.0"
kotlinx-coroutines = "1.11.0"
kotlinStdlib = "2.4.0"
runner = "1.7.0"
core = "1.7.0"
maven-publish = "0.36.0"
kotlinx-datetime = "0.7.1"
kotlinx-serialization = "1.10.0"
kotlinx-datetime = "0.8.0"
kotlinx-serialization = "1.11.0"
cedar-logging = "0.2.2"
deci = "0.2.0"
deci = "0.2.1"

[libraries]
androidx-rules = { module = "androidx.test:rules", version.ref = "runner" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
891 changes: 494 additions & 397 deletions kotlin-js-store/yarn.lock

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.kimplify.kurrency
package org.kimplify.kurrency.compose

import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
Expand All @@ -7,6 +7,9 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import org.kimplify.kurrency.CurrencyStyle
import org.kimplify.kurrency.ExperimentalKurrency
import org.kimplify.kurrency.Kurrency
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty

Expand Down Expand Up @@ -116,7 +119,6 @@ class CurrencyState(
* @param currencyCode New ISO 4217 currency code
*/
fun updateCurrency(currencyCode: String) {
KurrencyLog.d { "Updating currency: $currencyCode" }
this.currencyCode = currencyCode
}

Expand All @@ -126,7 +128,6 @@ class CurrencyState(
* @param newAmount New amount as a string
*/
fun updateAmount(newAmount: String) {
KurrencyLog.d { "Updating amount: $newAmount" }
amount = newAmount
}

Expand All @@ -140,7 +141,6 @@ class CurrencyState(
* @param newAmount New amount as a string
*/
fun updateCurrencyAndAmount(currencyCode: String, newAmount: String) {
KurrencyLog.d { "Updating currency and amount: currency=$currencyCode, amount=$newAmount" }
this.currencyCode = currencyCode
amount = newAmount
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
@file:OptIn(ExperimentalKurrency::class)

package org.kimplify.kurrency
package org.kimplify.kurrency.compose

import org.kimplify.kurrency.CurrencyStyle
import org.kimplify.kurrency.ExperimentalKurrency
import org.kimplify.kurrency.KurrencyError
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
Expand Down
12 changes: 5 additions & 7 deletions kurrency-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,18 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.androidKotlinMultiplatformLibrary)
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.kotlinSerialization)
alias(libs.plugins.maven.publish)
}

kotlin {
androidLibrary {
android {
namespace = "org.kimplify.kurrency.core"
compileSdk = libs.versions.compileSdk.get().toInt()
minSdk = libs.versions.minSdk.get().toInt()

withDeviceTest {
instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
execution = "ANDROIDX_TEST_ORCHESTRATOR"
}
withHostTest {
isIncludeAndroidResources = true
Expand All @@ -40,7 +37,7 @@ kotlin {
outputModuleName.set("Kurrency")
}

js(IR) {
js {
browser()
nodejs()
}
Expand All @@ -57,7 +54,6 @@ kotlin {

sourceSets {
commonMain.dependencies {
implementation(libs.runtime)
implementation(libs.cedar.logging)
implementation(libs.kotlinx.serialization.json)
}
Expand All @@ -71,7 +67,9 @@ kotlin {
implementation(libs.androidx.core.ktx)
}

androidInstrumentedTest.dependencies {
// Device-test source set is `androidDeviceTest` (src/androidDeviceTest);
// no type-safe accessor is generated for it, so configure deps via getByName.
getByName("androidDeviceTest").dependencies {
implementation(libs.androidx.testExt.junit)
implementation(libs.androidx.runner)
implementation(libs.androidx.rules)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.kimplify.kurrency

import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.runner.RunWith
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue

/**
* Regression test for issue #10 on Android (java.text.NumberFormat / ICU backed):
* JPY has 0 fraction digits and must not show decimals under a non-JP locale.
*/
@RunWith(AndroidJUnit4::class)
class JpyFractionDigitsTestInstrumented {

@Test
fun formatCurrencyStyle_jpy_nonJapaneseLocale_hasNoDecimalDigits() {
val formatter = CurrencyFormatter(KurrencyLocale.US)
val result = formatter.formatCurrencyStyleResult("1234", "JPY")
assertTrue(result.isSuccess, "Formatting should succeed")
val formatted = result.getOrThrow()
assertFalse(
Regex("""\.\d""").containsMatchIn(formatted),
"JPY must not show decimal places under a non-JP locale: $formatted"
)
assertTrue(formatted.contains("1") && formatted.contains("234"), "Expected digits in: $formatted")
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.kimplify.kurrency

import android.icu.text.CompactDecimalFormat
import android.icu.text.DecimalFormat
import android.icu.text.NumberFormat
import android.icu.util.Currency
import org.kimplify.kurrency.extensions.normalizeAmount
import java.math.BigDecimal
import java.text.DecimalFormat
import java.text.NumberFormat
import java.util.Locale

actual class CurrencyFormatterImpl actual constructor(kurrencyLocale: KurrencyLocale) : CurrencyFormat {
Expand Down Expand Up @@ -97,11 +97,13 @@ actual class CurrencyFormatterImpl actual constructor(kurrencyLocale: KurrencyLo
locale: Locale,
currencyCode: String
): NumberFormat = NumberFormat.getCurrencyInstance(locale).apply {
currency = java.util.Currency.getInstance(currencyCode)
currency = Currency.getInstance(currencyCode.uppercase())
}
}

private val availableCurrencyCodes: Set<String> by lazy {
java.util.Currency.getAvailableCurrencies().mapTo(HashSet()) { it.currencyCode }
}

actual fun isValidCurrency(currencyCode: String): Boolean =
runCatching {
java.util.Currency.getInstance(currencyCode.uppercase()) != null
}.getOrDefault(false)
currencyCode.uppercase() in availableCurrencyCodes
Loading
Loading