Ejemplo n.º 1
0
        public void CanRemovePointerToWithinArray()
        {
            var data        = new byte[0x200];
            var changeToken = new ModelDelta();

            // arrange: setup data with a bunch of pointers pointing into an array of strings
            var model = new PokemonModel(data);

            model.WritePointer(changeToken, 0x00, 0x80);
            model.ObserveRunWritten(changeToken, new PointerRun(0x00));
            model.WritePointer(changeToken, 0x08, 0x84);
            model.ObserveRunWritten(changeToken, new PointerRun(0x08));
            model.WritePointer(changeToken, 0x10, 0x88);
            model.ObserveRunWritten(changeToken, new PointerRun(0x10));
            model.WritePointer(changeToken, 0x18, 0x8C);
            model.ObserveRunWritten(changeToken, new PointerRun(0x18));

            // arrange: setup the array of strings
            WriteStrings(data, 0x80, "cat", "bat", "hat", "sat");
            var existingAnchor = model.GetNextAnchor(0x80);

            ArrayRun.TryParse(model, "^[name\"\"4]4", 0x80, existingAnchor.PointerSources, out var arrayRun);
            model.ObserveAnchorWritten(changeToken, "sample", arrayRun);

            // act: clear the pointer
            model.ClearFormat(changeToken, 0x08, 4);

            // assert: array doesn't have pointer anymore
            var array = (ArrayRun)model.GetNextAnchor(0x80);

            Assert.Empty(array.PointerSourcesForInnerElements[1]);
        }
Ejemplo n.º 2
0
        public void FormatClearDoesNotClearAnchorIfUnnamedAnchorIsAtStartOfClear()
        {
            var buffer = new byte[0x200];
            var model  = new PokemonModel(buffer);
            var token  = new ModelDelta();

            model.WritePointer(token, 0, 0x10);
            model.ObserveRunWritten(token, new PointerRun(0));
            model.ClearFormat(token, 0x10, 1);

            Assert.Equal(0x10, model.GetNextRun(0x10).Start);
        }
Ejemplo n.º 3
0
        public void ClearingAPointerAlsoRemovesItsAnchor()
        {
            var data     = new byte[0x200];
            var model    = new PokemonModel(data);
            var viewPort = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

            viewPort.Edit("<000100>");
            model.ClearFormat(new ModelDelta(), 0x00, 4);

            Assert.NotInRange(model.GetNextRun(0x00).Start, 0, data.Length);
        }
Ejemplo n.º 4
0
        public void WritingOverAnAnchorDeletesThatAnchor()
        {
            var buffer = new byte[0x100];
            var model  = new PokemonModel(buffer);
            var token  = new ModelDelta();

            model.WritePointer(token, 16, 32);
            model.ObserveRunWritten(token, new PointerRun(16));

            model.ClearFormat(token, 30, 4); // this format clear removes the anchor that was auto-generated from the pointer. Which means the data from before must not be a pointer.
            model.WritePointer(token, 30, 64);
            model.ObserveRunWritten(token, new PointerRun(30));

            Assert.Equal(30, model.GetNextRun(10).Start); // original pointer at 16 is no longer there. The new first data is the anchor at 30
            Assert.Equal(32, model.ReadPointer(16));      // but the data at 16 still looks like a pointer: only the format is gone
            Assert.Equal(64, model.GetNextRun(34).Start); // next data is the anchor from the pointer at 30
        }
Ejemplo n.º 5
0
        public void WritingAPointerOverlappingAPointerRemovesOriginalPointer()
        {
            var buffer = new byte[0x100];
            var model  = new PokemonModel(buffer);
            var token  = new ModelDelta();

            model.WritePointer(token, 16, 100);
            model.ObserveRunWritten(token, new PointerRun(16));
            Assert.Equal(16, model.GetNextRun(10).Start);
            Assert.Equal(16, model.GetNextRun(17).Start);
            Assert.Equal(16, model.GetNextRun(19).Start);
            Assert.Equal(100, model.GetNextRun(20).Start); // the reference at 100 has been added

            model.ClearFormat(token, 14, 4);
            model.WritePointer(token, 14, 200);
            model.ObserveRunWritten(token, new PointerRun(14));
            Assert.Equal(14, model.GetNextRun(10).Start);
            Assert.Equal(14, model.GetNextRun(15).Start);
            Assert.Equal(14, model.GetNextRun(16).Start);
            Assert.Equal(14, model.GetNextRun(17).Start);
            Assert.Equal(200, model.GetNextRun(18).Start); // the reference at 100 has been erased, and there's a new one at 200
        }
Ejemplo n.º 6
0
        public void PointerCanPointToNameAfterThatNameGetsDeleted()
        {
            var buffer   = new byte[0x100];
            var model    = new PokemonModel(buffer);
            var viewPort = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };
            var token = new ModelDelta();

            viewPort.SelectionStart = new Point(0, 1);
            viewPort.Edit("^bob ");
            viewPort.SelectionStart = new Point(0, 2);
            viewPort.Edit("<bob>");
            viewPort.SelectionStart = new Point(0, 1);

            // as an alternative to being able to delete an anchor from the viewPort,
            // just edit the model directly and then scroll to force the viewPort to refresh
            model.ClearFormat(token, 0x10, 1);
            viewPort.ScrollValue = 1;
            viewPort.ScrollValue = 0;

            Assert.Equal("bob", ((Pointer)viewPort[0, 2].Format).DestinationName);
        }