From d03211b97daf8b8090aa6b45e075e72d15f852b4 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 2 Aug 2009 11:00:24 +0200
Subject: [PATCH] Imap4flags: added flag storage tests using mailbox loopback.

---
 Makefile.am                                  |  1 +
 TODO                                         |  1 -
 tests/extensions/imap4flags/flagstore.svtest | 83 ++++++++++++++++++++
 3 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100644 tests/extensions/imap4flags/flagstore.svtest

diff --git a/Makefile.am b/Makefile.am
index 6c1b79827..14312cb79 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,6 +64,7 @@ test_cases = \
 	tests/extensions/imap4flags/hasflag.svtest \
 	tests/extensions/imap4flags/errors.svtest \
 	tests/extensions/imap4flags/execute.svtest \
+	tests/extensions/imap4flags/flagstore.svtest \
 	tests/extensions/body/basic.svtest \
 	tests/extensions/body/match-values.svtest \
 	tests/extensions/regex/basic.svtest \
diff --git a/TODO b/TODO
index 9e793c3d5..590af2b69 100644
--- a/TODO
+++ b/TODO
@@ -6,7 +6,6 @@ Current activities:
 	- Write manual page
 * Testsuite:
 	- add support for testing binary load/save
-	- add execution tests for imap4flags extensions.
 
 Next (in order of descending priority/precedence):
 
diff --git a/tests/extensions/imap4flags/flagstore.svtest b/tests/extensions/imap4flags/flagstore.svtest
new file mode 100644
index 000000000..127d56015
--- /dev/null
+++ b/tests/extensions/imap4flags/flagstore.svtest
@@ -0,0 +1,83 @@
+require "vnd.dovecot.testsuite";
+require "fileinto";
+require "imap4flags";
+require "relational";
+require "comparator-i;ascii-numeric";
+require "mailbox";
+
+test_set "message" text:
+From: Henry von Flockenstoffen <henry@example.com>
+To: Dieter von Ausburg <dieter@example.com>
+Subject: Test message.
+
+Test message.
+.
+;
+
+test "Before" {
+    if hasflag :comparator "i;ascii-numeric" :count "ge" "1" {
+        test_fail "some flags or keywords are already set";
+    }
+	
+	setflag "$label1 \\answered";
+
+	fileinto :create "Uninteresting";
+
+	if not test_result_execute {
+		test_fail "failed to execute first result";
+	}
+
+	test_result_reset;
+
+	setflag "\\draft \\seen Junk";
+
+	fileinto "Uninteresting";
+
+	if not test_result_execute {
+		test_fail "failed to execute second result";
+	}
+
+	test_result_reset;
+
+	fileinto :flags "\\flagged" "Uninteresting";
+
+    if not test_result_execute {
+        test_fail "failed to execute third result";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 0;
+
+	if not hasflag "$label1 \\answered" {
+		test_fail "flags not stored for first message";
+	}
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "2" {
+        test_fail "invalid number of flags set for first message";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 1;
+
+    if not hasflag "\\draft \\seen Junk" {
+        test_fail "flags not stored for second message";
+    }
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "3" {
+        test_fail "invalid number of flags set for second message";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 2;
+
+    if not hasflag "\\flagged" {
+        test_fail "flags not stored for second message";
+    }
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "1" {
+        test_fail "invalid number of flags set for third message";
+    }
+}
-- 
GitLab