mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			383 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			383 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { imgSnapshotTest } from '../../helpers/util.ts';
 | 
						|
 | 
						|
describe('Treemap Diagram', () => {
 | 
						|
  it('1: should render a basic treemap', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Category A"
 | 
						|
    "Item A1": 10
 | 
						|
    "Item A2": 20
 | 
						|
"Category B"
 | 
						|
    "Item B1": 15
 | 
						|
    "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('2: should render a hierarchical treemap', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Products"
 | 
						|
    "Electronics"
 | 
						|
        "Phones": 50
 | 
						|
        "Computers": 30
 | 
						|
        "Accessories": 20
 | 
						|
    "Clothing"
 | 
						|
        "Men's"
 | 
						|
            "Shirts": 10
 | 
						|
            "Pants": 15
 | 
						|
        "Women's"
 | 
						|
            "Dresses": 20
 | 
						|
            "Skirts": 10
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('3: should render a treemap with styling using classDef', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Section 1"
 | 
						|
    "Leaf 1.1": 12
 | 
						|
    "Section 1.2":::class1
 | 
						|
      "Leaf 1.2.1": 12
 | 
						|
"Section 2"
 | 
						|
    "Leaf 2.1": 20:::class1
 | 
						|
    "Leaf 2.2": 25
 | 
						|
    "Leaf 2.3": 12
 | 
						|
 | 
						|
classDef class1 fill:red,color:blue,stroke:#FFD600;
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('4: should handle long text that wraps', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Main Category"
 | 
						|
    "This is a very long item name that should wrap to the next line when rendered in the treemap diagram": 50
 | 
						|
    "Short item": 20
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('5: should render with a forest theme', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  theme: forest
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Category A"
 | 
						|
    "Item A1": 10
 | 
						|
    "Item A2": 20
 | 
						|
"Category B"
 | 
						|
    "Item B1": 15
 | 
						|
    "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('6: should handle multiple levels of nesting', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Level 1"
 | 
						|
    "Level 2A"
 | 
						|
        "Level 3A": 10
 | 
						|
        "Level 3B": 15
 | 
						|
    "Level 2B"
 | 
						|
        "Level 3C": 20
 | 
						|
        "Level 3D"
 | 
						|
            "Level 4A": 5
 | 
						|
            "Level 4B": 5
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('7: should handle classDef with multiple styles', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `treemap-beta
 | 
						|
"Main"
 | 
						|
    "A": 20
 | 
						|
    "B":::important
 | 
						|
        "B1": 10
 | 
						|
        "B2": 15
 | 
						|
    "C": 5:::secondary
 | 
						|
 | 
						|
classDef important fill:#f96,stroke:#333,stroke-width:2px;
 | 
						|
classDef secondary fill:#6cf,stroke:#333,stroke-dasharray:5 5;
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8: should handle dollar value formatting with thousands separator', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: "$0,0"
 | 
						|
---
 | 
						|
treemap
 | 
						|
"Budget"
 | 
						|
    "Operations"
 | 
						|
        "Salaries": 700000
 | 
						|
        "Equipment": 200000
 | 
						|
        "Supplies": 100000
 | 
						|
    "Marketing"
 | 
						|
        "Advertising": 400000
 | 
						|
        "Events": 100000
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8a: should handle percentage formatting', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: ".1%"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Market Share"
 | 
						|
    "Company A": 0.35
 | 
						|
    "Company B": 0.25
 | 
						|
    "Company C": 0.15
 | 
						|
    "Others": 0.25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8b: should handle decimal formatting', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: ".2f"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Metrics"
 | 
						|
    "Conversion Rate": 0.0567
 | 
						|
    "Bounce Rate": 0.6723
 | 
						|
    "Click-through Rate": 0.1289
 | 
						|
    "Engagement": 0.4521
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8c: should handle dollar sign with decimal places', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: "$.2f"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Product Prices"
 | 
						|
    "Basic": 19.99
 | 
						|
    "Standard": 49.99
 | 
						|
    "Premium": 99.99
 | 
						|
    "Enterprise": 199.99
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8d: should handle dollar sign with thousands separator and decimal places', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: "$,.2f"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Revenue"
 | 
						|
    "Q1": 1250345.75
 | 
						|
    "Q2": 1645789.25
 | 
						|
    "Q3": 1845123.50
 | 
						|
    "Q4": 2145678.75
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8e: should handle simple thousands separator', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: ","
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"User Counts"
 | 
						|
    "Active Users": 1250345
 | 
						|
    "New Signups": 45789
 | 
						|
    "Churned": 12350
 | 
						|
    "Converted": 78975
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8f: should handle valueFormat set via directive with dollar and thousands separator', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: "$,.0f"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Sales by Region"
 | 
						|
    "North": 1234567
 | 
						|
    "South": 7654321
 | 
						|
    "East": 4567890
 | 
						|
    "West": 9876543
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('8g: should handle scientific notation format', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  treemap:
 | 
						|
    valueFormat: ".2e"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Scientific Values"
 | 
						|
    "Value 1": 1234567
 | 
						|
    "Value 2": 0.0000123
 | 
						|
    "Value 3": 1000000000
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('9: should handle a complex example with multiple features', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `---
 | 
						|
config:
 | 
						|
  theme: dark
 | 
						|
  treemap:
 | 
						|
    valueFormat: "$0,0"
 | 
						|
---
 | 
						|
treemap-beta
 | 
						|
"Company Budget"
 | 
						|
    "Engineering":::engineering
 | 
						|
        "Frontend": 300000
 | 
						|
        "Backend": 400000
 | 
						|
        "DevOps": 200000
 | 
						|
    "Marketing":::marketing
 | 
						|
        "Digital": 250000
 | 
						|
        "Print": 100000
 | 
						|
        "Events": 150000
 | 
						|
    "Sales":::sales
 | 
						|
        "Direct": 500000
 | 
						|
        "Channel": 300000
 | 
						|
 | 
						|
classDef engineering fill:#6b9bc3,stroke:#333;
 | 
						|
classDef marketing fill:#c36b9b,stroke:#333;
 | 
						|
classDef sales fill:#c3a66b,stroke:#333;
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('10: should render the example from documentation', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    treemap-beta
 | 
						|
      "Section 1"
 | 
						|
          "Leaf 1.1": 12
 | 
						|
          "Section 1.2":::class1
 | 
						|
            "Leaf 1.2.1": 12
 | 
						|
      "Section 2"
 | 
						|
          "Leaf 2.1": 20:::class1
 | 
						|
          "Leaf 2.2": 25
 | 
						|
          "Leaf 2.3": 12
 | 
						|
 | 
						|
      classDef class1 fill:red,color:blue,stroke:#FFD600;
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('11: should handle comments', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    treemap-beta
 | 
						|
      %% This is a comment
 | 
						|
      "Category A"
 | 
						|
          "Item A1": 10
 | 
						|
          "Item A2": 20
 | 
						|
      %% Another comment
 | 
						|
      "Category B"
 | 
						|
          "Item B1": 15
 | 
						|
          "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  /*
 | 
						|
  it.skip('12: should render a treemap with title', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    treemap-beta
 | 
						|
      title Treemap with Title
 | 
						|
      "Category A"
 | 
						|
          "Item A1": 10
 | 
						|
          "Item A2": 20
 | 
						|
      "Category B"
 | 
						|
          "Item B1": 15
 | 
						|
          "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it.skip('13: should render a treemap with accessibility attributes', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    treemap-beta
 | 
						|
      accTitle: Accessible Treemap Title
 | 
						|
      accDescr: This is a description of the treemap for accessibility purposes
 | 
						|
      "Category A"
 | 
						|
          "Item A1": 10
 | 
						|
          "Item A2": 20
 | 
						|
      "Category B"
 | 
						|
          "Item B1": 15
 | 
						|
          "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it.skip('14: should render a treemap with title and accessibility attributes', () => {
 | 
						|
    imgSnapshotTest(
 | 
						|
      `
 | 
						|
    treemap
 | 
						|
      title Treemap with Title and Accessibility
 | 
						|
      accTitle: Accessible Treemap Title
 | 
						|
      accDescr: This is a description of the treemap for accessibility purposes
 | 
						|
      "Category A"
 | 
						|
          "Item A1": 10
 | 
						|
          "Item A2": 20
 | 
						|
      "Category B"
 | 
						|
          "Item B1": 15
 | 
						|
          "Item B2": 25
 | 
						|
      `,
 | 
						|
      {}
 | 
						|
    );
 | 
						|
  });
 | 
						|
  */
 | 
						|
});
 |