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)
+		}
 	}
 }
