2014-03-08 00:46:59 -07:00
/* jasmine specs for Sprite.js go here */
2014-03-10 21:04:56 -06:00
describe ( 'Sprite' , function ( ) {
2014-04-09 01:18:14 -07:00
var sprite ;
2014-03-08 00:46:59 -07:00
beforeEach ( function ( ) {
2014-04-09 01:18:14 -07:00
sprite = Sprite ;
} ) ;
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 ( '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 hide the bubble' , function ( ) {
spriteProto . hideBubble ( ) ;
expect ( $ ( '.bubble-container' ) . css ( 'display' ) ) . toBe ( 'none' ) ;
expect ( spriteProto . talkBubbleOn ) . toBe ( false ) ;
} ) ;
} ) ;
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 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' ) ;
2014-04-10 12:25:43 -07:00
expect (
$ ( '.ask-text-field' ) . is ( ':focus' ) ||
document . activeElement . className . match ( /ask-text-field/ ) !== null
) . toBe ( true ) ;
2014-04-09 01:18:14 -07:00
expect ( spriteProto . askInputOn ) . toBe ( true ) ;
} ) ;
it ( 'should not show the ask input if visible is false' , function ( ) {
spriteProto . visible = false ;
spriteProto . showAsk ( ) ;
expect ( $ ( '.ask-container' ) . css ( 'display' ) ) . toBe ( 'none' ) ;
2014-04-10 12:25:43 -07:00
expect (
$ ( '.ask-text-field' ) . is ( ':focus' ) ||
document . activeElement . className . match ( /ask-text-field/ ) !== null
) . toBe ( false ) ;
2014-04-09 01:18:14 -07:00
} ) ;
} ) ;
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 ( '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' ) ;
} ) ;
} ) ;
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 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 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 ( '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 ( ) ;
} ) ;
2014-03-08 00:46:59 -07:00
} ) ;
} ) ;