Author: ts
Date: Tue Sep 18 18:17:57 2007
New Revision: 6191

Log:
- Restructured client tests to be more generic.
- Prepared test structure for integration of RFC tests.

Added:
    trunk/Webdav/tests/clients/cadaver/propfind/
    trunk/Webdav/tests/clients/cadaver/propfind/request/
    trunk/Webdav/tests/clients/cadaver/propfind/request/body.xml
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind.body.xml
    trunk/Webdav/tests/clients/cadaver/propfind/request/result.ser
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind.result.txt
    trunk/Webdav/tests/clients/cadaver/propfind/request/server.php
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind.server.php
    trunk/Webdav/tests/clients/cadaver/propfind_extended/
    trunk/Webdav/tests/clients/cadaver/propfind_extended/request/
    trunk/Webdav/tests/clients/cadaver/propfind_extended/request/body.xml
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind_extended.body.xml
    trunk/Webdav/tests/clients/cadaver/propfind_extended/request/result.ser
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind_extended.result.txt
    trunk/Webdav/tests/clients/cadaver/propfind_extended/request/server.php
      - copied unchanged from r6190, 
trunk/Webdav/tests/clients/cadaver/propfind_extended.server.php
Removed:
    trunk/Webdav/tests/clients/cadaver/propfind.body.xml
    trunk/Webdav/tests/clients/cadaver/propfind.result.txt
    trunk/Webdav/tests/clients/cadaver/propfind.server.php
    trunk/Webdav/tests/clients/cadaver/propfind_extended.body.xml
    trunk/Webdav/tests/clients/cadaver/propfind_extended.result.txt
    trunk/Webdav/tests/clients/cadaver/propfind_extended.server.php
Modified:
    trunk/Webdav/tests/client_test.php

Modified: trunk/Webdav/tests/client_test.php
==============================================================================
--- trunk/Webdav/tests/client_test.php [iso-8859-1] (original)
+++ trunk/Webdav/tests/client_test.php [iso-8859-1] Tue Sep 18 18:17:57 2007
@@ -2,16 +2,21 @@
 
 abstract class ezcWebdavClientTest extends ezcTestCase
 {
-    protected $testSets = array();
 
     protected $dataDir;
 
     protected $transportClass;
 
-    protected $currentTestSet;
+    private $testSets = array();
+    
+    private $currentTestSet;
 
     /**
-     * Needs 
+     * Needs to set different options.
+     * [EMAIL PROTECTED] $this->dataDir} needs to be set to the base path of
+     * Webdav/tests/clients/<clientname>
+     * [EMAIL PROTECTED] $this->transportClass} needs to be set to the 
transport class to
+     * use, e.g. [EMAIL PROTECTED] ezcWebdavTransportTestMock} for a RFC 
compliant test.
      * 
      * @return void
      */
@@ -22,9 +27,9 @@
         parent::__construct();
         $this->setupTestEnvironment();
 
-        foreach ( glob( $this->dataDir . '/*.result.txt' ) as $resultFile )
+        foreach ( glob( $this->dataDir . '/*' ) as $testSetDir )
         {
-            $this->testSets[] = dirname( $resultFile ) . '/' . basename( 
$resultFile, '.result.txt' );
+            $this->testSets[] = $testSetDir;
         }
     }
 
@@ -45,64 +50,105 @@
             throw new PHPUnit_Framework_ExpectationFailedException( "No 
currentTestSet set for test " . __CLASS__ );
         }
 
-        $this->runTestSet();
+        $this->runTestSet( $this->currentTestSet );
     }
 
