mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 12:54:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			841 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			841 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
						|
 | 
						|
describe('XY Chart', () => {
 | 
						|
  it('should render the simplest possible xy-beta chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart-beta
 | 
						|
        line [10, 30, 20]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('should render the simplest possible xy chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        line [10, 30, 20]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Should render a complete chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Should render a chart without title', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('y-axis title not required', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Should render a chart without y-axis with different range', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
 | 
						|
        line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('x axis title not required', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
 | 
						|
        line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Multiple plots can be rendered', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        line [23, 46, 77, 34]
 | 
						|
        line [45, 32, 33, 12]
 | 
						|
        bar [87, 54, 99, 85]
 | 
						|
        line [78, 88, 22, 4]
 | 
						|
        line [22, 29, 75, 33]
 | 
						|
        bar [52, 96, 35, 10]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Decimals and negative numbers are supported', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        y-axis -2.4 --> 3.5
 | 
						|
        line [+1.3, .6, 2.4, -.34]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render spark line with "plotReservedSpacePercent"', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        theme: dark
 | 
						|
        xyChart:
 | 
						|
          width: 200
 | 
						|
          height: 20
 | 
						|
          plotReservedSpacePercent: 100
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render spark bar without displaying other property', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        theme: dark
 | 
						|
        xyChart:
 | 
						|
          width: 200
 | 
						|
          height: 20
 | 
						|
          xAxis:
 | 
						|
            showLabel: false
 | 
						|
            showTitle: false
 | 
						|
            showTick: false
 | 
						|
            showAxisLine: false
 | 
						|
          yAxis:
 | 
						|
            showLabel: false
 | 
						|
            showTitle: false
 | 
						|
            showTick: false
 | 
						|
            showAxisLine: false
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Should use all the config from directive', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      %%{init: {"xyChart": {"width": 1000, "height": 600, "titlePadding": 5, "titleFontSize": 10, "xAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5},  "yAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "plotBorderWidth": 5, "chartOrientation": "horizontal", "plotReservedSpacePercent": 60  }}}%%
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Should use all the config from yaml', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        theme: forest
 | 
						|
        xyChart:
 | 
						|
          width: 1000
 | 
						|
          height: 600
 | 
						|
          titlePadding: 5
 | 
						|
          titleFontSize: 10
 | 
						|
          xAxis:
 | 
						|
            labelFontSize: 20
 | 
						|
            labelPadding: 10
 | 
						|
            titleFontSize: 30
 | 
						|
            titlePadding: 20
 | 
						|
            tickLength: 10
 | 
						|
            tickWidth: 5
 | 
						|
            axisLineWidth: 5
 | 
						|
          yAxis:
 | 
						|
            labelFontSize: 20
 | 
						|
            labelPadding: 10
 | 
						|
            titleFontSize: 30
 | 
						|
            titlePadding: 20
 | 
						|
            tickLength: 10
 | 
						|
            tickWidth: 5
 | 
						|
            axisLineWidth: 5
 | 
						|
          chartOrientation: horizontal
 | 
						|
          plotReservedSpacePercent: 60
 | 
						|
          showDataLabel: true
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render with show axis title false', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        xyChart:
 | 
						|
          xAxis:
 | 
						|
            showTitle: false
 | 
						|
          yAxis:
 | 
						|
            showTitle: false
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render with show axis label false', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        xyChart:
 | 
						|
          xAxis:
 | 
						|
            showLabel: false
 | 
						|
          yAxis:
 | 
						|
            showLabel: false
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render with show axis tick false', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        xyChart:
 | 
						|
          xAxis:
 | 
						|
            showTick: false
 | 
						|
          yAxis:
 | 
						|
            showTick: false
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render with show axis line false', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        xyChart:
 | 
						|
          xAxis:
 | 
						|
            showAxisLine: false
 | 
						|
          yAxis:
 | 
						|
            showAxisLine: false
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('Render all the theme color', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        themeVariables:
 | 
						|
          xyChart:
 | 
						|
            titleColor: "#ff0000"
 | 
						|
            backgroundColor: "#f0f8ff"
 | 
						|
            yAxisLabelColor: "#ee82ee"
 | 
						|
            yAxisTitleColor: "#7fffd4"
 | 
						|
            yAxisTickColor: "#87ceeb"
 | 
						|
            yAxisLineColor: "#ff6347"
 | 
						|
            xAxisLabelColor: "#7fffd4"
 | 
						|
            xAxisTitleColor: "#ee82ee"
 | 
						|
            xAxisTickColor: "#ff6347"
 | 
						|
            xAxisLineColor: "#87ceeb"
 | 
						|
            plotColorPalette: "#008000, #faba63"
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
        line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  it('should use the correct distances between data points', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      xychart
 | 
						|
        x-axis 0 --> 2
 | 
						|
        line [0, 1, 0, 1]
 | 
						|
        bar [1, 0, 1, 0]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
    cy.get('svg');
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render vertical bar chart with labels', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
      title "Sales Revenue"
 | 
						|
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render horizontal bar chart with labels', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
      title "Sales Revenue"
 | 
						|
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render vertical bar chart without labels by default', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    xychart
 | 
						|
      title "Sales Revenue"
 | 
						|
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render horizontal bar chart without labels by default', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
      title "Sales Revenue"
 | 
						|
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
						|
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
						|
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render multiple bar plots vertically with labels correctly', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Multiple Bar Plots"
 | 
						|
        x-axis Categories [A, B, C]
 | 
						|
        y-axis "Values" 0 --> 100
 | 
						|
        bar [10, 50, 90]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render multiple bar plots horizontally with labels correctly', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Multiple Bar Plots"
 | 
						|
        x-axis Categories [A, B, C]
 | 
						|
        y-axis "Values" 0 --> 100
 | 
						|
        bar [10, 50, 90]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render a single bar with label for a vertical xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Single Bar Chart"
 | 
						|
        x-axis Categories [A]
 | 
						|
        y-axis "Value" 0 --> 100
 | 
						|
        bar [75]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render a single bar with label for a horizontal xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Single Bar Chart"
 | 
						|
        x-axis Categories [A]
 | 
						|
        y-axis "Value" 0 --> 100
 | 
						|
        bar [75]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render negative and decimal values with correct labels for vertical xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Decimal and Negative Values"
 | 
						|
        x-axis Categories [A, B, C]
 | 
						|
        y-axis -10 --> 10
 | 
						|
        bar [ -2.5, 0.75, 5.1 ]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render negative and decimal values with correct labels for horizontal xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
      xychart
 | 
						|
        title "Decimal and Negative Values"
 | 
						|
        x-axis Categories [A, B, C]
 | 
						|
        y-axis -10 --> 10
 | 
						|
        bar [ -2.5, 0.75, 5.1 ]
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels within each bar in the vertical xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
            title "Sales Revenue"
 | 
						|
            x-axis Months [jan,b,c]
 | 
						|
            y-axis "Revenue (in $)" 4000 --> 12000
 | 
						|
            bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            // Check horizontal alignment (within tolerance)
 | 
						|
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
						|
              barProps.x + barProps.width / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels within each bar in the horizontal xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
            title "Sales Revenue"
 | 
						|
            x-axis Months [jan,b,c]
 | 
						|
            y-axis "Revenue (in $)" 4000 --> 12000
 | 
						|
            bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
						|
              barProps.y + barProps.height / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels within each bar in the vertical xy-chart with a lot of bars of different sizes', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
      ---
 | 
						|
      config:
 | 
						|
        xyChart:
 | 
						|
          showDataLabel: true
 | 
						|
      ---
 | 
						|
      xychart
 | 
						|
        title "Sales Revenue"
 | 
						|
        x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
 | 
						|
        y-axis "Revenue (in $)" 4000 --> 12000
 | 
						|
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            // Check horizontal alignment (within tolerance)
 | 
						|
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
						|
              barProps.x + barProps.width / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels within each bar in the horizontal xy-chart with a lot of bars of different sizes', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
      title "Sales Revenue"
 | 
						|
      x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
 | 
						|
      y-axis "Revenue (in $)" 4000 --> 12000
 | 
						|
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
						|
              barProps.y + barProps.height / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels correctly for a bar in the vertical xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
            title "Sales Revenue"
 | 
						|
            x-axis Months [jan]
 | 
						|
            y-axis "Revenue (in $)" 3000 --> 12000
 | 
						|
            bar [4000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            // Check horizontal alignment (within tolerance)
 | 
						|
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
						|
              barProps.x + barProps.width / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should render data labels correctly for a bar in the horizontal xy-chart', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    ---
 | 
						|
    config:
 | 
						|
      xyChart:
 | 
						|
        showDataLabel: true
 | 
						|
        chartOrientation: horizontal
 | 
						|
    ---
 | 
						|
    xychart
 | 
						|
            title "Sales Revenue"
 | 
						|
            x-axis Months [jan]
 | 
						|
            y-axis "Revenue (in $)" 3000 --> 12000
 | 
						|
            bar [4000]
 | 
						|
    `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
 | 
						|
    cy.get('g.bar-plot-0').within(() => {
 | 
						|
      cy.get('rect').each(($rect, index) => {
 | 
						|
        // Extract bar properties
 | 
						|
        const barProps = {
 | 
						|
          x: parseFloat($rect.attr('x')),
 | 
						|
          y: parseFloat($rect.attr('y')),
 | 
						|
          width: parseFloat($rect.attr('width')),
 | 
						|
          height: parseFloat($rect.attr('height')),
 | 
						|
        };
 | 
						|
 | 
						|
        // Get the text element corresponding to this bar by index.
 | 
						|
        cy.get('text')
 | 
						|
          .eq(index)
 | 
						|
          .then(($text) => {
 | 
						|
            const bbox = $text[0].getBBox();
 | 
						|
            const textProps = {
 | 
						|
              x: bbox.x,
 | 
						|
              y: bbox.y,
 | 
						|
              width: bbox.width,
 | 
						|
              height: bbox.height,
 | 
						|
            };
 | 
						|
 | 
						|
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
						|
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
						|
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
						|
 | 
						|
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
						|
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
						|
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
						|
              barProps.y + barProps.height / 2,
 | 
						|
              5
 | 
						|
            );
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |