package liner import ( "bytes" "strings" "testing" ) func TestAppend(t *testing.T) { var s State s.AppendHistory("foo") s.AppendHistory("bar") var out bytes.Buffer num, err := s.WriteHistory(&out) if err != nil { t.Fatal("Unexpected error writing history", err) } if num != 2 { t.Fatalf("Expected 2 history entries, got %d", num) } s.AppendHistory("baz") num, err = s.WriteHistory(&out) if err != nil { t.Fatal("Unexpected error writing history", err) } if num != 3 { t.Fatalf("Expected 3 history entries, got %d", num) } s.AppendHistory("baz") num, err = s.WriteHistory(&out) if err != nil { t.Fatal("Unexpected error writing history", err) } if num != 3 { t.Fatalf("Expected 3 history entries after duplicate append, got %d", num) } s.AppendHistory("baz") } func TestHistory(t *testing.T) { input := `foo bar baz quux dingle` var s State num, err := s.ReadHistory(strings.NewReader(input)) if err != nil { t.Fatal("Unexpected error reading history", err) } if num != 5 { t.Fatal("Wrong number of history entries read") } var out bytes.Buffer num, err = s.WriteHistory(&out) if err != nil { t.Fatal("Unexpected error writing history", err) } if num != 5 { t.Fatal("Wrong number of history entries written") } if strings.TrimSpace(out.String()) != input { t.Fatal("Round-trip failure") } // Test reading with a trailing newline present var s2 State num, err = s2.ReadHistory(&out) if err != nil { t.Fatal("Unexpected error reading history the 2nd time", err) } if num != 5 { t.Fatal("Wrong number of history entries read the 2nd time") } num, err = s.ReadHistory(strings.NewReader(input + "\n\xff")) if err == nil { t.Fatal("Unexpected success reading corrupted history", err) } if num != 5 { t.Fatal("Wrong number of history entries read the 3rd time") } }