main_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package parser
  2. import (
  3. "mermaid-go/pkg/detector"
  4. "testing"
  5. )
  6. func TestMermaidParser_GetDiagramType(t *testing.T) {
  7. parser := NewMermaidParser()
  8. tests := []struct {
  9. name string
  10. input string
  11. expected detector.DiagramType
  12. }{
  13. {
  14. name: "Sequence Diagram",
  15. input: "sequenceDiagram\n A -> B : hello",
  16. expected: detector.DiagramTypeSequence,
  17. },
  18. {
  19. name: "State Diagram V2",
  20. input: "stateDiagram-v2\n [*] --> State1",
  21. expected: detector.DiagramTypeStateV2,
  22. },
  23. {
  24. name: "State Diagram",
  25. input: "stateDiagram\n [*] --> State1",
  26. expected: detector.DiagramTypeState,
  27. },
  28. {
  29. name: "Flowchart",
  30. input: "flowchart TD\n A --> B",
  31. expected: detector.DiagramTypeFlowchart,
  32. },
  33. {
  34. name: "Class Diagram",
  35. input: "classDiagram\n class Animal",
  36. expected: detector.DiagramTypeClass,
  37. },
  38. {
  39. name: "Unknown Diagram",
  40. input: "unknownDiagram\n some content",
  41. expected: detector.DiagramTypeUnknown,
  42. },
  43. }
  44. for _, tt := range tests {
  45. t.Run(tt.name, func(t *testing.T) {
  46. result := parser.GetDiagramType(tt.input)
  47. if result != tt.expected {
  48. t.Errorf("Expected %v, got %v", tt.expected, result)
  49. }
  50. })
  51. }
  52. }
  53. func TestMermaidParser_Parse(t *testing.T) {
  54. parser := NewMermaidParser()
  55. tests := []struct {
  56. name string
  57. input string
  58. expectError bool
  59. }{
  60. {
  61. name: "Valid Sequence Diagram",
  62. input: "sequenceDiagram\n A -> B : hello",
  63. expectError: false,
  64. },
  65. {
  66. name: "Valid State Diagram",
  67. input: "stateDiagram-v2\n [*] --> State1",
  68. expectError: false,
  69. },
  70. {
  71. name: "Unsupported Diagram Type",
  72. input: "flowchart TD\n A --> B",
  73. expectError: true,
  74. },
  75. {
  76. name: "Unknown Diagram Type",
  77. input: "unknownDiagram\n some content",
  78. expectError: true,
  79. },
  80. }
  81. for _, tt := range tests {
  82. t.Run(tt.name, func(t *testing.T) {
  83. _, err := parser.Parse(tt.input)
  84. if tt.expectError && err == nil {
  85. t.Errorf("Expected error but got none")
  86. }
  87. if !tt.expectError && err != nil {
  88. t.Errorf("Expected no error but got: %v", err)
  89. }
  90. })
  91. }
  92. }
  93. func TestMermaidParser_Parse_SequenceDiagram(t *testing.T) {
  94. parser := NewMermaidParser()
  95. input := `sequenceDiagram
  96. participant A
  97. participant B
  98. A -> B : hello
  99. B --> A : response`
  100. diagram, err := parser.Parse(input)
  101. if err != nil {
  102. t.Fatalf("Failed to parse sequence diagram: %v", err)
  103. }
  104. if diagram == nil {
  105. t.Fatal("Diagram is nil")
  106. }
  107. if diagram.Type() != "sequence" {
  108. t.Errorf("Expected diagram type 'sequence', got '%s'", diagram.Type())
  109. }
  110. }
  111. func TestMermaidParser_Parse_StateDiagram(t *testing.T) {
  112. parser := NewMermaidParser()
  113. input := `stateDiagram-v2
  114. [*] --> State1
  115. State1 --> State2 : transition
  116. State2 --> [*]`
  117. diagram, err := parser.Parse(input)
  118. if err != nil {
  119. t.Fatalf("Failed to parse state diagram: %v", err)
  120. }
  121. if diagram == nil {
  122. t.Fatal("Diagram is nil")
  123. }
  124. if diagram.Type() != "state" {
  125. t.Errorf("Expected diagram type 'state', got '%s'", diagram.Type())
  126. }
  127. }