From 896a84a75ec3fc935c33d859dbb8b25f40cfc001 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sat, 26 Nov 2011 11:11:43 +0100
Subject: [PATCH] testsuite: editheader extension: added error tests for header
 field name verification.

---
 Makefile.am                                   |  1 +
 tests/extensions/editheader/errors.svtest     | 49 +++++++++++++++++++
 .../errors/field-name-runtime.sieve           |  6 +++
 .../editheader/errors/field-name.sieve        | 19 +++++++
 4 files changed, 75 insertions(+)
 create mode 100644 tests/extensions/editheader/errors.svtest
 create mode 100644 tests/extensions/editheader/errors/field-name-runtime.sieve
 create mode 100644 tests/extensions/editheader/errors/field-name.sieve

diff --git a/Makefile.am b/Makefile.am
index 2b53db443..a1e1eb6e7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -130,6 +130,7 @@ test_cases = \
 	tests/extensions/editheader/deleteheader.svtest \
 	tests/extensions/editheader/alternating.svtest \
 	tests/extensions/editheader/utf8.svtest \
+	tests/extensions/editheader/errors.svtest \
 	tests/extensions/vnd.dovecot/debug/execute.svtest \
 	tests/deprecated/notify/basic.svtest \
 	tests/deprecated/notify/mailto.svtest \
diff --git a/tests/extensions/editheader/errors.svtest b/tests/extensions/editheader/errors.svtest
new file mode 100644
index 000000000..b29cfd4b3
--- /dev/null
+++ b/tests/extensions/editheader/errors.svtest
@@ -0,0 +1,49 @@
+require "vnd.dovecot.testsuite";
+require "comparator-i;ascii-numeric";
+require "relational";
+
+require "editheader";
+
+test "Invalid field-name" {
+	if test_script_compile "errors/field-name.sieve" {
+		test_fail "compile should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "5" {
+		test_fail "wrong number of errors reported";
+	}
+
+	if not test_error :index 1 :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 2 :matches "*field name*X field*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 3 :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 4 :matches "*field name*X field*invalid" {
+		test_fail "wrong error reported";
+	}
+}
+
+test "Invalid field-name at runtime " {
+	if not test_script_compile "errors/field-name-runtime.sieve" {
+		test_fail "compile failed";
+	}
+
+	if test_script_run {
+		test_fail "run should have failed";		
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "1" {
+		test_fail "wrong number of errors reported";
+	}
+
+	if not test_error :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+}
diff --git a/tests/extensions/editheader/errors/field-name-runtime.sieve b/tests/extensions/editheader/errors/field-name-runtime.sieve
new file mode 100644
index 000000000..3f344617b
--- /dev/null
+++ b/tests/extensions/editheader/errors/field-name-runtime.sieve
@@ -0,0 +1,6 @@
+require "editheader";
+require "variables";
+
+set "header" "X-field:";
+
+addheader "${header}" "Frop";
diff --git a/tests/extensions/editheader/errors/field-name.sieve b/tests/extensions/editheader/errors/field-name.sieve
new file mode 100644
index 000000000..469bfc86a
--- /dev/null
+++ b/tests/extensions/editheader/errors/field-name.sieve
@@ -0,0 +1,19 @@
+require "editheader";
+
+# Ok
+addheader "X-field" "Frop";
+
+# Invalid ':'
+addheader "X-field:" "Frop";
+
+# Invalid ' '
+addheader "X field" "Frop";
+
+# Ok
+deleteheader "X-field";
+
+# Invalid ':'
+deleteheader "X-field:";
+
+# Invalid ' '
+deleteheader "X field";
-- 
GitLab