Exemple #1
0
 public ViewPortSaveTests()
 {
     fileSystem = new StubFileSystem {
         RequestNewName = (previousName, description, extensions) => { name = $"file.txt"; return(name); },
         TrySavePrompt  = loadedFile => { name = loadedFile.Name; return(true); },
     };
 }
Exemple #2
0
        public void StreamWithCustomEnd_CutPaste_DataUpdates()
        {
            SetFullModel(0xFF);
            var fileSystem = new StubFileSystem();

            Array.Copy(new byte[] { 2, 2, 2, 3, 3, 3, 0xFF, 0xFF, 0x00 }, Model.RawData, 9);
            ViewPort.Edit("^table[a. b. c.]!FFFF00 ");

            // cut
            ViewPort.SelectionStart = ViewPort.ConvertAddressToViewPoint(0);
            ViewPort.ExpandSelection(0, 0);
            ViewPort.Copy.Execute(fileSystem);
            ViewPort.Clear.Execute();

            // paste
            ViewPort.Goto.Execute(0x10);
            ViewPort.Edit(fileSystem.CopyText);

            var table = Model.GetTable("table");

            Assert.Equal(0x10, table.Start);
            Assert.Equal(2, table.ElementCount);
            Assert.Equal(3, table.ElementLength);
            Assert.Equal(9, table.Length);
        }
Exemple #3
0
        public void CanSaveAndLoadNamesAndFormats()
        {
            var buffer   = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
            var model    = new PokemonModel(buffer);
            var viewPort = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };
            StoredMetadata metadata   = null;
            var            fileSystem = new StubFileSystem {
                Save = file => true, SaveMetadata = (file, md) => { metadata = new StoredMetadata(md); return(true); }
            };


            viewPort.Edit("^bob\"\" \"Hello\"");
            viewPort.Save.Execute(fileSystem);

            var model2    = new PokemonModel(buffer, metadata);
            var viewPort2 = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

            Assert.Equal("bob", ((Anchor)viewPort2[0, 0].Format).Name);
        }
 public void StubFileSystemCoverage() 
 {
     StubFileSystem sf = new StubFileSystem();
     sf.Copy("asdf","asdf");
     sf.Save("asdf","Asdf");
     sf.Load("asdf");
     sf.FileExists("asdf");
     sf.DirectoryExists("asdf");
 }
Exemple #5
0
        public void StubFileSystemCoverage()
        {
            StubFileSystem sf = new StubFileSystem();

            sf.Copy("asdf", "asdf");
            sf.Save("asdf", "Asdf");
            sf.Load("asdf");
            sf.FileExists("asdf");
            sf.DirectoryExists("asdf");
        }
        public void CanCopyData()
        {
            var fileSystem = new StubFileSystem();

            ViewPort.Edit("Cafe Babe");
            ViewPort.SelectionStart = new Point(0, 0);
            ViewPort.SelectionEnd   = new Point(3, 0);
            ViewPort.Copy.Execute(fileSystem);

            Assert.Equal("CA FE BA BE", fileSystem.CopyText);
        }
