package fa import ( "bytes" "strings" "testing" "github.com/PuerkitoBio/goquery" ) const syntheticCommentsHTML = `
Alice today

First!

Bob today

Reply to first

today
[deleted]
` func TestParseComments_Synthetic(t *testing.T) { doc, err := goquery.NewDocumentFromReader(strings.NewReader(syntheticCommentsHTML)) if err != nil { t.Fatalf("setup: %v", err) } cs := parseComments(doc) if len(cs) != 3 { t.Fatalf("comments = %d; want 3", len(cs)) } if cs[0].ID != 111 || cs[0].Author.Name != "alice" || cs[0].Depth != 0 || cs[0].Parent != 0 { t.Errorf("comment[0] = %+v", cs[0]) } if cs[1].ID != 112 || cs[1].Author.Name != "bob" || cs[1].Depth != 1 || cs[1].Parent != 111 { t.Errorf("comment[1] = %+v", cs[1]) } if !cs[2].Deleted { t.Errorf("comment[2].Deleted = false; want true") } if !strings.Contains(cs[0].BodyText, "First!") { t.Errorf("comment[0].BodyText = %q", cs[0].BodyText) } } func TestDepthFromWidthStyle(t *testing.T) { cases := map[string]int{ "width: 99%; padding: 0": 0, "width:96%": 1, "width: 93%": 2, "width: 90%": 3, "width: 50%": 16, "width: 100%": 0, "no width here": 0, "width: abc%": 0, } for in, want := range cases { if got := depthFromWidthStyle(in); got != want { t.Errorf("depthFromWidthStyle(%q) = %d; want %d", in, got, want) } } } func TestParseComments_RealFixture(t *testing.T) { raw := loadFixture(t, "comments_submission.html") doc, err := goquery.NewDocumentFromReader(bytes.NewReader(raw)) if err != nil { t.Fatalf("read doc: %v", err) } cs := parseComments(doc) // Comments may be empty on a submission with no comments; just ensure // the parser doesn't crash and yields sane values when populated. for i, c := range cs { if c.Depth < 0 { t.Errorf("comment %d: negative depth %d", i, c.Depth) } } }