-
Notifications
You must be signed in to change notification settings - Fork 143
/
ConverterSpec.scala
85 lines (64 loc) · 2.15 KB
/
ConverterSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package redis
import org.specs2.mutable.Specification
import akka.util.ByteString
import redis.protocol.{Bulk, RedisReply}
case class DumbClass(s1: String, s2: String)
object DumbClass {
implicit val byteStringFormatter: ByteStringFormatter[DumbClass] = new ByteStringFormatter[DumbClass] {
def serialize(data: DumbClass): ByteString = {
ByteString(data.s1 + "|" + data.s2)
}
def deserialize(bs: ByteString): DumbClass = {
val r = bs.utf8String.split('|').toList
DumbClass(r(0), r(1))
}
}
implicit val redisReplyDeserializer: RedisReplyDeserializer[DumbClass] = new RedisReplyDeserializer[DumbClass] {
override def deserialize: PartialFunction[RedisReply, DumbClass] = {
case Bulk(Some(bs)) => byteStringFormatter.deserialize(bs)
}
}
}
class ConverterSpec extends Specification {
import redis.ByteStringSerializer._
"ByteStringSerializer" should {
"String" in {
String.serialize("super string !") mustEqual ByteString("super string !")
}
"Short" in {
ShortConverter.serialize(123) mustEqual ByteString("123")
}
"Int" in {
IntConverter.serialize(123) mustEqual ByteString("123")
}
"Long" in {
LongConverter.serialize(123) mustEqual ByteString("123")
}
"Float" in {
FloatConverter.serialize(123.123f) mustEqual ByteString("123.123")
}
"Double" in {
DoubleConverter.serialize(123.123456) mustEqual ByteString("123.123456")
}
"Char" in {
CharConverter.serialize('a') mustEqual ByteString('a')
}
"Byte" in {
ByteConverter.serialize(123) mustEqual ByteString(123)
}
"ArrayByte" in {
ArrayByteConverter.serialize(Array[Byte](1, 2, 3)) mustEqual ByteString(Array[Byte](1, 2, 3))
}
"ByteString" in {
ByteStringConverter.serialize(ByteString("stupid")) mustEqual ByteString("stupid")
}
}
"ByteStringFormatter" should {
"DumbClass" in {
val dumb = DumbClass("aa", "bb")
val formatter = implicitly[ByteStringFormatter[DumbClass]]
formatter.serialize(dumb) mustEqual ByteString("aa|bb")
formatter.deserialize(ByteString("aa|bb")) mustEqual dumb
}
}
}