CI / test (pull_request) Failing after 2m2s
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>
66 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|