From a11118dce1dbc351c1fc814e0630522ac7224570 Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Tue, 28 Jul 2026 21:13:48 -0500 Subject: [PATCH 1/5] Move BoxViewDetector and SummaryScreenDetector to their own files. --- .../Inference/PokemonHome_BoxViewDetector.cpp | 30 +++++++++++++ .../Inference/PokemonHome_BoxViewDetector.h | 45 +++++++++++++++++++ .../Inference/PokemonHome_ButtonDetector.cpp | 28 ------------ .../Inference/PokemonHome_ButtonDetector.h | 43 ------------------ .../PokemonHome_SummaryScreenDetector.cpp | 33 ++++++++++++++ .../PokemonHome_SummaryScreenDetector.h | 44 ++++++++++++++++++ .../Programs/PokemonHome_BoxSorter.cpp | 5 ++- .../PokemonHome_BoxSorterLivingDex.cpp | 6 ++- .../Source/Tests/PokemonHome_Tests.cpp | 6 ++- SerialPrograms/cmake/SourceFiles.cmake | 4 ++ 10 files changed, 169 insertions(+), 75 deletions(-) create mode 100644 SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp create mode 100644 SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h create mode 100644 SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp create mode 100644 SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp new file mode 100644 index 0000000000..0220e273fb --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp @@ -0,0 +1,30 @@ +/* Button Detector + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#include "Kernels/Waterfill/Kernels_Waterfill_Types.h" +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" +#include "CommonTools/Images/WaterfillUtilities.h" +#include "CommonTools/ImageMatch/WaterfillTemplateMatcher.h" +#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" +#include "PokemonHome_BoxViewDetector.h" + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonHome{ + +BoxViewDetector::BoxViewDetector(VideoOverlay* overlay) : m_button_plus_detector(COLOR_BLACK, ButtonType::ButtonPlus, { 0.100, 0.956, 0.107, 0.041 }, overlay){} + +void BoxViewDetector::make_overlays(VideoOverlaySet& items) const{ + m_button_plus_detector.make_overlays(items); +} + +bool BoxViewDetector::detect(const ImageViewRGB32& screen){ + return m_button_plus_detector.detect(screen); +} + +} +} +} diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h new file mode 100644 index 0000000000..9f6a680e8d --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h @@ -0,0 +1,45 @@ +/* Box View Detector + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#ifndef PokemonAutomation_PokemonHome_BoxViewDetector_H +#define PokemonAutomation_PokemonHome_BoxViewDetector_H + +#include +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" +#include "CommonTools/VisualDetector.h" +#include "CommonTools/InferenceCallbacks/VisualInferenceCallback.h" +#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" + +namespace PokemonAutomation{ +class Logger; +namespace NintendoSwitch{ +namespace PokemonHome{ + +class BoxViewDetector : public StaticScreenDetector{ +public: + BoxViewDetector(VideoOverlay* overlay = nullptr); + + virtual void make_overlays(VideoOverlaySet& items) const override; + virtual bool detect(const ImageViewRGB32& screen) override; + + virtual void reset_state() override { m_button_plus_detector.reset_state(); } + +private: + ButtonDetector m_button_plus_detector; + +}; +class BoxViewWatcher : public DetectorToFinder{ +public: + BoxViewWatcher(VideoOverlay* overlay = nullptr) + : DetectorToFinder("BoxViewWatcher", Milliseconds(100), overlay) + {} +}; + + +} +} +} +#endif diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.cpp index c197c0fc22..a0352b4461 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.cpp @@ -156,34 +156,6 @@ bool ButtonDetector::detect(const ImageViewRGB32& screen){ } -BoxViewDetector::BoxViewDetector(VideoOverlay* overlay) : m_button_plus_detector(COLOR_BLACK, ButtonType::ButtonPlus, {0.100, 0.956, 0.107, 0.041}, overlay){} - -void BoxViewDetector::make_overlays(VideoOverlaySet& items) const{ - m_button_plus_detector.make_overlays(items); -} - -bool BoxViewDetector::detect(const ImageViewRGB32& screen){ - return m_button_plus_detector.detect(screen); -} - - -SummaryScreenDetector::SummaryScreenDetector(VideoOverlay* overlay) : m_button_B_detector(COLOR_BLACK, ButtonType::ButtonB, {0.100, 0.956, 0.107, 0.041}, overlay){} - -void SummaryScreenDetector::make_overlays(VideoOverlaySet& items) const{ - m_button_B_detector.make_overlays(items); -} - -bool SummaryScreenDetector::detect(const ImageViewRGB32& screen){ - return m_button_B_detector.detect(screen); -} - - - - - - - - } } } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.h index 27cc5eb462..ec13932079 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.h +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_ButtonDetector.h @@ -64,49 +64,6 @@ class ButtonWatcher : public DetectorToFinder{ }; -class BoxViewDetector : public StaticScreenDetector{ -public: - BoxViewDetector(VideoOverlay* overlay = nullptr); - - virtual void make_overlays(VideoOverlaySet& items) const override; - virtual bool detect(const ImageViewRGB32& screen) override; - - virtual void reset_state() override { m_button_plus_detector.reset_state(); } - -private: - ButtonDetector m_button_plus_detector; - -}; -class BoxViewWatcher : public DetectorToFinder{ -public: - BoxViewWatcher(VideoOverlay* overlay = nullptr) - : DetectorToFinder("BoxViewWatcher", Milliseconds(100), overlay) - {} -}; - - -class SummaryScreenDetector : public StaticScreenDetector{ -public: - SummaryScreenDetector(VideoOverlay* overlay = nullptr); - - virtual void make_overlays(VideoOverlaySet& items) const override; - virtual bool detect(const ImageViewRGB32& screen) override; - - virtual void reset_state() override { m_button_B_detector.reset_state(); } - -private: - ButtonDetector m_button_B_detector; - -}; -class SummaryScreenWatcher : public DetectorToFinder{ -public: - SummaryScreenWatcher(VideoOverlay* overlay = nullptr) - : DetectorToFinder("SummaryScreenWatcher", Milliseconds(100), overlay) - {} -}; - - - } } } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp new file mode 100644 index 0000000000..38096eb7e8 --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp @@ -0,0 +1,33 @@ +/* Button Detector + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#include "Kernels/Waterfill/Kernels_Waterfill_Types.h" +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" +#include "CommonTools/Images/WaterfillUtilities.h" +#include "CommonTools/ImageMatch/WaterfillTemplateMatcher.h" +#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" +#include "PokemonHome_SummaryScreenDetector.h" + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonHome{ + + +SummaryScreenDetector::SummaryScreenDetector(VideoOverlay* overlay) + : m_button_B_detector(COLOR_BLACK, ButtonType::ButtonB, { 0.100, 0.956, 0.107, 0.041 }, overlay){} + +void SummaryScreenDetector::make_overlays(VideoOverlaySet& items) const{ + m_button_B_detector.make_overlays(items); +} + +bool SummaryScreenDetector::detect(const ImageViewRGB32& screen){ + return m_button_B_detector.detect(screen); +} + + +} +} +} diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h new file mode 100644 index 0000000000..8790eb4e3c --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h @@ -0,0 +1,44 @@ +/* Summary Screen Detector + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#ifndef PokemonAutomation_PokemonHome_SummaryScreenDetector_H +#define PokemonAutomation_PokemonHome_SummaryScreenDetector_H + +#include +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" +#include "CommonTools/VisualDetector.h" +#include "CommonTools/InferenceCallbacks/VisualInferenceCallback.h" +#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" + +namespace PokemonAutomation{ +class Logger; +namespace NintendoSwitch{ +namespace PokemonHome{ + +class SummaryScreenDetector : public StaticScreenDetector{ +public: + SummaryScreenDetector(VideoOverlay* overlay = nullptr); + + virtual void make_overlays(VideoOverlaySet& items) const override; + virtual bool detect(const ImageViewRGB32& screen) override; + + virtual void reset_state() override { m_button_B_detector.reset_state(); } + +private: + ButtonDetector m_button_B_detector; + +}; +class SummaryScreenWatcher : public DetectorToFinder{ +public: + SummaryScreenWatcher(VideoOverlay* overlay = nullptr) + : DetectorToFinder("SummaryScreenWatcher", Milliseconds(100), overlay) + {} +}; + +} +} +} +#endif \ No newline at end of file diff --git a/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorter.cpp b/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorter.cpp index d9a8d7151b..aef6e56998 100644 --- a/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorter.cpp +++ b/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorter.cpp @@ -33,13 +33,16 @@ language #include "CommonFramework/ImageTools/ImageStats.h" #include "CommonFramework/Notifications/ProgramNotifications.h" #include "CommonFramework/ProgramStats/StatsTracking.h" +#include "CommonFramework/VideoPipeline/VideoOverlay.h" +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" #include "CommonTools/Async/InferenceRoutines.h" #include "CommonTools/StartupChecks/StartProgramChecks.h" #include "NintendoSwitch/Commands/NintendoSwitch_Commands_PushButtons.h" #include "Pokemon/Pokemon_Strings.h" #include "Pokemon/Pokemon_BoxCursor.h" #include "Pokemon/Pokemon_CollectedPokemonInfo.h" -#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" +#include "PokemonHome/Inference/PokemonHome_BoxViewDetector.h" +#include "PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h" #include "PokemonHome_BoxNavigation.h" #include "PokemonHome_BoxSorter.h" diff --git a/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorterLivingDex.cpp b/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorterLivingDex.cpp index 142d4a41b2..e03e7476fe 100644 --- a/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorterLivingDex.cpp +++ b/SerialPrograms/Source/PokemonHome/Programs/PokemonHome_BoxSorterLivingDex.cpp @@ -19,16 +19,18 @@ #include "CommonFramework/ImageTools/ImageStats.h" #include "CommonFramework/Notifications/ProgramNotifications.h" #include "CommonFramework/ProgramStats/StatsTracking.h" +#include "CommonFramework/VideoPipeline/VideoOverlay.h" +#include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" #include "CommonTools/Async/InferenceRoutines.h" #include "CommonTools/StartupChecks/StartProgramChecks.h" #include "CommonTools/OCR/OCR_StringNormalization.h" -#include "CommonFramework/VideoPipeline/VideoFeed.h" #include "NintendoSwitch/Commands/NintendoSwitch_Commands_PushButtons.h" #include "Pokemon/Inference/Pokemon_TypeReader.h" #include "Pokemon/Pokemon_Strings.h" #include "Pokemon/Pokemon_BoxCursor.h" #include "Pokemon/Pokemon_CollectedPokemonInfo.h" -#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" +#include "PokemonHome/Inference/PokemonHome_BoxViewDetector.h" +#include "PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h" #include "PokemonHome_BoxNavigation.h" #include "PokemonHome_BoxSorterLivingDex.h" diff --git a/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp b/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp index 59e8f62c4a..e9ea27069b 100644 --- a/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp +++ b/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp @@ -5,7 +5,11 @@ */ -#include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" +#include +#include +#include "CommonFramework/ImageTypes/ImageViewRGB32.h" +#include "PokemonHome/Inference/PokemonHome_BoxViewDetector.h" +#include "PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h" #include "PokemonHome_Tests.h" #include "TestUtils.h" diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index 7f905c6b4b..73eeea26eb 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -1631,6 +1631,8 @@ file(GLOB LIBRARY_SOURCES Source/PokemonHome/Inference/PokemonHome_BallReader.h Source/PokemonHome/Inference/PokemonHome_BoxGenderDetector.cpp Source/PokemonHome/Inference/PokemonHome_BoxGenderDetector.h + Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp + Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h Source/PokemonHome/Inference/PokemonHome_ButtonDetector.cpp Source/PokemonHome/Inference/PokemonHome_ButtonDetector.h Source/PokemonHome/Inference/PokemonHome_GigantamaxDetector.cpp @@ -1639,6 +1641,8 @@ file(GLOB LIBRARY_SOURCES Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.h Source/PokemonHome/Inference/PokemonHome_SelectionArrowDetector.cpp Source/PokemonHome/Inference/PokemonHome_SelectionArrowDetector.h + Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp + Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h Source/PokemonHome/Inference/PokemonHome_TeraTypeReader.cpp Source/PokemonHome/Inference/PokemonHome_TeraTypeReader.h Source/PokemonHome/PokemonHome_Panels.cpp From 28d0462f94e50b55ec010a435962b0c10e75d7fc Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Wed, 29 Jul 2026 13:20:04 -0500 Subject: [PATCH 2/5] Add BoxView Tests --- .../ComputerPrograms/UnitTestRunner.cpp | 2 + .../Inference/PokemonHome_BoxViewDetector.cpp | 43 +++++++++++++++++-- .../Inference/PokemonHome_BoxViewDetector.h | 4 +- .../Source/PokemonHome/PokemonHome_Tests.cpp | 23 ++++++++++ .../Source/PokemonHome/PokemonHome_Tests.h | 25 +++++++++++ SerialPrograms/cmake/SourceFiles.cmake | 2 + 6 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp create mode 100644 SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h diff --git a/SerialPrograms/Source/ComputerPrograms/UnitTestRunner.cpp b/SerialPrograms/Source/ComputerPrograms/UnitTestRunner.cpp index b0a4133822..ea9213b3de 100644 --- a/SerialPrograms/Source/ComputerPrograms/UnitTestRunner.cpp +++ b/SerialPrograms/Source/ComputerPrograms/UnitTestRunner.cpp @@ -12,6 +12,7 @@ #include "CommonFramework/Tools/GlobalThreadPools.h" #include "UnitTestRunner.h" +#include "PokemonHome/PokemonHome_Tests.h" #include "PokemonSwSh/PokemonSwSh_Tests.h" #include "PokemonLA/PokemonLA_Tests.h" #include "PokemonSV/PokemonSV_Tests.h" @@ -29,6 +30,7 @@ UnitTestDatabase make_UNIT_TESTS_ALL(){ UnitTestDatabase ret; OCR::add_tests(ret); + NintendoSwitch::PokemonHome::add_tests(ret); NintendoSwitch::PokemonSwSh::add_tests(ret); NintendoSwitch::PokemonLA::add_tests(ret); NintendoSwitch::PokemonSV::add_tests(ret); diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp index 0220e273fb..85fe289529 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp @@ -4,12 +4,16 @@ * */ -#include "Kernels/Waterfill/Kernels_Waterfill_Types.h" +#include +#include "Common/Cpp/Color.h" +#include "CommonFramework/Globals.h" +#include "CommonFramework/ImageTypes/ImageRGB32.h" +#include "CommonFramework/ImageTypes/ImageViewRGB32.h" +#include "CommonFramework/VideoPipeline/VideoOverlay.h" #include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" -#include "CommonTools/Images/WaterfillUtilities.h" -#include "CommonTools/ImageMatch/WaterfillTemplateMatcher.h" #include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" #include "PokemonHome_BoxViewDetector.h" +#include "Tests/TestUtils.h" namespace PokemonAutomation{ namespace NintendoSwitch{ @@ -25,6 +29,39 @@ bool BoxViewDetector::detect(const ImageViewRGB32& screen){ return m_button_plus_detector.detect(screen); } + + +class Test_BoxViewDetector : public UnitTest{ +public: + + Test_BoxViewDetector( + const std::string& image, + bool expected + ) + : UnitTest("PokemonHome::BoxViewDetector - " + image) + , m_image(UNIT_TEST_RESOURCE_PATH() + image) + , m_expected(expected) + {} + + virtual UnitTestResult run(Logger& logger, CancellableScope& scope) const override{ + DummyVideoOverlay overlay; + BoxViewDetector detector(&overlay); + ImageRGB32 image(m_image); + return detector.detect(image) == m_expected; + }; + +private: + std::string m_image; + bool m_expected; +}; + +void add_tests_BoxViewDetector(UnitTestDatabase& database){ + database.add("PokemonHome/BoxView/BoxView-1.png", true); + database.add("PokemonHome/SummaryScreen/enamorus_Shiny.png", false); + database.add("PokemonHome/SummaryScreen/machamp_Regular.png", false); + database.add("PokemonHome/SummaryScreen/rowlet_ShinyAlpha.png", false); +} + } } } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h index 9f6a680e8d..486628bb64 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.h @@ -7,10 +7,9 @@ #ifndef PokemonAutomation_PokemonHome_BoxViewDetector_H #define PokemonAutomation_PokemonHome_BoxViewDetector_H -#include +#include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" #include "CommonTools/VisualDetector.h" -#include "CommonTools/InferenceCallbacks/VisualInferenceCallback.h" #include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" namespace PokemonAutomation{ @@ -38,6 +37,7 @@ class BoxViewWatcher : public DetectorToFinder{ {} }; +void add_tests_BoxViewDetector(UnitTestDatabase& database); } } diff --git a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp new file mode 100644 index 0000000000..43f0acd4a4 --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp @@ -0,0 +1,23 @@ +/* Pokemon Home Tests + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#include "Common/Cpp/TestRunners/UnitTestDatabase.h" +#include "Inference/PokemonHome_BoxViewDetector.h" +#include "PokemonHome_Tests.h" + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonHome{ + + +void add_tests(UnitTestDatabase& database){ + add_tests_BoxViewDetector(database); +} + + +} +} +} \ No newline at end of file diff --git a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h new file mode 100644 index 0000000000..28b1b7143a --- /dev/null +++ b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h @@ -0,0 +1,25 @@ +/* Pokemon Home Tests + * + * From: https://github.com/PokemonAutomation/ + * + */ + +#ifndef PokemonAutomation_PokemonHome_Tests_H +#define PokemonAutomation_PokemonHome_Tests_H + +#include "Common/Cpp/TestRunners/UnitTest.h" + +namespace PokemonAutomation{ +namespace NintendoSwitch{ +namespace PokemonHome{ + + + +void add_tests(UnitTestDatabase& database); + + + +} +} +} +#endif \ No newline at end of file diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index 73eeea26eb..7f9f3ce3a1 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -1649,6 +1649,8 @@ file(GLOB LIBRARY_SOURCES Source/PokemonHome/PokemonHome_Panels.h Source/PokemonHome/PokemonHome_Settings.cpp Source/PokemonHome/PokemonHome_Settings.h + Source/PokemonHome/PokemonHome_Tests.cpp + Source/PokemonHome/PokemonHome_Tests.h Source/PokemonHome/Programs/PokemonHome_BoxNavigation.cpp Source/PokemonHome/Programs/PokemonHome_BoxNavigation.h Source/PokemonHome/Programs/PokemonHome_BoxSorter.cpp From 471bfae3c3d2be9dff1ca4c6bd2402d0b6c6dc37 Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Thu, 30 Jul 2026 08:56:45 -0500 Subject: [PATCH 3/5] Move SummaryScreenDetector tests --- .../PokemonHome_SummaryScreenDetector.cpp | 37 +++++++++++++++++-- .../PokemonHome_SummaryScreenDetector.h | 5 ++- .../Source/PokemonHome/PokemonHome_Tests.cpp | 2 + 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp index 38096eb7e8..64b199d82a 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.cpp @@ -4,12 +4,12 @@ * */ -#include "Kernels/Waterfill/Kernels_Waterfill_Types.h" +#include +#include "CommonFramework/Globals.h" #include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" -#include "CommonTools/Images/WaterfillUtilities.h" -#include "CommonTools/ImageMatch/WaterfillTemplateMatcher.h" #include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" #include "PokemonHome_SummaryScreenDetector.h" +#include "Tests/TestUtils.h" namespace PokemonAutomation{ namespace NintendoSwitch{ @@ -28,6 +28,37 @@ bool SummaryScreenDetector::detect(const ImageViewRGB32& screen){ } +class Test_SummaryScreenDetector : public UnitTest{ +public: + + Test_SummaryScreenDetector( + const std::string& image, + bool expected + ) + : UnitTest("PokemonHome::SummaryScreenDetector - " + image) + , m_image(UNIT_TEST_RESOURCE_PATH() + image) + , m_expected(expected) + {} + + virtual UnitTestResult run(Logger& logger, CancellableScope& scope) const override{ + DummyVideoOverlay overlay; + SummaryScreenDetector detector(&overlay); + ImageRGB32 image(m_image); + return detector.detect(image) == m_expected; + }; + +private: + std::string m_image; + bool m_expected; +}; + +void add_tests_SummaryScreenDetector(UnitTestDatabase& database){ + database.add("PokemonHome/BoxView/BoxView-1.png", false); + database.add("PokemonHome/SummaryScreen/enamorus_Shiny.png", true); + database.add("PokemonHome/SummaryScreen/machamp_Regular.png", true); + database.add("PokemonHome/SummaryScreen/rowlet_ShinyAlpha.png", true); +} + } } } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h index 8790eb4e3c..7952f61ba8 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h @@ -7,10 +7,9 @@ #ifndef PokemonAutomation_PokemonHome_SummaryScreenDetector_H #define PokemonAutomation_PokemonHome_SummaryScreenDetector_H -#include +#include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" #include "CommonTools/VisualDetector.h" -#include "CommonTools/InferenceCallbacks/VisualInferenceCallback.h" #include "PokemonHome/Inference/PokemonHome_ButtonDetector.h" namespace PokemonAutomation{ @@ -38,6 +37,8 @@ class SummaryScreenWatcher : public DetectorToFinder{ {} }; +void add_tests_SummaryScreenDetector(UnitTestDatabase& database); + } } } diff --git a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp index 43f0acd4a4..38a49302e7 100644 --- a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp +++ b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp @@ -6,6 +6,7 @@ #include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "Inference/PokemonHome_BoxViewDetector.h" +#include "Inference/PokemonHome_SummaryScreenDetector.h" #include "PokemonHome_Tests.h" namespace PokemonAutomation{ @@ -15,6 +16,7 @@ namespace PokemonHome{ void add_tests(UnitTestDatabase& database){ add_tests_BoxViewDetector(database); + add_tests_SummaryScreenDetector(database); } From 287571e7fc9c25252190505a028a9864134901d5 Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Thu, 30 Jul 2026 09:01:25 -0500 Subject: [PATCH 4/5] Remove old Home tests --- .../Source/PokemonHome/PokemonHome_Tests.h | 2 +- .../Source/Tests/PokemonHome_Tests.cpp | 48 ------------------- .../Source/Tests/PokemonHome_Tests.h | 26 ---------- SerialPrograms/Source/Tests/TestMap.cpp | 3 -- SerialPrograms/cmake/SourceFiles.cmake | 2 - 5 files changed, 1 insertion(+), 80 deletions(-) delete mode 100644 SerialPrograms/Source/Tests/PokemonHome_Tests.cpp delete mode 100644 SerialPrograms/Source/Tests/PokemonHome_Tests.h diff --git a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h index 28b1b7143a..83905ae9a2 100644 --- a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h +++ b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.h @@ -7,7 +7,7 @@ #ifndef PokemonAutomation_PokemonHome_Tests_H #define PokemonAutomation_PokemonHome_Tests_H -#include "Common/Cpp/TestRunners/UnitTest.h" +#include "Common/Cpp/TestRunners/UnitTestDatabase.h" namespace PokemonAutomation{ namespace NintendoSwitch{ diff --git a/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp b/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp deleted file mode 100644 index e9ea27069b..0000000000 --- a/SerialPrograms/Source/Tests/PokemonHome_Tests.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* PokemonHome Tests - * - * From: https://github.com/PokemonAutomation/ - * - */ - - -#include -#include -#include "CommonFramework/ImageTypes/ImageViewRGB32.h" -#include "PokemonHome/Inference/PokemonHome_BoxViewDetector.h" -#include "PokemonHome/Inference/PokemonHome_SummaryScreenDetector.h" -#include "PokemonHome_Tests.h" -#include "TestUtils.h" - -#include -using std::cout; -using std::cerr; -using std::endl; - -namespace PokemonAutomation{ - -using namespace NintendoSwitch; -using namespace NintendoSwitch::PokemonHome; - -int test_pokemonHome_BoxView(const ImageViewRGB32& image, const std::vector& keywords){ - SummaryScreenDetector summary_screen_detector; - bool result = summary_screen_detector.detect(image); - TEST_RESULT_EQUAL(result, false); - - BoxViewDetector box_view_detector; - result = box_view_detector.detect(image); - TEST_RESULT_EQUAL(result, true); - return 0; -} - -int test_pokemonHome_SummaryScreen(const ImageViewRGB32& image, const std::vector& keywords){ - SummaryScreenDetector summary_screen_detector; - bool result = summary_screen_detector.detect(image); - TEST_RESULT_EQUAL(result, true); - - BoxViewDetector box_view_detector; - result = box_view_detector.detect(image); - TEST_RESULT_EQUAL(result, false); - return 0; -} - -} diff --git a/SerialPrograms/Source/Tests/PokemonHome_Tests.h b/SerialPrograms/Source/Tests/PokemonHome_Tests.h deleted file mode 100644 index 156f743e94..0000000000 --- a/SerialPrograms/Source/Tests/PokemonHome_Tests.h +++ /dev/null @@ -1,26 +0,0 @@ -/* PokemonHome Tests - * - * From: https://github.com/PokemonAutomation/ - * - * - */ - - -#ifndef PokemonAutomation_Tests_PokemonHome_Tests_H -#define PokemonAutomation_Tests_PokemonHome_Tests_H - -#include -#include - -namespace PokemonAutomation{ - -class ImageViewRGB32; - - -int test_pokemonHome_BoxView(const ImageViewRGB32& image, const std::vector& keywords); - -int test_pokemonHome_SummaryScreen(const ImageViewRGB32& image, const std::vector& keywords); - -} - -#endif diff --git a/SerialPrograms/Source/Tests/TestMap.cpp b/SerialPrograms/Source/Tests/TestMap.cpp index 208941f9b1..331ed0a903 100644 --- a/SerialPrograms/Source/Tests/TestMap.cpp +++ b/SerialPrograms/Source/Tests/TestMap.cpp @@ -10,7 +10,6 @@ #include "Kernels_Tests.h" #include "NintendoSwitch_Tests.h" #include "PokemonFRLG_Tests.h" -#include "PokemonHome_Tests.h" #include "PokemonLZA_Tests.h" #include "PokemonSV_Tests_Old.h" #include "TestMap.h" @@ -232,8 +231,6 @@ const std::map TEST_MAP = { {"NintendoSwitch_CheckOnlineDetector", std::bind(image_bool_detector_helper, test_NintendoSwitch_CheckOnlineDetector, _1)}, {"NintendoSwitch_FailedToConnectDetector", std::bind(image_bool_detector_helper, test_NintendoSwitch_FailedToConnectDetector, _1)}, {"NintendoSwitch_UpdatePopupDetector", std::bind(image_bool_detector_helper, test_NintendoSwitch_UpdatePopupDetector, _1)}, - {"PokemonHome_BoxView", std::bind(image_words_detector_helper, test_pokemonHome_BoxView, _1)}, - {"PokemonHome_SummaryScreen", std::bind(image_words_detector_helper, test_pokemonHome_SummaryScreen, _1)}, {"PokemonSV_TeraTypeReader", std::bind(image_words_detector_helper, test_pokemonSV_TeraTypeReader, _1)}, {"PokemonSV_SandwichRecipeDetector", std::bind(image_words_detector_helper, test_pokemonSV_SandwichRecipeDetector, _1)}, {"PokemonSV_SandwichHandDetector", std::bind(image_words_detector_helper, test_pokemonSV_SandwichHandDetector, _1)}, diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index 7f9f3ce3a1..d6f441ee5a 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -2912,8 +2912,6 @@ file(GLOB LIBRARY_SOURCES Source/Tests/NintendoSwitch_Tests.h Source/Tests/PokemonFRLG_Tests.cpp Source/Tests/PokemonFRLG_Tests.h - Source/Tests/PokemonHome_Tests.cpp - Source/Tests/PokemonHome_Tests.h Source/Tests/PokemonLZA_Tests.cpp Source/Tests/PokemonLZA_Tests.h Source/Tests/PokemonSV_Tests_Old.cpp From a49ef5bde478c18d5524f60c8cd586803880f291 Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Thu, 30 Jul 2026 09:07:55 -0500 Subject: [PATCH 5/5] fix tabs --- .../PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp index 85fe289529..7f72d864be 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_BoxViewDetector.cpp @@ -34,7 +34,7 @@ bool BoxViewDetector::detect(const ImageViewRGB32& screen){ class Test_BoxViewDetector : public UnitTest{ public: - Test_BoxViewDetector( + Test_BoxViewDetector( const std::string& image, bool expected )