Beispiel #1
0
        public void CanAutoDetectMultipleTextRunsAtOnce()
        {
            var test  = new BaseViewModelTestClass();
            var token = test.ViewPort.CurrentChange;

            // Arrange some undetected pointers to some undetected text
            test.Model.WritePointer(token, 0, 0x10);
            test.Model.WritePointer(token, 4, 0x15);
            int write = 0x10;

            test.Model[0xF] = 0xFF;
            PCSString.Convert("text").ForEach(b => test.Model[write++] = b);
            PCSString.Convert("more").ForEach(b => test.Model[write++] = b);

            // add some more text/pointers later on that *are* detected
            test.Model.WritePointer(token, 8, 0x40);
            test.Model[0x40] = 0xFF;
            test.ViewPort.Edit("@40 ^discovered\"\" Blob\" @00 ");

            // select from partway through the first text to partway through the second text and "Display as Text"
            test.ViewPort.SelectionStart = new Point(1, 1);
            test.ViewPort.SelectionEnd   = new Point(7, 1);
            var group  = (ContextItemGroup)test.ViewPort.GetContextMenuItems(new Point(4, 1)).Single(item => item.Text == "Display As...");
            var button = group.Single(item => item.Text == "Text");

            button.Command.Execute();

            // Verify that we found both
            Assert.Equal(0, test.Model.GetNextRun(0).Start);       // first pointer
            Assert.Equal(4, test.Model.GetNextRun(4).Start);       // second pointer
            Assert.Equal(0x10, test.Model.GetNextRun(0x10).Start); // first text
            Assert.Equal(0x15, test.Model.GetNextRun(0x15).Start); // second text
        }
Beispiel #2
0
        public void ViewPort_GotoWithOffset_Goto()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("@100+10 ");
            Assert.Equal(0x110, test.ViewPort.ConvertViewPointToAddress(test.ViewPort.SelectionStart));
        }
Beispiel #3
0
        public void CanFollowPointerInline()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("00 01 02 03 <000100> @04 @{ 80 @} ");
            Assert.Equal(0, test.ViewPort.DataOffset);
            Assert.Equal(new Point(8, 0), test.ViewPort.SelectionStart);
            Assert.Equal(0x80, test.Model[0x100]);
        }
        public void SelectDataInBottomRow_MoveSelectionEndDown_DataScrolls()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.SelectionStart = new Point(0, 15);
            test.ViewPort.SelectionEnd   = new Point(0, 16);

            Assert.Equal(0x10, test.ViewPort.DataOffset);
        }
Beispiel #5
0
        public void FreeSpaceStart_GotoFreeSpaceStart()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.FreeSpaceStart = 0x100;
            test.ViewPort.GotoFreeSpaceStart.Execute();

            Assert.Equal(0x100, test.ViewPort.DataOffset);
        }
Beispiel #6
0
        public void SelectionLengthIsPositiveWhenSelectingLeft()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.SelectionStart = new Point(3, 0);
            test.ViewPort.SelectionEnd   = new Point(0, 0);

            Assert.Contains("| 4 bytes selected", test.ViewPort.SelectedAddress);
        }
Beispiel #7
0
        public void ViewPort_GotoNonExistingAnchorWithSizeSpecified_AnchorCreated()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("@newAnchor(10) ");
            var destination = test.Model.GetAddressFromAnchor(new ModelDelta(), -1, "newAnchor");

            Assert.NotEqual(Pointer.NULL, destination);
        }
Beispiel #8
0
        public void SearchFor6BytesAlsoFindsPointers()
        {
            var test = new BaseViewModelTestClass(0x1200);

            test.ViewPort.Edit("<001060>");
            var results = test.ViewPort.Find("001060");

            Assert.Single(results);
        }
        public void TableToolContainsListOfAllTables()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("^table1[data\"\"6]4 @30 ^table2[data\"\"6]4 ");
            Assert.Equal(2, test.ViewPort.Tools.TableTool.TableSections.Count());

            test.ViewPort.Tools.TableTool.SelectedTableSection = 1;
            Assert.Equal("000030", test.ViewPort.Headers[0]);
        }
Beispiel #10
0
        public void CanCreatePointerInline()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("^table[content<\"\">]2 @{ Hello!\" @}");
            var matches = test.ViewPort.Find("Hello!");

            Assert.Equal(4, test.ViewPort.DataOffset);
            Assert.Equal(new Point(0, 0), test.ViewPort.SelectionStart);
            Assert.Single(matches);
        }
        public void SelectDataInTopRow_MoveSelectionEndUp_DataScrolls()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Goto.Execute(0x10);

            test.ViewPort.SelectionStart = new Point(0, 0);
            test.ViewPort.SelectionEnd   = new Point(0, -1);

            Assert.Equal(0, test.ViewPort.DataOffset);
        }
Beispiel #12
0
        public void CanGotoSecondNamedElementWithSameName()
        {
            var test = new BaseViewModelTestClass();

            test.CreateTextTable("names", 0x100, "Adam Bob Carl Dave Eric Dave Fred Greg Hal Jim".Split(" "));
            test.ViewPort.Edit("@00 ^table[content.]names ");

            test.ViewPort.Goto.Execute("table/Dav~2");

            Assert.Equal(5, test.ViewPort.DataOffset);
        }
