mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	Enable eslint-plugin-jest, eslint-plugin-cypress and wider scan
This commit is contained in:
		
				
					committed by
					
						
						MOREL Matthieu
					
				
			
			
				
	
			
			
			
						parent
						
							4089ee8786
						
					
				
				
					commit
					d84be0d792
				
			@@ -1,10 +1,8 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
describe('Class diagram V2', () => {
 | 
			
		||||
 | 
			
		||||
    it('0: should render a simple class diagram', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  it('0: should render a simple class diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
        classDiagram-v2
 | 
			
		||||
 | 
			
		||||
        classA -- classB : Inheritance
 | 
			
		||||
@@ -13,10 +11,10 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        classB -- classD
 | 
			
		||||
 | 
			
		||||
        `,
 | 
			
		||||
        {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('1: should render a simple class diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
@@ -47,7 +45,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -76,8 +74,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -95,7 +92,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      Class01 : +int publicGorilla
 | 
			
		||||
      Class01 : #int protectedMarmoset
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -103,7 +100,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
  it('should render multiple class diagrams', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      [
 | 
			
		||||
      `
 | 
			
		||||
        `
 | 
			
		||||
    classDiagram-v2
 | 
			
		||||
      Class01 "1" <|--|> "*" AveryLongClass : Cool
 | 
			
		||||
      <<interface>> Class01
 | 
			
		||||
@@ -125,7 +122,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
      `
 | 
			
		||||
        `
 | 
			
		||||
    classDiagram-v2
 | 
			
		||||
      Class01 "1" <|--|> "*" AveryLongClass : Cool
 | 
			
		||||
      <<interface>> Class01
 | 
			
		||||
@@ -148,7 +145,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
      ],
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -178,7 +175,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -190,7 +187,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      Class01 <|-- AveryLongClass : Cool
 | 
			
		||||
      Class01 : someMethod()*
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -202,7 +199,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      Class01 <|-- AveryLongClass : Cool
 | 
			
		||||
      Class01 : someMethod()$
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -222,7 +219,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -243,7 +240,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -265,7 +262,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      }
 | 
			
		||||
      link Class01 "google.com" "A Tooltip"
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -287,7 +284,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
      }
 | 
			
		||||
      callback Class01 "functionCall" "A Tooltip"
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -302,7 +299,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        testArray() bool[]
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -318,7 +315,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        testArray() bool[]
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -336,7 +333,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
 | 
			
		||||
      cssClass "Class10" exClass2
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -352,7 +349,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        testArray() bool[]
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -366,7 +363,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
 | 
			
		||||
      cssClass "Class10, class20" exClass2
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -379,7 +376,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        +String bar$
 | 
			
		||||
      }
 | 
			
		||||
            `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -404,7 +401,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        Student "1" --o "1" Bike : rides
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -429,7 +426,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        Student "1" --o "1" Bike : rides
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -453,7 +450,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        Student "1" --o "1" Bike : rides
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -477,7 +474,7 @@ describe('Class diagram V2', () => {
 | 
			
		||||
        Student "1" --o "1" Bike : rides
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
       {logLevel : 1, flowchart: { "htmlLabels": false },}
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('Class diagram', () => {
 | 
			
		||||
@@ -31,7 +30,7 @@ describe('Class diagram', () => {
 | 
			
		||||
        test()
 | 
			
		||||
      }
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,9 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Configuration and directives - nodes should be light blue', () => {
 | 
			
		||||
    it('No config - use default', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  it('No config - use default', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      graph TD
 | 
			
		||||
          A(Default) --> B[/Another/]
 | 
			
		||||
          A --> C[End]
 | 
			
		||||
@@ -13,13 +12,13 @@ describe('Configuration and directives - nodes should be light blue', () => {
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    it('Settigns from intitialize - nodes should be green', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  it('Settigns from intitialize - nodes should be green', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Forest) --> B[/Another/]
 | 
			
		||||
          A --> C[End]
 | 
			
		||||
@@ -27,13 +26,13 @@ graph TD
 | 
			
		||||
            B
 | 
			
		||||
            C
 | 
			
		||||
          end          `,
 | 
			
		||||
        {theme:'forest'}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    it('Settings from initialize overriding themeVariable - nodes shold be red', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      { theme: 'forest' }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  it('Settings from initialize overriding themeVariable - nodes shold be red', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        %%{init: { 'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%%
 | 
			
		||||
@@ -45,13 +44,13 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {theme:'base', themeVariables:{ primaryColor: '#ff0000'}, logLevel: 0}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    it('Settings from directive - nodes should be grey', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      { theme: 'base', themeVariables: { primaryColor: '#ff0000' }, logLevel: 0 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  it('Settings from directive - nodes should be grey', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
        %%{init: { 'logLevel': 0, 'theme': 'neutral'} }%%
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Start) --> B[/Another/]
 | 
			
		||||
@@ -61,14 +60,14 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
    it('Settings from directive overriding theme variable - nodes should be red', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  it('Settings from directive overriding theme variable - nodes should be red', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
          %%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%%
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Start) --> B[/Another/]
 | 
			
		||||
@@ -78,13 +77,13 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
    it('Settings from initialize and directive - nodes should be grey', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  it('Settings from initialize and directive - nodes should be grey', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      %%{init: { 'logLevel': 0, 'theme': 'neutral'} }%%
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Start) --> B[/Another/]
 | 
			
		||||
@@ -94,13 +93,13 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {theme:'forest'}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    it('Theme from initialize, directive overriding theme variable - nodes should be red', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      { theme: 'forest' }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  it('Theme from initialize, directive overriding theme variable - nodes should be red', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      %%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%%
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Start) --> B[/Another/]
 | 
			
		||||
@@ -110,13 +109,13 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {theme:'base'}
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    it('Theme variable from initialize, theme from directive - nodes should be red', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      { theme: 'base' }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  it('Theme variable from initialize, theme from directive - nodes should be red', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      %%{init: { 'logLevel': 0, 'theme': 'base'} }%%
 | 
			
		||||
graph TD
 | 
			
		||||
          A(Start) --> B[/Another/]
 | 
			
		||||
@@ -126,16 +125,16 @@ graph TD
 | 
			
		||||
            C
 | 
			
		||||
          end
 | 
			
		||||
        `,
 | 
			
		||||
        {themeVariables:{primaryColor: '#ff0000'}}
 | 
			
		||||
      );
 | 
			
		||||
      { themeVariables: { primaryColor: '#ff0000' } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
  describe('when rendering several diagrams', () => {
 | 
			
		||||
    it('diagrams should not taint later diagrams', () => {
 | 
			
		||||
      const url = 'http://localhost:9000/theme-directives.html';
 | 
			
		||||
      cy.visit(url);
 | 
			
		||||
      cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
    describe('when rendering several diagrams', () => {
 | 
			
		||||
      it('diagrams should not taint later diagrams', () => {
 | 
			
		||||
        const url = 'http://localhost:9000/theme-directives.html';
 | 
			
		||||
        cy.visit(url);
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
        cy.percySnapshot();
 | 
			
		||||
      });
 | 
			
		||||
      cy.percySnapshot();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('State diagram', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,12 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('Flowchart', () => {
 | 
			
		||||
 | 
			
		||||
  it('34: testing the label width in percy', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `graph TD
 | 
			
		||||
      A[Christmas]
 | 
			
		||||
      `,
 | 
			
		||||
      { theme: 'forest' , fontFamily: '"Noto Sans SC", sans-serif' }
 | 
			
		||||
      { theme: 'forest', fontFamily: '"Noto Sans SC", sans-serif' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('Entity Relationship Diagram', () => {
 | 
			
		||||
@@ -9,7 +8,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
        ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -22,7 +21,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
        ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -34,7 +33,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        CUSTOMER ||--|{ ADDRESS : "invoiced at"
 | 
			
		||||
        CUSTOMER ||--|{ ADDRESS : "receives goods at"
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -47,7 +46,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        B ||--|{ C : likes
 | 
			
		||||
        C ||--|{ A : likes
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -65,7 +64,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        PRODUCT-CATEGORY ||--|{ PRODUCT : contains
 | 
			
		||||
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -73,18 +72,18 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
  it('should render multiple ER diagrams', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      [
 | 
			
		||||
      `
 | 
			
		||||
        `
 | 
			
		||||
    erDiagram
 | 
			
		||||
        CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
        ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
      `,
 | 
			
		||||
      `
 | 
			
		||||
        `
 | 
			
		||||
    erDiagram
 | 
			
		||||
        CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
        ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
      `
 | 
			
		||||
      `,
 | 
			
		||||
      ],
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -97,7 +96,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        BOOK }|..|{ GENRE : " "
 | 
			
		||||
        AUTHOR }|..|{ GENRE : "  "
 | 
			
		||||
      `,
 | 
			
		||||
      {logLevel : 1}
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -111,16 +110,15 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { er: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height', '465');
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(maxWidthValue).to.be.within(140 * .95, 140 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height', '465');
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(maxWidthValue).to.be.within(140 * 0.95, 140 * 1.05);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render an ER when useMaxWidth is false', () => {
 | 
			
		||||
@@ -132,14 +130,13 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { er: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(width).to.be.within(140 * .95, 140 * 1.05);
 | 
			
		||||
        expect(svg).to.have.attr('height', '465');
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(width).to.be.within(140 * 0.95, 140 * 1.05);
 | 
			
		||||
      expect(svg).to.have.attr('height', '465');
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render entities that have no relationships', () => {
 | 
			
		||||
@@ -165,7 +162,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        AUTHOR }|..|{ BOOK : writes
 | 
			
		||||
        BOOK { float price }
 | 
			
		||||
      `,
 | 
			
		||||
      { logLevel : 1 }
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -181,7 +178,7 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
        PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs
 | 
			
		||||
        EMPLOYEE { bool officer_of_firm }
 | 
			
		||||
      `,
 | 
			
		||||
      { logLevel : 1 }
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
@@ -192,9 +189,8 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
    erDiagram
 | 
			
		||||
        BOOK { string title PK "comment"}
 | 
			
		||||
      `,
 | 
			
		||||
      { logLevel : 1 }
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('Flowchart v2', () => {
 | 
			
		||||
@@ -29,7 +28,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
    it('3: a link with correct arrowhead to a subgraph', () => {
 | 
			
		||||
  it('3: a link with correct arrowhead to a subgraph', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `flowchart TD
 | 
			
		||||
        P1
 | 
			
		||||
@@ -69,7 +68,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      `flowchart TD
 | 
			
		||||
        a["<strong>Haiya</strong>"]---->b
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: false, flowchart: {htmlLabels: false}}
 | 
			
		||||
      { htmlLabels: false, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('6: should render non-escaped with html labels', () => {
 | 
			
		||||
@@ -77,7 +76,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      `flowchart TD
 | 
			
		||||
        a["<strong>Haiya</strong>"]===>b
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('7: should render a flowchart when useMaxWidth is true (default)', () => {
 | 
			
		||||
@@ -91,18 +90,17 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(446 * .95, 446 * 1.05);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        expect(maxWidthValue).to.be.within(290 * .95-1, 290 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.be.within(446 * 0.95, 446 * 1.05);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.be.within(290 * 0.95 - 1, 290 * 1.05);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('8: should render a flowchart when useMaxWidth is false', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
@@ -115,15 +113,14 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(height).to.be.within(446 * .95, 446 * 1.05);
 | 
			
		||||
        expect(width).to.be.within(290 * .95-1, 290 * 1.05);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(height).to.be.within(446 * 0.95, 446 * 1.05);
 | 
			
		||||
      expect(width).to.be.within(290 * 0.95 - 1, 290 * 1.05);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('V2 - 16: Render Stadium shape', () => {
 | 
			
		||||
@@ -141,7 +138,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      class A someclass;
 | 
			
		||||
      class C someclass;
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -156,7 +153,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
        b
 | 
			
		||||
        end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -171,7 +168,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
        b
 | 
			
		||||
        end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -192,7 +189,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
        B
 | 
			
		||||
    end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -222,7 +219,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
  routeur --> subnet1 & subnet2
 | 
			
		||||
  subnet1 & subnet2 --> nat --> internet
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -236,7 +233,7 @@ describe('Flowchart v2', () => {
 | 
			
		||||
     subcontainer-child--> subcontainer-sibling
 | 
			
		||||
  end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -258,11 +255,10 @@ end
 | 
			
		||||
sub_one --> sub_two
 | 
			
		||||
_one --> b
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  it('56: handle nested subgraphs with outgoing links 3', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `flowchart TB
 | 
			
		||||
@@ -275,7 +271,7 @@ _one --> b
 | 
			
		||||
    end
 | 
			
		||||
    process_B-->|via_AWSBatch|container_Beta
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('57: handle nested subgraphs with outgoing links 4', () => {
 | 
			
		||||
@@ -288,11 +284,10 @@ subgraph B
 | 
			
		||||
b
 | 
			
		||||
end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  it('57: handle nested subgraphs with outgoing links 2', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `flowchart TB
 | 
			
		||||
@@ -310,7 +305,7 @@ end
 | 
			
		||||
    three --> two
 | 
			
		||||
    two --> c2
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('57.x: handle nested subgraphs with outgoing links 5', () => {
 | 
			
		||||
@@ -326,7 +321,7 @@ flowchart TB
 | 
			
		||||
    process_A-->|messages|process_C
 | 
			
		||||
  end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('58: handle styling with style expressions', () => {
 | 
			
		||||
@@ -337,7 +332,7 @@ flowchart TB
 | 
			
		||||
    style id1 fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('59: handle styling of subgraphs and links', () => {
 | 
			
		||||
@@ -359,7 +354,7 @@ flowchart TD
 | 
			
		||||
  class T TestSub
 | 
			
		||||
  linkStyle 0,1 color:orange, stroke: orange;
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('60: handle styling for all node shapes - v2', () => {
 | 
			
		||||
@@ -389,7 +384,7 @@ flowchart TD
 | 
			
		||||
      style M stroke:#ff0000,fill:#ffcccc,color:#ff0000;
 | 
			
		||||
      style N stroke:#0000ff,fill:#ccccff,color:#0000ff;
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose', logLevel:2}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose', logLevel: 2 }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('61: fontawesome icons in edge labels', () => {
 | 
			
		||||
@@ -398,7 +393,7 @@ flowchart TD
 | 
			
		||||
      flowchart TD
 | 
			
		||||
        C -->|fa:fa-car Car| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('62: should render styled subgraphs', () => {
 | 
			
		||||
@@ -432,7 +427,7 @@ flowchart TD
 | 
			
		||||
      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
 | 
			
		||||
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('63: title on subgraphs should be themable', () => {
 | 
			
		||||
@@ -448,7 +443,7 @@ flowchart TD
 | 
			
		||||
      end
 | 
			
		||||
      A --> B
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('65: text-color from classes', () => {
 | 
			
		||||
@@ -459,7 +454,7 @@ flowchart TD
 | 
			
		||||
        Lorem --> Ipsum --> Dolor
 | 
			
		||||
        class Lorem,Dolor dark
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('66: More nested subgraph cases (TB)', () => {
 | 
			
		||||
@@ -477,7 +472,7 @@ flowchart TB
 | 
			
		||||
    two --> c2
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('67: More nested subgraph cases (RL)', () => {
 | 
			
		||||
@@ -495,7 +490,7 @@ flowchart RL
 | 
			
		||||
    two --> c2
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('68: More nested subgraph cases (BT)', () => {
 | 
			
		||||
@@ -513,7 +508,7 @@ flowchart BT
 | 
			
		||||
    two --> c2
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('69: More nested subgraph cases (LR)', () => {
 | 
			
		||||
@@ -531,7 +526,7 @@ flowchart LR
 | 
			
		||||
    two --> c2
 | 
			
		||||
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('70: Handle nested subgraph cases (TB) link out and link between subgraphs', () => {
 | 
			
		||||
@@ -547,7 +542,7 @@ flowchart TB
 | 
			
		||||
   S1 --> S2
 | 
			
		||||
   sub1 --> sub4
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('71: Handle nested subgraph cases (RL) link out and link between subgraphs', () => {
 | 
			
		||||
@@ -563,7 +558,7 @@ flowchart RL
 | 
			
		||||
   S1 --> S2
 | 
			
		||||
   sub1 --> sub4
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('72: Handle nested subgraph cases (BT) link out and link between subgraphs', () => {
 | 
			
		||||
@@ -579,7 +574,7 @@ flowchart BT
 | 
			
		||||
   S1 --> S2
 | 
			
		||||
   sub1 --> sub4
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('74: Handle nested subgraph cases (RL) link out and link between subgraphs', () => {
 | 
			
		||||
@@ -595,10 +590,10 @@ flowchart RL
 | 
			
		||||
   S1 --> S2
 | 
			
		||||
   sub1 --> sub4
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
    it('74: Handle labels for multiple edges from and to the same couple of nodes', () => {
 | 
			
		||||
  it('74: Handle labels for multiple edges from and to the same couple of nodes', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
flowchart RL
 | 
			
		||||
@@ -607,7 +602,7 @@ flowchart RL
 | 
			
		||||
      a1 -- l2 --> a2
 | 
			
		||||
    end
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -617,11 +612,11 @@ flowchart RL
 | 
			
		||||
      a{{"Lorem 'ipsum' dolor 'sit' amet, 'consectetur' adipiscing 'elit'."}}
 | 
			
		||||
      --> b{{"Lorem #quot;ipsum#quot; dolor #quot;sit#quot; amet,#quot;consectetur#quot; adipiscing #quot;elit#quot;."}}    
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
    it('2050: handling of different rendering direction in subgraphs', () => {
 | 
			
		||||
  it('2050: handling of different rendering direction in subgraphs', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    flowchart LR
 | 
			
		||||
@@ -640,7 +635,7 @@ flowchart RL
 | 
			
		||||
      A --> TOP --> B
 | 
			
		||||
      B1 --> B2
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('Graph', () => {
 | 
			
		||||
@@ -38,7 +37,7 @@ describe('Graph', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[Car]
 | 
			
		||||
      `,
 | 
			
		||||
      {fontFamily: 'courier'}
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +52,7 @@ describe('Graph', () => {
 | 
			
		||||
      C -->|Two| E[\\iPhone\\]
 | 
			
		||||
      C -->|Three| F[Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { fontFamily: 'courier'}
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -69,7 +68,7 @@ describe('Graph', () => {
 | 
			
		||||
      classDef processHead fill:#888888,color:white,font-weight:bold,stroke-width:3px,stroke:#001f3f
 | 
			
		||||
      class 1A,1B,D,E processHead
 | 
			
		||||
      `,
 | 
			
		||||
      {fontFamily: 'courier'}
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -98,7 +97,7 @@ describe('Graph', () => {
 | 
			
		||||
      35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
 | 
			
		||||
      36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -169,7 +168,7 @@ describe('Graph', () => {
 | 
			
		||||
      9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
 | 
			
		||||
      9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -178,7 +177,7 @@ describe('Graph', () => {
 | 
			
		||||
      `
 | 
			
		||||
    graph TB;subgraph "number as labels";1;end;
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -190,7 +189,7 @@ describe('Graph', () => {
 | 
			
		||||
        a1-->a2
 | 
			
		||||
      end
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -202,7 +201,7 @@ describe('Graph', () => {
 | 
			
		||||
        a1-->a2
 | 
			
		||||
      end
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -237,7 +236,7 @@ describe('Graph', () => {
 | 
			
		||||
      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
 | 
			
		||||
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -339,7 +338,7 @@ describe('Graph', () => {
 | 
			
		||||
      sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
 | 
			
		||||
      sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
 | 
			
		||||
      `,
 | 
			
		||||
       { fontFamily: 'courier' }
 | 
			
		||||
      { fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -357,7 +356,7 @@ describe('Graph', () => {
 | 
			
		||||
        listUrl: false,
 | 
			
		||||
        listId: 'color styling',
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -379,8 +378,9 @@ describe('Graph', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        listUrl: false,
 | 
			
		||||
        listId: 'color styling', fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0
 | 
			
		||||
        listId: 'color styling',
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -395,7 +395,7 @@ describe('Graph', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -414,7 +414,7 @@ describe('Graph', () => {
 | 
			
		||||
      class A someclass;
 | 
			
		||||
      class C someclass;
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -431,7 +431,7 @@ describe('Graph', () => {
 | 
			
		||||
        linkStyle 1 stroke:DarkGray,stroke-width:2px
 | 
			
		||||
        linkStyle 2 stroke:DarkGray,stroke-width:2px
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -440,7 +440,7 @@ describe('Graph', () => {
 | 
			
		||||
      `graph LR
 | 
			
		||||
        a --> b --> c
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -449,7 +449,7 @@ describe('Graph', () => {
 | 
			
		||||
      `graph LR
 | 
			
		||||
        a --> b & c--> d
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -459,7 +459,7 @@ describe('Graph', () => {
 | 
			
		||||
      A[ h ] -- hello --> B[" test "]:::exClass & C --> D;
 | 
			
		||||
      classDef exClass background:#bbb,border:1px solid red;
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -481,7 +481,7 @@ describe('Graph', () => {
 | 
			
		||||
      click B testClick "click test"
 | 
			
		||||
      classDef someclass fill:#f96;
 | 
			
		||||
      class A someclass;`,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -522,7 +522,7 @@ describe('Graph', () => {
 | 
			
		||||
      linkStyle 1 stroke:greenyellow,stroke-width:2px
 | 
			
		||||
      style C fill:greenyellow,stroke:green,stroke-width:4px
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -545,7 +545,7 @@ describe('Graph', () => {
 | 
			
		||||
      click F "javascript:alert('test')" "script test"
 | 
			
		||||
      `,
 | 
			
		||||
      { securityLevel: 'loose', fontFamily: 'courier' }
 | 
			
		||||
      );
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('26: Set text color of nodes and links according to styles when html labels are enabled', () => {
 | 
			
		||||
@@ -584,7 +584,7 @@ describe('Graph', () => {
 | 
			
		||||
      click B "index.html#link-clicked" "link test"
 | 
			
		||||
      click D testClick "click test"
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -616,7 +616,7 @@ describe('Graph', () => {
 | 
			
		||||
      class A myClass1
 | 
			
		||||
      class D myClass2
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -640,7 +640,7 @@ describe('Graph', () => {
 | 
			
		||||
      classDef redBg fill:#622;
 | 
			
		||||
      classDef whiteTxt color: white;
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -652,7 +652,7 @@ describe('Graph', () => {
 | 
			
		||||
      eat --> sleep
 | 
			
		||||
      work --> eat
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -671,7 +671,7 @@ describe('Graph', () => {
 | 
			
		||||
      class A someclass;
 | 
			
		||||
      class C someclass;
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { htmlLabels: false } , fontFamily: 'courier'}
 | 
			
		||||
      { flowchart: { htmlLabels: false }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -694,7 +694,7 @@ describe('Graph', () => {
 | 
			
		||||
      `graph TD
 | 
			
		||||
      A[Christmas]
 | 
			
		||||
      `,
 | 
			
		||||
      {  }
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -712,7 +712,7 @@ describe('Graph', () => {
 | 
			
		||||
      C -----> E4
 | 
			
		||||
      C ======> E5
 | 
			
		||||
      `,
 | 
			
		||||
      {  }
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('36: should render escaped without html labels', () => {
 | 
			
		||||
@@ -720,7 +720,7 @@ describe('Graph', () => {
 | 
			
		||||
      `graph TD
 | 
			
		||||
        a["<strong>Haiya</strong>"]-->b
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: false, flowchart: {htmlLabels: false}}
 | 
			
		||||
      { htmlLabels: false, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('37: should render non-escaped with html labels', () => {
 | 
			
		||||
@@ -728,7 +728,7 @@ describe('Graph', () => {
 | 
			
		||||
      `graph TD
 | 
			
		||||
        a["<strong>Haiya</strong>"]-->b
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('38: should render a flowchart when useMaxWidth is true (default)', () => {
 | 
			
		||||
@@ -742,18 +742,17 @@ describe('Graph', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(446 * .95, 446 * 1.05);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        expect(maxWidthValue).to.be.within(300 * .95, 300 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.be.within(446 * 0.95, 446 * 1.05);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.be.within(300 * 0.95, 300 * 1.05);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('39: should render a flowchart when useMaxWidth is false', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
@@ -766,15 +765,14 @@ describe('Graph', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { flowchart: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(height).to.be.within(446 * .95, 446 * 1.05);
 | 
			
		||||
        expect(width).to.be.within(300 * .95, 300 * 1.05);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(height).to.be.within(446 * 0.95, 446 * 1.05);
 | 
			
		||||
      expect(width).to.be.within(300 * 0.95, 300 * 1.05);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('58: handle styling with style expressions', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
@@ -784,7 +782,7 @@ describe('Graph', () => {
 | 
			
		||||
    style id1 fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('60: handle styling for all node shapes', () => {
 | 
			
		||||
@@ -808,7 +806,7 @@ describe('Graph', () => {
 | 
			
		||||
      style I stroke:#ff0000,fill:#ffcccc,color:#ff0000
 | 
			
		||||
      style J stroke:#0000ff,fill:#ccccff,color:#0000ff
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('61: fontawesome icons in edge labels', () => {
 | 
			
		||||
@@ -817,7 +815,7 @@ describe('Graph', () => {
 | 
			
		||||
graph TD
 | 
			
		||||
  C -->|fa:fa-car Car| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('62: fontawesome icons in edge labels', () => {
 | 
			
		||||
@@ -829,7 +827,7 @@ graph TD
 | 
			
		||||
      end
 | 
			
		||||
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('63: fontawesome icons in edge labels', () => {
 | 
			
		||||
@@ -863,7 +861,7 @@ graph TD
 | 
			
		||||
      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
 | 
			
		||||
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('64: fontawesome icons in edge labels', () => {
 | 
			
		||||
@@ -879,7 +877,7 @@ graph TD
 | 
			
		||||
    end
 | 
			
		||||
    A --> B
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('65: text-color from classes', () => {
 | 
			
		||||
@@ -890,7 +888,7 @@ graph TD
 | 
			
		||||
        Lorem --> Ipsum --> Dolor
 | 
			
		||||
        class Lorem,Dolor dark
 | 
			
		||||
      `,
 | 
			
		||||
      {htmlLabels: true, flowchart: {htmlLabels: true}, securityLevel: 'loose'}
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,9 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Gantt diagram', () => {
 | 
			
		||||
  beforeEach(()=>{
 | 
			
		||||
    cy.clock((new Date('1010-10-10')).getTime())
 | 
			
		||||
  })
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    cy.clock(new Date('1010-10-10').getTime());
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a gantt chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
@@ -199,18 +198,17 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { gantt: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(484 * .95, 484 * 1.05);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        expect(maxWidthValue).to.be.within(984 * .95, 984 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.be.within(484 * 0.95, 484 * 1.05);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.be.within(984 * 0.95, 984 * 1.05);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a gantt diagram when useMaxWidth is false', () => {
 | 
			
		||||
@@ -248,17 +246,16 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { gantt: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(height).to.be.within(484 * .95, 484 * 1.05);
 | 
			
		||||
        expect(width).to.be.within(984 * .95, 984 * 1.05);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // 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(width).to.be.within(984 * 0.95, 984 * 1.05);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
    it('should render a gantt diagram with data labels at the top when topAxis is true', () => {
 | 
			
		||||
  it('should render a gantt diagram with data labels at the top when topAxis is true', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    gantt
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Sequencediagram', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Sequencediagram', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('User journey diagram', () => {
 | 
			
		||||
@@ -40,17 +39,16 @@ section Checkout from website
 | 
			
		||||
    `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.eq(565);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        expect(maxWidthValue).to.eq(700);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.eq(565);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.eq(700);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a user journey diagram when useMaxWidth is false', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Pie Chart', () => {
 | 
			
		||||
@@ -47,17 +46,16 @@ describe('Pie Chart', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { pie: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.eq(450);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        expect(maxWidthValue).to.eq(984);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.eq(450);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.eq(984);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a pie diagram when useMaxWidth is false', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
@@ -69,13 +67,12 @@ describe('Pie Chart', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { pie: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        expect(height).to.eq(450);
 | 
			
		||||
        expect(width).to.eq(984);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      expect(height).to.eq(450);
 | 
			
		||||
      expect(width).to.eq(984);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Requirement diagram', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ context('Sequence diagram', () => {
 | 
			
		||||
        Alice -->> John: Parallel message 2
 | 
			
		||||
        end
 | 
			
		||||
      `,
 | 
			
		||||
      {sequence:{actorFontFamily:'courier'}}
 | 
			
		||||
      { sequence: { actorFontFamily: 'courier' } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should handle different line breaks', () => {
 | 
			
		||||
@@ -71,7 +71,7 @@ context('Sequence diagram', () => {
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  })
 | 
			
		||||
  });
 | 
			
		||||
  it('should render loops with a slight margin', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
@@ -147,7 +147,7 @@ context('Sequence diagram', () => {
 | 
			
		||||
        A->>Bob: Hola
 | 
			
		||||
        Bob-->A: Pasten !
 | 
			
		||||
      `,
 | 
			
		||||
        {logLevel: 0}
 | 
			
		||||
        { logLevel: 0 }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should wrap (inline) long actor descriptions', () => {
 | 
			
		||||
@@ -158,7 +158,7 @@ context('Sequence diagram', () => {
 | 
			
		||||
        A->>Bob: Hola
 | 
			
		||||
        Bob-->A: Pasten !
 | 
			
		||||
      `,
 | 
			
		||||
        {logLevel: 0}
 | 
			
		||||
        { logLevel: 0 }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should wrap (directive) long actor descriptions', () => {
 | 
			
		||||
@@ -527,17 +527,17 @@ context('Sequence diagram', () => {
 | 
			
		||||
    });
 | 
			
		||||
    it('should render with an init directive', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
`%%{init: { "theme": "dark", 'config': { "fontFamily": "Menlo", "fontSize": 18, "fontWeight": 400, "wrap": true }}}%%
 | 
			
		||||
        `%%{init: { "theme": "dark", 'config': { "fontFamily": "Menlo", "fontSize": 18, "fontWeight": 400, "wrap": true }}}%%
 | 
			
		||||
          sequenceDiagram
 | 
			
		||||
          Alice->>Bob: Hello Bob, how are you? If you are not available right now, I can leave you a message. Please get back to me as soon as you can!
 | 
			
		||||
          Note left of Alice: Bob thinks
 | 
			
		||||
          Bob->>Alice: Fine!`,
 | 
			
		||||
        {}
 | 
			
		||||
      )
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  context('directives', () => {
 | 
			
		||||
      it('should override config with directive settings', () => {
 | 
			
		||||
    it('should override config with directive settings', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
        %%{init: { "config": { "mirrorActors": true }}}%%
 | 
			
		||||
@@ -546,10 +546,13 @@ context('Sequence diagram', () => {
 | 
			
		||||
        note left of Alice: config set to mirrorActors: false<br/>directive set to mirrorActors: true
 | 
			
		||||
        Bob->>Alice: Short as well
 | 
			
		||||
      `,
 | 
			
		||||
        { logLevel:0,  sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
			
		||||
        {
 | 
			
		||||
          logLevel: 0,
 | 
			
		||||
          sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' },
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
      it('should override config with directive settings', () => {
 | 
			
		||||
    it('should override config with directive settings', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
        %%{init: { "config": { "mirrorActors": false, "wrap": true }}}%%
 | 
			
		||||
@@ -558,13 +561,13 @@ context('Sequence diagram', () => {
 | 
			
		||||
        note left of Alice: config: mirrorActors=true<br/>directive: mirrorActors=false
 | 
			
		||||
        Bob->>Alice: Short as well
 | 
			
		||||
      `,
 | 
			
		||||
        { logLevel:0,  sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
			
		||||
        { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  context('links', () => {
 | 
			
		||||
    it('should support actor links and properties EXPERIMENTAL: USE WITH CAUTION', () => {
 | 
			
		||||
       //Be aware that the syntax for "properties" is likely to be changed. 
 | 
			
		||||
      //Be aware that the syntax for "properties" is likely to be changed.
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
        %%{init: { "config": { "mirrorActors": true, "forceMenus": true }}}%%
 | 
			
		||||
@@ -585,7 +588,7 @@ context('Sequence diagram', () => {
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => {
 | 
			
		||||
       //Be aware that the syntax for "properties" is likely to be changed. 
 | 
			
		||||
      //Be aware that the syntax for "properties" is likely to be changed.
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
        %%{init: { "config": { "mirrorActors": false, "forceMenus": true, "wrap": true }}}%%
 | 
			
		||||
@@ -601,7 +604,10 @@ context('Sequence diagram', () => {
 | 
			
		||||
        a->>j: Hello John, how are you?
 | 
			
		||||
        j-->>a: Great!
 | 
			
		||||
      `,
 | 
			
		||||
        { logLevel: 0, sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
			
		||||
        {
 | 
			
		||||
          logLevel: 0,
 | 
			
		||||
          sequence: { mirrorActors: false, noteFontSize: 18, noteFontFamily: 'Arial' },
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@@ -634,18 +640,17 @@ context('Sequence diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
        { sequence: { useMaxWidth: true } }
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg')
 | 
			
		||||
        .should((svg) => {
 | 
			
		||||
          expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
          expect(svg).to.have.attr('height');
 | 
			
		||||
          const height = parseFloat(svg.attr('height'));
 | 
			
		||||
          expect(height).to.be.within(920, 960);
 | 
			
		||||
          const style = svg.attr('style');
 | 
			
		||||
          expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
          const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
          // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
          expect(maxWidthValue).to.be.within(820 * .95, 820 * 1.05);
 | 
			
		||||
        });
 | 
			
		||||
      cy.get('svg').should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(920, 960);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(maxWidthValue).to.be.within(820 * 0.95, 820 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('should render a sequence diagram when useMaxWidth is false', () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
@@ -675,15 +680,14 @@ context('Sequence diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
        { sequence: { useMaxWidth: false } }
 | 
			
		||||
      );
 | 
			
		||||
      cy.get('svg')
 | 
			
		||||
        .should((svg) => {
 | 
			
		||||
          const height = parseFloat(svg.attr('height'));
 | 
			
		||||
          const width = parseFloat(svg.attr('width'));
 | 
			
		||||
          expect(height).to.be.within(920, 960);
 | 
			
		||||
          // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
          expect(width).to.be.within(820 * .95, 820 * 1.05);
 | 
			
		||||
          expect(svg).to.not.have.attr('style');
 | 
			
		||||
        });
 | 
			
		||||
      cy.get('svg').should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        expect(height).to.be.within(920, 960);
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(width).to.be.within(820 * 0.95, 820 * 1.05);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('State diagram', () => {
 | 
			
		||||
@@ -369,7 +368,8 @@ stateDiagram-v2
 | 
			
		||||
        }
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier'
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -381,7 +381,8 @@ stateDiagram-v2
 | 
			
		||||
        a --> b: Stop
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -394,7 +395,8 @@ stateDiagram-v2
 | 
			
		||||
    note right of MyState : I am a rightie
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -414,7 +416,8 @@ stateDiagram-v2
 | 
			
		||||
  A --> C
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -433,7 +436,8 @@ stateDiagram-v2
 | 
			
		||||
  sub1 --> sub4
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier',
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -447,18 +451,17 @@ stateDiagram-v2
 | 
			
		||||
      `,
 | 
			
		||||
      { state: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(177, 178);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(maxWidthValue).to.be.within(135 * .95, 135 * 1.05);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.be.within(177, 178);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(maxWidthValue).to.be.within(135 * 0.95, 135 * 1.05);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('v2 should render a state diagram when useMaxWidth is false', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
@@ -470,14 +473,13 @@ stateDiagram-v2
 | 
			
		||||
      `,
 | 
			
		||||
      { state: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        expect(height).to.be.within(177, 178);
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        expect(width).to.be.within(135 * .95, 135 * 1.05);
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      expect(height).to.be.within(177, 178);
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(width).to.be.within(135 * 0.95, 135 * 1.05);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('State diagram', () => {
 | 
			
		||||
@@ -315,7 +314,8 @@ describe('State diagram', () => {
 | 
			
		||||
    }
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier'
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -328,7 +328,8 @@ describe('State diagram', () => {
 | 
			
		||||
        }
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier'
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -340,7 +341,8 @@ describe('State diagram', () => {
 | 
			
		||||
        a --> b: Stop
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0, fontFamily: 'courier'
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
@@ -353,20 +355,19 @@ describe('State diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { state: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
        expect(svg).to.have.attr('height');
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        expect(height).to.be.within(176,178);
 | 
			
		||||
        const style = svg.attr('style');
 | 
			
		||||
        expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
        const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        // Todo investigate difference
 | 
			
		||||
        // expect(maxWidthValue).to.be.within(112 * .95, 112 * 1.05);
 | 
			
		||||
        expect(maxWidthValue).to.be.within(130, 140);
 | 
			
		||||
      });
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
      expect(svg).to.have.attr('height');
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      expect(height).to.be.within(176, 178);
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      // Todo investigate difference
 | 
			
		||||
      // expect(maxWidthValue).to.be.within(112 * .95, 112 * 1.05);
 | 
			
		||||
      expect(maxWidthValue).to.be.within(130, 140);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a state diagram when useMaxWidth is false', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
@@ -377,17 +378,16 @@ describe('State diagram', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      { state: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg')
 | 
			
		||||
      .should((svg) => {
 | 
			
		||||
        const height = parseFloat(svg.attr('height'));
 | 
			
		||||
        const width = parseFloat(svg.attr('width'));
 | 
			
		||||
        expect(height).to.be.within(176,178);
 | 
			
		||||
        // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
        // Todo investigate difference
 | 
			
		||||
        // expect(width).to.be.within(112 * .95, 112 * 1.05);
 | 
			
		||||
        expect(width).to.be.within(130, 140);
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const height = parseFloat(svg.attr('height'));
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      expect(height).to.be.within(176, 178);
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      // Todo investigate difference
 | 
			
		||||
      // expect(width).to.be.within(112 * .95, 112 * 1.05);
 | 
			
		||||
      expect(width).to.be.within(130, 140);
 | 
			
		||||
 | 
			
		||||
        expect(svg).to.not.have.attr('style');
 | 
			
		||||
      });
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,11 @@
 | 
			
		||||
/* eslint-env jest */
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.js';
 | 
			
		||||
 | 
			
		||||
describe('Pie Chart', () => {
 | 
			
		||||
    // beforeEach(()=>{
 | 
			
		||||
    //   cy.clock((new Date('2014-06-09')).getTime());
 | 
			
		||||
    // });
 | 
			
		||||
  // beforeEach(()=>{
 | 
			
		||||
  //   cy.clock((new Date('2014-06-09')).getTime());
 | 
			
		||||
  // });
 | 
			
		||||
 | 
			
		||||
  ['default', 'forest', 'dark', 'neutral'].forEach(theme=>{
 | 
			
		||||
  ['default', 'forest', 'dark', 'neutral'].forEach((theme) => {
 | 
			
		||||
    describe(theme, () => {
 | 
			
		||||
      it('should render a pie diagram', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
@@ -16,7 +15,7 @@ describe('Pie Chart', () => {
 | 
			
		||||
          "Ice-Hockey" : 80
 | 
			
		||||
          "Football" : 90
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
      });
 | 
			
		||||
@@ -39,7 +38,7 @@ describe('Pie Chart', () => {
 | 
			
		||||
            G
 | 
			
		||||
          end
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
      });
 | 
			
		||||
@@ -62,7 +61,7 @@ describe('Pie Chart', () => {
 | 
			
		||||
            G
 | 
			
		||||
          end
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
      });
 | 
			
		||||
@@ -88,7 +87,7 @@ describe('Pie Chart', () => {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
      });
 | 
			
		||||
@@ -135,10 +134,10 @@ describe('Pie Chart', () => {
 | 
			
		||||
        classM ..|> classN : Realization
 | 
			
		||||
        classO .. classP : Link(Dashed)
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
      it('should render a state diagram', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `
 | 
			
		||||
@@ -167,10 +166,10 @@ stateDiagram
 | 
			
		||||
        Active --> SomethingElse
 | 
			
		||||
        note right of SomethingElse : This is the note to the right.
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
      it('should render a state diagram (v2)', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `
 | 
			
		||||
@@ -199,10 +198,10 @@ stateDiagram-v2
 | 
			
		||||
        Active --> SomethingElse2
 | 
			
		||||
        note right of SomethingElse2 : This is the note to the right.
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
      it('should render a er diagram', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `
 | 
			
		||||
@@ -217,10 +216,10 @@ erDiagram
 | 
			
		||||
        PRODUCT ||--o{ ORDER-ITEM : "ordered in"
 | 
			
		||||
 | 
			
		||||
          `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
      it('should render a user journey diagram', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `
 | 
			
		||||
@@ -235,12 +234,12 @@ erDiagram
 | 
			
		||||
              Go downstairs: 5: Me
 | 
			
		||||
              Sit down: 5: Me
 | 
			
		||||
                        `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
      it('should render a gantt diagram', () => {
 | 
			
		||||
        cy.clock((new Date('2014-01-06')).getTime());
 | 
			
		||||
        cy.clock(new Date('2014-01-06').getTime());
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `
 | 
			
		||||
      gantt
 | 
			
		||||
@@ -271,10 +270,10 @@ erDiagram
 | 
			
		||||
       Add gantt diagram to demo page      :20h
 | 
			
		||||
       Add another diagram to demo page    :48h
 | 
			
		||||
       `,
 | 
			
		||||
          {theme}
 | 
			
		||||
          { theme }
 | 
			
		||||
        );
 | 
			
		||||
        cy.get('svg');
 | 
			
		||||
    });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user