Beispiel #1
0
        public void TestYMapSetsYMap()
        {
            Init(users: 2);
            var map0 = Maps[Users[0]];
            var map  = new YMap();

            map0.Set("map", map);

            Assert.AreEqual(map, map0.Get("map"));
            map.Set("one", 1);
            Assert.AreEqual(1, map.Get("one"));

            CompareUsers();
        }
Beispiel #2
0
        public void TestUndoDeleteFilter()
        {
            Init(users: 3);
            var array0      = Arrays[Users[0]];
            var undoManager = new UndoManager(new[] { array0 }, 500, it => !(it is Item item) || (item.Content is ContentType ct && ct.Type._map.Count == 0), new HashSet <object> {
                null
            });
            var map0 = new YMap();

            map0.Set("hi", 1);
            var map1 = new YMap();

            array0.Insert(0, new[] { map0, map1 });
            undoManager.Undo();
            Assert.AreEqual(1, array0.Length);
            Assert.AreEqual(1, (array0.Get(0) as YMap).Keys().Count());
        }
Beispiel #3
0
        public void TestUndoMap()
        {
            Init(users: 3);
            var map0        = Maps[Users[0]];
            var map1        = Maps[Users[1]];
            var undoManager = new UndoManager(map0);

            map0.Set("a", 1);
            undoManager.Undo();
            Assert.IsFalse(map0.ContainsKey("a"));
            undoManager.Redo();
            Assert.AreEqual(1, map0.Get("a"));

            // Test subtypes and whether it can restore the whole type.
            var subType = new YMap();

            map0.Set("a", subType);
            subType.Set("x", 42);
            Assert.AreEqual(42, (map0.Get("a") as YMap)?.Get("x"));
            undoManager.Undo();
            Assert.AreEqual(1, map0.Get("a"));
            undoManager.Redo();
            Assert.AreEqual(42, (map0.Get("a") as YMap)?.Get("x"));
            Connector.SyncAll();

            // If content is overwritten by another user, undo operations should be skipped.
            map1.Set("a", 44);
            Connector.SyncAll();
            undoManager.Undo();
            Assert.AreEqual(44, map0.Get("a"));
            undoManager.Redo();
            Assert.AreEqual(44, map0.Get("a"));

            // Test setting value multiple times.
            map0.Set("b", "initial");
            undoManager.StopCapturing();
            map0.Set("b", "val1");
            map0.Set("b", "val2");
            undoManager.StopCapturing();
            undoManager.Undo();
            Assert.AreEqual("initial", map0.Get("b"));
        }
Beispiel #4
0
        public void TestNewChildDoesNotEmitEventInTransaction()
        {
            Init(users: 2);

            var array0 = Arrays[Users[0]];
            var fired  = false;

            Users[0].Transact(tr =>
            {
                var newMap           = new YMap();
                newMap.EventHandler += (s, e) =>
                {
                    fired = true;
                };

                array0.Insert(0, new object[] { newMap });
                newMap.Set("tst", 42);
            });

            Assert.IsFalse(fired, "Event does not trigger");
        }
Beispiel #5
0
        public void TestIteratingArrayContainingTypes()
        {
            var       y        = new YDoc();
            var       arr      = y.GetArray("arr");
            const int numItems = 10;

            for (int i = 0; i < numItems; i++)
            {
                var map = new YMap();
                map.Set("value", i);
                arr.Add(new[] { map });
            }

            int cnt = 0;

            foreach (var item in arr)
            {
                Assert.AreEqual(cnt++, (item as YMap).Get("value"));
            }

            y.Destroy();
        }
Beispiel #6
0
        public void TestUndoArray()
        {
            Init(users: 3);
            var array0      = Arrays[Users[0]];
            var array1      = Arrays[Users[1]];
            var undoManager = new UndoManager(array0);

            array0.Insert(0, new object[] { 1, 2, 3 });
            array1.Insert(9, new object[] { 4, 5, 6 });
            Connector.SyncAll();
            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, (ICollection)array0.ToArray());
            undoManager.Undo();
            CollectionAssert.AreEqual(new[] { 4, 5, 6 }, (ICollection)array0.ToArray());
            undoManager.Redo();
            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, (ICollection)array0.ToArray());
            Connector.SyncAll();
            // User1 deletes [1]
            array1.Delete(0, 1);
            Connector.SyncAll();
            undoManager.Undo();
            CollectionAssert.AreEqual(new[] { 4, 5, 6 }, (ICollection)array0.ToArray());
            undoManager.Redo();
            CollectionAssert.AreEqual(new[] { 2, 3, 4, 5, 6 }, (ICollection)array0.ToArray());
            array0.Delete(0, 5);

            // Test nested structure.
            var ymap = new YMap();

            array0.Insert(0, new[] { ymap });
            Assert.AreEqual(0, (array0.Get(0) as YMap)?.Count);
            undoManager.StopCapturing();
            ymap.Set("a", 1);
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Get("a"));
            undoManager.Undo();
            Assert.AreEqual(0, (array0.Get(0) as YMap)?.Count);
            undoManager.Undo();
            CollectionAssert.AreEqual(new[] { 2, 3, 4, 5, 6 }, (ICollection)array0.ToArray());
            undoManager.Redo();
            Assert.AreEqual(0, (array0.Get(0) as YMap)?.Count);
            undoManager.Redo();
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Get("a"));
            Connector.SyncAll();
            (array1.Get(0) as YMap).Set("b", 2);
            Connector.SyncAll();
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Get("a"));
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Get("b"));
            undoManager.Undo();
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Get("b"));
            undoManager.Undo();
            CollectionAssert.AreEqual(new[] { 2, 3, 4, 5, 6 }, (ICollection)array0.ToArray());
            undoManager.Redo();
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Get("b"));
            undoManager.Redo();
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Count);
            Assert.AreEqual(1, (array0.Get(0) as YMap)?.Get("a"));
            Assert.AreEqual(2, (array0.Get(0) as YMap)?.Get("b"));
        }