code.oscarkilo.com/klex-git/util/files_test.go

..
commit.go
commit_test.go
committest/
files.go
files_test.go
paths.go
paths_test.go
root.go
root_test.go
run.go
run_test.go
package util

import (
  "io"
  "io/ioutil"
  "os"
  "path"
  "testing"
)

// readFile returns the contents of the file, or "" if it doesn't exist.
func readFile(file string) string {
  content, err := ioutil.ReadFile(file)
  if err != nil {
    return ""
  }
  return string(content)
}

func TestAddLineTo(t *testing.T) {
  tmp_dir := t.TempDir()
  f := path.Join(tmp_dir, "file")

  addLine := func(line string) {
    err := AddLineTo(f, line)
    if err != nil {
      t.Errorf("Error adding line %s: %s", line, err)
    }
  }

  // start with an empty file
  if c := readFile(f); c != "" {
    t.Errorf("Expected empty file, got %s", c)
  }

  // add one copy of the "foo bar" line
  addLine("foo bar")
  if c := readFile(f); c != "foo bar\n" {
    t.Errorf("Expected 'foo bar\n', got %s", c)
  }

  // add another copy of the "foo bar" line (should be a no-op)
  addLine("foo bar")
  if c := readFile(f); c != "foo bar\n" {
    t.Errorf("Expected 'foo bar\n', got %s", c)
  }

  // add another line: "baz"
  addLine("baz")
  if c := readFile(f); c != "foo bar\nbaz\n" {
    t.Errorf("Expected 'foo bar\nbaz\n', got %s", c)
  }

  // append an unfinished line "junk", with no newline
  x, _ := os.OpenFile(f, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
  io.WriteString(x, "junk")
  x.Close()
  if c := readFile(f); c != "foo bar\nbaz\njunk" {
    t.Errorf("Expected 'foo bar\nbaz\njunk', got %s", c)
  }

  // append another "junk" (should be a no-op)
  addLine("junk")
  if c := readFile(f); c != "foo bar\nbaz\njunk" {
    t.Errorf("Expected 'foo bar\nbaz\njunk', got %s", c)
  }

  // append an entirely new line "qux" (should inject a newline)
  addLine("qux")
  if c := readFile(f); c != "foo bar\nbaz\njunk\nqux\n" {
    t.Errorf("Expected 'foo bar\nbaz\njunk\nqux\n', got %s", c)
  }
}