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") } }