From fa575f91b1674da734e3209a062b744d2777667f Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 16 Sep 2024 16:40:04 +0200 Subject: [PATCH 1/2] Add unsupportedBlocks property to ProjectLoader --- src/projectloader.cpp | 14 ++++++++++++++ src/projectloader.h | 5 +++++ test/projectloader/projectloader_test.cpp | 21 +++++++++++++++++++++ test/unsupported_blocks.sb3 | Bin 0 -> 2106 bytes 4 files changed, 40 insertions(+) create mode 100644 test/unsupported_blocks.sb3 diff --git a/src/projectloader.cpp b/src/projectloader.cpp index 6344911..cc6a3ee 100644 --- a/src/projectloader.cpp +++ b/src/projectloader.cpp @@ -188,6 +188,11 @@ const QList &ProjectLoader::monitorList() const return m_monitors; } +const QStringList &ProjectLoader::unsupportedBlocks() const +{ + return m_unsupportedBlocks; +} + void ProjectLoader::start() { if (m_loadThread.isRunning()) @@ -300,6 +305,15 @@ void ProjectLoader::load() return; } + // Get unsupported blocks + const auto &unsupportedBlocks = m_engine->unsupportedBlocks(); + m_unsupportedBlocks.clear(); + + for (const std::string &opcode : unsupportedBlocks) + m_unsupportedBlocks.push_back(QString::fromStdString(opcode)); + + emit unsupportedBlocksChanged(); + m_engineMutex.unlock(); emit loadStatusChanged(); diff --git a/src/projectloader.h b/src/projectloader.h index 286cade..a645afa 100644 --- a/src/projectloader.h +++ b/src/projectloader.h @@ -30,6 +30,7 @@ class ProjectLoader : public QObject Q_PROPERTY(QQmlListProperty sprites READ sprites NOTIFY spritesChanged) Q_PROPERTY(QQmlListProperty clones READ clones NOTIFY clonesChanged) Q_PROPERTY(QQmlListProperty monitors READ monitors NOTIFY monitorsChanged) + Q_PROPERTY(QStringList unsupportedBlocks READ unsupportedBlocks NOTIFY unsupportedBlocksChanged) Q_PROPERTY(double fps READ fps WRITE setFps NOTIFY fpsChanged) Q_PROPERTY(bool turboMode READ turboMode WRITE setTurboMode NOTIFY turboModeChanged) Q_PROPERTY(unsigned int stageWidth READ stageWidth WRITE setStageWidth NOTIFY stageWidthChanged) @@ -65,6 +66,8 @@ class ProjectLoader : public QObject QQmlListProperty monitors(); const QList &monitorList() const; + const QStringList &unsupportedBlocks() const; + Q_INVOKABLE void start(); Q_INVOKABLE void stop(); @@ -105,6 +108,7 @@ class ProjectLoader : public QObject void spritesChanged(); void clonesChanged(); void monitorsChanged(); + void unsupportedBlocksChanged(); void fpsChanged(); void turboModeChanged(); void stageWidthChanged(); @@ -147,6 +151,7 @@ class ProjectLoader : public QObject QList m_sprites; QList m_clones; QList m_monitors; + QStringList m_unsupportedBlocks; double m_fps = 30; bool m_turboMode = false; unsigned int m_stageWidth = 480; diff --git a/test/projectloader/projectloader_test.cpp b/test/projectloader/projectloader_test.cpp index d3414be..96ee1f2 100644 --- a/test/projectloader/projectloader_test.cpp +++ b/test/projectloader/projectloader_test.cpp @@ -32,6 +32,7 @@ class ProjectLoaderTest : public testing::Test QSignalSpy clonesSpy(loader, &ProjectLoader::clonesChanged); QSignalSpy monitorsSpy(loader, &ProjectLoader::monitorsChanged); QSignalSpy monitorAddedSpy(loader, &ProjectLoader::monitorAdded); + QSignalSpy unsupportedBlocksSpy(loader, &ProjectLoader::unsupportedBlocksChanged); loader->setFileName(fileName); @@ -60,6 +61,7 @@ class ProjectLoaderTest : public testing::Test ASSERT_EQ(clonesSpy.count(), 1); ASSERT_EQ(monitorsSpy.count(), loader->monitorList().size() + 1); ASSERT_EQ(monitorAddedSpy.count(), loader->monitorList().size()); + ASSERT_EQ(unsupportedBlocksSpy.count(), 1); } }; @@ -107,6 +109,25 @@ TEST_F(ProjectLoaderTest, Load) ASSERT_EQ(valueMonitorModel->color(), QColor::fromString("#FF8C1A")); } +TEST_F(ProjectLoaderTest, UnsupportedBlocks) +{ + ProjectLoader loader; + ASSERT_TRUE(loader.fileName().isEmpty()); + ASSERT_FALSE(loader.loadStatus()); + ASSERT_TRUE(loader.stage()); + + loader.setFileName("unsupported_blocks.sb3"); + loader.start(); // wait until it loads + + auto engine = loader.engine(); + const auto &blocks = loader.unsupportedBlocks(); + const auto &refBlocks = engine->unsupportedBlocks(); + ASSERT_EQ(blocks.size(), refBlocks.size()); + + for (const QString &opcode : blocks) + ASSERT_NE(refBlocks.find(opcode.toStdString()), refBlocks.cend()); +} + TEST_F(ProjectLoaderTest, Clones) { ProjectLoader loader; diff --git a/test/unsupported_blocks.sb3 b/test/unsupported_blocks.sb3 new file mode 100644 index 0000000000000000000000000000000000000000..7098a6541e5407b4cd03d024d87b350443ce34ee GIT binary patch literal 2106 zcma)-XHXLg633HBJt8WJAc$xvQbaL8s4t))AVN?;2tD+!1gUwCCP5Gd6=_lo0Zae| zLW{v$H$<|FHYzXK8+j?;ijFKnO6LB;ime z{Z=4X002lm4gi1;rokcj0B_H*3jv|{pm+9xc9Uk%y>np=6$&{WcfWtF7ddTAB^Fw~ zs#Q9bE{smcJi~yJHyCrde3}7ek6&*&spm3hc`F*eXG1T+BxRR~A(5hBhQ<8Rcy$FC zu{(#)Z-QI2fIrht1iQ(OMvBHd+cEVg^q;@IeUWxky!6FPDEB$Syh5*L`_hJO+8-jo zoFwyvc~H?@gh{?$W{{)*s!>SX@|UzDMJ(#2g-rqn*lc;jU5D71Z+}XSY|I<_$*QrPqkG6h8}3XPfhKoG%q;*-(eEu$Z(?FN$hglq7rA~Io?kwQi$#%s16^NRN`Pis1h?nTeLoU zme3QXL{Up+qN_y`=;=*NC=9JyXf*VY&;%1OUV})WWp~O6@f!?$;#AiRtRPB%@5s)_ z=bsC>5i4c(pNHhg!u{mbw95S8vb-cc6RF3>O1vM^gm-RKYZ)c>F~jyC-63JnqzWXGGggZ2Wm_;KR(>LO%5qRksl>wEG@#MaV? z@Ai)nlg(HKll~^XHZg*<3Kj4E;3`vY)8GiVEqEXS#LkX|onv>71TDKl0#2*^`Z-bt z3iQ}6yj1@Cs4yQu`=x;zA@gjbQKuR%;+Yc{;wCxp0+B7|&40$wY5^hdsTgY_Hi2W& z6NM9Adz`3WE$GWjX4W4=mw0kB?ldW;bSP|m32m!+X`n&X^Vm+s0#EnI6kG3Xu$fks zqr=lv8DR{6(#;-x(@A@DjHKL-E5loLpL12WC4)6+{*{q{i^QWUC%?wt#!l&6I2B}D zJUynPWk8I}_fs7o-wl+TY=K~fMo)xVus(~eF7Our)Y=)GMgAtaF*HQ_Qk?tg{%8Qs zX2N8~mM@r{*>^o?cilgoP?^H@j;ZR#iZ+}<&QNfz8WEk5B_HzuzviL4TxIH3>U_IP z`1Lz84|f;oV{u72r>Ii%AX>8sPl|P21uGAwS?$&T=;PRY^NY?Zkf#0!bK$STZoQ{? zizF6Oyfp?rK2W|v^|48Y7hY?wN{Fsh@lwiP(v@YFA3nC-KIS1YL32OCTWP2>5RBb& zE1WLR@!e}Isq!(JTq0|#1<;VB4{q$U;t)hdqk!_$ZvM0oe$hovv%fEq1U==PaeE}U zH!zCi8_#CGL}FK~XJnH}cjW}jH={Xa?-}~MYww)k;d)!trHP#c+qM#3KR<+Vie@-s;MVZ7!`DtXTICd(V(WV4F*G1ch|JwF_U%BUOJV zcHHy%V2JBcoN^4E)$y~*a2@RHHA>HkVn#^ohi4`|RCc`L{xIbe6*man)=maXkVHuz zN@CN!IQve@d$0`&KOw|7xEvk?6Nl4G?>CC+NGBO;W)rI}(HB!0Aiq3e zQyqb(0sC<+`vIqY%lX=lspN1lrbVrPWtDq5Tl;0s6MDkoM-Kdsmp6w4Z@oTrPk@aR zqOlb(TcYf?`!_7h+S~dUlnS*`9l_{?D>zgOXbqkAajgpZCgSmTxYoH7N9++4qrPZ9 zZQ2%c+7*_G1Le#w?#cVm{Hy)6!1}362mlrBJj2dHgqnCCw#Ni)M$??c`zjHHAr)_~HDZZVzlG zgeONlPj_KyV9cyk?uTfR%kpme!p3KNQ)=x^=|#PoxL#rLlwSbL|3X-D?@?gJ0lK;l zB!3`JFLgKquIY6Vp#k^t^6~LdS69EN>3z}L6XETpqv?JjG{X0mg}G?L8R&G>gE59+ z8%?vN`0Dk32;JF8<^g5DO_@uS0bzphA!iiN}eEplbTiNNyO{ z0hUo+M6~E0(z%kD?dN~jRGAz0PXlnVO1JgR)+?0G=lSGc#9CTl&D%1OJDY7MoYy}c z%9WA9zX_keM&cK^qP@>&p!=yLPS_12vASg*cW@LC1O@zWG9O&_m-s8E|L*+zL;hoH bJs|!6^Bzlc{)0^b0CbS42Q^3V-`&3e4sy|z literal 0 HcmV?d00001 From 1fa0db02f6a38d1a7036b0ca7d821239918df5e6 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 16 Sep 2024 16:40:25 +0200 Subject: [PATCH 2/2] ProjectPlayer: Add unsupportedBlocks property --- src/ProjectPlayer.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 5d12c3d..b0b200c 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -12,6 +12,7 @@ ProjectScene { property int stageWidth: 480 property int stageHeight: 360 readonly property bool running: loader.running + readonly property list unsupportedBlocks: loader.unsupportedBlocks property alias fps: loader.fps property alias turboMode: loader.turboMode property alias cloneLimit: loader.cloneLimit