Skip to content

Commit fcf127c

Browse files
committed
test(common): decodeBinaryString, allowing ISO8859-1 or Base64
1 parent 0fb27f2 commit fcf127c

File tree

2 files changed

+12
-32
lines changed

2 files changed

+12
-32
lines changed

src/commonTest/kotlin/space/iseki/bencoding/Meta.kt

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,10 @@
11
package space.iseki.bencoding
22

3-
import kotlinx.serialization.KSerializer
43
import kotlinx.serialization.SerialName
54
import kotlinx.serialization.Serializable
6-
import kotlinx.serialization.decodeFromByteArray
7-
import kotlinx.serialization.descriptors.SerialDescriptor
8-
import kotlinx.serialization.descriptors.serialDescriptor
9-
import kotlinx.serialization.encoding.Decoder
10-
import kotlinx.serialization.encoding.Encoder
11-
import kotlin.collections.contentEquals
12-
import kotlin.collections.contentHashCode
135
import kotlin.io.encoding.Base64
146
import kotlin.io.encoding.ExperimentalEncodingApi
157
import kotlin.js.ExperimentalJsExport
16-
import kotlin.js.JsExport
17-
import kotlin.let
18-
import kotlin.test.Test
198

209
@OptIn(ExperimentalJsExport::class)
2110
@Serializable
@@ -28,29 +17,12 @@ data class Meta(
2817
data class Info(
2918
val name: String,
3019
@SerialName("piece length") val pieceLength: Int,
31-
val pieces: Pieces,
32-
)
33-
34-
@Serializable(Pieces.Serializer::class)
35-
class Pieces(private val arr: ByteArray) {
36-
override fun toString(): String = "Pieces(size=${arr.size / 20})"
37-
override fun hashCode(): Int = arr.contentHashCode()
38-
override fun equals(other: Any?): Boolean = (other as? Pieces)?.let { it.arr.contentEquals(arr) } ?: false
39-
40-
object Serializer : KSerializer<Pieces> {
41-
override val descriptor: SerialDescriptor
42-
get() = serialDescriptor<String>()
43-
44-
override fun deserialize(decoder: Decoder): Pieces =
45-
(decoder as BencodeDecoder).decodeByteArray().let(::Pieces)
46-
47-
override fun serialize(encoder: Encoder, value: Pieces) {
48-
TODO("Not yet implemented")
49-
}
50-
20+
@BinaryString(BinaryStringStrategy.ISO88591) val pieces: String,
21+
) {
22+
override fun toString(): String {
23+
return "Info(name='$name', pieceLength=$pieceLength, pieces=(hash)${pieces.hashCode()})"
5124
}
5225
}
53-
5426
companion object {
5527

5628
@OptIn(ExperimentalEncodingApi::class)

src/commonTest/kotlin/space/iseki/bencoding/MetaTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package space.iseki.bencoding
22

33
import kotlin.test.Test
4+
import kotlin.test.assertEquals
45

56
class MetaTest {
67
@Test
@@ -11,7 +12,14 @@ class MetaTest {
1112

1213
@Test
1314
fun decodeTest() {
15+
val bencode = Bencode {
16+
floatStrategy = FloatNumberStrategy.Disallow
17+
doubleStrategy = FloatNumberStrategy.Disallow
18+
binaryStringStrategy = BinaryStringStrategy.Base64 // but it's configured to ISO8859-1 on the pieces field
19+
}
1420
val meta = Bencode.decodeFromByteArray<Meta>(Meta.serializer(), Meta.sampleTorrent)
21+
println(meta.info.pieces.length)
1522
println(meta)
23+
assertEquals(0, meta.info.pieces.length % 20)
1624
}
1725
}

0 commit comments

Comments
 (0)