|
11 | 11 | #include "tests\devkit\context\mocks\MockEmulatorMemoryContext.hh" |
12 | 12 | #include "tests\devkit\context\mocks\MockRcClient.hh" |
13 | 13 | #include "tests\devkit\services\mocks\MockFileSystem.hh" |
| 14 | + |
| 15 | +#include "tests\mocks\MockClipboard.hh" |
14 | 16 | #include "tests\mocks\MockConfiguration.hh" |
15 | 17 | #include "tests\mocks\MockGameContext.hh" |
16 | 18 | #include "tests\mocks\MockDesktop.hh" |
@@ -574,6 +576,142 @@ TEST_CLASS(PointerFinderViewModel_Tests) |
574 | 576 | Assert::AreEqual(std::string("I:0x 0020_I:0x 0008_I:0x 0000_M:0x 0004"), pBookmarks.Items().GetItemAt(4)->GetIndirectAddress()); |
575 | 577 | } |
576 | 578 |
|
| 579 | + TEST_METHOD(TestCopySelectedToClipboard) |
| 580 | + { |
| 581 | + PointerFinderViewModelHarness vmPointerFinder; |
| 582 | + ra::services::mocks::MockClipboard mockClipboard; |
| 583 | + vmPointerFinder.mockGameContext.SetGameId(1U); |
| 584 | + vmPointerFinder.SetSearchType(ra::services::SearchType::SixteenBitAligned); |
| 585 | + |
| 586 | + // no results - nothing copied, no dialog shown |
| 587 | + vmPointerFinder.CopySelectedToClipboard(); |
| 588 | + Assert::AreEqual(std::wstring(), mockClipboard.GetText()); |
| 589 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 590 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 591 | + |
| 592 | + // initialize results |
| 593 | + ra::services::PointerFinder::PotentialPointer pPointer; |
| 594 | + pPointer.nRootAddress = 0x009c; |
| 595 | + pPointer.vOffsets.at(0) = 0; |
| 596 | + pPointer.nOffsetLength = 1; |
| 597 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 598 | + |
| 599 | + pPointer.nRootAddress = 0x0008; |
| 600 | + pPointer.vOffsets.at(0) = 4; |
| 601 | + pPointer.nOffsetLength = 1; |
| 602 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 603 | + |
| 604 | + pPointer.nRootAddress = 0x0020; |
| 605 | + pPointer.vOffsets.at(0) = 8; |
| 606 | + pPointer.vOffsets.at(1) = 0; |
| 607 | + pPointer.vOffsets.at(2) = 4; |
| 608 | + pPointer.nOffsetLength = 3; |
| 609 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 610 | + |
| 611 | + pPointer.nRootAddress = 0x0070; |
| 612 | + pPointer.vOffsets.at(0) = 4; |
| 613 | + pPointer.nOffsetLength = 1; |
| 614 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 615 | + |
| 616 | + // no selection |
| 617 | + vmPointerFinder.CopySelectedToClipboard(); |
| 618 | + Assert::AreEqual(std::wstring(), mockClipboard.GetText()); |
| 619 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 620 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 621 | + |
| 622 | + // selection |
| 623 | + vmPointerFinder.PotentialPointers().GetItemAt(1)->SetSelected(true); |
| 624 | + vmPointerFinder.CopySelectedToClipboard(); |
| 625 | + Assert::AreEqual(std::wstring(L"I:0x 0008_M:0x 0004"), mockClipboard.GetText()); |
| 626 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 627 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 628 | + vmPointerFinder.PotentialPointers().GetItemAt(1)->SetSelected(false); |
| 629 | + |
| 630 | + // first part of chain |
| 631 | + vmPointerFinder.PotentialPointers().GetItemAt(2)->SetSelected(true); |
| 632 | + vmPointerFinder.CopySelectedToClipboard(); |
| 633 | + Assert::AreEqual(std::wstring(L"I:0x 0020_I:0x 0008_I:0x 0000_M:0x 0004"), mockClipboard.GetText()); |
| 634 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 635 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 636 | + vmPointerFinder.PotentialPointers().GetItemAt(2)->SetSelected(false); |
| 637 | + mockClipboard.SetText(L""); |
| 638 | + |
| 639 | + // middle part of chain |
| 640 | + vmPointerFinder.PotentialPointers().GetItemAt(3)->SetSelected(true); |
| 641 | + vmPointerFinder.CopySelectedToClipboard(); |
| 642 | + Assert::AreEqual(std::wstring(L"I:0x 0020_I:0x 0008_I:0x 0000_M:0x 0004"), mockClipboard.GetText()); |
| 643 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 644 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 645 | + vmPointerFinder.PotentialPointers().GetItemAt(3)->SetSelected(false); |
| 646 | + mockClipboard.SetText(L""); |
| 647 | + |
| 648 | + // end part of chain |
| 649 | + vmPointerFinder.PotentialPointers().GetItemAt(4)->SetSelected(true); |
| 650 | + vmPointerFinder.CopySelectedToClipboard(); |
| 651 | + Assert::AreEqual(std::wstring(L"I:0x 0020_I:0x 0008_I:0x 0000_M:0x 0004"), mockClipboard.GetText()); |
| 652 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 653 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 654 | + mockClipboard.SetText(L""); |
| 655 | + |
| 656 | + // entire chain |
| 657 | + vmPointerFinder.PotentialPointers().GetItemAt(3)->SetSelected(false); |
| 658 | + vmPointerFinder.PotentialPointers().GetItemAt(2)->SetSelected(false); |
| 659 | + vmPointerFinder.CopySelectedToClipboard(); |
| 660 | + Assert::AreEqual(std::wstring(L"I:0x 0020_I:0x 0008_I:0x 0000_M:0x 0004"), mockClipboard.GetText()); |
| 661 | + Assert::IsFalse(vmPointerFinder.mockDesktop.WasDialogShown()); |
| 662 | + vmPointerFinder.mockDesktop.ResetExpectedWindows(); |
| 663 | + } |
| 664 | + |
| 665 | + TEST_METHOD(TestCopySelectedToClipboardMultipleSelections) |
| 666 | + { |
| 667 | + PointerFinderViewModelHarness vmPointerFinder; |
| 668 | + ra::services::mocks::MockClipboard mockClipboard; |
| 669 | + vmPointerFinder.mockGameContext.SetGameId(1U); |
| 670 | + vmPointerFinder.SetSearchType(ra::services::SearchType::SixteenBitAligned); |
| 671 | + |
| 672 | + // initialize results |
| 673 | + ra::services::PointerFinder::PotentialPointer pPointer; |
| 674 | + pPointer.nRootAddress = 0x009c; |
| 675 | + pPointer.vOffsets.at(0) = 0; |
| 676 | + pPointer.nOffsetLength = 1; |
| 677 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 678 | + |
| 679 | + pPointer.nRootAddress = 0x0008; |
| 680 | + pPointer.vOffsets.at(0) = 4; |
| 681 | + pPointer.nOffsetLength = 1; |
| 682 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 683 | + |
| 684 | + pPointer.nRootAddress = 0x0020; |
| 685 | + pPointer.vOffsets.at(0) = 8; |
| 686 | + pPointer.vOffsets.at(1) = 0; |
| 687 | + pPointer.vOffsets.at(2) = 4; |
| 688 | + pPointer.nOffsetLength = 3; |
| 689 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 690 | + |
| 691 | + pPointer.nRootAddress = 0x0070; |
| 692 | + pPointer.vOffsets.at(0) = 4; |
| 693 | + pPointer.nOffsetLength = 1; |
| 694 | + vmPointerFinder.AddPotentialPointer(pPointer, ra::data::Memory::Size::SixteenBit); |
| 695 | + |
| 696 | + // selection |
| 697 | + vmPointerFinder.PotentialPointers().GetItemAt(1)->SetSelected(true); |
| 698 | + vmPointerFinder.PotentialPointers().GetItemAt(4)->SetSelected(true); |
| 699 | + |
| 700 | + bool bDialogSeen = false; |
| 701 | + vmPointerFinder.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>( |
| 702 | + [&bDialogSeen](const ra::ui::viewmodels::MessageBoxViewModel& vmMessageBox) { |
| 703 | + Assert::AreEqual(std::wstring(L"Multiple items selected"), vmMessageBox.GetHeader()); |
| 704 | + Assert::AreEqual(std::wstring(L"Only one item can be copied at a time."), vmMessageBox.GetMessage()); |
| 705 | + |
| 706 | + bDialogSeen = true; |
| 707 | + return ra::ui::DialogResult::OK; |
| 708 | + } |
| 709 | + ); |
| 710 | + vmPointerFinder.CopySelectedToClipboard(); |
| 711 | + Assert::AreEqual(std::wstring(L""), mockClipboard.GetText()); |
| 712 | + Assert::IsTrue(bDialogSeen); |
| 713 | + } |
| 714 | + |
577 | 715 | TEST_METHOD(TestExportResults) |
578 | 716 | { |
579 | 717 | PointerFinderViewModelHarness vmPointerFinder; |
|
0 commit comments