Ejemplo n.º 1
0
        public void CanAutoMoveWhenHittingData()
        {
            var buffer   = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
            var model    = new PokemonModel(buffer);
            var viewPort = new ViewPort("test.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

            viewPort.SelectionStart = new Point(8, 0);
            viewPort.Edit("A1 B3 64 18 <tom>");
            viewPort.SelectionStart = new Point(0, 0);
            viewPort.Edit("^tom\"\" \"Some really long string\"");

            // the run was moved
            var run = model.GetNextRun(0x10);

            Assert.IsType <PCSRun>(run);
            Assert.Equal(24, run.Length);

            // the original data is now cleared
            Assert.Equal(0xFF, model[0]);
            Assert.Equal(0xFF, model[1]);
            Assert.Equal(0xFF, model[2]);
            Assert.Equal(0xFF, model[3]);

            // pointer should be updated
            Assert.Equal(run.Start, model.ReadPointer(0xC));
        }
Ejemplo n.º 2
0
        public void UnmappedPointerInMetadata_WriteAnchor_ModelUpdates()
        {
            var pointers = new[] { new StoredUnmappedPointer(0x20, "name") };
            var metadata = new StoredMetadata(unmappedPointers: pointers);

            var model = new PokemonModel(new byte[0x200], metadata, Singletons);

            model.ObserveAnchorWritten(Token, "name", new NoInfoRun(0x80));

            Assert.Equal(0x80, model.ReadPointer(0x20));
        }
Ejemplo n.º 3
0
        public void UndoCanHandleNameMove()
        {
            var buffer   = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
            var model    = new PokemonModel(buffer);
            var viewPort = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

            // operation 1
            viewPort.Edit("<bob> 03 08 24 16 <bob>");

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

            Assert.Equal(0x10, model.ReadPointer(0x00));
            Assert.Equal("bob", ((Pointer)viewPort[0, 0].Format).DestinationName);

            // undo operation 2
            viewPort.Undo.Execute();
            Assert.Equal(Pointer.NULL, model.ReadPointer(0x00));
            Assert.Equal("bob", ((Pointer)viewPort[0, 0].Format).DestinationName);

            // operation 3
            viewPort.SelectionStart = new Point(0, 2);
            viewPort.Edit("^bob ");

            Assert.Equal(0x20, model.ReadPointer(0x00));
            Assert.Equal("bob", ((Pointer)viewPort[0, 0].Format).DestinationName);

            // undo operation 3
            viewPort.Undo.Execute();
            Assert.Equal(Pointer.NULL, model.ReadPointer(0x00));
            Assert.Equal("bob", ((Pointer)viewPort[0, 0].Format).DestinationName);
        }
Ejemplo n.º 4
0
        public void UndoWorksAfterMidPointerEdit()
        {
            var buffer   = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
            var model    = new PokemonModel(buffer);
            var viewPort = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

            viewPort.Edit("<000100>");
            viewPort.SelectionStart = new Point(1, 0);
            viewPort.Edit("<000180>");
            viewPort.Undo.Execute();

            Assert.Equal(0x000100, model.ReadPointer(0));
        }
Ejemplo n.º 5
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
        }