Initial commit of 001code-html Scratch frontend project.
Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
79
scratch-vm/test/integration/addSprite.js
Normal file
79
scratch-vm/test/integration/addSprite.js
Normal file
@@ -0,0 +1,79 @@
|
||||
const path = require('path');
|
||||
const test = require('tap').test;
|
||||
const makeTestStorage = require('../fixtures/make-test-storage');
|
||||
const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer;
|
||||
|
||||
const VirtualMachine = require('../../src/virtual-machine');
|
||||
const RenderedTarget = require('../../src/sprites/rendered-target');
|
||||
|
||||
const projectUri = path.resolve(__dirname, '../fixtures/default.sb2');
|
||||
const project = readFileToBuffer(projectUri);
|
||||
|
||||
const vm = new VirtualMachine();
|
||||
|
||||
test('spec', t => {
|
||||
t.type(vm.addSprite, 'function');
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('default cat', t => {
|
||||
// Get default cat from .sprite2
|
||||
const uri = path.resolve(__dirname, '../fixtures/example_sprite.sprite2');
|
||||
const sprite = readFileToBuffer(uri);
|
||||
|
||||
vm.attachStorage(makeTestStorage());
|
||||
|
||||
// Evaluate playground data and exit
|
||||
vm.on('playgroundData', e => {
|
||||
const threads = JSON.parse(e.threads);
|
||||
t.ok(threads.length === 0);
|
||||
vm.quit();
|
||||
t.end();
|
||||
});
|
||||
|
||||
vm.start();
|
||||
vm.clear();
|
||||
vm.setCompatibilityMode(false);
|
||||
vm.setTurboMode(false);
|
||||
t.doesNotThrow(() => {
|
||||
vm.loadProject(project).then(() => {
|
||||
|
||||
t.equal(vm.runtime.targets.length, 2); // stage and default sprite
|
||||
|
||||
// Add another sprite
|
||||
vm.addSprite(sprite).then(() => {
|
||||
const targets = vm.runtime.targets;
|
||||
|
||||
// Test
|
||||
t.type(targets, 'object');
|
||||
t.equal(targets.length, 3);
|
||||
|
||||
const newTarget = targets[2];
|
||||
|
||||
t.ok(newTarget instanceof RenderedTarget);
|
||||
t.type(newTarget.id, 'string');
|
||||
t.type(newTarget.blocks, 'object');
|
||||
t.type(newTarget.variables, 'object');
|
||||
const varIds = Object.keys(newTarget.variables);
|
||||
t.type(varIds.length, 1);
|
||||
const variable = newTarget.variables[varIds[0]];
|
||||
t.equal(variable.name, 'foo');
|
||||
t.equal(variable.value, 0);
|
||||
|
||||
t.equal(newTarget.isOriginal, true);
|
||||
t.equal(newTarget.currentCostume, 0);
|
||||
t.equal(newTarget.isOriginal, true);
|
||||
t.equal(newTarget.isStage, false);
|
||||
t.equal(newTarget.sprite.name, 'Apple');
|
||||
|
||||
vm.greenFlag();
|
||||
|
||||
setTimeout(() => {
|
||||
t.equal(variable.value, 10);
|
||||
vm.getPlaygroundData();
|
||||
vm.stopAll();
|
||||
}, 1000);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user