Beispiel #13
0
        public void CanPrefixAddressWith0xDuringGoto()
        {
            var editor = new EditorViewModel(new StubFileSystem());
            var test   = new BaseViewModelTestClass();

            editor.Add(test.ViewPort);

            editor.GotoViewModel.Goto.Execute("0x0030");

            Assert.Equal(0x30, test.ViewPort.DataOffset);
        }
        public void CursorAtEndOfFile_MakeFileSmaller_CursorMoves()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Goto.Execute(test.Model.Count - 1);

            test.Model.ContractData(test.Token, 0x100);
            test.ViewPort.Refresh();

            Assert.Equal(0x101, test.ViewPort.ConvertViewPointToAddress(test.ViewPort.SelectionStart));
        }
        public void NullPointer_MakeSmallTable_TableAdded()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("<null> @00 ^table[pointer<>]1 ");
            var table = test.Model.GetTable("table");

            Assert.Equal(0, table.Start);
            Assert.Equal(4, table.Length);
            Assert.Single(table.ElementContent);
        }
        public void CanExtendTableWithInnerPointers()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("^table^[data\"\"4]3 ");
            test.ViewPort.SelectionStart = new Point(0xC, 0);

            test.ViewPort.Edit("+");

            Assert.Equal(0x10, test.Model.GetNextRun(0).Length);
        }
        public void AutocompletePicksExpectedElementAndMovesToNextElement()
        {
            var test = new BaseViewModelTestClass();

            test.CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x100, "Tackle", "Fire Punch", "Earthquake", "Psycho Boost");
            test.CreateEnumTable("pokemoves", 0x00, HardcodeTablesModel.MoveNamesTable, 0, 1, 2, 3);

            test.ViewPort.Edit("@04 firepunch ");
            Assert.Equal(1, test.Model.ReadMultiByteValue(0x04, 2));
            Assert.Equal(new Point(2, 0), test.ViewPort.SelectionStart);
            Assert.Equal($"pokemoves/3{Environment.NewLine}pokemoves/\"Psycho Boost\"", test.ViewPort.Tools.TableTool.CurrentElementName);
        }
        public void NameListWithTwoOfSameElementWithSpace_EnterSecondOption_CompleteCorrect()
        {
            var test = new BaseViewModelTestClass();

            test.CreateTextTable("names", 0x100, "default", "Some Element", "Some Element");
            test.CreateEnumTable("enums", 0, "names", 0, 0);
            test.ViewPort.Goto.Execute(0);

            test.ViewPort.Edit("\"Some Element~2\"");

            Assert.Equal(2, test.Model[0]);
        }
        public void AnchorWithData_SelectMiddleOfAnchor_CanSeeAnchorContents()
        {
            var test = new BaseViewModelTestClass();

            test.SetFullModel(0xFF);

            test.ViewPort.Edit("^text\"\" \"Hello, World\"");
            test.ViewPort.Goto.Execute(5);

            Assert.True(test.ViewPort.AnchorTextVisible);
            Assert.Equal("^text\"\"", test.ViewPort.AnchorText);
        }
        public void NameList_TypeNameWithSingleQuote_AutocompleteCorrect()
        {
            var test = new BaseViewModelTestClass();

            test.CreateTextTable("names", 0x100, "Basic", "Quote'n'space Element");
            test.CreateEnumTable("enums", 0, "names", 0, 0);
            test.ViewPort.Goto.Execute(0);

            test.ViewPort.Edit("\"Quote'\"");

            Assert.Equal(1, test.Model[0]);
        }
Beispiel #21
0
        public void ToolSelectionDoesNotAutoChangeForCodeToolHexView()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("FF @00 ^text\"\" Hello World!");
            test.ViewPort.Tools.CodeToolCommand.Execute();
            test.ViewPort.Tools.CodeTool.Mode = CodeMode.Raw;

            test.ViewPort.SelectionStart = new Point(0, 1);
            test.ViewPort.SelectionStart = new Point(0, 0);

            Assert.Equal(test.ViewPort.Tools.CodeTool, test.ViewPort.Tools.SelectedTool);
        }
Beispiel #22
0
        public void Text_TypeDot_DotAdded()
        {
            var test = new BaseViewModelTestClass();

            Array.Copy(PCSString.Convert("Hello World").ToArray(), test.Model.RawData, 12);
            test.Model.ObserveRunWritten(test.ViewPort.CurrentChange, new PCSRun(test.Model, 0, 12));
            test.ViewPort.Refresh();

            test.ViewPort.Edit("@01 .");

            Assert.Equal(2, test.ViewPort.ConvertViewPointToAddress(test.ViewPort.SelectionStart));
            Assert.Equal("\"H.llo World\"", PCSString.Convert(test.Model, 0, 12));
        }
        public void TableWithTableStreamPointers_RepointToContainingAnotherRun_NoAssert()
        {
            var test = new BaseViewModelTestClass();

            test.Model[5] = 5;
            test.ViewPort.Edit("@100 ^table[ptr<[a.]!05>]2 <002> ");

            test.ViewPort.Edit("<000> ");

            var streamRun = (TableStreamRun)test.Model.GetNextRun(0);

            Assert.Equal(0, streamRun.Start);
            Assert.Equal(6, streamRun.Length);
        }
