Compare commits
118 Commits
3881_subgr
...
sidv/e2eCI
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8acc6c1c53 | ||
![]() |
be1656b136 | ||
![]() |
33c5ba02e6 | ||
![]() |
1015516416 | ||
![]() |
d475696534 | ||
![]() |
f1634216c4 | ||
![]() |
2777ed24f2 | ||
![]() |
579536a151 | ||
![]() |
d6fad1bbd8 | ||
![]() |
e2b05d3cf6 | ||
![]() |
1495baac2c | ||
![]() |
ff7ed7f49f | ||
![]() |
333b974f10 | ||
![]() |
01039c574c | ||
![]() |
4e70f327c4 | ||
![]() |
54bb2ef00e | ||
![]() |
992d1623a7 | ||
![]() |
78dd03dcdb | ||
![]() |
9f2d29b68b | ||
![]() |
dfa1d26952 | ||
![]() |
32fcea3bdd | ||
![]() |
a975c8c9cd | ||
![]() |
e97bef2ff7 | ||
![]() |
e4c9aa198e | ||
![]() |
76e9e07370 | ||
![]() |
de795a915e | ||
![]() |
e59b830d74 | ||
![]() |
2c4443ec71 | ||
![]() |
638607da00 | ||
![]() |
90d9724d1a | ||
![]() |
f3e1479c77 | ||
![]() |
bc5b9d3937 | ||
![]() |
976585401c | ||
![]() |
6694bca803 | ||
![]() |
2a7dc427ae | ||
![]() |
a3d8f1f8e4 | ||
![]() |
688d671d2e | ||
![]() |
b14b23a6af | ||
![]() |
aa949b4ff6 | ||
![]() |
e792bf5239 | ||
![]() |
1c9a559362 | ||
![]() |
b1dd0008bc | ||
![]() |
a0d3b8c1fe | ||
![]() |
a86f831b3e | ||
![]() |
1c794ce619 | ||
![]() |
86cab46cf0 | ||
![]() |
e6e02a9b70 | ||
![]() |
f3a209badc | ||
![]() |
69e84b6731 | ||
![]() |
58dca0afe3 | ||
![]() |
af1a7bea1f | ||
![]() |
033201ff1f | ||
![]() |
af212331ef | ||
![]() |
59fdaa3b53 | ||
![]() |
f2a85eafac | ||
![]() |
9b547edbe9 | ||
![]() |
48518a56c7 | ||
![]() |
1a767ee492 | ||
![]() |
b2489523f2 | ||
![]() |
7553827985 | ||
![]() |
792c1a8320 | ||
![]() |
963a1f1eb1 | ||
![]() |
fdf261bda3 | ||
![]() |
f2ee20fdf5 | ||
![]() |
7a086890fd | ||
![]() |
49ca2e3588 | ||
![]() |
c5653156d9 | ||
![]() |
2cce562bc4 | ||
![]() |
f0aea0e6af | ||
![]() |
24560b7d13 | ||
![]() |
d451a0c508 | ||
![]() |
96996d0fba | ||
![]() |
4124d186d0 | ||
![]() |
a1e4ffb3f0 | ||
![]() |
c7471f1755 | ||
![]() |
bfe3f309d2 | ||
![]() |
f036d58ec3 | ||
![]() |
2bf753a769 | ||
![]() |
6044e9e9e8 | ||
![]() |
e9d4372c41 | ||
![]() |
2030885fd3 | ||
![]() |
6e486d3c49 | ||
![]() |
f1bc2deafd | ||
![]() |
7508cd796d | ||
![]() |
626a4741c0 | ||
![]() |
a9c337302a | ||
![]() |
2a98791ec9 | ||
![]() |
67a015c71d | ||
![]() |
69526402e2 | ||
![]() |
b51759d36e | ||
![]() |
68b1805c40 | ||
![]() |
9cc862b951 | ||
![]() |
4fb4aa417c | ||
![]() |
0adc6a6112 | ||
![]() |
29efc116f3 | ||
![]() |
f62c5d9698 | ||
![]() |
1ad537bc4d | ||
![]() |
1fc02940ae | ||
![]() |
8a3c4f64b2 | ||
![]() |
4d7496b8dd | ||
![]() |
03a11e103e | ||
![]() |
c3313050ce | ||
![]() |
d99707641b | ||
![]() |
0d9566dd71 | ||
![]() |
8d96518092 | ||
![]() |
563c51d431 | ||
![]() |
455c61b2cf | ||
![]() |
0a547e524e | ||
![]() |
9c5c85d34a | ||
![]() |
8d6af3dfed | ||
![]() |
3bae25fe6b | ||
![]() |
1d8d677d81 | ||
![]() |
75db08a60c | ||
![]() |
d367e832be | ||
![]() |
8d9800c727 | ||
![]() |
058f1c2edf | ||
![]() |
9425b8adc2 | ||
![]() |
21caa3eb72 |
30
.github/workflows/e2e.yml
vendored
@@ -3,7 +3,7 @@ name: E2E
|
|||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -28,15 +28,28 @@ jobs:
|
|||||||
cache: pnpm
|
cache: pnpm
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
# Experiment with this step if we cannot check-in the snapshots to the repo.
|
||||||
|
# - name: Cache snapshots
|
||||||
|
# id: cache-snapshot
|
||||||
|
# uses: actions/cache@v3
|
||||||
|
# with:
|
||||||
|
# # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||||
|
# path: ./cypress/snapshots
|
||||||
|
# key: ${{ runner.os }}-build-${env.GITHUB_REF}
|
||||||
|
# restore-keys: |
|
||||||
|
# ${{ runner.os }}-build-develop
|
||||||
|
|
||||||
# Install NPM dependencies, cache them correctly
|
# Install NPM dependencies, cache them correctly
|
||||||
# and run all Cypress tests
|
# and run all Cypress tests
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
|
id: cypress
|
||||||
uses: cypress-io/github-action@v4
|
uses: cypress-io/github-action@v4
|
||||||
# If CYPRESS_RECORD_KEY is set, run in parallel on all containers
|
# If CYPRESS_RECORD_KEY is set, run in parallel on all containers
|
||||||
# Otherwise (e.g. if running from fork), we run on a single container only
|
# Otherwise (e.g. if running from fork), we run on a single container only
|
||||||
if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
|
if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
|
||||||
with:
|
with:
|
||||||
start: pnpm run dev
|
start: pnpm run dev
|
||||||
|
browser: chrome
|
||||||
wait-on: 'http://localhost:9000'
|
wait-on: 'http://localhost:9000'
|
||||||
# Disable recording if we don't have an API key
|
# Disable recording if we don't have an API key
|
||||||
# e.g. if this action was run from a fork
|
# e.g. if this action was run from a fork
|
||||||
@@ -44,3 +57,18 @@ jobs:
|
|||||||
parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
||||||
env:
|
env:
|
||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||||
|
|
||||||
|
- name: Upload Artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
|
||||||
|
with:
|
||||||
|
name: error-snapshots
|
||||||
|
path: cypress/snapshots/**/__diff_output__/*
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
uses: EndBug/add-and-commit@v9
|
||||||
|
if: ${{ github.event_name == 'push' }}
|
||||||
|
with:
|
||||||
|
message: 'Update snapshots'
|
||||||
|
add: 'cypress/snapshots/*'
|
||||||
|
pull: '--rebase --autostash'
|
||||||
|
17
.github/workflows/lint.yml
vendored
@@ -7,9 +7,10 @@ on:
|
|||||||
- opened
|
- opened
|
||||||
- synchronize
|
- synchronize
|
||||||
- ready_for_review
|
- ready_for_review
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -39,5 +40,19 @@ jobs:
|
|||||||
run: pnpm run lint
|
run: pnpm run lint
|
||||||
|
|
||||||
- name: Verify Docs
|
- name: Verify Docs
|
||||||
|
id: verifyDocs
|
||||||
working-directory: ./packages/mermaid
|
working-directory: ./packages/mermaid
|
||||||
|
continue-on-error: ${{ github.event_name == 'push' }}
|
||||||
run: pnpm run docs:verify
|
run: pnpm run docs:verify
|
||||||
|
|
||||||
|
- name: Rebuild Docs
|
||||||
|
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
||||||
|
working-directory: ./packages/mermaid
|
||||||
|
run: pnpm run docs:build
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
uses: EndBug/add-and-commit@v9
|
||||||
|
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
||||||
|
with:
|
||||||
|
message: 'Update docs'
|
||||||
|
add: 'docs/*'
|
||||||
|
2
.gitignore
vendored
@@ -26,7 +26,7 @@ Gemfile.lock
|
|||||||
/.vs
|
/.vs
|
||||||
|
|
||||||
cypress/screenshots/
|
cypress/screenshots/
|
||||||
cypress/snapshots/
|
cypress/snapshots-dev/
|
||||||
|
|
||||||
# eslint --cache file
|
# eslint --cache file
|
||||||
.eslintcache
|
.eslintcache
|
||||||
|
21
__mocks__/c4Renderer.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* Mocked C4Context diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const drawPersonOrSystemArray = vi.fn();
|
||||||
|
export const drawBoundary = vi.fn();
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
drawPersonOrSystemArray,
|
||||||
|
drawBoundary,
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
16
__mocks__/classRenderer-v2.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Mocked class diagram v2 renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
13
__mocks__/classRenderer.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Mocked class diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
draw,
|
||||||
|
};
|
@@ -1,79 +1,14 @@
|
|||||||
// @ts-nocheck TODO: Fix TS
|
// @ts-nocheck TODO: Fix TS
|
||||||
import { vi } from 'vitest';
|
import { MockedD3 } from '../packages/mermaid/src/tests/MockedD3';
|
||||||
|
|
||||||
const NewD3 = function () {
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function returnThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
append: function () {
|
|
||||||
return NewD3();
|
|
||||||
},
|
|
||||||
lower: returnThis,
|
|
||||||
attr: returnThis,
|
|
||||||
style: returnThis,
|
|
||||||
text: returnThis,
|
|
||||||
0: {
|
|
||||||
0: {
|
|
||||||
getBBox: function () {
|
|
||||||
return {
|
|
||||||
height: 10,
|
|
||||||
width: 20,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const select = function () {
|
export const select = function () {
|
||||||
return new NewD3();
|
return new MockedD3();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const selectAll = function () {
|
export const selectAll = function () {
|
||||||
return new NewD3();
|
return new MockedD3();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const curveBasis = 'basis';
|
export const curveBasis = 'basis';
|
||||||
export const curveLinear = 'linear';
|
export const curveLinear = 'linear';
|
||||||
export const curveCardinal = 'cardinal';
|
export const curveCardinal = 'cardinal';
|
||||||
|
|
||||||
export const MockD3 = (name, parent) => {
|
|
||||||
const children = [];
|
|
||||||
const elem = {
|
|
||||||
get __children() {
|
|
||||||
return children;
|
|
||||||
},
|
|
||||||
get __name() {
|
|
||||||
return name;
|
|
||||||
},
|
|
||||||
get __parent() {
|
|
||||||
return parent;
|
|
||||||
},
|
|
||||||
node() {
|
|
||||||
return {
|
|
||||||
getBBox() {
|
|
||||||
return {
|
|
||||||
x: 5,
|
|
||||||
y: 10,
|
|
||||||
height: 15,
|
|
||||||
width: 20,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
elem.append = (name) => {
|
|
||||||
const mockElem = MockD3(name, elem);
|
|
||||||
children.push(mockElem);
|
|
||||||
return mockElem;
|
|
||||||
};
|
|
||||||
elem.lower = vi.fn(() => elem);
|
|
||||||
elem.attr = vi.fn(() => elem);
|
|
||||||
elem.text = vi.fn(() => elem);
|
|
||||||
elem.style = vi.fn(() => elem);
|
|
||||||
return elem;
|
|
||||||
};
|
|
||||||
|
16
__mocks__/erRenderer.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Mocked er diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
24
__mocks__/flowRenderer-v2.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* Mocked flow (flowchart) diagram v2 renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
export const addVertices = vi.fn();
|
||||||
|
export const addEdges = vi.fn();
|
||||||
|
export const getClasses = vi.fn().mockImplementation(() => {
|
||||||
|
return {};
|
||||||
|
});
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
addVertices,
|
||||||
|
addEdges,
|
||||||
|
getClasses,
|
||||||
|
draw,
|
||||||
|
};
|
16
__mocks__/ganttRenderer.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Mocked gantt diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
13
__mocks__/gitGraphRenderer.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Mocked git (graph) diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
draw,
|
||||||
|
};
|
15
__mocks__/journeyRenderer.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Mocked pie (picChart) diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
13
__mocks__/pieRenderer.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Mocked pie (picChart) diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
draw,
|
||||||
|
};
|
13
__mocks__/requirementRenderer.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Mocked requirement diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
draw,
|
||||||
|
};
|
23
__mocks__/sequenceRenderer.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* Mocked sequence diagram renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const bounds = vi.fn();
|
||||||
|
export const drawActors = vi.fn();
|
||||||
|
export const drawActorsPopup = vi.fn();
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
bounds,
|
||||||
|
drawActors,
|
||||||
|
drawActorsPopup,
|
||||||
|
setConf,
|
||||||
|
draw,
|
||||||
|
};
|
22
__mocks__/stateRenderer-v2.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Mocked state diagram v2 renderer
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
export const setConf = vi.fn();
|
||||||
|
export const getClasses = vi.fn().mockImplementation(() => {
|
||||||
|
return {};
|
||||||
|
});
|
||||||
|
export const stateDomId = vi.fn().mockImplementation(() => {
|
||||||
|
return 'mocked-stateDiagram-stateDomId';
|
||||||
|
});
|
||||||
|
export const draw = vi.fn().mockImplementation(() => {
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setConf,
|
||||||
|
getClasses,
|
||||||
|
draw,
|
||||||
|
};
|
@@ -52,6 +52,7 @@
|
|||||||
"laganeckas",
|
"laganeckas",
|
||||||
"lintstagedrc",
|
"lintstagedrc",
|
||||||
"lucida",
|
"lucida",
|
||||||
|
"mansalva",
|
||||||
"matthieu",
|
"matthieu",
|
||||||
"mdbook",
|
"mdbook",
|
||||||
"mermerd",
|
"mermerd",
|
||||||
@@ -64,14 +65,19 @@
|
|||||||
"phpbb",
|
"phpbb",
|
||||||
"plantuml",
|
"plantuml",
|
||||||
"playfair",
|
"playfair",
|
||||||
|
"pnpm",
|
||||||
"podlite",
|
"podlite",
|
||||||
"ranksep",
|
"ranksep",
|
||||||
|
"rect",
|
||||||
|
"rects",
|
||||||
"redmine",
|
"redmine",
|
||||||
|
"roledescription",
|
||||||
"sandboxed",
|
"sandboxed",
|
||||||
"setupgraphviewbox",
|
"setupgraphviewbox",
|
||||||
"shiki",
|
"shiki",
|
||||||
"sidharth",
|
"sidharth",
|
||||||
"sphinxcontrib",
|
"sphinxcontrib",
|
||||||
|
"ssim",
|
||||||
"statediagram",
|
"statediagram",
|
||||||
"stylis",
|
"stylis",
|
||||||
"substate",
|
"substate",
|
||||||
|
@@ -5,9 +5,17 @@ const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin')
|
|||||||
|
|
||||||
module.exports = defineConfig({
|
module.exports = defineConfig({
|
||||||
projectId: 'n2sma2',
|
projectId: 'n2sma2',
|
||||||
|
viewportWidth: 1440,
|
||||||
|
viewportHeight: 1024,
|
||||||
e2e: {
|
e2e: {
|
||||||
specPattern: 'cypress/integration/**/*.{js,jsx,ts,tsx}',
|
specPattern: 'cypress/integration/**/*.{js,jsx,ts,tsx}',
|
||||||
setupNodeEvents(on, config) {
|
setupNodeEvents(on, config) {
|
||||||
|
on('before:browser:launch', (browser = {}, launchOptions) => {
|
||||||
|
if (browser.name === 'chrome' && browser.isHeadless) {
|
||||||
|
launchOptions.args.push('--window-size=1440,1024', '--force-device-scale-factor=1');
|
||||||
|
}
|
||||||
|
return launchOptions;
|
||||||
|
});
|
||||||
addMatchImageSnapshotPlugin(on, config);
|
addMatchImageSnapshotPlugin(on, config);
|
||||||
// copy any needed variables from process.env to config.env
|
// copy any needed variables from process.env to config.env
|
||||||
config.env.useAppli = process.env.USE_APPLI ? true : false;
|
config.env.useAppli = process.env.USE_APPLI ? true : false;
|
||||||
|
@@ -136,6 +136,5 @@ export const urlSnapshotTest = (url, _options, api = false, validation) => {
|
|||||||
|
|
||||||
export const renderGraph = (graphStr, options, api) => {
|
export const renderGraph = (graphStr, options, api) => {
|
||||||
const url = mermaidUrl(graphStr, options, api);
|
const url = mermaidUrl(graphStr, options, api);
|
||||||
|
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
};
|
};
|
||||||
|
@@ -117,7 +117,6 @@ describe('Configuration', () => {
|
|||||||
});
|
});
|
||||||
it('should not taint the initial configuration when using multiple directives', () => {
|
it('should not taint the initial configuration when using multiple directives', () => {
|
||||||
const url = 'http://localhost:9000/regression/issue-1874.html';
|
const url = 'http://localhost:9000/regression/issue-1874.html';
|
||||||
cy.viewport(1440, 1024);
|
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
|
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
|
@@ -1,14 +1,12 @@
|
|||||||
describe('Rerendering', () => {
|
describe('Rerendering', () => {
|
||||||
it('should be able to render after an error has occurred', () => {
|
it('should be able to render after an error has occurred', () => {
|
||||||
const url = 'http://localhost:9000/render-after-error.html';
|
const url = 'http://localhost:9000/render-after-error.html';
|
||||||
cy.viewport(1440, 1024);
|
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
cy.get('#graphDiv').should('exist');
|
cy.get('#graphDiv').should('exist');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to render and rerender a graph via API', () => {
|
it('should be able to render and rerender a graph via API', () => {
|
||||||
const url = 'http://localhost:9000/rerender.html';
|
const url = 'http://localhost:9000/rerender.html';
|
||||||
cy.viewport(1440, 1024);
|
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
cy.get('#graph [id^=flowchart-A]').should('have.text', 'XMas');
|
cy.get('#graph [id^=flowchart-A]').should('have.text', 'XMas');
|
||||||
|
|
||||||
|
@@ -225,7 +225,10 @@ describe('Gantt diagram', () => {
|
|||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.be.within(984 * 0.95, 984 * 1.05);
|
expect(maxWidthValue).to.be.within(
|
||||||
|
Cypress.config().viewportWidth * 0.95,
|
||||||
|
Cypress.config().viewportWidth * 1.05
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -269,7 +272,10 @@ describe('Gantt diagram', () => {
|
|||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
// use within because the absolute value can be slightly different depending on the environment ±5%
|
// use within because the absolute value can be slightly different depending on the environment ±5%
|
||||||
// expect(height).to.be.within(484 * 0.95, 484 * 1.05);
|
// expect(height).to.be.within(484 * 0.95, 484 * 1.05);
|
||||||
expect(width).to.be.within(984 * 0.95, 984 * 1.05);
|
expect(width).to.be.within(
|
||||||
|
Cypress.config().viewportWidth * 0.95,
|
||||||
|
Cypress.config().viewportWidth * 1.05
|
||||||
|
);
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -310,38 +316,6 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render accessibility tags', function () {
|
|
||||||
const expectedTitle = 'Gantt Diagram';
|
|
||||||
const expectedAccDescription = 'Tasks for Q4';
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
gantt
|
|
||||||
accTitle: ${expectedTitle}
|
|
||||||
accDescr: ${expectedAccDescription}
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Section
|
|
||||||
A task :a1, 2014-01-01, 30d
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg').should((svg) => {
|
|
||||||
const el = svg.get(0);
|
|
||||||
const children = [...el.children];
|
|
||||||
|
|
||||||
const titleEl = children.find(function (node) {
|
|
||||||
return node.tagName === 'title';
|
|
||||||
});
|
|
||||||
const descriptionEl = children.find(function (node) {
|
|
||||||
return node.tagName === 'desc';
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(titleEl).to.exist;
|
|
||||||
expect(titleEl.textContent).to.equal(expectedTitle);
|
|
||||||
expect(descriptionEl).to.exist;
|
|
||||||
expect(descriptionEl.textContent).to.equal(expectedAccDescription);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 15 minutes', () => {
|
it('should render a gantt diagram with tick is 15 minutes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
|
@@ -54,7 +54,10 @@ describe('Pie Chart', () => {
|
|||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.eq(984);
|
expect(maxWidthValue).to.be.within(
|
||||||
|
Cypress.config().viewportWidth * 0.95,
|
||||||
|
Cypress.config().viewportWidth * 1.05
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should render a pie diagram when useMaxWidth is false', () => {
|
it('should render a pie diagram when useMaxWidth is false', () => {
|
||||||
@@ -68,10 +71,11 @@ describe('Pie Chart', () => {
|
|||||||
{ pie: { useMaxWidth: false } }
|
{ pie: { useMaxWidth: false } }
|
||||||
);
|
);
|
||||||
cy.get('svg').should((svg) => {
|
cy.get('svg').should((svg) => {
|
||||||
// const height = parseFloat(svg.attr('height'));
|
|
||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
// expect(height).to.eq(450);
|
expect(width).to.be.within(
|
||||||
expect(width).to.eq(984);
|
Cypress.config().viewportWidth * 0.95,
|
||||||
|
Cypress.config().viewportWidth * 1.05
|
||||||
|
);
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -46,69 +46,4 @@ describe('Requirement diagram', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render accessibility tags', function () {
|
|
||||||
const expectedTitle = 'Gantt Diagram';
|
|
||||||
const expectedAccDescription = 'Tasks for Q4';
|
|
||||||
renderGraph(
|
|
||||||
`
|
|
||||||
requirementDiagram
|
|
||||||
accTitle: ${expectedTitle}
|
|
||||||
accDescr: ${expectedAccDescription}
|
|
||||||
|
|
||||||
requirement test_req {
|
|
||||||
id: 1
|
|
||||||
text: the test text.
|
|
||||||
risk: high
|
|
||||||
verifymethod: test
|
|
||||||
}
|
|
||||||
|
|
||||||
functionalRequirement test_req2 {
|
|
||||||
id: 1.1
|
|
||||||
text: the second test text.
|
|
||||||
risk: low
|
|
||||||
verifymethod: inspection
|
|
||||||
}
|
|
||||||
|
|
||||||
performanceRequirement test_req3 {
|
|
||||||
id: 1.2
|
|
||||||
text: the third test text.
|
|
||||||
risk: medium
|
|
||||||
verifymethod: demonstration
|
|
||||||
}
|
|
||||||
|
|
||||||
element test_entity {
|
|
||||||
type: simulation
|
|
||||||
}
|
|
||||||
|
|
||||||
element test_entity2 {
|
|
||||||
type: word doc
|
|
||||||
docRef: reqs/test_entity
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
test_entity - satisfies -> test_req2
|
|
||||||
test_req - traces -> test_req2
|
|
||||||
test_req - contains -> test_req3
|
|
||||||
test_req <- copies - test_entity2
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
cy.get('svg').should((svg) => {
|
|
||||||
const el = svg.get(0);
|
|
||||||
const children = [...el.children];
|
|
||||||
|
|
||||||
const titleEl = children.find(function (node) {
|
|
||||||
return node.tagName === 'title';
|
|
||||||
});
|
|
||||||
const descriptionEl = children.find(function (node) {
|
|
||||||
return node.tagName === 'desc';
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(titleEl).to.exist;
|
|
||||||
expect(titleEl.textContent).to.equal(expectedTitle);
|
|
||||||
expect(descriptionEl).to.exist;
|
|
||||||
expect(descriptionEl.textContent).to.equal(expectedAccDescription);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@@ -328,7 +328,7 @@ describe('State diagram', () => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('v2 it should be possibel to use a choice', () => {
|
it('v2 it should be possible to use a choice', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
|
@@ -1,32 +1,8 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<!-- <meta charset="iso-8859-15"/> -->
|
|
||||||
<script src="./viewer.js" type="module"></script>
|
<script src="./viewer.js" type="module"></script>
|
||||||
<!-- <link href="https://fonts.googleapis.com/css?family=Mansalva&display=swap" rel="stylesheet" /> -->
|
|
||||||
<link
|
|
||||||
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
|
||||||
rel="stylesheet"
|
|
||||||
/>
|
|
||||||
<style>
|
<style>
|
||||||
body {
|
|
||||||
/* font-family: 'Mansalva', cursive;*/
|
|
||||||
/* font-family: 'Mansalva', cursive; */
|
|
||||||
/* font-family: 'arial'; */
|
|
||||||
/* font-family: "trebuchet ms", verdana, arial; */
|
|
||||||
}
|
|
||||||
/* div {
|
|
||||||
font-family: 'arial';
|
|
||||||
} */
|
|
||||||
/* .mermaid-main-font {
|
|
||||||
font-family: "trebuchet ms", verdana, arial;
|
|
||||||
font-family: var(--mermaid-font-family);
|
|
||||||
} */
|
|
||||||
/* :root {
|
|
||||||
--mermaid-font-family: '"trebuchet ms", verdana, arial';
|
|
||||||
--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive;
|
|
||||||
--mermaid-font-family: '"Lucida Console", Monaco, monospace';
|
|
||||||
} */
|
|
||||||
svg {
|
svg {
|
||||||
border: 2px solid darkred;
|
border: 2px solid darkred;
|
||||||
}
|
}
|
||||||
@@ -36,21 +12,5 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body></body>
|
||||||
<!-- <script src="./mermaid.js"></script> -->
|
|
||||||
<script>
|
|
||||||
// Notice startOnLoad=false
|
|
||||||
// This prevents default handling in mermaid from render before the e2e logic is applied
|
|
||||||
// mermaid.initialize({
|
|
||||||
// startOnLoad: false,
|
|
||||||
// useMaxWidth: true,
|
|
||||||
// // "themeCSS": ":root { --mermaid-font-family: \"trebuchet ms\", verdana, arial;}",
|
|
||||||
// // fontFamily: '\"trebuchet ms\", verdana, arial;'
|
|
||||||
// // fontFamily: '"Comic Sans MS", "Comic Sans", cursive'
|
|
||||||
// // fontFamily: '"Mansalva", cursive',
|
|
||||||
// // fontFamily: '"Noto Sans SC", sans-serif'
|
|
||||||
// fontFamily: '"Noto Sans SC", sans-serif'
|
|
||||||
// });
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
@@ -57,22 +57,28 @@
|
|||||||
<div>Security check</div>
|
<div>Security check</div>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph external
|
%% Actors
|
||||||
subgraph internal
|
A
|
||||||
inside
|
subgraph Sub
|
||||||
end
|
B --> C
|
||||||
end
|
end
|
||||||
outside --> inside
|
|
||||||
|
%% Accusations
|
||||||
|
A --L --> Sub
|
||||||
|
|
||||||
|
%% Offense
|
||||||
|
B --> A
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
flowchart LR
|
stateDiagram-v2
|
||||||
subgraph parent
|
|
||||||
subgraph childB
|
[*] --> S1
|
||||||
grandchild
|
S1 --> S2: long line using<br/>should work
|
||||||
end
|
S1 --> S3: long line using <br>should work
|
||||||
end
|
S1 --> S4: long line using \\nshould work
|
||||||
foo --> childA </pre
|
|
||||||
>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
gantt
|
gantt
|
||||||
title Style today marker (vertical line should be 5px wide and half-transparent blue)
|
title Style today marker (vertical line should be 5px wide and half-transparent blue)
|
||||||
|
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 13 KiB |