mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-25 00:44:10 +02: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
 | |
|       `,
 | |
|       {}
 | |
|     );
 | |
|   });
 | |
|   */
 | |
| });
 | 
