未验证 提交 b7d56c2f 编写于 作者: S sunLightLeaf 提交者: GitHub

Handle empty bulk string (#835)

上级 ca531f1f
......@@ -251,7 +251,6 @@ object Output {
protected def tryDecode(respValue: RespValue): Option[A] =
respValue match {
case RespValue.NullBulkString | RespValue.NullArray => None
case RespValue.BulkString(value) if value.isEmpty => None
case other => Some(output.tryDecode(other))
}
}
......
......@@ -134,15 +134,26 @@ object OutputSpec extends BaseSpec {
}
),
suite("optional")(
test("extract None") {
test("extract null bulk string") {
for {
res <- ZIO.attempt(OptionalOutput(UnitOutput).unsafeDecode(RespValue.NullBulkString))
} yield assert(res)(isNone)
},
test("extract null array") {
for {
res <- ZIO.attempt(OptionalOutput(ArbitraryOutput[String]()).unsafeDecode(RespValue.NullArray))
} yield assert(res)(isNone)
},
test("extract some") {
for {
res <- ZIO.attempt(OptionalOutput(UnitOutput).unsafeDecode(RespValue.SimpleString("OK")))
} yield assert(res)(isSome(isUnit))
},
test("extract empty bulk string") {
for {
res <-
ZIO.attempt(OptionalOutput(ArbitraryOutput[String]()).unsafeDecode(RespValue.BulkString(Chunk.empty)))
} yield assert(res)(isSome(equalTo("")))
}
),
suite("scan")(
......
......@@ -982,13 +982,21 @@ trait StringsSpec extends BaseSpec {
result <- redis.get(key).returning[String]
} yield assert(result)(isSome(equalTo("value")))
},
test("emtpy string") {
test("non existent string") {
for {
redis <- ZIO.service[Redis]
key <- uuid
result <- redis.get(key).returning[String]
} yield assert(result)(isNone)
},
test("empty string") {
for {
redis <- ZIO.service[Redis]
key <- uuid
_ <- redis.set(key, "")
result <- redis.get(key).returning[String]
} yield assert(result)(isSome(equalTo("")))
},
test("error when not string") {
for {
redis <- ZIO.service[Redis]
......@@ -1061,7 +1069,7 @@ trait StringsSpec extends BaseSpec {
key <- uuid
_ <- redis.set(key, "value")
substr <- redis.getRange(key, 10 to 15).returning[String]
} yield assert(substr)(isNone)
} yield assert(substr)(isSome(equalTo("")))
},
test("with inverse range of non-empty string") {
for {
......@@ -1069,7 +1077,7 @@ trait StringsSpec extends BaseSpec {
key <- uuid
_ <- redis.set(key, "value")
substr <- redis.getRange(key, 15 to 3).returning[String]
} yield assert(substr)(isNone)
} yield assert(substr)(isSome(equalTo("")))
},
test("with negative range end from non-empty string") {
for {
......@@ -1092,7 +1100,7 @@ trait StringsSpec extends BaseSpec {
redis <- ZIO.service[Redis]
key <- uuid
substr <- redis.getRange(key, 1 to 3).returning[String]
} yield assert(substr)(isNone)
} yield assert(substr)(isSome(equalTo("")))
},
test("error when not string") {
for {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册