SubwayTooter-Android-App/base/src/androidTest/java/jp/juggler/ByteRangeTest.kt

76 lines
2.8 KiB
Kotlin

package jp.juggler
import jp.juggler.crypt.toByteRange
import jp.juggler.util.data.decodeBase64
import jp.juggler.util.data.encodeBase64
import jp.juggler.util.data.encodeBase64Url
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Test
import kotlin.io.encoding.Base64
import kotlin.io.encoding.ExperimentalEncodingApi
class ByteRangeTest {
/**
* ByteRangeや StringUtilsのBase64が、kotlin.io.encoding.Base64 の出力結果と一致するか調べる。
*/
@OptIn(ExperimentalEncodingApi::class)
@Test
fun testByteRangeBase64() {
for (len in 0..300) {
val src = ByteArray(len) { it.toByte() }
run {
val kotlinBase64UrlSafe = Base64.UrlSafe
// kotlin.io の Base64.UrlSafe は 末尾の = パディングを残すので後から除去する必要がある
val encodedByKotlinIo = kotlinBase64UrlSafe.encode(src).trimEnd { it=='=' }
// ByteRange().encodeBase64Url() はパディングを含まない
val encodeByByteRange = src.toByteRange().encodeBase64Url()
// StringUtils の encodeBase64Url() はパディングを含まない
val encodeByStringUtils = src.encodeBase64Url()
// もちろんStringUtilsの decodeBase64() でデコードできる
val decodedByUtils = encodeByStringUtils.decodeBase64()
assertEquals(
"len=$len",
encodedByKotlinIo,
encodeByByteRange,
)
assertEquals(
"len=$len",
encodedByKotlinIo,
encodeByStringUtils,
)
assertArrayEquals(
"len=$len encoded=$encodeByStringUtils",
src,
decodedByUtils,
)
}
run {
val kotinBase64 = Base64.Default
val encodedByKotlinIo = kotinBase64.encode(src)
val encodeByByteRange = src.toByteRange().encodeBase64()
val encodeByUtils = src.encodeBase64()
val decodedByUtils = encodeByUtils.decodeBase64()
assertEquals(
"len=$len",
encodedByKotlinIo,
encodeByByteRange,
)
assertEquals(
"len=$len",
encodedByKotlinIo,
encodeByUtils,
)
assertArrayEquals(
"len=$len",
src,
decodedByUtils,
)
}
}
}
}