test_flowchart_advanced.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "mermaid-go/pkg/parser"
  6. "mermaid-go/pkg/renderer"
  7. )
  8. func main() {
  9. fmt.Println("Testing Advanced Flowchart Features:")
  10. // Test 1: Click events
  11. testClickEvents()
  12. fmt.Println()
  13. // Test 2: Advanced subgraphs with styling
  14. testAdvancedSubgraphs()
  15. fmt.Println()
  16. // Test 3: Complex node shapes
  17. testComplexShapes()
  18. fmt.Println()
  19. }
  20. func testClickEvents() {
  21. fmt.Println("--- Testing Click Events ---")
  22. input := `flowchart TD
  23. A[Start] --> B[Process]
  24. B --> C[End]
  25. click A "https://example.com" "_blank"
  26. click B callback
  27. click C "https://mermaid.js.org"`
  28. mermaidParser := parser.NewMermaidParser()
  29. diagram, err := mermaidParser.Parse(input)
  30. if err != nil {
  31. log.Printf("Failed to parse flowchart: %v", err)
  32. return
  33. }
  34. mermaidRenderer := renderer.NewMermaidRenderer()
  35. output, err := mermaidRenderer.Render(diagram)
  36. if err != nil {
  37. log.Printf("Failed to render flowchart: %v", err)
  38. return
  39. }
  40. fmt.Printf("Input:\n%s\n", input)
  41. fmt.Printf("Parsed and rendered:\n%s", output)
  42. }
  43. func testAdvancedSubgraphs() {
  44. fmt.Println("--- Testing Advanced Subgraphs ---")
  45. input := `flowchart TB
  46. subgraph TOP["Top Level"]
  47. direction TB
  48. A[Input] --> B[Process]
  49. end
  50. subgraph BOTTOM[Bottom Level]
  51. direction LR
  52. C[Review] --> D[Output]
  53. end
  54. TOP --> BOTTOM
  55. classDef processClass fill:#f9f,stroke:#333,stroke-width:2px`
  56. mermaidParser := parser.NewMermaidParser()
  57. diagram, err := mermaidParser.Parse(input)
  58. if err != nil {
  59. log.Printf("Failed to parse flowchart: %v", err)
  60. return
  61. }
  62. mermaidRenderer := renderer.NewMermaidRenderer()
  63. output, err := mermaidRenderer.Render(diagram)
  64. if err != nil {
  65. log.Printf("Failed to render flowchart: %v", err)
  66. return
  67. }
  68. fmt.Printf("Input:\n%s\n", input)
  69. fmt.Printf("Parsed and rendered:\n%s", output)
  70. }
  71. func testComplexShapes() {
  72. fmt.Println("--- Testing Complex Shapes ---")
  73. input := `flowchart LR
  74. A([Start]) --> B{Decision}
  75. B --> C[/Process/]
  76. B --> D[\Alternative\]
  77. C --> E>Flag Shape]
  78. D --> E
  79. E --> F((End))`
  80. mermaidParser := parser.NewMermaidParser()
  81. diagram, err := mermaidParser.Parse(input)
  82. if err != nil {
  83. log.Printf("Failed to parse flowchart: %v", err)
  84. return
  85. }
  86. mermaidRenderer := renderer.NewMermaidRenderer()
  87. output, err := mermaidRenderer.Render(diagram)
  88. if err != nil {
  89. log.Printf("Failed to render flowchart: %v", err)
  90. return
  91. }
  92. fmt.Printf("Input:\n%s\n", input)
  93. fmt.Printf("Parsed and rendered:\n%s", output)
  94. }