From 46f26ddfbf79da0bd8d3aaf0a9e3b916f307c4de Mon Sep 17 00:00:00 2001 From: Gabriel Terwesten Date: Wed, 28 Sep 2022 15:05:34 +0200 Subject: [PATCH] Handle binary and int values in `ValueSlot::copyValue` --- Fleece/Mutable/ValueSlot.cc | 7 +++++++ Tests/API_ValueTests.cc | 29 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/Fleece/Mutable/ValueSlot.cc b/Fleece/Mutable/ValueSlot.cc index a21d7fbd..5531b672 100644 --- a/Fleece/Mutable/ValueSlot.cc +++ b/Fleece/Mutable/ValueSlot.cc @@ -256,6 +256,13 @@ namespace fleece { namespace impl { case kStringTag: set(value->asString()); break; + case kBinaryTag: + setData(value->asData()); + break; + case kIntTag: + if (value->isUnsigned()) set(value->asUnsigned()); + else set(value->asInt()); + break; case kFloatTag: set(value->asDouble()); break; diff --git a/Tests/API_ValueTests.cc b/Tests/API_ValueTests.cc index 8047e9ba..2583ad11 100644 --- a/Tests/API_ValueTests.cc +++ b/Tests/API_ValueTests.cc @@ -366,3 +366,32 @@ TEST_CASE("API MutableDict item bool conversion", "[API]") { } CHECK(dict.toJSONString() == "{\"a_key\":6}"); } + + +TEST_CASE("API Mutable copy of Dict with int", "[API]") { + auto enc = fleece::Encoder(); + enc.beginDict(); + enc.writeKey("a"); + enc.writeInt(0xFFFFFFFFFFFFFF); + enc.endDict(); + auto data = enc.finish(); + auto doc = Doc(data); + auto copy = doc.root().asDict().mutableCopy(kFLCopyImmutables); + CHECK(copy.count() == 1); + CHECK(copy["a"].type() == kFLNumber); + CHECK(copy["a"].asInt() == 0xFFFFFFFFFFFFFF); +} + +TEST_CASE("API Mutable copy of Dict with data", "[API]") { + auto enc = fleece::Encoder(); + enc.beginDict(); + enc.writeKey("a"); + enc.writeData("aaaaaaaaaaaaaaaa"_sl); + enc.endDict(); + auto data = enc.finish(); + auto doc = Doc(data); + auto copy = doc.root().asDict().mutableCopy(kFLCopyImmutables); + CHECK(copy.count() == 1); + CHECK(copy["a"].type() == kFLData); + CHECK(copy["a"].asData() == "aaaaaaaaaaaaaaaa"_sl); +}