mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-06 08:25:19 +01:00
216 lines
7 KiB
JavaScript
216 lines
7 KiB
JavaScript
import {assertEquals, assertFalse, assertTrue} from '../utils/asserts';
|
|
import {NOOP} from '../../../modules/gems/func';
|
|
|
|
export const TEST_MODE = 'sketcherUI';
|
|
|
|
export function testEqualConstraints(env, ui) {
|
|
|
|
ui.addRectangle(10, 10, 100, 100);
|
|
|
|
assertEquals(4, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(4, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testBuildGraphBasics(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
ui.select([seg1, seg2]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
|
|
const seg3 = ui.addSegment(500, 10, 500, 100);
|
|
const seg4 = ui.addSegment(700, 10, 700, 100);
|
|
ui.select([seg3, seg4]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(2, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(2, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[1].constraints.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testThreeConnectedConstraints(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
ui.select([seg1, seg2]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
|
|
const seg3 = ui.addSegment(500, 10, 500, 100);
|
|
const seg4 = ui.addSegment(700, 10, 700, 100);
|
|
ui.select([seg3, seg4]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(2, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(2, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems[1].constraints.length);
|
|
|
|
ui.select([seg2, seg3]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(3, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(3, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testIgnoreBoundaries(env, ui) {
|
|
|
|
const boundary = ui.addSegment(500, 10, 500, 100);
|
|
boundary.aux = true;
|
|
|
|
const seg1 = ui.addSegment(100, 10, 100, 100);
|
|
ui.select([seg1, boundary]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
const seg2 = ui.addSegment(700, 10, 700, 100);
|
|
ui.select([seg1, boundary]);
|
|
|
|
ui.select([seg1, boundary]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(2, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(2, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testMirroring(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
|
|
ui.select([seg2, seg1]);
|
|
ui.runAction('mirrorConstraint');
|
|
const seg3 = ui.viewer.parametricManager.system.constraints[0].reflectedObjects[0];
|
|
const seg4 = ui.addSegment(600, 10, 600, 100);
|
|
ui.select([seg4, seg3]);
|
|
ui.runAction('mirrorConstraint');
|
|
|
|
let system = ui.viewer.parametricManager.system;
|
|
let subSystems = ui.viewer.parametricManager.system.subSystems;
|
|
assertEquals(3, subSystems.length);
|
|
const subSystem0 = system.constraintToSubSystem.get(system.constraints[0]);
|
|
const subSystem1 = system.constraintToSubSystem.get(system.constraints[1]);
|
|
assertTrue( subSystem1.dependencies[0] === subSystem0, "Second subsystem depends on first one");
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testCircularDependencies(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
|
|
ui.select([seg2, seg1]);
|
|
ui.runAction('mirrorConstraint');
|
|
const seg3 = ui.viewer.parametricManager.system.constraints[0].reflectedObjects[0];
|
|
const seg4 = ui.addSegment(600, 10, 600, 100);
|
|
ui.select([seg4, seg3]);
|
|
ui.runAction('mirrorConstraint');
|
|
|
|
|
|
let seg5 = ui.viewer.parametricManager.system.constraints[1].reflectedObjects[0];
|
|
ui.select([seg5, seg1]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
let isCircular = false;
|
|
ui.viewer.parametricManager.system.traverse(NOOP, () => isCircular = true);
|
|
|
|
assertEquals(2, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertTrue(isCircular, "System should contain circular depending subsystems");
|
|
|
|
env.done();
|
|
}
|
|
|
|
|
|
export function testSimpleRemove(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
ui.select([seg1, seg2]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
const seg3 = ui.addSegment(500, 10, 500, 100);
|
|
const seg4 = ui.addSegment(700, 10, 700, 100);
|
|
ui.select([seg3, seg4]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
|
|
ui.select([seg2, seg3]);
|
|
ui.runAction('parallelConstraint');
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(3, ui.viewer.parametricManager.system.constraints.length);
|
|
assertEquals(3, ui.viewer.parametricManager.system.subSystems[0].constraints.length);
|
|
|
|
ui.select([]);
|
|
ui.viewer.remove(seg1);
|
|
|
|
assertEquals(1, ui.viewer.parametricManager.system.subSystems.length);
|
|
assertEquals(2, ui.viewer.parametricManager.system.constraints.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testMirroringRemove(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(10, 10, 10, 100);
|
|
const seg2 = ui.addSegment(200, 10, 200, 100);
|
|
|
|
ui.select([seg2, seg1]);
|
|
ui.runAction('mirrorConstraint');
|
|
const seg3 = ui.viewer.parametricManager.system.constraints[0].reflectedObjects[0];
|
|
const seg4 = ui.addSegment(600, 10, 600, 100);
|
|
ui.select([seg4, seg3]);
|
|
ui.runAction('mirrorConstraint');
|
|
|
|
assertEquals(3, ui.viewer.parametricManager.system.subSystems.length);
|
|
ui.viewer.remove(seg1);
|
|
assertEquals(0, ui.viewer.parametricManager.system.subSystems.length);
|
|
|
|
env.done();
|
|
}
|
|
|
|
export function testDoubleAngle(env, ui) {
|
|
|
|
const seg1 = ui.addSegment(100, 100, 100, 200);
|
|
const seg2 = ui.addSegment(100, 200, 200, 200);
|
|
const seg3 = ui.addSegment(10, 10, 300, 10);
|
|
|
|
ui.select([seg3, seg2, seg1]);
|
|
|
|
ui.runAction('mirrorConstraint');
|
|
|
|
const [seg4, seg5] = ui.viewer.parametricManager.system.constraints[1].reflectedObjects;
|
|
const seg6 = ui.addSegment(300, -200, 300, 300);
|
|
|
|
ui.select([seg6, seg5, seg4, seg2, seg1]);
|
|
|
|
ui.runAction('mirrorConstraint');
|
|
|
|
let isCircular = false;
|
|
ui.viewer.parametricManager.system.traverse(NOOP, () => isCircular = true);
|
|
|
|
assertFalse(isCircular, "shouldn't be circular");
|
|
|
|
env.done();
|
|
}
|