Files
lan-manager/web/node_modules/@antv/g6-plugin/tests/unit/image-minimap-spec.ts
openclaw 0a5f6a8047 Initial commit: Lan-manager project code
- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs

Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
2026-04-20 00:52:58 +08:00

124 lines
3.7 KiB
TypeScript

import G6 from '@antv/g6';
import Simulate from 'event-simulate';
import ImageMinimap from '../../src/imageMinimap';
const numberEqual = (a: number, b: number, gap?: number) => {
return Math.abs(a - b) <= (gap || 0.001);
};
const div = document.createElement('div');
div.id = 'image-minimap-spec';
document.body.appendChild(div);
describe('image minimap', () => {
let graph;
const minimap = new ImageMinimap({
width: 200,
padding: 10,
graphImg:
'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*DcGMQ7AN3Z0AAAAAAAAAAABkARQnAQ',
});
fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/algorithm-category.json')
.then((res) => res.json())
.then((data) => {
graph = new G6.TreeGraph({
container: div,
width: 800,
height: 600,
plugins: [minimap],
defaultNode: {
size: 26,
anchorPoints: [
[0, 0.5],
[1, 0.5],
],
style: {
fill: 'rgb(239, 244, 255)',
stroke: 'rgb(95, 149, 255)',
},
},
defaultEdge: {
type: 'cubic-horizontal',
style: {
stroke: '#A3B1BF',
},
},
layout: {
type: 'dendrogram',
direction: 'LR', // H / V / LR / RL / TB / BT
nodeSep: 30,
rankSep: 100,
},
});
graph.node(function (node) {
return {
label: node.id,
labelCfg: {
position: node.children && node.children.length > 0 ? 'left' : 'right',
offset: 5,
},
};
});
graph.data(data);
graph.render();
});
it('default image minimap', (done) => {
done();
window.setTimeout(() => {
const container = minimap.getContainer();
expect(container).not.toBe(undefined);
const viewport = minimap.getViewport();
expect(viewport).not.toBe(undefined);
let left = parseFloat(viewport.style.left.split('px')[0]);
let top = parseFloat(viewport.style.top.split('px')[0]);
let width = parseFloat(viewport.style.width.split('px')[0]);
let height = parseFloat(viewport.style.height.split('px')[0]);
expect(numberEqual(left, 63, 5)).toEqual(true);
expect(numberEqual(top, 90, 5)).toEqual(true);
expect(numberEqual(width, 137, 5)).toEqual(true);
expect(numberEqual(height, 59, 5)).toEqual(true);
Simulate.simulate(viewport, 'mousedown', {
clientX: 100,
clientY: 100,
target: viewport,
});
Simulate.simulate(viewport, 'mousemove', {
clientX: 50,
clientY: 100,
});
Simulate.simulate(viewport, 'mouseup', {
clientX: 50,
clientY: 100,
});
setTimeout(() => {
left = parseFloat(viewport.style.left.split('px')[0]);
top = parseFloat(viewport.style.top.split('px')[0]);
width = parseFloat(viewport.style.width.split('px')[0]);
height = parseFloat(viewport.style.height.split('px')[0]);
expect(numberEqual(left, 33, 2)).toEqual(true);
expect(numberEqual(top, 90, 2)).toEqual(true);
expect(numberEqual(width, 158, 2)).toEqual(true);
expect(numberEqual(height, 59, 2)).toEqual(true);
minimap.updateGraphImg(
'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7QSRRJwAWxQAAAAAAAAAAABkARQnAQ',
);
const imgDOM = minimap.get('imgDOM');
expect(imgDOM.src).toEqual(
'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*7QSRRJwAWxQAAAAAAAAAAABkARQnAQ',
);
graph.destroy();
expect(minimap.destroyed).toEqual(true);
done();
}, 100);
}, 800);
});
});