package main import ( "path/filepath" "testing" "github.com/stretchr/testify/require" ) func TestViewLayoutKeepsTheMessagesItSent(t *testing.T) { path := filepath.Join(t.TempDir(), viewLayoutFileName) layout, err := loadViewLayout(path) require.NoError(t, err) texts, err := layout.Split(nil) require.NoError(t, err) require.Equal(t, []string{"\n"}, texts) texts, err = layout.Split([]string{"0+1|a\n", "1+1|b\n"}) require.NoError(t, err) require.Equal(t, []string{"\n", "0+1|a\n1+1|b\n"}, texts) // The same lines give the same messages, also after a restart. layout, err = loadViewLayout(path) require.NoError(t, err) texts, err = layout.Split([]string{"0+1|a\n", "1+1|b\n"}) require.NoError(t, err) require.Equal(t, []string{"\n", "0+1|a\n1+1|b\n"}, texts) texts, err = layout.Split([]string{"0+1|a\n", "1+1|b\n", "2+1|c\n"}) require.NoError(t, err) require.Equal(t, []string{"\n", "0+1|a\n1+1|b\n", "2+1|c\n"}, texts) } func TestViewLayoutStartsAgainAtAChangedMessage(t *testing.T) { layout, err := loadViewLayout(filepath.Join(t.TempDir(), viewLayoutFileName)) require.NoError(t, err) _, err = layout.Split([]string{"0+1|a\n"}) require.NoError(t, err) _, err = layout.Split([]string{"0+1|a\n", "1+1|b\n", "2+1|c\n"}) require.NoError(t, err) // A batch merges lines 1 and 2, so the second message changes, and the // rest becomes one new message. texts, err := layout.Split([]string{"0+1|a\n", "1+2|b c\n", "3+1|d\n"}) require.NoError(t, err) require.Equal(t, []string{"\n0+1|a\n", "1+2|b c\n3+1|d\n"}, texts) // A view that lost lines starts again with one message. texts, err = layout.Split([]string{"0+4|all\n"}) require.NoError(t, err) require.Equal(t, []string{"\n0+4|all\n"}, texts) }