From 9a32d08e9f226bd8739807a5e545dc610e3dcb27 Mon Sep 17 00:00:00 2001
From: Karthic Rao <kartronics85@yahoo.com>
Date: Wed, 17 Jun 2015 11:59:24 +0530
Subject: [PATCH 1/3] test for function exParse under config/setup/ext.go

---
 config/setup/ext_test.go | 74 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 config/setup/ext_test.go

diff --git a/config/setup/ext_test.go b/config/setup/ext_test.go
new file mode 100644
index 000000000..876183d38
--- /dev/null
+++ b/config/setup/ext_test.go
@@ -0,0 +1,74 @@
+package setup
+
+import (
+	"testing"
+
+	"github.com/mholt/caddy/middleware/extensions"
+)
+
+func TestExt(t *testing.T) {
+	c := newTestController(`ext .html .htm .php`)
+
+	mid, err := Ext(c)
+
+	if err != nil {
+		t.Errorf("Expected no errors, got: %v", err)
+	}
+
+	if mid == nil {
+		t.Fatal("Expected middleware, was nil instead")
+	}
+
+	handler := mid(emptyNext)
+	myHandler, ok := handler.(extensions.Ext)
+
+	if !ok {
+		t.Fatalf("Expected handler to be type Ext, got: %#v", handler)
+	}
+
+	if myHandler.Extensions[0] != ".html" {
+		t.Errorf("Expected .html in the list of Extensions")
+	}
+	if myHandler.Extensions[1] != ".htm" {
+		t.Errorf("Expected .htm in the list of Extensions")
+	}
+	if myHandler.Extensions[2] != ".php" {
+		t.Errorf("Expected .php in the list of Extensions")
+	}
+	if !sameNext(myHandler.Next, emptyNext) {
+		t.Error("'Next' field of handler was not set properly")
+	}
+
+}
+
+func TestExtParse(t *testing.T) {
+	tests := []struct {
+		inputExts    string
+		shouldErr    bool
+		expectedExts []string
+	}{
+		{`ext .html .htm .php`, false, []string{".html", ".htm", ".php"}},
+	}
+	for i, test := range tests {
+		c := newTestController(test.inputExts)
+		actualExts, err := extParse(c)
+
+		if err == nil && test.shouldErr {
+			t.Errorf("Test %d didn't error, but it should have", i)
+		} else if err != nil && !test.shouldErr {
+			t.Errorf("Test %d errored, but it shouldn't have; got '%v'", i, err)
+		}
+
+		if len(actualExts) != len(test.expectedExts) {
+			t.Fatalf("Test %d expected %d rules, but got %d",
+				i, len(test.expectedExts), len(actualExts))
+		}
+		for j, actualExt := range actualExts {
+			if actualExt != test.expectedExts[j] {
+				t.Fatalf("Test %d expected %dth extension to be  %s  , but got %s",
+					i, j, test.expectedExts[j], actualExt)
+			}
+		}
+	}
+
+}

From a5a5c0671634bf4e408adda9a38aac14c747feee Mon Sep 17 00:00:00 2001
From: Karthic Rao <kartronics85@yahoo.com>
Date: Wed, 17 Jun 2015 12:48:52 +0530
Subject: [PATCH 2/3] test for function extParse written for
 config/setup/ext_go

---
 config/setup/ext_test.go | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/config/setup/ext_test.go b/config/setup/ext_test.go
index d7eb32855..876183d38 100644
--- a/config/setup/ext_test.go
+++ b/config/setup/ext_test.go
@@ -40,3 +40,35 @@ func TestExt(t *testing.T) {
 	}
 
 }
+
+func TestExtParse(t *testing.T) {
+	tests := []struct {
+		inputExts    string
+		shouldErr    bool
+		expectedExts []string
+	}{
+		{`ext .html .htm .php`, false, []string{".html", ".htm", ".php"}},
+	}
+	for i, test := range tests {
+		c := newTestController(test.inputExts)
+		actualExts, err := extParse(c)
+
+		if err == nil && test.shouldErr {
+			t.Errorf("Test %d didn't error, but it should have", i)
+		} else if err != nil && !test.shouldErr {
+			t.Errorf("Test %d errored, but it shouldn't have; got '%v'", i, err)
+		}
+
+		if len(actualExts) != len(test.expectedExts) {
+			t.Fatalf("Test %d expected %d rules, but got %d",
+				i, len(test.expectedExts), len(actualExts))
+		}
+		for j, actualExt := range actualExts {
+			if actualExt != test.expectedExts[j] {
+				t.Fatalf("Test %d expected %dth extension to be  %s  , but got %s",
+					i, j, test.expectedExts[j], actualExt)
+			}
+		}
+	}
+
+}

From 65f7190030499ec479ffb33a0b8afb110f574e12 Mon Sep 17 00:00:00 2001
From: Karthic Rao <kartronics85@yahoo.com>
Date: Wed, 17 Jun 2015 14:07:26 +0530
Subject: [PATCH 3/3] more cases added to test struct in extParse test

---
 config/setup/ext_test.go | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/config/setup/ext_test.go b/config/setup/ext_test.go
index 876183d38..2054b56ae 100644
--- a/config/setup/ext_test.go
+++ b/config/setup/ext_test.go
@@ -48,6 +48,8 @@ func TestExtParse(t *testing.T) {
 		expectedExts []string
 	}{
 		{`ext .html .htm .php`, false, []string{".html", ".htm", ".php"}},
+		{`ext .php .html .xml`, false, []string{".php", ".html", ".xml"}},
+		{`ext .txt .php .xml`, false, []string{".txt", ".php", ".xml"}},
 	}
 	for i, test := range tests {
 		c := newTestController(test.inputExts)