From c1468b1baa8fae591e52a85a7202c877ef9f1e15 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:39:43 +0200 Subject: [PATCH 1/3] Update libscratchcpp to latest master --- libscratchcpp | 2 +- test/mocks/enginemock.h | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/libscratchcpp b/libscratchcpp index f74e244..537ff52 160000 --- a/libscratchcpp +++ b/libscratchcpp @@ -1 +1 @@ -Subproject commit f74e2448f5f174be7c0fcc9d826102a4588c6b47 +Subproject commit 537ff52a7500d17d07df7ea31c7023358824e344 diff --git a/test/mocks/enginemock.h b/test/mocks/enginemock.h index a974ac5..48032d4 100644 --- a/test/mocks/enginemock.h +++ b/test/mocks/enginemock.h @@ -19,9 +19,9 @@ class EngineMock : public IEngine MOCK_METHOD(void, start, (), (override)); MOCK_METHOD(void, stop, (), (override)); MOCK_METHOD(VirtualMachine *, startScript, (std::shared_ptr, Target *), (override)); - MOCK_METHOD(void, broadcast, (int), (override)); - MOCK_METHOD(void, broadcastByPtr, (Broadcast *), (override)); - MOCK_METHOD(void, startBackdropScripts, (Broadcast *), (override)); + MOCK_METHOD(void, broadcast, (int, VirtualMachine *), (override)); + MOCK_METHOD(void, broadcastByPtr, (Broadcast *, VirtualMachine *), (override)); + MOCK_METHOD(void, startBackdropScripts, (Broadcast *, VirtualMachine *), (override)); MOCK_METHOD(void, stopScript, (VirtualMachine *), (override)); MOCK_METHOD(void, stopTarget, (Target *, VirtualMachine *), (override)); MOCK_METHOD(void, initClone, (std::shared_ptr), (override)); @@ -82,9 +82,6 @@ class EngineMock : public IEngine MOCK_METHOD(bool, spriteFencingEnabled, (), (const, override)); MOCK_METHOD(void, setSpriteFencingEnabled, (bool), (override)); - MOCK_METHOD(bool, broadcastRunning, (unsigned int), (override)); - MOCK_METHOD(bool, broadcastByPtrRunning, (Broadcast *), (override)); - MOCK_METHOD(void, requestRedraw, (), (override)); MOCK_METHOD(ITimer *, timer, (), (const, override)); From 03ffc205f5480f9f419d4267ca15721c3bb4ae07 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:37:49 +0200 Subject: [PATCH 2/3] Add project running API to ProjectLoader --- src/projectloader.cpp | 13 ++++++++++++- src/projectloader.h | 5 +++++ test/projectloader/projectloader_test.cpp | 23 +++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/projectloader.cpp b/src/projectloader.cpp index 3090487..6344911 100644 --- a/src/projectloader.cpp +++ b/src/projectloader.cpp @@ -128,6 +128,11 @@ bool ProjectLoader::loadStatus() const return m_loadStatus; } +bool ProjectLoader::running() const +{ + return m_running; +} + IEngine *ProjectLoader::engine() const { if (m_loadThread.isRunning()) @@ -216,9 +221,15 @@ void ProjectLoader::timerEvent(QTimerEvent *event) if (m_loadThread.isRunning()) return; - if (m_engine) + if (m_engine) { m_engine->step(); + if (m_running != m_engine->isRunning()) { + m_running = !m_running; + emit runningChanged(); + } + } + event->accept(); } diff --git a/src/projectloader.h b/src/projectloader.h index 8c949c9..286cade 100644 --- a/src/projectloader.h +++ b/src/projectloader.h @@ -24,6 +24,7 @@ class ProjectLoader : public QObject QML_ELEMENT Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged) Q_PROPERTY(bool loadStatus READ loadStatus NOTIFY loadStatusChanged) + Q_PROPERTY(bool running READ running NOTIFY runningChanged) Q_PROPERTY(libscratchcpp::IEngine *engine READ engine NOTIFY engineChanged) Q_PROPERTY(StageModel *stage READ stage NOTIFY stageChanged) Q_PROPERTY(QQmlListProperty sprites READ sprites NOTIFY spritesChanged) @@ -48,6 +49,8 @@ class ProjectLoader : public QObject bool loadStatus() const; + bool running() const; + libscratchcpp::IEngine *engine() const; void setEngine(libscratchcpp::IEngine *engine); @@ -96,6 +99,7 @@ class ProjectLoader : public QObject void fileNameChanged(); void loadStatusChanged(); void loadingFinished(); + void runningChanged(); void engineChanged(); void stageChanged(); void spritesChanged(); @@ -135,6 +139,7 @@ class ProjectLoader : public QObject QString m_fileName; QFuture m_loadThread; libscratchcpp::Project m_project; + bool m_running = false; libscratchcpp::IEngine *m_engine = nullptr; QMutex m_engineMutex; bool m_loadStatus = false; diff --git a/test/projectloader/projectloader_test.cpp b/test/projectloader/projectloader_test.cpp index ea0350e..d3414be 100644 --- a/test/projectloader/projectloader_test.cpp +++ b/test/projectloader/projectloader_test.cpp @@ -163,12 +163,35 @@ TEST_F(ProjectLoaderTest, StartStop) TEST_F(ProjectLoaderTest, TimerEvent) { ProjectLoader loader; + ASSERT_FALSE(loader.running()); EngineMock engine; loader.setEngine(&engine); QTimerEvent event(0); + QSignalSpy runningSpy(&loader, &ProjectLoader::runningChanged); EXPECT_CALL(engine, step()); + EXPECT_CALL(engine, isRunning()).WillOnce(Return(false)); QCoreApplication::sendEvent(&loader, &event); + ASSERT_FALSE(loader.running()); + ASSERT_TRUE(runningSpy.empty()); + + EXPECT_CALL(engine, step()); + EXPECT_CALL(engine, isRunning()).WillOnce(Return(true)); + QCoreApplication::sendEvent(&loader, &event); + ASSERT_TRUE(loader.running()); + ASSERT_EQ(runningSpy.size(), 1); + + EXPECT_CALL(engine, step()); + EXPECT_CALL(engine, isRunning()).WillOnce(Return(true)); + QCoreApplication::sendEvent(&loader, &event); + ASSERT_TRUE(loader.running()); + ASSERT_EQ(runningSpy.size(), 1); + + EXPECT_CALL(engine, step()); + EXPECT_CALL(engine, isRunning()).WillOnce(Return(false)); + QCoreApplication::sendEvent(&loader, &event); + ASSERT_FALSE(loader.running()); + ASSERT_EQ(runningSpy.size(), 2); } TEST_F(ProjectLoaderTest, QuestionAsked) From 5727bde2c4bf025a1076ccd5426e2d40dc95fdd9 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:37:59 +0200 Subject: [PATCH 3/3] ProjectPlayer: Add running property --- src/ProjectPlayer.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 7baffa5..5d12c3d 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -11,6 +11,7 @@ ProjectScene { readonly property string fileName: loader.fileName property int stageWidth: 480 property int stageHeight: 360 + readonly property bool running: loader.running property alias fps: loader.fps property alias turboMode: loader.turboMode property alias cloneLimit: loader.cloneLimit