Something went wrong. Try again.
😻 Your teal.fm scrobbles as a one-liner on your site. musicat.cuducos.me
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133package render
import ( "testing"
"tangled.org/cuducos.me/musicat/selection")
func TestSlots(t *testing.T) { t.Parallel() for _, tc := range []struct { in string want int }{ {"", maxSlots}, {"no placeholders here", 0}, {"Listening to {name1}.", 1}, {"{name1} and {name3}", 3}, {"{name3} then {name1} then {name2}", 3}, {`<img src="{image2}">`, 2}, {"{name2}{image7}", 7}, {"{name10}", maxSlots}, {"{image10}", maxSlots}, {"{name1} and {name11}", 1}, {"{name07} and {name3}", 3}, } { if got := Slots(tc.in); got != tc.want { t.Errorf("Slots(%q) = %d, want %d", tc.in, got, tc.want) } }}
func TestSlotsIgnoresSlotsOutsideTheRange(t *testing.T) { t.Parallel() for _, in := range []string{"{name0}", "{name07}", "{name11}", "{name12}", "{image618762873}"} { if got := Slots(in); got != 0 { t.Errorf("Slots(%q) = %d, want 0: only {name1}..{name10} and {image1}..{image10} are slots", in, got) } }}
func TestTemplateFillsSlots(t *testing.T) { t.Parallel() es := []selection.Entity{ {Name: "A"}, {Name: "B", Image: "https://img/b"}, {Name: "C"}, } got, err := Template("Listening to {name1}, {name2} and {name3}.", es) if err != nil { t.Fatalf("Template: %v", err) } if want := "Listening to A, B and C."; got != want { t.Fatalf("got %q, want %q", got, want) }}
func TestTemplateFillsTheLastSlot(t *testing.T) { t.Parallel() es := make([]selection.Entity, maxSlots) es[maxSlots-1].Name = "last" got, err := Template("{name10}", es) if err != nil { t.Fatalf("Template: %v", err) } if want := "last"; got != want { t.Fatalf("got %q, want %q", got, want) }}
func TestTemplateSubstitutesImages(t *testing.T) { t.Parallel() es := []selection.Entity{{Name: "A", Image: "https://img/a"}} got, err := Template(`<img src="{image1}" alt="">`, es) if err != nil { t.Fatalf("Template: %v", err) } if want := `<img src="https://img/a" alt="">`; got != want { t.Fatalf("got %q, want %q", got, want) }}
func TestTemplateIsRaw(t *testing.T) { t.Parallel() got, err := Template("{name1}", []selection.Entity{{Name: "A & <B>"}}) if err != nil { t.Fatalf("Template: %v", err) } if want := "A & <B>"; got != want { t.Fatalf("got %q, want raw %q", got, want) }}
func TestTemplateWithoutPlaceholders(t *testing.T) { t.Parallel() got, err := Template("nothing to see", nil) if err != nil { t.Fatalf("Template: %v", err) } if want := "nothing to see"; got != want { t.Fatalf("got %q, want %q", got, want) }}
func TestTemplateErrorsOnMissingEntry(t *testing.T) { t.Parallel() if _, err := Template("{name1} and {name2}", []selection.Entity{{Name: "A"}}); err == nil { t.Fatal("expected an error for a name slot with no entry") }}
func TestTemplateErrorsOnMissingImageEntry(t *testing.T) { t.Parallel() if _, err := Template("{image9}", []selection.Entity{{Name: "A"}}); err == nil { t.Fatal("expected an error for an image slot with no entry") }}
func TestTemplateLeavesSlotsOutsideTheRangeAlone(t *testing.T) { t.Parallel() es := []selection.Entity{{Name: "A"}} for _, in := range []string{"{name0}", "{name07}", "{name11}", "{name12}", "{image618762873}"} { got, err := Template("x "+in+" y", es) if err != nil { t.Errorf("Template(%q): %v", in, err) continue } if want := "x " + in + " y"; got != want { t.Errorf("Template(%q) = %q, want %q", in, got, want) } }}