diff --git a/openlp/core/display/html/display.js b/openlp/core/display/html/display.js index 7c5649118..81b0a1e3c 100644 --- a/openlp/core/display/html/display.js +++ b/openlp/core/display/html/display.js @@ -205,16 +205,6 @@ function _createStyle(selector, rules) { } } -function _quote(text) { - return '"' + text + '"'; -} - -function _increaseSize(size) { - var number = size.match(/[\d]+/g); - var newNumber = parseInt(number) + 2; - return size.replace(number, newNumber.toString()); -} - /** * An audio player with a play list */ @@ -486,7 +476,7 @@ var Display = { // create styles for the alerts from the settings _createStyle("#alert-background.settings", { backgroundColor: settings["backgroundColor"], - fontFamily: _quote(settings["fontFace"]), + fontFamily: "'" + settings["fontFace"] + "'", fontSize: settings["fontSize"].toString() + "pt", color: settings["fontColor"] }); @@ -534,7 +524,6 @@ var Display = { */ addAlertToQueue: function (text, settings) { Display._alerts.push({text: text, settings: settings}); - return null; }, /** * The alertTransitionEndEvent called after a transition has ended @@ -591,6 +580,10 @@ var Display = { Display._alertState = AlertState.DisplayingFromQueue; Display.showAlert(alertObject.text, alertObject.settings); } + else { + // For the tests + return null; + } }, /** * Add a slide. If the slide exists but the HTML is different, update the slide. diff --git a/tests/js/test_display.js b/tests/js/test_display.js index 3e0a8ceed..054dd3916 100644 --- a/tests/js/test_display.js +++ b/tests/js/test_display.js @@ -157,24 +157,24 @@ describe("The Display object", function () { }); describe("Display.alert", function () { - var alertBackground, alertText, settings; + var alertContainer, alertBackground, alertText, settings, text; beforeEach(function () { document.body.innerHTML = ""; - alertContainer = document.createElement("div"); - alertContainer.setAttribute("class", "alert-container"); - document.body.appendChild(alertContainer); - alertBackground = document.createElement("div"); - alertBackground.setAttribute("id", "alert-background"); - alertContainer.appendChild(alertBackground); - alertText = document.createElement("span"); - alertText.setAttribute("id","alert-text"); - alertBackground.appendChild(alertText); + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); settings = { - "location": 1, "fontFace": "Segoe UI, Tahoma, Geneva, Verdana, sans-serif", - "fontSize": 40, "fontColor": "#ffffff", "backgroundColor": "#660000", - "timeout": 5, "repeat": 1, "scroll": true + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true }; + text = "Display.alert"; }); it("should return null if called without any text", function () { @@ -184,102 +184,140 @@ describe("Display.alert", function () { it("should set the correct alert text", function () { spyOn(Display, "showAlert"); - Display.alert("OPEN-LP-3.0 Alert Test", settings); - + Display.alert(text, settings); + expect(Display.showAlert).toHaveBeenCalled(); }); it("should call the addAlertToQueue method if an alert is displaying", function () { - var text = "Testing alert queue"; - spyOn(Display, "addAlertToQueue"); + spyOn(Display, "addAlertToQueue"); Display._alerts = []; Display._alertState = AlertState.Displaying; - + Display.alert(text, settings); - + expect(Display.addAlertToQueue).toHaveBeenCalledWith(text, settings); - expect(Display._alerts[0]).toBe({"alert": text, "settings": settings}); }); }); -describe("Display.showAlertBackground", function () { +describe("Display.showAlert", function () { + var alertContainer, alertBackground, alertText, settings; - var alertBackground, bg_color; beforeEach(function () { - document.body.innerHTML = ""; - bg_color = "rgb(102, 0, 0)"; - alertBackground = document.createElement("div"); - alertBackground.setAttribute("id", "alert-background"); - document.body.appendChild(alertBackground); - }); - - it("should set the correct transition state", function () { - Display.showAlertBackground(bg_color); - expect(Display._transitionState).toEqual(TransitionState.EntranceTransition); - }); - - it("should apply the styles correctly when showAlertBackground is called", function () { - Display.showAlertBackground(bg_color); - - expect(alertBackground.style.backgroundColor).toEqual(bg_color); - expect(alertBackground.className).toEqual("bg-default show-bg"); - }); -}); - -describe("Display.hideAlertBackground", function () { - var alertBackground; - beforeEach( function() { document.body.innerHTML = ""; - alertBackground = document.createElement("div"); - alertBackground.setAttribute("id", "alert-background"); - alertBackground.setAttribute("class", "bg-default show-bg"); - document.body.appendChild(alertBackground); + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); + settings = { + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true + }; }); - - it("reset the background to default once an alert has been displayed", function() { - Display.hideAlertBackground(); - - expect(Display._transitionState).toEqual(TransitionState.ExitTransition); - expect(Display._alertState).toEqual(AlertState.NotDisplaying); - expect(alertBackground.className).toEqual("bg-default"); + + it("should create a stylesheet for the settings", function () { + spyOn(window, "_createStyle"); + Display.showAlert("Test Display.showAlert - stylesheet", settings); + + expect(_createStyle).toHaveBeenCalledWith("#alert-background.settings", { + backgroundColor: settings["backgroundColor"], + fontFamily: "'" + settings["fontFace"] + "'", + fontSize: settings["fontSize"] + 'pt', + color: settings["fontColor"] + }); + }); + + it("should set the alert state to AlertState.Displaying", function () { + Display.showAlert("Test Display.showAlert - state", settings); + + expect(Display._alertState).toEqual(AlertState.Displaying); + }); + + it("should remove the 'hide' classes and add the 'show' classes", function () { + Display.showAlert("Test Display.showAlert - classes", settings); + + expect($("#alert-background")[0].classList.contains("hide")).toEqual(false); + expect($("#alert-background")[0].classList.contains("show")).toEqual(true); + //expect($("#alert-text")[0].classList.contains("hide")).toEqual(false); + //expect($("#alert-text")[0].classList.contains("show")).toEqual(true); }); }); -describe("Display.setAlertText", function() { - var alertText; - beforeEach( function() { +describe("Display.hideAlert", function () { + var alertContainer, alertBackground, alertText, settings; + + beforeEach(function () { document.body.innerHTML = ""; - alertText = document.createElement("span"); - alertText.setAttribute("id", "alert"); - document.body.appendChild(alertText); + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); + settings = { + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true + }; }); - it("should set the alert text correctly", function () { - Display.setAlertText("OpenLP Alert Text", "#ffffff", "Tahoma", 40); - - expect(alertText.textContent).toEqual("OpenLP Alert Text"); - expect(alertText.style.color).toEqual("rgb(255, 255, 255)"); - expect(alertText.style.fontFamily).toEqual("Tahoma"); - expect(alertText.style.fontSize).toEqual("40pt"); + + it("should set the alert state to AlertState.NotDisplaying", function () { + Display.showAlert("test", settings); + + Display.hideAlert(); + + expect(Display._alertState).toEqual(AlertState.NotDisplaying); + }); + + it("should hide the alert divs when called", function() { + Display.showAlert("test", settings); + + Display.hideAlert(); + + expect(alertBackground.classList.contains("hide")).toEqual(true); + expect(alertBackground.classList.contains("show")).toEqual(false); + expect(alertText.classList.contains("hide")).toEqual(true); + expect(alertText.classList.contains("show")).toEqual(false); }); }); describe("Display.setAlertLocation", function() { - beforeEach(function() { - document.body.innerHTML = ""; - alertContainer = document.createElement("div"); - alertContainer.setAttribute("class", "alert-container"); - document.body.appendChild(alertContainer); + var alertContainer, alertBackground, alertText, settings; + + beforeEach(function () { + document.body.innerHTML = ""; + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); + settings = { + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true + }; }); - it("should set the correct class when location is top of the page", function () { + + it("should set the correct class when location is top of the page", function () { Display.setAlertLocation(0); expect(alertContainer.className).toEqual("alert-container top"); }); - it("should set the correct class when location is middle of the page", function () { + it("should set the correct class when location is middle of the page", function () { Display.setAlertLocation(1); - - expect(alertContainer.className).toEqual("alert-container middle"); + + expect(alertContainer.className).toEqual("alert-container middle"); }); it("should set the correct class when location is bottom of the page", function () { @@ -289,99 +327,57 @@ describe("Display.setAlertLocation", function() { }); }); -describe("Display.showAlertText", function () { - var alertText, settings; - beforeEach(function () { - document.body.innerHTML = ""; - alertText = document.createElement("span"); - alertText.setAttribute("id", "alert"); - document.body.appendChild(alertText); - settings = { - "location": 2, "fontFace": "Tahoma", "fontSize": 40, - "fontColor": "rgb(255, 255, 255)", "backgroundColor": "rgb(102, 0, 0)", - "timeout": 0.01, "repeat": 1, "scroll": true - }; - Display._transitionState = TransitionState.EntranceTransition; - }); +describe("Display.addAlertToQueue", function () { + var alertContainer, alertBackground, alertText, settings; - it("should set the correct animation when text is set to scroll)", function () { - Display.showAlertText(settings); - - expect(alertText.style.animation).toEqual("alert-scrolling-text " + settings.timeout + "s linear 0.6s 1 normal"); - expect(Display._animationState).toEqual(AnimationState.ScrollingText); - }); - - it("should set the correct styles when text is not scrolling", function (done) { - settings.scroll = false; - Display._transitionState = TransitionState.EntranceTransition; - spyOn(Display, "hideAlertText"); - Display.showAlertText(settings); - - // expect(alertText.style.animation).toEqual(""); - expect(Display._animationState).toEqual(AnimationState.NonScrollingText); - expect(alertText.classList.contains('show-text')).toBe(true); - setTimeout (function () { - expect(Display._animationState).toEqual(AnimationState.NoAnimation); - expect(Display.hideAlertText).toHaveBeenCalled(); - done(); - }, settings.timeout * 1000); - }); -}); - -describe("Display.hideAlertText", function() { - var alertBackground, alertText, keyframeStyle; beforeEach(function () { document.body.innerHTML = ""; - alertBackground = document.createElement("div"); - alertBackground.setAttribute("id", "alert-background"); - alertBackground.setAttribute("class", "bg-default show-bg"); - document.body.appendChild(alertBackground); - alertText = document.createElement("span"); - alertText.setAttribute("id", "alert"); - alertText.style.opacity = 1; - alertText.style.animation = "alert-scrolling-text 5s linear 0s 1 bg-default"; - alertBackground.appendChild(alertText); - Display._animationState = AnimationState.ScrollingText; + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); + settings = { + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true + }; }); - it("should reset the text styles and animation state after the text has scrolled", function() { - spyOn(Display, "hideAlertBackground"); - Display.hideAlertText(); - - expect(alertText.style.animation).toEqual(""); - expect(Display._animationState).toEqual(AnimationState.NoAnimation); - }); - - it("should call the hideAlertBackground method", function() { - spyOn(Display, "hideAlertBackground"); - Display.hideAlertText(); - - - expect(Display.hideAlertBackground).toHaveBeenCalled(); - }); -}); - -describe("Display.addAlertToQueue", function () { it("should add an alert to the queue if one is displaying already", function() { Display._alerts = []; Display._alertState = AlertState.Displaying; - settings = '{ \ - "location": 1, "fontFace": "Segoe UI, Tahoma, Geneva, Verdana, sans-serif", \ - "fontSize": 40, "fontColor": "#ffffff", "backgroundColor": "#660000", \ - "timeout": 5, "repeat": 1, "scrolling_text": true \ - }'; var alertObject = {text: "Testing alert queue", settings: settings}; - var queuedAlert = JSON.stringify(alertObject); - + Display.addAlertToQueue("Testing alert queue", settings); expect(Display._alerts.length).toEqual(1); - expect(Display._alerts[0]).toEqual(queuedAlert); + expect(Display._alerts[0]).toEqual(alertObject); }); }); describe("Display.showNextAlert", function () { - Display.showNextAlert(); + var alertContainer, alertBackground, alertText, settings; + + beforeEach(function () { + document.body.innerHTML = ""; + alertContainer = _createDiv({"class": "alert-container"}); + alertBackground = _createDiv({"id": "alert-background", "class": "hide"}); + alertText = _createDiv({"id": "alert-text", "class": "hide"}); + settings = { + "location": 1, + "fontFace": "sans-serif", + "fontSize": 40, + "fontColor": "#ffffff", + "backgroundColor": "#660000", + "timeout": 5, + "repeat": 1, + "scroll": true + }; + }); it("should return null if there are no alerts in the queue", function () { Display._alerts = []; @@ -390,65 +386,57 @@ describe("Display.showNextAlert", function () { expect(Display.showNextAlert()).toBeNull(); }); - it("should call the alert function correctly if there is an alert in the queue", function () { - var settings = { - "location": 2, "fontFace": "Tahoma", "fontSize": 40, - "fontColor": "rgb(255, 255, 255)", "backgroundColor": "rgb(102, 0, 0)", - "timeout": 5, "repeat": 1, "scrolling_text": true - }; - var alertObject = {text: "Queued Alert", settings: settings}; - Display._alerts.push(JSON.stringify(alertObject)); - spyOn(Display, "alert"); + it("should call the alert function correctly if there is an alert in the queue", function () { + Display._alerts.push({text: "Queued Alert", settings: settings}); + spyOn(Display, "showAlert"); Display.showNextAlert(); - - expect(Display.alert).toHaveBeenCalled(); - expect(Display.alert).toHaveBeenCalledWith("Queued Alert",alertObject.settings); + + expect(Display.showAlert).toHaveBeenCalled(); + expect(Display.showAlert).toHaveBeenCalledWith("Queued Alert", settings); }); }); describe("Display.alertTransitionEndEvent", function() { - beforeEach( function() { - + var e = { stopPropagation: function () { } }; + + it("should call event.stopPropagation()", function () { + spyOn(e, "stopPropagation"); + + Display.alertTransitionEndEvent(e); + + expect(e.stopPropagation).toHaveBeenCalled(); }); - it("should set the correct state and call showAlertText after the alert entrance transition", function() { - var fake_settings = {test: "fake_settings"}; - var e = jasmine.createSpyObj('e', ['stopPropagation']); - Display._alertSettings = fake_settings; - spyOn(Display, "showAlertText"); - Display._transitionState = TransitionState.EntranceTransition; - Display.alertTransitionEndEvent(); + it("should set the correct state after EntranceTransition", function() { + Display._transitionState = TransitionState.EntranceTransition; + + Display.alertTransitionEndEvent(e); expect(Display._transitionState).toEqual(TransitionState.NoTransition); - expect(Display.showAlertText).toHaveBeenCalledWith(fake_settings); }); - - it("should set the correct state after the alert exit transition", function() { - spyOn(Display, "showNextAlert"); - Display._transitionState = TransitionState.ExitTransition; - Display.alertTransitionEndEvent(); - - expect(Display._transitionState).toEqual(TransitionState.NoTransition); + + it("should set the correct state after ExitTransition, call hideAlert() and showNextAlert()", function() { + spyOn(Display, "hideAlert"); + spyOn(Display, "showNextAlert"); + Display._transitionState = TransitionState.ExitTransition; + + Display.alertTransitionEndEvent(e); + + expect(Display._transitionState).toEqual(TransitionState.NoTransition); + expect(Display.hideAlert).toHaveBeenCalled(); + expect(Display.showNextAlert).toHaveBeenCalled(); }); }); describe("Display.alertAnimationEndEvent", function () { - it("should call the hideAlertText method", function() { - spyOn(Display, "hideAlertText"); + var e = { stopPropagation: function () { } }; - Display.alertAnimationEndEvent(); + it("should call the hideAlert method", function() { + spyOn(Display, "hideAlert"); - expect(Display.hideAlertText).toHaveBeenCalled(); - }); -}); + Display.alertAnimationEndEvent(e); -describe("Display.clearAlertSettings", function () { - it("should clear the alert settings once an alert has been displayed", function () { - var fake_settings = {test: "fake_settings"}; - Display._alertSettings = fake_settings; - Display.clearAlertSettings(); - - expect(Display._alertSettings).toEqual({}); + expect(Display.hideAlert).toHaveBeenCalled(); }); }); @@ -490,7 +478,7 @@ describe("Display.addTextSlide", function () { it("should update an existing slide", function () { var verse = "v1", - text = "Amazing grace, how sweet the sound\nThat saved a wretch like me", + text = "Amazing grace, how sweet the sound\nThat saved a wretch like me", footer = "Public Domain"; Display.addTextSlide(verse, "Amazing grace,\nhow sweet the sound", footer, false); spyOn(Display, "reinit"); @@ -558,7 +546,7 @@ describe("Display.setTextSlides", function () { 'font_main_outline_color': 'red' }; spyOn(Display, "reinit"); - spyOn(Reveal, "slide"); + spyOn(Reveal, "slide"); Display.setTextSlides(slides); Display.setTheme(theme);