From df823a06f67d3afa58d6d5fba16683e09188f40c Mon Sep 17 00:00:00 2001 From: Karishma Chadha <kchadha@media.mit.edu> Date: Mon, 28 Jan 2019 12:45:40 -0500 Subject: [PATCH] Add tests for project changed state. --- test/fixtures/cat.sprite2 | Bin 0 -> 22464 bytes test/fixtures/cat.sprite3 | Bin 0 -> 40564 bytes .../running_project_changed_state.js | 48 ++++ test/unit/project_changed_state.js | 240 ++++++++++++++++++ test/unit/project_load_changed_state.js | 30 +++ 5 files changed, 318 insertions(+) create mode 100644 test/fixtures/cat.sprite2 create mode 100644 test/fixtures/cat.sprite3 create mode 100644 test/integration/running_project_changed_state.js create mode 100644 test/unit/project_changed_state.js create mode 100644 test/unit/project_load_changed_state.js diff --git a/test/fixtures/cat.sprite2 b/test/fixtures/cat.sprite2 new file mode 100644 index 0000000000000000000000000000000000000000..9339b8e6f50ccf52fb8c156f8f8eceb4dbba2b1e GIT binary patch literal 22464 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π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 DkfL`U literal 0 HcmV?d00001 diff --git a/test/fixtures/cat.sprite3 b/test/fixtures/cat.sprite3 new file mode 100644 index 0000000000000000000000000000000000000000..8a5890c1db9574a0ac49e1e24c08329bc30fe097 GIT binary patch literal 40564 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	@zVtf}~ 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 literal 0 HcmV?d00001 diff --git a/test/integration/running_project_changed_state.js b/test/integration/running_project_changed_state.js new file mode 100644 index 000000000..1af086d56 --- /dev/null +++ b/test/integration/running_project_changed_state.js @@ -0,0 +1,48 @@ +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/index'); + +const uri = path.resolve(__dirname, '../fixtures/looks.sb2'); +const project = readFileToBuffer(uri); + +test('Running project should not emit project changed event', t => { + const vm = new VirtualMachine(); + vm.attachStorage(makeTestStorage()); + + let projectChanged = false; + vm.on('PROJECT_CHANGED', () => { + projectChanged = true; + }); + + // Evaluate playground data and exit + vm.on('playgroundData', () => { + t.equal(projectChanged, false); + t.end(); + process.nextTick(process.exit); + }); + + // Start VM, load project, and run + t.doesNotThrow(() => { + vm.start(); + vm.clear(); + vm.setCompatibilityMode(false); + vm.setTurboMode(false); + vm.loadProject(project).then(() => { + // The test in unit/project_load_changed_state.js tests + // that loading a project does not emit a project changed + // event. This setup tries to be agnostic of whether that + // test is passing or failing. + projectChanged = false; + + vm.greenFlag(); + + // After two seconds, get playground data and stop + setTimeout(() => { + vm.getPlaygroundData(); + vm.stopAll(); + }, 2000); + }); + }); +}); diff --git a/test/unit/project_changed_state.js b/test/unit/project_changed_state.js new file mode 100644 index 000000000..d0d1c801b --- /dev/null +++ b/test/unit/project_changed_state.js @@ -0,0 +1,240 @@ +const tap = require('tap'); +const path = require('path'); +const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer; +const makeTestStorage = require('../fixtures/make-test-storage'); +const VirtualMachine = require('../../src/virtual-machine'); + +let vm; +let projectChanged; + +tap.beforeEach(() => { + const projectUri = path.resolve(__dirname, '../fixtures/default.sb2'); + const project = readFileToBuffer(projectUri); + + vm = new VirtualMachine(); + + vm.runtime.addListener('PROJECT_CHANGED', () => { + projectChanged = true; + }); + + vm.attachStorage(makeTestStorage()); + return vm.loadProject(project).then(() => { + // The test in project_load_changed_state.js tests + // that loading a project does not emit a project changed + // event. This setup tries to be agnostic of whether that + // test is passing or failing. + projectChanged = false; + }); +}); + +tap.tearDown(() => process.nextTick(process.exit)); + +const test = tap.test; + +test('Adding a sprite (from sprite2) should emit a project changed event', t => { + const sprite2Uri = path.resolve(__dirname, '../fixtures/cat.sprite2'); + const sprite2 = readFileToBuffer(sprite2Uri); + + vm.addSprite(sprite2).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Adding a sprite (from sprite3) should emit a project changed event', t => { + const sprite3Uri = path.resolve(__dirname, '../fixtures/cat.sprite3'); + const sprite3 = readFileToBuffer(sprite3Uri); + + vm.addSprite(sprite3).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Adding a costume should emit a project changed event', t => { + const newCostume = { + name: 'costume1', + baseLayerID: 0, + baseLayerMD5: 'f9a1c175dbe2e5dee472858dd30d16bb.svg', + bitmapResolution: 1, + rotationCenterX: 47, + rotationCenterY: 55 + }; + + vm.addCostume('f9a1c175dbe2e5dee472858dd30d16bb.svg', newCostume).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Adding a costume from library should emit a project changed event', t => { + const newCostume = { + name: 'costume1', + baseLayerID: 0, + baseLayerMD5: 'f9a1c175dbe2e5dee472858dd30d16bb.svg', + bitmapResolution: 1, + rotationCenterX: 47, + rotationCenterY: 55 + }; + + vm.addCostumeFromLibrary('f9a1c175dbe2e5dee472858dd30d16bb.svg', newCostume).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Adding a backdrop should emit a project changed event', t => { + const newCostume = { + name: 'costume1', + baseLayerID: 0, + baseLayerMD5: 'f9a1c175dbe2e5dee472858dd30d16bb.svg', + bitmapResolution: 1, + rotationCenterX: 47, + rotationCenterY: 55 + }; + + vm.addBackdrop('f9a1c175dbe2e5dee472858dd30d16bb.svg', newCostume).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Adding a sound should emit a project changed event', t => { + const newSound = { + soundName: 'meow', + soundID: 0, + md5: '83c36d806dc92327b9e7049a565c6bff.wav', + sampleCount: 18688, + rate: 22050 + }; + + vm.addSound(newSound).then(() => { + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Deleting a sprite should emit a project changed event', t => { + const spriteId = vm.editingTarget.id; + + vm.deleteSprite(spriteId); + t.equal(projectChanged, true); + t.end(); +}); + +test('Deleting a costume should emit a project changed event', t => { + vm.deleteCostume(0); + + t.equal(projectChanged, true); + t.end(); +}); + +test('Deleting a sound should emit a project changed event', t => { + vm.deleteSound(0); + + t.equal(projectChanged, true); + t.end(); +}); + +test('Reordering a sprite should emit a project changed event', t => { + const sprite3Uri = path.resolve(__dirname, '../fixtures/cat.sprite3'); + const sprite3 = readFileToBuffer(sprite3Uri); + + // Add a new sprite so we have 2 to reorder + vm.addSprite(sprite3).then(() => { + // Reset the project changed flag to ignore change from adding new sprite + projectChanged = false; + t.equal(vm.runtime.targets.filter(target => !target.isStage).length, 2); + vm.reorderTarget(2, 1); + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Reordering a costume should emit a project changed event', t => { + t.equal(vm.editingTarget.sprite.costumes.length, 2); + const spriteId = vm.editingTarget.id; + vm.reorderCostume(spriteId, 2, 1); + t.equal(projectChanged, true); + t.end(); +}); + +test('Reordering a sound should emit a project changed event', t => { + const spriteId = vm.editingTarget.id; + const newSound = { + soundName: 'meow', + soundID: 0, + md5: '83c36d806dc92327b9e7049a565c6bff.wav', + sampleCount: 18688, + rate: 22050 + }; + vm.addSound(newSound).then(() => { + // Reset the project changed flag to ignore change from adding new sound + projectChanged = false; + t.equal(vm.editingTarget.sprite.sounds.length, 2); + vm.reorderSound(spriteId, 2, 1); + t.equal(projectChanged, true); + t.end(); + }); +}); + +test('Renaming a sprite should emit a project changed event', t => { + const spriteId = vm.editingTarget.id; + vm.renameSprite(spriteId, 'My Sprite'); + t.equal(projectChanged, true); + t.end(); +}); + +test('Renaming a costume should emit a project changed event', t => { + vm.renameCostume(0, 'My Costume'); + t.equal(projectChanged, true); + t.end(); +}); + +test('Renaming a sound should emit a project changed event', t => { + vm.renameSound(0, 'My Sound'); + + t.equal(projectChanged, true); + t.end(); +}); + +test('Changing sprite info should emit a project changed event', t => { + const newSpritePosition = { + x: 10, + y: 100 + }; + + vm.postSpriteInfo(newSpritePosition); + t.equal(projectChanged, true); + projectChanged = false; + + const newSpriteDirection = { + direction: -30 + }; + + vm.postSpriteInfo(newSpriteDirection); + t.equal(projectChanged, true); + projectChanged = false; + + t.end(); + +}); + +test('Editing a vector costume should emit a project changed event', t => { + const mockSvg = 'svg'; + const mockRotationX = -13; + const mockRotationY = 25; + + vm.updateSvg(0, mockSvg, mockRotationX, mockRotationY); + t.equal(projectChanged, true); + t.end(); +}); + +test('Editing a sound should emit a project changed event', t => { + const mockSoundBuffer = []; + const mockSoundEncoding = []; + + vm.updateSoundBuffer(0, mockSoundBuffer, mockSoundEncoding); + t.equal(projectChanged, true); + t.end(); +}); diff --git a/test/unit/project_load_changed_state.js b/test/unit/project_load_changed_state.js new file mode 100644 index 000000000..0f510ef41 --- /dev/null +++ b/test/unit/project_load_changed_state.js @@ -0,0 +1,30 @@ +const tap = require('tap'); +const path = require('path'); +const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer; +const makeTestStorage = require('../fixtures/make-test-storage'); +const VirtualMachine = require('../../src/virtual-machine'); + +tap.tearDown(() => process.nextTick(process.exit)); + +const test = tap.test; + +// Test that loading a project does not emit a project change +// This is in its own file so that it does not affect the test setup +// and results of the other project changed state tests +test('Loading a project should not emit a project changed event', t => { + const projectUri = path.resolve(__dirname, '../fixtures/default.sb2'); + const project = readFileToBuffer(projectUri); + + const vm = new VirtualMachine(); + + let projectChanged = false; + vm.runtime.addListener('PROJECT_CHANGED', () => { + projectChanged = true; + }); + + vm.attachStorage(makeTestStorage()); + return vm.loadProject(project).then(() => { + t.equal(projectChanged, false); + t.end(); + }); +});