diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000..994ecb7 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,26 @@ +{ + "requireCurlyBraces": [ + "for", + "while", + "do", + "try", + "catch" + ], + "requireSpaceAfterKeywords": [ + "default" + ], + "requireSpacesInFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "disallowSpacesInFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowEmptyBlocks": true, + "disallowSpaceAfterObjectKeys": true, + "requireCommaBeforeLineBreak": true, + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "validateIndentation": 4, + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + "safeContextKeyword": "self" +} \ No newline at end of file diff --git a/README.md b/README.md index 099de17..4c92714 100644 --- a/README.md +++ b/README.md @@ -28,41 +28,18 @@ The tests are written using Karma and there should be a 100% passing rate in ord The expectation is to add a unit test for any code that you contribute to the project. -Install Node (NPM) (https://npmjs.org/) +Install Node --------------------------------------- - -Brew: -``` -$ brew install npm -``` - -Mac Ports: -``` -$ port install npm -``` -In your local scratch directory +To install [Node.js](http://nodejs.org) and [NPM](http://npmjs.org) simply go to [http://nodejs.org](http://nodejs.org/), download the package for your operating system and install. Once installed, navigate to your local scratch directory and run: -``` -$ npm install -``` - -Local copy of jQuery --------------------- - -``` -$ cd test/lib -$ curl http://code.jquery.com/jquery-1.11.0.min.js > jquery-1.11.0.min.js +```bash +npm install ``` To Run the tests ---------------- -``` -$ ./scripts/test.sh -``` - - -To configure the unit tests ---------------------------- -The karam.conf.js file is location in the config directory +```bash +npm test +``` \ No newline at end of file diff --git a/js/IO.js b/js/IO.js index 29e40dd..26ef3c6 100644 --- a/js/IO.js +++ b/js/IO.js @@ -37,12 +37,12 @@ var IO = function() { }; IO.prototype.loadProject = function(project_id) { - var runningIO = this; + var self = this; $.getJSON(this.project_base + project_id + this.project_suffix, function(data) { - runningIO.data = data; - runningIO.makeObjects(); - runningIO.loadThreads(); - runningIO.loadNotesDrums(); + self.data = data; + self.makeObjects(); + self.loadThreads(); + self.loadNotesDrums(); runtime.loadStart(); // Try to run the project. }); }; @@ -126,8 +126,8 @@ IO.prototype.makeObjects = function() { $.each(this.data.children, function(index, obj) { createObj(obj, runtime.stage); // create children of stage - sprites, watchers, and stage's lists }); - $.each(runtime.sprites.filter(function(sprite){return sprite instanceof Sprite}), function(index, sprite) { // list of sprites - $.each(sprite.lists, function(index, list){ + $.each(runtime.sprites.filter(function(sprite) {return sprite instanceof Sprite}), function(index, sprite) { // list of sprites + $.each(sprite.lists, function(index, list) { createObj(list, sprite); // create local lists }); }); diff --git a/js/Interpreter.js b/js/Interpreter.js index 077ba16..2c1a517 100644 --- a/js/Interpreter.js +++ b/js/Interpreter.js @@ -136,7 +136,7 @@ Interpreter.prototype.stepActiveThread = function() { if (b == null) return; this.yield = false; while (true) { - if (this.activeThread.paused) return; + if (this.activeThread.paused) return; ++this.opCount; // Advance the "program counter" to the next block before running the primitive. @@ -319,8 +319,11 @@ Interpreter.prototype.lookupPrim = function(op) { Interpreter.prototype.primNoop = function(b) { console.log(b.op); }; Interpreter.prototype.primWait = function(b) { - if (interp.activeThread.firstTime) interp.startTimer(interp.numarg(b, 0)); - else interp.checkTimer(); + if (interp.activeThread.firstTime) { + interp.startTimer(interp.numarg(b, 0)); + } else { + interp.checkTimer(); + } }; Interpreter.prototype.primRepeat = function(b) { @@ -348,7 +351,9 @@ Interpreter.prototype.broadcast = function(b, waitFlag) { } } runtime.allStacksDo(findReceivers); - for (pair in receivers) interp.restartThread(receivers[pair][0], receivers[pair][1]); + for (pair in receivers) { + interp.restartThread(receivers[pair][0], receivers[pair][1]); + } if (!waitFlag) return; interp.activeThread.tmpObj = receivers; interp.activeThread.firstTime = false; diff --git a/js/Reporter.js b/js/Reporter.js index f0f58f6..ab21742 100644 --- a/js/Reporter.js +++ b/js/Reporter.js @@ -38,13 +38,9 @@ var Reporter = function(data) { }; Reporter.prototype.determineReporterLabel = function() { - if (this.target === 'Stage' && this.cmd === "getVar:") { - return this.param; - } else if (this.target === 'Stage' && this.param === null) { - return this.cmd; - } else { + if (this.target === 'Stage' && this.cmd === "getVar:") return this.param; + if (this.target === 'Stage' && this.param === null) return this.cmd; return this.target + ': ' + this.param; - } } Reporter.prototype.attach = function(scene) { @@ -164,10 +160,10 @@ List.prototype.attach = function(scene) { var c = this.containerEl = $('<div style="overflow:hidden;float:left;position:relative">').appendTo(this.el).width(this.width-13).height(this.height-34); var s = this.scrollbar = $('<div class="list-scrollbar-container"><div class="list-scrollbar">').appendTo(this.el); var sb = s.children('.list-scrollbar'); - sb.mousedown(function(e){ + sb.mousedown(function(e) { if (e.which===1) $(this).data({scrolling:true,startY:e.pageY}); // left button }); - $('body').mousemove(function(e){ + $('body').mousemove(function(e) { if (sb.data('scrolling')) { var offset = parseInt(sb.css('top'))+e.pageY-sb.data('startY'); if (offset < 0) { @@ -179,7 +175,7 @@ List.prototype.attach = function(scene) { sb.css('top',offset); c.scrollTop(c.height()/sb.height()*offset); } - }).mouseup(function(){ + }).mouseup(function() { if ($.hasData(sb[0],'scrolling')) sb.removeData(['scrolling','startY']); }); // this.el.append('<div class="list-add">+'); // disabled because it doesn't do anything even in the original @@ -194,14 +190,14 @@ List.prototype.attach = function(scene) { this.el.css('display', this.visible ? 'inline-block' : 'none'); }; -List.prototype.update = function(){ +List.prototype.update = function() { this.contents = findList(runtime.spriteNamed(this.target),this.listName); this.el.css('display', this.visible ? 'inline-block' : 'none'); if (!this.visible) return; var c = this.containerEl.html(''); // so that it can be used inside the forEach - this.contents.forEach(function(val,i){ + this.contents.forEach(function(val,i) { $('<div style="clear:both">').appendTo(c).append('<div class="list-index">'+(i+1),'<div class="list-item">'+val); }); c.find('.list-index').width(c.find('.list-index').last().width()); diff --git a/js/Runtime.js b/js/Runtime.js index 2b59751..3952618 100644 --- a/js/Runtime.js +++ b/js/Runtime.js @@ -42,11 +42,11 @@ Runtime.prototype.init = function() { this.scene = $('#container'); window.AudioContext = window.AudioContext || window.webkitAudioContext; this.audioContext = new AudioContext(); - try{ - this.audioGain = this.audioContext.createGain(); - }catch(err){ - this.audioGain = this.audioContext.createGainNode(); - } + try { + this.audioGain = this.audioContext.createGain(); + } catch(err) { + this.audioGain = this.audioContext.createGainNode(); + } this.audioGain.connect(runtime.audioContext.destination); }; @@ -120,7 +120,7 @@ Runtime.prototype.allStacksDo = function(f) { } } $.each(stage.stacks, function(index, stack) { - f(stack, stage); + f(stack, stage); }); }; diff --git a/js/Sprite.js b/js/Sprite.js index 3a376f7..4fb17d2 100644 --- a/js/Sprite.js +++ b/js/Sprite.js @@ -129,14 +129,14 @@ Sprite.prototype.attach = function(scene) { $(sprite.textures[c]).css('display', sprite.currentCostumeIndex == c ? 'inline' : 'none'); $(sprite.textures[c]).css('position', 'absolute').css('left', '0px').css('top', '0px'); $(sprite.textures[c]).bind('dragstart', function(evt) { evt.preventDefault(); }) - .bind('selectstart', function(evt) { evt.preventDefault(); }) - .bind('touchend', function(evt) { sprite.onClick(evt); $(this).addClass('touched'); }) - .click(function(evt) { - if (!$(this).hasClass('touched')) { - sprite.onClick(evt); - } else { - $(this).removeClass('touched'); - } + .bind('selectstart', function(evt) { evt.preventDefault(); }) + .bind('touchend', function(evt) { sprite.onClick(evt); $(this).addClass('touched'); }) + .click(function(evt) { + if (!$(this).hasClass('touched')) { + sprite.onClick(evt); + } else { + $(this).removeClass('touched'); + } }); scene.append($(sprite.textures[c])); }) @@ -149,12 +149,12 @@ Sprite.prototype.attach = function(scene) { this.updateTransform(); if (! this.isStage) { - this.talkBubble = $('<div class="bubble-container"></div>'); - this.talkBubble.css('display', 'none'); - this.talkBubbleBox = $('<div class="bubble"></div>'); - this.talkBubbleStyler = $('<div class="bubble-say"></div>'); - this.talkBubble.append(this.talkBubbleBox); - this.talkBubble.append(this.talkBubbleStyler); + this.talkBubble = $('<div class="bubble-container"></div>'); + this.talkBubble.css('display', 'none'); + this.talkBubbleBox = $('<div class="bubble"></div>'); + this.talkBubbleStyler = $('<div class="bubble-say"></div>'); + this.talkBubble.append(this.talkBubbleBox); + this.talkBubble.append(this.talkBubbleStyler); } this.askInput = $('<div class="ask-container"></div>'); @@ -173,9 +173,9 @@ Sprite.prototype.attach = function(scene) { // Load sounds from the server and buffer them Sprite.prototype.loadSounds = function() { - var spr = this; + var self = this; $.each(this.sounds, function(index, sound) { - io.soundRequest(sound, spr); + io.soundRequest(sound, self); }); }; @@ -273,8 +273,8 @@ Sprite.prototype.onClick = function(evt) { }; Sprite.prototype.setVisible = function(v) { - this.visible = v; - this.updateVisible(); + this.visible = v; + this.updateVisible(); }; Sprite.prototype.updateLayer = function() { @@ -308,21 +308,27 @@ Sprite.prototype.updateTransform = function() { // sign to the X scale. } - $(this.mesh).css('transform', - 'translatex(' + drawX + 'px) \ - translatey(' + drawY + 'px) \ - rotate(' + this.rotation + 'deg) \ - scaleX(' + scaleXprepend + (this.scale / resolution) + ') scaleY(' + (this.scale / resolution) + ')'); - $(this.mesh).css('-moz-transform', - 'translatex(' + drawX + 'px) \ - translatey(' + drawY + 'px) \ - rotate(' + this.rotation + 'deg) \ - scaleX(' + scaleXprepend + this.scale + ') scaleY(' + this.scale / resolution + ')'); - $(this.mesh).css('-webkit-transform', - 'translatex(' + drawX + 'px) \ - translatey(' + drawY + 'px) \ - rotate(' + this.rotation + 'deg) \ - scaleX(' + scaleXprepend + (this.scale / resolution) + ') scaleY(' + (this.scale / resolution) + ')'); + $(this.mesh).css( + 'transform', + 'translatex(' + drawX + 'px) ' + + 'translatey(' + drawY + 'px) ' + + 'rotate(' + this.rotation + 'deg) ' + + 'scaleX(' + scaleXprepend + (this.scale / resolution) + ') scaleY(' + (this.scale / resolution) + ')' + ); + $(this.mesh).css( + '-moz-transform', + 'translatex(' + drawX + 'px) ' + + 'translatey(' + drawY + 'px) ' + + 'rotate(' + this.rotation + 'deg) ' + + 'scaleX(' + scaleXprepend + this.scale + ') scaleY(' + this.scale / resolution + ')' + ); + $(this.mesh).css( + '-webkit-transform', + 'translatex(' + drawX + 'px) ' + + 'translatey(' + drawY + 'px) ' + + 'rotate(' + this.rotation + 'deg) ' + + 'scaleX(' + scaleXprepend + (this.scale / resolution) + ') scaleY(' + (this.scale / resolution) + ')' + ); $(this.mesh).css('-webkit-transform-origin', rotationCenterX + 'px ' + rotationCenterY + 'px'); $(this.mesh).css('-moz-transform-origin', rotationCenterX + 'px ' + rotationCenterY + 'px'); @@ -342,9 +348,11 @@ Sprite.prototype.updateTransform = function() { Sprite.prototype.updateFilters = function() { $(this.mesh).css('opacity', 1 - this.filters.ghost / 100); - $(this.mesh).css('-webkit-filter', - 'hue-rotate(' + (this.filters.color * 1.8) + 'deg) \ - brightness(' + (this.filters.brightness < 0 ? this.filters.brightness / 100 + 1 : Math.min(2.5, this.filters.brightness * .015 + 1)) + ')'); + $(this.mesh).css( + '-webkit-filter', + 'hue-rotate(' + (this.filters.color * 1.8) + 'deg) ' + + 'brightness(' + (this.filters.brightness < 0 ? this.filters.brightness / 100 + 1 : Math.min(2.5, this.filters.brightness * .015 + 1)) + ')' + ); }; Sprite.prototype.getTalkBubbleXY = function() { @@ -368,7 +376,7 @@ Sprite.prototype.showBubble = function(text, type) { this.talkBubbleBox.removeClass('say-think-border'); this.talkBubbleBox.removeClass('ask-border'); - + this.talkBubbleStyler.removeClass('bubble-say'); this.talkBubbleStyler.removeClass('bubble-think'); this.talkBubbleStyler.removeClass('bubble-ask'); @@ -415,17 +423,17 @@ Sprite.prototype.hideAsk = function() { }; Sprite.prototype.bindDoAskButton = function() { - var self = this; - this.askInputButton.on("keypress click", function(e){ - var eType = e.type; - if (eType === 'click' || (eType === 'keypress' && e.which === 13)) { - var stage = interp.targetStage(); - stage.askAnswer = $(self.askInputTextField).val(); - self.hideBubble(); - self.hideAsk(); - interp.activeThread.paused = false; - } - }); + var self = this; + this.askInputButton.on("keypress click", function(e) { + var eType = e.type; + if (eType === 'click' || (eType === 'keypress' && e.which === 13)) { + var stage = interp.targetStage(); + stage.askAnswer = $(self.askInputTextField).val(); + self.hideBubble(); + self.hideAsk(); + interp.activeThread.paused = false; + } + }); }; Sprite.prototype.setXY = function(x, y) { diff --git a/js/primitives/SensingPrims.js b/js/primitives/SensingPrims.js index d219490..cfaa863 100644 --- a/js/primitives/SensingPrims.js +++ b/js/primitives/SensingPrims.js @@ -33,7 +33,7 @@ SensingPrims.prototype.addPrimsTo = function(primTable) { primTable['getAttribute:of:'] = this.primGetAttribute; - primTable['timeAndDate'] = function(b){ return runtime.getTimeString(interp.arg(b, 0)); }; + primTable['timeAndDate'] = function(b) { return runtime.getTimeString(interp.arg(b, 0)); }; primTable['timestamp'] = this.primTimestamp; }; @@ -181,8 +181,8 @@ SensingPrims.prototype.primDoAsk= function(b) { showBubble(b, "doAsk"); var s = interp.targetSprite(); if (s !== null) { - interp.activeThread.paused = true; - s.showAsk(); + interp.activeThread.paused = true; + s.showAsk(); } }; diff --git a/js/primitives/VarListPrims.js b/js/primitives/VarListPrims.js index 38b1f5b..fe1ca06 100644 --- a/js/primitives/VarListPrims.js +++ b/js/primitives/VarListPrims.js @@ -109,8 +109,8 @@ function findList(targetSprite, listName) { VarListPrims.prototype.primReadList = function(b) { var list = findList(interp.targetSprite(), interp.arg(b, 0)); if (list) { - var allOne = list.map(function(val) { return val.length; }).reduce(function(old,val) { return old + val; }, 0) === list.length; - return list.join(allOne ? '' : ' '); + var allOne = list.map(function(val) { return val.length; }).reduce(function(old,val) { return old + val; }, 0) === list.length; + return list.join(allOne ? '' : ' '); } }; @@ -123,9 +123,13 @@ VarListPrims.prototype.primListDeleteLine = function(b) { var list = findList(interp.targetSprite(), interp.arg(b, 1)); if (!list) return; var line = interp.arg(b, 0); - if (line == 'all' || list.length == 0) list.length = 0; - else if (line == 'last') list.splice(list.length - 1, 1); - else if (parseInt(line, 10) - 1 in list) list.splice(parseInt(line, 10) - 1, 1); + if (line == 'all' || list.length == 0) { + list.length = 0; + } else if (line == 'last') { + list.splice(list.length - 1, 1); + } else if (parseInt(line, 10) - 1 in list) { + list.splice(parseInt(line, 10) - 1, 1); + } }; VarListPrims.prototype.primListInsertAt = function(b) { @@ -134,9 +138,13 @@ VarListPrims.prototype.primListInsertAt = function(b) { var newItem = interp.arg(b, 0); var position = interp.arg(b, 1); - if (position == 'last') position = list.length; - else if (position == 'random') position = Math.round(Math.random() * list.length); - else position = parseInt(position, 10) - 1; + if (position == 'last') { + position = list.length; + } else if (position == 'random') { + position = Math.round(Math.random() * list.length); + } else { + position = parseInt(position, 10) - 1; + } if (position > list.length) return; list.splice(position, 0, newItem); @@ -148,12 +156,15 @@ VarListPrims.prototype.primListSetLine = function(b) { var newItem = interp.arg(b, 2); var position = interp.arg(b, 0); - if (position == 'last') position = list.length - 1; - else if (position == 'random') position = Math.floor(Math.random() * list.length); - else position = parseInt(position, 10) - 1; + if (position == 'last') { + position = list.length - 1; + } else if (position == 'random') { + position = Math.floor(Math.random() * list.length); + } else { + position = parseInt(position, 10) - 1; + } if (position > list.length - 1) return; - list[position] = newItem; }; diff --git a/js/sound/NotePlayer.js b/js/sound/NotePlayer.js index 8e6a410..6d9af41 100644 --- a/js/sound/NotePlayer.js +++ b/js/sound/NotePlayer.js @@ -27,21 +27,21 @@ var NotePlayer = function(wavFileData, originalPitch, loopStart, loopEnd, env) { this.originalPitch = originalPitch || null; - this.index = 0; - this.samplesRemaining = 0; // determines note duration + this.index = 0; + this.samplesRemaining = 0; // determines note duration - // Looping + // Looping this.isLooped = false; - this.loopPoint = 0; // final sample in loop - this.loopLength = 0; + this.loopPoint = 0; // final sample in loop + this.loopLength = 0; - // Volume Envelope - this.envelopeValue = 1; - this.samplesSinceStart = 0; - this.attackEnd = 0; - this.attackRate = 0; - this.holdEnd = 0; - this.decayRate = 1; + // Volume Envelope + this.envelopeValue = 1; + this.samplesSinceStart = 0; + this.attackEnd = 0; + this.attackRate = 0; + this.holdEnd = 0; + this.decayRate = 1; if (wavFileData == null) wavFileData = new ArrayBuffer(); @@ -107,8 +107,8 @@ NotePlayer.prototype.interpolatedSample = function() { NotePlayer.prototype.rawSample = function(sampleIndex) { if (sampleIndex >= this.endOffset) { - if (this.isLooped) sampleIndex = this.loopPoint; - else return 0; + if (!this.isLooped) return 0; + sampleIndex = this.loopPoint; } var byteIndex = 2 * sampleIndex; var result = (this.soundData[byteIndex + 1] << 8) + this.soundData[byteIndex]; diff --git a/js/sound/SoundBank.js b/js/sound/SoundBank.js index 275a5cb..8a67694 100644 --- a/js/sound/SoundBank.js +++ b/js/sound/SoundBank.js @@ -32,114 +32,136 @@ var SoundBank = function() {}; // The loop points are -1 if the sound is unlooped (e.g. Marimba). // The three-element envelop array may be omitted if the instrument has no envelope. SoundBank.instruments = [ - [[38, 'AcousticPiano_As3', 58, 10266, 17053, [0, 100, 22]], - [44, 'AcousticPiano_C4', 60, 13968, 18975, [0, 100, 20]], - [51, 'AcousticPiano_G4', 67, 12200, 12370, [0, 80, 18]], - [62, 'AcousticPiano_C6', 84, 13042, 13276, [0, 80, 16]], - [70, 'AcousticPiano_F5', 77, 12425, 12965, [0, 40, 14]], - [77, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 20, 10]], - [85, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 0, 8]], - [90, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 0, 6]], - [96, 'AcousticPiano_D7', 98, 7454, 7606, [0, 0, 3]], - [128, 'AcousticPiano_D7', 98, 7454, 7606, [0, 0, 2]]], - - [[48, 'ElectricPiano_C2', 36, 15338, 17360, [0, 80, 10]], - [74, 'ElectricPiano_C4', 60, 11426, 12016, [0, 40, 8]], - [128, 'ElectricPiano_C4', 60, 11426, 12016, [0, 0, 6]]], - - [[128, 'Organ_G2', 43, 1306, 3330]], - - [[40, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 15]], - [56, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 13.5]], - [60, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 12]], - [67, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 8.5]], - [72, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 7]], - [83, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 5.5]], - [128, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 4.5]]], - - [[40, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 15]], - [56, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 13.5]], - [60, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 12]], - [67, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 8.5]], - [72, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 7]], - [83, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 5.5]], - [128, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 4.5]]], - - [[34, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 17]], - [48, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 14]], - [64, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 12]], - [128, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 10]]], - - [[38, 'Pizz_G2', 43, 8554, 8782, [0, 0, 5]], - [45, 'Pizz_G2', 43, 8554, 8782, [0, 12, 4]], - [56, 'Pizz_A3', 57, 11460, 11659, [0, 0, 4]], - [64, 'Pizz_A3', 57, 11460, 11659, [0, 0, 3.2]], - [72, 'Pizz_E4', 64, 17525, 17592, [0, 0, 2.8]], - [80, 'Pizz_E4', 64, 17525, 17592, [0, 0, 2.2]], - [128, 'Pizz_E4', 64, 17525, 17592, [0, 0, 1.5]]], - - [[41, 'Cello_C2', 36, 8548, 8885], - [52, 'Cello_As2', 46, 7465, 7845], - [62, 'Violin_D4', 62, 10608, 11360], - [75, 'Violin_A4', 69, 3111, 3314, [70, 0, 0]], - [128, 'Violin_E5', 76, 2383, 2484]], - - [[30, 'BassTrombone_A2_3', 45, 1357, 2360], - [40, 'BassTrombone_A2_2', 45, 1893, 2896], - [55, 'Trombone_B3', 59, 2646, 3897], - [88, 'Trombone_B3', 59, 2646, 3897, [50, 0, 0]], - [128, 'Trumpet_E5', 76, 2884, 3152]], - - [[128, 'Clarinet_C4', 60, 14540, 15468]], - - [[40, 'TenorSax_C3', 48, 8939, 10794], - [50, 'TenorSax_C3', 48, 8939, 10794, [20, 0, 0]], - [59, 'TenorSax_C3', 48, 8939, 10794, [40, 0, 0]], - [67, 'AltoSax_A3', 57, 8546, 9049], - [75, 'AltoSax_A3', 57, 8546, 9049, [20, 0, 0]], - [80, 'AltoSax_A3', 57, 8546, 9049, [20, 0, 0]], - [128, 'AltoSax_C6', 84, 1258, 1848]], - - [[61, 'Flute_B5_2', 83, 1859, 2259], - [128, 'Flute_B5_1', 83, 2418, 2818]], - - [[128, 'WoodenFlute_C5', 72, 11426, 15724]], - - [[57, 'Bassoon_C3', 48, 2428, 4284], - [67, 'Bassoon_C3', 48, 2428, 4284, [40, 0, 0]], - [76, 'Bassoon_C3', 48, 2428, 4284, [80, 0, 0]], - [84, 'EnglishHorn_F3', 53, 7538, 8930, [40, 0, 0]], - [128, 'EnglishHorn_D4', 62, 4857, 5231]], - - [[39, 'Choir_F3', 53, 14007, 41281], - [50, 'Choir_F3', 53, 14007, 41281, [40, 0, 0]], - [61, 'Choir_F3', 53, 14007, 41281, [60, 0, 0]], - [72, 'Choir_F4', 65, 16351, 46436], - [128, 'Choir_F5', 77, 18440, 45391]], - - [[38, 'Vibraphone_C3', 48, 6202, 6370, [0, 100, 8]], - [48, 'Vibraphone_C3', 48, 6202, 6370, [0, 100, 7.5]], - [59, 'Vibraphone_C3', 48, 6202, 6370, [0, 60, 7]], - [70, 'Vibraphone_C3', 48, 6202, 6370, [0, 40, 6]], - [78, 'Vibraphone_C3', 48, 6202, 6370, [0, 20, 5]], - [86, 'Vibraphone_C3', 48, 6202, 6370, [0, 0, 4]], - [128, 'Vibraphone_C3', 48, 6202, 6370, [0, 0, 3]]], - - [[128, 'MusicBox_C4', 60, 14278, 14700, [0, 0, 2]]], - - [[128, 'SteelDrum_D5', 74.4, -1, -1, [0, 0, 2]]], - - [[128, 'Marimba_C4', 60, -1, -1]], - - [[80, 'SynthLead_C4', 60, 135, 1400], - [128, 'SynthLead_C6', 84, 124, 356]], - - [[38, 'SynthPad_A3', 57, 4212, 88017, [50, 0, 0]], - [50, 'SynthPad_A3', 57, 4212, 88017, [80, 0, 0]], - [62, 'SynthPad_A3', 57, 4212, 88017, [110, 0, 0]], - [74, 'SynthPad_A3', 57, 4212, 88017, [150, 0, 0]], - [86, 'SynthPad_A3', 57, 4212, 88017, [200, 0, 0]], - [128, 'SynthPad_C6', 84, 2575, 9202]], + [ + [38, 'AcousticPiano_As3', 58, 10266, 17053, [0, 100, 22]], + [44, 'AcousticPiano_C4', 60, 13968, 18975, [0, 100, 20]], + [51, 'AcousticPiano_G4', 67, 12200, 12370, [0, 80, 18]], + [62, 'AcousticPiano_C6', 84, 13042, 13276, [0, 80, 16]], + [70, 'AcousticPiano_F5', 77, 12425, 12965, [0, 40, 14]], + [77, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 20, 10]], + [85, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 0, 8]], + [90, 'AcousticPiano_Ds6', 87, 12368, 12869, [0, 0, 6]], + [96, 'AcousticPiano_D7', 98, 7454, 7606, [0, 0, 3]], + [128, 'AcousticPiano_D7', 98, 7454, 7606, [0, 0, 2]] + ], + [ + [48, 'ElectricPiano_C2', 36, 15338, 17360, [0, 80, 10]], + [74, 'ElectricPiano_C4', 60, 11426, 12016, [0, 40, 8]], + [128, 'ElectricPiano_C4', 60, 11426, 12016, [0, 0, 6]] + ], + [ + [128, 'Organ_G2', 43, 1306, 3330] + ], + [ + [40, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 15]], + [56, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 13.5]], + [60, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 12]], + [67, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 8.5]], + [72, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 7]], + [83, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 5.5]], + [128, 'AcousticGuitar_F3', 53, 36665, 36791, [0, 0, 4.5]] + ], + [ + [40, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 15]], + [56, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 13.5]], + [60, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 12]], + [67, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 8.5]], + [72, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 7]], + [83, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 5.5]], + [128, 'ElectricGuitar_F3', 53, 34692, 34945, [0, 0, 4.5]] + ], + [ + [34, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 17]], + [48, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 14]], + [64, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 12]], + [128, 'ElectricBass_G1', 31, 41912, 42363, [0, 0, 10]] + ], + [ + [38, 'Pizz_G2', 43, 8554, 8782, [0, 0, 5]], + [45, 'Pizz_G2', 43, 8554, 8782, [0, 12, 4]], + [56, 'Pizz_A3', 57, 11460, 11659, [0, 0, 4]], + [64, 'Pizz_A3', 57, 11460, 11659, [0, 0, 3.2]], + [72, 'Pizz_E4', 64, 17525, 17592, [0, 0, 2.8]], + [80, 'Pizz_E4', 64, 17525, 17592, [0, 0, 2.2]], + [128, 'Pizz_E4', 64, 17525, 17592, [0, 0, 1.5]] + ], + [ + [41, 'Cello_C2', 36, 8548, 8885], + [52, 'Cello_As2', 46, 7465, 7845], + [62, 'Violin_D4', 62, 10608, 11360], + [75, 'Violin_A4', 69, 3111, 3314, [70, 0, 0]], + [128, 'Violin_E5', 76, 2383, 2484] + ], + [ + [30, 'BassTrombone_A2_3', 45, 1357, 2360], + [40, 'BassTrombone_A2_2', 45, 1893, 2896], + [55, 'Trombone_B3', 59, 2646, 3897], + [88, 'Trombone_B3', 59, 2646, 3897, [50, 0, 0]], + [128, 'Trumpet_E5', 76, 2884, 3152] + ], + [ + [128, 'Clarinet_C4', 60, 14540, 15468] + ], + [ + [40, 'TenorSax_C3', 48, 8939, 10794], + [50, 'TenorSax_C3', 48, 8939, 10794, [20, 0, 0]], + [59, 'TenorSax_C3', 48, 8939, 10794, [40, 0, 0]], + [67, 'AltoSax_A3', 57, 8546, 9049], + [75, 'AltoSax_A3', 57, 8546, 9049, [20, 0, 0]], + [80, 'AltoSax_A3', 57, 8546, 9049, [20, 0, 0]], + [128, 'AltoSax_C6', 84, 1258, 1848] + ], + [ + [61, 'Flute_B5_2', 83, 1859, 2259], + [128, 'Flute_B5_1', 83, 2418, 2818] + ], + [ + [128, 'WoodenFlute_C5', 72, 11426, 15724] + ], + [ + [57, 'Bassoon_C3', 48, 2428, 4284], + [67, 'Bassoon_C3', 48, 2428, 4284, [40, 0, 0]], + [76, 'Bassoon_C3', 48, 2428, 4284, [80, 0, 0]], + [84, 'EnglishHorn_F3', 53, 7538, 8930, [40, 0, 0]], + [128, 'EnglishHorn_D4', 62, 4857, 5231] + ], + [ + [39, 'Choir_F3', 53, 14007, 41281], + [50, 'Choir_F3', 53, 14007, 41281, [40, 0, 0]], + [61, 'Choir_F3', 53, 14007, 41281, [60, 0, 0]], + [72, 'Choir_F4', 65, 16351, 46436], + [128, 'Choir_F5', 77, 18440, 45391] + ], + [ + [38, 'Vibraphone_C3', 48, 6202, 6370, [0, 100, 8]], + [48, 'Vibraphone_C3', 48, 6202, 6370, [0, 100, 7.5]], + [59, 'Vibraphone_C3', 48, 6202, 6370, [0, 60, 7]], + [70, 'Vibraphone_C3', 48, 6202, 6370, [0, 40, 6]], + [78, 'Vibraphone_C3', 48, 6202, 6370, [0, 20, 5]], + [86, 'Vibraphone_C3', 48, 6202, 6370, [0, 0, 4]], + [128, 'Vibraphone_C3', 48, 6202, 6370, [0, 0, 3]] + ], + [ + [128, 'MusicBox_C4', 60, 14278, 14700, [0, 0, 2]] + ], + [ + [128, 'SteelDrum_D5', 74.4, -1, -1, [0, 0, 2]] + ], + [ + [128, 'Marimba_C4', 60, -1, -1] + ], + [ + [80, 'SynthLead_C4', 60, 135, 1400], + [128, 'SynthLead_C6', 84, 124, 356] + ], + [ + [38, 'SynthPad_A3', 57, 4212, 88017, [50, 0, 0]], + [50, 'SynthPad_A3', 57, 4212, 88017, [80, 0, 0]], + [62, 'SynthPad_A3', 57, 4212, 88017, [110, 0, 0]], + [74, 'SynthPad_A3', 57, 4212, 88017, [150, 0, 0]], + [86, 'SynthPad_A3', 57, 4212, 88017, [200, 0, 0]], + [128, 'SynthPad_C6', 84, 2575, 9202] + ] ]; // ----------------------------- diff --git a/makefile b/makefile new file mode 100644 index 0000000..86730ca --- /dev/null +++ b/makefile @@ -0,0 +1,20 @@ +JSCS_PATH = ./node_modules/.bin/jscs +KARMA_PATH = ./node_modules/.bin/karma +KARMA_CONFIG = ./test/fixtures/karma.conf.js + +# Performs code governance (lint + style) test +lint: + @$(JSCS_PATH) ./js/* + @$(JSCS_PATH) ./test/unit/* + +# Performs unit tests +unit: + @$(KARMA_PATH) start $(KARMA_CONFIG) $* + +# Run all test targets +test: + @make lint + @make unit + +# Ignore directory structure +.PHONY: lint unit test \ No newline at end of file diff --git a/package.json b/package.json index 7a6ba49..4b282e7 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,19 @@ "name": "scratch-html5", "description": "HTML 5 based Scratch project player", "repository": "https://github.com/LLK/scratch-html5", + "scripts": { + "postinstall": "curl http://code.jquery.com/jquery-1.11.0.min.js > ./test/lib/jquery-1.11.0.min.js", + "test": "make test" + }, + "engines": { + "node": ">=0.10" + }, + "dependencies": {}, "devDependencies": { - "karma" : "~0.10", - "jasmine-jquery" : "1.3.3", - "karma-html2js-preprocessor" : "~0.1.0", - "underscore" : "~1.6.0" + "jasmine-jquery": "~1.3.3", + "jscs": "~1.3.0", + "karma": "~0.10", + "karma-html2js-preprocessor": "~0.1.0", + "underscore": "~1.6.0" } } diff --git a/scripts/test.sh b/scripts/test.sh deleted file mode 100755 index 972001f..0000000 --- a/scripts/test.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -BASE_DIR=`dirname $0` - -echo "" -echo "Starting Karma Server (http://karma-runner.github.io)" -echo "-------------------------------------------------------------------" - -$BASE_DIR/../node_modules/karma/bin/karma start $BASE_DIR/../config/karma.conf.js $* diff --git a/config/karma.conf.js b/test/fixtures/karma.conf.js similarity index 96% rename from config/karma.conf.js rename to test/fixtures/karma.conf.js index 5c66717..ed8d99b 100644 --- a/config/karma.conf.js +++ b/test/fixtures/karma.conf.js @@ -1,6 +1,6 @@ module.exports = function(config){ config.set({ - basePath : '../', + basePath : '../../', files : [ 'test/artifacts/**/*.js', diff --git a/test/unit/interpreterSpec.js b/test/unit/interpreterSpec.js index 0aa3468..2cd7324 100644 --- a/test/unit/interpreterSpec.js +++ b/test/unit/interpreterSpec.js @@ -1,86 +1,86 @@ /* jasmine specs for Interpreter.js go here */ describe('Interpreter', function() { - var interp; + var interp; - beforeEach(function() { - interp = Interpreter; - }); - - describe('Initialized variables', function() { - var initInterp, realThread, realTimer; beforeEach(function() { - realThread = Thread; - realTimer = Timer; - Thread = threadMock; - Timer = function() {}; - initInterp = new interp(); + interp = Interpreter; }); - afterEach(function() { - Thread = realThread; - Timer = realTimer; + describe('Initialized variables', function() { + var initInterp, realThread, realTimer; + beforeEach(function() { + realThread = Thread; + realTimer = Timer; + Thread = threadMock; + Timer = function() {}; + initInterp = new interp(); + }); + + afterEach(function() { + Thread = realThread; + Timer = realTimer; + }); + + describe('Interpreter Variables', function() { + it('should have a primitiveTable collection', function() { + expect(initInterp.primitiveTable).toEqual({}); + }); + + it('should have a variables collection', function() { + expect(initInterp.variables).toEqual({}); + }); + + it('should have a threads array', function() { + expect(initInterp.threads).toEqual([]); + }); + + it('should have an activeThread variable', function() { + expect(initInterp.activeThread).toEqual(threadMock()); + }); + + it('should have a WorkTime variable', function() { + expect(initInterp.WorkTime).toBe(30); + }); + + it('should have a currentMSecs variable', function() { + expect(initInterp.currentMSecs).toBe(null); + }); + + it('should have a timer variable', function() { + expect(initInterp.timer).toEqual({}); + }); + + it('should have a yield variable', function() { + expect(initInterp.yield).toBe(false); + }); + + it('should have a doRedraw variable', function() { + expect(initInterp.doRedraw).toBe(false); + }); + + it('should have an opCount variable', function() { + expect(initInterp.opCount).toBe(0); + }); + + it('should have a debugOps variable', function() { + expect(initInterp.debugOps).toBe(false); + }); + + it('should have a debugFunc variable', function() { + expect(initInterp.debugFunc).toBe(null); + }); + + it('should have an opCount2 variable', function() { + expect(initInterp.opCount2).toBe(0); + }); + }); }); - describe('Interpreter Variables', function() { - it('should have a primitiveTable collection', function() { - expect(initInterp.primitiveTable).toEqual({}); - }); - - it('should have a variables collection', function() { - expect(initInterp.variables).toEqual({}); - }); - - it('should have a threads array', function() { - expect(initInterp.threads).toEqual([]); - }); - - it('should have an activeThread variable', function() { - expect(initInterp.activeThread).toEqual(threadMock()); - }); - - it('should have a WorkTime variable', function() { - expect(initInterp.WorkTime).toBe(30); - }); - - it('should have a currentMSecs variable', function() { - expect(initInterp.currentMSecs).toBe(null); - }); - - it('should have a timer variable', function() { - expect(initInterp.timer).toEqual({}); - }); - - it('should have a yield variable', function() { - expect(initInterp.yield).toBe(false); - }); - - it('should have a doRedraw variable', function() { - expect(initInterp.doRedraw).toBe(false); - }); - - it('should have an opCount variable', function() { - expect(initInterp.opCount).toBe(0); - }); - - it('should have a debugOps variable', function() { - expect(initInterp.debugOps).toBe(false); - }); - - it('should have a debugFunc variable', function() { - expect(initInterp.debugFunc).toBe(null); - }); - - it('should have an opCount2 variable', function() { - expect(initInterp.opCount2).toBe(0); - }); + describe('TargetStage', function() { + it('should return the target.stage object', function() { + runtime = new runtimeMock(); + expect(interp.prototype.targetStage()).toEqual(runtime.stage); + }); }); - }); - - describe('TargetStage', function() { - it('should return the target.stage object', function() { - runtime = new runtimeMock(); - expect(interp.prototype.targetStage()).toEqual(runtime.stage); - }); - }); }); diff --git a/test/unit/ioSpec.js b/test/unit/ioSpec.js index c869bdb..3b3938d 100644 --- a/test/unit/ioSpec.js +++ b/test/unit/ioSpec.js @@ -2,42 +2,42 @@ /* jasmine specs for IO.js go here */ -describe('IO', function(){ - var io; +describe('IO', function() { + var io; - beforeEach(function() { - io = new IO(); - }); + beforeEach(function() { + io = new IO(); + }); - it('should have "null" data', function() { - expect(io.data).toBe(null); - }); + it('should have "null" data', function() { + expect(io.data).toBe(null); + }); - it('should have a base', function() { - expect(io.base).toBe(io_base); - }); + it('should have a base', function() { + expect(io.base).toBe(io_base); + }); - it('should have a project_base', function() { - expect(io.project_base).toBe(project_base); - }); + it('should have a project_base', function() { + expect(io.project_base).toBe(project_base); + }); - it('should have a project_suffix', function() { - expect(io.project_suffix).toBe(project_suffix); - }); + it('should have a project_suffix', function() { + expect(io.project_suffix).toBe(project_suffix); + }); - it('should have an asset_base', function() { - expect(io.asset_base).toBe(asset_base); - }); + it('should have an asset_base', function() { + expect(io.asset_base).toBe(asset_base); + }); - it('should have an asset_suffix', function() { - expect(io.asset_suffix).toBe(asset_suffix); - }); + it('should have an asset_suffix', function() { + expect(io.asset_suffix).toBe(asset_suffix); + }); - it('should have an soundbank_base', function() { - expect(io.soundbank_base).toBe(soundbank_base); - }); + it('should have an soundbank_base', function() { + expect(io.soundbank_base).toBe(soundbank_base); + }); - it('should have a spriteLayerCount', function() { - expect(io.spriteLayerCount).toBe(spriteLayerCount); - }); + it('should have a spriteLayerCount', function() { + expect(io.spriteLayerCount).toBe(spriteLayerCount); + }); }); diff --git a/test/unit/looksPrimitiveSpec.js b/test/unit/looksPrimitiveSpec.js index 86a5777..995bec6 100644 --- a/test/unit/looksPrimitiveSpec.js +++ b/test/unit/looksPrimitiveSpec.js @@ -1,51 +1,51 @@ /* jasmine specs for primitives/LooksPrims.js go here */ describe('LooksPrims', function() { - var looksPrims, targetSpriteMock; - beforeEach(function() { - looksPrims = LooksPrims; - targetSpriteMock = targetMock(); - }); - - describe('showBubble for say', function(){ - var sayBlock; + var looksPrims, targetSpriteMock; beforeEach(function() { - sayBlock = {'args': ['what to say']}; - interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': sayBlock}); + looksPrims = LooksPrims; + targetSpriteMock = targetMock(); }); - it('should call the showBubble method on the targetedSprite', function() { - spyOn(targetSpriteMock, "showBubble"); - showBubble(sayBlock, "say"); - expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to say']}, 'say'); - }); - }); + describe('showBubble for say', function() { + var sayBlock; + beforeEach(function() { + sayBlock = {'args': ['what to say']}; + interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': sayBlock}); + }); - describe('showBubble for think', function(){ - var thinkBlock; - beforeEach(function() { - thinkBlock = {'args': ['what to think']}; - interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': thinkBlock}); + it('should call the showBubble method on the targetedSprite', function() { + spyOn(targetSpriteMock, "showBubble"); + showBubble(sayBlock, "say"); + expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to say']}, 'say'); + }); }); - it('should call the showBubble method on the targetedSprite', function() { - spyOn(targetSpriteMock, "showBubble"); - showBubble(thinkBlock, "think"); - expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to think']}, 'think'); - }); - }); + describe('showBubble for think', function() { + var thinkBlock; + beforeEach(function() { + thinkBlock = {'args': ['what to think']}; + interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': thinkBlock}); + }); - describe('showBubble for ask', function(){ - var askBlock; - beforeEach(function() { - askBlock = {'args': ['what to ask']}; - interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': askBlock}); + it('should call the showBubble method on the targetedSprite', function() { + spyOn(targetSpriteMock, "showBubble"); + showBubble(thinkBlock, "think"); + expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to think']}, 'think'); + }); }); - it('should call the showBubble method on the targetedSprite', function() { - spyOn(targetSpriteMock, "showBubble"); - showBubble(askBlock, "ask"); - expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to ask']}, 'ask'); + describe('showBubble for ask', function() { + var askBlock; + beforeEach(function() { + askBlock = {'args': ['what to ask']}; + interp = interpreterMock({'targetSprite': targetSpriteMock }, {'arg': askBlock}); + }); + + it('should call the showBubble method on the targetedSprite', function() { + spyOn(targetSpriteMock, "showBubble"); + showBubble(askBlock, "ask"); + expect(targetSpriteMock.showBubble).toHaveBeenCalledWith({args:['what to ask']}, 'ask'); + }); }); - }); }); diff --git a/test/unit/reporterSpec.js b/test/unit/reporterSpec.js index 4eb36ac..048d772 100644 --- a/test/unit/reporterSpec.js +++ b/test/unit/reporterSpec.js @@ -1,108 +1,108 @@ /* jasmine specs for Reporter.js go here */ describe('Reporter', function() { - var reporter, reporterValues; + var reporter, reporterValues; - beforeEach(function() { - reporter = Reporter; - reporterValues = new ReporterValues(); - }); - - describe('Initialized variables', function() { - var initReporter; beforeEach(function() { - io = new ioMock({'getCount': 4}); - initReporter = new reporter(reporterValues.getStageVariables()); + reporter = Reporter; + reporterValues = new ReporterValues(); }); - describe('Reporter Variables', function() { - it('should have a cmd variable', function() { - expect(initReporter.cmd).toBe('getVar:'); - }); + describe('Initialized variables', function() { + var initReporter; + beforeEach(function() { + io = new ioMock({'getCount': 4}); + initReporter = new reporter(reporterValues.getStageVariables()); + }); - it('should have a color variable', function() { - expect(initReporter.color).toBe(15629590); - }); + describe('Reporter Variables', function() { + it('should have a cmd variable', function() { + expect(initReporter.cmd).toBe('getVar:'); + }); - it('should have a isDiscrete variable', function() { - expect(initReporter.isDiscrete).toBe(true); - }); + it('should have a color variable', function() { + expect(initReporter.color).toBe(15629590); + }); - it('should have a mode variable', function() { - expect(initReporter.mode).toBe(1); - }); + it('should have a isDiscrete variable', function() { + expect(initReporter.isDiscrete).toBe(true); + }); - it('should have a param variable', function() { - expect(initReporter.param).toBe('myAnswer'); - }); + it('should have a mode variable', function() { + expect(initReporter.mode).toBe(1); + }); - it('should have a sliderMax variable', function() { - expect(initReporter.sliderMax).toBe(100); - }); + it('should have a param variable', function() { + expect(initReporter.param).toBe('myAnswer'); + }); - it('should have a sliderMin variable', function() { - expect(initReporter.sliderMin).toBe(0); - }); + it('should have a sliderMax variable', function() { + expect(initReporter.sliderMax).toBe(100); + }); - it('should have a target variable', function() { - expect(initReporter.target).toBe('Stage'); - }); + it('should have a sliderMin variable', function() { + expect(initReporter.sliderMin).toBe(0); + }); - it('should have a visible variable', function() { - expect(initReporter.visible).toBe(true); - }); + it('should have a target variable', function() { + expect(initReporter.target).toBe('Stage'); + }); - it('should have a x variable', function() { - expect(initReporter.x).toBe(5); - }); + it('should have a visible variable', function() { + expect(initReporter.visible).toBe(true); + }); - it('should have a y variable', function() { - expect(initReporter.y).toBe(5); - }); + it('should have a x variable', function() { + expect(initReporter.x).toBe(5); + }); - it('should have a z variable', function() { - expect(initReporter.z).toBe(4); - }); + it('should have a y variable', function() { + expect(initReporter.y).toBe(5); + }); - it('should have a label variable', function() { - expect(initReporter.label).toBe('myAnswer'); - }); + it('should have a z variable', function() { + expect(initReporter.z).toBe(4); + }); - it('should have an el variable', function() { - expect(initReporter.el).toBe(null); - }); + it('should have a label variable', function() { + expect(initReporter.label).toBe('myAnswer'); + }); - it('should have an valueEl variable', function() { - expect(initReporter.valueEl).toBe(null); - }); + it('should have an el variable', function() { + expect(initReporter.el).toBe(null); + }); - it('should have an slider variable', function() { - expect(initReporter.slider).toBe(null); - }); - }); - }); + it('should have an valueEl variable', function() { + expect(initReporter.valueEl).toBe(null); + }); - describe('determineReporterLabel', function() { - it('should return a stage variable', function() { - reporter.prototype.target = "Stage"; - reporter.prototype.param = "myAnswer"; - reporter.prototype.cmd = "getVar:"; - expect(reporter.prototype.determineReporterLabel()).toBe('myAnswer'); + it('should have an slider variable', function() { + expect(initReporter.slider).toBe(null); + }); + }); }); - it('should return a sprite variable', function() { - reporter.prototype.target = "Sprite 1"; - reporter.prototype.param = "localAnswer"; - reporter.prototype.cmd = "getVar:"; - expect(reporter.prototype.determineReporterLabel()).toBe('Sprite 1: localAnswer'); - }); + describe('determineReporterLabel', function() { + it('should return a stage variable', function() { + reporter.prototype.target = "Stage"; + reporter.prototype.param = "myAnswer"; + reporter.prototype.cmd = "getVar:"; + expect(reporter.prototype.determineReporterLabel()).toBe('myAnswer'); + }); - it('should return a stage answer variable', function() { - reporter.prototype.target = "Stage"; - reporter.prototype.param = null; - reporter.prototype.cmd = "answer"; - expect(reporter.prototype.determineReporterLabel()).toBe('answer'); - }); + it('should return a sprite variable', function() { + reporter.prototype.target = "Sprite 1"; + reporter.prototype.param = "localAnswer"; + reporter.prototype.cmd = "getVar:"; + expect(reporter.prototype.determineReporterLabel()).toBe('Sprite 1: localAnswer'); + }); - }); + it('should return a stage answer variable', function() { + reporter.prototype.target = "Stage"; + reporter.prototype.param = null; + reporter.prototype.cmd = "answer"; + expect(reporter.prototype.determineReporterLabel()).toBe('answer'); + }); + + }); }); diff --git a/test/unit/runTimeSpec.js b/test/unit/runTimeSpec.js index 16b7d6c..3cb8d47 100644 --- a/test/unit/runTimeSpec.js +++ b/test/unit/runTimeSpec.js @@ -1,113 +1,113 @@ /* jasmine specs for Runtime.js go here */ describe('Runtime', function() { - var runtimeObj; + var runtimeObj; - beforeEach(function() { - runtimeObj = Runtime; - }); - - describe('Initialized variables', function() { - var initRuntime, lineCanvas; beforeEach(function() { - initRuntime = new runtimeObj(); + runtimeObj = Runtime; }); - describe('Runtime Variables', function() { - it('should have a scene variable', function() { - expect(initRuntime.scene).toBe(null); - }); + describe('Initialized variables', function() { + var initRuntime, lineCanvas; + beforeEach(function() { + initRuntime = new runtimeObj(); + }); - it('should have a sprites array', function() { - expect(initRuntime.sprites).toEqual([]); - }); + describe('Runtime Variables', function() { + it('should have a scene variable', function() { + expect(initRuntime.scene).toBe(null); + }); - it('should have a reporters array', function() { - expect(initRuntime.reporters).toEqual([]); - }); + it('should have a sprites array', function() { + expect(initRuntime.sprites).toEqual([]); + }); - it('should have a keysDown array', function() { - expect(initRuntime.keysDown).toEqual([]); - }); + it('should have a reporters array', function() { + expect(initRuntime.reporters).toEqual([]); + }); - it('should have a mouseDown variable', function() { - expect(initRuntime.mouseDown).toBe(false); - }); + it('should have a keysDown array', function() { + expect(initRuntime.keysDown).toEqual([]); + }); - it('should have a mousePos array', function() { - expect(initRuntime.mousePos).toEqual([0,0]); - }); + it('should have a mouseDown variable', function() { + expect(initRuntime.mouseDown).toBe(false); + }); - it('should have an audioContext variable', function() { - expect(initRuntime.audioContext).toBe(null); - }); + it('should have a mousePos array', function() { + expect(initRuntime.mousePos).toEqual([0,0]); + }); - it('should have an audoGain variable', function() { - expect(initRuntime.audioGain).toBe(null); - }); + it('should have an audioContext variable', function() { + expect(initRuntime.audioContext).toBe(null); + }); - it('should have an audioPlaying array', function() { - expect(initRuntime.audioPlaying).toEqual([]); - }); + it('should have an audoGain variable', function() { + expect(initRuntime.audioGain).toBe(null); + }); - it('should have a notesPlaying array', function() { - expect(initRuntime.notesPlaying).toEqual([]); - }); + it('should have an audioPlaying array', function() { + expect(initRuntime.audioPlaying).toEqual([]); + }); - it('should have a projectLoaded variable', function() { - expect(initRuntime.projectLoaded).toBe(false); - }); - }); - }); + it('should have a notesPlaying array', function() { + expect(initRuntime.notesPlaying).toEqual([]); + }); - describe('Stop All', function() { - var realThread; - beforeEach(function() { - runtime = new runtimeMock - spyOn(window, "stopAllSounds"); - spyOn(runtime.stage, "resetFilters"); - spyOn(runtime.sprites[0], "hideBubble"); - spyOn(runtime.sprites[0], "resetFilters"); - spyOn(runtime.sprites[0], "hideAsk"); - realThread = Thread; - Thread = threadMock; - interp = new interpreterMock(); + it('should have a projectLoaded variable', function() { + expect(initRuntime.projectLoaded).toBe(false); + }); + }); }); - afterEach(function() { - Thread = realThread; - }); + describe('Stop All', function() { + var realThread; + beforeEach(function() { + runtime = new runtimeMock + spyOn(window, "stopAllSounds"); + spyOn(runtime.stage, "resetFilters"); + spyOn(runtime.sprites[0], "hideBubble"); + spyOn(runtime.sprites[0], "resetFilters"); + spyOn(runtime.sprites[0], "hideAsk"); + realThread = Thread; + Thread = threadMock; + interp = new interpreterMock(); + }); - it('should call a new Thread Object', function() { - runtimeObj.prototype.stopAll(); - expect(interp.activeThread).toEqual(new threadMock()); - }); + afterEach(function() { + Thread = realThread; + }); - it('should intitialize an empty threads array', function() { - runtimeObj.prototype.stopAll(); - expect(interp.threads).toEqual([]); - }); + it('should call a new Thread Object', function() { + runtimeObj.prototype.stopAll(); + expect(interp.activeThread).toEqual(new threadMock()); + }); - it('should call stopAllSounds', function() { - runtimeObj.prototype.stopAll(); - expect(window.stopAllSounds).toHaveBeenCalled(); - }); + it('should intitialize an empty threads array', function() { + runtimeObj.prototype.stopAll(); + expect(interp.threads).toEqual([]); + }); - it('should call sprites.hideBubble', function() { - runtimeObj.prototype.stopAll(); - expect(runtime.sprites[0].hideBubble).toHaveBeenCalled(); - }); + it('should call stopAllSounds', function() { + runtimeObj.prototype.stopAll(); + expect(window.stopAllSounds).toHaveBeenCalled(); + }); - it('should call sprites.resetFilters', function() { - runtimeObj.prototype.stopAll(); - expect(runtime.sprites[0].resetFilters).toHaveBeenCalled(); - }); + it('should call sprites.hideBubble', function() { + runtimeObj.prototype.stopAll(); + expect(runtime.sprites[0].hideBubble).toHaveBeenCalled(); + }); - it('should call sprites.hideAsk', function() { - runtimeObj.prototype.stopAll(); - expect(runtime.sprites[0].hideAsk).toHaveBeenCalled(); - }); + it('should call sprites.resetFilters', function() { + runtimeObj.prototype.stopAll(); + expect(runtime.sprites[0].resetFilters).toHaveBeenCalled(); + }); - }); + it('should call sprites.hideAsk', function() { + runtimeObj.prototype.stopAll(); + expect(runtime.sprites[0].hideAsk).toHaveBeenCalled(); + }); + + }); }); diff --git a/test/unit/scratchSpec.js b/test/unit/scratchSpec.js index e7213ce..8d68ae8 100644 --- a/test/unit/scratchSpec.js +++ b/test/unit/scratchSpec.js @@ -4,63 +4,63 @@ describe('Scratch', function() { var scratch; beforeEach(function() { - spyOn(IO.prototype, "loadProject"); - spyOn(Runtime.prototype, "init"); - spyOn(Interpreter.prototype, "initPrims"); - scratch = Scratch; + spyOn(IO.prototype, "loadProject"); + spyOn(Runtime.prototype, "init"); + spyOn(Interpreter.prototype, "initPrims"); + scratch = Scratch; }); - describe('Scratch - Load Project', function(){ - beforeEach(function() { - scratch(project_id); - }); + describe('Scratch - Load Project', function() { + beforeEach(function() { + scratch(project_id); + }); - it('should call the IO loadProject Method', function() { - expect(IO.prototype.loadProject).toHaveBeenCalled(); - }); + it('should call the IO loadProject Method', function() { + expect(IO.prototype.loadProject).toHaveBeenCalled(); + }); - it('should call the Runtime init method', function() { - expect(Runtime.prototype.init).toHaveBeenCalled(); - }); + it('should call the Runtime init method', function() { + expect(Runtime.prototype.init).toHaveBeenCalled(); + }); - it('should call the Interpreter initPrims method', function() { - expect(Interpreter.prototype.initPrims).toHaveBeenCalled(); - }); + it('should call the Interpreter initPrims method', function() { + expect(Interpreter.prototype.initPrims).toHaveBeenCalled(); + }); }); - describe('Scratch - Click Green Flag', function(){ - beforeEach(function() { - setFixtures('<button id=trigger-green-flag tabindex=2></button><div id="overlay"></div>'); - scratch(project_id); - }); + describe('Scratch - Click Green Flag', function() { + beforeEach(function() { + setFixtures('<button id=trigger-green-flag tabindex=2></button><div id="overlay"></div>'); + scratch(project_id); + }); - it('should not click on the green flag if the project is loading', function() { - runtime.projectLoaded = false; - spyOn(runtime, 'greenFlag'); - $('#trigger-green-flag').click(); - expect(runtime.greenFlag).not.toHaveBeenCalled(); - expect($('#overlay').css('display')).toBe('block'); - }); + it('should not click on the green flag if the project is loading', function() { + runtime.projectLoaded = false; + spyOn(runtime, 'greenFlag'); + $('#trigger-green-flag').click(); + expect(runtime.greenFlag).not.toHaveBeenCalled(); + expect($('#overlay').css('display')).toBe('block'); + }); - it('should click on the green flag if the project is loaded', function() { - runtime.projectLoaded = true; - spyOn(runtime, 'greenFlag'); - $('#trigger-green-flag').click(); - expect(runtime.greenFlag).toHaveBeenCalled(); - expect($('#overlay').css('display')).toBe('none'); - }); + it('should click on the green flag if the project is loaded', function() { + runtime.projectLoaded = true; + spyOn(runtime, 'greenFlag'); + $('#trigger-green-flag').click(); + expect(runtime.greenFlag).toHaveBeenCalled(); + expect($('#overlay').css('display')).toBe('none'); + }); }); - describe('Scratch - Click Stop', function(){ - beforeEach(function() { - setFixtures('<button id=trigger-stop tabindex=3></button>'); - scratch(project_id); - }); + describe('Scratch - Click Stop', function() { + beforeEach(function() { + setFixtures('<button id=trigger-stop tabindex=3></button>'); + scratch(project_id); + }); - it('should not click on the green flag if the project is loading', function() { - spyOn(runtime, 'stopAll'); - $('#trigger-stop').click(); - expect(runtime.stopAll).toHaveBeenCalled(); - }); + it('should not click on the green flag if the project is loading', function() { + spyOn(runtime, 'stopAll'); + $('#trigger-stop').click(); + expect(runtime.stopAll).toHaveBeenCalled(); + }); }); }); diff --git a/test/unit/sensingPrimitiveSpec.js b/test/unit/sensingPrimitiveSpec.js index 0882209..11d6d5e 100644 --- a/test/unit/sensingPrimitiveSpec.js +++ b/test/unit/sensingPrimitiveSpec.js @@ -1,112 +1,109 @@ /* jasmine specs for primitives/SensingPrims.js go here */ describe('SensingPrims', function() { - var sensingPrims; - beforeEach(function() { - sensingPrims = SensingPrims; - realDate = Date; - }); - - afterEach(function () { - Date = realDate; - }); - - describe('primTimestamp', function(){ + var sensingPrims; beforeEach(function() { - /* MonkeyPatching the built-in Javascript Date */ - var epochDate = new Date(2000, 0, 1); - var nowDate = new Date(2014, 5, 16); - Date = function () { - return (arguments.length ? epochDate : nowDate); - }; + sensingPrims = SensingPrims; + realDate = Date; }); - it('should return the days since 2000', function() { - expect(sensingPrims.prototype.primTimestamp()).toBeCloseTo(5280); - }); - }); - - describe('primTimeDate', function(){ - beforeEach(function() { - /* MonkeyPatching the built-in Javascript Date */ - Date = function () { - return { - 'getFullYear' : function() { return 2014;}, - 'getMonth' : function() { return 4;}, - 'getDate' : function() { return 16;}, - 'getDay' : function() { return 4;}, - 'getHours' : function() { return 9;}, - 'getMinutes' : function() { return 18;}, - 'getSeconds' : function() { return 36;}, - 'getTime' : function() {} - }; - }; + afterEach(function() { + Date = realDate; }); - it('should return the year', function() { - var block = {'args' : ['year']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(2014); + describe('primTimestamp', function() { + beforeEach(function() { + /* MonkeyPatching the built-in Javascript Date */ + var epochDate = new Date(2000, 0, 1); + var nowDate = new Date(2014, 5, 16); + Date = function() { + return (arguments.length ? epochDate : nowDate); + }; + }); + + it('should return the days since 2000', function() { + expect(sensingPrims.prototype.primTimestamp()).toBeCloseTo(5280); + }); }); - it('should return the month of the year', function() { - var block = {'args' : ['month']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(5); + describe('primTimeDate', function() { + beforeEach(function() { + /* MonkeyPatching the built-in Javascript Date */ + Date = function() { + return { + 'getFullYear': function() { return 2014;}, + 'getMonth': function() { return 4;}, + 'getDate': function() { return 16;}, + 'getDay': function() { return 4;}, + 'getHours': function() { return 9;}, + 'getMinutes': function() { return 18;}, + 'getSeconds': function() { return 36;}, + 'getTime': function() {} + }; + }; + }); + + it('should return the year', function() { + var block = {'args': ['year']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(2014); + }); + + it('should return the month of the year', function() { + var block = {'args': ['month']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(5); + }); + + it('should return the day of the week', function() { + var block = {'args': ['day of week']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(5); + }); + + it('should return the hour of the day', function() { + var block = {'args': ['hour']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(9); + }); + + it('should return the minute of the hour', function() { + var block = {'args': ['minute']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(18); + }); + + it('should return the second of the minute', function() { + var block = {'args': ['second']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(36); + }); + + it('should return the 0 on year', function() { + var block = {'args': ['anythingElse']}; + expect(sensingPrims.prototype.primTimeDate(block)).toEqual(0); + }); }); - it('should return the day of the week', function() { - var block = {'args' : ['day of week']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(5); + describe('primAnswer', function() { + beforeEach(function() { + interp = interpreterMock({'targetSprite': new targetMock()}); + }); + + it('should return the answer variable from the targetedSprite', function() { + expect(sensingPrims.prototype.primAnswer()).toBe(12); + }); }); - it('should return the hour of the day', function() { - var block = {'args' : ['hour']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(9); + describe('primDoAsk', function() { + var askBlock, targetSpriteMock; + beforeEach(function() { + targetSpriteMock = targetMock(); + askBlock = {'args': 'what to ask'}; + interp = interpreterMock({'targetSprite': targetSpriteMock}, {'arg': askBlock}); + }); + + it('should call the showBubble method on the targetedSprite', function() { + spyOn(window, "showBubble"); + spyOn(targetSpriteMock, "showAsk"); + sensingPrims.prototype.primDoAsk(askBlock); + expect(window.showBubble).toHaveBeenCalledWith({args:'what to ask'}, 'doAsk'); + expect(targetSpriteMock.showAsk).toHaveBeenCalled; + expect(interp.activeThread.paused).toBe(true); + }); }); - - it('should return the minute of the hour', function() { - var block = {'args' : ['minute']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(18); - }); - - it('should return the second of the minute', function() { - var block = {'args' : ['second']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(36); - }); - - it('should return the 0 on year', function() { - var block = {'args' : ['anythingElse']}; - expect(sensingPrims.prototype.primTimeDate(block)).toEqual(0); - }); - }); - - describe('primAnswer', function(){ - beforeEach(function() { - interp = interpreterMock({'targetSprite': new targetMock()}); - }); - - it('should return the answer variable from the targetedSprite', function() { - expect(sensingPrims.prototype.primAnswer()).toBe(12); - }); - }); - - describe('primDoAsk', function(){ - var askBlock, targetSpriteMock; - beforeEach(function() { - targetSpriteMock = targetMock(); - askBlock = {'args': 'what to ask'}; - interp = interpreterMock({'targetSprite': targetSpriteMock}, {'arg': askBlock}); - - }); - - it('should call the showBubble method on the targetedSprite', function() { - spyOn(window, "showBubble"); - spyOn(targetSpriteMock, "showAsk"); - sensingPrims.prototype.primDoAsk(askBlock); - expect(window.showBubble).toHaveBeenCalledWith({args:'what to ask'}, 'doAsk'); - expect(targetSpriteMock.showAsk).toHaveBeenCalled; - expect(interp.activeThread.paused).toBe(true); - }); - }); - - }); diff --git a/test/unit/spriteSpec.js b/test/unit/spriteSpec.js index 7a1e690..1f9398d 100644 --- a/test/unit/spriteSpec.js +++ b/test/unit/spriteSpec.js @@ -1,396 +1,396 @@ /* jasmine specs for Sprite.js go here */ describe('Sprite', function() { - var sprite; + var sprite; - beforeEach(function() { - sprite = Sprite; - }); - - describe('Initialized variables', function() { - var initSprite; beforeEach(function() { - var spriteObject = sensingData.children[0]; - initSprite = new sprite(spriteObject); + sprite = Sprite; }); - describe('Sprite Variables', function() { - it('should have a visible variable', function() { - expect(initSprite.visible).toBe(true); - }); + describe('Initialized variables', function() { + var initSprite; + beforeEach(function() { + var spriteObject = sensingData.children[0]; + initSprite = new sprite(spriteObject); + }); + + describe('Sprite Variables', function() { + it('should have a visible variable', function() { + expect(initSprite.visible).toBe(true); + }); + }); + + describe('Pen Variables', function() { + it('should have a penIsDown variable', function() { + expect(initSprite.penIsDown).toBe(false); + }); + + it('should have a penWidth variable', function() { + expect(initSprite.penWidth).toBe(1); + }); + + it('should have a penHue variable', function() { + expect(initSprite.penHue).toBe(120); + }); + + it('should have a penShade variable', function() { + expect(initSprite.penShade).toBe(50); + }); + + it('should have a penColorCache variable', function() { + expect(initSprite.penColorCache).toBe(0x0000FF); + }); + }); + + describe('Ask Bubble', function() { + it('should have an askInput variable', function() { + expect(initSprite.askInput).toBe(null); + }); + + it('should have an askInputBox variable', function() { + expect(initSprite.askInputField).toBe(null); + }); + + it('should have an askInputStyler variable', function() { + expect(initSprite.askInputButton).toBe(null); + }); + + it('should have an askInputOn variable', function() { + expect(initSprite.askInputOn).toBe(false); + }); + }); + }) + + describe('showBubble', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + spriteProto.visible = true; + setFixtures('<div class="bubble-container"></div>'); + spriteProto.talkBubble = $('.bubble-container'); + spriteProto.talkBubble.css('display', 'none'); + spriteProto.talkBubbleBox = $('<div class="bubble"></div>'); + spriteProto.talkBubbleStyler = $('<div class="bubble-say"></div>'); + spriteProto.talkBubble.append(spriteProto.talkBubbleBox); + spriteProto.talkBubble.append(spriteProto.talkBubbleStyler); + }); + + describe('Say', function() { + it('should call the showBubble method on the Sprite', function() { + var text = "What to say"; + spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; + spriteProto.showBubble(text, "say"); + expect($('.bubble').html()).toBe(text); + expect($('.bubble-say').hasClass('bubble-say')).toBe(true); + expect($('.bubble').hasClass('say-think-border')).toBe(true); + expect($('.bubble-container').css('display')).toBe('inline-block'); + }); + }); + + describe('Think', function() { + it('should call the showBubble method on the Sprite', function() { + var text = "What to think"; + spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; + spriteProto.showBubble(text, "think"); + expect($('.bubble').html()).toBe(text); + expect($('.bubble-think').hasClass('bubble-think')).toBe(true); + expect($('.bubble').hasClass('say-think-border')).toBe(true); + expect($('.bubble-container').css('display')).toBe('inline-block'); + }); + }); + + describe('Ask', function() { + it('should call the showBubble method on the Sprite', function() { + var text = "What to Ask"; + spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; + spriteProto.showBubble(text, "doAsk"); + expect($('.bubble').html()).toBe(text); + expect($('.bubble-ask').hasClass('bubble-ask')).toBe(true); + expect($('.bubble').hasClass('ask-border')).toBe(true); + expect($('.bubble-container').css('display')).toBe('inline-block'); + }); + }); + + describe('Any Bubble with visible false', function() { + it('should call the showBubble method on the Sprite and not display it', function() { + spriteProto.visible = false; + var text = "What to Ask"; + spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; + spriteProto.showBubble(text, "doAsk"); + expect($('.bubble').html()).toBe(text); + expect($('.bubble-ask').hasClass('bubble-ask')).toBe(true); + expect($('.bubble').hasClass('ask-border')).toBe(true); + expect($('.bubble-container').css('display')).toBe('none'); + }); + }); }); - describe('Pen Variables', function() { - it('should have a penIsDown variable', function() { - expect(initSprite.penIsDown).toBe(false); - }); + describe('hideBubble', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + setFixtures('<div class="bubble-container"></div>'); + spriteProto.talkBubble = $('.bubble-container'); + spriteProto.talkBubble.css('display', 'inline'); + }); - it('should have a penWidth variable', function() { - expect(initSprite.penWidth).toBe(1); - }); + it('should hide the bubble', function() { + spriteProto.hideBubble(); + expect($('.bubble-container').css('display')).toBe('none'); + expect(spriteProto.talkBubbleOn).toBe(false); - it('should have a penHue variable', function() { - expect(initSprite.penHue).toBe(120); - }); - - it('should have a penShade variable', function() { - expect(initSprite.penShade).toBe(50); - }); - - it('should have a penColorCache variable', function() { - expect(initSprite.penColorCache).toBe(0x0000FF); - }); + }); }); - describe('Ask Bubble', function() { - it('should have an askInput variable', function() { - expect(initSprite.askInput).toBe(null); - }); + describe('showAsk', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + spriteProto.visible = true; + spriteProto.z = 22; + setFixtures('<div class="ask-container"></div>'); + spriteProto.askInput= $('.ask-container'); + spriteProto.askInput.css('display','none'); + spriteProto.askInput.css('position','relative'); + spriteProto.askInputField = $('<div class="ask-input"></div>'); + spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); + spriteProto.askInputField.append(spriteProto.askInputTextField); + spriteProto.askInputButton = $('<div class="ask-button"></div>'); + spriteProto.askInput.append(spriteProto.askInputField); + spriteProto.askInput.append(spriteProto.askInputButton); + }); - it('should have an askInputBox variable', function() { - expect(initSprite.askInputField).toBe(null); - }); + it('should show the ask input if visible is true', function() { + spriteProto.showAsk(); + expect($('.ask-container').css('display')).toBe('inline-block'); + expect($('.ask-container').css('z-index')).toBe('22'); + expect($('.ask-container').css('left')).toBe('15px'); + expect($('.ask-container').css('right')).toBe('15px'); + expect($('.ask-container').css('bottom')).toBe('7px'); + expect($('.ask-container').css('height')).toBe('25px'); + expect($('.ask-container').css('height')).toBe('25px'); + expect( + $('.ask-text-field').is(':focus') || + document.activeElement.className.match(/ask-text-field/) !== null + ).toBe(true); + expect(spriteProto.askInputOn).toBe(true); + }); - it('should have an askInputStyler variable', function() { - expect(initSprite.askInputButton).toBe(null); - }); - - it('should have an askInputOn variable', function() { - expect(initSprite.askInputOn).toBe(false); - }); - }); - }) - - describe('showBubble', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - spriteProto.visible = true; - setFixtures('<div class="bubble-container"></div>'); - spriteProto.talkBubble = $('.bubble-container'); - spriteProto.talkBubble.css('display', 'none'); - spriteProto.talkBubbleBox = $('<div class="bubble"></div>'); - spriteProto.talkBubbleStyler = $('<div class="bubble-say"></div>'); - spriteProto.talkBubble.append(spriteProto.talkBubbleBox); - spriteProto.talkBubble.append(spriteProto.talkBubbleStyler); + it('should not show the ask input if visible is false', function() { + spriteProto.visible = false; + spriteProto.showAsk(); + expect($('.ask-container').css('display')).toBe('none'); + expect( + $('.ask-text-field').is(':focus') || + document.activeElement.className.match(/ask-text-field/) !== null + ).toBe(false); + }); }); - describe('Say', function(){ - it('should call the showBubble method on the Sprite', function() { - var text = "What to say"; - spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; - spriteProto.showBubble(text, "say"); - expect($('.bubble').html()).toBe(text); - expect($('.bubble-say').hasClass('bubble-say')).toBe(true); - expect($('.bubble').hasClass('say-think-border')).toBe(true); - expect($('.bubble-container').css('display')).toBe('inline-block'); - }); + describe('hideAsk', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + setFixtures('<div class="ask-container"></div>'); + spriteProto.askInput = $('.ask-container'); + spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); + spriteProto.askInputTextField.val("Delete Me"); + spriteProto.askInput.css('display', 'inline'); + }); + + it('should hide the ask input', function() { + spriteProto.hideAsk(); + expect($('.ask-container').css('display')).toBe('none'); + expect(spriteProto.askInputOn).toBe(false); + expect(spriteProto.askInputTextField.val()).toBe(''); + }); }); - describe('Think', function(){ - it('should call the showBubble method on the Sprite', function() { - var text = "What to think"; - spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; - spriteProto.showBubble(text, "think"); - expect($('.bubble').html()).toBe(text); - expect($('.bubble-think').hasClass('bubble-think')).toBe(true); - expect($('.bubble').hasClass('say-think-border')).toBe(true); - expect($('.bubble-container').css('display')).toBe('inline-block'); - }); + describe('bindAsk', function() { + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); + spriteProto.askInputButton = $('<div class="ask-button"></div>'); + spyOn(spriteProto, "hideBubble"); + spyOn(spriteProto, "hideAsk"); + }); + + it('should bind to the askInputButton and handle a click', function() { + interp = new interpreterMock(); + spyOn(interp, "targetStage").andCallThrough(); + $(spriteProto.askInputTextField).val('Hellow World'); + spriteProto.bindDoAskButton(); + $(spriteProto.askInputButton).click(); + expect(interp.targetStage).toHaveBeenCalled(); + }); + + it('should bind to the askInputButton and handle a enter/return', function() { + interp = new interpreterMock(); + spyOn(interp, "targetStage").andCallThrough(); + spriteProto.bindDoAskButton(); + var e = $.Event( "keypress", { which: 13 } ); + $(spriteProto.askInputButton).trigger(e); + expect(interp.targetStage).toHaveBeenCalled(); + }); + + + it('should call hideBubble', function() { + spriteProto.bindDoAskButton(); + $(spriteProto.askInputButton).click(); + expect(spriteProto.hideBubble).toHaveBeenCalled(); + expect(spriteProto.hideAsk).toHaveBeenCalled(); + }); + + it('should call hideAsk', function() { + spriteProto.bindDoAskButton(); + $(spriteProto.askInputButton).click(); + expect(spriteProto.hideAsk).toHaveBeenCalled(); + }); + + it('should have interp.activeThread.paused be false', function() { + interp = new interpreterMock(); + spriteProto.bindDoAskButton(); + $(spriteProto.askInputButton).click(); + expect(interp.activeThread.paused).toBe(false); + }); }); - describe('Ask', function(){ - it('should call the showBubble method on the Sprite', function() { - var text = "What to Ask"; - spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; - spriteProto.showBubble(text, "doAsk"); - expect($('.bubble').html()).toBe(text); - expect($('.bubble-ask').hasClass('bubble-ask')).toBe(true); - expect($('.bubble').hasClass('ask-border')).toBe(true); - expect($('.bubble-container').css('display')).toBe('inline-block'); - }); + describe('updateLayer', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + setFixtures('<img class="mesh"></img><div class="bubble-container"></div><div class="ask-container"></div>'); + spriteProto.talkBubble = $('.bubble-container'); + spriteProto.talkBubble.css('position', 'relative'); + spriteProto.askInput = $('.ask-container'); + spriteProto.askInput.css('position', 'relative'); + spriteProto.mesh = $('.mesh'); + spriteProto.mesh.css('position', 'relative'); + spriteProto.z = 22; + }); + + it('should update the mesh z-index', function() { + expect($('.mesh').css('z-index')).toBe('auto'); + spriteProto.updateLayer(); + expect($('.mesh').css('z-index')).toBe('22'); + }); + + it('should update the talkBubble z-index', function() { + expect($('.bubble-container').css('z-index')).toBe('auto'); + spriteProto.updateLayer(); + expect($('.bubble-container').css('z-index')).toBe('22'); + }); + + it('should update the askInput z-index', function() { + expect($('.ask-container').css('z-index')).toBe('auto'); + spriteProto.updateLayer(); + expect($('.ask-container').css('z-index')).toBe('22'); + }); }); - describe('Any Bubble with visible false', function(){ - it('should call the showBubble method on the Sprite and not display it', function() { - spriteProto.visible = false; - var text = "What to Ask"; - spyOn(spriteProto, "getTalkBubbleXY").andReturn([50,50]);; - spriteProto.showBubble(text, "doAsk"); - expect($('.bubble').html()).toBe(text); - expect($('.bubble-ask').hasClass('bubble-ask')).toBe(true); - expect($('.bubble').hasClass('ask-border')).toBe(true); - expect($('.bubble-container').css('display')).toBe('none'); - }); - }); - }); + describe('updateVisible', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + setFixtures('<img class="mesh"></img><div class="bubble-container"></div><div class="ask-container"></div>'); + spriteProto.talkBubble = $('.bubble-container'); + spriteProto.talkBubble.css('display', 'none'); + spriteProto.askInput = $('.ask-container'); + spriteProto.askInput.css('display', 'none'); + spriteProto.mesh = $('.mesh'); + spriteProto.mesh.css('display', 'none'); + }); - describe('hideBubble', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - setFixtures('<div class="bubble-container"></div>'); - spriteProto.talkBubble = $('.bubble-container'); - spriteProto.talkBubble.css('display', 'inline'); - }); + describe('mesh', function() { + it('should update the mesh display on false', function() { + expect($('.mesh').css('display')).toBe('none'); + spriteProto.visible = false; + spriteProto.updateVisible(); + expect($('.mesh').css('display')).toBe('none'); + }); - it('should hide the bubble', function() { - spriteProto.hideBubble(); - expect($('.bubble-container').css('display')).toBe('none'); - expect(spriteProto.talkBubbleOn).toBe(false); + it('should update the mesh display on true', function() { + expect($('.mesh').css('display')).toBe('none'); + spriteProto.visible = true; + spriteProto.updateVisible(); + expect($('.mesh').css('display')).toBe('inline'); + }); - }); - }); + }); - describe('showAsk', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - spriteProto.visible = true; - spriteProto.z = 22; - setFixtures('<div class="ask-container"></div>'); - spriteProto.askInput= $('.ask-container'); - spriteProto.askInput.css('display','none'); - spriteProto.askInput.css('position','relative'); - spriteProto.askInputField = $('<div class="ask-input"></div>'); - spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); - spriteProto.askInputField.append(spriteProto.askInputTextField); - spriteProto.askInputButton = $('<div class="ask-button"></div>'); - spriteProto.askInput.append(spriteProto.askInputField); - spriteProto.askInput.append(spriteProto.askInputButton); - }); + describe('talkBubble', function() { + it('should update the talkBubble on talkBubble true and visible true', function() { + expect($('.bubble-container').css('display')).toBe('none'); + spriteProto.talkBubbleOn = true; + spriteProto.visible = true; + spriteProto.updateVisible(); + expect($('.bubble-container').css('display')).toBe('inline-block'); + }); - it('should show the ask input if visible is true', function() { - spriteProto.showAsk(); - expect($('.ask-container').css('display')).toBe('inline-block'); - expect($('.ask-container').css('z-index')).toBe('22'); - expect($('.ask-container').css('left')).toBe('15px'); - expect($('.ask-container').css('right')).toBe('15px'); - expect($('.ask-container').css('bottom')).toBe('7px'); - expect($('.ask-container').css('height')).toBe('25px'); - expect($('.ask-container').css('height')).toBe('25px'); - expect( - $('.ask-text-field').is(':focus') || - document.activeElement.className.match(/ask-text-field/) !== null - ).toBe(true); - expect(spriteProto.askInputOn).toBe(true); - }); + it('should update the talkBubble on talkBubble false and visible true', function() { + expect($('.bubble-container').css('display')).toBe('none'); + spriteProto.talkBubbleOn = false; + spriteProto.visible = true; + spriteProto.updateVisible(); + expect($('.bubble-container').css('display')).toBe('none'); + }); - it('should not show the ask input if visible is false', function() { - spriteProto.visible = false; - spriteProto.showAsk(); - expect($('.ask-container').css('display')).toBe('none'); - expect( - $('.ask-text-field').is(':focus') || - document.activeElement.className.match(/ask-text-field/) !== null - ).toBe(false); - }); - }); + it('should update the talkBubble on talkBubble true and visible false', function() { + expect($('.bubble-container').css('display')).toBe('none'); + spriteProto.talkBubbleOn = true; + spriteProto.visible = false; + spriteProto.updateVisible(); + expect($('.bubble-container').css('display')).toBe('none'); + }); + }); - describe('hideAsk', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - setFixtures('<div class="ask-container"></div>'); - spriteProto.askInput = $('.ask-container'); - spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); - spriteProto.askInputTextField.val("Delete Me"); - spriteProto.askInput.css('display', 'inline'); - }); + describe('askContainer', function() { + it('should update the askInput on askInput true and visible true', function() { + expect($('.ask-container').css('display')).toBe('none'); + spriteProto.askInputOn = true; + spriteProto.visible = true; + spriteProto.updateVisible(); + expect($('.ask-container').css('display')).toBe('inline-block'); + }); - it('should hide the ask input', function() { - spriteProto.hideAsk(); - expect($('.ask-container').css('display')).toBe('none'); - expect(spriteProto.askInputOn).toBe(false); - expect(spriteProto.askInputTextField.val()).toBe(''); - }); - }); + it('should update the askInput on askInput false and visible true', function() { + expect($('.ask-container').css('display')).toBe('none'); + spriteProto.askInputOn = false; + spriteProto.visible = true; + spriteProto.updateVisible(); + expect($('.ask-container').css('display')).toBe('none'); + }); - describe('bindAsk', function() { - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - spriteProto.askInputTextField = $('<input type="text" class="ask-text-field"></input>'); - spriteProto.askInputButton = $('<div class="ask-button"></div>'); - spyOn(spriteProto, "hideBubble"); - spyOn(spriteProto, "hideAsk"); - }); - - it('should bind to the askInputButton and handle a click', function() { - interp = new interpreterMock(); - spyOn(interp, "targetStage").andCallThrough(); - $(spriteProto.askInputTextField).val('Hellow World'); - spriteProto.bindDoAskButton(); - $(spriteProto.askInputButton).click(); - expect(interp.targetStage).toHaveBeenCalled(); - }); - - it('should bind to the askInputButton and handle a enter/return', function() { - interp = new interpreterMock(); - spyOn(interp, "targetStage").andCallThrough(); - spriteProto.bindDoAskButton(); - var e = $.Event( "keypress", { which: 13 } ); - $(spriteProto.askInputButton).trigger(e); - expect(interp.targetStage).toHaveBeenCalled(); - }); - - - it('should call hideBubble', function() { - spriteProto.bindDoAskButton(); - $(spriteProto.askInputButton).click(); - expect(spriteProto.hideBubble).toHaveBeenCalled(); - expect(spriteProto.hideAsk).toHaveBeenCalled(); - }); - - it('should call hideAsk', function() { - spriteProto.bindDoAskButton(); - $(spriteProto.askInputButton).click(); - expect(spriteProto.hideAsk).toHaveBeenCalled(); - }); - - it('should have interp.activeThread.paused be false', function() { - interp = new interpreterMock(); - spriteProto.bindDoAskButton(); - $(spriteProto.askInputButton).click(); - expect(interp.activeThread.paused).toBe(false); - }); - }); - - describe('updateLayer', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - setFixtures('<img class="mesh"></img><div class="bubble-container"></div><div class="ask-container"></div>'); - spriteProto.talkBubble = $('.bubble-container'); - spriteProto.talkBubble.css('position', 'relative'); - spriteProto.askInput = $('.ask-container'); - spriteProto.askInput.css('position', 'relative'); - spriteProto.mesh = $('.mesh'); - spriteProto.mesh.css('position', 'relative'); - spriteProto.z = 22; - }); - - it('should update the mesh z-index', function() { - expect($('.mesh').css('z-index')).toBe('auto'); - spriteProto.updateLayer(); - expect($('.mesh').css('z-index')).toBe('22'); - }); - - it('should update the talkBubble z-index', function() { - expect($('.bubble-container').css('z-index')).toBe('auto'); - spriteProto.updateLayer(); - expect($('.bubble-container').css('z-index')).toBe('22'); - }); - - it('should update the askInput z-index', function() { - expect($('.ask-container').css('z-index')).toBe('auto'); - spriteProto.updateLayer(); - expect($('.ask-container').css('z-index')).toBe('22'); - }); - }); - - describe('updateVisible', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - setFixtures('<img class="mesh"></img><div class="bubble-container"></div><div class="ask-container"></div>'); - spriteProto.talkBubble = $('.bubble-container'); - spriteProto.talkBubble.css('display', 'none'); - spriteProto.askInput = $('.ask-container'); - spriteProto.askInput.css('display', 'none'); - spriteProto.mesh = $('.mesh'); - spriteProto.mesh.css('display', 'none'); - }); - - describe('mesh', function() { - it('should update the mesh display on false', function() { - expect($('.mesh').css('display')).toBe('none'); - spriteProto.visible = false; - spriteProto.updateVisible(); - expect($('.mesh').css('display')).toBe('none'); - }); - - it('should update the mesh display on true', function() { - expect($('.mesh').css('display')).toBe('none'); - spriteProto.visible = true; - spriteProto.updateVisible(); - expect($('.mesh').css('display')).toBe('inline'); - }); + it('should update the askInput on askInput true and visible false', function() { + expect($('.ask-container').css('display')).toBe('none'); + spriteProto.askInputOn = true; + spriteProto.visible = false; + spriteProto.updateVisible(); + expect($('.ask-container').css('display')).toBe('none'); + }); + }); }); - describe('talkBubble', function() { - it('should update the talkBubble on talkBubble true and visible true', function() { - expect($('.bubble-container').css('display')).toBe('none'); - spriteProto.talkBubbleOn = true; - spriteProto.visible = true; - spriteProto.updateVisible(); - expect($('.bubble-container').css('display')).toBe('inline-block'); - }); + describe('setVisible', function() { + var spriteProto; + beforeEach(function() { + spriteProto = deepCopy(sprite.prototype); + spyOn(spriteProto, "updateVisible"); + }); - it('should update the talkBubble on talkBubble false and visible true', function() { - expect($('.bubble-container').css('display')).toBe('none'); - spriteProto.talkBubbleOn = false; - spriteProto.visible = true; - spriteProto.updateVisible(); - expect($('.bubble-container').css('display')).toBe('none'); - }); + it('should set visible to true', function() { + expect(spriteProto.visible).toBe(undefined); + spriteProto.setVisible(true); + expect(spriteProto.visible).toBe(true); + expect(spriteProto.updateVisible).toHaveBeenCalled(); + }); - it('should update the talkBubble on talkBubble true and visible false', function() { - expect($('.bubble-container').css('display')).toBe('none'); - spriteProto.talkBubbleOn = true; - spriteProto.visible = false; - spriteProto.updateVisible(); - expect($('.bubble-container').css('display')).toBe('none'); - }); + it('should set visible to false', function() { + spriteProto.visible = true; + spriteProto.setVisible(false); + expect(spriteProto.visible).toBe(false); + expect(spriteProto.updateVisible).toHaveBeenCalled(); + }); }); - - describe('askContainer', function() { - it('should update the askInput on askInput true and visible true', function() { - expect($('.ask-container').css('display')).toBe('none'); - spriteProto.askInputOn = true; - spriteProto.visible = true; - spriteProto.updateVisible(); - expect($('.ask-container').css('display')).toBe('inline-block'); - }); - - it('should update the askInput on askInput false and visible true', function() { - expect($('.ask-container').css('display')).toBe('none'); - spriteProto.askInputOn = false; - spriteProto.visible = true; - spriteProto.updateVisible(); - expect($('.ask-container').css('display')).toBe('none'); - }); - - it('should update the askInput on askInput true and visible false', function() { - expect($('.ask-container').css('display')).toBe('none'); - spriteProto.askInputOn = true; - spriteProto.visible = false; - spriteProto.updateVisible(); - expect($('.ask-container').css('display')).toBe('none'); - }); - }); - - }); - - describe('setVisible', function() { - var spriteProto; - beforeEach(function() { - spriteProto = deepCopy(sprite.prototype); - spyOn(spriteProto, "updateVisible"); - }); - - it('should set visible to true', function() { - expect(spriteProto.visible).toBe(undefined); - spriteProto.setVisible(true); - expect(spriteProto.visible).toBe(true); - expect(spriteProto.updateVisible).toHaveBeenCalled(); - }); - - it('should set visible to false', function() { - spriteProto.visible = true; - spriteProto.setVisible(false); - expect(spriteProto.visible).toBe(false); - expect(spriteProto.updateVisible).toHaveBeenCalled(); - }); - }); }); diff --git a/test/unit/stageSpec.js b/test/unit/stageSpec.js index a6ee5e1..93c923c 100644 --- a/test/unit/stageSpec.js +++ b/test/unit/stageSpec.js @@ -1,55 +1,55 @@ /* jasmine specs for Stage.js go here */ describe('Stage', function() { - var stage; + var stage; - beforeEach(function() { - stage = Stage; - }); - - describe('Initialized variables', function() { - var initStage, lineCanvas; beforeEach(function() { - spyOn(Sprite, "call"); - initStage = new stage(sensingData); + stage = Stage; }); - describe('Stage Variables', function() { - it('should have a z variable', function() { - expect(initStage.z).toBe(-2); - }); + describe('Initialized variables', function() { + var initStage, lineCanvas; + beforeEach(function() { + spyOn(Sprite, "call"); + initStage = new stage(sensingData); + }); - it('should have a penLayerLoaded variable', function() { - expect(initStage.penLayerLoaded).toBe(false); - }); + describe('Stage Variables', function() { + it('should have a z variable', function() { + expect(initStage.z).toBe(-2); + }); - it('should have a lineCanvas element', function() { - expect(initStage.lineCanvas).toBeDefined(); - }); + it('should have a penLayerLoaded variable', function() { + expect(initStage.penLayerLoaded).toBe(false); + }); - it('should have a lineCanvas width', function() { - expect(initStage.lineCanvas.width).toBe(480); - }); + it('should have a lineCanvas element', function() { + expect(initStage.lineCanvas).toBeDefined(); + }); - it('should have a lineCanvas height', function() { - expect(initStage.lineCanvas.height).toBe(360); - }); + it('should have a lineCanvas width', function() { + expect(initStage.lineCanvas.width).toBe(480); + }); - it('should have a lineCache variable', function() { - expect(initStage.lineCache).toBeDefined(); - }); + it('should have a lineCanvas height', function() { + expect(initStage.lineCanvas.height).toBe(360); + }); - it('should have a isStage variable', function() { - expect(initStage.isStage).toBe(true); - }); + it('should have a lineCache variable', function() { + expect(initStage.lineCache).toBeDefined(); + }); - it('should have an askAnswer variable', function() { - expect(initStage.askAnswer).toBe(""); - }); + it('should have a isStage variable', function() { + expect(initStage.isStage).toBe(true); + }); - it('should have called Sprite.call', function() { - expect(Sprite.call).toHaveBeenCalled(); - }); + it('should have an askAnswer variable', function() { + expect(initStage.askAnswer).toBe(""); + }); + + it('should have called Sprite.call', function() { + expect(Sprite.call).toHaveBeenCalled(); + }); + }); }); - }); }); diff --git a/test/unit/threadSpec.js b/test/unit/threadSpec.js index 556f8e5..44b0a9c 100644 --- a/test/unit/threadSpec.js +++ b/test/unit/threadSpec.js @@ -1,50 +1,50 @@ /* jasmine specs for Interpreter.js -> Thread go here */ describe('Thread', function() { - var thread; + var thread; - beforeEach(function() { - thread = Thread; - }); - - describe('Initialized variables', function() { - var initThread; beforeEach(function() { - initThread = new thread('block', 'target'); + thread = Thread; }); - describe('Thread Variables', function() { - it('should have a nextBlock variable', function() { - expect(initThread.nextBlock).toBe('block'); - }); + describe('Initialized variables', function() { + var initThread; + beforeEach(function() { + initThread = new thread('block', 'target'); + }); - it('should have a firstBlock variable', function() { - expect(initThread.firstBlock).toBe('block'); - }); + describe('Thread Variables', function() { + it('should have a nextBlock variable', function() { + expect(initThread.nextBlock).toBe('block'); + }); - it('should have a stack variable', function() { - expect(initThread.stack).toEqual([]); - }); + it('should have a firstBlock variable', function() { + expect(initThread.firstBlock).toBe('block'); + }); - it('should have a target variable', function() { - expect(initThread.target).toBe('target'); - }); + it('should have a stack variable', function() { + expect(initThread.stack).toEqual([]); + }); - it('should have a tmp variable', function() { - expect(initThread.tmp).toBe(null); - }); + it('should have a target variable', function() { + expect(initThread.target).toBe('target'); + }); - it('should have a tmpObj variable', function() { - expect(initThread.tmpObj).toEqual([]); - }); + it('should have a tmp variable', function() { + expect(initThread.tmp).toBe(null); + }); - it('should have a firstTime variable', function() { - expect(initThread.firstTime).toBe(true); - }); + it('should have a tmpObj variable', function() { + expect(initThread.tmpObj).toEqual([]); + }); - it('should have a paused variable', function() { - expect(initThread.paused).toBe(false); - }); + it('should have a firstTime variable', function() { + expect(initThread.firstTime).toBe(true); + }); + + it('should have a paused variable', function() { + expect(initThread.paused).toBe(false); + }); + }); }); - }); });