package addressparsing_test import ( "testing" "pkg.jfrech.com/brief/internal/addressparsing" ) type CaseDropExtraneousWhitespace struct { S string Dropped string } func CasesDropExtraneousWhitespace() []CaseDropExtraneousWhitespace { return []CaseDropExtraneousWhitespace{ CaseDropExtraneousWhitespace{"", ""}, CaseDropExtraneousWhitespace{"\"\" \tf", "\"\" \tf"}, CaseDropExtraneousWhitespace{"\"\" \t\"f\"", "\"\"\"f\""}, CaseDropExtraneousWhitespace{"\"\" \t\"f", "\"\"\"f"}, CaseDropExtraneousWhitespace{"\"\t", "\"\t"}, CaseDropExtraneousWhitespace{"a . c \t@example. COM", "a.c@example.COM"}, CaseDropExtraneousWhitespace{"a . c \t", "a.c"}, CaseDropExtraneousWhitespace{"@example. COM", "@example.COM"}, } } func TestDropExtraneousWhitespace(t *testing.T) { for j, tc := range CasesDropExtraneousWhitespace() { dropped := addressparsing.DropExtraneousWhitespace(tc.S) if dropped != tc.Dropped { t.Errorf("CasesDropExtraneousWhitespace()[%d]: addressparsing.DropExtraneousWhitespace(%q)\n == %q\n != %q", j, tc.S, dropped, tc.Dropped) } } } func FuzzDropExtraneousWhitespaceIdempotency(f *testing.F) { for _, tc := range CasesDropExtraneousWhitespace() { f.Add(tc.S) f.Add(tc.Dropped) } f.Fuzz(func(t *testing.T, s0 string) { s1 := addressparsing.DropExtraneousWhitespace(s0) s2 := addressparsing.DropExtraneousWhitespace(s1) if s1 != s2 { t.Errorf("idempotency contract violated:\n s0=%q,\n s1=%q,\n s2=%q", s0, s1, s2) } }) }