Skip to content

Commit c1540c8

Browse files
committed
Handle binary and int values in ValueSlot::copyValue
1 parent 75629c4 commit c1540c8

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

Fleece/Mutable/ValueSlot.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,13 @@ namespace fleece { namespace impl {
257257
case kStringTag:
258258
set(value->asString());
259259
break;
260+
case kBinaryTag:
261+
setData(value->asData());
262+
break;
263+
case kIntTag:
264+
if (value->isUnsigned()) set(value->asUnsigned());
265+
else set(value->asInt());
266+
break;
260267
case kFloatTag:
261268
set(value->asDouble());
262269
break;

Tests/API_ValueTests.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,3 +380,31 @@ TEST_CASE("API Mutable copy of Dict with undefined value", "[API]") {
380380
CHECK(copy.count() == 1);
381381
CHECK(copy["a"].type() == kFLUndefined);
382382
}
383+
384+
TEST_CASE("API Mutable copy of Dict with int", "[API]") {
385+
auto enc = fleece::Encoder();
386+
enc.beginDict();
387+
enc.writeKey("a");
388+
enc.writeInt(0xFFFFFFFFFFFFFF);
389+
enc.endDict();
390+
auto data = enc.finish();
391+
auto doc = Doc(data);
392+
auto copy = doc.root().asDict().mutableCopy(kFLCopyImmutables);
393+
CHECK(copy.count() == 1);
394+
CHECK(copy["a"].type() == kFLNumber);
395+
CHECK(copy["a"].asInt() == 0xFFFFFFFFFFFFFF);
396+
}
397+
398+
TEST_CASE("API Mutable copy of Dict with data", "[API]") {
399+
auto enc = fleece::Encoder();
400+
enc.beginDict();
401+
enc.writeKey("a");
402+
enc.writeData("aaaaaaaaaaaaaaaa"_sl);
403+
enc.endDict();
404+
auto data = enc.finish();
405+
auto doc = Doc(data);
406+
auto copy = doc.root().asDict().mutableCopy(kFLCopyImmutables);
407+
CHECK(copy.count() == 1);
408+
CHECK(copy["a"].type() == kFLData);
409+
CHECK(copy["a"].asData() == "aaaaaaaaaaaaaaaa"_sl);
410+
}

0 commit comments

Comments
 (0)