Skip to content

Commit c555326

Browse files
committed
use vitest
1 parent 2dec6da commit c555326

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import {
2+
ChangeDetectionStrategy,
3+
Component,
4+
CUSTOM_ELEMENTS_SCHEMA,
5+
ElementRef,
6+
signal,
7+
viewChild,
8+
} from '@angular/core';
9+
import { injectBeforeRender } from 'angular-three';
10+
import { BoxGeometry, Mesh, MeshBasicMaterial, SphereGeometry } from 'three';
11+
import { NgtTestBed } from './test-bed';
12+
13+
describe('test canvas', () => {
14+
@Component({
15+
selector: 'app-sphere',
16+
standalone: true,
17+
template: `
18+
<ngt-mesh>
19+
<ngt-sphere-geometry />
20+
<ngt-mesh-basic-material color="#ff0000" />
21+
</ngt-mesh>
22+
`,
23+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
24+
})
25+
class Sphere {}
26+
27+
@Component({
28+
standalone: true,
29+
template: `
30+
<ngt-mesh
31+
#mesh
32+
[scale]="clicked() ? 1.5 : 1"
33+
(click)="clicked.set(!clicked())"
34+
(pointerover)="hovered.set(true)"
35+
(pointerout)="hovered.set(false)"
36+
>
37+
<ngt-box-geometry />
38+
<ngt-mesh-basic-material [color]="hovered() ? 'hotpink' : 'orange'" />
39+
</ngt-mesh>
40+
41+
<app-sphere />
42+
`,
43+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
44+
changeDetection: ChangeDetectionStrategy.OnPush,
45+
imports: [Sphere],
46+
})
47+
class SceneGraph {
48+
hovered = signal(false);
49+
clicked = signal(false);
50+
51+
meshRef = viewChild.required<ElementRef<Mesh>>('mesh');
52+
53+
constructor() {
54+
injectBeforeRender(() => {
55+
const mesh = this.meshRef().nativeElement;
56+
mesh.rotation.x += 0.01;
57+
});
58+
}
59+
}
60+
61+
it('should test', async () => {
62+
const { scene, fireEvent, advance } = NgtTestBed.create(SceneGraph);
63+
fireEvent.setAutoDetectChanges(true);
64+
65+
expect(scene.children.length).toEqual(2);
66+
67+
const cube = scene.children[0] as Mesh<BoxGeometry, MeshBasicMaterial>;
68+
const material = cube.material;
69+
expect(material.color.getHexString()).toEqual('ffa500');
70+
71+
await fireEvent(cube, 'pointerover');
72+
expect(material.color.getHexString()).toEqual('ff69b4');
73+
74+
await fireEvent(cube, 'pointerout');
75+
expect(material.color.getHexString()).toEqual('ffa500');
76+
77+
await fireEvent(cube, 'click');
78+
expect(cube.scale.toArray()).toEqual([1.5, 1.5, 1.5]);
79+
80+
await fireEvent(cube, 'click');
81+
expect(cube.scale.toArray()).toEqual([1, 1, 1]);
82+
83+
expect(cube.rotation.x).toEqual(0);
84+
await advance(1);
85+
86+
expect(cube.rotation.x).toEqual(0.01);
87+
88+
const sphere = scene.children[1] as Mesh<SphereGeometry, MeshBasicMaterial>;
89+
expect(sphere.geometry).toBeInstanceOf(SphereGeometry);
90+
expect(sphere.material.color.getHexString()).toEqual('ff0000');
91+
});
92+
});

0 commit comments

Comments
 (0)