package vuedocs import ( "strings" "testing" "github.com/PuerkitoBio/goquery" ) const testReferencePageHTML = `

Vue API Reference

ref()

Takes an inner value and returns a reactive and mutable ref object.

function ref(value: T): Ref

reactive()

Returns a reactive proxy of the object.

function reactive(target: T): T

computed()

Takes a getter function and returns a readonly reactive ref object.

v-bind

Dynamically binds one or more attributes to an expression.

Transition

Provides animated transition effects when elements enter or leave the DOM.

` func TestParseReferencePage(t *testing.T) { parser := NewParser() ref, err := parser.ParseReferencePage(testReferencePageHTML, "https://vuejs.org/api/") if err != nil { t.Fatalf("ParseReferencePage failed: %v", err) } if len(ref.Composition) == 0 { t.Error("Expected at least one composition API item") } if len(ref.Directives) == 0 { t.Error("Expected at least one directive") } if len(ref.Components) == 0 { t.Error("Expected at least one component") } } func TestExtractCompositionAPI(t *testing.T) { parser := NewParser() doc, err := goquery.NewDocumentFromReader(strings.NewReader(testReferencePageHTML)) if err != nil { t.Fatalf("Failed to parse HTML: %v", err) } compos := parser.extractCompositionAPI(doc, "https://vuejs.org/api/") if len(compos) == 0 { t.Skip("No composition API items extracted from test HTML") } } func TestExtractDirectives(t *testing.T) { parser := NewParser() doc, err := goquery.NewDocumentFromReader(strings.NewReader(testReferencePageHTML)) if err != nil { t.Fatalf("Failed to parse HTML: %v", err) } directives := parser.extractDirectives(doc, "https://vuejs.org/api/") found := false for _, d := range directives { if d.Name == "v-bind" { found = true break } } if !found { t.Error("Expected to find v-bind directive") } } func TestResolveURL(t *testing.T) { tests := []struct { base string href string expected string }{ {"https://vuejs.org", "/api/", "https://vuejs.org/api/"}, {"https://vuejs.org", "https://example.com/page", "https://example.com/page"}, } for _, tt := range tests { t.Run(tt.href, func(t *testing.T) { got := resolveURL(tt.base, tt.href) if got != tt.expected { t.Errorf("resolveURL(%q, %q) = %q, want %q", tt.base, tt.href, got, tt.expected) } }) } }