zcash-android-wallet-sdk/demo-app/src/androidTest/java/cash/z/wallet/sdk/sample/demoapp/model/ZecStringExtTest.kt

170 lines
6.8 KiB
Kotlin

package cash.z.wallet.sdk.sample.demoapp.model
import androidx.test.filters.SmallTest
import cash.z.ecc.android.sdk.demoapp.R
import cash.z.ecc.android.sdk.demoapp.model.ZecStringExt
import cash.z.wallet.sdk.sample.demoapp.fixture.MonetarySeparatorsFixture
import cash.z.wallet.sdk.sample.demoapp.ui.common.getStringResourceWithArgs
import org.junit.Test
import kotlin.test.assertFalse
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
class ZecStringExtTest {
companion object {
private val EN_US_SEPARATORS = MonetarySeparatorsFixture.new()
}
private fun getContinuousRegex(): Regex {
return getStringResourceWithArgs(
R.string.co_electriccoin_zcash_zec_amount_regex_continuous_filter,
arrayOf(
EN_US_SEPARATORS.grouping,
EN_US_SEPARATORS.decimal
)
).toRegex()
}
private fun getConfirmRegex(): Regex {
return getStringResourceWithArgs(
R.string.co_electriccoin_zcash_zec_amount_regex_confirm_filter,
arrayOf(
EN_US_SEPARATORS.grouping,
EN_US_SEPARATORS.decimal
)
).toRegex()
}
@Test
@SmallTest
fun check_continuous_regex_validity() {
val regexString = getStringResourceWithArgs(
R.string.co_electriccoin_zcash_zec_amount_regex_continuous_filter,
arrayOf(
EN_US_SEPARATORS.grouping,
EN_US_SEPARATORS.decimal
)
)
assertNotNull(regexString)
val regexAmountChecker = regexString.toRegex()
regexAmountChecker.also {
assertNotNull(regexAmountChecker)
assertTrue(regexAmountChecker.pattern.isNotEmpty())
}
}
@Test
@SmallTest
fun check_confirm_regex_validity() {
val regexString = getStringResourceWithArgs(
R.string.co_electriccoin_zcash_zec_amount_regex_confirm_filter,
arrayOf(
EN_US_SEPARATORS.grouping,
EN_US_SEPARATORS.decimal
)
)
assertNotNull(regexString)
val regexAmountChecker = regexString.toRegex()
regexAmountChecker.also {
assertNotNull(regexAmountChecker)
assertTrue(regexAmountChecker.pattern.isNotEmpty())
}
}
@Test
@SmallTest
fun check_continuous_regex_functionality_valid_inputs() {
getContinuousRegex().also {
assertTrue(it.matches(""))
assertTrue(it.matches("123"))
assertTrue(it.matches("${EN_US_SEPARATORS.decimal}"))
assertTrue(it.matches("${EN_US_SEPARATORS.decimal}123"))
assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}"))
assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456"))
assertTrue(it.matches("123${EN_US_SEPARATORS.decimal}"))
assertTrue(it.matches("123${EN_US_SEPARATORS.decimal}456"))
assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456${EN_US_SEPARATORS.decimal}"))
assertTrue(it.matches("123${EN_US_SEPARATORS.grouping}456${EN_US_SEPARATORS.decimal}789"))
assertTrue(it.matches("1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}567${EN_US_SEPARATORS.decimal}00"))
}
}
@Test
@SmallTest
fun check_continuous_regex_functionality_invalid_inputs() {
getContinuousRegex().also {
assertFalse(it.matches("aaa"))
assertFalse(it.matches("123aaa"))
assertFalse(it.matches("${EN_US_SEPARATORS.grouping}"))
assertFalse(it.matches("${EN_US_SEPARATORS.grouping}123"))
assertFalse(it.matches("123${EN_US_SEPARATORS.grouping}${EN_US_SEPARATORS.grouping}"))
assertFalse(it.matches("123${EN_US_SEPARATORS.decimal}${EN_US_SEPARATORS.decimal}"))
assertFalse(it.matches("1${EN_US_SEPARATORS.grouping}2${EN_US_SEPARATORS.grouping}3"))
assertFalse(it.matches("1${EN_US_SEPARATORS.decimal}2${EN_US_SEPARATORS.decimal}3"))
assertFalse(it.matches("1${EN_US_SEPARATORS.decimal}2${EN_US_SEPARATORS.grouping}3"))
}
}
@Test
@SmallTest
fun check_confirm_regex_functionality_valid_inputs() {
getConfirmRegex().also {
assertTrue(it.matches("123"))
assertTrue(it.matches(".123"))
assertTrue(it.matches("1,234"))
assertTrue(it.matches("1,234,567,890"))
assertTrue(it.matches("1.2"))
assertTrue(it.matches("123.4"))
assertTrue(it.matches("1.234"))
assertTrue(it.matches("1,123."))
assertTrue(it.matches("1,234.567"))
assertTrue(it.matches("1,234,567.890"))
}
}
@Test
@SmallTest
fun check_confirm_regex_functionality_invalid_inputs() {
getContinuousRegex().also {
assertFalse(it.matches("+@#$~^&*="))
assertFalse(it.matches("asdf"))
assertFalse(it.matches(".."))
assertFalse(it.matches(","))
assertFalse(it.matches(",,"))
assertFalse(it.matches(",."))
assertFalse(it.matches(".,"))
assertFalse(it.matches(",123"))
assertFalse(it.matches("1,2,3"))
assertFalse(it.matches("1.2,3,4"))
assertFalse(it.matches("123,,456"))
assertFalse(it.matches("123..456"))
assertFalse(it.matches("1.234,567"))
assertFalse(it.matches("1.234,567,890"))
}
}
@Test
@SmallTest
fun check_digits_between_grouping_separators_valid_test() {
assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "123"))
assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234"))
assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}"))
assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}5"))
assertTrue(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}234${EN_US_SEPARATORS.grouping}567${EN_US_SEPARATORS.grouping}8"))
}
@Test
@SmallTest
fun check_digits_between_grouping_separators_invalid_test() {
assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}1${EN_US_SEPARATORS.grouping}2"))
assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}12${EN_US_SEPARATORS.grouping}3"))
assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}1234${EN_US_SEPARATORS.grouping}"))
assertFalse(ZecStringExt.checkFor3Digits(EN_US_SEPARATORS, "1${EN_US_SEPARATORS.grouping}123${EN_US_SEPARATORS.grouping}4${EN_US_SEPARATORS.grouping}"))
}
}