-    protected function runTestSet()
+    protected function runTestSet( $testSetName )
     {
-        if ( file_exists( ( $resultFile = $this->currentTestSet . 
'.result.txt' ) ) === true 
-            && ( $referenceResult = file_get_contents( $resultFile ) ) !== ''
-           )
+        $requestObject = null;
+
+        // Request test
+        if ( file_exists( ( $requestDir = "{$testSetName}/request" ) ) === 
true )
         {
-            $referenceResult = unserialize( file_get_contents( $resultFile ) );
-        }
-        else
-        {
-            $referenceResult = false;
+            // Settings
+            $request = array();
+            $request['result'] = $this->getFileContent( $requestDir, 'result' 
);
+            $request['server'] = $this->getFileContent( $requestDir, 'server' 
);
+            $request['body']   = $this->getFileContent( $requestDir, 'body' );
+            $request['uri']    = $this->getFileContent( $requestDir, 'uri' );
+            
+            $requestObject = $this->runRequestTest( $request );
         }
 
-        // Optionally set a body.
-        if ( file_exists( ($bodyFile = $this->currentTestSet . '.body.xml' ) ) 
)
+        // Response test
+        if ( file_exists( ( $responseDir = "{$this->dataDir}/response" ) ) === 
true && $requestObject !== null )
         {
-            $GLOBALS['EZC_WEBDAV_TRANSPORT_TEST_BODY'] = file_get_contents( 
$bodyFile );
+            // Settings
+            $response = array();
+            $response['result'] = $this->getFileContent( $responseDir, 
'result' );
+            $response['headers'] = $this->getFileContent( $responseDir, 
'headers' );
+            $response['body']   = $this->getFileContent( $responseDir, 'body' 
);
+            
+            $responseObject = $this->runResponseTest( $response, 
$requestObject );
         }
-        else
+    }
+
+    protected function getFileContent( $dir, $file )
+    {
+        // No file exists
+        if ( count( $files = glob( "{$dir}/{$file}.*" ) ) < 1 )
         {
-            $GLOBALS['EZC_WEBDAV_TRANSPORT_TEST_BODY'] = '';
+            return false;
         }
 
+        // The first file overrides
+        $fileInfo    = pathinfo( ( $filePath = $files[0] ) );
+        $fileContent = '';
+        switch( $fileInfo['extension'] )
+        {
+            case 'php':
+                $fileContent = require $filePath;
+                break;
+            case 'ser':
+                $fileContent = unserialize( file_get_contents( $filePath ) );
+                break;
+            case 'txt':
+            default:
+                $fileContent = file_get_contents( $filePath );
+                break;
+        }
+        return $fileContent;
+    }
+
+    protected function runRequestTest( array $request )
+    {
+        // Optionally set a body.
+        $GLOBALS['EZC_WEBDAV_TRANSPORT_TEST_BODY'] = ( $request['body'] !== 
false ? $request['body'] : '' );
+
         // Optionally overwrite $_SERVER
-        if ( file_exists( ( $serverFile = $this->currentTestSet . 
'.server.php' ) ) )
-        {
-            $_SERVER = require $serverFile;
-        }
-        
-        if ( file_exists( ( $uriFile = $this->currentTestSet . 'uri.txt' ) ) )
-        {
-            $uri = file_get_contents( $uriFile );
-        }
-        else
-        {
-            $uri = 'http://localhost/webdav.php';
-        }
+        $_SERVER = ( $request['server'] !== false ? $request['server'] : 
$_SERVER );
 
+        // Optionally set an URI different from 'http://localhost/webdav.php'
+        $uri = ( $request['uri'] !== false  ? $request['uri'] : 
'http://localhost/webdav.php' );
+
+        // Setup test environment
         $transportClass = $this->transportClass;
         $transport = new $transportClass();
+        
+        // Begin request test
         $result = $transport->parseRequest( $uri );
 
-        if ( $referenceResult === false )
+        if ( $request['result'] === false )
         {
             // Regenerate
-            file_put_contents( $resultFile, serialize( $result ) );
+            file_put_contents(
+                "{$this->dataDir}/request/result.txt",
+                serialize( $result )
+            );
         }
 
         $this->assertEquals(
-            $referenceResult,
+            $request['result'],
             $result,
             "Result not parsed correctly for test set 
'{$this->currentTestSet}'."
         );
     }
 
+    protected function runResponseTest( array $response, ezcWebdavRequest 
$requestObject )
+    {
+        // To be implemented...
+    }
+
 }
 
 ?>


-- 
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to