diff --git a/Library/Homebrew/cask/spec/formatter_spec.rb b/Library/Homebrew/cask/spec/formatter_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7e143d9331454ff06d0a22a8a2a83738ec0e9825
--- /dev/null
+++ b/Library/Homebrew/cask/spec/formatter_spec.rb
@@ -0,0 +1,56 @@
+require "spec_helper"
+require "utils/formatter"
+require "utils/tty"
+
+describe Formatter do
+  describe "::columns" do
+    let(:input) {
+      [
+        'aa',
+        'bbb',
+        'ccc',
+        'dd'
+      ]
+    }
+    subject { described_class.columns(input) }
+
+    it "doesn't output columns if $stdout is not a TTY." do
+      allow_any_instance_of(IO).to receive(:tty?).and_return(false)
+      allow(Tty).to receive(:width).and_return(10)
+
+      expect(subject).to eq(
+        "aa\n" \
+        "bbb\n" \
+        "ccc\n" \
+        "dd\n"
+      )
+    end
+
+    describe "$stdout is a TTY" do
+      it "outputs columns" do
+        allow_any_instance_of(IO).to receive(:tty?).and_return(true)
+        allow(Tty).to receive(:width).and_return(10)
+
+        expect(subject).to eq(
+          "aa    ccc\n" \
+          "bbb   dd\n"
+        )
+      end
+
+      it "outputs only one line if everything fits" do
+        allow_any_instance_of(IO).to receive(:tty?).and_return(true)
+        allow(Tty).to receive(:width).and_return(20)
+
+        expect(subject).to eq(
+          "aa   bbb  ccc  dd\n"
+        )
+      end
+    end
+
+    describe "with empty input" do
+      let(:input) { [] }
+
+      it { is_expected.to eq("\n") }
+    end
+  end
+end