Skip to content

Add API for unsupported blocks #145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/ProjectPlayer.qml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ ProjectScene {
property int stageWidth: 480
property int stageHeight: 360
readonly property bool running: loader.running
readonly property list<string> unsupportedBlocks: loader.unsupportedBlocks
property alias fps: loader.fps
property alias turboMode: loader.turboMode
property alias cloneLimit: loader.cloneLimit
Expand Down
14 changes: 14 additions & 0 deletions src/projectloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ const QList<MonitorModel *> &ProjectLoader::monitorList() const
return m_monitors;
}

const QStringList &ProjectLoader::unsupportedBlocks() const
{
return m_unsupportedBlocks;
}

void ProjectLoader::start()
{
if (m_loadThread.isRunning())
Expand Down Expand Up @@ -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();
Expand Down
5 changes: 5 additions & 0 deletions src/projectloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class ProjectLoader : public QObject
Q_PROPERTY(QQmlListProperty<SpriteModel> sprites READ sprites NOTIFY spritesChanged)
Q_PROPERTY(QQmlListProperty<SpriteModel> clones READ clones NOTIFY clonesChanged)
Q_PROPERTY(QQmlListProperty<MonitorModel> 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)
Expand Down Expand Up @@ -65,6 +66,8 @@ class ProjectLoader : public QObject
QQmlListProperty<MonitorModel> monitors();
const QList<MonitorModel *> &monitorList() const;

const QStringList &unsupportedBlocks() const;

Q_INVOKABLE void start();
Q_INVOKABLE void stop();

Expand Down Expand Up @@ -105,6 +108,7 @@ class ProjectLoader : public QObject
void spritesChanged();
void clonesChanged();
void monitorsChanged();
void unsupportedBlocksChanged();
void fpsChanged();
void turboModeChanged();
void stageWidthChanged();
Expand Down Expand Up @@ -147,6 +151,7 @@ class ProjectLoader : public QObject
QList<SpriteModel *> m_sprites;
QList<SpriteModel *> m_clones;
QList<MonitorModel *> m_monitors;
QStringList m_unsupportedBlocks;
double m_fps = 30;
bool m_turboMode = false;
unsigned int m_stageWidth = 480;
Expand Down
21 changes: 21 additions & 0 deletions test/projectloader/projectloader_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}
};

Expand Down Expand Up @@ -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;
Expand Down
Binary file added test/unsupported_blocks.sb3
Binary file not shown.
Loading