[CalendarServer-changes] [4941] CalDAVTester/trunk/scripts/tests/CardDAV

source_changes at macosforge.org source_changes at macosforge.org
Tue Jan 19 09:02:03 PST 2010


Revision: 4941
          http://trac.macosforge.org/projects/calendarserver/changeset/4941
Author:   cdaboo at apple.com
Date:     2010-01-19 09:02:02 -0800 (Tue, 19 Jan 2010)
Log Message:
-----------
CardDAV test scripts.

Added Paths:
-----------
    CalDAVTester/trunk/scripts/tests/CardDAV/ab-client.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/aclreports.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd
    CalDAVTester/trunk/scripts/tests/CardDAV/copymove.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/current-user-principal.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/directory.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/errorcondition.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/errors.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/get.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/nonascii.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/propfind.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/proppatch.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/put.xml
    CalDAVTester/trunk/scripts/tests/CardDAV/reports.xml

Added: CalDAVTester/trunk/scripts/tests/CardDAV/ab-client.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/ab-client.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/ab-client.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,104 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Emulate the common behaviors of the AB client</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+	
+	<test-suite name='Account setup'>
+		<test name='1'>
+			<description>PROPFIND principal - no authentication</description>
+			<request auth="no">
+				<method>PROPFIND</method>
+				<ruri>$principal1:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vab-client/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>401</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PROPFIND principal - with authentication</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$principal1:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vab-client/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>207</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='Polling'>
+		<test name='1'>
+			<description>PROPFIND addressbook home</description>
+			<request print-response="no">
+				<method>PROPFIND</method>
+				<ruri>$addressbookhome1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vab-client/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>207</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/aclreports.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/aclreports.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/aclreports.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,747 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test ACLs on the server</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/1.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcardput/1.txt</filepath>
+			</data>
+		</request>
+		<request>
+			<method>PROPPATCH</method>
+			<ruri>$addressbookpath1:/1.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vaclreports/10.xml</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/2.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcardput/2.txt</filepath>
+			</data>
+		</request>
+		<request>
+			<method>PROPPATCH</method>
+			<ruri>$addressbookpath1:/2.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vaclreports/9.xml</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/3.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcardput/3.txt</filepath>
+			</data>
+		</request>
+	</start>
+	
+	<test-suite name='acl-principal-prop-set REPORT' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>No DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>Too many DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/3.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore='no'>
+			<description>No DAV:read-acl privilege</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookhome2:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>Valid report</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value></value>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$principaluri1:</value>
+						<value>$principaluri_admin:</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='principal-match REPORT' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Too many DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/6.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>500</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>Valid self report with DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principals_users:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value></value>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$principal1:</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore='no'>
+			<description>Valid self report without DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principals_users:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/5.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value></value>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$principal1:</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>Valid principal-search report with DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/7.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7' ignore='no'>
+			<description>Valid principal-search report without DAV:prop</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/8.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8' ignore='no'>
+			<description>principal-search with inaccessible property</description>
+			<request print-response='no' user='$userid2:' pswd='$pswd2:'>
+				<method>REPORT</method>
+				<ruri>$addressbookhome2:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/11.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>2xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='principal-property-search REPORT' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/12.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/12.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Valid non-apply-to report with DAV:prop</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/12.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value></value>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>/principals/__uids__/public01/</value>
+						<value>/principals/__uids__/user01/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>Valid non-apply-to report without DAV:prop</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/13.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value></value>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>/principals/__uids__/public02/</value>
+						<value>/principals/__uids__/user02/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	<!--
+		<test name='5' ignore='no'>
+			<description>Valid apply-to report with DAV:prop</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/14.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:public01/</value>
+						<value>$principaluri1:</value>
+						<value>$uids:group01/</value>
+						<value>$rprincipaluri1:</value>
+						<value>$uids:location01/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>Valid non-apply-to report without DAV:prop</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/15.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:public02/</value>
+						<value>$principaluri2:</value>
+						<value>$uids:resource02/</value>
+						<value>$uids:location02/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7' ignore='no'>
+			<description>Valid INDIVIDUAL first-name AND last-name search report</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.ics</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/aclreports/21.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:apprentice/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8' ignore='no'>
+			<description>Valid INDIVIDUAL first-name OR last-name search report</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.ics</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/aclreports/22.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:admin/</value>
+						<value>$uids:apprentice/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9' ignore='no'>
+			<description>Valid ROOM displayname search report</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.ics</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/aclreports/23.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:location03/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10' ignore='no'>
+			<description>Valid RESOURCE displayname search report</description>
+			<request print-response='no' user='$useradmin:' pswd='$pswdadmin:'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.ics</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/aclreports/24.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>prefix</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>$uids:resource03/</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	-->
+	</test-suite>
+	<test-suite name='principal-search-property-set REPORT' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/16.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Wrong Depth</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/16.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Report on non-principal collection</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/16.xml</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>DAV:supported-report</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	<!--
+		<test name='4' ignore='no'>
+			<description>Valid report</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$principalcollection:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/16.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vaclreports/18.xml</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		-->
+	</test-suite>
+	<!--
+	<test-suite name='supported-report-set property' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Regular resource</description>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/17.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>207</value>
+					</arg>
+				</verify>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vaclreports/19.xml</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Regular resource</description>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vaclreports/17.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>207</value>
+					</arg>
+				</verify>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vaclreports/20.xml</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	-->
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/caldavtest.dtd	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,66 @@
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!ELEMENT caldavtest (description?, require-feature?, start, test-suite*, end) >
+	<!ATTLIST caldavtest ignore-all (yes|no) "no">
+
+	<!ELEMENT description (#PCDATA)>
+
+	<!ELEMENT require-feature feature*>
+		<!ELEMENT feature (#PCDATA)>
+
+	<!ELEMENT start (request*)>
+	<!ELEMENT end (request*)>
+
+	<!ELEMENT request (method, ruri+, header*, data?, verify*, grabheader*, grabproperty*, grabelement*)>
+		<!ATTLIST request auth (yes|no) "yes"
+						 user CDATA ""
+						 pswd CDATA ""
+						 end-delete (yes|no) "no"
+						 print-response (yes|no) "no">
+		
+		<!ELEMENT method (#PCDATA)>
+		<!ELEMENT ruri (#PCDATA)>
+		<!ELEMENT header (name, value)>
+			<!ELEMENT name (#PCDATA)>
+			<!ELEMENT value (#PCDATA)>
+		<!ELEMENT data (content-type, filepath)>
+			<!ATTLIST data substitutions (yes|no) "no">
+			<!ELEMENT content-type (#PCDATA)>
+			<!ELEMENT filepath (#PCDATA)>
+
+		<!ELEMENT verify (callback, arg*)>
+			
+				<!ELEMENT callback (#PCDATA)>
+				<!ELEMENT arg (name, value+)>
+		
+		<!ELEMENT grabheader (name, variable)>
+	
+		<!ELEMENT grabproperty (property, variable)>
+			<!ELEMENT property (#PCDATA)>
+			<!ELEMENT variable (#PCDATA)>
+
+		<!ELEMENT grabelement (name, variable)>
+
+	<!ELEMENT test-suite (require-feature?, test*)>
+		<!ATTLIST test-suite name CDATA #REQUIRED
+							ignore (yes|no) "no">
+	
+		<!ELEMENT test (description?, request+)>
+			<!ATTLIST test name CDATA #REQUIRED
+						  count CDATA "1"
+						  stats (yes|no) "no"
+						  ignore (yes|no) "no">

Added: CalDAVTester/trunk/scripts/tests/CardDAV/copymove.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/copymove.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/copymove.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,272 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test COPY/MOVE methods in CardDAV to ensure proper behaviour
+	of addressbook resources wrt UIDs, server indexing etc</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/1.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/1.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/2.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/2.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/3.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/3.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/4.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/4.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="no">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/5.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/5.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/6.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vcopymove/6.txt</filepath>
+			</data>
+		</request>
+	</start>
+	
+	<test-suite name='COPY'>
+		<test name='1'>
+			<description>COPY within same addressbook with different name</description>
+			<request end-delete="no" print-response="no">
+				<method>COPY</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>COPY within same addressbook to existing resource with overwrite</description>
+			<request print-response="no">
+				<method>COPY</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<header>
+					<name>Overwrite</name>
+					<value>T</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>COPY within same addressbook to existing resource without overwrite</description>
+			<request print-response="no">
+				<method>COPY</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/2.vcf</value>
+				</header>
+				<header>
+					<name>Overwrite</name>
+					<value>F</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>412</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>COPY to search directory</description>
+			<request print-response="no">
+				<method>COPY</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookhome1:/search/copy2_1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>MOVE within same addressbook to new resource</description>
+			<request print-response="no">
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/5.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>2xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>MOVE within same addressbook to existing resource with overwrite</description>
+			<request print-response="no">
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<header>
+					<name>Overwrite</name>
+					<value>T</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>MOVE within same addressbook to existing resource without overwrite</description>
+			<request print-response="no">
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/3.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<header>
+					<name>Overwrite</name>
+					<value>F</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>412</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8'>
+			<description>MOVE to search directory</description>
+			<request print-response="no">
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/move1.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookhome1:/search/move2_1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>	
+	<end>
+<!--
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookpath1:/copy1.vcf</ruri>
+		</request>
+-->
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookpath1:/move1.vcf</ruri>
+		</request>
+<!--
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookhome1:/caltest1/</ruri>
+		</request>
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookhome1:/caltest2/</ruri>
+		</request>
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookhome1:/caltest3/</ruri>
+		</request>
+		<request>
+			<method>DELETE</method>
+			<ruri>$addressbookhome1:/caltest4/</ruri>
+		</request>
+-->
+	</end>
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/current-user-principal.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/current-user-principal.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/current-user-principal.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,169 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test DAV:current-user-principal support</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+	
+	<test-suite name='Check for the property on /' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Check for authenticated property on /</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$root:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:current-user-principal$&lt;href&gt;$principaluri1:&lt;/href&gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Check for unauthenticated property on /</description>
+			<request auth="no">
+				<method>PROPFIND</method>
+				<ruri>$root:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:current-user-principal$&lt;unauthenticated/&gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Check for authenticated property on / (user02)</description>
+			<request user="$userid2:" pswd="$pswd2:">
+				<method>PROPFIND</method>
+				<ruri>$root:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:current-user-principal$&lt;href&gt;$principaluri2:&lt;/href&gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Check for the property on /principals/' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>Check for authenticated property on /</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:current-user-principal$&lt;href&gt;$principaluri1:&lt;/href&gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>Check for unauthenticated property on /</description>
+			<request auth="no">
+				<method>PROPFIND</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>401</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Check for authenticated property on / (user02)</description>
+			<request user="$userid2:" pswd="$pswd2:">
+				<method>PROPFIND</method>
+				<ruri>$principalcollection:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcurrent-user-principal/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:current-user-principal$&lt;href&gt;$principaluri2:&lt;/href&gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<end/>	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/directory.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/directory.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/directory.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,133 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test GET on collections to ensure proper directory listing</description>
+	
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+
+	<test-suite name='GET on collections'>
+		<test name='1'>
+			<description>GET on root collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$root:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>GET on principals collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$principalcollection:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>GET on user principals collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$principals_users:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>GET on group principals collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$principals_groups:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>	
+		<test name='5'>
+			<description>GET on __uids__ principals collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$principals_uids:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>GET on addressbooks collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbooks:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>GET on user addressbooks collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbooks_users:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='8'>
+			<description>GET on group addressbooks collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbooks_groups:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='9'>
+			<description>GET on __uids__ addressbooks collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbooks_uids:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/errorcondition.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/errorcondition.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/errorcondition.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,1287 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Tests of various pre-/post-conditions</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/1.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/6.txt</filepath>
+			</data>
+		</request>
+				<!--
+		<request end-delete="yes">
+			<method>MKCOL</method>
+			<ruri>$addressbookhome1:/collection/</ruri>
+		</request>
+		<request end-delete="yes">
+			<method>MKCALENDAR</method>
+			<ruri>$addressbookhome1:/address2/</ruri>
+		</request>
+		<request>
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/address2/6.vcf</ruri>
+			<data>
+				<content-type>text/calendar; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/6.txt</filepath>
+			</data>
+		</request>
+		<request>
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/address2/7.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/7.txt</filepath>
+			</data>
+		</request>
+		-->
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/1.xml</ruri>
+			<data>
+				<content-type>text/xml; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/1.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/2.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/2.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/3.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/3.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/4.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/4.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/5.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/5.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/6.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/6.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/7.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/7.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/8.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/8.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookhome1:/9.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/verrors/9.txt</filepath>
+			</data>
+		</request>
+	</start>
+	
+	<test-suite name='PUT' ignore='no'>
+		<test name='1'>
+			<description>PUT non-addressbook data</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PUT invalid addressbook data</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PUT with multiple component types</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>PUT with METHOD property</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>PUT with different uids in same resource</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>PUT with duplicate uids</description>
+			<request print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>PUT with different uid onto existing resource</description>
+			<request print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/7.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<!--
+		<test name='8'>
+			<description>PUT with too many recurrence instances to new resource</description>
+			<request print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/8.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9'>
+			<description>PUT with too many recurrence instances to existing resource</description>
+			<request print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/9.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10'>
+			<description>PUT without timezone</description>
+			<request print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/28.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='11'>
+			<description>PUT invalid RRULE</description>
+			<request end-delete="yes" print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/33.vcf</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/33.vcf</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test-->
+		-->
+	</test-suite>
+	<!--
+	<test-suite name='COPY' ignore='no'>
+		<test name='1'>
+			<description>COPY non-addressboook data</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/1.xml</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>2xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>COPY invalid addressbook data</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/2.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>2xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>COPY with multiple component types</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/3.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>COPY with METHOD property</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/4.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>COPY with different uids in same resource</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/5.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>COPY with duplicate uids</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/6.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>COPY from addressbook with duplicate uids</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1/copy1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8'>
+			<description>COPY with different uid onto existing resource</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/7.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9'>
+			<description>COPY from addressbook with different uid onto existing resource</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$addressbookhome1:/addressbook2/7.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10'>
+			<description>COPY with too many recurrence instances to new resource</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$pathprefix1:/8.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$pathprefix1:/calendar/2.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='11'>
+			<description>COPY with too many recurrence instances to existing resource</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$pathprefix1:/9.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$pathprefix1:/calendar/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='12'>
+			<description>COPY calendar into calendar</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$pathprefix1:/calendar2/</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$pathprefix1:/calendar/calendar2/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='13'>
+			<description>COPY collection into calendar</description>
+			<request>
+				<method>COPY</method>
+				<ruri>$pathprefix1:/collection/</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$pathprefix1:/calendar/collection/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='MOVE' ignore='no'>
+		<test name='1'>
+			<description>MOVE non-addressbook data</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/1.xml</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>MOVE invalid calendar data</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/2.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>MOVE with multiple component types</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/3.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>MOVE with METHOD property</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/4.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>MOVE with different uids in same resource</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/5.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>MOVE with duplicate uids</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/6.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>MOVE from calendar with duplicate uids</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/move1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8'>
+			<description>MOVE with different uid onto existing resource</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/7.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9'>
+			<description>MOVE from calendar with different uid onto existing resource</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookpath1:/7.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookhome1:/calendar/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavno-uid-conflict</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10'>
+			<description>MOVE with too many recurrence instances to new resource</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/8.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/2.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='11'>
+			<description>MOVE with too many recurrence instances to existing resource</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/9.vcf</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/1.vcf</value>
+				</header>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavnumber-of-recurrences-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='12'>
+			<description>MOVE calendar into calendar</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/calendar2/</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/addressbook2/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='13'>
+			<description>MOVE collection into calendar</description>
+			<request>
+				<method>MOVE</method>
+				<ruri>$addressbookhome1:/collection/</ruri>
+				<header>
+					<name>Destination</name>
+					<value>$host:$addressbookpath1:/collection/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	-->
+	
+	<test-suite name='REPORT/addressbook-data' ignore='no'>
+		<test name='1'>
+			<description>query with invalid address-data content-type</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/10.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>query with invalid address-data version</description>
+			<request>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/11.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>multiget with invalid address-data content-type</description>
+			<request>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/12.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>multiget with invalid address-data version</description>
+			<request>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/13.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+<!--
+	<test-suite name='REPORT/filter' ignore='no'>
+		<test name='1'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/14.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavsupported-address-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/15.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/16.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/17.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/18.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/19.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/20.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/21.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9'>
+			<description>query with invalid filter</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/22.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10'>
+			<description>query with invalid time-range (dates)</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/29.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='11'>
+			<description>query with invalid time-range (floating)</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/30.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-filter</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='12'>
+			<description>free-busy with invalid time-range (dates)</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/31.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='13'>
+			<description>free-busy with invalid time-range (floating)</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/32.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>400</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='REPORT/too big' ignore='no'>
+		<test name='1'>
+			<description>add one event to make it a 1001 event calendar</description>
+			<request end-delete="yes" print-response='no'>
+				<method>PUT</method>
+				<ruri>$addressbookhome1:/abc.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/23.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>DAV:number-of-matches-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>multiget with too many results</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookhome1:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/verrors/24.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>DAV:number-of-matches-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>free-busy with too many results</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/calendar.1000/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/25.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>DAV:number-of-matches-within-limits</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='Invalid CalDAV:timezone' ignore='no'>
+		<test name='1'>
+			<description>query with invalid timezone</description>
+			<request print-response='no'>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/26.txt</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>proppatch with invalid timezone</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/errors/27.txt</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>badprops</name>
+						<value>urn:ietf:params:xml:ns:carddavcalendar-timezone</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	-->
+	<test-suite name='Root resource' ignore='no'>
+		<test name='1'>
+			<description>DELETE /</description>
+			<request print-response='no'>
+				<method>DELETE</method>
+				<ruri>$root:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>COPY /</description>
+			<request print-response='no'>
+				<method>COPY</method>
+				<ruri>$root:</ruri>
+				<header>
+					<name>Destination</name>
+					<value>/copy/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>MOVE /</description>
+			<request print-response='no'>
+				<method>MOVE</method>
+				<ruri>$root:</ruri>
+				<header>
+					<name>Destination</name>
+					<value>/move/</value>
+				</header>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		-->
+	</test-suite>
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/errors.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/errors.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/errors.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,176 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test error conditions</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+
+	<test-suite name='ERROR CONDITIONS' ignore='no'>
+		<test name='1'>
+			<description>PUT duplicate UID contact</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>DELETE</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PUT same contact with different UID</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>DELETE</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PUT invalid vcf format data</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/4.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>					
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>PUT non-vcf format data</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/5.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>					
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>DELETE non-existing vcf</description>
+			<request>
+				<method>DELETE</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>404</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>PUT 2.1 version vcf</description>
+			<request>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcarderrors/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>					
+					</arg>
+				</verify>
+			</request>
+		</test>
+
+	</test-suite>
+
+	<end/>
+
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/get.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/get.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/get.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,104 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test GET on collections to ensure proper directory listing</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+
+	<test-suite name='GET on resource'>
+		<test name='1'>
+			<description>GET from address book collection</description>
+			<request end-delete="no">
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/1.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>GET on user/addressbook</description>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>dataString</callback>
+					<arg>
+						<name>contains</name>
+						<value>1.vcf</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>DELETE</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>Get on regular collection</description>
+			<request>
+				<method>GET</method>
+				<ruri>$principaluri1:</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>dataString</callback>
+					<arg>
+						<name>contains</name>
+						<value>addressbook</value>
+						<value>search</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/nonascii.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/nonascii.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/nonascii.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,558 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test use of UTF-8 for HTTP and address data</description>
+	
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+
+	<test-suite name='non-ascii' ignore="no">
+		<test name='1' end-delete="no" ignore="no">
+			<description>MKCOL with high-ascii</description>
+			<request print-response="no">
+				<method>MKCOL</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>MKCOL with non-ascii - duplicate</description>
+			<request print-response="no">
+				<method>MKCOL</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' end-delete="no" ignore="no">>
+			<description>GET with non-ascii</description>
+			<request print-response="no">
+				<method>GET</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore="no">
+			<description>DELETE with non-ascii</description>
+			<request print-response="no">
+				<method>DELETE</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='double byte' ignore="no">
+		<test name='1' ignore="no">
+			<description>MKCOL with double byte</description>
+			<request end-delete="no">
+				<method>MKCOL</method>
+				<ruri>$addressbookhome1:/初日/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>MKCOL with non-ascii - duplicate</description>
+			<request print-response="no">
+				<method>MKCOL</method>
+				<ruri>$addressbookhome1:/初日/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' end-delete="no">
+			<description>GET with non-ascii</description>
+			<request print-response="no">
+				<method>GET</method>
+				<ruri>$addressbookhome1:/初日/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore="no">
+			<description>DELETE with non-ascii</description>
+			<request print-response="no">
+				<method>DELETE</method>
+				<ruri>$addressbookhome1:/初日/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+<!--
+	<test-suite name='Non-ascii resource URI' ignore="no">
+		<test name='1' ignore="no">
+			<description>PUT with high-ascii</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/te%cc%81st.vcf</ruri>
+				<data>
+					<content-type>text/vcf; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/1.vcf</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>PUT with high-ascii</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookhome1:/Te%cc%81st/t%c3%a9st.vcf</ruri>
+				<data>
+					<content-type>text/vcf; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/1.vcf</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>GET with high-ascii</description>
+			<request print-response="no">
+				<method>GET</method>
+				<ruri>$addressbookhome1:/T%c3%a9st/te%cc%81st.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore="no">
+			<description>GET with high-ascii</description>
+			<request print-response="no">
+				<method>GET</method>
+				<ruri>$addressbookhome1:/Te%cc%81st/t%c3%a9st.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore="no">
+			<description>DELETE with high-ascii</description>
+			<request print-response="no">
+				<method>DELETE</method>
+				<ruri>$addressbookhome1:/Te%cc%81st/t%c3%a9st.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='Multiget on-ascii resource URI' ignore="no">
+		<test name='1' ignore="no">
+			<description>MKCOL with high-ascii</description>
+			<request end-delete="yes">
+				<method>MKCOL</method>
+				<ruri>$addressbookhome1:/Tást/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>REPORT with high-ascii - match parent and child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookhome1:/Tást/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value></value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>DELETE with high-ascii</description>
+			<request print-response="no">
+				<method>DELETE</method>
+				<ruri>$addressbookhome1:/Tást/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>REPORT with non-ascii - match parent, different child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/Tást/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/3.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>t%c3%a9st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore="no">
+			<description>REPORT with non-ascii - different parent, match child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/Te%cc%81st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>te%cc%81st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore="no">
+			<description>REPORT with non-ascii - different parent, different child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/Te%cc%81st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/5.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>t%c3%a9st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore="no">
+			<description>REPORT with non-ascii - match parent, match child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/T%c3%a9st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>te%cc%81st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7' ignore="no">
+			<description>REPORT with non-ascii - match parent, different child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/T%c3%a9st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/3.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>t%c3%a9st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8' ignore="no">
+			<description>REPORT with non-ascii - different parent, match child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/T%c3%a9st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>te%cc%81st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9' ignore="no">
+			<description>REPORT with non-ascii - different parent, different child</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$pathprefix1:/T%c3%a9st/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/5.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>t%c3%a9st.ics</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	-->
+	<test-suite name='high-ascii addressbook data' ignore="no">
+		<test name='1' ignore="no">
+			<description>PUT with high-ascii data</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/highascii.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/8.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>GET with non-ascii data</description>
+			<request print-response="no">
+				<method>GET</method>
+				<ruri>$addressbookpath1:/highascii.vcf</ruri>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>Basic query with high-ascii data</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/7.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>highascii.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore="no">
+			<description>Text query with ascii data</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/9.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>highascii.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='Non-utf-8 address data' ignore="no">
+		<test name='1' ignore="no">
+			<description>PUT with non-utf-8 data without charset</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/nonutf8.vcf</ruri>
+				<data>
+					<content-type>text/vcard</content-type>
+					<filepath>Resource/CardDAV/vnonascii/2.vcf</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>PUT with non-utf-8 data with utf-8 charset</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/nonutf8.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vnonascii/2.vcf</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>PUT with non-utf-8 data with non-utf-8 charset</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/nonutf8.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=iso-8859-1</content-type>
+					<filepath>Resource/CardDAV/vnonascii/2.vcf</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:carddavvalid-addressbook-object-resource</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+<!--
+	<test-suite name='Copy/Move Non-utf-8 calendar data' ignore="no">
+		<test name='1' ignore="no">
+			<description>PUT with non-utf-8 data to regular collection</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$pathprefix1:/collection/nonutf8.ics</ruri>
+				<data>
+					<content-type>text/calendar</content-type>
+					<filepath>Resource/CardDAV/nonascii/10.ics</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>COPY non-utf-8 data to calendar collection</description>
+			<request end-delete="yes">
+				<method>COPY</method>
+				<header>
+					<name>Destination</name>
+					<value>$host:$calendarpath1:/copy1.ics</value>
+				</header>
+				<ruri>$pathprefix1:/collection/nonutf8.ics</ruri>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:caldavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore="no">
+			<description>MOVE non-utf-8 data to calendar collection</description>
+			<request end-delete="yes">
+				<method>MOVE</method>
+				<header>
+					<name>Destination</name>
+					<value>$host:$calendarpath1:/copy1.ics</value>
+				</header>
+				<ruri>$pathprefix1:/collection/nonutf8.ics</ruri>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:caldavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name="POSTs" ignore='no'>
+		<test name='1' ignore="no">
+			<description>POST with non-utf-8 data</description>
+			<request print-response='no'>
+				<method>POST</method>
+				<header>
+					<name>Originator</name>
+					<value>$cuaddr1:</value>
+				</header>
+				<header>
+					<name>Recipient</name>
+					<value>$cuaddr2:, $cuaddr3:</value>
+				</header>
+				<ruri>$pathprefix1:/$outbox:/</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/nonascii/11.ics</filepath>
+				</data>
+				<verify>
+					<callback>prepostcondition</callback>
+					<arg>
+						<name>error</name>
+						<value>urn:ietf:params:xml:ns:caldavvalid-calendar-data</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+-->
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/propfind.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/propfind.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/propfind.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,289 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+	
+	<test-suite name='regular prop finds'>
+		<test name='1'>
+			<description>PROPFIND of basic properties depth=0</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PROPFIND of basic properties depth=1</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PROPFIND of basic properties depth=infinity</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>PROPFIND getcontentlength=0</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/7.txt</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:getcontentlength$</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='prop names'>
+		<test name='1'>
+			<description>PROPFIND of property names depth=0</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PROPFIND of property names depth=1</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PROPFIND of property names depth=infinity</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='prop all'>
+		<test name='1'>
+			<description>PROPFIND of all properties depth=0</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PROPFIND of all properties depth=1</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PROPFIND of all properties depth=infinity</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>infinity</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='prop errors'>
+		<test name='1'>
+			<description>PROPFIND with invalid elements</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>4xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>PROPFIND of unknown element</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>4xx</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>PROPFIND with one unknown property</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vpropfinds/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/proppatch.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/proppatch.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/proppatch.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,302 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>
+	
+	<test-suite name='prop patches' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>PROPPATCH of details: good</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details</value>
+						<value>DAV:details2</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details$My Name</value>
+						<value>DAV:details2$My Name 2</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>PROPPATCH of details: remove it</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/3.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details2$My Name 2</value>
+					</arg>
+					<arg>
+						<name>badprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>PROPPATCH remove non-existant</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/4.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:missing</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>PROPPATCH of resourcetype: fails</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/5.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>badprops</name>
+						<value>DAV:details</value>
+						<value>DAV:details2</value>
+						<value>DAV:resourcetype</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details2$My Name 2</value>
+					</arg>
+					<arg>
+						<name>badprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>PROPPATCH of encoded value</description>
+			<request print-response='yes'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/8.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:displayname</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='yes'>
+				<method>BREAK</method>
+			</request>
+			<request print-response='yes' ignore='yes'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/9.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:displayname$addressbook &amp;lt;- &amp;amp; ]]&amp;gt;</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='prop patch property attributes'>
+		<test name='1' ignore="no">
+			<description>PROPPATCH with property XML attribute</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/6.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/7.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details$My Name</value>
+					</arg>
+				</verify>
+				<verify>
+					<callback>dataString</callback>
+					<arg>
+						<name>contains</name>
+						<value>details xml:lang='en'</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>PROPPATCH of details: remove it</description>
+			<request print-response='no'>
+				<method>PROPPATCH</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/3.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+			<request print-response='no'>
+				<method>PROPFIND</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vproppatches/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value>DAV:details2$My Name 2</value>
+					</arg>
+					<arg>
+						<name>badprops</name>
+						<value>DAV:details</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<end/>
+	
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/put.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/put.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/put.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,355 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+	<description>Test putting contacts</description>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start/>	
+
+	<test-suite name='PUT VCARD'>
+		<test name='1' ignore='no'>
+			<description>PUT simple person contact</description>
+			<request end-delete='yes' print-response='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"5fcddd2473e8e8e04b402febf4376cab\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/1.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>PUT contact created by Mulberry</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"4cca86308feea4cae20f90724196e383\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/2.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/2.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>PUT company contact</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/3.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"05cd799823db3f8d98aad471f2cf1975\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/3.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/3.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>PUT contact with note</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/4.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"3139919330b8659088df58c14c7612a4\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/4.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/4.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore='no'>
+			<description>PUT contact with all default fields filled in</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/5.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"83a36655d1a9a7caaea12168af72c4a2\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/5.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/5.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>PUT contact with picture</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"bb6f36b8c439e991b8589f9feb6819f3\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/6.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/6.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7' ignore='no'>
+			<description>PUT company contact with picture</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/7.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/7.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"5c846fd9cf069b099b2f63116e94125a\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/7.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/7.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='8' ignore='no'>
+			<description>PUT contact with high ascii contents</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/8.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/8.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"4c470cd8d356001e4ec956002fc7caca\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/8.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/8.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='9' ignore='no'>
+			<description>PUT contact with double bytes contents</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/9.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/9.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"495e095b9d7e1e588eb78b635fddbfe0\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/9.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/9.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='10' ignore='no'>
+			<description>PUT contact with all custom fields</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$addressbookpath1:/10.vcf</ruri>
+				<data>
+					<content-type>text/vcard; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vcardput/10.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>ETag$\"91b9dc0c40c4bb39fcb6de0af814cd97\"</value>
+					</arg>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$addressbookpath1:/10.vcf</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CardDAV/vcardput/10.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<end/>
+
+</caldavtest>

Added: CalDAVTester/trunk/scripts/tests/CardDAV/reports.xml
===================================================================
--- CalDAVTester/trunk/scripts/tests/CardDAV/reports.xml	                        (rev 0)
+++ CalDAVTester/trunk/scripts/tests/CardDAV/reports.xml	2010-01-19 17:02:02 UTC (rev 4941)
@@ -0,0 +1,1258 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+<!--
+ Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<caldavtest>
+
+	<require-feature>
+		<feature>carddav</feature>
+	</require-feature>
+
+	<start>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/1.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/1.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/2.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/2.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/3.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/3.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/4.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/4.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/5.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/5.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/6.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/6.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/7.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/7.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/8.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/8.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/9.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/9.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/10.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/10.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/11.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/11.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/12.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/12.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/13.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/13.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/14.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/14.txt</filepath>
+			</data>
+		</request>
+		<request end-delete="yes">
+			<method>PUT</method>
+			<ruri>$addressbookpath1:/15.vcf</ruri>
+			<data>
+				<content-type>text/vcard; charset=utf-8</content-type>
+				<filepath>Resource/CardDAV/vreports/put/15.txt</filepath>
+			</data>
+		</request>
+	</start>
+	
+	<test-suite name="basic query reports" ignore="no">
+		<test name="1" ignore="no">
+			<description>query for resources with no filter defined</description>
+			<request>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+						<value>5.vcf</value>
+						<value>6.vcf</value>
+						<value>7.vcf</value>
+						<value>8.vcf</value>
+						<value>9.vcf</value>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="2" ignore="no">
+			<description>query for resources with "is not defined"></description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+						<value>5.vcf</value>
+						<value>6.vcf</value>
+						<value>7.vcf</value>
+						<value>8.vcf</value>
+						<value>9.vcf</value>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="3" ignore="no">
+			<description>query for resources where the FN contains the character 'Pict'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>6.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="4" ignore="no">
+			<description>query for resources where EMAIL does not contain the character '@apple.com'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>4.vcf</value>
+						<value>5.vcf</value>
+						<value>6.vcf</value>
+						<value>7.vcf</value>
+						<value>8.vcf</value>
+						<value>9.vcf</value>
+						<value>10.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="5" ignore="no">
+			<description>query for resources where EMAIL equals testinc_sf at testinc.com</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>7.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="6" ignore="no">
+			<description>query for resources where PHOTO property exists</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>6.vcf</value>
+						<value>7.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="7" ignore="no">
+			<description>query for resources where PHOTO property does not exist</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/7.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+						<value>5.vcf</value>
+						<value>8.vcf</value>
+						<value>9.vcf</value>
+						<value>10.vcf</value>
+						<value>13.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="8" ignore="no">
+			<description>query for resources where FN contains 'Pict'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/8.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>6.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="9" ignore="no">
+			<description>query for resources containing high ascii in FN</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/9.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="10" ignore="no">
+			<description>query for resources containing double bytes in FN</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/10.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>9.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="11" ignore="no">
+			<description>query for resources that contain 'De' in FN or 'apple' in EMAIL</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/11.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>13.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="12" ignore="no">
+			<description>query for resources where NOTE property exists</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/12.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+						<value>4.vcf</value>
+						<value>9.vcf</value>
+						<value>7.vcf</value>
+						<value>10.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="13" ignore="no">
+			<description>query for resources where NOTE property contains 'contact'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/13.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+						<value>4.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="14" ignore="no">
+			<description>query for resources where FN property starts with 'Jo'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/14.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="15" ignore="no">
+			<description>query for resources where NICKNAME property end with 'ry'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/15.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="16" ignore="no">
+			<description>query for resources where NOTE property contains uppercase 'CONTACT'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/16.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>2.vcf</value>
+						<value>4.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="17" ignore="no">
+			<description>query on vCard for resources where EMAIL does not contain the character '@apple.com'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/1.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/17.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value></value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="18" ignore="no">
+			<description>query on vCard for resources where EMAIL does not contain the character '@apple.com'</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/3.vcf</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/18.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="19" ignore="no">
+			<description>query for resources with no filter defined. limited to 8 results</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/19.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="20" ignore="no">
+			<description>query for resources with "is not defined", limited to 5 results></description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/20.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+					</arg>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="21" ignore="no">
+			<description>query for resources with EMAIL contains '.com' and 'apple" with parameter TYPE = "WORK") limited to 4 responses</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/21.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="22" ignore="no">
+			<description>query for resources with (FN contains 'John' and 'Anderson") or (EMAIL  contains 'apple' and 'ank')" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/22.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="23" ignore="no">
+			<description>query for resources with EMAIL with TYPE parameter = "work" and "pref" limited to 4 results</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/23.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="24" ignore="no">
+			<description>query for resources with (FN contains 'John' and 'Anderson") AND (EMAIL  contains 'apple' and 'john') limited to 4 results"" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/24.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>13.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="25" ignore="no">
+			<description>query for resources with (FN contains 'John') AND (FN contains 'Anderson") AND (EMAIL  contains 'apple') AND (EMAIL  contains 'ank') limited to 4 results"" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/25.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="26" ignore="no">
+			<description>query for resources where (FN contains 'John') OR (FN contains 'Anderson") OR (EMAIL  contains 'apple') OR (EMAIL  contains 'ank') limited to 4 results" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/26.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="27" ignore="no">
+			<description>query for resources with (FN contains 'John' AND 'Anderson") OR (EMAIL  contains 'ank' with TYPE parameter = "work") limited to 4 results" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/27.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="28" ignore="no">
+			<description>query for resources with (URL contains "jp") OR (ADR  contains 'Japan') [group properties]" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/28.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>9.vcf</value>
+						<value>10.vcf</value>
+						<value>12.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="29" ignore="no">
+			<description>query for resources with (X-JABBER  contains 'apple') OR (ADR contains "Laguna" [group properties]" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/basicquery/29.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite><test-suite name='multiget reports' ignore='no'>
+		<test name='1' ignore='no'>
+			<description>basic multiget of 6 resources returning etag and entire vcf data</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>basic multiget of 4 resources returning etag</description>
+			<request>
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>2.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Does allprop</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>10.vcf</value>
+						<value>11.vcf</value>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>Does propname</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>12.vcf</value>
+						<value>13.vcf</value>
+						<value>14.vcf</value>
+						<value>15.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore='no'>
+			<description>Single non-existent query</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>badhrefs</name>
+						<value>bogus-resource.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>basic multiget of 3 resources returning and named properties and no etag</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$addressbookpath1:/</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/multiget/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>1.vcf</value>
+						<value>3.vcf</value>
+						<value>4.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	
+	<test-suite name='search query reports' ignore='yes'>
+		<test name='1' ignore='no'>
+			<description>query for FN starts with "jos"</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					    <value>00000000-cf07a1a2-Sm9zaCBCZWhua2U%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zaHVhIEJhbmtv.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBBbHZhcmV6.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZXBoIEFuZGVyc29u.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZWxpbiBCdXN0YW1hbnRl.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZWYgQmlzbWFub3Zza3k%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBBYmFyY2E%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBCYXNhcm90.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>query for FN starts with "sim" in a unmatching vCard</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:00000000-cf07a1a2-Sm9zZWYgQmlzbWFub3Zza3k%3D.vcf</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/2.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>query for ADR does not contain "a"</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/3.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-U2FyYWggQWJib3R0.vcf</value>
+						<value>00000000-cf07a1a2-SmFtZXMgQmFja2Vz.vcf</value>
+						<value>00000000-cf07a1a2-U3RldmUgQ2Fubw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-UmljayBBbWV6cXVpdGE%3D.vcf</value>
+						<value>00000000-cf07a1a2-U3RldmVuIEJpbmRlcg%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-Vml2aWVubmUgQWhlcm4gQWhlcm4%3D.vcf</value>
+						<value>00000000-cf07a1a2-QmVwcGUgQ2FydWdubw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-TGVpZ2ggQmxhbmtlbnNoaXA%3D.vcf</value>
+						<value>00000000-cf07a1a2-VG9ueSBBZ2hhemFyaWFu.vcf</value>
+						<value>00000000-cf07a1a2-R2FyZXRoIEFsZWNvY2s%3D.vcf</value>
+						<value>00000000-cf07a1a2-QXJhY2VseSBBY29zdGE%3D.vcf</value>
+						<value>00000000-cf07a1a2-w4VzYSBCZXJnZ3Jlbg%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-TWljaGVsZSBCdXJucw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-Q29yZXkgQ2Fyc29u.vcf</value>
+						<value>00000000-cf07a1a2-TWFyeS1FbGlzYSBCdXJrZQ%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-UGhpbGlwIEJvaw%3D%3D.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>query for EMAIL is-not-defined</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-UGF1bCBCb2xpbmc%3D.vcf</value>
+						<value>00000000-cf07a1a2-QnJ5YXIgQnJvd24%3D.vcf</value>
+						<value>00000000-cf07a1a2-SmltIEFpZWxsbw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-RWxpemFiZXRoIENhbnRyYWxs.vcf</value>
+						<value>00000000-cf07a1a2-UGV0ZXIgQm9obGlu.vcf</value>
+						<value>00000000-cf07a1a2-U2FtIEFnbmV3.vcf</value>
+						<value>00000000-cf07a1a2-b25lIEJhZGdlcw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-Q2hyaXMgQnJ1Z2g%3D.vcf</value>
+						<value>00000000-cf07a1a2-QW15IENhcmxvdw%3D%3D.vcf</value>
+						<value>00000000-cf07a1a2-U3RhY3kgQW50aWE%3D.vcf</value>
+						<value>00000000-cf07a1a2-VmljdG9yIENhYmFnYmFnLCBKci4%3D.vcf</value>
+						<value>00000000-cf07a1a2-Um9iZXJ0IEJsYWluZXk%3D.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5' ignore='no'>
+			<description>query for VERSION is end-with ".0" limited to 10 results</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/5.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-RWxvZGlhIEFuZ3VpYW5vIFBhbnRvamE%3D.vcf</value>
+						<value>00000000-cf07a1a2-S2FyZW4gQWJnYXJpYW4%3D.vcf</value>
+						<value>00000000-cf07a1a2-VG9taWNrbyBBYmVsbGE%3D.vcf</value>
+						<value>00000000-cf07a1a2-S0VMTFkgQUxGT1JE.vcf</value>
+						<value>00000000-cf07a1a2-QWFyb24gQWJib3R0.vcf</value>
+						<value>00000000-cf07a1a2-RmF0aW1hIEFiZHVsbGFo.vcf</value>
+						<value>00000000-cf07a1a2-SGFuaSBBYmRlbGF6aW0%3D.vcf</value>
+						<value>00000000-cf07a1a2-U2FyYWggQWJib3R0.vcf</value>
+						<value>00000000-cf07a1a2-VGFtbXkgQWJlbGw%3D.vcf</value>
+						<value>00000000-cf07a1a2-Sm9uYXRoYW4gQWJlcmxl.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6' ignore='no'>
+			<description>query EMAIL contains "@euro" with parameter "HOME"</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/6.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='7' ignore='no'>
+			<description>query N contains "Mac" and EMAIL contains "@euro"</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/7.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					    <value>00000000-cf07a1a2-Q2xhaXJlIE1hY1JhZQ%3D%3D.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="8" ignore="no">
+			<description>query for resources with EMAIL contains '.com' and 'apple" with parameter TYPE = "WORK") limited to 4 responses</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/8.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-Sm9zZSBBYmFyY2E%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-RWxvZGlhIEFuZ3VpYW5vIFBhbnRvamE%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-U2FyYWggQWJib3R0.vcf</value>
+ 						<value>00000000-cf07a1a2-S0VMTFkgQUxGT1JE.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="9" ignore="no">
+			<description>query for resources with (FN contains 'John' and 'Anderson") or (EMAIL  contains 'apple' and 'ank')" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/9.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-TWljaGVsbGUgQmFua3M%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-Sm9obiBBbmtlcg%3D%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-Sm9obiBBbmRlcnNvbg%3D%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-Sm9zaHVhIEJhbmtv.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="10" ignore="no">
+			<description>query for resources with EMAIL with TYPE parameter = "work" and "pref" limited to 4 results</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/10.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-Sm9zZSBBYmFyY2E%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-RWxvZGlhIEFuZ3VpYW5vIFBhbnRvamE%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-U2FyYWggQWJib3R0.vcf</value>
+ 						<value>00000000-cf07a1a2-S0VMTFkgQUxGT1JE.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="11" ignore="no">
+			<description>query for resources with (FN contains 'John' and 'Anderson") AND (EMAIL  contains 'apple' and 'john') limited to 4 results"" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/11.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-Sm9obiBBbmRlcnNvbg%3D%3D.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="12" ignore="no">
+			<description>query for resources with (FN contains 'John') AND (FN contains 'Anderson") AND (EMAIL  contains 'apple') AND (EMAIL  contains 'ank') limited to 4 results"" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/12.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="13" ignore="no">
+			<description>query for resources where (FN contains 'John') OR (FN contains 'Anderson") OR (EMAIL  contains 'apple') OR (EMAIL  contains 'ank') limited to 4 results" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/13.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+ 					<arg>
+						<name>badhrefs</name>
+						<value/> 
+					</arg>
+					<arg>
+						<name>okhrefs</name>
+ 						<value>00000000-cf07a1a2-Sm9zZSBBYmFyY2E%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-RWxvZGlhIEFuZ3VpYW5vIFBhbnRvamE%3D.vcf</value>
+ 						<value>00000000-cf07a1a2-U2FyYWggQWJib3R0.vcf</value>
+ 						<value>00000000-cf07a1a2-S0VMTFkgQUxGT1JE.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name="14" ignore="no">
+			<description>query for resources with (FN contains 'John' AND 'Anderson") OR (EMAIL  contains 'ank' with TYPE parameter = "work") limited to 4 results" </description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchquery/14.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+						<value>00000000-cf07a1a2-Sm9obiBBbmtlcg%3D%3D.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+	<test-suite name='search multiget reports' ignore='yes'>
+		<test name='1' ignore='no'>
+			<description>basic multiget of 8 resources in search node returning etag and entire vcf data</description>
+			<request print-response="no">
+				<method>REPORT</method>
+				<ruri>$directory:</ruri>
+				<data substitutions='yes'>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CardDAV/vreports/searchmultiget/1.txt</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>okhrefs</name>
+					    <value>00000000-cf07a1a2-Sm9zaCBCZWhua2U%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zaHVhIEJhbmtv.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBBbHZhcmV6.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZXBoIEFuZGVyc29u.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZWxpbiBCdXN0YW1hbnRl.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZWYgQmlzbWFub3Zza3k%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBBYmFyY2E%3D.vcf</value>
+					    <value>00000000-cf07a1a2-Sm9zZSBCYXNhcm90.vcf</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<end/>
+	
+</caldavtest>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100119/845c49c0/attachment-0001.html>


More information about the calendarserver-changes mailing list