DSDSWeb/static/js/Cesium-1.53/Specs/Scene/CreditDisplaySpec.js

387 lines
15 KiB
JavaScript

defineSuite([
'Scene/CreditDisplay',
'Core/Credit',
'Core/defined',
'Specs/absolutize'
], function(
CreditDisplay,
Credit,
defined,
absolutize) {
'use strict';
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);
});
});