mirror of
https://github.com/cocos/cocos-engine.git
synced 2026-09-07 00:02:53 +08:00
93 lines
2.9 KiB
TypeScript
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);
|
|
});
|
|
}); |