import {Vector2, createSignal, range} from '@revideo/core';
import {describe, expect, it} from 'vitest';
import {Circle} from '../Circle';
import {Node} from '../Node';
import {mockScene2D} from './mockScene2D';
describe('clone', () => {
mockScene2D();
it('Normal clone', () => {
const signal = createSignal(45);
const template = (
) as Circle;
const clone = template.clone({end: 0});
expect(clone.lineWidth()).toBe(8);
expect(clone.startAngle()).toBe(45);
expect(clone.end()).toBe(0);
expect(clone.startArrow.context.isInitial()).toBe(true);
signal(90);
expect(clone.startAngle()).toBe(90);
});
it('Reactive clone', () => {
const signal = createSignal(45);
const template = (
) as Circle;
const clone = template.reactiveClone({end: 0});
expect(clone.lineWidth()).toBe(8);
expect(clone.startAngle()).toBe(45);
expect(clone.end()).toBe(0);
expect(clone.startArrow.context.isInitial()).toBe(false);
template.lineWidth(16);
template.startArrow(true);
template.end(0.25);
signal(90);
expect(clone.lineWidth()).toBe(16);
expect(clone.startAngle()).toBe(90);
expect(clone.startArrow()).toBe(true);
expect(clone.end()).toBe(0);
});
it('Snapshot clone', () => {
const signal = createSignal(45);
const template = (
) as Circle;
const clone = template.snapshotClone({end: 0});
expect(clone.lineWidth()).toBe(8);
expect(clone.startAngle()).toBe(45);
expect(clone.end()).toBe(0);
expect(clone.startArrow.context.isInitial()).toBe(true);
template.lineWidth(16);
template.startArrow(true);
signal(90);
expect(clone.lineWidth()).toBe(8);
expect(clone.startAngle()).toBe(45);
expect(clone.startArrow()).toBe(false);
});
it('Clone compound signal', () => {
const signal = Vector2.createSignal(200);
const template = () as Circle;
const clone = template.clone({x: 100, offsetY: -1});
expect(clone.x()).toBe(100);
expect(clone.y()).toBe(200);
expect(clone.offset.x()).toBe(1);
expect(clone.offset.y()).toBe(-1);
signal([300, 400]);
expect(clone.x()).toBe(100);
expect(clone.y()).toBe(400);
});
it('Clone children', () => {
const signal = createSignal(45);
const template = (
);
const clone = template.clone();
expect(clone.children().length).toBe(1);
expect(clone.childAs(0)).not.toBe(template.childAs(0));
expect(clone.childAs(0)!.lineWidth()).toBe(8);
expect(clone.childAs(0)!.startAngle()).toBe(45);
signal(90);
expect(clone.childAs(0)!.startAngle()).toBe(90);
});
it('Clone spawner', () => {
const count = createSignal(3);
const template = (
{() =>
range(count()).map(() => (
))
}
);
const clone = template.clone();
expect(clone.children().length).toBe(3);
expect(clone.childAs(0)).not.toBe(template.childAs(0));
count(5);
expect(clone.children().length).toBe(5);
});
});