mirror of
https://github.com/idrawjs/idraw
synced 2026-05-24 01:58:27 +00:00
130 lines
3.5 KiB
TypeScript
130 lines
3.5 KiB
TypeScript
import { moveElementPosition } from '@idraw/util';
|
|
import type { Elements } from '@idraw/types';
|
|
const getElemBase = () => {
|
|
return {
|
|
x: 0,
|
|
y: 0,
|
|
w: 1,
|
|
h: 1
|
|
};
|
|
};
|
|
|
|
function generateElements(list: any[]): Elements {
|
|
const elements: Elements = list.map((item) => {
|
|
if (Array.isArray(item)) {
|
|
return {
|
|
...getElemBase(),
|
|
uuid: `group`,
|
|
type: 'group',
|
|
detail: {
|
|
children: generateElements(item)
|
|
}
|
|
};
|
|
} else {
|
|
return {
|
|
...getElemBase(),
|
|
uuid: `rect-${item}`,
|
|
type: 'rect',
|
|
detail: {}
|
|
};
|
|
}
|
|
}) as Elements;
|
|
return elements;
|
|
}
|
|
|
|
describe('@idraw/util: handle-element ', () => {
|
|
// [2] -> [4]
|
|
// [0, 1, 2, 3, 2, 4, 5]
|
|
// [0, 1, 3, 2, 4, 5]
|
|
test('moveElementPosition, move-down [2] -> [4]', () => {
|
|
const list: Elements = generateElements([0, 1, 2, 3, 4, 5]);
|
|
moveElementPosition(list, {
|
|
from: [2],
|
|
to: [4]
|
|
});
|
|
|
|
const expectResult = generateElements([0, 1, 3, 2, 4, 5]);
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [4] -> [2] yes
|
|
// [0, 1, 4, 2, 3, 4, 5]
|
|
// [0, 1, 4, 2, 3, 5]
|
|
test('moveElementPosition, move-up [4] -> [2]', () => {
|
|
const list: Elements = generateElements([0, 1, 2, 3, 4, 5]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [4],
|
|
to: [2]
|
|
});
|
|
|
|
const expectResult = generateElements([0, 1, 4, 2, 3, 5]);
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [3, 2, 1] -> [2]
|
|
test('moveElementPosition, move-up [3, 2, 1] -> [2]', () => {
|
|
const list: Elements = generateElements([0, 1, 2, [0, 1, [0, 1, 2, 3], 3], 4, 5]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [3, 2, 1],
|
|
to: [2]
|
|
});
|
|
|
|
const expectResult = generateElements([0, 1, 1, 2, [0, 1, [0, 2, 3], 3], 4, 5]);
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [1] -> [1, 2, 3]
|
|
test('moveElementPosition, move-up [1] -> [1, 2, 3]', () => {
|
|
const list: Elements = generateElements([0, [0, 1, [0, 1, 2, 3, 4, 5], 3, 4, 5], 2, 3, 4, 5]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [1],
|
|
to: [1, 2, 3]
|
|
});
|
|
|
|
const expectResult = generateElements([0, [0, 1, [0, 1, 2, 3, 4, 5], 3, 4, 5], 2, 3, 4, 5]);
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [1, 2, 3, 4, 5] -> [1, 2, 2]
|
|
test('moveElementPosition, move-up [1, 2, 3, 4, 5] -> [1, 2, 2]', () => {
|
|
const list: Elements = generateElements([0, [0, 1, [0, 1, 2, [0, 1, 2, 3, [0, 1, 2, 3, 4, 5], 5], 4, 5], 3, 4, 5], 2, 3, 4, 5]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [1, 2, 3, 4, 5],
|
|
to: [1, 2, 2]
|
|
});
|
|
|
|
const expectResult = generateElements([0, [0, 1, [0, 1, 5, 2, [0, 1, 2, 3, [0, 1, 2, 3, 4], 5], 4, 5], 3, 4, 5], 2, 3, 4, 5]);
|
|
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [1] -> [1]
|
|
test('moveElementPosition, move-up [1] -> [1]', () => {
|
|
const list: Elements = generateElements([0, 1, 2, [0, 1, [0, 1, 2, 3], 3], 4, 5]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [1],
|
|
to: [1]
|
|
});
|
|
|
|
const expectResult = generateElements([0, 1, 2, [0, 1, [0, 1, 2, 3], 3], 4, 5]);
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
|
|
// [2, 4] -> [1, 2]
|
|
test('moveElementPosition, move-up [1, 2] -> [2, 4]', () => {
|
|
const list: Elements = generateElements([0, [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], 3, 4]);
|
|
|
|
moveElementPosition(list, {
|
|
from: [2, 4],
|
|
to: [1, 2]
|
|
});
|
|
const expectResult = generateElements([0, [0, 1, 4, 2, 3, 4], [0, 1, 2, 3], 3, 4]);
|
|
|
|
expect(list).toStrictEqual(expectResult);
|
|
});
|
|
});
|