mirror of https://github.com/mermaid-js/mermaid
159 lines
5.8 KiB
JavaScript
159 lines
5.8 KiB
JavaScript
import flowDb from '../flowDb.js';
|
|
import flow from './flow.jison';
|
|
import { setConfig } from '../../../config.js';
|
|
import { vi } from 'vitest';
|
|
const spyOn = vi.spyOn;
|
|
|
|
setConfig({
|
|
securityLevel: 'strict',
|
|
});
|
|
|
|
describe('[Interactions] when parsing', () => {
|
|
beforeEach(function () {
|
|
flow.parser.yy = flowDb;
|
|
flow.parser.yy.clear();
|
|
});
|
|
|
|
it('should be possible to use click to a callback', function () {
|
|
spyOn(flowDb, 'setClickEvent');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A callback');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback');
|
|
});
|
|
|
|
it('should be possible to use click to a click and call callback', function () {
|
|
spyOn(flowDb, 'setClickEvent');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback()');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback');
|
|
});
|
|
|
|
it('should be possible to use click to a callback with toolip', function () {
|
|
spyOn(flowDb, 'setClickEvent');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A callback "tooltip"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
|
|
it('should be possible to use click to a click and call callback with toolip', function () {
|
|
spyOn(flowDb, 'setClickEvent');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback() "tooltip"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
|
|
it('should be possible to use click to a callback with an arbitrary number of args', function () {
|
|
spyOn(flowDb, 'setClickEvent');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A call callback("test0", test1, test2)');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setClickEvent).toHaveBeenCalledWith('A', 'callback', '"test0", test1, test2');
|
|
});
|
|
|
|
it('should handle interaction - click to a link', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html');
|
|
});
|
|
|
|
it('should handle interaction - click to a click and href link', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html');
|
|
});
|
|
|
|
it('should handle interaction - click to a link with tooltip', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" "tooltip"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
|
|
it('should handle interaction - click to a click and href link with tooltip', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" "tooltip"');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
|
|
it('should handle interaction - click to a link with target', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" _blank');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank');
|
|
});
|
|
|
|
it('should handle interaction - click to a click and href link with target', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" _blank');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank');
|
|
});
|
|
|
|
it('should handle interaction - click to a link with tooltip and target', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A "click.html" "tooltip" _blank');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
|
|
it('should handle interaction - click to a click and href link with tooltip and target', function () {
|
|
spyOn(flowDb, 'setLink');
|
|
spyOn(flowDb, 'setTooltip');
|
|
const res = flow.parser.parse('graph TD\nA-->B\nclick A href "click.html" "tooltip" _blank');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(flowDb.setLink).toHaveBeenCalledWith('A', 'click.html', '_blank');
|
|
expect(flowDb.setTooltip).toHaveBeenCalledWith('A', 'tooltip');
|
|
});
|
|
});
|