From 92ff57de7d0d42f3b09045ba47fcb80d299e64b7 Mon Sep 17 00:00:00 2001 From: Andrew Sliwinski Date: Fri, 3 Feb 2017 17:39:36 -0500 Subject: [PATCH] Add basic test coverage for the sound blocks --- src/blocks/scratch3_sound.js | 15 +++++++++++++++ test/fixtures/sound.sb2 | Bin 0 -> 54797 bytes test/integration/sound.js | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 test/fixtures/sound.sb2 create mode 100644 test/integration/sound.js diff --git a/src/blocks/scratch3_sound.js b/src/blocks/scratch3_sound.js index aa227c513..20d137580 100644 --- a/src/blocks/scratch3_sound.js +++ b/src/blocks/scratch3_sound.js @@ -79,6 +79,7 @@ Scratch3SoundBlocks.prototype.playSound = function (args, util) { var index = this._getSoundIndex(args.SOUND_MENU, util); if (index >= 0) { var md5 = util.target.sprite.sounds[index].md5; + if (util.target.audioPlayer === null) return; util.target.audioPlayer.playSound(md5); } }; @@ -87,6 +88,7 @@ Scratch3SoundBlocks.prototype.playSoundAndWait = function (args, util) { var index = this._getSoundIndex(args.SOUND_MENU, util); if (index >= 0) { var md5 = util.target.sprite.sounds[index].md5; + if (util.target.audioPlayer === null) return; return util.target.audioPlayer.playSound(md5); } }; @@ -124,6 +126,7 @@ Scratch3SoundBlocks.prototype.getSoundIndexByName = function (soundName, util) { }; Scratch3SoundBlocks.prototype.stopAllSounds = function (args, util) { + if (util.target.audioPlayer === null) return; util.target.audioPlayer.stopAllSounds(); }; @@ -132,19 +135,23 @@ Scratch3SoundBlocks.prototype.playNoteForBeats = function (args, util) { var beats = Cast.toNumber(args.BEATS); var soundState = this._getSoundState(util.target); var inst = soundState.currentInstrument; + if (typeof this.runtime.audioEngine === 'undefined') return; return this.runtime.audioEngine.playNoteForBeatsWithInst(note, beats, inst); }; Scratch3SoundBlocks.prototype.playDrumForBeats = function (args, util) { var drum = Cast.toNumber(args.DRUM); drum -= 1; // drums are one-indexed + if (typeof this.runtime.audioEngine === 'undefined') return; drum = MathUtil.wrapClamp(drum, 0, this.runtime.audioEngine.numDrums); var beats = Cast.toNumber(args.BEATS); + if (util.target.audioPlayer === null) return; return util.target.audioPlayer.playDrumForBeats(drum, beats); }; Scratch3SoundBlocks.prototype.restForBeats = function (args) { var beats = Cast.toNumber(args.BEATS); + if (typeof this.runtime.audioEngine === 'undefined') return; return this.runtime.audioEngine.waitForBeats(beats); }; @@ -152,6 +159,7 @@ Scratch3SoundBlocks.prototype.setInstrument = function (args, util) { var soundState = this._getSoundState(util.target); var instNum = Cast.toNumber(args.INSTRUMENT); instNum -= 1; // instruments are one-indexed + if (typeof this.runtime.audioEngine === 'undefined') return; instNum = MathUtil.wrapClamp(instNum, 0, this.runtime.audioEngine.numInstruments); soundState.currentInstrument = instNum; return this.runtime.audioEngine.instrumentPlayer.loadInstrument(soundState.currentInstrument); @@ -165,6 +173,7 @@ Scratch3SoundBlocks.prototype.setEffect = function (args, util) { if (!soundState.effects.hasOwnProperty(effect)) return; soundState.effects[effect] = value; + if (util.target.audioPlayer === null) return; util.target.audioPlayer.setEffect(effect, soundState.effects[effect]); }; @@ -176,6 +185,7 @@ Scratch3SoundBlocks.prototype.changeEffect = function (args, util) { if (!soundState.effects.hasOwnProperty(effect)) return; soundState.effects[effect] += value; + if (util.target.audioPlayer === null) return; util.target.audioPlayer.setEffect(effect, soundState.effects[effect]); }; @@ -184,6 +194,7 @@ Scratch3SoundBlocks.prototype.clearEffects = function (args, util) { for (var effect in soundState.effects) { soundState.effects[effect] = 0; } + if (util.target.audioPlayer === null) return; util.target.audioPlayer.clearEffects(); }; @@ -202,6 +213,7 @@ Scratch3SoundBlocks.prototype._updateVolume = function (volume, util) { var soundState = this._getSoundState(util.target); volume = MathUtil.clamp(volume, 0, 100); soundState.volume = volume; + if (util.target.audioPlayer === null) return; util.target.audioPlayer.setVolume(soundState.volume); }; @@ -212,15 +224,18 @@ Scratch3SoundBlocks.prototype.getVolume = function (args, util) { Scratch3SoundBlocks.prototype.setTempo = function (args) { var value = Cast.toNumber(args.TEMPO); + if (typeof this.runtime.audioEngine === 'undefined') return; this.runtime.audioEngine.setTempo(value); }; Scratch3SoundBlocks.prototype.changeTempo = function (args) { var value = Cast.toNumber(args.TEMPO); + if (typeof this.runtime.audioEngine === 'undefined') return; this.runtime.audioEngine.changeTempo(value); }; Scratch3SoundBlocks.prototype.getTempo = function () { + if (typeof this.runtime.audioEngine === 'undefined') return; return this.runtime.audioEngine.currentTempo; }; diff --git a/test/fixtures/sound.sb2 b/test/fixtures/sound.sb2 new file mode 100644 index 0000000000000000000000000000000000000000..dce594b371b6ddb4f47ecdb5d24edc363a120999 GIT binary patch literal 54797 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 literal 0 HcmV?d00001 diff --git a/test/integration/sound.js b/test/integration/sound.js new file mode 100644 index 000000000..dc1a58eee --- /dev/null +++ b/test/integration/sound.js @@ -0,0 +1,35 @@ +var path = require('path'); +var test = require('tap').test; +var extract = require('../fixtures/extract'); +var VirtualMachine = require('../../src/index'); + +var uri = path.resolve(__dirname, '../fixtures/sound.sb2'); +var project = extract(uri); + +test('sound', function (t) { + var vm = new VirtualMachine(); + + // Evaluate playground data and exit + vm.on('playgroundData', function (e) { + var threads = JSON.parse(e.threads); + t.ok(threads.length > 0); + t.end(); + process.nextTick(process.exit); + }); + + // Start VM, load project, and run + t.doesNotThrow(function () { + vm.start(); + vm.clear(); + vm.setCompatibilityMode(false); + vm.setTurboMode(false); + vm.loadProject(project); + vm.greenFlag(); + }); + + // After two seconds, get playground data and stop + setTimeout(function () { + vm.getPlaygroundData(); + vm.stopAll(); + }, 2000); +});