diff --git a/.esbuild/build.ts b/.esbuild/build.ts
index 471fb5c66..894aac321 100644
--- a/.esbuild/build.ts
+++ b/.esbuild/build.ts
@@ -2,7 +2,7 @@ import { build } from 'esbuild';
import { mkdir, writeFile } from 'node:fs/promises';
import { packageOptions } from '../.build/common.js';
import { generateLangium } from '../.build/generateLangium.js';
-import { MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js';
+import { type MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js';
const shouldVisualize = process.argv.includes('--visualize');
diff --git a/.esbuild/jisonPlugin.ts b/.esbuild/jisonPlugin.ts
index de801ea9f..007516f08 100644
--- a/.esbuild/jisonPlugin.ts
+++ b/.esbuild/jisonPlugin.ts
@@ -1,6 +1,6 @@
import { readFile } from 'node:fs/promises';
import { transformJison } from '../.build/jisonTransformer.js';
-import { Plugin } from 'esbuild';
+import type { Plugin } from 'esbuild';
export const jisonPlugin: Plugin = {
name: 'jison',
diff --git a/.esbuild/util.ts b/.esbuild/util.ts
index 7e0fd27ea..522176113 100644
--- a/.esbuild/util.ts
+++ b/.esbuild/util.ts
@@ -56,7 +56,7 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
const external: string[] = ['require', 'fs', 'path'];
const { name, file, packageName } = packageOptions[entryName];
const outFileName = getFileName(name, options);
- let output: BuildOptions = buildOptions({
+ const output: BuildOptions = buildOptions({
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
entryPoints: {
[outFileName]: `src/${file}`,
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index c9428c9f5..0103a1b8c 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -25,7 +25,7 @@ module.exports = {
'plugin:json/recommended',
'plugin:markdown/recommended-legacy',
'plugin:@cspell/recommended',
- 'prettier',
+ 'biome',
],
plugins: [
'@typescript-eslint',
diff --git a/.github/lychee.toml b/.github/lychee.toml
index c5a2f0e45..2e3b08c41 100644
--- a/.github/lychee.toml
+++ b/.github/lychee.toml
@@ -41,7 +41,10 @@ exclude = [
"https://bundlephobia.com",
# Chrome webstore migration issue. Temporary
-"https://chromewebstore.google.com"
+"https://chromewebstore.google.com",
+
+# Drupal 403
+"https://(www.)?drupal.org"
]
# Exclude all private IPs from checking.
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index 6477c9eb5..a75bbf83d 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -1,9 +1,3 @@
-# We use github cache to save snapshots between runs.
-# For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
-# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
-# These are then downloaded before running the E2E, providing the reference snapshots.
-# If there are any errors, the diff image is uploaded to artifacts, and the user is notified.
-
name: E2E
on:
@@ -72,16 +66,6 @@ jobs:
mkdir -p cypress/snapshots/stats/base
mv stats cypress/snapshots/stats/base
- - name: Cypress run
- uses: cypress-io/github-action@v6
- id: cypress-snapshot-gen
- if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
- with:
- install: false
- start: pnpm run dev
- wait-on: 'http://localhost:9000'
- browser: chrome
-
e2e:
runs-on: ubuntu-latest
container:
@@ -146,6 +130,10 @@ jobs:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
VITEST_COVERAGE: true
CYPRESS_COMMIT: ${{ github.sha }}
+ ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }}
+ ARGOS_PARALLEL: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
+ ARGOS_PARALLEL_TOTAL: 4
+ ARGOS_PARALLEL_INDEX: ${{ matrix.containers }}
- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v4
@@ -158,55 +146,3 @@ jobs:
fail_ci_if_error: false
verbose: true
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
-
- # We upload the artifacts into numbered archives to prevent overwriting
- - name: Upload Artifacts
- uses: actions/upload-artifact@v4
- if: ${{ always() }}
- with:
- name: snapshots-${{ matrix.containers }}
- retention-days: 1
- path: ./cypress/snapshots
-
- combineArtifacts:
- needs: e2e
- runs-on: ubuntu-latest
- if: ${{ always() }}
- steps:
- # Download all snapshot artifacts and merge them into a single folder
- - name: Download All Artifacts
- uses: actions/download-artifact@v4
- with:
- path: snapshots
- pattern: snapshots-*
- merge-multiple: true
-
- # For successful push events, we save the snapshots cache
- - name: Save snapshots cache
- id: cache-upload
- if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }}
- uses: actions/cache/save@v4
- with:
- path: ./snapshots
- key: ${{ runner.os }}-snapshots-${{ github.event.after }}
-
- - name: Flatten images to a folder
- if: ${{ needs.e2e.result == 'failure' }}
- run: |
- mkdir errors
- cd snapshots
- find . -mindepth 2 -type d -name "*__diff_output__*" -exec sh -c 'mv "$0"/*.png ../errors/' {} \;
-
- - name: Upload Error snapshots
- if: ${{ needs.e2e.result == 'failure' }}
- uses: actions/upload-artifact@v4
- id: upload-artifacts
- with:
- name: error-snapshots
- retention-days: 10
- path: errors/
-
- - name: Notify Users
- if: ${{ needs.e2e.result == 'failure' }}
- run: |
- echo "::error title=Visual tests failed::You can view images that failed by downloading the error-snapshots artifact: ${{ steps.upload-artifacts.outputs.artifact-url }}"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 8f5995d71..ef532a89d 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -37,9 +37,9 @@ jobs:
- name: Run Linting
shell: bash
run: |
- if ! pnpm run lint; then
+ if ! pnpm run lint:ci; then
# print a nice error message on lint failure
- ERROR_MESSAGE='Running `pnpm run lint` failed.'
+ ERROR_MESSAGE='Running `pnpm run lint:ci` failed.'
ERROR_MESSAGE+=' Running `pnpm -w run lint:fix` may fix this issue. '
ERROR_MESSAGE+=" If this error doesn't occur on your local machine,"
ERROR_MESSAGE+=' make sure your packages are up-to-date by running `pnpm install`.'
diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs
index 86af4f513..3afd09905 100644
--- a/.lintstagedrc.mjs
+++ b/.lintstagedrc.mjs
@@ -1,10 +1,6 @@
export default {
'!(docs/**/*)*.{ts,js,html,md,mts}': [
- 'eslint --cache --cache-strategy content --fix',
- // don't cache prettier yet, since we use `prettier-plugin-jsdoc`,
- // and prettier doesn't invalidate cache on plugin updates"
- // https://prettier.io/docs/en/cli.html#--cache
- 'prettier --write',
+ 'biome check --no-errors-on-unmatched --files-ignore-unknown=true --write',
],
'.cspell/*.txt': ['tsx scripts/fixCSpell.ts'],
'**/*.jison': ['pnpm -w run lint:jison'],
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index c70080426..000000000
--- a/.prettierignore
+++ /dev/null
@@ -1,20 +0,0 @@
-dist
-cypress/platform/xss3.html
-.cache
-.pnpm-store
-coverage
-# Autogenerated by PNPM
-pnpm-lock.yaml
-stats
-**/.vitepress/components.d.ts
-**/.vitepress/cache
-.nyc_output
-# Autogenerated by `pnpm run --filter mermaid types:build-config`
-packages/mermaid/src/config.type.ts
-# autogenereated by langium-cli
-generated/
-# Ignore the files creates in /demos/dev except for example.html
-demos/dev/**
-!/demos/dev/example.html
-# TODO: Lots of errors to fix
-cypress/platform/state-refactor.html
diff --git a/.prettierrc.json b/.prettierrc.json
deleted file mode 100644
index 28aa6e766..000000000
--- a/.prettierrc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "endOfLine": "auto",
- "printWidth": 100,
- "singleQuote": true,
- "useTabs": false,
- "tabWidth": 2,
- "trailingComma": "es5"
-}
diff --git a/.vite/build.ts b/.vite/build.ts
index 7ce93a497..49806c3ab 100644
--- a/.vite/build.ts
+++ b/.vite/build.ts
@@ -1,4 +1,4 @@
-import { build, InlineConfig, type PluginOption } from 'vite';
+import { build, type InlineConfig, type PluginOption } from 'vite';
import { resolve } from 'path';
import { fileURLToPath } from 'url';
import jisonPlugin from './jisonPlugin.js';
@@ -48,7 +48,7 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
const external: (string | RegExp)[] = ['require', 'fs', 'path'];
console.log(entryName, packageOptions[entryName]);
const { name, file, packageName } = packageOptions[entryName];
- let output: OutputOptions = [
+ const output: OutputOptions = [
{
name,
format: 'esm',
diff --git a/.vite/jsonSchemaPlugin.ts b/.vite/jsonSchemaPlugin.ts
index 2e5b5cc0b..3614d5b45 100644
--- a/.vite/jsonSchemaPlugin.ts
+++ b/.vite/jsonSchemaPlugin.ts
@@ -1,4 +1,4 @@
-import { PluginOption } from 'vite';
+import type { PluginOption } from 'vite';
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
/**
diff --git a/README.md b/README.md
index d368a4349..8d5eebfeb 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,7 @@ Try Live Editor previews of future releases:
diff --git a/biome.json b/biome.json
new file mode 100644
index 000000000..19da2048f
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,230 @@
+{
+ "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json",
+ "files": {
+ "ignore": [
+ "**/contributor-names.json",
+ "**/generated/",
+ "**/knsv*.html",
+ "**/local*.html",
+ "**/stats/",
+ "**/user-avatars/*",
+ "./.vscode/**",
+ "cypress/platform/current.html",
+ "cypress/platform/experimental.html",
+ "cypress/platform/xss3.html",
+ "cypress/platform/state-refactor.html",
+ "cypress/screenshots/",
+ "cypress/snapshots/",
+ "demos/dev/**",
+ "packages/mermaid/src/config.type.ts"
+ ]
+ },
+ "formatter": {
+ "enabled": true,
+ "formatWithErrors": false,
+ "indentStyle": "space",
+ "indentWidth": 2,
+ "lineEnding": "lf",
+ "lineWidth": 100,
+ "attributePosition": "auto"
+ },
+ "organizeImports": { "enabled": false },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "recommended": false,
+ "complexity": {
+ "noBannedTypes": "error",
+ "noExtraBooleanCast": "error",
+ "noMultipleSpacesInRegularExpressionLiterals": "error",
+ "noUselessCatch": "error",
+ "noUselessThisAlias": "error",
+ "noUselessTypeConstraint": "error",
+ "noWith": "error",
+ "useFlatMap": "error"
+ },
+ "correctness": {
+ "noConstAssign": "error",
+ "noConstantCondition": "error",
+ "noEmptyCharacterClassInRegex": "error",
+ "noEmptyPattern": "error",
+ "noGlobalObjectCalls": "error",
+ "noInnerDeclarations": "error",
+ "noInvalidConstructorSuper": "error",
+ "noNewSymbol": "error",
+ "noNonoctalDecimalEscape": "error",
+ "noPrecisionLoss": "error",
+ "noSelfAssign": "error",
+ "noSetterReturn": "error",
+ "noSwitchDeclarations": "error",
+ "noUndeclaredVariables": "error",
+ "noUnreachable": "error",
+ "noUnreachableSuper": "error",
+ "noUnsafeFinally": "error",
+ "noUnsafeOptionalChaining": "error",
+ "noUnusedLabels": "error",
+ "noUnusedVariables": "off",
+ "useArrayLiterals": "off",
+ "useIsNan": "error",
+ "useValidForDirection": "error",
+ "useYield": "error"
+ },
+ "style": {
+ "noNamespace": "error",
+ "useAsConstAssertion": "error",
+ "useBlockStatements": "error",
+ "useForOf": "error",
+ "useImportType": "error",
+ "useNamingConvention": {
+ "level": "off",
+ "options": { "strictCase": false }
+ }
+ },
+ "suspicious": {
+ "noAssignInExpressions": "warn",
+ "noAsyncPromiseExecutor": "error",
+ "noCatchAssign": "error",
+ "noClassAssign": "error",
+ "noCompareNegZero": "error",
+ "noConsoleLog": "off",
+ "noControlCharactersInRegex": "error",
+ "noDebugger": "error",
+ "noDuplicateCase": "error",
+ "noDuplicateClassMembers": "error",
+ "noDuplicateObjectKeys": "error",
+ "noDuplicateParameters": "error",
+ "noEmptyBlockStatements": "off",
+ "noExplicitAny": "off",
+ "noExtraNonNullAssertion": "error",
+ "noFallthroughSwitchClause": "error",
+ "noFunctionAssign": "error",
+ "noGlobalAssign": "error",
+ "noImportAssign": "error",
+ "noMisleadingCharacterClass": "error",
+ "noMisleadingInstantiator": "error",
+ "noPrototypeBuiltins": "off",
+ "noRedeclare": "error",
+ "noShadowRestrictedNames": "error",
+ "noUnsafeDeclarationMerging": "error",
+ "noUnsafeNegation": "error",
+ "useGetterReturn": "error",
+ "useIsArray": "error",
+ "useValidTypeof": "error"
+ }
+ }
+ },
+ "javascript": {
+ "formatter": {
+ "jsxQuoteStyle": "double",
+ "quoteProperties": "asNeeded",
+ "trailingCommas": "es5",
+ "semicolons": "always",
+ "arrowParentheses": "always",
+ "bracketSpacing": true,
+ "bracketSameLine": false,
+ "quoteStyle": "single",
+ "attributePosition": "auto"
+ },
+ "globals": [
+ "it",
+ "describe",
+ "beforeEach",
+ "beforeAll",
+ "afterEach",
+ "cy",
+ "expect",
+ "context",
+ "Cypress"
+ ]
+ },
+ "overrides": [
+ {
+ "include": ["cypress/**", "demos/**", "**/scripts"],
+ "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } }
+ },
+ { "include": ["*.{js,jsx,mjs,cjs}"], "linter": { "rules": {} } },
+ { "include": ["*.{ts,tsx}"], "linter": { "rules": {} } },
+ {
+ "include": ["*.spec.{ts,js}", "cypress/**", "demos/**", "**/docs/**"],
+ "linter": {
+ "rules": {
+ "correctness": { "noUnusedVariables": "off" },
+ "style": {
+ "useNamingConvention": "off"
+ }
+ }
+ }
+ },
+ {
+ "include": ["*.spec.{ts,js}", "tests/**", "cypress/**/*.js"],
+ "linter": {
+ "rules": {
+ "style": {
+ "useNamingConvention": "off"
+ }
+ }
+ }
+ },
+ {
+ "include": ["*.html", "*.md", "**/*.md/*"],
+ "linter": {
+ "rules": {
+ "correctness": {
+ "noUndeclaredVariables": "off",
+ "noUnusedVariables": "off"
+ },
+ "style": { "noVar": "error" }
+ }
+ }
+ },
+ { "include": ["*.md"] },
+ {
+ "include": ["**/*.md/**"],
+ "linter": {
+ "rules": {
+ "correctness": {
+ "noUndeclaredVariables": "off",
+ "noUnusedVariables": "off"
+ }
+ }
+ }
+ },
+ {
+ "include": ["*.ts", "*.tsx", "*.mts", "*.cts"],
+ "linter": {
+ "rules": {
+ "correctness": {
+ "noConstAssign": "off",
+ "noGlobalObjectCalls": "off",
+ "noInvalidConstructorSuper": "off",
+ "noNewSymbol": "off",
+ "noSetterReturn": "off",
+ "noUndeclaredVariables": "off",
+ "noUnreachable": "off",
+ "noUnreachableSuper": "off"
+ },
+ "style": {
+ "noArguments": "error",
+ "noVar": "error",
+ "useConst": "error"
+ },
+ "suspicious": {
+ "noDuplicateClassMembers": "off",
+ "noDuplicateObjectKeys": "off",
+ "noDuplicateParameters": "off",
+ "noFunctionAssign": "off",
+ "noImportAssign": "off",
+ "noRedeclare": "off",
+ "noUnsafeNegation": "off",
+ "useGetterReturn": "off"
+ }
+ }
+ }
+ }
+ ],
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ }
+}
diff --git a/cypress.config.ts b/cypress.config.ts
index 4182d92a8..3346b5549 100644
--- a/cypress.config.ts
+++ b/cypress.config.ts
@@ -2,6 +2,8 @@ import { defineConfig } from 'cypress';
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
import coverage from '@cypress/code-coverage/task';
import eyesPlugin from '@applitools/eyes-cypress';
+import { registerArgosTask } from '@argos-ci/cypress/task';
+
export default eyesPlugin(
defineConfig({
projectId: 'n2sma2',
@@ -17,10 +19,17 @@ export default eyesPlugin(
}
return launchOptions;
});
- addMatchImageSnapshotPlugin(on, config);
// copy any needed variables from process.env to config.env
config.env.useAppli = process.env.USE_APPLI ? true : false;
+ config.env.useArgos = !!process.env.CI;
+ if (config.env.useArgos) {
+ registerArgosTask(on, config, {
+ token: 'fc3a35cf5200db928d65b2047861582d9444032b',
+ });
+ } else {
+ addMatchImageSnapshotPlugin(on, config);
+ }
// do not forget to return the changed config object!
return config;
},
diff --git a/cypress/helpers/util.ts b/cypress/helpers/util.ts
index d7db7dfb5..89feb8a29 100644
--- a/cypress/helpers/util.ts
+++ b/cypress/helpers/util.ts
@@ -95,19 +95,8 @@ export const openURLAndVerifyRendering = (
options: CypressMermaidConfig,
validation?: any
): void => {
- const useAppli: boolean = Cypress.env('useAppli');
const name: string = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
- if (useAppli) {
- cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`);
- cy.eyesOpen({
- appName: 'Mermaid',
- testName: name,
- batchName: Cypress.spec.name,
- batchId: batchId + Cypress.spec.name,
- });
- }
-
cy.visit(url);
// cy.window().should('have.property', 'rendered', true);
cy.get('svg').should('be.visible');
@@ -116,11 +105,27 @@ export const openURLAndVerifyRendering = (
cy.get('svg').should(validation);
}
+ verifyScreenshot(name);
+};
+
+export const verifyScreenshot = (name: string): void => {
+ const useAppli: boolean = Cypress.env('useAppli');
+ const useArgos: boolean = Cypress.env('useArgos');
+
if (useAppli) {
+ cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`);
+ cy.eyesOpen({
+ appName: 'Mermaid',
+ testName: name,
+ batchName: Cypress.spec.name,
+ batchId: batchId + Cypress.spec.name,
+ });
cy.log(`Check eyes ${Cypress.spec.name}`);
cy.eyesCheckWindow('Click!');
cy.log(`Closing eyes ${Cypress.spec.name}`);
cy.eyesClose();
+ } else if (useArgos) {
+ cy.argosScreenshot(name);
} else {
cy.matchImageSnapshot(name);
}
diff --git a/cypress/integration/other/configuration.spec.js b/cypress/integration/other/configuration.spec.js
index 544eab40f..ad6b21e29 100644
--- a/cypress/integration/other/configuration.spec.js
+++ b/cypress/integration/other/configuration.spec.js
@@ -1,4 +1,4 @@
-import { renderGraph } from '../../helpers/util.ts';
+import { renderGraph, verifyScreenshot } from '../../helpers/util.ts';
describe('Configuration', () => {
describe('arrowMarkerAbsolute', () => {
it('should handle default value false of arrowMarkerAbsolute', () => {
@@ -119,8 +119,7 @@ describe('Configuration', () => {
const url = 'http://localhost:9000/regression/issue-1874.html';
cy.visit(url);
cy.window().should('have.property', 'rendered', true);
- cy.get('svg').should('be.visible');
- cy.matchImageSnapshot(
+ verifyScreenshot(
'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives'
);
});
@@ -145,7 +144,7 @@ describe('Configuration', () => {
// none of the diagrams should be error diagrams
expect($svg).to.not.contain('Syntax error');
});
- cy.matchImageSnapshot(
+ verifyScreenshot(
'configuration.spec-should-not-render-error-diagram-if-suppressErrorRendering-is-set'
);
});
@@ -162,7 +161,7 @@ describe('Configuration', () => {
// some of the diagrams should be error diagrams
expect($svg).to.contain('Syntax error');
});
- cy.matchImageSnapshot(
+ verifyScreenshot(
'configuration.spec-should-render-error-diagram-if-suppressErrorRendering-is-not-set'
);
});
diff --git a/cypress/integration/other/xss.spec.js b/cypress/integration/other/xss.spec.js
index d041fa5f4..1e51d2f23 100644
--- a/cypress/integration/other/xss.spec.js
+++ b/cypress/integration/other/xss.spec.js
@@ -10,7 +10,6 @@ describe('XSS', () => {
cy.wait(1000).then(() => {
cy.get('.mermaid').should('exist');
});
- cy.get('svg');
});
it('should not allow tags in the css', () => {
diff --git a/cypress/integration/rendering/c4.spec.js b/cypress/integration/rendering/c4.spec.js
index 59af6504b..f699bd429 100644
--- a/cypress/integration/rendering/c4.spec.js
+++ b/cypress/integration/rendering/c4.spec.js
@@ -30,7 +30,6 @@ describe('C4 diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('should render a simple C4Container diagram', () => {
imgSnapshotTest(
@@ -50,7 +49,6 @@ describe('C4 diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('should render a simple C4Component diagram', () => {
imgSnapshotTest(
@@ -69,7 +67,6 @@ describe('C4 diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('should render a simple C4Dynamic diagram', () => {
imgSnapshotTest(
@@ -93,7 +90,6 @@ describe('C4 diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('should render a simple C4Deployment diagram', () => {
imgSnapshotTest(
@@ -117,6 +113,5 @@ describe('C4 diagram', () => {
`,
{}
);
- cy.get('svg');
});
});
diff --git a/cypress/integration/rendering/classDiagram.spec.js b/cypress/integration/rendering/classDiagram.spec.js
index cab3649df..a98a359ed 100644
--- a/cypress/integration/rendering/classDiagram.spec.js
+++ b/cypress/integration/rendering/classDiagram.spec.js
@@ -32,7 +32,6 @@ describe('Class diagram', () => {
`,
{ logLevel: 1 }
);
- cy.get('svg');
});
it('2: should render a simple class diagrams with cardinality', () => {
@@ -61,7 +60,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('3: should render a simple class diagram with different visibilities', () => {
@@ -79,7 +77,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('4: should render a simple class diagram with comments', () => {
@@ -109,7 +106,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('5: should render a simple class diagram with abstract method', () => {
@@ -121,7 +117,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('6: should render a simple class diagram with static method', () => {
@@ -133,7 +128,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('7: should render a simple class diagram with Generic class', () => {
@@ -153,7 +147,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('8: should render a simple class diagram with Generic class and relations', () => {
@@ -174,7 +167,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('9: should render a simple class diagram with clickable link', () => {
@@ -196,7 +188,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('10: should render a simple class diagram with clickable callback', () => {
@@ -218,7 +209,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('11: should render a simple class diagram with return type on method', () => {
@@ -233,7 +223,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('12: should render a simple class diagram with generic types', () => {
@@ -249,7 +238,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('13: should render a simple class diagram with css classes applied', () => {
@@ -267,7 +255,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('14: should render a simple class diagram with css classes applied directly', () => {
@@ -283,7 +270,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('15: should render a simple class diagram with css classes applied to multiple classes', () => {
@@ -298,7 +284,6 @@ describe('Class diagram', () => {
`,
{}
);
- cy.get('svg');
});
it('16: should render multiple class diagrams', () => {
@@ -351,7 +336,6 @@ describe('Class diagram', () => {
],
{}
);
- cy.get('svg');
});
// it('17: should render a class diagram when useMaxWidth is true (default)', () => {
@@ -421,7 +405,6 @@ describe('Class diagram', () => {
`,
{ logLevel: 1 }
);
- cy.get('svg');
});
it('should render class diagram with newlines in title', () => {
@@ -439,7 +422,6 @@ describe('Class diagram', () => {
+quack()
}
`);
- cy.get('svg');
});
it('should render class diagram with many newlines in title', () => {
diff --git a/cypress/integration/rendering/erDiagram.spec.js b/cypress/integration/rendering/erDiagram.spec.js
index 578f5a398..1a2340906 100644
--- a/cypress/integration/rendering/erDiagram.spec.js
+++ b/cypress/integration/rendering/erDiagram.spec.js
@@ -218,7 +218,6 @@ describe('Entity Relationship Diagram', () => {
`,
{ loglevel: 1 }
);
- cy.get('svg');
});
it('should render entities with keys', () => {
diff --git a/cypress/integration/rendering/quadrantChart.spec.js b/cypress/integration/rendering/quadrantChart.spec.js
index 83a1455c6..4830db656 100644
--- a/cypress/integration/rendering/quadrantChart.spec.js
+++ b/cypress/integration/rendering/quadrantChart.spec.js
@@ -8,7 +8,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render a complete quadrant chart', () => {
imgSnapshotTest(
@@ -30,7 +29,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render without points', () => {
imgSnapshotTest(
@@ -46,7 +44,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should able to render y-axix on right side', () => {
imgSnapshotTest(
@@ -63,7 +60,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should able to render x-axix on bottom', () => {
imgSnapshotTest(
@@ -80,7 +76,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should able to render x-axix on bottom and y-axis on right', () => {
imgSnapshotTest(
@@ -97,7 +92,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render without title', () => {
imgSnapshotTest(
@@ -112,7 +106,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should use all the config', () => {
imgSnapshotTest(
@@ -135,7 +128,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should use all the theme variable', () => {
imgSnapshotTest(
@@ -158,7 +150,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render x-axis labels in the center, if x-axis has two labels', () => {
imgSnapshotTest(
@@ -180,7 +171,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render y-axis labels in the center, if y-axis has two labels', () => {
imgSnapshotTest(
@@ -202,7 +192,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('should render both axes labels on the left and bottom, if both axes have only one label', () => {
imgSnapshotTest(
@@ -224,7 +213,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('it should render data points with styles', () => {
@@ -249,7 +237,6 @@ describe('Quadrant Chart', () => {
`,
{}
);
- cy.get('svg');
});
it('it should render data points with styles + classes', () => {
diff --git a/cypress/integration/rendering/requirement.spec.js b/cypress/integration/rendering/requirement.spec.js
index f33ae7a0c..343441848 100644
--- a/cypress/integration/rendering/requirement.spec.js
+++ b/cypress/integration/rendering/requirement.spec.js
@@ -44,6 +44,5 @@ describe('Requirement diagram', () => {
`,
{}
);
- cy.get('svg');
});
});
diff --git a/cypress/integration/rendering/sequencediagram.spec.js b/cypress/integration/rendering/sequencediagram.spec.js
index 1285a0832..7b4e98b4d 100644
--- a/cypress/integration/rendering/sequencediagram.spec.js
+++ b/cypress/integration/rendering/sequencediagram.spec.js
@@ -1,4 +1,4 @@
-///
+ sequenceDiagram + participant Alice + participant Bob + Alice<<->>Bob: Hello! + Alice<<->>Bob: Wow, we said that at the same time! + Bob<<-->>Alice: Bidirectional Arrows are so cool +