Skip to content

Commit 9a4c73c

Browse files
authored
Merge pull request #145 from scratchcpp/unsupported_blocks
Add API for unsupported blocks
2 parents de66d83 + 1fa0db0 commit 9a4c73c

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed

src/ProjectPlayer.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ProjectScene {
1212
property int stageWidth: 480
1313
property int stageHeight: 360
1414
readonly property bool running: loader.running
15+
readonly property list<string> unsupportedBlocks: loader.unsupportedBlocks
1516
property alias fps: loader.fps
1617
property alias turboMode: loader.turboMode
1718
property alias cloneLimit: loader.cloneLimit

src/projectloader.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ const QList<MonitorModel *> &ProjectLoader::monitorList() const
188188
return m_monitors;
189189
}
190190

191+
const QStringList &ProjectLoader::unsupportedBlocks() const
192+
{
193+
return m_unsupportedBlocks;
194+
}
195+
191196
void ProjectLoader::start()
192197
{
193198
if (m_loadThread.isRunning())
@@ -300,6 +305,15 @@ void ProjectLoader::load()
300305
return;
301306
}
302307

308+
// Get unsupported blocks
309+
const auto &unsupportedBlocks = m_engine->unsupportedBlocks();
310+
m_unsupportedBlocks.clear();
311+
312+
for (const std::string &opcode : unsupportedBlocks)
313+
m_unsupportedBlocks.push_back(QString::fromStdString(opcode));
314+
315+
emit unsupportedBlocksChanged();
316+
303317
m_engineMutex.unlock();
304318

305319
emit loadStatusChanged();

src/projectloader.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class ProjectLoader : public QObject
3030
Q_PROPERTY(QQmlListProperty<SpriteModel> sprites READ sprites NOTIFY spritesChanged)
3131
Q_PROPERTY(QQmlListProperty<SpriteModel> clones READ clones NOTIFY clonesChanged)
3232
Q_PROPERTY(QQmlListProperty<MonitorModel> monitors READ monitors NOTIFY monitorsChanged)
33+
Q_PROPERTY(QStringList unsupportedBlocks READ unsupportedBlocks NOTIFY unsupportedBlocksChanged)
3334
Q_PROPERTY(double fps READ fps WRITE setFps NOTIFY fpsChanged)
3435
Q_PROPERTY(bool turboMode READ turboMode WRITE setTurboMode NOTIFY turboModeChanged)
3536
Q_PROPERTY(unsigned int stageWidth READ stageWidth WRITE setStageWidth NOTIFY stageWidthChanged)
@@ -65,6 +66,8 @@ class ProjectLoader : public QObject
6566
QQmlListProperty<MonitorModel> monitors();
6667
const QList<MonitorModel *> &monitorList() const;
6768

69+
const QStringList &unsupportedBlocks() const;
70+
6871
Q_INVOKABLE void start();
6972
Q_INVOKABLE void stop();
7073

@@ -105,6 +108,7 @@ class ProjectLoader : public QObject
105108
void spritesChanged();
106109
void clonesChanged();
107110
void monitorsChanged();
111+
void unsupportedBlocksChanged();
108112
void fpsChanged();
109113
void turboModeChanged();
110114
void stageWidthChanged();
@@ -147,6 +151,7 @@ class ProjectLoader : public QObject
147151
QList<SpriteModel *> m_sprites;
148152
QList<SpriteModel *> m_clones;
149153
QList<MonitorModel *> m_monitors;
154+
QStringList m_unsupportedBlocks;
150155
double m_fps = 30;
151156
bool m_turboMode = false;
152157
unsigned int m_stageWidth = 480;

test/projectloader/projectloader_test.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class ProjectLoaderTest : public testing::Test
3232
QSignalSpy clonesSpy(loader, &ProjectLoader::clonesChanged);
3333
QSignalSpy monitorsSpy(loader, &ProjectLoader::monitorsChanged);
3434
QSignalSpy monitorAddedSpy(loader, &ProjectLoader::monitorAdded);
35+
QSignalSpy unsupportedBlocksSpy(loader, &ProjectLoader::unsupportedBlocksChanged);
3536

3637
loader->setFileName(fileName);
3738

@@ -60,6 +61,7 @@ class ProjectLoaderTest : public testing::Test
6061
ASSERT_EQ(clonesSpy.count(), 1);
6162
ASSERT_EQ(monitorsSpy.count(), loader->monitorList().size() + 1);
6263
ASSERT_EQ(monitorAddedSpy.count(), loader->monitorList().size());
64+
ASSERT_EQ(unsupportedBlocksSpy.count(), 1);
6365
}
6466
};
6567

@@ -107,6 +109,25 @@ TEST_F(ProjectLoaderTest, Load)
107109
ASSERT_EQ(valueMonitorModel->color(), QColor::fromString("#FF8C1A"));
108110
}
109111

112+
TEST_F(ProjectLoaderTest, UnsupportedBlocks)
113+
{
114+
ProjectLoader loader;
115+
ASSERT_TRUE(loader.fileName().isEmpty());
116+
ASSERT_FALSE(loader.loadStatus());
117+
ASSERT_TRUE(loader.stage());
118+
119+
loader.setFileName("unsupported_blocks.sb3");
120+
loader.start(); // wait until it loads
121+
122+
auto engine = loader.engine();
123+
const auto &blocks = loader.unsupportedBlocks();
124+
const auto &refBlocks = engine->unsupportedBlocks();
125+
ASSERT_EQ(blocks.size(), refBlocks.size());
126+
127+
for (const QString &opcode : blocks)
128+
ASSERT_NE(refBlocks.find(opcode.toStdString()), refBlocks.cend());
129+
}
130+
110131
TEST_F(ProjectLoaderTest, Clones)
111132
{
112133
ProjectLoader loader;

test/unsupported_blocks.sb3

2.06 KB
Binary file not shown.

0 commit comments

Comments
 (0)