diff --git a/tests/progressbar.test.js b/tests/progressbar.test.js new file mode 100644 index 00000000..7070667a --- /dev/null +++ b/tests/progressbar.test.js @@ -0,0 +1,151 @@ +const root = '../'; + +beforeEach(function(){ + require(root + 'jspsych.js'); + require(root + 'plugins/jspsych-text.js'); +}); + +describe('automatic progress bar', function(){ + + test('progress bar does not display by default', function(){ + var trial = { + type: 'text', + text: 'foo' + } + + jsPsych.init({ + timeline: [trial] + }); + + expect(document.querySelector('#jspsych-progressbar-container')).toBe(null); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + }); + + test('progress bar displays when show_progress_bar is true', function(){ + var trial = { + type: 'text', + text: 'foo' + } + + jsPsych.init({ + timeline: [trial], + show_progress_bar: true + }); + + expect(document.querySelector('#jspsych-progressbar-container').innerHTML).toMatch('Completion Progress
'); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + }); + + test('progress bar automatically updates by default', function(){ + var trial = { + type: 'text', + text: 'foo' + } + + jsPsych.init({ + timeline: [trial, trial, trial, trial], + show_progress_bar: true + }); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('25%'); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('50%'); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('75%'); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('100%'); + + }); + + test('progress bar does not automatically update when auto_update_progress_bar is false', function(){ + var trial = { + type: 'text', + text: 'foo' + } + + jsPsych.init({ + timeline: [trial, trial, trial, trial], + show_progress_bar: true, + auto_update_progress_bar: false + }); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + }); + + test('setProgressBar() manually', function(){ + var trial = { + type: 'text', + text: 'foo', + on_finish: function(){ + jsPsych.setProgressBar(0.2); + } + } + + var trial_2 = { + type: 'text', + text: 'foo', + on_finish: function(){ + jsPsych.setProgressBar(0.8); + } + } + + jsPsych.init({ + timeline: [trial, trial_2], + show_progress_bar: true, + auto_update_progress_bar: false + }); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe(''); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('20%'); + + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32})); + document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32})); + + expect(document.querySelector('#jspsych-progressbar-inner').style.width).toBe('80%'); + + }); + +});