Beispiel #24
0
        public void AnchorWithNoFormatContextMenuContainsRemoveOption()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("<000020> @20 "); // add a pointer to 0x20 and go there

            test.ViewPort.SelectionStart = new Point();
            var contextItems    = test.ViewPort.GetContextMenuItems(new Point());
            var clearFormatItem = contextItems.Single(item => item.Text == "Clear Format");

            clearFormatItem.Command.Execute();

            // verify that there is no longer a run starting at 0x20
            Assert.NotEqual(0x20, test.Model.GetNextRun(0x20).Start);
        }
Beispiel #25
0
        public void AnchorCanContaintDots()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("^This.name.Is.valid ");
            Assert.Empty(test.Errors);
            var address = test.Model.GetAddressFromAnchor(new NoDataChangeDeltaModel(), -1, "This.name.Is.valid");

            Assert.Equal(0, address);

            test.ViewPort.AnchorText = "^This_name_is_Also_valid";
            Assert.Empty(test.Errors);
            address = test.Model.GetAddressFromAnchor(new NoDataChangeDeltaModel(), -1, "This_name_is_Also_valid");
            Assert.Equal(0, address);
        }
Beispiel #26
0
        public void CanSearchForBranchLink()
        {
            var test     = new BaseViewModelTestClass();
            var command1 = test.ViewPort.Tools.CodeTool.Parser.Compile(test.Model, 0x0010, "bl <000060>").ToArray();
            var command2 = test.ViewPort.Tools.CodeTool.Parser.Compile(test.Model, 0x0100, "bl <000060>").ToArray();

            Array.Copy(command1, 0, test.Model.RawData, 0x0010, command1.Length);
            Array.Copy(command2, 0, test.Model.RawData, 0x0100, command2.Length);

            var results = test.ViewPort.Find("bl <000060>").ToList();

            Assert.Equal(2, results.Count);
            Assert.Equal(0x010, results[0].start);
            Assert.Equal(0x100, results[1].start);
        }
Beispiel #27
0
        public void CanGotoSingleOptionEvenWithoutPerfectMatch()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("^pizza @piza ");
            Assert.Empty(test.Errors);

            test.ViewPort.Edit("@20 ^candy ");
            var editor = new EditorViewModel(new StubFileSystem());

            editor.Add(test.ViewPort);
            editor.GotoViewModel.Text = "cady";
            editor.GotoViewModel.Goto.Execute();

            Assert.Empty(test.Errors);
        }
Beispiel #28
0
        public void ControlCode_Pause_OneByteIsEscaped()
        {
            var test = new BaseViewModelTestClass();
            int i    = 0;

            Write(test.Model, ref i, "ABC");
            test.Model[i++] = PCSString.FunctionEscape;
            test.Model[i++] = 0x09; //pause: no variables
            Write(test.Model, ref i, "XYZ\"");

            test.ViewPort.Edit("^text\"\"");

            Assert.IsType <EscapedPCS>(test.ViewPort[4, 0].Format);
            Assert.IsNotType <EscapedPCS>(test.ViewPort[5, 0].Format);
            Assert.Equal("ABC\\CC09XYZ", ((PCSRun)test.Model.GetNextRun(0)).SerializeRun());
        }
Beispiel #29
0
        public void TextToolSearchTest()
        {
            var test = new BaseViewModelTestClass();

            test.ViewPort.Edit("FF @00 ^text\"\" Hello World Worble!");
            test.ViewPort.SelectionStart = new Point();
            var tool = test.ViewPort.Tools.StringTool;

            tool.SearchText = "wor";
            tool.Search.Execute();
            Assert.Equal(6, tool.ContentIndex);
            Assert.Equal(3, tool.ContentSelectionLength);

            tool.Search.Execute();
            Assert.Equal(12, tool.ContentIndex);
            Assert.Equal(3, tool.ContentSelectionLength);
        }
Beispiel #30
0
        public void CanOpenSecondTabWithSameModel()
        {
            var test = new BaseViewModelTestClass();

            editor.Add(test.ViewPort);
            test.ViewPort.Edit("<000100> @00 "); // create a pointer for us to follow

            var item = test.ViewPort.GetContextMenuItems(new Point()).Single(menuItem => menuItem.Text == "Open in New Tab");

            item.Command.Execute();

            var newTab = (ViewPort)editor[1];

            Assert.Equal(test.ViewPort.CurrentChange, newTab.CurrentChange); // they have the same change history
            Assert.Equal(test.ViewPort.Model, newTab.Model);                 // they have the same model
            Assert.Equal(0x100, newTab.DataOffset);                          // the new tab is scrolled to the desired location
        }