addPlugin($acl);
        $acl->unknownMethod('ACL','test');
    }
    function testCallbackPassthru() {
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server();
        $server->addPlugin($acl);
        $this->assertNull($acl->unknownMethod('FOO','test'));
    }
    /**
    /**
     * @expectedException Sabre_DAV_Exception_MethodNotAllowed
     */
    function testNotSupportedByNode() {
        $tree = array(
            new Sabre_DAV_SimpleCollection('test'),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    function testSuccessSimple() {
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',array()),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $this->assertNull($acl->httpACL('test'));
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_NotRecognizedPrincipal
     */
    function testUnrecognizedPrincipal() {
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',array()),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notfound
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_NotRecognizedPrincipal
     */
    function testUnrecognizedPrincipal2() {
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',array()),
            new Sabre_DAV_SimpleCollection('principals',array(
                new Sabre_DAV_SimpleCollection('notaprincipal'),
            )),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notaprincipal
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_NotSupportedPrivilege
     */
    function testUnknownPrivilege() {
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',array()),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notfound
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_NoAbstract
     */
    function testAbstractPrivilege() {
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',array()),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notfound
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_AceConflict
     */
    function testUpdateProtectedPrivilege() {
        $oldACL = array(
            array(
                'principal' => 'principals/notfound',
                'privilege' => '{DAV:}write',
                'protected' => true,
            ),
        );
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',$oldACL),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notfound
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_AceConflict
     */
    function testUpdateProtectedPrivilege2() {
        $oldACL = array(
            array(
                'principal' => 'principals/notfound',
                'privilege' => '{DAV:}write',
                'protected' => true,
            ),
        );
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',$oldACL),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/foo
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    /**
     * @expectedException Sabre_DAVACL_Exception_AceConflict
     */
    function testUpdateProtectedPrivilege3() {
        $oldACL = array(
            array(
                'principal' => 'principals/notfound',
                'privilege' => '{DAV:}write',
                'protected' => true,
            ),
        );
        $tree = array(
            new Sabre_DAVACL_MockACLNode('test',$oldACL),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/notfound
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $acl->httpACL('test');
    }
    function testSuccessComplex () {
        $oldACL = array(
            array(
                'principal' => 'principals/foo',
                'privilege' => '{DAV:}write',
                'protected' => true,
            ),
            array(
                'principal' => 'principals/bar',
                'privilege' => '{DAV:}read',
            ),
        );
        $tree = array(
            $node = new Sabre_DAVACL_MockACLNode('test',$oldACL),
            new Sabre_DAV_SimpleCollection('principals', array(
                new Sabre_DAVACL_MockPrincipal('foo','principals/foo'),
                new Sabre_DAVACL_MockPrincipal('baz','principals/baz'),
            )),
        );
        $acl = new Sabre_DAVACL_Plugin();
        $server = new Sabre_DAV_Server($tree);
        $server->httpRequest = new Sabre_HTTP_Request();
        $body = '
    
        
        /principals/foo
        
    
    
        
        /principals/baz
    
';
        $server->httpRequest->setBody($body);
        $server->addPlugin($acl);
        $this->assertFalse($acl->unknownMethod('ACL','test'));
        $this->assertEquals(array(
            array(
                'principal' => 'principals/foo',
                'privilege' => '{DAV:}write',
                'protected' => true,
            ),
            array(
                'principal' => 'principals/baz',
                'privilege' => '{DAV:}write',
                'protected' => false,
            ),
        ), $node->getACL());
    }
}