Merge pull request #5 from ncdc/fix-double-dash-termination

Fix handling of -- termination
diff --git a/flag.go b/flag.go
index 2e4cac0..ad65dda 100644
--- a/flag.go
+++ b/flag.go
@@ -543,6 +543,11 @@
 
 		if s[1] == '-' {
 			args, err = f.parseLongArg(s, args)
+
+			if len(s) == 2 {
+				// stop parsing after --
+				break
+			}
 		} else {
 			args, err = f.parseShortArg(s, args)
 		}
diff --git a/flag_test.go b/flag_test.go
index 47865bd..a33c601 100644
--- a/flag_test.go
+++ b/flag_test.go
@@ -197,8 +197,8 @@
 		notaflag,
 	}
 	f.SetOutput(ioutil.Discard)
-	if err := f.Parse(args); err == nil {
-		t.Error("--i-look-like-a-flag should throw an error")
+	if err := f.Parse(args); err != nil {
+		t.Error("expected no error, got ", err)
 	}
 	if !f.Parsed() {
 		t.Error("f.Parse() = false after Parse")
@@ -356,3 +356,37 @@
 		t.Fatal("expected interspersed options/non-options to fail")
 	}
 }
+
+func TestTermination(t *testing.T) {
+	f := NewFlagSet("termination", ContinueOnError)
+	boolFlag := f.BoolP("bool", "l", false, "bool value")
+	if f.Parsed() {
+		t.Error("f.Parse() = true before Parse")
+	}
+	arg1 := "ls"
+	arg2 := "-l"
+	args := []string{
+		"--",
+		arg1,
+		arg2,
+	}
+	f.SetOutput(ioutil.Discard)
+	if err := f.Parse(args); err != nil {
+		t.Fatal("expected no error; got ", err)
+	}
+	if !f.Parsed() {
+		t.Error("f.Parse() = false after Parse")
+	}
+	if *boolFlag {
+		t.Error("expected boolFlag=false, got true")
+	}
+	if len(f.Args()) != 2 {
+		t.Errorf("expected 2 arguments, got %d: %v", len(f.Args()), f.Args())
+	}
+	if f.Args()[0] != arg1 {
+		t.Errorf("expected argument %q got %q", arg1, f.Args()[0])
+	}
+	if f.Args()[1] != arg2 {
+		t.Errorf("expected argument %q got %q", arg2, f.Args()[1])
+	}
+}