UNPKG

@lightningtv/renderer

Version:
204 lines (180 loc) 5.49 kB
/* * If not stated otherwise in this file or this component's LICENSE file the * following copyright and licenses apply: * * Copyright 2023 Comcast Cable Communications Management, LLC. * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { describe, expect, it, vi } from 'vitest'; import { CoreNode, type CoreNodeProps, UpdateType } from './CoreNode.js'; import { Stage } from './Stage.js'; import { mock } from 'vitest-mock-extended'; import { type TextureOptions } from './CoreTextureManager.js'; import { createBound } from './lib/utils.js'; import { ImageTexture } from './textures/ImageTexture.js'; describe('set color()', () => { const defaultProps: CoreNodeProps = { alpha: 0, autosize: false, boundsMargin: null, clipping: false, color: 0, colorBl: 0, colorBottom: 0, colorBr: 0, colorLeft: 0, colorRight: 0, colorTl: 0, colorTop: 0, colorTr: 0, height: 0, mount: 0, mountX: 0, mountY: 0, parent: null, pivot: 0, pivotX: 0, pivotY: 0, rotation: 0, rtt: false, scale: 0, scaleX: 0, scaleY: 0, shader: null, src: '', texture: null, textureOptions: {} as TextureOptions, width: 0, x: 0, y: 0, zIndex: 0, zIndexLocked: 0, preventCleanup: false, strictBounds: false, }; const clippingRect = { x: 0, y: 0, width: 200, height: 200, valid: false, }; const stage = mock<Stage>({ strictBound: createBound(0, 0, 200, 200), preloadBound: createBound(0, 0, 200, 200), defaultTexture: { state: 'loaded', }, }); describe('set color()', () => { it('should set all color subcomponents.', () => { const node = new CoreNode(stage, defaultProps); node.colorBl = 0x99aabbff; node.colorBr = 0xaabbccff; node.colorTl = 0xbbcceeff; node.colorTr = 0xcceeffff; node.color = 0xffffffff; node.color = 0xffffffff; expect(node.color).toBe(0xffffffff); expect(node.colorBl).toBe(0xffffffff); expect(node.colorBr).toBe(0xffffffff); expect(node.colorTl).toBe(0xffffffff); expect(node.colorTr).toBe(0xffffffff); expect(node.colorLeft).toBe(0xffffffff); expect(node.colorRight).toBe(0xffffffff); expect(node.colorTop).toBe(0xffffffff); expect(node.colorBottom).toBe(0xffffffff); }); it('should set update type.', () => { const node = new CoreNode(stage, defaultProps); node.updateType = 0; node.color = 0xffffffff; node.color = 0xffffffff; expect(node.updateType).toBe(UpdateType.PremultipliedColors); }); }); describe('isRenderable checks', () => { it('should return false if node is not renderable', () => { const node = new CoreNode(stage, defaultProps); expect(node.isRenderable).toBe(false); }); it('visible node that is a color texture', () => { const node = new CoreNode(stage, defaultProps); node.alpha = 1; node.x = 0; node.y = 0; node.width = 100; node.height = 100; node.color = 0xffffffff; node.update(0, clippingRect); expect(node.isRenderable).toBe(true); }); it('visible node that is a texture', () => { const node = new CoreNode(stage, defaultProps); node.alpha = 1; node.x = 0; node.y = 0; node.width = 100; node.height = 100; node.texture = mock<ImageTexture>({ state: 'initial', }); node.update(0, clippingRect); expect(node.isRenderable).toBe(false); node.texture.state = 'loaded'; node.setUpdateType(UpdateType.IsRenderable); node.update(1, clippingRect); expect(node.isRenderable).toBe(true); }); it('a node with a texture with alpha 0 should not be renderable', () => { const node = new CoreNode(stage, defaultProps); node.alpha = 0; node.x = 0; node.y = 0; node.width = 100; node.height = 100; node.texture = mock<ImageTexture>({ state: 'loaded', }); node.update(0, clippingRect); expect(node.isRenderable).toBe(false); }); it('a node with a texture that is OutOfBounds should not be renderable', () => { const node = new CoreNode(stage, defaultProps); node.alpha = 1; node.x = 300; node.y = 300; node.width = 100; node.height = 100; node.texture = mock<ImageTexture>({ state: 'loaded', }); node.update(0, clippingRect); expect(node.isRenderable).toBe(false); }); it('a node with a freed texture should not be renderable', () => { const node = new CoreNode(stage, defaultProps); node.alpha = 1; node.x = 0; node.y = 0; node.width = 100; node.height = 100; node.texture = mock<ImageTexture>({ state: 'freed', }); node.update(0, clippingRect); expect(node.isRenderable).toBe(false); }); }); });