You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

388 lines
14 KiB
JavaScript

import { Credit } from "../../Source/Cesium.js";
import { defined } from "../../Source/Cesium.js";
import { CreditDisplay } from "../../Source/Cesium.js";
import absolutize from "../absolutize.js";
describe("Scene/CreditDisplay", function () {
var container;
var creditDisplay;
var imageUrl;
beforeEach(function () {
imageUrl = absolutize("./Data/Images/Green.png");
container = document.createElement("div");
container.id = "credit-container";
document.body.appendChild(container);
});
afterEach(function () {
document.body.removeChild(container);
CreditDisplay.cesiumCredit = undefined;
CreditDisplay._cesiumCreditInitialized = false;
if (defined(creditDisplay)) {
creditDisplay.destroy();
creditDisplay = undefined;
}
});
// For the sake of the tests, we remove the logo
// credit at the beginning of every frame
function beginFrame(creditDisplay) {
creditDisplay.beginFrame();
}
it("credit display throws with no container", function () {
expect(function () {
return new CreditDisplay();
}).toThrowDeveloperError();
});
it("credit display addCredit throws when credit is undefined", function () {
expect(function () {
creditDisplay = new CreditDisplay(container);
creditDisplay.addCredit();
}).toThrowDeveloperError();
});
it("credit display addDefaultCredit throws when credit is undefined", function () {
expect(function () {
creditDisplay = new CreditDisplay(container);
creditDisplay.addDefaultCredit();
}).toThrowDeveloperError();
});
it("credit display removeDefaultCredit throws when credit is undefined", function () {
expect(function () {
creditDisplay = new CreditDisplay(container);
creditDisplay.removeDefaultCredit();
}).toThrowDeveloperError();
});
it("credits have unique ids", function () {
var credit1 = new Credit('<a href="http://cesiumjs.org/">credit1</a>');
var credit2 = new Credit('<a href="http://cesiumjs.org/">credit2</a>');
expect(credit1.id).not.toEqual(credit2.id);
var credit3 = new Credit('<a href="http://cesiumjs.org/">credit1</a>');
expect(credit1.id).toEqual(credit3.id);
});
it("credit clone works", function () {
var credit1 = new Credit('<a href="http://cesiumjs.org/">credit1</a>');
var credit2 = Credit.clone(credit1);
expect(credit1).toEqual(credit2);
var credit3 = Credit.clone(undefined);
expect(credit3).toBeUndefined();
});
it("credit display displays a credit", function () {
creditDisplay = new CreditDisplay(container);
var credit = new Credit(
'<a href="http://cesiumjs.org">CesiumJS.org</a>',
true
);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(1);
var child10 = creditContainer.childNodes[0];
expect(child10.childNodes.length).toEqual(1);
});
it("credit display updates html when credits change", function () {
var credit1 = new Credit("credit1", true);
var credit2 = new Credit("credit2", true);
creditDisplay = new CreditDisplay(container);
// add only credit1 during the frame
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.endFrame();
var innerHTMLWithCredit1 = container.innerHTML;
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0].innerHTML).toEqual("credit1");
// add only credit2 during the frame
beginFrame(creditDisplay);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
var innerHTMLWithCredit2 = container.innerHTML;
expect(innerHTMLWithCredit2).not.toEqual(innerHTMLWithCredit1);
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0].innerHTML).toEqual("credit2");
// add both credit1 and credit2 during the frame
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
var innerHTMLWithCredit1AndCredit2 = container.innerHTML;
expect(innerHTMLWithCredit1AndCredit2).not.toEqual(innerHTMLWithCredit1);
expect(innerHTMLWithCredit1AndCredit2).not.toEqual(innerHTMLWithCredit2);
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0].innerHTML).toEqual("credit1");
expect(creditContainer.childNodes[2].innerHTML).toEqual("credit2");
// add neither credit during the frame
beginFrame(creditDisplay);
creditDisplay.endFrame();
expect(container.innerHTML).not.toEqual(innerHTMLWithCredit1);
expect(container.innerHTML).not.toEqual(innerHTMLWithCredit2);
expect(container.innerHTML).not.toEqual(innerHTMLWithCredit1AndCredit2);
expect(creditContainer.childNodes.length).toEqual(0);
});
it("credit display uses delimeter", function () {
var credit1 = new Credit("credit1", true);
var credit2 = new Credit("credit2", true);
var delimiter = ", ";
creditDisplay = new CreditDisplay(container, ", ");
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0].innerHTML).toEqual("credit1");
expect(creditContainer.childNodes[1].innerHTML).toEqual(delimiter);
expect(creditContainer.childNodes[2].innerHTML).toEqual("credit2");
});
it("credit display manages delimeters correctly for text credits", function () {
var credit1 = new Credit("credit1", true);
var credit2 = new Credit("credit2", true);
var credit3 = new Credit("credit3", true);
var delimiter = ", ";
creditDisplay = new CreditDisplay(container, delimiter);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.addCredit(credit3);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(5);
expect(creditContainer.childNodes[0]).toEqual(credit1.element);
expect(creditContainer.childNodes[1].innerHTML).toEqual(delimiter);
expect(creditContainer.childNodes[2]).toEqual(credit2.element);
expect(creditContainer.childNodes[3].innerHTML).toEqual(delimiter);
expect(creditContainer.childNodes[4]).toEqual(credit3.element);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit2);
creditDisplay.addCredit(credit3);
creditDisplay.endFrame();
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0]).toEqual(credit2.element);
expect(creditContainer.childNodes[1].innerHTML).toEqual(delimiter);
expect(creditContainer.childNodes[2]).toEqual(credit3.element);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0]).toEqual(credit2.element);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit2);
creditDisplay.addCredit(credit3);
creditDisplay.endFrame();
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0]).toEqual(credit2.element);
expect(creditContainer.childNodes[1].innerHTML).toEqual(delimiter);
expect(creditContainer.childNodes[2]).toEqual(credit3.element);
});
it("credit display displays default credit", function () {
var defaultCredit = new Credit("default credit", true);
var credit1 = new Credit("credit1", true);
creditDisplay = new CreditDisplay(container, ", ");
creditDisplay.addDefaultCredit(defaultCredit);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0]).toEqual(defaultCredit.element);
expect(creditContainer.childNodes[1].innerHTML).toEqual(", ");
expect(creditContainer.childNodes[2]).toEqual(credit1.element);
beginFrame(creditDisplay);
creditDisplay.endFrame();
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0]).toEqual(defaultCredit.element);
});
it("credit display displays credits when default is removed", function () {
var defaultCredit = new Credit("default credit", true);
var credit1 = new Credit("credit1", true);
creditDisplay = new CreditDisplay(container, ", ");
creditDisplay.addDefaultCredit(defaultCredit);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(3);
expect(creditContainer.childNodes[0]).toEqual(defaultCredit.element);
expect(creditContainer.childNodes[1].innerHTML).toEqual(", ");
expect(creditContainer.childNodes[2]).toEqual(credit1.element);
creditDisplay.removeDefaultCredit(defaultCredit);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.endFrame();
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0]).toEqual(credit1.element);
});
it("credit display only displays one if two credits are equal", function () {
var credit1 = new Credit("credit1", true);
var credit2 = new Credit("credit1", true);
creditDisplay = new CreditDisplay(container);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
var creditContainer = container.childNodes[1];
expect(creditContainer.childNodes.length).toEqual(1);
expect(creditContainer.childNodes[0].innerHTML).toEqual("credit1");
});
it("displays credits in a lightbox", function () {
var credit1 = new Credit("credit1");
var credit2 = new Credit('<img src="' + imageUrl + '"/>');
creditDisplay = new CreditDisplay(container);
var creditList = creditDisplay._creditList;
creditDisplay.showLightbox();
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.endFrame();
creditDisplay.update();
var innerHTML = creditList.innerHTML;
expect(creditList.childNodes.length).toEqual(1);
expect(creditList.childNodes[0].childNodes[0]).toEqual(credit1.element);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.innerHTML).not.toEqual(innerHTML);
innerHTML = creditList.innerHTML;
expect(creditList.childNodes.length).toEqual(1);
expect(creditList.childNodes[0].childNodes[0]).toEqual(credit2.element);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.innerHTML).not.toEqual(innerHTML);
innerHTML = creditList.innerHTML;
expect(creditList.childNodes.length).toEqual(2);
beginFrame(creditDisplay);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.innerHTML).not.toEqual(innerHTML);
expect(creditList.childNodes.length).toEqual(0);
creditDisplay.hideLightbox();
});
it("renders lightbox credits", function () {
var credit1 = new Credit("credit1");
var credit2 = new Credit('<img src="' + imageUrl + '"/>');
creditDisplay = new CreditDisplay(container);
var creditList = creditDisplay._creditList;
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(2);
creditDisplay.showLightbox();
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(2);
creditDisplay.hideLightbox();
});
it("updates lightbox when a new frames are not rendered", function () {
var credit1 = new Credit("credit1");
var credit2 = new Credit('<img src="' + imageUrl + '"/>');
creditDisplay = new CreditDisplay(container);
var creditList = creditDisplay._creditList;
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(0);
beginFrame(creditDisplay);
creditDisplay.addCredit(credit1);
creditDisplay.addCredit(credit2);
creditDisplay.endFrame();
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(2);
creditDisplay.showLightbox();
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(2);
creditDisplay.hideLightbox();
creditDisplay.update();
expect(creditList.childNodes.length).toEqual(2);
creditDisplay.hideLightbox();
});
it("works if Cesium credit removed", function () {
creditDisplay = new CreditDisplay(container);
var cesiumCredit = CreditDisplay.cesiumCredit;
CreditDisplay.cesiumCredit = undefined;
creditDisplay.beginFrame();
creditDisplay.endFrame();
expect(creditDisplay._cesiumCreditContainer.childNodes.length).toBe(0);
CreditDisplay.cesiumCredit = cesiumCredit;
});
it("each credit display has a unique cesium credit", function () {
creditDisplay = new CreditDisplay(container);
var container2 = document.createElement("div");
var creditDisplay2 = new CreditDisplay(container2);
expect(creditDisplay._currentCesiumCredit).toEqual(
creditDisplay2._currentCesiumCredit
);
expect(creditDisplay._currentCesiumCredit).not.toBe(
creditDisplay2._currentCesiumCredit
);
});
});