[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$<href>$principaluri1:</href></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$<unauthenticated/></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$<href>$principaluri2:</href></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$<href>$principaluri1:</href></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$<href>$principaluri2:</href></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 &lt;- &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