defineSuite([ 'Scene/SkyBox', 'Core/Resource', 'Scene/SceneMode', 'Specs/createScene' ], function( SkyBox, Resource, SceneMode, createScene) { 'use strict'; var scene; var skyBox; var loadedImage; beforeAll(function() { scene = createScene(); return Resource.fetchImage('./Data/Images/Blue.png').then(function(image) { loadedImage = image; }); }); afterAll(function() { scene.destroyForSpecs(); }); beforeEach(function() { scene.mode = SceneMode.SCENE3D; }); afterEach(function() { skyBox = skyBox && skyBox.destroy(); scene.skyBox = undefined; }); it('draws a sky box from Images', function() { skyBox = new SkyBox({ sources : { positiveX : loadedImage, negativeX : loadedImage, positiveY : loadedImage, negativeY : loadedImage, positiveZ : loadedImage, negativeZ : loadedImage } }); expect(scene).toRender([0, 0, 0, 255]); scene.skyBox = skyBox; expect(scene).toRender([0, 0, 255, 255]); }); it('does not render when show is false', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' }, show : false }); expect(scene).toRender([0, 0, 0, 255]); scene.skyBox = skyBox; expect(scene).toRender([0, 0, 0, 255]); }); it('does not render in 2D', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.mode = SceneMode.SCENE2D; expect(scene).toRender([0, 0, 0, 255]); scene.skyBox = skyBox; expect(scene).toRender([0, 0, 0, 255]); }); it('does not render without a render pass', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.frameState.passes.render = false; scene.skyBox = skyBox; var command = skyBox.update(scene.frameState); expect(command).not.toBeDefined(); }); it('gets constructor options', function() { skyBox = new SkyBox({ sources : { positiveX : 'positiveX.png', negativeX : 'negativeX.png', positiveY : 'positiveY.png', negativeY : 'negativeY.png', positiveZ : 'positiveZ.png', negativeZ : 'negativeZ.png' }, show : false }); expect(skyBox.sources.positiveX).toEqual('positiveX.png'); expect(skyBox.sources.negativeX).toEqual('negativeX.png'); expect(skyBox.sources.positiveY).toEqual('positiveY.png'); expect(skyBox.sources.negativeY).toEqual('negativeY.png'); expect(skyBox.sources.positiveZ).toEqual('positiveZ.png'); expect(skyBox.sources.negativeZ).toEqual('negativeZ.png'); expect(skyBox.show).toEqual(false); }); it('isDestroyed', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); expect(skyBox.isDestroyed()).toEqual(false); skyBox.destroy(); expect(skyBox.isDestroyed()).toEqual(true); skyBox = undefined; }); it('throws when constructed without positiveX', function() { skyBox = new SkyBox({ sources : { negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed without negativeX', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed without positiveY', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed without negativeY', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed without positiveZ', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed without negativeZ', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when positiveX is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : loadedImage, negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when negativeX is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : loadedImage, positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when positiveY is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : loadedImage, negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when negativeY is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : loadedImage, positiveZ : './Data/Images/Blue.png', negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when positiveZ is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : loadedImage, negativeZ : './Data/Images/Blue.png' } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); it('throws when constructed when negativeZ is a different type', function() { skyBox = new SkyBox({ sources : { positiveX : './Data/Images/Blue.png', negativeX : './Data/Images/Blue.png', positiveY : './Data/Images/Blue.png', negativeY : './Data/Images/Blue.png', positiveZ : './Data/Images/Blue.png', negativeZ : loadedImage } }); scene.skyBox = skyBox; expect(function() { return scene.render(); }).toThrowDeveloperError(); }); }, 'WebGL');