Exemple #7
0
        public void CanDeepCopy()
        {
            ViewPort.Edit("^table[pointer<\"\">]1 @{ Hello World!\" @} @00 ");

            var fileSystem = new StubFileSystem();
            var menuItem   = ViewPort.GetContextMenuItems(ViewPort.SelectionStart).Single(item => item.Text == "Deep Copy");

            menuItem.Command.Execute(fileSystem);

            Assert.Equal(@"@!00(4) ^table[pointer<"""">]1 #""Hello World!""#, @{ ""Hello World!"" @}", fileSystem.CopyText);
        }
Exemple #8
0
        public void CanCopyPaste()
        {
            CreateSimpleRun();
            var fileSystem = new StubFileSystem();

            viewPort.SelectionStart = new Point(2, 0);
            viewPort.SelectionEnd   = new Point(4, 0);
            viewPort.Copy.Execute(fileSystem);

            Assert.Equal("Wind []", fileSystem.CopyText.value);
        }
        public void ZoomCanReset()
        {
            var fileSystem = new StubFileSystem();
            var editor     = new EditorViewModel(fileSystem);

            editor.ZoomLevel = 24;

            editor.ResetZoom.Execute();

            Assert.Equal(16, editor.ZoomLevel);
        }
Exemple #10
0
        public void FormattingChangesDoNotMakeFileDirty()
        {
            var buffer     = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
            var model      = new PokemonModel(buffer);
            var viewPort   = AutoSearchTests.NewViewPort("file.txt", model);
            var fileSystem = new StubFileSystem();

            viewPort.Edit("^bob ");

            Assert.True(viewPort.Save.CanExecute(fileSystem));
            Assert.DoesNotContain("*", viewPort.Name);
        }
Exemple #11
0
        public void RedoAvailable_Copy_CanRedo()
        {
            var fs = new StubFileSystem();

            ViewPort.Edit("<020> @20 @!put(FF) ^\"\" text @180 DEADBEEF");
            ViewPort.Undo.Execute();

            ViewPort.Goto.Execute(0x20);
            ViewPort.ExpandSelection(0, 0);
            ViewPort.Copy.Execute(fs);

            Assert.True(ViewPort.Redo.CanExecute(default));
Exemple #12
0
        public void NamelessAnchor_Copy_StillHasNoName()
        {
            var fs = new StubFileSystem();

            ViewPort.Edit("<100> @100 @!put(FF) ^\"\" text");

            ViewPort.ExpandSelection(0, 0);
            ViewPort.Copy.Execute(fs);

            Assert.Contains("misc", fs.CopyText.value);
            Assert.Equal("^\"\"", ViewPort.AnchorText);
        }
Exemple #13
0
        public void CanShortenPlmStream()
        {
            var fileSystem = new StubFileSystem();

            CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x100, "Punch", "Kick", "Bite", "Snarl", "Smile", "Cry");
            ViewPort.Edit("@00 FFFF @00 ^someMoves`plm` 3 Punch 5 Kick 7 Bite 11 Snarl ");

            ViewPort.Edit("@04 []");

            Assert.Equal(6, Model.GetNextRun(0).Length);
            Assert.Equal(new Point(6, 0), ViewPort.SelectionStart);
        }
        public void EditorAddsOpenedFilesToFileSystemWatch()
        {
            var    fileSystem = new StubFileSystem();
            string name       = null;

            fileSystem.AddListenerToFile = (fileName, action) => name = fileName;
            var editor = new EditorViewModel(fileSystem);

            editor.Open.Execute(new LoadedFile("InputFile.txt", new byte[0x200]));

            Assert.Equal("InputFile.txt", name);
        }
        public void FirstFileOpenAutomaticallySavesItsMetadata()
        {
            var fileSystem = new StubFileSystem();
            var editor     = new EditorViewModel(fileSystem);
            var saveCount  = 0;

            fileSystem.SaveMetadata = (fileName, data) => { saveCount += 1; return(true); };

            fileSystem.OpenFile = (type, exensions) => new LoadedFile("file.gba", new byte[0x200]);
            editor.Open.Execute();

            Assert.Equal(1, saveCount);
        }
        public void ViewPortReloadsIfNoLocalChangesWhenFileChanges()
        {
            var    fileSystem = new StubFileSystem();
            string file       = null;

            fileSystem.LoadFile = input => { file = input; return(new LoadedFile(input, new byte[] { 0x10, 0x20 })); };
            var viewPort = new ViewPort(new LoadedFile("file.txt", new byte[] { 0x00, 0x00 }));

            viewPort.ConsiderReload(fileSystem);

            Assert.Equal("file.txt", file);
            Assert.Equal(0x10, viewPort[0, 0].Value);
        }
Exemple #17
0
        public void CanCopyPlmStream()
        {
            var fileSystem = new StubFileSystem();

            CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x100, "Punch", "Kick", "Bite", "Snarl", "Smile", "Cry");
            ViewPort.Edit("@00 FFFF @00 ^someMoves`plm` 3 Punch 5 Kick 7 Bite 11 Snarl ");

            ViewPort.SelectionStart = new Point(2, 0);
            ViewPort.SelectionEnd   = new Point(7, 0);
            ViewPort.Copy.Execute(fileSystem);

            Assert.Equal("5 Kick, 7 Bite, 11 Snarl,", fileSystem.CopyText);
        }
Exemple #18
0
        public void NamelessAnchor_Cut_PointerGetsName()
        {
            var fs = new StubFileSystem();

            ViewPort.Edit("<100> @100 @!put(FF) ^\"\" text");

            ViewPort.ExpandSelection(0, 0);
            ViewPort.Cut(fs);

            var pointer = Model.ExportMetadata(Singletons.MetadataInfo).UnmappedPointers.Single();

            Assert.Equal(0, pointer.Address);
            Assert.Contains("misc", pointer.Name);
        }
        public void EditorRemovesFileSystemWatchWhenTabsClose()
        {
            var    fileSystem = new StubFileSystem();
            string name       = null;

            fileSystem.RemoveListenerForFile = (fileName, listener) => name = fileName;
            var editor = new EditorViewModel(fileSystem);

            editor.Open.Execute(new LoadedFile("InputFile.txt", new byte[0x200]));

            editor.Close.Execute();

            Assert.Equal("InputFile.txt", name);
        }
        public void CopyFirstTableElementDoesNotIncludeAppendCharacter()
        {
            var fileSystem = new StubFileSystem();

            CreateTextTable("names", 0x10, "Adam", "Bob", "Carl", "David", "Evan", "Fred", "Greg", "Holly", "Iggy", "Jay", "Kelly", "Lucy", "Mary", "Nate", "Ogre", "Phil"); // 0x60

            // copy
            ViewPort.Goto.Execute("00");
            ViewPort.SelectionStart = new Point(0, 1);
            ViewPort.SelectionEnd   = new Point(5, 1); // select the first entry
            ViewPort.Copy.Execute(fileSystem);

            // check
            Assert.DoesNotContain("+", fileSystem.CopyText);
        }
Exemple #21
0
        public void CanCopyAndPastePointers()
        {
            var fileSystem = new StubFileSystem();
            var viewPort   = ViewPort;

            viewPort.SelectionStart = new Point(0, 2);

            viewPort.Edit("<000058>");
            viewPort.Edit("FF FF");
            viewPort.SelectionStart = new Point(0, 2);
            viewPort.SelectionEnd   = new Point(5, 2);

            viewPort.Copy.Execute(fileSystem);
            Assert.Equal("<000058> FF FF", fileSystem.CopyText);
        }
Exemple #22
0
        public void CanCopyData()
        {
            var loadedFile = new LoadedFile("test", new byte[1000]);
            var viewPort   = new ViewPort(loadedFile)
            {
                Width = 5, Height = 5
            };
            var fileSystem = new StubFileSystem();

            viewPort.Edit("Cafe Babe");
            viewPort.SelectionStart = new Point(0, 0);
            viewPort.SelectionEnd   = new Point(3, 0);
            viewPort.Copy.Execute(fileSystem);

            Assert.Equal("CA FE BA BE", fileSystem.CopyText);
        }
Exemple #23
0
        public void CanCopyStrings()
        {
            SetFullModel(0xFF);
            var(model, viewPort) = (Model, ViewPort);
            for (int i = 0; i < 0x10; i++)
            {
                model[i] = 0x00;
            }
            var fileSystem = new StubFileSystem();

            viewPort.Edit("^bob\"\" \"Hello World!\"");
            viewPort.SelectionStart = new Point(0, 0);
            viewPort.SelectionEnd   = new Point(12, 0);
            viewPort.Copy.Execute(fileSystem);

            Assert.Equal("^bob\"\" \"Hello World!\"", fileSystem.CopyText);
        }
        public void CanResetAlignment()
        {
            var fileSystem = new StubFileSystem();

            StandardSetup(out var data, out var model, out var viewPort);
            var editor = new EditorViewModel(fileSystem);

            editor.Add(viewPort);

            viewPort.Goto.Execute("10");
            viewPort.Edit("^moves[name\"\"8]8 Adam\" Bob\" Carl\" Dave\" Elen\" Fred\" Gary\" Horton\"");
            viewPort.Width = 25;
            Assert.Equal(24, viewPort.Width); // closest smaller multiple of 8

            editor.ResetAlignment.Execute();
            Assert.Equal(16, viewPort.Width); // closest smaller multiple of 16
        }
Exemple #25
0
        public void CanSaveAndLoadNamesAndFormats()
        {
            SetFullModel(0xFF);
            var            viewPort   = ViewPort;
            StoredMetadata metadata   = null;
            var            fileSystem = new StubFileSystem {
                Save = file => true, SaveMetadata = (file, md) => { metadata = new StoredMetadata(md); return(true); }
            };

            viewPort.Edit("^bob\"\" \"Hello\"");
            viewPort.Save.Execute(fileSystem);

            var model2    = new PokemonModel(Model.RawData, metadata);
            var viewPort2 = AutoSearchTests.NewViewPort("file.txt", model2);

            Assert.Equal("bob", ((Anchor)viewPort2[0, 0].Format).Name);
        }
Exemple #26
0
        public void ViewPortAdjustsSelectionWhenLoadingAShorterFile()
        {
            var viewPort = new ViewPort(new LoadedFile("file.txt", new byte[12]));

            viewPort.SelectionStart = new Point(3, 3);
            Assert.Equal(4, viewPort.Width);
            Assert.Equal(4, viewPort.Height);
            Assert.Equal(new Point(0, 3), viewPort.SelectionStart);

            var fileSystem = new StubFileSystem {
                LoadFile = filename => new LoadedFile("file.txt", new byte[10])
            };

            viewPort.ConsiderReload(fileSystem);

            Assert.Equal(new Point(2, 2), viewPort.SelectionStart);
        }
Exemple #27
0
        public void CanWriteNameOverNullPointer()
        {
            var buffer     = new byte[0x200];
            var model      = new PokemonModel(buffer);
            var fileSystem = new StubFileSystem();
            var viewPort   = new ViewPort("file.txt", model)
            {
                Width = 0x10, Height = 0x10
            };

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

            var format = (Pointer)model.GetNextRun(0x0).CreateDataFormat(model, 0x00);

            Assert.Equal("bob", format.DestinationName);
        }
        public void CanSaveLooseWordRuns()
        {
            var fileSystem = new StubFileSystem();

            string[] metadata = null;
            fileSystem.Save         = file => true;
            fileSystem.SaveMetadata = (file, lines) => { metadata = lines; return(true); };
            StandardSetup(out var data, out var model, out var viewPort);

            viewPort.Edit("::test ");
            viewPort.Save.Execute(fileSystem);

            var storedMetadata = new StoredMetadata(metadata);
            var matchedWord    = storedMetadata.MatchedWords.First();

            Assert.Equal(0, matchedWord.Address);
            Assert.Equal("test", matchedWord.Name);
        }
Exemple #29
0
        public void ViewPortNotifiesOnFileNameChange()
        {
            var properties = new List <string>();

            var fileSystem = new StubFileSystem {
                RequestNewName = (currentName, description, extensionOptions) => "file.txt",
                Save           = file => true,
            };
            var viewPort = new ViewPort();

            viewPort.PropertyChanged += (sender, e) => properties.Add(e.PropertyName);

            viewPort.Edit("01 23 45 67");
            viewPort.SaveAs.Execute(fileSystem);

            Assert.Contains("FileName", properties);
            Assert.Equal("file.txt", viewPort.FileName);
        }
        public void CanCutPasteArrayToFreeSpace()
        {
            // arrange
            var delta = new ModelDelta();

            SetFullModel(0xFF);
            var(model, viewPort) = (Model, ViewPort);
            ViewPort.Edit("<020> ");
            var elements = new[] { "123", "alice", "candy land", "hello world", "fortify" };

            CreateTextTable("testdata", 0x20, elements);
            viewPort.Goto.Execute(0);

            // act -> cut
            var fileSystem = new StubFileSystem();

            viewPort.SelectionStart = ViewPort.ConvertAddressToViewPoint(0x20);
            viewPort.MoveSelectionEnd.Execute(Direction.End); // select entire table
            viewPort.Copy.Execute(fileSystem);
            viewPort.Clear.Execute();
            string text = fileSystem.CopyText;

            // act -> paste
            viewPort.SelectionStart = new Point(0, 8);
            viewPort.Edit(text);

            // assert -> pointer moved
            var destination = model.ReadPointer(0x00);

            Assert.Equal(0x80, destination);

            // assert -> anchor moved
            var run = model.GetNextRun(0x10);

            Assert.Equal(0x80, run.Start);
            Assert.Equal("testdata", model.GetAnchorFromAddress(-1, run.Start));
            Assert.Equal(5, ((ArrayRun)run).ElementCount);
            var lines = viewPort.Tools.StringTool.Content.Split(Environment.NewLine);

            Assert.All(elements, element => Assert.Contains(element, lines));

            // assert -> nothing left behind
            Assert.All(Enumerable.Range(0x20, 0x50), i => Assert.Equal(0xFF, model[i]));
        }
        public void CanCutPasteArrayOverItself()
        {
            // arrange
            var delta = new ModelDelta();

            var(model, viewPort) = (Model, ViewPort);
            var errors   = new List <string>();
            var elements = new[] { "123", "alice", "candy land", "hello world", "fortify" };

            for (int i = 0; i < elements.Length; i++)
            {
                var content = PCSString.Convert(elements[i]);
                while (content.Count < 0x10)
                {
                    content.Add(0x00);
                }
                Array.Copy(content.ToArray(), 0, model.RawData, 0x10 * i + 0x20, 0x10);
            }
            model.WritePointer(delta, 0x00, 0x20);
            model.ObserveRunWritten(delta, new PointerRun(0x00));
            model.WritePointer(delta, 0x04, 0x90);
            model.ObserveRunWritten(delta, new PointerRun(0x04)); // the anchor at 0x90 should prevent a paste overwrite
            viewPort.SelectionStart = new Point(0, 2);
            viewPort.Edit("^testdata[name\"\"16]5 ");
            viewPort.Goto.Execute("000000");
            viewPort.OnError += (sender, message) => errors.Add(message);

            // act -> cut
            var fileSystem = new StubFileSystem();

            viewPort.SelectionStart = new Point(0, 2);
            viewPort.SelectionEnd   = new Point(0xF, 6); // select all 5 elements
            viewPort.Copy.Execute(fileSystem);
            viewPort.Clear.Execute();
            string text = fileSystem.CopyText;

            // act -> paste
            viewPort.SelectionStart = new Point(0, 2);
            viewPort.Edit(text);

            // assert: no errors
            Assert.Empty(errors);
            Assert.Equal("testdata", model.GetAnchorFromAddress(-1, 0x20));
        }
 public StubAppDataFolder(IClock clock)
 {
     _clock = clock;
     _fileSystem = new StubFileSystem(_clock);
 }
 public StubVirtualPathProvider(StubFileSystem fileSystem) {
     _fileSystem = fileSystem;
 }