table-driven tests
diff --git a/colwriter/column_test.go b/colwriter/column_test.go
index c60b691..61bd12e 100644
--- a/colwriter/column_test.go
+++ b/colwriter/column_test.go
@@ -5,7 +5,7 @@
 	"testing"
 )
 
-var s = `
+var src = `
 .git
 .gitignore
 .godir
@@ -36,14 +36,20 @@
 windows.go
 `[1:]
 
-var de = `
+var tests = []struct{
+	wid  int
+	flag uint
+	src  string
+	want string
+}{
+	{80, 0, "", ""},
+	{80, 0, src, `
 .git       README.md  darwin.go  git.go     ls.go      scale.go   unix.go
 .gitignore api.go     data.go    help.go    main.go    ssh.go     update.go
 .godir     apps.go    dyno.go:   hkdist     plugin.go  tail.go    version.go
 Procfile:  auth.go    env.go     linux.go   run.go     term       windows.go
-`[1:]
-
-var ce = `
+`[1:]},
+	{80, BreakOnColon, src, `
 .git       .gitignore .godir
 
 Procfile:
@@ -53,49 +59,23 @@
 env.go     hkdist     main.go    scale.go   term       version.go
 git.go     linux.go   plugin.go  ssh.go     unix.go    windows.go
 help.go    ls.go      run.go     tail.go    update.go
-`[1:]
-
-func TestColumns(t *testing.T) {
-	b := new(bytes.Buffer)
-	w := NewWriter(b, 80, 0)
-	if _, err := w.Write([]byte(s)); err != nil {
-		t.Error(err)
-	}
-	if err := w.Flush(); err != nil {
-		t.Error(err)
-	}
-	g := string(b.Bytes())
-	if de != g {
-		t.Log("\n" + de)
-		t.Log("\n" + g)
-		t.Errorf("%q != %q", de, g)
-	}
+`[1:]},
 }
 
-func TestColumnsColon(t *testing.T) {
-	b := new(bytes.Buffer)
-	w := NewWriter(b, 80, BreakOnColon)
-	if _, err := w.Write([]byte(s)); err != nil {
-		t.Error(err)
-	}
-	if err := w.Flush(); err != nil {
-		t.Error(err)
-	}
-	g := string(b.Bytes())
-	if ce != g {
-		t.Log("\n" + ce)
-		t.Log("\n" + g)
-		t.Errorf("%q != %q", ce, g)
-	}
-}
-
-func TestColWriterFlushEmpty(t *testing.T) {
-	b := new(bytes.Buffer)
-	w := NewWriter(b, 80, 0)
-	if err := w.Flush(); err != nil {
-		t.Error(err)
-	}
-	if g := b.Bytes(); len(g) != 0 {
-		t.Errorf("expected empty output, got %#v", g)
+func TestWriter(t *testing.T) {
+	for _, test := range tests {
+		b := new(bytes.Buffer)
+		w := NewWriter(b, test.wid, test.flag)
+		if _, err := w.Write([]byte(test.src)); err != nil {
+			t.Error(err)
+		}
+		if err := w.Flush(); err != nil {
+			t.Error(err)
+		}
+		if g := b.String(); test.want != g {
+			t.Log("\n" + test.want)
+			t.Log("\n" + g)
+			t.Errorf("%q != %q", test.want, g)
+		}
 	}
 }