From 68dd78e9e0f7923a9225831a909166eaed0f37c5 Mon Sep 17 00:00:00 2001 From: Valera Rozuvan Date: Tue, 15 Apr 2014 13:59:48 +0300 Subject: [PATCH] Fixing start-time and end-time related Jasmine tests. BLD-1013 --- .jshintrc | 27 +- common/lib/xmodule/xmodule/js/spec/helper.js | 20 +- .../js/spec/video/video_control_spec.js | 255 ++++++++++++------ 3 files changed, 213 insertions(+), 89 deletions(-) diff --git a/.jshintrc b/.jshintrc index 350d8d92d9..be4e6a949d 100644 --- a/.jshintrc +++ b/.jshintrc @@ -108,5 +108,30 @@ // // The parameter "predef" should remain empty for this configuration file // to remain as general as possible. - "predef": [] + "predef": [ + // jQuery library. + "jQuery", "$", + + // Underscore.js library. + "_", + + // Jasmine library. + "jasmine", + "describe", "xdescribe", + "it", "xit", + "spyOn", + "beforeEach", + "afterEach", + "expect", + "waitsFor", + "runs", + + // jQuery-Jasmine library. + "loadFixtures", + "appendLoadFixtures", + "readFixtures", + "setFixtures", + "appendSetFixtures", + "spyOnEvent" + ] } diff --git a/common/lib/xmodule/xmodule/js/spec/helper.js b/common/lib/xmodule/xmodule/js/spec/helper.js index 4900fdf8b2..f188c9c639 100644 --- a/common/lib/xmodule/xmodule/js/spec/helper.js +++ b/common/lib/xmodule/xmodule/js/spec/helper.js @@ -1,4 +1,6 @@ -(function ($, undefined) { +(function () { + 'use strict'; + var stubbedYT = { Player: function () { var Player = jasmine.createSpyObj( @@ -150,11 +152,11 @@ } } else if (settings.url.match(/transcript\/translation\/.+$/)) { return settings.success(jasmine.stubbedCaption); - } else if (settings.url == '/transcript/available_translations') { + } else if (settings.url === '/transcript/available_translations') { return settings.success(['uk', 'de']); } else if (settings.url.match(/.+\/problem_get$/)) { return settings.success({ - html: readFixtures('problem_content.html') + html: window.readFixtures('problem_content.html') }); } else if ( settings.url === '/calculate' || @@ -163,13 +165,15 @@ settings.url.match(/.+\/problem_(check|reset|show|save)$/) ) { // Do nothing. - } else if (settings.url == '/save_user_state') { + return; + } else if (settings.url === '/save_user_state') { return {success: true}; } else if (settings.url === 'http://www.youtube.com/iframe_api') { // Stub YouTube API. window.YT = stubbedYT; - // Call the callback that must be called when YouTube API is loaded. By specification. + // Call the callback that must be called when YouTube API is + // loaded. By specification. window.onYouTubeIframeAPIReady(); return {success: true}; @@ -205,7 +209,7 @@ } }); - return this.addMatchers(imagediff.jasmine); + return this.addMatchers(window.imagediff.jasmine); }); // Stub jQuery.cookie module. @@ -244,7 +248,7 @@ } jasmine.stubRequests(); - state = new Video('#example'); + state = new window.Video('#example'); state.resizer = (function () { var methods = [ @@ -279,4 +283,4 @@ // "video.html" contains HTML template for a YouTube video. return jasmine.initializePlayer('video.html', params); }; -}).call(this, window.jQuery); +}).call(this); diff --git a/common/lib/xmodule/xmodule/js/spec/video/video_control_spec.js b/common/lib/xmodule/xmodule/js/spec/video/video_control_spec.js index 458eea166a..e78ef752f4 100644 --- a/common/lib/xmodule/xmodule/js/spec/video/video_control_spec.js +++ b/common/lib/xmodule/xmodule/js/spec/video/video_control_spec.js @@ -1,4 +1,6 @@ -(function (undefined) { +(function (WAIT_TIMEOUT) { + 'use strict'; + describe('VideoControl', function () { var state, oldOTBD; @@ -105,14 +107,18 @@ }); describe('constructor with start-time', function () { - it('saved position is 0, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is 0, timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ start: 10, savedVideoPosition: 0 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -124,23 +130,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); }); - it('saved position is after start-time, timer slider and VCR set to saved position', function () { - var duration; + it( + 'saved position is after start-time, ' + + 'timer slider and VCR set to saved position', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ start: 10, savedVideoPosition: 15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -152,23 +164,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:15 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:15 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(15); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(15); state.storage.clear(); }); }); - it('saved position is negative, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is negative, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ start: 10, savedVideoPosition: -15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -180,23 +198,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); }); - it('saved position is not a number, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is not a number, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ start: 10, savedVideoPosition: 'a' }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -208,23 +232,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); }); - it('saved position is greater than end-time, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is greater than end-time, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ start: 10, savedVideoPosition: 10000 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -236,10 +266,11 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); @@ -247,14 +278,18 @@ }); describe('constructor with end-time', function () { - it('saved position is 0, timer slider and VCR set to 0:00', function () { - var duration; + it( + 'saved position is 0, timer slider and VCR set to 0:00', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ end: 20, savedVideoPosition: 0 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -266,23 +301,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:00 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:00 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(0); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(0); state.storage.clear(); }); }); - it('saved position is after start-time, timer slider and VCR set to saved position', function () { - var duration; + it( + 'saved position is after start-time, ' + + 'timer slider and VCR set to saved position', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ end: 20, savedVideoPosition: 15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -294,24 +335,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:15 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:15 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(15); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(15); state.storage.clear(); }); }); // TODO: Fix! - it('saved position is negative, timer slider and VCR set to 0:00', function () { - var duration, c1 = 0; + it( + 'saved position is negative, timer slider and VCR set to 0:00', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ end: 20, savedVideoPosition: -15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -323,23 +369,29 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:00 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:00 / 1:00'); + + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(0); - expect(true).toBe(true); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(0); state.storage.clear(); }); }); - it('saved position is not a number, timer slider and VCR set to 0:00', function () { - var duration; + it( + 'saved position is not a number, ' + + 'timer slider and VCR set to 0:00', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ end: 20, savedVideoPosition: 'a' }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -351,23 +403,30 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:00 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:00 / 1:00'); + + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(0); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(0); state.storage.clear(); }); }); // TODO: Fix! - it('saved position is greater than end-time, timer slider and VCR set to 0:00', function () { - var duration; + it( + 'saved position is greater than end-time, ' + + 'timer slider and VCR set to 0:00', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ end: 20, savedVideoPosition: 10000 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -379,18 +438,23 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:00 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:00 / 1:00'); + + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(0); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(0); state.storage.clear(); }); }); }); describe('constructor with start-time and end-time', function () { - it('saved position is 0, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is 0, timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ @@ -398,6 +462,7 @@ end: 20, savedVideoPosition: 0 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -409,16 +474,22 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); + + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); state.storage.clear(); }); }); - it('saved position is after start-time, timer slider and VCR set to saved position', function () { - var duration; + it( + 'saved position is after start-time, ' + + 'timer slider and VCR set to saved position', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ @@ -426,6 +497,7 @@ end: 20, savedVideoPosition: 15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -437,17 +509,22 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:15 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:15 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(15); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(15); state.storage.clear(); }); }); - it('saved position is negative, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is negative, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ @@ -455,6 +532,7 @@ end: 20, savedVideoPosition: -15 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -466,17 +544,22 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); }); - it('saved position is not a number, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is not a number, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ @@ -484,6 +567,7 @@ end: 20, savedVideoPosition: 'a' }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -495,17 +579,22 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); }); - it('saved position is greater than end-time, timer slider and VCR set to start-time', function () { - var duration; + it( + 'saved position is greater than end-time, ' + + 'timer slider and VCR set to start-time', + function () + { + var duration, sliderEl, expectedValue; runs(function () { state = jasmine.initializePlayer({ @@ -513,6 +602,7 @@ end: 20, savedVideoPosition: 10000 }); + sliderEl = state.videoProgressSlider.slider; spyOn(state.videoPlayer, 'duration').andReturn(60); }); @@ -524,10 +614,11 @@ }, 'duration is set', WAIT_TIMEOUT); runs(function () { - expect($('.video-controls').find('.vidtime')) - .toHaveText('0:10 / 1:00'); + expectedValue = $('.video-controls').find('.vidtime'); + expect(expectedValue).toHaveText('0:10 / 1:00'); - expect(state.videoProgressSlider.slider.slider('option', 'value')).toBe(10); + expectedValue = sliderEl.slider('option', 'value'); + expect(expectedValue).toBe(10); state.storage.clear(); }); @@ -589,7 +680,9 @@ beforeEach(function () { $('.video_control').addClass('play'); spyOnEvent(state.videoControl, 'pause'); - state.videoControl.togglePlayback(jQuery.Event('click')); + state.videoControl.togglePlayback( + $.Event('click') + ); }); it('does not trigger the pause event', function () { @@ -602,7 +695,9 @@ beforeEach(function () { $('.video_control').addClass('pause'); spyOnEvent(state.videoControl, 'play'); - state.videoControl.togglePlayback(jQuery.Event('click')); + state.videoControl.togglePlayback( + $.Event('click') + ); }); it('does not trigger the play event', function () { @@ -749,4 +844,4 @@ expect(controls).not.toHaveClass('is-hidden'); }); }); -}).call(this); +}).call(this, window.WAIT_TIMEOUT);