| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- package detector
- import (
- "testing"
- )
- func TestDetectDiagramType(t *testing.T) {
- registry := NewDetectorRegistry()
- tests := []struct {
- name string
- input string
- expected DiagramType
- }{
- {
- name: "Sequence Diagram",
- input: "sequenceDiagram\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- {
- name: "State Diagram V2",
- input: "stateDiagram-v2\n [*] --> State1",
- expected: DiagramTypeStateV2,
- },
- {
- name: "State Diagram",
- input: "stateDiagram\n [*] --> State1",
- expected: DiagramTypeState,
- },
- {
- name: "Flowchart",
- input: "flowchart TD\n A --> B",
- expected: DiagramTypeFlowchart,
- },
- {
- name: "Graph (alias for flowchart)",
- input: "graph TD\n A --> B",
- expected: DiagramTypeFlowchart,
- },
- {
- name: "Class Diagram",
- input: "classDiagram\n class Animal",
- expected: DiagramTypeClass,
- },
- {
- name: "ER Diagram",
- input: "erDiagram\n CUSTOMER ||--o{ ORDER",
- expected: DiagramTypeER,
- },
- {
- name: "Gantt Chart",
- input: "gantt\n title A Gantt Diagram",
- expected: DiagramTypeGantt,
- },
- {
- name: "Pie Chart",
- input: "pie\n title Pets adopted by volunteers",
- expected: DiagramTypePie,
- },
- {
- name: "Git Graph",
- input: "gitGraph\n commit",
- expected: DiagramTypeGit,
- },
- {
- name: "User Journey",
- input: "journey\n title My working day",
- expected: DiagramTypeUserJourney,
- },
- {
- name: "Timeline",
- input: "timeline\n title History of Social Media Platform",
- expected: DiagramTypeTimeline,
- },
- {
- name: "Mindmap",
- input: "mindmap\n root((mindmap))",
- expected: DiagramTypeMindmap,
- },
- {
- name: "Kanban",
- input: "kanban\n title Kanban Example",
- expected: DiagramTypeKanban,
- },
- {
- name: "Sankey Diagram",
- input: "sankey-beta\n A --> B",
- expected: DiagramTypeSankey,
- },
- {
- name: "XY Chart",
- input: "xychart-beta\n title Sales Revenue",
- expected: DiagramTypeXYChart,
- },
- {
- name: "Quadrant Chart",
- input: "quadrantChart\n title Reach and engagement of campaigns",
- expected: DiagramTypeQuadrant,
- },
- {
- name: "Requirement Diagram",
- input: "requirement\n requirement Test",
- expected: DiagramTypeRequirement,
- },
- {
- name: "Block Diagram",
- input: "block-beta\n A",
- expected: DiagramTypeBlock,
- },
- {
- name: "C4 Context",
- input: "c4Context\n title System Context diagram for Internet Banking System",
- expected: DiagramTypeC4,
- },
- {
- name: "Architecture Diagram",
- input: "architecture\n title Architecture diagram",
- expected: DiagramTypeArchitecture,
- },
- {
- name: "Radar Chart",
- input: "radar\n title Simple Radar Chart",
- expected: DiagramTypeRadar,
- },
- {
- name: "Treemap",
- input: "treemap\n title Tree Map Example",
- expected: DiagramTypeTreemap,
- },
- {
- name: "Packet Diagram",
- input: "packet\n title Packet Diagram",
- expected: DiagramTypePacket,
- },
- {
- name: "Info Diagram",
- input: "info\n title Info Diagram",
- expected: DiagramTypeInfo,
- },
- {
- name: "Unknown Diagram",
- input: "unknownDiagram\n some content",
- expected: DiagramTypeUnknown,
- },
- {
- name: "Empty Input",
- input: "",
- expected: DiagramTypeUnknown,
- },
- {
- name: "With Comments",
- input: "%% This is a comment\nsequenceDiagram\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- {
- name: "With Front Matter",
- input: "---\ntitle: Test\n---\nsequenceDiagram\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- {
- name: "With Directives",
- input: "%%{init: {'theme':'base'}}%%\nsequenceDiagram\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- {
- name: "Case Insensitive",
- input: "SEQUENCEDIAGRAM\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- {
- name: "With Leading Whitespace",
- input: " sequenceDiagram\n A -> B : hello",
- expected: DiagramTypeSequence,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- result := registry.DetectDiagramType(tt.input)
- if result != tt.expected {
- t.Errorf("Expected %v, got %v", tt.expected, result)
- }
- })
- }
- }
- func TestCleanText(t *testing.T) {
- tests := []struct {
- name string
- input string
- expected string
- }{
- {
- name: "Remove Comments",
- input: "%% This is a comment\nsequenceDiagram\n A -> B : hello",
- expected: "sequenceDiagram\n A -> B : hello",
- },
- {
- name: "Remove Front Matter",
- input: "---\ntitle: Test\n---\nsequenceDiagram\n A -> B : hello",
- expected: "sequenceDiagram\n A -> B : hello",
- },
- {
- name: "Remove Directives",
- input: "%%{init: {'theme':'base'}}%%\nsequenceDiagram\n A -> B : hello",
- expected: "sequenceDiagram\n A -> B : hello",
- },
- {
- name: "Remove Multiple Comments",
- input: "%% Comment 1\nsequenceDiagram\n %% Comment 2\n A -> B : hello",
- expected: "sequenceDiagram\n A -> B : hello",
- },
- {
- name: "Trim Whitespace",
- input: " \n sequenceDiagram \n \n A -> B : hello \n ",
- expected: "sequenceDiagram\n A -> B : hello",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- result := cleanText(tt.input)
- if result != tt.expected {
- t.Errorf("Expected %q, got %q", tt.expected, result)
- }
- })
- }
- }
- func TestDetectorPriority(t *testing.T) {
- registry := NewDetectorRegistry()
- // Test that stateDiagram-v2 has higher priority than stateDiagram
- stateV2Input := "stateDiagram-v2\n [*] --> State1"
- result := registry.DetectDiagramType(stateV2Input)
- if result != DiagramTypeStateV2 {
- t.Errorf("Expected %v, got %v", DiagramTypeStateV2, result)
- }
- // Test that sequenceDiagram has higher priority than generic patterns
- sequenceInput := "sequenceDiagram\n A -> B : hello"
- result = registry.DetectDiagramType(sequenceInput)
- if result != DiagramTypeSequence {
- t.Errorf("Expected %v, got %v", DiagramTypeSequence, result)
- }
- }
|