public ViewPortSaveTests() { fileSystem = new StubFileSystem { RequestNewName = (previousName, description, extensions) => { name = $"file.txt"; return(name); }, TrySavePrompt = loadedFile => { name = loadedFile.Name; return(true); }, }; }
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); }
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"); }
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); }
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); }
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); }
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); }
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));
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); }
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); }
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); }
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); }
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); }
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); }
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 }
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); }
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); }
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); }
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; }