@@ -4,6 +4,7 @@ import com.google.protobuf.kotlin.toByteStringUtf8
4
4
import dev.yorkie.api.v1.jSONElement
5
5
import dev.yorkie.api.v1.operation
6
6
import dev.yorkie.core.PresenceChange
7
+ import dev.yorkie.document.Document
7
8
import dev.yorkie.document.change.Change
8
9
import dev.yorkie.document.change.ChangeID
9
10
import dev.yorkie.document.change.ChangePack
@@ -25,6 +26,9 @@ import dev.yorkie.document.crdt.RgaTreeList
25
26
import dev.yorkie.document.crdt.RgaTreeSplit
26
27
import dev.yorkie.document.crdt.RgaTreeSplitNodeID
27
28
import dev.yorkie.document.crdt.RgaTreeSplitPos
29
+ import dev.yorkie.document.json.JsonObject
30
+ import dev.yorkie.document.json.JsonTree
31
+ import dev.yorkie.document.json.TreeBuilder.element
28
32
import dev.yorkie.document.operation.AddOperation
29
33
import dev.yorkie.document.operation.EditOperation
30
34
import dev.yorkie.document.operation.IncreaseOperation
@@ -44,6 +48,7 @@ import dev.yorkie.document.time.TimeTicket.Companion.MaxTimeTicket
44
48
import dev.yorkie.util.IndexTreeNode.Companion.DEFAULT_ROOT_TYPE
45
49
import java.util.Date
46
50
import kotlin.test.assertEquals
51
+ import kotlinx.coroutines.test.runTest
47
52
import org.junit.Assert.assertThrows
48
53
import org.junit.Test
49
54
@@ -413,6 +418,31 @@ class ConverterTest {
413
418
}
414
419
}
415
420
421
+ @Test
422
+ fun `should encode and decode tree properly` () = runTest {
423
+ val document = Document (Document .Key (" " ))
424
+ document.updateAsync { root, _ ->
425
+ root.setNewTree(
426
+ " t" ,
427
+ element(" r" ) {
428
+ element(" p" ) { text { " 12" } }
429
+ element(" p" ) { text { " 34" } }
430
+ },
431
+ ).editByPath(listOf (0 , 1 ), listOf (1 , 1 ))
432
+ }.await()
433
+
434
+ fun JsonObject.tree () = getAs<JsonTree >(" t" )
435
+
436
+ assertEquals(" <r><p>14</p></r>" , document.getRoot().tree().toXml())
437
+ assertEquals(4 , document.getRoot().tree().size)
438
+
439
+ val tree = document.getRoot().target[" t" ]
440
+ val bytes = tree.toByteString()
441
+ val obj = bytes.toCrdtTree()
442
+ assertEquals(document.getRoot().tree().target.nodeSize, obj.nodeSize)
443
+ assertEquals(document.getRoot().tree().size, obj.size)
444
+ }
445
+
416
446
private class TestOperation (
417
447
override val parentCreatedAt : TimeTicket ,
418
448
override var executedAt : TimeTicket ,
0 commit comments