Files
cocos-engine/tests/core/require-component.test.ts
Santy-Wang 75a22d4b98 support require component array (#9366)
* support require component array

* fix lint

* refine
2021-09-23 14:00:55 +08:00

93 lines
2.9 KiB
TypeScript

import { director, Node, Scene } from '../../cocos/core';
import { Component } from '../../cocos/core/components/component';
import { ccclass, requireComponent } from '../../cocos/core/data/decorators';
describe('require component', () => {
@ccclass('CompA')
class CompA extends Component {}
@ccclass('CompB')
@requireComponent(CompA)
class CompB extends Component {}
@ccclass('CompC')
@requireComponent(CompB)
class CompC extends Component {}
@ccclass('CompD')
@requireComponent(CompB)
class CompD extends Component {}
@ccclass('CompE')
class CompE extends Component {}
@ccclass('CompF')
@requireComponent([CompE, CompB])
class CompF extends Component {}
@ccclass('CompG')
@requireComponent([])
class CompG extends Component {}
@ccclass('CompH')
@requireComponent(null)
class CompH extends Component {}
@ccclass('CompI')
@requireComponent([CompA, null, undefined])
class CompI extends Component {}
const scene = new Scene('');
director.runSceneImmediate(scene);
test('require component', () => {
const node = new Node();
scene.addChild(node);
node.addComponent(CompB);
expect(node.getComponents(CompA).length).toBe(1);
const node1 = new Node();
scene.addChild(node1);
node1.addComponent(CompC);
expect(node1.getComponents(CompB).length).toBe(1);
expect(node1.getComponents(CompA).length).toBe(1);
const node2 = new Node();
scene.addChild(node2);
node2.addComponent(CompC);
node2.addComponent(CompD);
expect(node2.getComponents(CompB).length).toBe(1);
expect(node2.getComponents(CompA).length).toBe(1);
const node3 = new Node();
scene.addChild(node3);
node3.addComponent(CompH);
expect(node3.getComponents(Component).length).toBe(1);
});
test('multi require component', () => {
const node = new Node();
scene.addChild(node);
node.addComponent(CompF);
expect(node.getComponents(CompE).length).toBe(1);
expect(node.getComponents(CompB).length).toBe(1);
expect(node.getComponents(CompA).length).toBe(1);
const node1 = new Node();
scene.addChild(node1);
node1.addComponent(CompG);
expect(node1.getComponents(Component).length).toBe(1);
const node2 = new Node();
scene.addChild(node2);
node2.addComponent(CompI);
expect(node2.getComponents(Component).length).toBe(2);
});
test('dependant component', () => {
const node = new Node();
scene.addChild(node);
node.addComponent(CompF);
node.addComponent(CompC);
// @ts-expect-error
expect(node._getDependComponent(node.getComponent(CompB)).length).toBe(2);
// @ts-expect-error
expect(node._getDependComponent(node.getComponent(CompE)).length).toBe(1);
});
});