From 030d8187edac76d29b41213846dde5453428c3ec Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Fri, 5 Jun 2020 14:14:07 -0500 Subject: [PATCH] Fix Tests --- src/HexManiac.Core/Models/PokemonModel.cs | 13 ++++++++++--- src/HexManiac.Core/ViewModels/EditorViewModel.cs | 2 +- src/HexManiac.Core/ViewModels/Selection.cs | 2 +- .../ViewModels/Tools/PaletteCollection.cs | 2 +- .../Before_Baseclass/ArrayColumnHeaderTests.cs | 4 ++-- .../Before_Baseclass/ArrayRunTests.cs | 4 ++-- .../Before_Baseclass/NestedTablesTests.cs | 11 ++++++----- src/HexManiac.Tests/Before_Baseclass/ToolTests.cs | 6 +++--- src/HexManiac.Tests/GeneralAppTests.cs | 4 ++-- src/HexManiac.Tests/TableTests.cs | 4 ++-- src/HexManiac.WPF/Controls/TabView.xaml | 2 +- 11 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/HexManiac.Core/Models/PokemonModel.cs b/src/HexManiac.Core/Models/PokemonModel.cs index 7006f212..c25803b6 100644 --- a/src/HexManiac.Core/Models/PokemonModel.cs +++ b/src/HexManiac.Core/Models/PokemonModel.cs @@ -553,6 +553,7 @@ namespace HavenSoft.HexManiac.Core.Models { if (existingRun is PointerRun && !(run is NoInfoRun) && !(run is PointerRun)) { var destination = ReadPointer(existingRun.Start); ClearPointer(changeToken, existingRun.Start, destination); + index = BinarySearch(run.Start); // have to recalculate index, because ClearPointer can removed runs. } run = run.MergeAnchor(existingRun.PointerSources); if (run is NoInfoRun) run = existingRun.MergeAnchor(run.PointerSources); // when writing an anchor with no format, keep the existing format. @@ -917,7 +918,7 @@ namespace HavenSoft.HexManiac.Core.Models { } public override int FindFreeSpace(int start, int minimumLength) { - start = FreeSpaceStart; + if (FreeSpaceStart != 0) start = FreeSpaceStart; if (start < EarliestAllowedAnchor) start = EarliestAllowedAnchor; const int SpacerLength = 0x100; minimumLength += 0x140; // make sure there's plenty of room after, so that we're not in the middle of some other data set @@ -1025,8 +1026,14 @@ namespace HavenSoft.HexManiac.Core.Models { public override void ClearPointer(ModelDelta currentChange, int source, int destination) { var index = BinarySearch(destination); currentChange.RemoveRun(runs[index]); - runs[index] = runs[index].RemoveSource(source); - currentChange.AddRun(runs[index]); + + var newRun = runs[index].RemoveSource(source); + if (newRun is NoInfoRun nir && nir.PointerSources.Count == 0) { + runs.RemoveAt(index); + } else { + runs[index] = newRun; + currentChange.AddRun(newRun); + } } private void ClearFormat(ModelDelta changeToken, int start, int length, bool keepInitialAnchorPointers, bool alsoClearData) { diff --git a/src/HexManiac.Core/ViewModels/EditorViewModel.cs b/src/HexManiac.Core/ViewModels/EditorViewModel.cs index 251f9f83..15cae531 100644 --- a/src/HexManiac.Core/ViewModels/EditorViewModel.cs +++ b/src/HexManiac.Core/ViewModels/EditorViewModel.cs @@ -487,6 +487,7 @@ namespace HavenSoft.HexManiac.Core.ViewModels { tabs.Add(content); SelectedIndex = tabs.Count - 1; CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, content)); + AddContentListeners(content); if (content is IViewPort viewModel) { viewModel.UseCustomHeaders = useTableEntryHeaders; viewModel.AutoAdjustDataWidth = AutoAdjustDataWidth; @@ -494,7 +495,6 @@ namespace HavenSoft.HexManiac.Core.ViewModels { viewModel.StretchData = StretchData; viewModel.ValidateMatchedWords(); } - AddContentListeners(content); } public void SwapTabs(int a, int b) { diff --git a/src/HexManiac.Core/ViewModels/Selection.cs b/src/HexManiac.Core/ViewModels/Selection.cs index b118dd12..8bd9f9d9 100644 --- a/src/HexManiac.Core/ViewModels/Selection.cs +++ b/src/HexManiac.Core/ViewModels/Selection.cs @@ -100,7 +100,7 @@ namespace HavenSoft.HexManiac.Core.ViewModels { } } - private bool autoAdjustDataWidth, allowMultipleElementsPerLine; + private bool autoAdjustDataWidth = true, allowMultipleElementsPerLine = true; public bool AutoAdjustDataWidth { get => autoAdjustDataWidth; set => Set(ref autoAdjustDataWidth, value); } public bool AllowMultipleElementsPerLine { get => allowMultipleElementsPerLine; set => Set(ref allowMultipleElementsPerLine, value); } diff --git a/src/HexManiac.Core/ViewModels/Tools/PaletteCollection.cs b/src/HexManiac.Core/ViewModels/Tools/PaletteCollection.cs index 7e254d57..89bb864c 100644 --- a/src/HexManiac.Core/ViewModels/Tools/PaletteCollection.cs +++ b/src/HexManiac.Core/ViewModels/Tools/PaletteCollection.cs @@ -46,7 +46,7 @@ namespace HavenSoft.HexManiac.Core.ViewModels.Tools { var first = Math.Min(selectionStart, selectionEnd); var last = Math.Max(selectionStart, selectionEnd); for (int i = 0; i < Elements.Count; i++) Elements[i].Selected = first <= i && i <= last; - createGradient.CanExecuteChanged.Invoke(createGradient, EventArgs.Empty); + createGradient?.CanExecuteChanged.Invoke(createGradient, EventArgs.Empty); } } diff --git a/src/HexManiac.Tests/Before_Baseclass/ArrayColumnHeaderTests.cs b/src/HexManiac.Tests/Before_Baseclass/ArrayColumnHeaderTests.cs index 29fd8308..63baecf2 100644 --- a/src/HexManiac.Tests/Before_Baseclass/ArrayColumnHeaderTests.cs +++ b/src/HexManiac.Tests/Before_Baseclass/ArrayColumnHeaderTests.cs @@ -42,10 +42,10 @@ namespace HavenSoft.HexManiac.Tests { [Fact] public void TableToolUpdatesAfterAnchorChange() { viewPort.AnchorText = "^array[data1. b data2.]8"; - Assert.Equal(3, viewPort.Tools.TableTool.Children.Count); + Assert.Equal(4, viewPort.Tools.TableTool.Children.Count); // header + 3 elements viewPort.AnchorText = "^array[data1. bc data2.]8"; - Assert.Equal("bc", ((FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[1]).Name); + Assert.Equal("bc", ((FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[2]).Name); } } } diff --git a/src/HexManiac.Tests/Before_Baseclass/ArrayRunTests.cs b/src/HexManiac.Tests/Before_Baseclass/ArrayRunTests.cs index 67946c99..3124e5ed 100644 --- a/src/HexManiac.Tests/Before_Baseclass/ArrayRunTests.cs +++ b/src/HexManiac.Tests/Before_Baseclass/ArrayRunTests.cs @@ -756,7 +756,7 @@ namespace HavenSoft.HexManiac.Tests { // act: change the table contents viewPort.SelectionStart = new Point(1, 0); - var element = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var element = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children.Single(child => child is FieldArrayElementViewModel faevm && faevm.Name == "name"); element.Content = "dog"; // assert: main view was updated @@ -784,7 +784,7 @@ namespace HavenSoft.HexManiac.Tests { viewPort.Edit("u"); // assert: main view was updated - var element = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var element = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children.Single(child => child is FieldArrayElementViewModel faevm && faevm.Name == "name"); Assert.Equal("cut", element.Content); } diff --git a/src/HexManiac.Tests/Before_Baseclass/NestedTablesTests.cs b/src/HexManiac.Tests/Before_Baseclass/NestedTablesTests.cs index 90313d61..aad0817a 100644 --- a/src/HexManiac.Tests/Before_Baseclass/NestedTablesTests.cs +++ b/src/HexManiac.Tests/Before_Baseclass/NestedTablesTests.cs @@ -6,6 +6,7 @@ using HavenSoft.HexManiac.Core.ViewModels.DataFormats; using HavenSoft.HexManiac.Core.ViewModels.Tools; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace HavenSoft.HexManiac.Tests { @@ -138,8 +139,8 @@ namespace HavenSoft.HexManiac.Tests { viewPort.Edit("^table[description<\"\">]4 <000000>"); // note that this auto-scrolls, since a table was created viewPort.MoveSelectionStart.Execute(Direction.Left); // select the pointer we just completed - Assert.Equal(2, viewPort.Tools.TableTool.Children.Count); - Assert.IsType(viewPort.Tools.TableTool.Children[1]); + Assert.Equal(3, viewPort.Tools.TableTool.Children.Count); // header, pointer, content + Assert.IsType(viewPort.Tools.TableTool.Children[2]); } [Fact] @@ -151,12 +152,12 @@ namespace HavenSoft.HexManiac.Tests { viewPort.SelectionStart = new Point(0, 4); viewPort.Edit("^table[description<\"\">]4 <000000>"); // note that this auto-scrolls, since a table was created viewPort.SelectionStart = new Point(0, 0); - var textViewModel = (TextStreamElementViewModel)viewPort.Tools.TableTool.Children[1]; + var textViewModel = (TextStreamElementViewModel)viewPort.Tools.TableTool.Children.Single(child => child is TextStreamElementViewModel); // act: use the tool to change the content, forcing a repoint messages.Clear(); textViewModel.Content = "Xyz"; - var pointerViewModel = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var pointerViewModel = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children.Single(child => child is FieldArrayElementViewModel); Assert.Single(messages); // we repointed Assert.NotEqual("<000000>", pointerViewModel.Content); // other tool field was updated @@ -357,7 +358,7 @@ namespace HavenSoft.HexManiac.Tests { Assert.Equal("tutormoves", segment.SourceArrayName); Assert.Equal(8, run.Length); - var bitList = (BitListArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var bitList = (BitListArrayElementViewModel)viewPort.Tools.TableTool.Children.Single(child => child is BitListArrayElementViewModel); Assert.Equal("Four", bitList[2].BitLabel); bitList[2].IsChecked = true; // "Adam" should be able to learn "Four" diff --git a/src/HexManiac.Tests/Before_Baseclass/ToolTests.cs b/src/HexManiac.Tests/Before_Baseclass/ToolTests.cs index 0bffbc2e..e84d0378 100644 --- a/src/HexManiac.Tests/Before_Baseclass/ToolTests.cs +++ b/src/HexManiac.Tests/Before_Baseclass/ToolTests.cs @@ -161,7 +161,7 @@ namespace HavenSoft.HexManiac.Tests { // Assert: Table Tool is updated viewPort.Tools.SelectedIndex = Enumerable.Range(0, 10).First(i => viewPort.Tools[i] == viewPort.Tools.TableTool); - var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[1]; Assert.Equal("Larry", field.Content); } @@ -176,7 +176,7 @@ namespace HavenSoft.HexManiac.Tests { // Act: Update via the Table Tool viewPort.Tools.SelectedIndex = Enumerable.Range(0, 10).First(i => viewPort.Tools[i] == viewPort.Tools.TableTool); - var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[1]; field.Content = "Larry"; // Assert: Text Tool is updated @@ -218,7 +218,7 @@ namespace HavenSoft.HexManiac.Tests { viewPort.Tools.SelectedIndex = Enumerable.Range(0, 10).First(i => viewPort.Tools[i] == viewPort.Tools.StringTool); // open the string tool viewPort.Tools.StringTool.ContentIndex = 12; // place the cursor somewhere, like the UI would viewPort.Tools.SelectedIndex = Enumerable.Range(0, 10).First(i => viewPort.Tools[i] == viewPort.Tools.TableTool); // open the table tool - var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[0]; + var field = (FieldArrayElementViewModel)viewPort.Tools.TableTool.Children[1]; field.Content = "Larry"; // make a change with the table tool Assert.NotEqual(new Point(), viewPort.SelectionStart); diff --git a/src/HexManiac.Tests/GeneralAppTests.cs b/src/HexManiac.Tests/GeneralAppTests.cs index fb24580a..50a4b1ac 100644 --- a/src/HexManiac.Tests/GeneralAppTests.cs +++ b/src/HexManiac.Tests/GeneralAppTests.cs @@ -472,7 +472,7 @@ ApplicationVersion = '''0.1.0''' [Fact] public void CanSaveVersionToToml() { - var metadata = new StoredMetadata(null, null, null, null, new StubMetadataInfo { VersionNumber = "0.1.0" }); + var metadata = new StoredMetadata(null, null, null, null, new StubMetadataInfo { VersionNumber = "0.1.0" }, default); var lines = metadata.Serialize(); Assert.Contains("[General]", lines); Assert.Contains("ApplicationVersion = '''0.1.0'''", lines); @@ -480,7 +480,7 @@ ApplicationVersion = '''0.1.0''' [Fact] public void NullVersionIsNotSavedToToml() { - var metadata = new StoredMetadata(null, null, null, null, new StubMetadataInfo()); + var metadata = new StoredMetadata(null, null, null, null, new StubMetadataInfo(), default); var lines = metadata.Serialize(); Assert.All(lines, line => Assert.DoesNotContain("ApplicationVersion = '''", line)); } diff --git a/src/HexManiac.Tests/TableTests.cs b/src/HexManiac.Tests/TableTests.cs index 7ad450fe..3908ea80 100644 --- a/src/HexManiac.Tests/TableTests.cs +++ b/src/HexManiac.Tests/TableTests.cs @@ -112,7 +112,7 @@ namespace HavenSoft.HexManiac.Tests { // update count via table: child run should update var tool = ViewPort.Tools.TableTool; - var childCountField = (ComboBoxArrayElementViewModel)tool.Children[0]; + var childCountField = (ComboBoxArrayElementViewModel)tool.Children[1]; childCountField.SelectedIndex = 3; Assert.Equal(0x10, ((ITableRun)Model.GetNextRun(0xA0)).ElementLength); @@ -128,7 +128,7 @@ namespace HavenSoft.HexManiac.Tests { // update count via table: sibling should update var tool = ViewPort.Tools.TableTool; - var childCountField = (ComboBoxArrayElementViewModel)tool.Children[0]; + var childCountField = (ComboBoxArrayElementViewModel)tool.Children[1]; childCountField.SelectedIndex = 3; Assert.Equal(3, Model[0x28]); diff --git a/src/HexManiac.WPF/Controls/TabView.xaml b/src/HexManiac.WPF/Controls/TabView.xaml index 8871ccf9..395317d4 100644 --- a/src/HexManiac.WPF/Controls/TabView.xaml +++ b/src/HexManiac.WPF/Controls/TabView.xaml @@ -259,7 +259,7 @@ - +