Files
ExploreDNS/internal/output/text_test.go
T
Gary Hansenandmultica-agent 5a54834c5f
CI / test (pull_request) Failing after 2m2s
feat: implement output formatting and display (HAN-383)
Add text and JSON formatters with real-time progress via traverser hooks,
summary statistics, and CLI integration for --show-* and --json flags.

Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 02:21:13 +10:00

66 lines
1.7 KiB
Go

package output
import (
"bytes"
"strings"
"testing"
"github.com/hits/ExploreDNS/internal/dns"
"github.com/hits/ExploreDNS/internal/traverse"
)
func TestTextFormatterProgressIndentation(t *testing.T) {
root := traverse.NewReferral("example.com.", dns.TypeA, ".", 0, 1.0, nil)
child := traverse.NewReferral("example.com.", dns.TypeA, "com.", 1, 0.5, root)
var buf bytes.Buffer
cfg := DefaultConfig()
cfg.Color = false
formatter := newTextFormatter(cfg, &buf)
if err := formatter.WriteProgress(traverse.TraversalEvent{
Stage: traverse.EventStart,
Result: traverse.TraversalResult{Referral: child},
}); err != nil {
t.Fatalf("WriteProgress: %v", err)
}
out := buf.String()
if !strings.HasPrefix(out, " 2 ") {
t.Fatalf("expected depth-based indentation, got %q", out)
}
}
func TestAttachHooksRespectsShowFlags(t *testing.T) {
ref := traverse.NewReferral("example.com.", dns.TypeA, ".", 0, 1.0, nil)
var progressCount int
cfg := DefaultConfig()
cfg.ShowProgress = false
cfg.ShowResolves = false
cfg.ShowAllStats = false
var buf bytes.Buffer
formatter := NewFormatter(cfg, &buf)
hooks := AttachHooks(cfg, formatter)
hooks.OnEvent(traverse.TraversalEvent{
Stage: traverse.EventStart,
Result: traverse.TraversalResult{Referral: ref},
})
if buf.Len() != 0 {
t.Fatalf("expected no output when ShowProgress is false")
}
cfg.ShowProgress = true
hooks = AttachHooks(cfg, formatter)
hooks.OnEvent(traverse.TraversalEvent{
Stage: traverse.EventStart,
Result: traverse.TraversalResult{Referral: ref},
})
progressCount = strings.Count(buf.String(), "\n")
if progressCount == 0 {
t.Fatal("expected progress output when ShowProgress is true")
}
}