public void ShouldGenerateDeltasForMessagesInList()
        {
            var list = new SimpleDeltaMessageList();

            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "hello"
            });
            list.ClearEvents();

            list.TestBar[0].H = "world";

            var root = AssertGenerated(list);
            var e    = root.Events[0];

            Assert.Equal(EventData.ActionOneofCase.ListEvent, e.ActionCase);
            AssertPath(e, new[] { 11 });
            var le = e.ListEvent;

            Assert.Equal(ListAction.UpdateList, le.ListAction);

            Assert.Equal(EventData.ActionOneofCase.Set, le.EventData.ActionCase);
            AssertPath(le.EventData, new[] { 1 });
        }
        public void ShouldApplyEventsDeterministicallyMessageList()
        {
            var list = new SimpleDeltaMessageList();

            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "hello"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "world"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "bad"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "bad_index"
            });
            list.TestBar[1] = new SimpleListDeltaMessage {
                H = "worlds"
            };
            list.TestBar.Insert(1, new SimpleListDeltaMessage {
                H = "all"
            });
            list.TestBar.Remove(new SimpleListDeltaMessage {
                H = "bad"
            });
            list.TestBar.RemoveAt(3);
            list.TestBar.Clear();
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "hello"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "world"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "bad"
            });
            list.TestBar.Add(new SimpleListDeltaMessage {
                H = "bad_index"
            });
            list.TestBar[1] = new SimpleListDeltaMessage {
                H = "worlds"
            };
            list.TestBar.Insert(1, new SimpleListDeltaMessage {
                H = "all"
            });
            list.TestBar.Remove(new SimpleListDeltaMessage {
                H = "bad"
            });
            list.TestBar.RemoveAt(3);

            var root    = list.PeekEvents();
            var newList = new SimpleDeltaMessageList();

            newList.ApplyEvents(root);

            Assert.Equal(list, newList);
            Assert.Equal(3, newList.TestBar.Count);
            Assert.Equal(new SimpleListDeltaMessage {
                H = "hello"
            }, newList.TestBar[0]);
            Assert.Equal(new SimpleListDeltaMessage {
                H = "all"
            }, newList.TestBar[1]);
            Assert.Equal(new SimpleListDeltaMessage {
                H = "worlds"
            }, newList.TestBar[2]);
        }