require "vnd.dovecot.testsuite";

/* "The "exists" test is true if the headers listed in the header-names
 *  argument exist within the message.  All of the headers must exist or
 *  the test is false.
 * "
 */

test_set "message" text:
From: stephan@example.org
To: nico@vestingbar.bl
Subject: Test message
Date: Wed, 29 Jul 2009 18:21:44 +0300
X-Spam-Status: Not Spam
Resent-To: nico@frop.example.com

Test!
.
;

/*
 * TEST: One header
 */

test "One header" {
	if not exists "from" {
		test_fail "exists test missed from header";
	}

	if exists "x-nonsense" {
		test_fail "exists test found non-existent header";
	}
}

/*
 * TEST: Two headers
 */

test "Two headers" {
	if not exists ["from","to"] {
		test_fail "exists test missed from or to header";
	}

	if exists ["from","x-nonsense"] {
		test_fail "exists test found non-existent header (1)";
	}

	if exists ["x-nonsense","to"] {
		test_fail "exists test found non-existent header (2)";
	}

	if exists ["x-nonsense","x-nonsense2"] {
		test_fail "exists test found non-existent header (3)";
	}
}

/*
 * TEST: Three headers
 */

test "Three headers" {
	if not exists ["Subject","date","resent-to"] {
		test_fail "exists test missed subject, date or resent-to header";
	}

	if exists ["x-nonsense","date","resent-to"] {
		test_fail "exists test found non-existent header (1)";
	}

	if exists ["subject", "x-nonsense","resent-to"] {
		test_fail "exists test found non-existent header (2)";
	}

	if exists ["subject","date","x-nonsense"] {
		test_fail "exists test found non-existent header (3)";
	}

	if exists ["subject", "x-nonsense","x-nonsense2"] {
		test_fail "exists test found non-existent header (4)";
	}

	if exists ["x-nonsense","date","x-nonsense2"] {
		test_fail "exists test found non-existent header (5)";
	}

	if exists ["x-nonsense","x-nonsense2","resent-to"] {
		test_fail "exists test found non-existent header (6)";
	}

	if exists ["x-nonsense","x-nonsense2","x-nonsense3"] {
		test_fail "exists test found non-existent header (7)";
	}
}
