[Smartupload-svn] [116]

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2012年 6月 3日 (日) 23:35:59 JST


Revision: 116
          http://sourceforge.jp/projects/smartupload/scm/svn/commits/116
Author:   hryksbt
Date:     2012-06-03 23:35:58 +0900 (Sun, 03 Jun 2012)
Log Message:
-----------


Modified Paths:
--------------
    trunk/src/Engine/app/vendors/simpletest/VERSION
    trunk/src/Engine/app/vendors/simpletest/authentication.php
    trunk/src/Engine/app/vendors/simpletest/autorun.php
    trunk/src/Engine/app/vendors/simpletest/browser.php
    trunk/src/Engine/app/vendors/simpletest/collector.php
    trunk/src/Engine/app/vendors/simpletest/cookies.php
    trunk/src/Engine/app/vendors/simpletest/default_reporter.php
    trunk/src/Engine/app/vendors/simpletest/docs/en/browser_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/en/group_test_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/en/mock_objects_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/en/reporter_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/authentication_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/browser_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/expectation_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/form_testing_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/group_test_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/index.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/mock_objects_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/partial_mocks_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/reporter_documentation.html
    trunk/src/Engine/app/vendors/simpletest/docs/fr/unit_test_documentation.html
    trunk/src/Engine/app/vendors/simpletest/eclipse.php
    trunk/src/Engine/app/vendors/simpletest/encoding.php
    trunk/src/Engine/app/vendors/simpletest/errors.php
    trunk/src/Engine/app/vendors/simpletest/expectation.php
    trunk/src/Engine/app/vendors/simpletest/extensions/testdox.php
    trunk/src/Engine/app/vendors/simpletest/form.php
    trunk/src/Engine/app/vendors/simpletest/http.php
    trunk/src/Engine/app/vendors/simpletest/reflection_php4.php
    trunk/src/Engine/app/vendors/simpletest/reflection_php5.php
    trunk/src/Engine/app/vendors/simpletest/remote.php
    trunk/src/Engine/app/vendors/simpletest/reporter.php
    trunk/src/Engine/app/vendors/simpletest/scorer.php
    trunk/src/Engine/app/vendors/simpletest/shell_tester.php
    trunk/src/Engine/app/vendors/simpletest/simpletest.php
    trunk/src/Engine/app/vendors/simpletest/tag.php
    trunk/src/Engine/app/vendors/simpletest/test/acceptance_test.php
    trunk/src/Engine/app/vendors/simpletest/test/expectation_test.php
    trunk/src/Engine/app/vendors/simpletest/test_case.php
    trunk/src/Engine/app/vendors/simpletest/url.php
    trunk/src/Engine/app/vendors/simpletest/user_agent.php
    trunk/src/Engine/app/vendors/simpletest/web_tester.php

Added Paths:
-----------
    trunk/src/Engine/app/vendors/simpletest/test/reflection_php4_test.php

Removed Paths:
-------------
    trunk/src/Engine/app/vendors/simpletest/arguments.php
    trunk/src/Engine/app/vendors/simpletest/recorder.php
    trunk/src/Engine/app/vendors/simpletest/test/arguments_test.php
    trunk/src/Engine/app/vendors/simpletest/test/recorder_test.php
    trunk/src/Engine/app/vendors/simpletest/test/support/recorder_sample.php

-------------- next part --------------
Modified: trunk/src/Engine/app/vendors/simpletest/VERSION
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/VERSION	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/VERSION	2012-06-03 14:35:58 UTC (rev 116)
@@ -1 +1 @@
-1.1.0
+1.1alpha

Deleted: trunk/src/Engine/app/vendors/simpletest/arguments.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/arguments.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/arguments.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,224 +0,0 @@
-<?php
-/**
- *  base include file for SimpleTest
- *  @package    SimpleTest
- *  @subpackage UnitTester
- *  @version    $Id: dumper.php 1909 2009-07-29 15:58:11Z dgheath $
- */
-
-/**
- *    Parses the command line arguments.
- *    @package  SimpleTest
- *    @subpackage   UnitTester
- */
-class SimpleArguments {
-    private $all = array();
-
-    /**
-     * Parses the command line arguments. The usual formats
-     * are supported:
-     * -f value
-     * -f=value
-     * --flag=value
-     * --flag value
-     * -f           (true)
-     * --flag       (true)
-     * @param array $arguments      Normally the PHP $argv.
-     */
-    function __construct($arguments) {
-        array_shift($arguments);
-        while (count($arguments) > 0) {
-            list($key, $value) = $this->parseArgument($arguments);
-            $this->assign($key, $value);
-        }
-    }
-
-    /**
-     * Sets the value in the argments object. If multiple
-     * values are added under the same key, the key will
-     * give an array value in the order they were added.
-     * @param string $key    The variable to assign to.
-     * @param string value   The value that would norally
-     *                       be colected on the command line.
-     */
-    function assign($key, $value) {
-        if ($this->$key === false) {
-            $this->all[$key] = $value;
-        } elseif (! is_array($this->$key)) {
-            $this->all[$key] = array($this->$key, $value);
-        } else {
-            $this->all[$key][] = $value;
-        }
-    }
-
-    /**
-     * Extracts the next key and value from the argument list.
-     * @param array $arguments      The remaining arguments to be parsed.
-     *                              The argument list will be reduced.
-     * @return array                Two item array of key and value.
-     *                              If no value can be found it will
-     *                              have the value true assigned instead.
-     */
-    private function parseArgument(&$arguments) {
-        $argument = array_shift($arguments);
-        if (preg_match('/^-(\w)=(.+)$/', $argument, $matches)) {
-            return array($matches[1], $matches[2]);
-        } elseif (preg_match('/^-(\w)$/', $argument, $matches)) {
-            return array($matches[1], $this->nextNonFlagElseTrue($arguments));
-        } elseif (preg_match('/^--(\w+)=(.+)$/', $argument, $matches)) {
-            return array($matches[1], $matches[2]);
-        } elseif (preg_match('/^--(\w+)$/', $argument, $matches)) {
-            return array($matches[1], $this->nextNonFlagElseTrue($arguments));
-        }
-    }
-
-    /**
-     * Attempts to use the next argument as a value. It
-     * won't use what it thinks is a flag.
-     * @param array $arguments    Remaining arguments to be parsed.
-     *                            This variable is modified if there
-     *                            is a value to be extracted.
-     * @return string/boolean     The next value unless it's a flag.
-     */
-    private function nextNonFlagElseTrue(&$arguments) {
-        return $this->valueIsNext($arguments) ? array_shift($arguments) : true;
-    }
-
-    /**
-     * Test to see if the next available argument is a valid value.
-     * If it starts with "-" or "--" it's a flag and doesn't count.
-     * @param array $arguments    Remaining arguments to be parsed.
-     *                            Not affected by this call.
-     * boolean                    True if valid value.
-     */
-    function valueIsNext($arguments) {
-        return isset($arguments[0]) && ! $this->isFlag($arguments[0]);
-    }
-
-    /**
-     * It's a flag if it starts with "-" or "--".
-     * @param string $argument       Value to be tested.
-     * @return boolean               True if it's a flag.
-     */
-    function isFlag($argument) {
-        return strncmp($argument, '-', 1) == 0;
-    }
-
-    /**
-     * The arguments are available as individual member
-     * variables on the object.
-     * @param string $key              Argument name.
-     * @return string/array/boolean    Either false for no value,
-     *                                 the value as a string or
-     *                                 a list of multiple values if
-     *                                 the flag had been specified more
-     *                                 than once.
-     */
-    function __get($key) {
-        if (isset($this->all[$key])) {
-            return $this->all[$key];
-        }
-        return false;
-    }
-
-    /**
-     * The entire argument set as a hash.
-     * @return hash         Each argument and it's value(s).
-     */
-    function all() {
-        return $this->all;
-    }
-}
-
-/**
- *    Renders the help for the command line arguments.
- *    @package  SimpleTest
- *    @subpackage   UnitTester
- */
-class SimpleHelp {
-    private $overview;
-    private $flag_sets = array();
-    private $explanations = array();
-
-    /**
-     * Sets up the top level explanation for the program.
-     * @param string $overview        Summary of program.
-     */
-    function __construct($overview = '') {
-        $this->overview = $overview;
-    }
-
-    /**
-     * Adds the explanation for a group of flags that all
-     * have the same function.
-     * @param string/array $flags       Flag and alternates. Don't
-     *                                  worry about leading dashes
-     *                                  as these are inserted automatically.
-     * @param string $explanation       What that flag group does.
-     */
-    function explainFlag($flags, $explanation) {
-        $flags = is_array($flags) ? $flags : array($flags);
-        $this->flag_sets[] = $flags;
-        $this->explanations[] = $explanation;
-    }
-
-    /**
-     * Generates the help text.
-     * @returns string      The complete formatted text.
-     */
-    function render() {
-        $tab_stop = $this->longestFlag($this->flag_sets) + 4;
-        $text = $this->overview . "\n";
-        for ($i = 0; $i < count($this->flag_sets); $i++) {
-            $text .= $this->renderFlagSet($this->flag_sets[$i], $this->explanations[$i], $tab_stop);
-        }
-        return $this->noDuplicateNewLines($text);
-    }
-
-    /**
-     * Works out the longest flag for formatting purposes.
-     * @param array $flag_sets      The internal flag set list.
-     */
-    private function longestFlag($flag_sets) {
-        $longest = 0;
-        foreach ($flag_sets as $flags) {
-            foreach ($flags as $flag) {
-                $longest = max($longest, strlen($this->renderFlag($flag)));
-            }
-        }
-        return $longest;
-    }
-
-    /**
-     * Generates the text for a single flag and it's alternate flags.
-     * @returns string           Help text for that flag group.
-     */
-    private function renderFlagSet($flags, $explanation, $tab_stop) {
-        $flag = array_shift($flags);
-        $text = str_pad($this->renderFlag($flag), $tab_stop, ' ') . $explanation . "\n";
-        foreach ($flags as $flag) {
-            $text .= '  ' . $this->renderFlag($flag) . "\n";
-        }
-        return $text;
-    }
-
-    /**
-     * Generates the flag name including leading dashes.
-     * @param string $flag          Just the name.
-     * @returns                     Fag with apropriate dashes.
-     */
-    private function renderFlag($flag) {
-        return (strlen($flag) == 1 ? '-' : '--') . $flag;
-    }
-
-    /**
-     * Converts multiple new lines into a single new line.
-     * Just there to trap accidental duplicate new lines.
-     * @param string $text      Text to clean up.
-     * @returns string          Text with no blank lines.
-     */
-    private function noDuplicateNewLines($text) {
-        return preg_replace('/(\n+)/', "\n", $text);
-    }
-}
-?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/authentication.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/authentication.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/authentication.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: authentication.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: authentication.php 1784 2008-04-26 13:07:14Z pp11 $
  */
 /**
  *  include http class
@@ -20,7 +20,7 @@
     private $root;
     private $username;
     private $password;
-
+    
     /**
      *    Starts with the initial entry directory.
      *    @param string $type      Authentication type for this
@@ -35,7 +35,7 @@
         $this->username = false;
         $this->password = false;
     }
-
+    
     /**
      *    Adds another location to the realm.
      *    @param SimpleUrl $url    Somewhere in realm.
@@ -44,7 +44,7 @@
     function stretch($url) {
         $this->root = $this->getCommonPath($this->root, $url->getPath());
     }
-
+    
     /**
      *    Finds the common starting path.
      *    @param string $first        Path to compare.
@@ -62,7 +62,7 @@
         }
         return implode('/', $first) . '/';
     }
-
+    
     /**
      *    Sets the identity to try within this realm.
      *    @param string $username    Username in authentication dialog.
@@ -73,7 +73,7 @@
         $this->username = $username;
         $this->password = $password;
     }
-
+    
     /**
      *    Accessor for current identity.
      *    @return string        Last succesful username.
@@ -82,7 +82,7 @@
     function getUsername() {
         return $this->username;
     }
-
+    
     /**
      *    Accessor for current identity.
      *    @return string        Last succesful password.
@@ -91,7 +91,7 @@
     function getPassword() {
         return $this->password;
     }
-
+    
     /**
      *    Test to see if the URL is within the directory
      *    tree of the realm.
@@ -108,7 +108,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Tests to see if one string is a substring of
      *    another.
@@ -130,7 +130,7 @@
  */
 class SimpleAuthenticator {
     private $realms;
-
+    
     /**
      *    Clears the realms.
      *    @access public
@@ -138,7 +138,7 @@
     function SimpleAuthenticator() {
         $this->restartSession();
     }
-
+    
     /**
      *    Starts with no realms set up.
      *    @access public
@@ -146,7 +146,7 @@
     function restartSession() {
         $this->realms = array();
     }
-
+    
     /**
      *    Adds a new realm centered the current URL.
      *    Browsers privatey wildly on their behaviour in this
@@ -166,7 +166,7 @@
     function addRealm($url, $type, $realm) {
         $this->realms[$url->getHost()][$realm] = new SimpleRealm($type, $url);
     }
-
+    
     /**
      *    Sets the current identity to be presented
      *    against that realm.
@@ -181,7 +181,7 @@
             $this->realms[$host][$realm]->setIdentity($username, $password);
         }
     }
-
+    
     /**
      *    Finds the name of the realm by comparing URLs.
      *    @param SimpleUrl $url        URL to test.
@@ -199,7 +199,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Presents the appropriate headers for this location.
      *    @param SimpleHttpRequest $request  Request to modify.
@@ -218,7 +218,7 @@
         }
         $this->addBasicHeaders($request, $username, $password);
     }
-
+    
     /**
      *    Presents the appropriate headers for this
      *    location for basic authentication.

Modified: trunk/src/Engine/app/vendors/simpletest/autorun.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/autorun.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/autorun.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Autorunner which runs all tests cases found in a file
  *  that includes this module.
  *  @package    SimpleTest
- *  @version    $Id: autorun.php 2037 2011-11-30 17:58:21Z pp11 $
+ *  @version    $Id: autorun.php 1885 2009-07-02 10:25:52Z dgheath $
  */
 
 /**#@+
@@ -16,19 +16,17 @@
 /**#@-*/
 
 $GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_CLASSES'] = get_declared_classes();
-$GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_PATH'] = getcwd();
 register_shutdown_function('simpletest_autorun');
 
 /**
  *    Exit handler to run all recent test cases and exit system if in CLI
  */
 function simpletest_autorun() {
-	chdir($GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_PATH']);
     if (tests_have_run()) {
         return;
     }
     $result = run_local_tests();
-    if (SimpleReporter::inCli()) {
+    if (SimpleReporter::inCli()) {        
         exit($result ? 0 : 1);
     }
 }

Modified: trunk/src/Engine/app/vendors/simpletest/browser.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/browser.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/browser.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: browser.php 2013 2011-04-29 09:29:45Z pp11 $
+ *  @version    $Id: browser.php 1972 2009-12-13 21:38:19Z lastcraft $
  */
 
 /**#@+
@@ -1039,13 +1039,13 @@
      *    @return string/boolean  Page on success.
      *    @access public
      */
-    function submitFormById($id, $additional = false) {
+    function submitFormById($id) {
         if (! ($form = $this->page->getFormById($id))) {
             return false;
         }
         $success = $this->load(
                 $form->getAction(),
-                $form->submit($additional));
+                $form->submit());
         return ($success ? $this->getContent() : $success);
     }
 

Modified: trunk/src/Engine/app/vendors/simpletest/collector.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/collector.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/collector.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -6,7 +6,7 @@
  * @author Travis Swicegood <devel****@domai*****>
  * @package SimpleTest
  * @subpackage UnitTester
- * @version $Id: collector.php 2011 2011-04-29 08:22:48Z pp11 $
+ * @version $Id: collector.php 1784 2008-04-26 13:07:14Z pp11 $
  */
 
 /**
@@ -71,7 +71,7 @@
         }
         $test->addFile($file);
     }
-
+    
     /**
      *  Tests for hidden files so as to skip them. Currently
      *  only tests for Unix hidden files.

Modified: trunk/src/Engine/app/vendors/simpletest/cookies.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/cookies.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/cookies.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: cookies.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: cookies.php 1784 2008-04-26 13:07:14Z pp11 $
  */
 
 /**#@+
@@ -27,7 +27,7 @@
     private $path;
     private $expiry;
     private $is_secure;
-
+    
     /**
      *    Constructor. Sets the stored values.
      *    @param string $name            Cookie key.
@@ -49,7 +49,7 @@
         }
         $this->is_secure = $is_secure;
     }
-
+    
     /**
      *    Sets the host. The cookie rules determine
      *    that the first two parts are taken for
@@ -67,7 +67,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Accessor for the truncated host to which this
      *    cookie applies.
@@ -77,7 +77,7 @@
     function getHost() {
         return $this->host;
     }
-
+    
     /**
      *    Test for a cookie being valid for a host name.
      *    @param string $host    Host to test against.
@@ -87,7 +87,7 @@
     function isValidHost($host) {
         return ($this->truncateHost($host) === $this->getHost());
     }
-
+    
     /**
      *    Extracts just the domain part that determines a
      *    cookie's host validity.
@@ -104,7 +104,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Accessor for name.
      *    @return string       Cookie key.
@@ -113,7 +113,7 @@
     function getName() {
         return $this->name;
     }
-
+    
     /**
      *    Accessor for value. A deleted cookie will
      *    have an empty string for this.
@@ -123,7 +123,7 @@
     function getValue() {
         return $this->value;
     }
-
+    
     /**
      *    Accessor for path.
      *    @return string       Valid cookie path.
@@ -132,7 +132,7 @@
     function getPath() {
         return $this->path;
     }
-
+    
     /**
      *    Tests a path to see if the cookie applies
      *    there. The test path must be longer or
@@ -147,7 +147,7 @@
                 $this->getPath(),
                 strlen($this->getPath())) == 0);
     }
-
+    
     /**
      *    Accessor for expiry.
      *    @return string       Expiry string.
@@ -159,7 +159,7 @@
         }
         return gmdate("D, d M Y H:i:s", $this->expiry) . " GMT";
     }
-
+    
     /**
      *    Test to see if cookie is expired against
      *    the cookie format time or timestamp.
@@ -180,7 +180,7 @@
         }
         return ($this->expiry < $now);
     }
-
+    
     /**
      *    Ages the cookie by the specified number of
      *    seconds.
@@ -192,7 +192,7 @@
             $this->expiry -= $interval;
         }
     }
-
+    
     /**
      *    Accessor for the secure flag.
      *    @return boolean       True if cookie needs SSL.
@@ -201,7 +201,7 @@
     function isSecure() {
         return $this->is_secure;
     }
-
+    
     /**
      *    Adds a trailing and leading slash to the path
      *    if missing.
@@ -227,7 +227,7 @@
  */
 class SimpleCookieJar {
     private $cookies;
-
+    
     /**
      *    Constructor. Jar starts empty.
      *    @access public
@@ -235,7 +235,7 @@
     function __construct() {
         $this->cookies = array();
     }
-
+    
     /**
      *    Removes expired and temporary cookies as if
      *    the browser was closed and re-opened.
@@ -258,7 +258,7 @@
         }
         $this->cookies = $surviving_cookies;
     }
-
+    
     /**
      *    Ages all cookies in the cookie jar.
      *    @param integer $interval     The old session is moved
@@ -272,7 +272,7 @@
             $this->cookies[$i]->agePrematurely($interval);
         }
     }
-
+    
     /**
      *    Sets an additional cookie. If a cookie has
      *    the same name and path it is replaced.
@@ -290,7 +290,7 @@
         }
         $this->cookies[$this->findFirstMatch($cookie)] = $cookie;
     }
-
+    
     /**
      *    Finds a matching cookie to write over or the
      *    first empty slot if none.
@@ -311,7 +311,7 @@
         }
         return count($this->cookies);
     }
-
+    
     /**
      *    Reads the most specific cookie value from the
      *    browser cookies. Looks for the longest path that
@@ -335,7 +335,7 @@
         }
         return (isset($value) ? $value : false);
     }
-
+    
     /**
      *    Tests cookie for matching against search
      *    criteria.
@@ -359,7 +359,7 @@
         }
         return true;
     }
-
+    
     /**
      *    Uses a URL to sift relevant cookies by host and
      *    path. Results are list of strings of form "name=value".

Modified: trunk/src/Engine/app/vendors/simpletest/default_reporter.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/default_reporter.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/default_reporter.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Optional include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: default_reporter.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: default_reporter.php 1995 2010-04-06 12:57:40Z lastcraft $
  */
 
 /**#@+
@@ -59,7 +59,7 @@
             }
         }
     }
-
+    
     /**
      *    Run only this test.
      *    @return string        Test name to run.
@@ -67,7 +67,7 @@
     function getTest() {
         return $this->test;
     }
-
+    
     /**
      *    Run only this test suite.
      *    @return string        Test class name to run.
@@ -75,7 +75,7 @@
     function getTestCase() {
         return $this->case;
     }
-
+    
     /**
      *    Output should be XML or not.
      *    @return boolean        True if XML desired.
@@ -83,7 +83,7 @@
     function isXml() {
         return $this->xml;
     }
-
+    
     /**
      *    Output should suppress skip messages.
      *    @return boolean        True for no skips.
@@ -91,7 +91,7 @@
     function noSkips() {
         return $this->no_skips;
     }
-
+    
     /**
      *    Output should be a help message. Disabled during XML mode.
      *    @return boolean        True if help message desired.
@@ -99,7 +99,7 @@
     function help() {
         return $this->help && ! $this->xml;
     }
-
+    
     /**
      *    Returns plain-text help message for command line runner.
      *    @return string         String help message
@@ -117,7 +117,7 @@
 
 HELP;
     }
-
+    
 }
 
 /**
@@ -128,7 +128,7 @@
  *    @subpackage UnitTester
  */
 class DefaultReporter extends SimpleReporterDecorator {
-
+    
     /**
      *  Assembles the appropriate reporter for the environment.
      */

Modified: trunk/src/Engine/app/vendors/simpletest/docs/en/browser_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/en/browser_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/en/browser_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -255,11 +255,11 @@
 </tr>
                     <tr>
 <td><span class="new_code">getLink($label)</span></td>
-<td>Finds a URL from its label</td>
+<td>Finds a URL from it's label</td>
 </tr>
                     <tr>
 <td><span class="new_code">getLinkById($label)</span></td>
-<td>Finds a URL from its ID attribute</td>
+<td>Finds a URL from it's ID attribute</td>
 </tr>
                     <tr>
 <td><span class="new_code">getUrls()</span></td>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/en/group_test_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/en/group_test_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/en/group_test_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -174,7 +174,7 @@
                 may want to group the tests together in all sorts of ways.
             </p>
             <p>
-                Everything we have described so far with test scripts applies to
+                Everything we have dewcrbed so far with test scripts applies to
                 <span class="new_code">TestSuite</span>s as well...
 <pre>
 &lt;?php

Modified: trunk/src/Engine/app/vendors/simpletest/docs/en/mock_objects_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/en/mock_objects_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/en/mock_objects_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -377,8 +377,8 @@
 $buy_books = 'Buy books';
 $write_code = 'Write code';
 $pad = new MockPad();
-$vector-&gt;<strong>returnsByReferenceAt(0, 'note', $buy_books, array('*', 3));</strong>
-$vector-&gt;<strong>returnsByReferenceAt(1, 'note', $write_code, array('*', 3));</strong>
+$vector-&gt;&lt;strong&gt;returnsByReferenceAt(0, 'note', $buy_books, array('*', 3));
+$vector-&gt;&lt;strong&gt;returnsByReferenceAt(1, 'note', $write_code, array('*', 3));
 </pre>
                 This will return a reference to <span class="new_code">$buy_books</span> and
                 then to <span class="new_code">$write_code</span>, but only if two parameters

Modified: trunk/src/Engine/app/vendors/simpletest/docs/en/reporter_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/en/reporter_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/en/reporter_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -323,7 +323,7 @@
                 The catch with using this low level class is that you must
                 explicitely invoke it in the test script.
                 The "autorun" facility will not be able to use
-                its runtime context (whether it's running in a web browser
+                it's runime context (whether it's running in a web browser
                 or the command line) to select the reporter.
             </p>
             <p>
@@ -515,7 +515,7 @@
                 prone test.
                 You can collect the XML output using the backtick operator
                 from another test.
-                In that way it runs in its own process...
+                In that way it runs in it's own process...
 <pre>
 &lt;?php
 require_once('simpletest/xml.php');

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/authentication_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/authentication_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/authentication_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -96,22 +96,6 @@
                 tout dépend de la masse de détails que vous souhaitez voir.
             </p>
             <p>
-                Un des axes qui traverse SimpleTest est la possibilité d'utiliser
-				des objets <span class="new_code">SimpleExpectation</span> à chaque fois qu'une
-				vérification simple suffit.
-				Si vous souhaitez vérifiez simplement le contenu du realm - l'identification
-				du domaine - dans notre exemple, il suffit de faire...
-<pre>
-class AuthenticationTest extends WebTestCase {
-    function test401Header() {
-        $this-&gt;get('http://www.lastcraft.com/protected/');
-        $this-&gt;assertRealm(<strong>new PatternExpectation('/simpletest/i')</strong>);
-    }
-}
-</pre>
-                Ce type de test, vérifier les réponses HTTP, n'est cependant pas commun.
-            </p>
-			<p>
                 La plupart du temps, nous ne souhaitons pas tester
                 l'authentification en elle-même, mais plutôt
                 les pages protégées par cette authentification.
@@ -153,10 +137,6 @@
                 l'information d'authentification sera préservée.
             </p>
             <p>
-                Normalement, vous utilisez l'appel <span class="new_code">authenticate()</span>. SimpleTest
-				utilisera alors vos informations de connexion à chaque requête.
-            </p>
-            <p>
                  Pour l'instant, seule l'authentification de base est implémentée
                  et elle n'est réellement fiable qu'en tandem avec une connexion HTTPS.
                  C'est généralement suffisant pour protéger
@@ -211,25 +191,9 @@
 </pre>
                 Nous nous contentons ici de vérifier que le cookie a bien été défini.
                 Etant donné que sa valeur est plutôt énigmatique,
-                elle ne vaudrait pas la peine d'être testée avec...
-<pre>
-class LogInTest extends WebTestCase {
-    function testSessionCookieIsCorrectPattern() {
-        $this-&gt;get('http://www.my-site.com/login.php');
-        $this-&gt;assertCookie('SID', <strong>new PatternExpectation('/[a-f0-9]{32}/i')</strong>);
-    }
-}
-</pre>
-                Si vous utilisez PHP pour gérer vos sessions alors
-				ce test est encore plus inutile, étant donné qu'il ne fait
-				que tester PHP lui-même.
+                elle ne vaut pas la peine d'être testée.
             </p>
             <p>
-                Le test le plus simple pour vérifier que la connexion a bien eu lieu
-				reste d'inspecter visuellement la page suivante :
-				un simple appel à <span class="new_code">WebTestCase::assertText()</span> et le tour est joué.
-            </p>
-            <p>
                 Le reste du test est le même que dans n'importe quel autre formulaire,
                 mais nous pourrions souhaiter nous assurer
                 que le cookie n'a pas été modifié depuis la phase de connexion.
@@ -290,9 +254,8 @@
     }
 }
 </pre>
-                La méthode <span class="new_code">WebTestCase::restart()</span> préserve
-                les cookies dont le timeout n'a pas expiré,
-                mais jette les cookies temporaires ou expirés.
+                La méthode <span class="new_code">WebTestCase::restart()</span> préserve les cookies
+                dont le timeout a expiré, mais conserve les cookies temporaires ou expirés.
                 Vous pouvez spécifier l'heure et la date de leur réactivation.
             </p>
             <p>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/browser_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/browser_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/browser_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -81,13 +81,9 @@
                 avec le navigateur web vous vous autorisez l'authentification,
                 la gestion des cookies, le chargement automatique des fenêtres,
                 les redirections, la transmission de formulaires et la capacité
-                d'examiner les entêtes.
-			</p>
-			<p>
-				Ces méthodes qui se basent sur le contenu textuel des pages
-				sont fragiles dans un site en constante évolution
-				et vous voudrez employer une méthode plus directe
-				pour accéder aux données de façon permanente,
+                d'examiner les entêtes. De telles méthodes sont fragiles dans
+                un site en constante évolution et vous voudrez employer une méthode
+                plus directe pour accéder aux données de façon permanente,
                 mais pour des tâches simples cette technique peut s'avérer
                 une solution très rapide.
             </p>
@@ -115,10 +111,6 @@
 <td>Télécharge une page avec un POST</td>
 </tr>
                     <tr>
-<td><span class="new_code">click($label)</span></td>
-<td>Suit un lien visible ou un bouton texte par son étiquette</td>
-</tr>
-                    <tr>
 <td><span class="new_code">clickLink($label)</span></td>
 <td>Suit un lien par son étiquette</td>
 </tr>
@@ -195,11 +187,7 @@
                 Naviguer dans les formulaires est similaire à la <a href="form_testing_documentation.html">navigation des formulaires via WebTestCase</a>...
                 <table><tbody>
                     <tr>
-<td><span class="new_code">setField($label, $value)</span></td>
-<td>Modifie tous les champs avec cette étiquette ou ce nom</td>
-</tr>
-                    <tr>
-<td><span class="new_code">setFieldByName($name, $value)</span></td>
+<td><span class="new_code">setField($name, $value)</span></td>
 <td>Modifie tous les champs avec ce nom</td>
 </tr>
                     <tr>
@@ -207,14 +195,10 @@
 <td>Modifie tous les champs avec cet identifiant</td>
 </tr>
                     <tr>
-<td><span class="new_code">getField($label)</span></td>
-<td>Accesseur de la valeur d'un élément de formulaire avec cette étiquette ou ce nom</td>
+<td><span class="new_code">getField($name)</span></td>
+<td>Accesseur de la valeur d'un élément de formulaire</td>
 </tr>
                     <tr>
-<td><span class="new_code">getFieldByName($name)</span></td>
-<td>Accesseur de la valeur d'un élément de formulaire avec ce nom</td>
-</tr>
-                    <tr>
 <td><span class="new_code">getFieldById($id)</span></td>
 <td>Accesseur de la valeur de l'élément de formulaire avec cet identifiant</td>
 </tr>
@@ -247,35 +231,8 @@
 <td>Transmet le formulaire par son identifiant propre</td>
 </tr>
                 </tbody></table>
-                Au jourd d'aujourd'hui il n'existe pas beaucoup de méthodes pour lister
-                les formulaires et les champs disponibles.
-				<table><tbody>
-                    <tr>
-<td><span class="new_code">isClickable($label)</span></td>
-<td>Vérifie si un lien existe avec cette étiquette ou ce nom</td>
-</tr>
-                    <tr>
-<td><span class="new_code">isSubmit($label)</span></td>
-<td>Vérifie si un bouton existe avec cette étiquette ou ce nom</td>
-</tr>
-                    <tr>
-<td><span class="new_code">isImage($label)</span></td>
-<td>Vérifie si un bouton image existe avec cette étiquette ou ce nom</td>
-</tr>
-                    <tr>
-<td><span class="new_code">getLink($label)</span></td>
-<td>Trouve une URL à partir de son label</td>
-</tr>
-                    <tr>
-<td><span class="new_code">getLinkById($label)</span></td>
-<td>Trouve une URL à partir de son identifiant</td>
-</tr>
-                    <tr>
-<td><span class="new_code">getUrls()</span></td>
-<td>Liste l'ensemble des liens de la page courante</td>
-</tr>
-                </tbody></table>
-				Ce sera probablement
+                Au jourd d'aujourd'hui il n'existe aucune méthode pour lister
+                les formulaires et les champs disponibles : ce sera probablement
                 ajouté dans des versions successives de SimpleTest.
             </p>
             <p>
@@ -326,10 +283,6 @@
 <td>Ferme la socket avec un délai trop long</td>
 </tr>
                     <tr>
-<td><span class="new_code">getUrl()</span></td>
-<td>L'URL de la page chargée le plus récemment</td>
-</tr>
-                    <tr>
 <td><span class="new_code">getRequest()</span></td>
 <td>L'entête de la requête brute de la page ou de la fenêtre</td>
 </tr>
@@ -358,10 +311,6 @@
 <td>Le realm d'authentification dans l'entête d'une provocation 401</td>
 </tr>
                     <tr>
-<td><span class="new_code">getBaseUrl()</span></td>
-<td>Uniquement la base de l'URL de la page chargée le plus récemment</td>
-</tr>
-                    <tr>
 <td><span class="new_code">setMaximumRedirects($max)</span></td>
 <td>Nombre de redirections avant que la page ne soit chargée automatiquement</td>
 </tr>
@@ -402,14 +351,14 @@
 <pre><strong>
 class TestOfRegistration extends UnitTestCase {
     function testNewUserAddedToAuthenticator() {</strong>
-        $browser = new SimpleBrowser();
+        $browser = &amp;new SimpleBrowser();
         $browser-&gt;get('http://my-site.com/register.php');
         $browser-&gt;setField('email', 'me @ here');
         $browser-&gt;setField('password', 'Secret');
         $browser-&gt;clickSubmit('Register');
         <strong>
-        $authenticator = new Authenticator();
-        $member = $authenticator-&gt;findByEmail('me @ here');
+        $authenticator = &amp;new Authenticator();
+        $member = &amp;$authenticator-&gt;findByEmail('me @ here');
         $this-&gt;assertEqual($member-&gt;getPassword(), 'Secret');</strong>
     }
 }
@@ -449,7 +398,7 @@
 </pre>
                 Vous pouvez aussi utiliser la classe <span class="new_code">SimpleBrowser</span>
                 quand vous souhaitez écrire des scénarios de test en utilisant
-                un autre outil que SimpleTest, comme PHPUnit par exemple.
+                un autre outil que SimpleTest.
             </p>
         
     </div>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/expectation_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/expectation_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/expectation_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -78,7 +78,7 @@
 <pre>
 <strong>class NewsService {
     ...
-    function publish($writer) {
+    function publish(&amp;$writer) {
         if (! $this-&gt;isConnected()) {
             $writer-&gt;write('Cannot connect to news service "' .
                     $this-&gt;_name . '" at this time. ' .
@@ -94,13 +94,13 @@
 class TestOfNewsService extends UnitTestCase {
     ...
     function testConnectionFailure() {<strong>
-        $writer = new MockWriter($this);
+        $writer = &amp;new MockWriter($this);
         $writer-&gt;expectOnce('write', array(
                 'Cannot connect to news service ' .
                 '"BBC News" at this time. ' .
                 'Please try again later.'));
         
-        $service = new NewsService('BBC News');
+        $service = &amp;new NewsService('BBC News');
         $service-&gt;publish($writer);
         
         $writer-&gt;tally();</strong>
@@ -121,12 +121,12 @@
 class TestOfNewsService extends UnitTestCase {
     ...
     function testConnectionFailure() {
-        $writer = new MockWriter($this);<strong>
+        $writer = &amp;new MockWriter($this);<strong>
         $writer-&gt;expectOnce(
                 'write',
-                array(new PatternExpectation('/cannot connect/i')));</strong>
+                array(new WantedPatternExpectation('/cannot connect/i')));</strong>
         
-        $service = new NewsService('BBC News');
+        $service = &amp;new NewsService('BBC News');
         $service-&gt;publish($writer);
         
         $writer-&gt;tally();
@@ -134,14 +134,14 @@
 }
 </pre>
                 Plutôt que de transmettre le paramètre attendu au <span class="new_code">MockWriter</span>,
-                nous envoyons une classe d'attente appelée <span class="new_code">PatternExpectation</span>.
+                nous envoyons une classe d'attente appelée <span class="new_code">WantedPatternExpectation</span>.
                 L'objet fantaisie est suffisamment élégant pour reconnaître
                 qu'il s'agit d'un truc spécial et pour le traiter différemment.
                 Plutôt que de comparer l'argument entrant à cet objet,
                 il utilise l'objet attente lui-même pour exécuter le test.
             </p>
             <p>
-                <span class="new_code">PatternExpectation</span> utilise
+                <span class="new_code">WantedPatternExpectation</span> utilise
                 l'expression rationnelle pour la comparaison avec son constructeur.
                 A chaque fois qu'une comparaison est fait à travers
                 <span class="new_code">MockWriter</span> par rapport à cette classe attente,
@@ -155,10 +155,6 @@
                 Les classes attente possibles sont...
                 <table><tbody>
                     <tr>
-<td><span class="new_code">AnythingExpectation</span></td>
-<td>Sera toujours validé</td>
-</tr>
-                    <tr>
 <td><span class="new_code">EqualExpectation</span></td>
 <td>Une égalité, plutôt que la plus forte comparaison à l'identique</td>
 </tr>
@@ -175,11 +171,11 @@
 <td>Inverse la logique de l'objet fantaisie</td>
 </tr>
                     <tr>
-<td><span class="new_code">PatternExpectation</span></td>
+<td><span class="new_code">WantedPatternExpectation</span></td>
 <td>Utilise une expression rationnelle Perl pour comparer une chaîne</td>
 </tr>
                     <tr>
-<td><span class="new_code">NoPatternExpectation</span></td>
+<td><span class="new_code">NoUnwantedPatternExpectation</span></td>
 <td>Passe seulement si l'expression rationnelle Perl échoue</td>
 </tr>
                     <tr>
@@ -195,14 +191,6 @@
 <td><span class="new_code">MethodExistsExpectation</span></td>
 <td>Vérifie si la méthode est disponible sur un objet</td>
 </tr>
-					<tr>
-<td><span class="new_code">TrueExpectation</span></td>
-<td>Accepte n'importe quelle variable PHP qui vaut vrai</td>
-</tr>
-                    <tr>
-<td><span class="new_code">FalseExpectation</span></td>
-<td>Accepte n'importe quelle variable PHP qui vaut faux</td>
-</tr>
                 </tbody></table>
                 La plupart utilisent la valeur attendue dans le constructeur.
                 Les exceptions sont les vérifications sur motif,
@@ -231,11 +219,11 @@
 Stub::generate('Authorisation');
 <strong>
 $authorisation = new StubAuthorisation();
-$authorisation-&gt;returns(
+$authorisation-&gt;setReturnValue(
         'isAllowed',
         true,
         array(new IsAExpectation('Session', 'Must be a session')));
-$authorisation-&gt;returns('isAllowed', false);</strong>
+$authorisation-&gt;setReturnValue('isAllowed', false);</strong>
 </pre>
                 Le comportement par défaut du bouchon serveur
                 est défini pour renvoyer <span class="new_code">false</span>
@@ -263,7 +251,7 @@
                 la validité d'adresses IP. Pour fonctionner correctement
                 avec les bouchons serveurs et les objets fantaisie,
                 cette nouvelle classe d'attente devrait étendre
-                <span class="new_code">SimpleExpectation</span> ou une autre de ses sous-classes...
+                <span class="new_code">SimpleExpectation</span>...
 <pre>
 <strong>class ValidIp extends SimpleExpectation {
     
@@ -286,47 +274,6 @@
                 Cette classe peut désormais être employée à la place
                 des classes d'attente précédentes.
             </p>
-			<p>
-				Voici un exemple plus typique, vérifier un hash...
-<pre>
-<strong>class JustField extends EqualExpectation {
-    private $key;
-    
-    function __construct($key, $expected) {
-        parent::__construct($expected);
-        $this-&gt;key = $key;
-    }
-    
-    function test($compare) {
-        if (! isset($compare[$this-&gt;key])) {
-            return false;
-        }
-        return parent::test($compare[$this-&gt;key]);
-    }
-    
-    function testMessage($compare) {
-        if (! isset($compare[$this-&gt;key])) {
-            return 'Key [' . $this-&gt;key . '] does not exist';
-        }
-        return 'Key [' . $this-&gt;key . '] -&gt; ' .
-                parent::testMessage($compare[$this-&gt;key]);
-    }
-}</strong>
-</pre>
-                L'habitude a été prise pour séparer les clauses du message avec
-                "&amp;nbsp;-&gt;&amp;nbsp;".
-				Cela permet aux outils dérivés de reformater la sortie.
-            </p>
-            <p>
-                Supposons qu'un authentificateur s'attend à recevoir
-				une ligne de base de données correspondant à l'utilisateur,
-				et que nous avons juste besoin de valider le nom d'utilisateur.
-				Nous pouvons le faire très simplement avec... 
-<pre>
-$mock-&gt;expectOnce('authenticate',
-                  array(new JustKey('username', 'marcus')));
-</pre>
-            </p>
         
         <h2>
 <a class="target" name="unitaire"></a>Sous le capot du testeur unitaire</h2>
@@ -340,23 +287,20 @@
             </p>
             <p>
                 La méthode la plus directe est d'utiliser la méthode
-                <span class="new_code">SimpleTest::assert()</span> pour effectuer le test...
+                <span class="new_code">SimpleTest::assertExpectation()</span> pour effectuer le test...
 <pre>
 <strong>class TestOfNetworking extends UnitTestCase {
     ...
     function testGetValidIp() {
         $server = &amp;new Server();
-        $this-&gt;assert(
+        $this-&gt;assertExpectation(
                 new ValidIp(),
                 $server-&gt;getIp(),
                 'Server IP address-&gt;%s');
     }
 }</strong>
 </pre>
-                <span class="new_code">assert()</span> testera toute attente directement.
-            </p>
-			<p>
-				C'est plutôt sale par rapport à notre syntaxe habituelle
+                C'est plutôt sale par rapport à notre syntaxe habituelle
                 du type <span class="new_code">assert...()</span>.
             </p>
             <p>
@@ -380,19 +324,11 @@
     }
 }
 </pre>
-                It is rare to need the expectations for more than pattern
-                matching, but these facilities do allow testers to build
-                some sort of domain language for testing their application.
-                Also, complex expectation classes could make the tests
-                harder to read and debug.
-                In effect extending the test framework to create their own tool set.
-            
-			
+                Il est peu probable que nous ayons besoin
+                de ce niveau de contrôle sur la machinerie de test.
                 Il est assez rare que le besoin d'une attente dépasse
-                le stade de la reconnaissance d'un motif, mais ils permettent
-				aux testeurs de construire leur propre langage dédié ou DSL
-				(Domain Specific Language) pour tester leurs applications.
-                Attention, les classes d'attente complexes peuvent rendre
+                le stade de la reconnaissance d'un motif.
+                De plus, les classes d'attente complexes peuvent rendre
                 les tests difficiles à lire et à déboguer.
                 Ces mécanismes sont véritablement là pour les auteurs
                 de système qui étendront le framework de test

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/form_testing_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/form_testing_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/form_testing_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -79,7 +79,8 @@
                 <a href="http://www.lastcraft.com/form_testing_documentation.php">LastCraft</a>,
                 avec le test suivant...
 <pre>
-class SimpleFormTests extends WebTestCase {<strong>
+class SimpleFormTests extends WebTestCase {
+    <strong>
     function testDefaultValue() {
         $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
         $this-&gt;assertField('a', 'A default');
@@ -93,16 +94,8 @@
                 et qu'il contient la valeur "A default".
             </p>
             <p>
-                Nous pourrions retourner le formulaire tout de suite...
-<pre>
-class SimpleFormTests extends WebTestCase {
-    function testDefaultValue() {
-        $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
-        $this-&gt;assertField('a', <strong>new PatternExpectation('/default/')</strong>);
-    }
-}
-</pre>
-                Mais d'abord nous allons changer la valeur du champ texte.
+                Nous pourrions retourner le formulaire tout de suite,
+                mais d'abord nous allons changer la valeur du champ texte.
                 Ce n'est qu'après que nous le transmettrons...
 <pre>
 class SimpleFormTests extends WebTestCase {
@@ -119,16 +112,15 @@
                 sur la balise form, ni attribut "action",
                 le scénario de test suivra le comportement classique d'un navigateur :
                 transmission des données avec une requête <em>GET</em>
-                vers la même page. En règle générale SimpleTest essaie d'émuler
+                vers la même page. SimpleTest essaie d'émuler
                 le comportement typique d'un navigateur autant que possible,
                 plutôt que d'essayer d'attraper des attributs manquants sur les balises.
                 La raison est simple : la cible d'un framework de test est
                 la logique d'une application PHP, pas les erreurs
                 -- de syntaxe ou autres -- du code HTML.
                 Pour les erreurs HTML, d'autres outils tel
-				<a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a>
-                devraient être employés, ou même n'importe lequel des validateurs HTML et CSS
-				déjà sur le marché.
+                <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a>
+                devraient être employés.
             </p>
             <p>
                 Si un champ manque dans n'importe quel formulaire ou si
@@ -137,7 +129,7 @@
                 nous souhaitons vérifier qu'une option "Superuser"
                 n'est pas présente dans ce formulaire...
 <pre>
-<strong>Select type of user to add:</strong>
+&lt;strong&gt;Select type of user to add:&lt;/strong&gt;
 &lt;select name="type"&gt;
     &lt;option&gt;Subscriber&lt;/option&gt;
     &lt;option&gt;Author&lt;/option&gt;
@@ -167,7 +159,8 @@
     }
 }
 </pre>
-                La sélection ne sera pas changée si la nouvelle valeur n'est pas une des options.
+                La sélection ne sera pas changée suite à un échec d'initialisation
+                d'une valeur sur un objet.
             </p>
             <p>
                 Voici la liste complète des objets supportés à aujourd'hui...
@@ -205,13 +198,13 @@
                 Voici un exemple avec des cases à cocher...
 <pre>
 &lt;form class="demo"&gt;
-    <strong>Create privileges allowed:</strong>
+    &lt;strong&gt;Create privileges allowed:&lt;/strong&gt;
     &lt;input type="checkbox" name="crud" value="c" checked&gt;&lt;br&gt;
-    <strong>Retrieve privileges allowed:</strong>
+    &lt;strong&gt;Retrieve privileges allowed:&lt;/strong&gt;
     &lt;input type="checkbox" name="crud" value="r" checked&gt;&lt;br&gt;
-    <strong>Update privileges allowed:</strong>
+    &lt;strong&gt;Update privileges allowed:&lt;/strong&gt;
     &lt;input type="checkbox" name="crud" value="u" checked&gt;&lt;br&gt;
-    <strong>Destroy privileges allowed:</strong>
+    &lt;strong&gt;Destroy privileges allowed:&lt;/strong&gt;
     &lt;input type="checkbox" name="crud" value="d" checked&gt;&lt;br&gt;
     &lt;input type="submit" value="Enable Privileges"&gt;
 &lt;/form&gt;
@@ -263,9 +256,9 @@
                 Le code suivant <em>ne fonctionnera pas</em> :
 <pre>
 class SimpleFormTests extends WebTestCase {
-    function testEmulateMyJavascriptForm() {
-        <strong>// This does *not* work</strong>
-        $this-&gt;setField('a_hidden_field', '123');
+    function testMyJavascriptForm() {
+        <strong>// Ne fonctionne *pas*</strong>
+        $this-&gt;setField('un_champ_caché', '123');
         $this-&gt;clickSubmit('OK');
     }
 }
@@ -275,7 +268,8 @@
 <pre>
 class SimpleFormTests extends WebTestCase {
     function testMyJavascriptForm() {
-        <strong>$this-&gt;clickSubmit('OK', array('a_hidden_field'=&gt;'123'));</strong>
+        // Ajoute le champ caché comme variable POST supplémentaire
+        <strong>$this-&gt;clickSubmit('OK', array('un_champ_caché'=&gt;'123'));</strong>
     }
 
 }
@@ -287,7 +281,7 @@
                 dans le formulaire) et que peut-être serait-il plus prudent
                 d'utiliser un outil comme
                 <a href="http://selenium.openqa.org/">Selenium</a> pour mettre sur pied
-                un test complet.
+                un test de recette complet.
             </p>
         
         <h2>
@@ -308,11 +302,7 @@
 }
 </pre>
                 En ajoutant des données à la méthode <span class="new_code">WebTestCase::post()</span>,
-                nous émulons la transmission d'un formulaire.
-				D'ordinaire, vous ne ferez cela que pour parer au plus pressé,
-				ou alors si vous espérez un tiers (javascript ?) transmette le formulaire.
-				Il reste quand même exception : si vous souhaitez vous protégez
-				d'attaques de type "spoofing".  
+                nous essayons de télécharger la page via la transmission d'un formulaire.
             </p>
         
     </div>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/group_test_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/group_test_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/group_test_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -40,187 +40,323 @@
             Combiner des groupes des tests dans des
             <a href="#plus-haut">groupes plus grands</a>.
         </li>
+<li>
+            Intégrer des <a href="#heritage">scénarios de test hérités</a>
+            d'un autre type de PHPUnit.
+        </li>
 </ul>
 <div class="content">
         <h2>
 <a class="target" name="grouper"></a>Grouper des tests</h2>
             <p>
-                Il existe beaucoup de moyens pour grouper des tests dans des suites de tests.
-                Le premier d'entre eux est tout simplement ajouter tous les scénarios de test
-				au fur et à mesure d'un unique fichier...
+                Pour lancer les scénarios de tests en tant que groupe,
+                ils devraient être placés dans des fichiers sans le code du lanceur...
 <pre>
 <strong>&lt;?php
-require_once(dirname(__FILE__) . '/simpletest/autorun.php');
-require_once(dirname(__FILE__) . '/../classes/io.php');
+    require_once('../classes/io.php');
 
-class FileTester extends UnitTestCase {
-    ...
-}
+    class FileTester extends UnitTestCase {
+        ...
+    }
 
-class SocketTester extends UnitTestCase {
-    ...
-}
+    class SocketTester extends UnitTestCase {
+        ...
+    }
 ?&gt;</strong>
 </pre>
                 Autant de scénarios que nécessaires peuvent être
-                mis dans cet unique fichier. Ils doivent contenir
+                mis dans un fichier unique. Ils doivent contenir
                 tout le code nécessaire, entre autres la bibliothèque testée,
                 mais aucune des bibliothèques de SimpleTest.
             </p>
-			<p>
-				Occasionnellement des sous-classes spéciales sont créés pour
-				ajouter des méthodes nécessaires à certains tests spécifiques
-				au sein de l'application.
-                Ces nouvelles classes de base sont ensuite utilisées
-				à la place de <span class="new_code">UnitTestCase</span>
-                ou de <span class="new_code">WebTestCase</span>.
-                Bien sûr vous ne souhaitez pas les lancer en tant que
-				scénario de tests : il suffit alors de les identifier
-				comme "abstraites"...
+            <p>
+                Si vous avez étendu l'un ou l'autre des scénarios de test,
+                vous pouvez aussi les inclure.
 <pre>
-<strong>abstract</strong> class MyFileTestCase extends UnitTestCase {
-    ...
-}
+&lt;?php
+    require_once('../classes/io.php');
+<strong>
+    class MyFileTestCase extends UnitTestCase {
+        ...
+    }
+    SimpleTestOptions::ignore('MyFileTestCase');</strong>
 
-class FileTester extends MyFileTestCase { ... }
+    class FileTester extends MyFileTestCase {
+        ...
+    }
 
-class SocketTester extends UnitTestCase { ... }
+    class SocketTester extends UnitTestCase {
+        ...
+    }
+?&gt;
 </pre>
                 La classe <span class="new_code">FileTester</span> ne contient aucun test véritable,
                 il s'agit d'une classe de base pour d'autres scénarios de test.
-			</p>
-			<p>
-                Nous appelons ce fichier <em>file_test.php</em>.
-				Pour l'instant les scénarios de tests sont simplement groupés dans le même fichier.
-                Nous pouvons mettre en place des structures plus importantes
-				en incluant d'autres fichiers de tests.
+                Pour cette raison nous utilisons la directive
+                <span class="new_code">SimpleTestOptions::ignore()</span> pour indiquer
+                au prochain groupe de tests de l'ignorer.
+                Cette directive peut se placer n'importe où dans le fichier
+                et fonctionne quand un fichier complet des scénarios de test
+                est chargé (cf. ci-dessous).
+                Nous l'appelons <em>file_test.php</em>.
+            </p>
+            <p>
+                Ensuite nous créons un fichier de groupe de tests,
+                disons <em>group_test.php</em>.
+                Vous penserez à un nom plus convaincant, j'en suis sûr.
+                Nous lui ajoutons le fichier de test avec une méthode sans risque...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
-require_once('file_test.php');
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');<strong>
+    require_once('file_test.php');
+
+    $test = &amp;new GroupTest('All file tests');
+    $test-&gt;addTestCase(new FileTestCase());
+    $test-&gt;run(new HtmlReporter());</strong>
 ?&gt;
 </pre>
-				Ceci fontionnera, tout en créant une hiérarchie tout à fait plate.
-                A la place, nous créons un fichier de suite de tests.
-                Notre suite des tests de premier niveau devient...
+                Ceci instancie le scénario de test avant que
+                la suite de test ne soit lancée.
+                Ça pourrait devenir assez onéreux avec
+                un grand nombre de scénarios de test : 
+                il existe donc une autre méthode qui instancie
+                la classe uniquement quand elle devient nécessaire...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    require_once('file_test.php');
 
-class AllFileTests extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        <strong>$this-&gt;addFile('file_test.php');</strong>
-    }
-}
+    $test = &amp;new GroupTest('All file tests');<strong>
+    $test-&gt;addTestClass('FileTestCase');</strong>
+    $test-&gt;run(new HtmlReporter());
 ?&gt;
 </pre>
-				Voici ce qui arrive : la class <span class="new_code">TestSuite</span>
-                effecturera le <span class="new_code">require_once()</span> pour nous.
-				Ensuite elle vérifie si de nouvelles classes de test
-				ont été créées par ce nouveau fichier et les inclut
-				automatiquement dans la suite de tests.
-				Cette méthode nous donne un maximum de contrôle
-				tout comme le ferait des ajouts manuels de fichiers de tests
-				au fur et à mesure où notre suite grandit.
-            </p>
-            <p>
-                Si c'est trop de boulot pour vos petits doigts et qu'en plus
-				vous avez envie de grouper vos suites de tests par répertoire
-				ou par un tag dans le nom des fichiers, alors il y a un moyen
-				encore plus automatique... 
+                Le problème de cette technique est que pour
+                chaque scénario de test supplémentaire nous aurons à importer
+                (via <span class="new_code">require_once()</span>) le fichier de code de test
+                et à instancier manuellement chaque scénario de test.
+                Nous pouvons nous épargner beaucoup de dactylographie avec...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
 
-class AllFileTests extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        $this-&gt;collect(dirname(__FILE__) . '/unit',
-                       new SimplePatternCollector('/_test.php/'));
-    }
-}
+    $test = &amp;new GroupTest('All file tests');<strong>
+    $test-&gt;addTestFile('file_test.php');</strong>
+    $test-&gt;run(new HtmlReporter());
 ?&gt;
 </pre>
-				Cette fonctionnalités va scanner un répertoire appelé "unit",
-				y détecter tous les fichiers finissant par "_test.php"
-				et les charger.
-                Vous n'avez pas besoin d'utiliser <span class="new_code">SimplePatternCollector</span> pour
-				filtrer en fonction d'un motif dans le nom de fichier,
-				mais c'est son usage le plus courant. 
+                Voici ce qui vient de se passer :
+                la classe <span class="new_code">GroupTest</span> a réalisé le
+                <span class="new_code">require_once()</span> pour nous.
+                Ensuite elle vérifie si de nouvelles classes de scénario
+                de test ont été créées par ce nouveau fichier
+                et les ajoute automatiquement au groupe de tests.
+                Désormais tout ce qu'il nous reste à faire,
+                c'est d'ajouter chaque nouveau fichier.
             </p>
-			<p>
-                Ce morceau de code est très courant.
-				Désormais la seule chose qu'il vous reste à faire, c'est de
-				déposer un fichier avec des scénarios de tests dans ce répertoire
-				et il sera lancé directement par le script de la suite de tests. 
+            <p>
+                Il y a deux choses qui peuvent planter
+                et qui demandent un minimum d'attention...
+                <ol>
+                    <li>
+                        Le fichier peut déjà avoir été analysé par PHP
+                        et dans ce cas aucune classe ne sera ajoutée.
+                        Pensez à bien vérifier que les scénarios de test
+                        ne sont inclus que dans ce fichier et dans aucun autre
+                        (Note : avec la nouvelle fonctionnalité <cite>autorun</cite>,
+                        ce problème a maintenant été résolu).
+                    </li>
+                    <li>
+                        Les nouvelles classes d'extension de scénario
+                        de test qui sont incluses seront placées
+                        dans le groupe de tests et exécutées par la même occasion.
+                        Vous aurez à ajouter une directive
+                        <span class="new_code">SimpleTestOptions::ignore()</span> pour ces classes
+                        ou alors pensez à les ajouter avant la ligne
+                        <span class="new_code">GroupTest::addTestFile()</span>.
+                    </li>
+                </ol>
             </p>
-			<p>
-                Juste un bémol : vous ne pouvez pas contrôler l'ordre de lancement
-				des tests.
-				Si vous souhaitez voir des composants de bas niveau renvoyer leurs erreurs
-				dès le début de la suite de tests - en particulier pour se facilier le travail
-				de diagnostic - alors vous devriez plutôt passer par <span class="new_code">addFile()</span>
-				pour ces cas spécifiques.
-                Les scénarios de tests ne sont chargés qu'une fois, pas d'inquiétude donc
-				lors du scan de votre répertoire avec tous les tests.
-            </p>
-			<p>
-                Les tests chargés avec la méthode <span class="new_code">addFile</span> ont certaines propriétés
-				qui peuvent s'avérer intéressantes.
-				Elle vous assure que le constructeur est lancé avant la première méthode
-				de test et que le destructeur est lancé après la dernière méthode de test.
-				Cela vous permet de placer une initialisation (setUp et tearDown) globale
-				au sein de ce destructeur et desctructeur, comme dans n'importe
-				quelle classe. 
-            </p>
         
         <h2>
 <a class="target" name="plus-haut"></a>Groupements de plus haut niveau</h2>
-			<p>
+            <p>
                 La technique ci-dessus place tous les scénarios de test
                 dans un unique et grand groupe.
                 Sauf que pour des projets plus conséquents,
                 ce n'est probablement pas assez souple;
                 vous voudriez peut-être grouper les tests tout à fait différemment.
             </p>
-<p>
-                Tout ce que nous avons décrit avec des scripts de tests 
-				s'applique pareillement avec des <span class="new_code">TestSuite</span>s...
+            <p>
+                Pour obtenir un groupe de tests plus souple
+                nous pouvons sous classer <span class="new_code">GroupTest</span>
+                et ensuite l'instancier au cas par cas...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
-<strong>
-class BigTestSuite extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        $this-&gt;addFile('file_tests.php');
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    <strong>
+    class FileGroupTest extends GroupTest {
+        function FileGroupTest() {
+            $this-&gt;GroupTest('All file tests');
+            $this-&gt;addTestFile('file_test.php');
+        }
+    }</strong>
+?&gt;
+</pre>
+                Ceci nomme le test dans le constructeur
+                et ensuite ajoute à la fois nos scénarios
+                de test et un unique groupe en dessous.
+                Bien sûr nous pouvons ajouter plus d'un groupe à cet instant.
+                Nous pouvons maintenant invoquer les tests
+                à partir d'un autre fichier d'exécution...
+<pre>
+&lt;?php
+    require_once('file_group_test.php');
+    <strong>
+    $test = &amp;new FileGroupTest();
+    $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+                ...ou alors nous pouvons les grouper
+                dans un groupe de tests encore plus grand...
+<pre>
+&lt;?php
+    require_once('file_group_test.php');
+    <strong>
+    $test = &amp;new BigGroupTest('Big group');
+    $test-&gt;addTestCase(new FileGroupTest());
+    $test-&gt;addTestCase(...);
+    $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+                Si nous souhaitons lancer le groupe de tests original
+                sans utiliser ses petits fichiers d'exécution,
+                nous pouvons mettre le code du lanceur de test
+                derrière des barreaux quand nous créons chaque groupe.
+<pre>
+&lt;?php
+    class FileGroupTest extends GroupTest {
+        function FileGroupTest() {
+            $this-&gt;GroupTest('All file tests');
+            $test-&gt;addTestFile('file_test.php');
+        }
     }
-}</strong>
+    <strong>
+    if (! defined('RUNNER')) {
+        define('RUNNER', true);</strong>
+        $test = &amp;new FileGroupTest();
+        $test-&gt;run(new HtmlReporter());
+    }
 ?&gt;
 </pre>
-				Cette opération additionne nos scénarios de tests et une unique suite
-				sous la première.
-                Quand un test échoue, nous voyons le fil d'ariane avec l'enchainement.
-                Nous pouvons même mélanger groupes et tests librement en prenant
-				quand même soin d'éviter les inclusions en boucle.
+                Cette approche exige aux barrières d'être activées
+                à l'inclusion du fichier de groupe de tests,
+                mais c'est quand même moins de tracas que beaucoup
+                de fichiers de lancement éparpillés.
+                Reste à inclure des barreaux identiques
+                au niveau supérieur afin de s'assurer que
+                le <span class="new_code">run()</span> ne sera lancé qu'une seule fois
+                à partir du script de haut niveau qui l'a invoqué.
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+    define('RUNNER', true);
 
-class BigTestSuite extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        $this-&gt;addFile('file_tests.php');
-        <strong>$this-&gt;addFile('some_other_test.php');</strong>
+    require_once('file_group_test.php');
+    $test = &amp;new BigGroupTest('Big group');
+    $test-&gt;addTestCase(new FileGroupTest());
+    $test-&gt;addTestCase(...);
+    $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+                Comme les scénarios de test normaux,
+                un <span class="new_code">GroupTest</span> peut être chargé avec la méthode
+                <span class="new_code">GroupTest::addTestFile()</span>.
+<pre>  
+&lt;?php   
+    define('RUNNER', true); 
+        
+    $test = &amp;new BigGroupTest('Big group');<strong> 
+    $test-&gt;addTestFile('file_group_test.php');  
+    $test-&gt;addTestFile(...);</strong>   
+    $test-&gt;run(new HtmlReporter()); 
+?&gt;  
+</pre>
+            </p>
+        
+        <h2>
+<a class="target" name="heritage"></a>Intégrer des scénarios de test hérités</h2>
+            <p>
+                Si vous avez déjà des tests unitaires pour votre code
+                ou alors si vous étendez des classes externes
+                qui ont déjà leurs propres tests, il y a peu de chances
+                pour que ceux-ci soient déjà au format SimpleTest.
+                Heureusement il est possible d'incorporer ces scénarios
+                de test en provenance d'autres testeurs unitaires
+                directement dans des groupes de test SimpleTest.
+            </p>
+            <p>
+                Par exemple, supposons que nous ayons
+                ce scénario de test prévu pour
+                <a href="http://sourceforge.net/projects/phpunit">PhpUnit</a>
+                dans le fichier <em>config_test.php</em>...
+<pre>
+<strong>class ConfigFileTest extends TestCase {
+    function ConfigFileTest() {
+        $this-&gt;TestCase('Config file test');
     }
-}
+    
+    function testContents() {
+        $config = new ConfigFile('test.conf');
+        $this-&gt;assertRegexp('/me/', $config-&gt;getValue('username'));
+    }
+}</strong>
+</pre>
+                Le groupe de tests peut le reconnaître à partir
+                du moment où nous mettons l'adaptateur approprié
+                avant d'ajouter le fichier de test...
+<pre>
+&lt;?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');<strong>
+    require_once('simpletest/adapters/phpunit_test_case.php');</strong>
+
+    $test = &amp;new GroupTest('All file tests');<strong>
+    $test-&gt;addTestFile('config_test.php');</strong>
+    $test-&gt;run(new HtmlReporter());
 ?&gt;
 </pre>
-                Petite précision, en cas de double inclusion, seule la première instance
-				sera lancée. 
+                Il n'y a que deux adaptateurs,
+                l'autre est pour le paquet testeur unitaire de
+                <a href="http://pear.php.net/manual/en/package.php.phpunit.php">PEAR</a>...
+<pre>
+&lt;?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');<strong>
+    require_once('simpletest/adapters/pear_test_case.php');</strong>
+
+    $test = &amp;new GroupTest('All file tests');<strong>
+    $test-&gt;addTestFile('some_pear_test_cases.php');</strong>
+    $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+                Les scénarios de test de PEAR peuvent être
+                librement mélangés avec ceux de SimpleTest
+                mais vous ne pouvez pas utiliser les assertions
+                de SimpleTest au sein des versions héritées
+                des scénarios de test. La raison ?
+                Une simple vérification que vous ne rendez pas
+                par accident vos scénarios de test complètement
+                dépendants de SimpleTest.
+                Peut-être que vous souhaitez publier
+                votre bibliothèque sur PEAR par exemple :
+                ça voudrait dire la livrer avec des scénarios de
+                test compatibles avec PEAR::PhpUnit.
             </p>
-		
+        
     </div>
         References and related information...
         <ul>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/index.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/index.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/index.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -536,7 +536,7 @@
         References and related information...
         <ul>
 <li>
-            <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&amp;release_id=153280">Télécharger PHP SimpleTest</a>
+            <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&amp;release_id=153280">Télécharger PHP Simple Test</a>
             depuis <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
         </li>
 <li>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/mock_objects_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/mock_objects_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/mock_objects_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -34,18 +34,29 @@
         This page...
         <ul>
 <li>
-            <a href="#what">Que sont les objets fantaisie ?</a>
+            <a href="#quoi">Que sont les objets fantaisie ?</a>
         </li>
 <li>
             <a href="#creation">Créer des objets fantaisie</a>.
         </li>
 <li>
-            <a href="#expectations">Les objets fantaisie en tant que critiques</a> avec les attentes.
+            <a href="#bouchon">L'objet fantaisie - acteur</a> ou bouchon.
         </li>
+<li>
+            <a href="#attentes">L'objet fantaisie - critique</a> avec des attentes.
+        </li>
+<li>
+            <a href="#approches">D'autres approches</a>
+            y compris des librairies d'objets fantaisie.
+        </li>
+<li>
+            Utiliser les objets fantaisie avec
+            <a href="#autres_testeurs">d'autres testeurs unitaires</a>.
+        </li>
 </ul>
 <div class="content">
         <h2>
-<a class="target" name="what"></a>Que sont les objets fantaisie ?</h2>
+<a class="target" name="quoi"></a>Que sont les objets fantaisie ?</h2>
             <p>
                 Les objets fantaisie - ou "mock objects" en anglais -
                 ont deux rôles pendant un scénario de test : acteur et critique.
@@ -75,21 +86,8 @@
                 Si les objets fantaisie ne se comportaient que comme
                 des acteurs alors on les connaîtrait sous le nom de
                 <a href="server_stubs_documentation.html">bouchons serveur</a>.
-                Il s'agissait originairement d'un patron de conception
-                identifié par Robert Binder (<a href="">Testing
-                object-oriented systems</a>: models, patterns, and tools,
-                Addison-Wesley) en 1999.
             </p>
             <p>
-                Un bouchon serveur est une simulation d'un objet ou d'un composant.
-                Il doit remplacer exactement un composant dans un système
-                en vue d'effectuer des tests ou un prototypage,
-                tout en restant ultra-léger.
-                Il permet aux tests de s'exécuter plus rapidement, ou 
-                si la classe simulée n'a pas encore été écrite,
-                de se lancer tout court.
-            </p>
-            <p>
                 Cependant non seulement les objets fantaisie jouent
                 un rôle (en fournissant à la demande les valeurs requises)
                 mais en plus ils sont aussi sensibles aux messages qui
@@ -100,8 +98,6 @@
                 Si les attentes ne sont pas atteintes ils nous épargnent
                 l'effort de l'écriture d'une assertion de test avec
                 échec en réalisant cette tâche à notre place.
-            </p>
-            <p>
                 Dans le cas d'une connexion à une base de données
                 imaginaire ils peuvent tester si la requête, disons SQL,
                 a bien été formé par l'objet qui utilise cette connexion.
@@ -112,793 +108,648 @@
         <h2>
 <a class="target" name="creation"></a>Créer des objets fantaisie</h2>
             <p>
-                Tout ce dont nous avons besoin est une classe existante ou une interface,
-                par exemple une connexion à la base de données qui ressemblerait à...
+                Comme pour la création des bouchons serveur, tout ce dont
+                nous avons besoin c'est d'un classe existante.
+                La fameuse connexion à une base de données qui ressemblerait à...
 <pre>
 <strong>class DatabaseConnection {
-    function DatabaseConnection() { }
-    function query($sql) { }
-    function selectQuery($sql) { }
+    function DatabaseConnection() {
+    }
+    
+    function query() {
+    }
+    
+    function selectQuery() {
+    }
 }</strong>
 </pre>
+                Cette classe n'a pas encore besoin d'être implémentée.
                 Pour en créer sa version fantaisie nous devons juste
-				lancer le générateur...
+                inclure la librairie d'objet fantaisie puis lancer le générateur...
 <pre>
-require_once('simpletest/autorun.php');
+<strong>require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
 require_once('database_connection.php');
 
-<strong>Mock::generate('DatabaseConnection');</strong>
+Mock::generate('DatabaseConnection');</strong>
 </pre>
-                Ce code génère une classe clone appelée <span class="new_code">MockDatabaseConnection</span>.
-                Cette nouvelle classe lui ressemble en tout point,
-                sauf qu'elle ne fait rien du tout.
-            </p>
-            <p>
-            	Cette nouvelle classe est génératlement
-            	une sous-classe de <span class="new_code">DatabaseConnection</span>.
-            	Malheureusement, il n'y as aucun moyen de créer une version fantaisie
-            	d'une classe avec une méthode <span class="new_code">final</span> sans avoir
-            	une version fonctionnelle de cette méthode.
-            	Ce n'est pas pas très satisfaisant.
-            	Si la cible est une interface ou si les méthodes <span class="new_code">final</span>
-            	existent dans la classe cible, alors une toute nouvelle classe
-            	est créée, elle implémente juste les même interfaces.
-            	Si vous essayer de faire passer cette classe à travers un indice de type
-            	qui spécifie le véritable nom de l'ancienne classe, alors il échouera.
-            	Du code qui forcerait un indice de type tout en utilisant
-            	des méthodes <span class="new_code">final</span> ne pourrait probablement pas être
-            	testé efficacement avec des objets fantaisie.
-            </p>
-            <p>
-                Si vous voulez voir le code généré, il suffit de faire un <span class="new_code">print</span>
-                de la sortie de <span class="new_code">Mock::generate()</span>.
-                VOici le code généré pour la classe <span class="new_code">DatabaseConnection</span>
-                à la place de son interface...
-<pre>
-class MockDatabaseConnection extends DatabaseConnection {
-    public $mock;
-    protected $mocked_methods = array('databaseconnection', 'query', 'selectquery');
-
-    function MockDatabaseConnection() {
-        $this-&gt;mock = new SimpleMock();
-        $this-&gt;mock-&gt;disableExpectationNameChecks();
-    }
-    ...
-    function DatabaseConnection() {
-        $args = func_get_args();
-        $result = &amp;$this-&gt;mock-&gt;invoke("DatabaseConnection", $args);
-        return $result;
-    }
-    function query($sql) {
-        $args = func_get_args();
-        $result = &amp;$this-&gt;mock-&gt;invoke("query", $args);
-        return $result;
-    }
-    function selectQuery($sql) {
-        $args = func_get_args();
-        $result = &amp;$this-&gt;mock-&gt;invoke("selectQuery", $args);
-        return $result;
-    }
-}
-</pre>
-                Votre sortie dépendra quelque peu de votre version précise de SimpleTest.
-            </p>
-            <p>
-                En plus des méthodes d'origine de la classe, vous en verrez d'autres
-                pour faciliter les tests.
-                Nous y reviendrons.
-            </p>
-            <p>
+                Ceci génère une classe clone appelée <span class="new_code">MockDatabaseConnection</span>.
                 Nous pouvons désormais créer des instances de
                 cette nouvelle classe à l'intérieur même de notre scénario de test...
 <pre>
-require_once('simpletest/autorun.php');
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
 require_once('database_connection.php');
 
 Mock::generate('DatabaseConnection');
-
+<strong>
 class MyTestCase extends UnitTestCase {
-
+    
     function testSomething() {
-        <strong>$connection = new MockDatabaseConnection();</strong>
+        $connection = &amp;new MockDatabaseConnection($this);
     }
-}
-</pre>
-                La version fantaisie contient toutles méthodes de l'originale.
-                En outre, tous les indices de type seront préservés.
-                Dison que nos méthodes de requête attend un objet <span class="new_code">Query</span>...
-<pre>
-<strong>class DatabaseConnection {
-    function DatabaseConnection() { }
-    function query(Query $query) { }
-    function selectQuery(Query $query) { }
 }</strong>
 </pre>
-                Si nous lui passons le mauvais type d'objet
-                ou même pire un non-objet...
-<pre>
-class MyTestCase extends UnitTestCase {
-
-    function testSomething() {
-        $connection = new MockDatabaseConnection();
-        $connection-&gt;query('insert into accounts () values ()');
-    }
-}
-</pre>
-                ...alors le code renverra une violation de typage,
-                exactement comme on aurait pû s'y attendre
-                avec la classe d'origine.
+                Contrairement aux bouchons, le constructeur
+                d'une classe fantaisie a besoin d'une référence au scénario
+                de test pour pouvoir transmettre les succès
+                et les échecs pendant qu'il vérifie les attentes.
+                Concrètement ça veut dire que les objets fantaisie
+                ne peuvent être utilisés qu'au sein d'un scénario de test.
+                Malgré tout, cette puissance supplémentaire implique
+                que les bouchons ne sont que rarement utilisés
+                si des objets fantaisie sont disponibles.
             </p>
-            <p>
-                Si la version fantaisie implémente bien toutes les méthodes
-                de l'originale, elle renvoit aussi systématiquement <span class="new_code">null</span>.
-                Et comme toutes les méthodes qui renvoient toujours <span class="new_code">null</span>
-                ne sont pas très utiles, nous avons besoin de leur faire dire
-                autre chose...
-            </p>
         
         <h2>
 <a class="target" name="bouchon"></a>Objets fantaisie en action</h2>
             <p>
-                Changer le <span class="new_code">null</span> renvoyé par la méthode fantaisie
-                en autre chose est assez facile...
+                La version fantaisie d'une classe contient
+                toutes les méthodes de l'originale.
+                De la sorte une opération comme
+                <span class="new_code">$connection-&gt;query()</span>
+                est encore possible.
+                Tout comme avec les bouchons, nous pouvons remplacer
+                la valeur nulle renvoyée par défaut...
 <pre>
-<strong>$connection-&gt;returns('query', 37)</strong>
+<strong>$connection-&gt;setReturnValue('query', 37);</strong>
 </pre>
-                Désormais à chaque appel de <span class="new_code">$connection-&gt;query()</span>
-                nous obtenons un résultat de 37.
-                Il n'y a rien de particulier à cette valeur de 37.
-                Cette valeur de retour peut être aussi compliqué que nécessaire.
+                Désormais à chaque appel de
+                <span class="new_code">$connection-&gt;query()</span>
+                nous recevons comme résultat 37.
+                Tout comme avec les bouchons nous pouvons utiliser
+                des jokers et surcharger le paramètre joker.
+                Nous pouvons aussi ajouter des méthodes supplémentaires
+                à l'objet fantaisie lors de sa génération
+                et lui choisir un nom de classe qui lui soit propre...
+<pre>
+<strong>Mock::generate('DatabaseConnection', 'MyMockDatabaseConnection', array('setOptions'));</strong>
+</pre>
+                Ici l'objet fantaisie se comportera comme
+                si <span class="new_code">setOptions()</span> existait dans la classe originale.
+                C'est pratique si une classe a utilisé le mécanisme
+                <span class="new_code">overload()</span> de PHP pour ajouter des méthodes dynamiques.
+                Vous pouvez créer des fantaisies spéciales pour simuler cette situation.
             </p>
             <p>
-                Ici les paramètres ne sont pas significatifs,
-                nous aurons systématiquement la même valeur en retour
-                une fois initialisés de la sorte.
-                Cela pourrait ne pas ressembler à une copie convaincante
-                de notre connexion à la base de données, mais pour
-                la demi-douzaine de lignes de code de notre méthode de test
-                c'est généralement largement assez.
-            </p>
-            <p>
-                Sauf que les choses ne sont pas toujours si simples.
-                Les itérateurs sont un problème récurrent, si par exemple
-                renvoyer systématiquement la même valeur entraine
-                une boucle infinie dans l'objet testé.
-                Pour ces cas-là, nous avons besoin d'une séquence de valeurs.
-				Supposons que nous avons un itérateur simple qui ressemble à...
+                Tous les modèles disponibles avec les bouchons serveur
+                le sont également avec les objets fantaisie...
 <pre>
 class Iterator {
-    function Iterator() { }
-    function next() { }
+    function Iterator() {
+    }
+    
+    function next() {
+    }
 }
 </pre>
-                Il s'agit là de l'itérateur le plus basique que nous puissions imaginer.
-                Supponsons que cet itérateur ne renvoit que du texte
-                jusqu'à ce qu'il atteigne la fin et qu'il renvoie alors un false,
-                nous pouvons le simuler avec...
+                Une nouvelle fois, supposons que cet itérateur
+                ne retourne que du texte jusqu'au moment où il atteint
+                son terme, quand il renvoie <span class="new_code">false</span>.
+                Nous pouvons le simuler avec...
 <pre>
 Mock::generate('Iterator');
 
 class IteratorTest extends UnitTestCase() {
-
+    
     function testASequence() {<strong>
-        $iterator = new MockIterator();
-        $iterator-&gt;returns('next', false);
-        $iterator-&gt;returnsAt(0, 'next', 'First string');
-        $iterator-&gt;returnsAt(1, 'next', 'Second string');</strong>
+        $iterator = &amp;new MockIterator($this);
+        $iterator-&gt;setReturnValue('next', false);
+        $iterator-&gt;setReturnValueAt(0, 'next', 'First string');
+        $iterator-&gt;setReturnValueAt(1, 'next', 'Second string');</strong>
         ...
     }
 }
 </pre>
-                Quand <span class="new_code">next()</span> est appelé par le <span class="new_code">MockIterator</span>
-                il commencera par renvoyer "First string",
-                au deuxième passage "Second string" sera renvoyé
-                et sur n'importe quel autre appel <span class="new_code">false</span> sera renvoyé
-                à son tour.
-                Les valeurs renvoyées les unes après les autres auront la priorité
-                sur la valeur constante.
-                Cette dernière est la valeur par défaut en quelque sorte.
+                Au moment du premier appel à <span class="new_code">next()</span>
+                sur l'itérateur fantaisie il renverra tout d'abord
+                "First string", puis ce sera au tour de
+                "Second string" au deuxième appel
+                et ensuite pour tout appel suivant <span class="new_code">false</span>
+                sera renvoyé.
+                Ces valeurs renvoyées successivement sont prioritaires
+                sur la valeur constante retournée.
+                Cette dernière est un genre de valeur par défaut si vous voulez.
             </p>
             <p>
-                Une autre situation délicate serait une opération
-                <span class="new_code">get()</span> surchargée.
-                Un exemple serait un conteneur d'information avec des pairs clef/valeur.
-                Nous partons cette fois d'une classe de configuration telle...
+                Reprenons aussi le conteneur d'information bouchonné
+                avec des pairs clef / valeur...
 <pre>
 class Configuration {
-    function Configuration() { ... }
-    function get($key) { ... }
+    function Configuration() {
+    }
+    
+    function getValue($key) {
+    }
 }
 </pre>
-                C'est une situation courante pour utiliser des objets fantaisie,
-                étant donné que la véritable configuration sera différente
-                d'une machine à l'autre et parfois même d'un test à l'autre.
-                Cependant un problème apparaît quand toutes les données passent
-                par la méthode <span class="new_code">get()</span> et que nous souhaitons
-                quand même des résultats différents pour des clefs différentes.
-                Par chance les objets fantaisie ont un système de filtre...
+                Il s'agit là d'une situation classique
+                d'utilisation d'objets fantaisie étant donné
+                que la configuration peut varier grandement de machine à machine :
+                ça contraint fortement la fiabilité de nos tests
+                si nous l'utilisons directement.
+                Le problème est que toutes les données nous parviennent
+                à travers la méthode <span class="new_code">getValue()</span>
+                et que nous voulons des résultats différents pour des clefs différentes.
+                Heureusement les objets fantaisie ont un système de filtrage...
 <pre>
-<strong>$config = &amp;new MockConfiguration();
-$config-&gt;returns('get', 'primary', array('db_host'));
-$config-&gt;returns('get', 'admin', array('db_user'));
-$config-&gt;returns('get', 'secret', array('db_password'));</strong>
+<strong>$config = &amp;new MockConfiguration($this);
+$config-&gt;setReturnValue('getValue', 'primary', array('db_host'));
+$config-&gt;setReturnValue('getValue', 'admin', array('db_user'));
+$config-&gt;setReturnValue('getValue', 'secret', array('db_password'));</strong>
 </pre>
-                Le dernier paramètre est une liste d'arguements
-                pour vérifier une correspondance.
-                Dans ce cas, nous essayons de faire correspondre un argument
-                qui se trouve être la clef de recherche.
-                Désormais quand l'objet fantaisie voit
-                sa méthode <span class="new_code">get()</span> invoquée...
+                Le paramètre en plus est une liste d'arguments
+                à faire correspondre. Dans ce cas nous essayons
+                de faire correspondre un unique argument :
+                en l'occurrence la clef recherchée.
+                Maintenant que la méthode <span class="new_code">getValue()</span>
+                est invoquée sur l'objet fantaisie...
 <pre>
-$config-&gt;get('db_user')
+$config-&gt;getValue('db_user')
 </pre>
-                ...il renverra "admin".
-                Il trouve cette valeur en essayant de faire correspondre
-                l'argument reçu à ceux de ses propres listes : dès qu'une
-                correspondance complète est trouvé, il s'arrête.
+                ...elle renverra "admin".
+                Elle le trouve en essayant de faire correspondre
+                les arguments entrants dans sa liste
+                d'arguments sortants les uns après les autres
+                jusqu'au moment où une correspondance exacte est atteinte.
             </p>
             <p>
-                Vous pouvez préciser un argument par défaut via...
-<pre><strong>
-$config-&gt;returns('get', false, array('*'));</strong>
-</pre>
-                Ce n'est pas la même chose que de définir la valeur renvoyée
-                sans aucun arguement...
-<pre><strong>
-$config-&gt;returns('get', false);</strong>
-</pre>
-                Dans le premier cas, il acceptera n'importe quel argument,
-                mais il en faut au moins un.
-                Dans le deuxième cas, n'importe quel nombre d'arguments
-                fera l'affaire and il agit comme un attrape-tout après
-                toutes les autres vérifications.
-                Notez que si - dans le premier cas - nous ajoutons
-                d'autres options avec paramètre unique après le joker,
-                alors elle seront ignorés puisque le joker fera
-                la première correspondance.
-                Avec des listes complexes de paramètres, l'ordre devient
-                important au risque de voir la correspondance souhaitée
-                masqué par un joker apparu plus tôt.
-                Déclarez les plus spécifiques d'abord si vous n'êtes pas sûr.
-            </p>
-            <p>
-                Il y a des moments où vous souhaitez qu'une référence
-                bien spécifique soit servie par l'objet fantaisie plutôt
-                qu'une copie.
-                C'est plutôt rare pour dire le moins, mais vous pourriez 
-                être en train de simuler un conteneur qui détiendrait
-                des primitives, tels des chaînes de caractères.
-                Par exemple.
+                Il y a des fois où vous souhaitez
+                qu'un objet spécifique soit servi par la fantaisie
+                plutôt qu'une copie.
+                De nouveau c'est identique au mécanisme des bouchons serveur...
 <pre>
-class Pad {
-    function Pad() { }
-    function &amp;note($index) { }
+class Thing {
 }
-</pre>
-                Dans ce cas, vous pouvez définir une référence dans la liste
-                des valeurs retournées par l'objet fantaisie...
-<pre>
-function testTaskReads() {
-    $note = 'Buy books';
-    $pad = new MockPad();
-    $vector-&gt;<strong>returnsByReference(</strong>'note', $note, array(3)<strong>)</strong>;
-    $task = new Task($pad);
-    ...
-}
-</pre>
-                Avec cet assemblage vous savez qu'à chaque fois
-                que <span class="new_code">$pad-&gt;note(3)</span> est appelé
-                il renverra toujours la même <span class="new_code">$note</span>,
-                même si celle-ci est modifiée.
-            </p>
-            <p>
-                Ces trois facteurs, timing, paramètres et références,
-                peuvent être combinés orthogonalement.
-                Par exemple...
-<pre>
-$buy_books = 'Buy books';
-$write_code = 'Write code';
-$pad = new MockPad();
-$vector-&gt;<strong>returnsByReferenceAt(0, 'note', $buy_books, array('*', 3));</strong>
-$vector-&gt;<strong>returnsByReferenceAt(1, 'note', $write_code, array('*', 3));</strong>
-</pre>
-                Cela renverra une référence à <span class="new_code">$buy_books</span> et
-                ensuite à <span class="new_code">$write_code</span>, mais seuleent si deux paramètres
-                sont utilisés, le deuxième devant être l'entier 3.
-                Cela devrait couvrir la plupart des situations.
-            </p>
-            <p>
-                Un dernier cas délicat reste : celui d'un objet créant
-                un autre objet, plus connu sous le patron de conception "fabrique"
-                (ou "factory").
-                Supponsons qu'à la réussite d'une requête à
-                notre base de données imaginaire, un jeu d'enregistrements
-                est renvoyé sous la forme d'un itérateur, où chaque appel
-                au <span class="new_code">next()</span> sur notre itérateur donne une ligne
-                avant de s'arrêtre avec un false.
-                Cela semble à un cauchemar à simuler, alors qu'en fait un objet
-                fantaisie peut être créé avec les mécansimes ci-dessus...
-<pre>
-Mock::generate('DatabaseConnection');
-Mock::generate('ResultIterator');
 
-class DatabaseTest extends UnitTestCase {
-
-    function testUserFinderReadsResultsFromDatabase() {<strong>
-        $result = new MockResultIterator();
-        $result-&gt;returns('next', false);
-        $result-&gt;returnsAt(0, 'next', array(1, 'tom'));
-        $result-&gt;returnsAt(1, 'next', array(3, 'dick'));
-        $result-&gt;returnsAt(2, 'next', array(6, 'harry'));
-
-        $connection = new MockDatabaseConnection();
-        $connection-&gt;returns('selectQuery', $result);</strong>
-
-        $finder = new UserFinder(<strong>$connection</strong>);
-        $this-&gt;assertIdentical(
-                $finder-&gt;findNames(),
-                array('tom', 'dick', 'harry'));
+class Vector {
+    function Vector() {
     }
+    
+    function get($index) {
+    }
 }
 </pre>
-                Désormais ce n'est que si notre <span class="new_code">$connection</span>
-                est appelée par la méthode <span class="new_code">query()</span>
-                que sera retourné le <span class="new_code">$result</span>,
-                lui-même s'arrêtant au troisième appel
-                à <span class="new_code">next()</span>.
-                Ce devrait être suffisant comme information
-                pour que notre classe <span class="new_code">UserFinder</span>,
-                la classe effectivement testée ici,
-                fasse son boulot.
-                Un test très précis et toujours pas
-                de base de données en vue.
-            </p>
-            <p>
-                Nous pourrsion affiner ce test encore plus
-                en insistant pour que la bonne requête
-                soit envoyée...
+                Dans ce cas vous pouvez placer une référence
+                dans la liste renvoyée par l'objet fantaisie...
 <pre>
-$connection-&gt;returns('selectQuery', $result, array(<strong>'select name, id from people'</strong>));
+$thing = new Thing();<strong>
+$vector = &amp;new MockVector($this);
+$vector-&gt;setReturnReference('get', $thing, array(12));</strong>
 </pre>
-                Là, c'est une mauvaise idée.
+                Avec cet arrangement vous savez qu'à chaque appel
+                de <span class="new_code">$vector-&gt;get(12)</span>
+                le même <span class="new_code">$thing</span> sera renvoyé.
             </p>
+        
+        <h2>
+<a class="target" name="attentes"></a>Objets fantaisie en critique</h2>
             <p>
-                Niveau objet, nous avons un <span class="new_code">UserFinder</span>
-                qui parle à une base de données à travers une interface géante -
-                l'ensemble du SQL.
-                Imaginez si nous avions écrit un grand nombre de tests
-                qui dépendrait désormais de cette requête SQL précise.
-                Ces requêtes pourraient changer en masse pour tout un tas
-                de raisons non liés à ce test spécifique.
-                Par exemple, la règle pour les quotes pourrait changer,
-                un nom de table pourrait évoluer, une table de liaison pourrait
-                être ajouté, etc.
-                Cela entrainerait une ré-écriture de tous les tests à chaque fois
-                qu'un remaniement est fait, alors même que le comportement lui
-                n'a pas bougé.
-                Les tests sont censés aider au remaniement, pas le bloquer.
-                Pour ma part, je préfère avoir une suite de tests qui passent
-                quand je fais évoluer le nom des tables.
+                Même si les bouchons serveur vous isolent
+                du désordre du monde réel, il ne s'agit là que
+                de la moitié du bénéfice potentiel.
+                Vous pouvez avoir une classe de test recevant
+                les messages ad hoc, mais est-ce que votre nouvelle classe
+                renvoie bien les bons ?
+                Le tester peut devenir cafouillis sans une librairie d'objets fantaisie.
             </p>
             <p>
-                Et si vous voulez une règle, c'est toujours mieux de ne pas
-                créer un objet fantaisie sur une grosse interface.
-            </p>
-            <p>
-            	Par contrast, voici le test complet...
+                Pour l'exemple, prenons une classe <span class="new_code">SessionPool</span>
+                à laquelle nous allons ajouter une fonction de log.
+                Plutôt que de complexifier la classe originale,
+                nous souhaitons ajouter ce comportement avec un décorateur (GOF).
+                Pour l'instant le code de <span class="new_code">SessionPool</span> ressemble à...
 <pre>
-class DatabaseTest extends UnitTestCase {<strong>
-    function setUp() { ... }
-    function tearDown() { ... }</strong>
+<strong>class SessionPool {
+    function SessionPool() {
+        ...
+    }
+    
+    function &amp;findSession($cookie) {
+        ...
+    }
+    ...
+}
 
-    function testUserFinderReadsResultsFromDatabase() {
-        $finder = new UserFinder(<strong>new DatabaseConnection()</strong>);
-        $finder-&gt;add('tom');
-        $finder-&gt;add('dick');
-        $finder-&gt;add('harry');
-        $this-&gt;assertIdentical(
-                $finder-&gt;findNames(),
-                array('tom', 'dick', 'harry'));
+class Session {
+    ...
+}</strong>
+
+</pre>
+                Alors que pour notre code de log, nous avons...
+<pre><strong>
+class Log {
+    function Log() {
+        ...
     }
+    
+    function message() {
+        ...
+    }
 }
+
+class LoggingSessionPool {
+    function LoggingSessionPool(&amp;$session_pool, &amp;$log) {
+        ...
+    }
+    
+    function &amp;findSession($cookie) {
+        ...
+    }
+    ...
+}</strong>
 </pre>
-                Ce test est immunisé contre le changement de schéma.
-                Il échouera uniquement si vous changez la fonctionnalité,
-                ce qui correspond bien à ce qu'un test doit faire.
+                Dans tout ceci, la seule classe à tester est
+                <span class="new_code">LoggingSessionPool</span>. En particulier,
+                nous voulons vérifier que la méthode <span class="new_code">findSession()</span>
+                est appelée avec le bon identifiant de session au sein du cookie
+                et qu'elle renvoie bien le message "Starting session $cookie"
+                au loggueur.
             </p>
             <p>
-            	Il faut juste faire attention à ces méthodes <span class="new_code">setUp()</span>
-            	et <span class="new_code">tearDown()</span> que nous avons survolé pour l'instant.
-            	Elles doivent vider les tables de la base de données
-            	et s'assurer que le schéma est bien défini.
-            	Cela peut se engendrer un peu de travail supplémentaire,
-            	mais d'ordinaire ce type de code existe déjà - à commencer pour
-            	le déploiement.
+                Bien que nous ne testions que quelques lignes
+                de code de production, voici la liste des choses
+                à faire dans un scénario de test conventionnel :
+                <ol>
+                    <li>Créer un objet de log.</li>
+                    <li>Indiquer le répertoire d'écriture du fichier de log.</li>
+                    <li>Modifier les droits sur le répertoire pour pouvoir y écrire le fichier.</li>
+                    <li>Créer un objet <span class="new_code">SessionPool</span>.</li>
+                    <li>Lancer une session, ce qui demande probablement pas mal de choses.</li>
+                    <li>Invoquer <span class="new_code">findSession()</span>.</li>
+                    <li>Lire le nouvel identifiant de session (en espérant qu'il existe un accesseur !).</li>
+                    <li>Lever une assertion de test pour vérifier que cet identifiant correspond bien au cookie.</li>
+                    <li>Lire la dernière ligne du fichier de log.</li>
+                    <li>Supprimer avec une (ou plusieurs) expression rationnelle les timestamps de log en trop, etc.</li>
+                    <li>Vérifier que le message de session est bien dans le texte.</li>
+                </ol>
+                Pas étonnant que les développeurs détestent
+                écrire des tests quand ils sont aussi ingrats.
+                Pour rendre les choses encore pire, à chaque fois que
+                le format de log change ou bien que la méthode de création
+                des sessions change, nous devons réécrire une partie
+                des tests alors même qu'ils ne testent pas ces parties
+                du système. Nous sommes en train de préparer
+                le cauchemar pour les développeurs de ces autres classes.
             </p>
             <p>
-                Il y a au moins un endroit où vous aurez besoin d'objets fantaisie :
-                c'est la simulation des erreurs.
-                Exemple, la base de données tombe pendant que <span class="new_code">UserFinder</span>
-                fait son travail. Le <span class="new_code">UserFinder</span> se comporte-t-il bien ?
+                A la place, voici la méthode complète pour le test
+                avec un peu de magie via les objets fantaisie...
 <pre>
-class DatabaseTest extends UnitTestCase {
+Mock::generate('Session');
+Mock::generate('SessionPool');
+Mock::generate('Log');
 
-    function testUserFinder() {
-        $connection = new MockDatabaseConnection();<strong>
-        $connection-&gt;throwOn('selectQuery', new TimedOut('Ouch!'));</strong>
-        $alert = new MockAlerts();<strong>
-        $alert-&gt;expectOnce('notify', 'Database is busy - please retry');</strong>
-        $finder = new UserFinder($connection, $alert);
-        $this-&gt;assertIdentical($finder-&gt;findNames(), array());
+class LoggingSessionPoolTest extends UnitTestCase {
+    ...
+    function testFindSessionLogging() {<strong>
+        $session = &amp;new MockSession($this);
+        $pool = &amp;new MockSessionPool($this);
+        $pool-&gt;setReturnReference('findSession', $session);
+        $pool-&gt;expectOnce('findSession', array('abc'));
+        
+        $log = &amp;new MockLog($this);
+        $log-&gt;expectOnce('message', array('Starting session abc'));
+        
+        $logging_pool = &amp;new LoggingSessionPool($pool, $log);
+        $this-&gt;assertReference($logging_pool-&gt;findSession('abc'), $session);
+        $pool-&gt;tally();
+        $log-&gt;tally();</strong>
     }
 }
 </pre>
-                Nous avons transmis au <span class="new_code">UserFinder</span>
-                un objet <span class="new_code">$alert</span>.
-                Il va transmettre un certain nombre de belles notifications
-                à l'interface utilisatuer en cas d'erreur.
-                Nous préfèrerions éviter de saupoudrer notre code avec
-                des commandes <span class="new_code">print</span> codées en dur si nous pouvons
-                l'éviter.
-                Emballer les moyens de sortie veut dire que nous pouvons utiliser
-                ce code partout. Et cela rend notre code plus facile.
+                Commençons par écrire une session simulacre.
+                Pas la peine d'être trop pointilleux avec
+                celle-ci puisque la vérification de la session
+                désirée est effectuée ailleurs. Nous avons
+                juste besoin de vérifier qu'il s'agit de
+                la même que celle qui vient du groupe commun des sessions.
             </p>
             <p>
-                Pour faire passer ce test, le finder doit écrire un message sympathique
-                et compréhensible à l'<span class="new_code">$alert</span>, plutôt que de propager
-                l'exception. Jusque là, tout va bien.
+                <span class="new_code">findSession()</span> est un méthode fabrique
+                dont la simulation est décrite <a href="#stub">plus haut</a>.
+                Le point de départ vient avec le premier appel
+                <span class="new_code">expectOnce()</span>. Cette ligne indique
+                qu'à chaque fois que <span class="new_code">findSession()</span>
+                est invoqué sur l'objet fantaisie, il vérifiera
+                les arguments entrant. S'il ne reçoit
+                que la chaîne "abc" en tant qu'argument
+                alors un succès est envoyé au testeur unitaire,
+                sinon c'est un échec qui est généré.
+                Il s'agit là de la partie qui teste si nous avons bien
+                la bonne session. La liste des arguments suit
+                une format identique à celui qui précise les valeurs renvoyées.
+                Vous pouvez avoir des jokers et des séquences
+                et l'ordre de l'évaluation restera le même.
             </p>
             <p>
-                Comment faire en sorte que la <span class="new_code">DatabaseConnection</span> fantaisie
-                soulève une exception ?
-                Nous la générons avec la méthode <span class="new_code">throwOn</span> sur l'objet fantaisie.
+                Si l'appel n'est jamais effectué alors n'est généré
+                ni le succès, ni l'échec. Pour contourner cette limitation,
+                nous devons dire à l'objet fantaisie que le test est terminé :
+                il pourra alors décider si les attentes ont été répondues.
+                L'assertion du testeur unitaire de ceci est déclenchée
+                par l'appel <span class="new_code">tally()</span> à la fin du test.
             </p>
             <p>
-                Enfin, que se passe-t-il si la méthode voulue pour la simulation
-                n'existe pas encore ?
-                Si vous définissez une valeur de retour sur une méthode absente,
-                alors SimpleTest vous répondra avec une erreur.
-                Et si vous utilisez <span class="new_code">__call()</span> pour simuler
-                des méthodes dynamiques ?
+                Nous utilisons le même modèle pour mettre sur pied
+                le loggueur fantaisie. Nous lui indiquons que <span class="new_code">message()</span>
+                devrait être invoqué une fois et une fois seulement
+                avec l'argument "Starting session abc".
+                En testant les arguments d'appel, plutôt que ceux de sortie du loggueur,
+                nous isolons le test de tout modification dans le loggueur.
             </p>
             <p>
-                Les objets avec des interfaces dynamiques, avec <span class="new_code">__call</span>,
-                peuvent être problématiques dans l'implémentation courante
-                des objets fantaisie.
-                Vous pouvez en créer un autour de la méthode <span class="new_code">__call()</span>
-                mais c'est très laid.
-                Et pourquoi un test devrait connaître quelque chose avec un niveau
-                si bas dans l'implémentation. Il n'a besoin que de simuler l'appel.
+                Nous commençons le lancement nos tests à la création
+                du nouveau <span class="new_code">LoggingSessionPool</span>
+                et nous l'alimentons avec nos objets fantaisie juste créés.
+                Désormais tout est sous contrôle. Au final nous confirmons
+                que le <span class="new_code">$session</span> donné au décorateur est bien
+                celui reçu et prions les objets fantaisie de lancer leurs
+                tests de comptage d'appel interne avec les appels <span class="new_code">tally()</span>.
             </p>
             <p>
-                Il y a bien moyen de contournement : ajouter des méthodes complémentaires
-                à l'objet fantaisie à la génération.
-<pre>
-<strong>Mock::generate('DatabaseConnection', 'MockDatabaseConnection', array('setOptions'));</strong>
-</pre>
-                Dans une longue suite de tests cela pourrait entraîner des problèmes,
-                puisque vous avez probablement déjà une version fantaisie
-                de la classe appellée <span class="new_code">MockDatabaseConnection</span>
-                sans les méthodes complémentaires.
-                Le générateur de code ne générera pas la version fantaisie de la classe
-                s'il en existe déjà une version avec le même nom.
-                Il vous deviendra impossible de déterminer où est passée votre méthode
-                si une autre définition a été lancé au préalable.
+                Il y a encore pas mal de code de test, mais ce code est très strict.
+                S'il vous semble encore terrifiant il l'est bien moins
+                que si nous avions essayé sans les objets fantaisie
+                et ce test en particulier, interactions plutôt que résultat,
+                est toujours plus difficile à mettre en place.
+                Le plus souvent vous aurez besoin de tester des situations
+                plus complexes sans ce niveau ni cette précision.
+                En outre une partie peut être remaniée avec la méthode
+                de scénario de test <span class="new_code">setUp()</span>.
             </p>
             <p>
-                Pour pallier à ce problème, SimpleTest vous permet de choisir
-                n'importe autre nom pour la nouvelle classe au moment même où
-                vous ajouter les méthodes complémentaires.
-<pre>
-Mock::generate('DatabaseConnection', <strong>'MockDatabaseConnectionWithOptions'</strong>, array('setOptions'));
-</pre>
-                Ici l'objet fantaisie se comportera comme si
-                <span class="new_code">setOptions()</span> existait bel et bien
-                dans la classe originale.
+                Voici la liste complète des attentes que vous pouvez
+                placer sur un objet fantaisie avec
+                <a href="http://www.lastcraft.com/simple_test.php">SimpleTest</a>...
+                <table>
+<thead>
+                    <tr>
+<th>Attente</th>
+<th>Nécessite <span class="new_code">tally()</span>
+</th>
+</tr>
+                    </thead>
+<tbody>
+<tr>
+                        <td><span class="new_code">expectArguments($method, $args)</span></td>
+                        <td style="text-align: center">Non</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectArgumentsAt($timing, $method, $args)</span></td>
+                        <td style="text-align: center">Non</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectCallCount($method, $count)</span></td>
+                        <td style="text-align: center">Oui</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectMaximumCallCount($method, $count)</span></td>
+                        <td style="text-align: center">Non</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectMinimumCallCount($method, $count)</span></td>
+                        <td style="text-align: center">Oui</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectNever($method)</span></td>
+                        <td style="text-align: center">Non</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectOnce($method, $args)</span></td>
+                        <td style="text-align: center">Oui</td>
+                    </tr>
+                    <tr>
+                        <td><span class="new_code">expectAtLeastOnce($method, $args)</span></td>
+                        <td style="text-align: center">Oui</td>
+                    </tr>
+                </tbody>
+</table>
+                Où les paramètres sont...
+                <dl>
+                    <dt class="new_code">$method</dt>
+                    <dd>Le nom de la méthode, sous la forme d'une chaîne,
+                    à laquelle la condition doit être appliquée.</dd>
+                    <dt class="new_code">$args</dt>
+                    <dd>
+                        Les arguments sous la forme d'une liste.
+                        Les jokers peuvent être inclus de la même manière
+                        qu'avec <span class="new_code">setReturn()</span>.
+                        Cet argument est optionnel pour <span class="new_code">expectOnce()</span>
+                        et <span class="new_code">expectAtLeastOnce()</span>.
+                    </dd>
+                    <dt class="new_code">$timing</dt>
+                    <dd>
+                        Le seul point dans le temps pour tester
+                        la condition. Le premier appel commence à zéro.
+                    </dd>
+                    <dt class="new_code">$count</dt>
+                    <dd>Le nombre d'appels attendu.</dd>
+                </dl>
+                La méthode <span class="new_code">expectMaximumCallCount()</span>
+                est légèrement différente dans le sens où elle ne pourra
+                générer qu'un échec. Elle reste silencieuse
+                si la limite n'est jamais atteinte.
             </p>
             <p>
-                Les objets fantaisie ne peuvent être utilisés qu'à l'intérieur
-                des scénarios de test, étant donné qu'à l'apparition d'une attente
-                ils envoient des messages directement au scénario de test courant.
-                Les créer en dehors d'un scénario de test entraînera une erreur
-                de run time quand une attente est déclenchée et qu'il n'y a pas
-                de scénario de test en cours pour recevoir le message.
-                Nous pouvons désormais couvrir ces attentes.
+                Par ailleurs si vous avez just un appel dans votre test,
+                vérifiez bien que vous utiliser
+                <span class="new_code">expectOnce</span>.<br>
+                Utiliser <span class="new_code">$mocked-&gt;expectAt(0, 'method', 'args);</span>
+                tout seul ne sera pas pris en compte :
+                la vérification des arguments et le comptage total
+                sont pour l'instant encore indépendant.
             </p>
+            <p>
+                Comme avec les assertions dans les scénarios de test,
+                toutes ces attentes peuvent accepter une surcharge de
+                message sous la forme d'un paramètre supplémentaire.
+                Par ailleurs le message d'échec original peut être inclus
+                dans le résultat avec "%s".
+            </p>
         
         <h2>
-<a class="target" name="expectations"></a>Objets fantaisie en tant que critiques</h2>
+<a class="target" name="approches"></a>D'autres approches</h2>
             <p>
-                Même si les bouchons serveur isolent vos tests des perturbations
-				du monde réel, ils n'apportent que le moitié des bénéfices possibles.
-				Vous pouvez obtenir une classe de test qui reçoive les bons messages,
-				mais cette nouvelle classe envoie-t-elle les bons ?
-				Le tester peut devenir très bordélique sans
-				une librairie d'objets fantaise.
+                Il existe trois approches pour créer des objets
+                fantaisie en comprenant celle utilisée par SimpleTest.
+                Les coder à la main en utilisant une classe de base,
+                les générer dans un fichier ou les générer dynamiquement à la volée.
             </p>
-			<p>
-                Voici un exemple, prenons une classe <span class="new_code">PageController</span>
-				toute simple qui traitera un formulaire de paiement
-				par carte bleue...
-<pre>
-class PaymentForm extends PageController {
-    function __construct($alert, $payment_gateway) { ... }
-    function makePayment($request) { ... }
-}
-</pre>
-                Cette classe a besoin d'un <span class="new_code">PaymentGateway</span>
-				pour parler concrètement à la banque.
-				Il utilise aussi un objet <span class="new_code">Alert</span>
-				pour gérer les erreurs.
-				Cette dernière classe parle à la page ou au template.
-				Elle est responsable de l'affichage du message d'erreur
-				et de la mise en valeur de tout champ du formulaire
-				qui serait incorrecte.
+            <p>
+                Les objets fantaisie générés avec
+                <a href="simple_test.html">SimpleTest</a> sont dynamiques.
+                Ils sont créés à l'exécution dans la mémoire,
+                grâce à <span class="new_code">eval()</span>, plutôt qu'écrits dans un fichier.
+                Cette opération les rend facile à créer,
+                en une seule ligne, surtout par rapport à leur création
+                à la main dans une hiérarchie de classe parallèle.
+                Le problème avec ce comportement tient généralement
+                dans la mise en place des tests proprement dits.
+                Si les objets originaux changent les versions fantaisie
+                sur lesquels reposent les tests, une désynchronisation peut subvenir.
+                Cela peut aussi arriver avec l'approche en hiérarchie parallèle,
+                mais c'est détecté beaucoup plus vite.
             </p>
             <p>
-                Elle pourrait ressembler à...
-<pre>
-class Alert {
-    function warn($warning, $id) {
-        print '&lt;div class="warning"&gt;' . $warning . '&lt;/div&gt;';
-        print '&lt;style type="text/css"&gt;#' . $id . ' { background-color: red }&lt;/style&gt;';
-    }
-}
-</pre>
+                Bien sûr, la solution est d'ajouter de véritables tests d'intégration.
+                Vous n'en avez pas besoin de beaucoup
+                et le côté pratique des objets fantaisie fait plus
+                que compenser la petite dose de test supplémentaire.
+                Vous ne pouvez pas avoir confiance dans du code qui
+                ne serait testé que par des objets fantaisie.
             </p>
             <p>
-                Portons notre attention à la méthode <span class="new_code">makePayment()</span>.
-				Si nous n'inscrivons pas un numéro "CVV2" (celui à trois
-				chiffre au dos de la carte bleue), nous souhaitons afficher
-				une erreur plutôt que d'essayer de traiter le paiement. 
-				En mode test...
+                Si vous restez déterminé de construire des librairies
+                statiques d'objets fantaisie parce que vous souhaitez
+                émuler un comportement très spécifique,
+                vous pouvez y parvenir grâce au générateur de classe de SimpleTest.
+                Dans votre fichier librairie, par exemple
+                <em>mocks/connection.php</em> pour une connexion à une base de données,
+                créer un objet fantaisie et provoquer l'héritage
+                pour hériter pour surcharger des méthodes spéciales
+                ou ajouter des préréglages...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
-require_once('payment_form.php');
-Mock::generate('Alert');
-Mock::generate('PaymentGateway');
-
-class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
-
-    function testMissingCvv2CausesAlert() {
-        $alert = new MockAlert();
-        <strong>$alert-&gt;expectOnce(
-                    'warn',
-                    array('Missing three digit security code', 'cvv2'));</strong>
-        $controller = new PaymentForm(<strong>$alert</strong>, new MockPaymentGateway());
-        $controller-&gt;makePayment($this-&gt;requestWithMissingCvv2());
-    }
-
-    function requestWithMissingCvv2() { ... }
-}
+    require_once('simpletest/mock_objects.php');
+    require_once('../classes/connection.php');
+<strong>
+    Mock::generate('Connection', 'BasicMockConnection');
+    class MockConnection extends BasicMockConnection {
+        function MockConnection(&amp;$test, $wildcard = '*') {
+            $this-&gt;BasicMockConnection($test, $wildcard);
+            $this-&gt;setReturn('query', false);
+        }
+    }</strong>
 ?&gt;
 </pre>
-                Première question : où sont passés les assertions ?
+                L'appel <span class="new_code">generate</span> dit au générateur de classe
+                d'en créer une appelée <span class="new_code">BasicMockConnection</span>
+                plutôt que la plus courante <span class="new_code">MockConnection</span>.
+                Ensuite nous héritons à partir de celle-ci pour obtenir
+                notre version de <span class="new_code">MockConnection</span>.
+                En interceptant de cette manière nous pouvons ajouter
+                un comportement, ici transformer la valeur par défaut de
+                <span class="new_code">query()</span> en "false".
+                En utilisant le nom par défaut nous garantissons
+                que le générateur de classe fantaisie n'en recréera
+                pas une autre différente si il est invoqué ailleurs
+                dans les tests. Il ne créera jamais de classe
+                si elle existe déjà. Aussi longtemps que le fichier
+                ci-dessus est inclus avant alors tous les tests qui
+                généraient <span class="new_code">MockConnection</span> devraient
+                utiliser notre version à présent. Par contre si
+                nous avons une erreur dans l'ordre et que la librairie
+                de fantaisie en crée une d'abord alors la création
+                de la classe échouera tout simplement.
             </p>
             <p>
-                L'appel à <span class="new_code">expectOnce('warn', array(...))</span> annonce
-				à l'objet fantaisie qu'il faut s'attendre à un appel à <span class="new_code">warn()</span>
-				avant la fin du test.
-				Quand il débouche sur l'appel à <span class="new_code">warn()</span>, il vérifie
-				les arguments. Si ceux-ci ne correspondent pas, alors un échec
-				est généré. Il échouera aussi si la méthode n'est jamais appelée.
+                Utiliser cette astuce si vous vous trouvez avec beaucoup
+                de comportement en commun sur les objets fantaisie
+                ou si vous avez de fréquents problèmes d'intégration
+                plus tard dans les étapes de test.
             </p>
+        
+        <h2>
+<a class="target" name="autres_testeurs"></a>Je pense que SimpleTest pue !</h2>
             <p>
-                Non seulement le test ci-dessus s'assure que <span class="new_code">warn</span>
-				a bien été appelé, mais en plus qu'il a bien reçu la chaîne
-				de caractère "Missing three digit security code"
-				et même le tag "cvv2".
-				L'équivalent de <span class="new_code">assertIdentical()</span> est appliqué
-				aux deux champs quand les paramètres sont comparés.
+                Mais au moment d'écrire ces lignes c'est le seul
+                à gérer les objets fantaisie, donc vous êtes bloqué avec lui ?
             </p>
             <p>
-                Si le contenu du message vous importe peu, surtout dans le cas
-				d'une interface utilisateur qui change régulièrement,
-				nous pouvons passer ce paramètre avec l'opérateur "*"...
+                Non, pas du tout.
+                <a href="simple_test.html">SimpleTest</a> est une boîte à outils
+                et parmi ceux-ci on trouve les objets fantaisie
+                qui peuvent être utilisés indépendamment.
+                Supposons que vous avez votre propre testeur unitaire favori
+                et que tous vos tests actuels l'utilisent.
+                Prétendez que vous avez appelé votre tester unitaire PHPUnit
+                (c'est ce que tout le monde a fait) et que la classe principale
+                de test ressemble à...
 <pre>
-class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
-
-    function testMissingCvv2CausesAlert() {
-        $alert = new MockAlert();
-        $alert-&gt;expectOnce('warn', array(<strong>'*'</strong>, 'cvv2'));
-        $controller = new PaymentForm($alert, new MockPaymentGateway());
-        $controller-&gt;makePayment($this-&gt;requestWithMissingCvv2());
+class PHPUnit {
+    function PHPUnit() {
     }
-
-    function requestWithMissingCvv2() { ... }
+    
+    function assertion($message, $assertion) {
+    }
+    ...
 }
 </pre>
-                Nous pouvons même rendre le test encore moins spécifique
-				en supprimant complètement la liste des paramètres...
+                La seule chose que la méthode <span class="new_code">assertion()</span> réalise,
+                c'est de préparer une sortie embellie alors le paramètre boolien
+                de l'assertion sert à déterminer s'il s'agit d'une erreur ou d'un succès.
+                Supposons qu'elle est utilisée de la manière suivante...
 <pre>
-function testMissingCvv2CausesAlert() {
-    $alert = new MockAlert();
-    <strong>$alert-&gt;expectOnce('warn');</strong>
-    $controller = new PaymentForm($alert, new MockPaymentGateway());
-    $controller-&gt;makePayment($this-&gt;requestWithMissingCvv2());
-}
+$unit_test = new PHPUnit();
+$unit_test&gt;assertion('I hope this file exists', file_exists('my_file'));
 </pre>
-                Ceci vérifiera uniquement si la méthode a été appelé,
-				ce qui est peut-être un peu drastique dans ce cas.
-				Plus tard, nous verrons comment alléger les attentes
-				plus précisement.
+                Comment utiliser les objets fantaisie avec ceci ?
             </p>
             <p>
-                Des tests sans assertions peuvent être à la fois compacts
-				et très expressifs. Parce que nous interceptons l'appel
-				sur le chemin de l'objet, ici de classe <span class="new_code">Alert</span>,
-				nous évitons de tester l'état par la suite.
-				Cela évite les assertions dans les tests, mais aussi
-				l'obligation d'ajouter des accesseurs uniquement
-				pour les tests dans le code original.
-				Si vous en arrivez à ajouter des accesseurs de ce type,
-				on parle alors de "state based testing" dans le jargon
-				("test piloté par l'état"),
-				il est probablement plus que temps d'utiliser
-				des objets fantaisie dans vos tests.
-				On peut alors parler de "behaviour based testing"
-				(ou "test piloté par le comportement") :
-				c'est largement mieux !
-            </p>
-            <p>
-                Ajoutons un autre test.
-				Assurons nous que nous essayons même pas un paiement sans CVV2...
+                Il y a une méthode protégée sur la classe de base
+                des objets fantaisie : elle s'appelle <span class="new_code">_assertTrue()</span>.
+                En surchargeant cette méthode nous pouvons utiliser
+                notre propre format d'assertion.
+                Nous commençons avec une sous-classe, dans <em>my_mock.php</em>...
 <pre>
-class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
-
-    function testMissingCvv2CausesAlert() { ... }
-
-    function testNoPaymentAttemptedWithMissingCvv2() {
-        $payment_gateway = new MockPaymentGateway();
-        <strong>$payment_gateway-&gt;expectNever('pay');</strong>
-        $controller = new PaymentForm(new MockAlert(), $payment_gateway);
-        $controller-&gt;makePayment($this-&gt;requestWithMissingCvv2());
+<strong>&lt;?php
+    require_once('simpletest/mock_objects.php');
+    
+    class MyMock extends SimpleMock() {
+        function MyMock(&amp;$test, $wildcard) {
+            $this-&gt;SimpleMock($test, $wildcard);
+        }
+        
+        function _assertTrue($assertion, $message) {
+            $test = &amp;$this-&gt;getTest();
+            $test-&gt;assertion($message, $assertion);
+        }
     }
-
-    ...
-}
+?&gt;</strong>
 </pre>
-                Vérifier une négation peut être très difficile
-				dans les tests, mais <span class="new_code">expectNever()</span>
-				rend l'opération très facile heureusement.
-            </p>
-            <p>
-                <span class="new_code">expectOnce()</span> et <span class="new_code">expectNever()</span> sont
-				suffisants pour la plupart des tests, mais
-				occasionnellement vous voulez tester plusieurs évènements.
-				D'ordinaire pour des raisons d'usabilité, nous souhaitons
-				que tous les champs manquants du formulaire soient
-				mis en relief, et pas uniquement le premier.
-				Cela veut dire que nous devrions voir de multiples appels
-				à <span class="new_code">Alert::warn()</span>, pas juste un...
+                Maintenant une instance de <span class="new_code">MyMock</span>
+                créera un objet qui parle le même langage que votre testeur.
+                Bien sûr le truc c'est que nous créons jamais un tel objet :
+                le générateur s'en chargera. Nous avons juste besoin
+                d'une ligne de code supplémentaire pour dire au générateur
+                d'utiliser vos nouveaux objets fantaisie...
 <pre>
-function testAllRequiredFieldsHighlightedOnEmptyRequest() {
-    $alert = new MockAlert();<strong>
-    $alert-&gt;expectAt(0, 'warn', array('*', 'cc_number'));
-    $alert-&gt;expectAt(1, 'warn', array('*', 'expiry'));
-    $alert-&gt;expectAt(2, 'warn', array('*', 'cvv2'));
-    $alert-&gt;expectAt(3, 'warn', array('*', 'card_holder'));
-    $alert-&gt;expectAt(4, 'warn', array('*', 'address'));
-    $alert-&gt;expectAt(5, 'warn', array('*', 'postcode'));
-    $alert-&gt;expectAt(6, 'warn', array('*', 'country'));
-    $alert-&gt;expectCallCount('warn', 7);</strong>
-    $controller = new PaymentForm($alert, new MockPaymentGateway());
-    $controller-&gt;makePayment($this-&gt;requestWithMissingCvv2());
-}
+&lt;?php
+    require_once('simpletst/mock_objects.php');
+    
+    class MyMock extends SimpleMock() {
+        function MyMock($test, $wildcard) {
+            $this-&gt;SimpleMock(&amp;$test, $wildcard);
+        }
+        
+        function _assertTrue($assertion, $message , &amp;$test) {
+            $test-&gt;assertion($message, $assertion);
+        }
+    }<strong>
+    SimpleTestOptions::setMockBaseClass('MyMock');</strong>
+?&gt;
 </pre>
-                Le compteur dans <span class="new_code">expectAt()</span> précise
-				le nombre de fois que la méthode a déjà été appelée.
-				Ici nous vérifions que chaque champ sera bien mis en relief.
+                A partir de maintenant vous avez juste à inclure
+                <em>my_mock.php</em> à la place de la version par défaut
+                <em>simple_mock.php</em> et vous pouvez introduire
+                des objets fantaisie dans votre suite de tests existants.
             </p>
-            <p>
-                Notez que nous sommes forcé de tester l'ordre en même temps.
-				SimpleTest n'a pas encore de moyen pour éviter cela,
-				mais dans une version future ce sera corrigé.
-            </p>
-            <p>
-                Voici la liste complètes des attentes
-				que vous pouvez préciser sur une objet fantaisie
-				dans <a href="http://simpletest.org/">SimpleTest</a>.
-				Comme pour les assertions, ces méthodes prennent en option
-				un message d'erreur.
-                <table>
-                    <thead><tr>
-<th>Attente</th>
-<th>Description</th>
-</tr></thead>
-                    <tbody>
-                        <tr>
-                            <td><span class="new_code">expect($method, $args)</span></td>
-                            <td>Les arguements doivent correspondre si appelés</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectAt($timing, $method, $args)</span></td>
-                            <td>Les arguements doiven correspondre si appelés lors du passage numéro <span class="new_code">$timing</span>
-</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectCallCount($method, $count)</span></td>
-                            <td>La méthode doit être appelée exactement <span class="new_code">$count</span> fois</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectMaximumCallCount($method, $count)</span></td>
-                            <td>La méthode ne doit pas être appelée plus de <span class="new_code">$count</span> fois</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectMinimumCallCount($method, $count)</span></td>
-                            <td>La méthode ne doit pas être appelée moins de <span class="new_code">$count</span> fois</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectNever($method)</span></td>
-                            <td>La méthode ne doit jamais être appelée</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectOnce($method, $args)</span></td>
-                            <td>La méthode ne doit être appelée qu'une seule fois et avec les arguments (en option)</td>
-                        </tr>
-                        <tr>
-                            <td><span class="new_code">expectAtLeastOnce($method, $args)</span></td>
-                            <td>La méthode doit être appelée au moins une seule fois et toujours avec au moins un des arguments attendus</td>
-                        </tr>
-                    </tbody>
-                </table>
-                Où les paramètres sont...
-                <dl>
-                    <dt class="new_code">$method</dt>
-                    <dd>
-                    	Le nom de la méthode, sous la forme d'une chaîne de caractères,
-						à laquelle il faut appliquer la condition.
-					</dd>
-                    <dt class="new_code">$args</dt>
-                    <dd>
-                        Les argumetns sous la forme d'une liste.
-						Les jokers peuvent être inclus de la même manière
-						que pour <span class="new_code">setReturn()</span>.
-						Cet argument est optionnel pour <span class="new_code">expectOnce()</span>
-                        et <span class="new_code">expectAtLeastOnce()</span>.
-                    </dd>
-                    <dt class="new_code">$timing</dt>
-                    <dd>
-                        La seule marque dans le temps pour tester la condition.
-						Le premier appel commence à zéro et le comptage se fait
-						séparement sur chaque méthode.
-                    </dd>
-                    <dt class="new_code">$count</dt>
-                    <dd>Le nombre d'appels attendu.</dd>
-                </dl>
-            </p>
-            <p>
-                Si vous n'avez qu'un seul appel dans votre test, assurez vous
-				d'utiliser <span class="new_code">expectOnce</span>.<br>
-                Utiliser <span class="new_code">$mocked-&gt;expectAt(0, 'method', 'args);</span>
-				tout seul ne permettra qu'à la méthode de ne jamais être appelée.
-				Vérifier les arguements et le comptage total sont pour le moment
-				indépendants.
-				Ajouter une attente <span class="new_code">expectCallCount()</span> quand
-				vous utilisez <span class="new_code">expectAt()</span> (dans le cas sans appel)
-				est permis.
-            </p>
-            <p>
-                Comme les assertions à l'intérieur des scénarios de test,
-				toutes ces attentes peuvent incorporer une surchage
-				sur le message sous la forme d'un paramètre supplémentaire.
-				Par ailleurs le message original peut être inclus dans la sortie
-				avec "%s".
-            </p>
         
     </div>
         References and related information...
         <ul>
 <li>
-            Le papier original sur les Objets fantaisie ou
-            <a href="http://www.mockobjects.com/">Mock objects</a>.
+            L'article originel sur
+            <a href="http://www.mockobjects.com/">les objets fantaisie</a>.
         </li>
 <li>
-            La page du projet SimpleTest sur <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+            La page du projet SimpleTest sur
+            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
         </li>
 <li>
-            La page d'accueil de SimpleTest sur <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+            La page d'accueil de SimpleTest sur
+            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
         </li>
 </ul>
 <div class="menu_back"><div class="menu">

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/partial_mocks_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/partial_mocks_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/partial_mocks_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -84,8 +84,8 @@
 
 class Telnet {
     ...
-    function connect($ip, $port, $username, $password) {
-        $socket = new Socket($ip, $port);
+    function &amp;connect($ip, $port, $username, $password) {
+        $socket = &amp;new Socket($ip, $port);
         $socket-&gt;read( ... );
         ...
     }
@@ -114,7 +114,7 @@
 
 class Telnet {
     ...
-    <strong>function connect($socket, $username, $password) {
+    <strong>function &amp;connect(&amp;$socket, $username, $password) {
         $socket-&gt;read( ... );
         ...
     }</strong>
@@ -127,9 +127,9 @@
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {<strong>
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $telnet = new Telnet();
+        $telnet = &amp;new Telnet();
         $telnet-&gt;connect($socket, 'Me', 'Secret');
         ...</strong>
     }
@@ -150,9 +150,9 @@
 
 class Telnet {
     ...<strong>
-    function connect($ip, $port, $username, $password, $socket = false) {
-        if (! $socket) {
-            $socket = new Socket($ip, $port);
+    function &amp;connect($ip, $port, $username, $password, $socket = false) {
+        if (!$socket) {
+            $socket = &amp;new Socket($ip, $port);
         }
         $socket-&gt;read( ... );</strong>
         ...
@@ -168,10 +168,10 @@
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {<strong>
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $telnet = new Telnet();
-        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret', $socket);
+        $telnet = &amp;new Telnet();
+        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret', &amp;$socket);
         ...</strong>
     }
 }
@@ -191,12 +191,12 @@
 require_once('socket.php');
 
 class Telnet {<strong>
-   function Telnet($network) {
-        $this-&gt;_network = $network;
+    function Telnet(&amp;$network) {
+        $this-&gt;_network = &amp;$network;
     }</strong>
     ...
-    function connect($ip, $port, $username, $password) {<strong>
-        $socket = $this-&gt;_network-&gt;createSocket($ip, $port);
+    function &amp;connect($ip, $port, $username, $password) {<strong>
+        $socket = &amp;$this-&gt;_network-&gt;createSocket($ip, $port);
         $socket-&gt;read( ... );</strong>
         ...
         return $socket;
@@ -213,12 +213,13 @@
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {<strong>
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $network = new MockNetwork();
-        $network-&gt;returnsByReference('createSocket', $socket);
-        $telnet = new Telnet($network);
-        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
+        $network = &amp;new MockNetwork($this);
+        $network-&gt;setReturnReference('createSocket', $socket);
+        $telnet = &amp;new Telnet($network);
+        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+        ...</strong>
     }
 }
 </pre>
@@ -227,15 +228,6 @@
                 de fabriques ce qui rend notre code un peu moins intuitif.
                 La solution la plus flexible, mais aussi la plus complexe.
             </p>
-			<p>
-                Des techniques comme "l'Injection de Dépendance"
-				(ou "Dependency Injection") s'attelle au problème
-				de l'instanciation d'une classe avec beaucoup de paramètres.
-				Malheureusement la connaissance de ce patron de conception
-				n'est pas très répandue et si vous êtes en train d'essayer
-				de faire fonctionner du vieux code, ré-achitecturer toute
-				l'application n'est pas vraiment une option.
-            </p>
             <p>
                 Peut-on trouver un juste milieu ?
             </p>
@@ -253,20 +245,18 @@
 
 class Telnet {
     ...
-    function connect($ip, $port, $username, $password) {
-        <strong>$socket = $this-&gt;createSocket($ip, $port);</strong>
+    function &amp;connect($ip, $port, $username, $password) {<strong>
+        $socket = &amp;$this-&gt;_createSocket($ip, $port);</strong>
         $socket-&gt;read( ... );
         ...
     }<strong>
-
-    protected function createSocket($ip, $port) {
+    
+    function &amp;_createSocket($ip, $port) {
         return new Socket($ip, $port);
     }</strong>
 }
 ?&gt;
 </pre>
-				Une première étape plutôt précautionneuse même pour
-				du code legacy et intermélé.
                 Il s'agit là de la seule modification dans le code de l'application.
             </p>
             <p>
@@ -274,15 +264,15 @@
                 une sous-classe de manière à intercepter la création de la socket...
 <pre>
 <strong>class TelnetTestVersion extends Telnet {
-    var $mock;
-
-    function TelnetTestVersion($mock) {
-        $this-&gt;mock = $mock;
+    var $_mock;
+    
+    function TelnetTestVersion(&amp;$mock) {
+        $this-&gt;_mock = &amp;$mock;
         $this-&gt;Telnet();
     }
-
-    protected function createSocket() {
-        return $this-&gt;mock;
+    
+    function &amp;_createSocket() {
+        return $this-&gt;_mock;
     }
 }</strong>
 </pre>
@@ -293,7 +283,7 @@
                 C'est nécessaire dans le cas où le constructeur appelle 
                 <span class="new_code">connect()</span>.
                 Autrement il pourrait donner un valeur nulle à partir de
-                <span class="new_code">createSocket()</span>.
+                <span class="new_code">_createSocket()</span>.
             </p>
             <p>
                 Après la réalisation de tout ce travail supplémentaire
@@ -303,10 +293,11 @@
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {<strong>
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $telnet = new TelnetTestVersion($socket);
-        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
+        $telnet = &amp;new TelnetTestVersion($socket);
+        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+        ...</strong>
     }
 }
 </pre>
@@ -334,17 +325,18 @@
 <strong>Mock::generatePartial(
         'Telnet',
         'TelnetTestVersion',
-        array('createSocket'));</strong>
+        array('_createSocket'));</strong>
 
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {<strong>
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $telnet = new TelnetTestVersion();
-        $telnet-&gt;setReturnReference('createSocket', $socket);
+        $telnet = &amp;new TelnetTestVersion($this);
+        $telnet-&gt;setReturnReference('_createSocket', $socket);
         $telnet-&gt;Telnet();
-        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
+        $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+        ...</strong>
     }
 }
 </pre>
@@ -382,21 +374,18 @@
 class TelnetTest extends UnitTestCase {
     ...
     function testConnection() {
-        $socket = new MockSocket();
+        $socket = &amp;new MockSocket($this);
         ...
-        $telnet = new TelnetTestVersion();
-        $telnet-&gt;setReturnReference('createSocket', $socket);
-        <strong>$telnet-&gt;expectOnce('createSocket', array('127.0.0.1', 21));</strong>
+        $telnet = &amp;new TelnetTestVersion($this);
+        $telnet-&gt;setReturnReference('_createSocket', $socket);<strong>
+        $telnet-&gt;expectOnce('_createSocket', array('127.0.0.1', 21));</strong>
         $telnet-&gt;Telnet();
         $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+        ...<strong>
+        $telnet-&gt;tally();</strong>
     }
 }
 </pre>
-                Les objets fantaisie partiels ne sont pas très utilisés.
-				Je les considère comme transitoire.
-				Utile lors d'un remaniement, mais une fois que l'application
-				a eu toutes ses dépendances bien séparées alors
-				ils peuvent disparaître.
             </p>
         
         <h2>
@@ -413,16 +402,16 @@
             </p>
             <p>
                 Cette situation est assez hypothétique, étant donné
-                que je ne l'ai pas souvent essayée.
-				Je crains qu'en forçant la granularité d'un objet
+                que je ne l'ai jamais essayée. Je suis ouvert à cette possibilité,
+                mais je crains qu'en forçant la granularité d'un objet
                 on n'obtienne pas forcément un code de meilleur qualité.
                 Personnellement j'utilise les objets fantaisie partiels
                 comme moyen de passer outre la création ou alors
                 de temps en temps pour tester le modèle de conception TemplateMethod.
             </p>
             <p>
-                On en revient toujours aux standards de code de votre projet :
-				c'est à vous de trancher si vous autorisez ce mécanisme ou non.
+                Pour choisir le mécanisme à utiliser, on en revient
+                toujours aux standards de code de votre projet.
             </p>
         
     </div>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/reporter_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/reporter_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/reporter_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -90,7 +90,7 @@
                 il y a la classe <span class="new_code">HtmlReporter</span> avec la signature suivante...
 <pre>
 class HtmlReporter extends SimpleReporter {
-    public __construct($encoding) { ... }
+    public HtmlReporter($encoding) { ... }
     public makeDry(boolean $is_dry) { ... }
     public void paintHeader(string $test_name) { ... }
     public void sendNoCacheHeaders() { ... }
@@ -144,7 +144,7 @@
                         est souvent délivré par le groupe de tests du niveau
                         le plus haut et donc c'est de là que le
                         <span class="new_code">$test_name</span> arrive.
-                        Il peint le titre de la page, CSS, la balise "body", etc.
+                        Il peint les titres de la page, CSS, la balise "body", etc.
                         Il ne renvoie rien du tout (<span class="new_code">void</span>).
                     </li>
                     <li>
@@ -206,7 +206,7 @@
                         est la première méthode très commode pour les sous-classes.
                         Elle liste l'arborescence courante des tests
                         sous la forme d'une liste de noms de tests.
-                        Le premier test -- celui de premier niveau --
+                        Le premier test -- celui le plus proche du coeur --
                         sera le premier dans la liste et la méthode de test
                         en cours sera la dernière.
                     </li>
@@ -235,12 +235,12 @@
                 </ul>
                 Une modification simple : demander à l'HtmlReporter d'afficher
                 aussi bien les succès que les échecs et les erreurs...
-<pre>
-<strong>class ReporterShowingPasses extends HtmlReporter {
+<pre><strong>
+class ShowPasses extends HtmlReporter {
     
     function paintPass($message) {
         parent::paintPass($message);
-        print "&lt;span class=\"pass\"&gt;Pass&lt;/span&gt;: ";
+        print "&amp;&lt;span class=\"pass\"&gt;Pass&lt;/span&gt;: ";
         $breadcrumb = $this-&gt;getTestList();
         array_shift($breadcrumb);
         print implode("-&amp;gt;", $breadcrumb);
@@ -290,14 +290,16 @@
             <p>
                 Un affichage sans rien, un canevas vierge
                 pour votre propre création, serait...
-<pre>
-<strong>require_once('simpletest/simpletest.php');</strong>
+<pre><strong>
+require_once('simpletest/simple_test.php');</strong>
 
 class MyDisplay extends SimpleReporter {<strong>
     </strong>
-    function paintHeader($test_name) { }
+    function paintHeader($test_name) {
+    }
     
-    function paintFooter($test_name) { }
+    function paintFooter($test_name) {
+    }
     
     function paintStart($test_name, $size) {<strong>
         parent::paintStart($test_name, $size);</strong>
@@ -314,71 +316,28 @@
     function paintFail($message) {<strong>
         parent::paintFail($message);</strong>
     }
-    
-    function paintError($message) {<strong>
-        parent::paintError($message);</strong>
-    }
-    
-    function paintException($exception) {<strong>
-        parent::paintException($exception);</strong>
-    }
 }
 </pre>
                 Aucune sortie ne viendrait de cette classe jusqu'à un ajout de votre part.
             </p>
-			 <p>
-                Sauf qu'il y a un problème : en utilisant cette cette classe
-				de bas niveau, vous devez explicitement l'invoquer
-				dans les scripts de test.
-				La commande "autorun" ne sera pas capable
-				d'utiliser son contexte courant (qu'elle soit lancée
-				dans un navigateur web ou via une ligne de commande)
-				pour sélectionner le rapporteur.
-            </p>
-            <p>
-                Vous invoquez explicitement la lanceur de tests comme suit...
-<pre>
-&lt;?php
-require_once('simpletest/autorun.php');
-
-$test = new TestSuite('File test');
-$test-&gt;addFile('tests/file_test.php');
-$test-&gt;run(<strong>new MyReporter()</strong>);
-?&gt;
-</pre>
-                ...ou peut-être comme cela...
-<pre>
-&lt;?php
-require_once('simpletest/simpletest.php');
-require_once('my_reporter.php');
-
-class MyTest extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        $this-&gt;addFile('tests/file_test.php');
-    }
-}
-
-$test = new MyTest();
-$test-&gt;run(<strong>new MyReporter()</strong>);
-?&gt;
-</pre>
-                Nous verrons plus comment l'intégrer avec l'"autorun".
-            </p>
         
         <h2>
 <a class="target" name="cli"></a>Le rapporteur en ligne de commande</h2>
             <p>
                 SimpleTest est aussi livré avec un rapporteur
                 en ligne de commande, minime lui aussi.
-                Pour utiliser le rapporteur en ligne de commande explicitement,
+                L'interface imite celle de JUnit,
+                sauf qu'elle envoie les messages d'erreur au fur
+                et à mesure de leur arrivée.
+                Pour utiliser le rapporteur en ligne de commande,
                 il suffit de l'intervertir avec celui de la version HTML...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
 
-$test = new TestSuite('File test');
-$test-&gt;addFile('tests/file_test.php');
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');
 $test-&gt;run(<strong>new TextReporter()</strong>);
 ?&gt;
 </pre>
@@ -392,15 +351,15 @@
 <pre class="shell">
 File test
 OK
-Test cases run: 1/1, Passes: 1, Failures: 0, Exceptions: 0
+Test cases run: 1/1, Failures: 0, Exceptions: 0
 </pre>
                 Un échec déclenche un affichage comme...
 <pre class="shell">
 File test
 1) True assertion failed.
-    in createNewFile
+    in createnewfile
 FAILURES!!!
-Test cases run: 1/1, Passes: 0, Failures: 1, Exceptions: 0
+Test cases run: 1/1, Failures: 1, Exceptions: 0
 </pre>
             </p>
             <p>
@@ -416,50 +375,34 @@
                 avec la bonne valeur renvoyée...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
 
-$test = new TestSuite('File test');
-$test-&gt;addFile('tests/file_test.php');
-<strong>exit ($test-&gt;run(new TextReporter()) ? 0 : 1);</strong>
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');<strong>
+exit ($test-&gt;run(new TextReporter()) ? 0 : 1);</strong>
 ?&gt;
 </pre>
-                Bien sûr l'objectif ne serait pas de créer deux scripts de test,
+                Bien sûr l'objectif n'est pas de créer deux scripts de test,
                 l'un en ligne de commande et l'autre pour un navigateur web,
                 pour chaque suite de test.
                 Le rapporteur en ligne de commande inclut
                 une méthode pour déterminer l'environnement d'exécution...
 <pre>
 &lt;?php
-require_once('simpletest/autorun.php');
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
 
-$test = new TestSuite('File test');
-$test-&gt;addFile('tests/file_test.php');
-<strong>if (TextReporter::inCli()) {</strong>
-    exit ($test-&gt;run(new TextReporter()) ? 0 : 1);
-<strong>}</strong>
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');<strong>
+if (TextReporter::inCli()) {</strong>
+    exit ($test-&gt;run(new TextReporter()) ? 0 : 1);<strong>
+}</strong>
 $test-&gt;run(new HtmlReporter());
 ?&gt;
 </pre>
                 Il s'agit là de la forme utilisée par SimpleTest lui-même.
-                Quand vous utilisez l'"autorun.php"
-				et qu'aucun test n'a été lancé avant la fin,
-				c'est quasiment le code que SimpleTest lancera
-				pour vous implicitement.
             </p>
-            <p>
-                En d'autres termes, ceci donne le même résultat...
-<pre>
-&lt;?php
-require_once('simpletest/autorun.php');
-
-class MyTest extends TestSuite {
-    function __construct() {
-        parent::__construct();
-        $this-&gt;addFile('tests/file_test.php');
-    }
-}
-?&gt;
-</pre>            </p>
         
         <h2>
 <a class="target" name="xml"></a>Test distant</h2>
@@ -489,26 +432,16 @@
   &lt;/group&gt;
 &lt;/run&gt;
 </pre>
-                Pour faire en sorte ue vos scénarios de test produisent ce format,
-				dans la ligne de commande, ajoutez le flag <span class="new_code">--xml</span>.
-<pre class="shell">
-php my_test.php --xml
-</pre>
-                Vous pouvez faire la même chose dans le navigation web
-				en ajoutant le paramètre <span class="new_code">xml=1</span> dans l'URL.
-				N'importe quelle valeur "true" fera l'affaire.
-            </p>
-            <p>
-				Vous pouvez utiliser ce format avec le parseur
+                Vous pouvez utiliser ce format avec le parseur
                 fourni dans SimpleTest lui-même.
                 Il s'agit de <span class="new_code">SimpleTestXmlParser</span>
                 et se trouve <em>xml.php</em> à l'intérieur du paquet SimpleTest...
 <pre>
 &lt;?php
 require_once('simpletest/xml.php');
-    
+
 ...
-$parser = new SimpleTestXmlParser(new HtmlReporter());
+$parser = &amp;new SimpleTestXmlParser(new HtmlReporter());
 $parser-&gt;parse($test_output);
 ?&gt;
 </pre>
@@ -519,32 +452,10 @@
                 comme tout autre exécution de test.
                 Il y a des occasions bizarres dans lesquelles c'est en fait très utile.
             </p>
-			<p>
-                Le plus courant, c'est quand vous voulez isoler
-				un test sensible au crash.
-				Vous pouvez collecter la sortie XML en utilisant
-				l'opérateur antiquote (Ndt : backtick) à partir
-				d'un autre test.
-				De la sorte, il tourne dans son propre processus...
-<pre>
-&lt;?php
-require_once('simpletest/xml.php');
-
-if (TextReporter::inCli()) {
-    $parser = new SimpleTestXmlParser(new TextReporter());
-} else {
-    $parser = new SimpleTestXmlParser(new HtmlReporter());
-}
-$parser-&gt;parse(`php flakey_test.php --xml`);
-?&gt;
-</pre>
-            </p>
             <p>
-                Un autre cas est celui des très longues suites de tests.
-            </p>
-			<p>
-                Elles peuvent venir à bout de la limite de mémoire
-                par défaut d'un process PHP - 16Mb.
+                Un problème des très grandes suites de test,
+                c'est qu'elles peuvent venir à bout de la limite de mémoire
+                par défaut d'un process PHP - 8Mb.
                 En plaçant la sortie des groupes de test dans du XML
                 et leur exécution dans des process différents,
                 le résultat peut être parsé à nouveau pour agréger
@@ -557,19 +468,16 @@
                 Un scénario de test pour le réaliser existe déjà
                 à l'intérieur du framework SimpleTest, mais il est encore expérimental...
 <pre>
-&lt;?php
-<strong>require_once('../remote.php');</strong>
-require_once('simpletest/autorun.php');
-    
+&lt;?php<strong>
+require_once('../remote.php');</strong>
+require_once('../reporter.php');
+
 $test_url = ...;
 $dry_url = ...;
 
-class MyTestOnAnotherServer extends RemoteTestCase {
-    function __construct() {
-        $test_url = ...
-        parent::__construct($test_url, $test_url . ' --dry');
-    }
-}
+$test = &amp;new GroupTest('Remote tests');
+$test-&gt;addTestCase(<strong>new RemoteTestCase($test_url, $dry_url)</strong>);
+$test-&gt;run(new HtmlReporter());
 ?&gt;
 </pre>
                 <span class="new_code">RemoteTestCase</span> prend la localisation réelle
@@ -579,7 +487,7 @@
                 Cette technique est employée pour que les progrès
                 soient correctement rapportés vers le haut.
                 <span class="new_code">RemoteTestCase</span> peut être ajouté à
-                une suite de test comme n'importe quelle autre suite de tests.
+                une suite de test comme n'importe quel autre groupe de tests.
             </p>
         
     </div>

Modified: trunk/src/Engine/app/vendors/simpletest/docs/fr/unit_test_documentation.html
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/docs/fr/unit_test_documentation.html	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/docs/fr/unit_test_documentation.html	2012-06-03 14:35:58 UTC (rev 116)
@@ -79,15 +79,15 @@
     function FileTestCase() {
         $this-&gt;UnitTestCase('File test');
     }<strong>
-
+    
     function setUp() {
         @unlink('../temp/test.txt');
     }
-
+    
     function tearDown() {
         @unlink('../temp/test.txt');
     }
-
+    
     function testCreation() {
         $writer = &amp;new FileWriter('../temp/test.txt');
         $writer-&gt;write('Hello');
@@ -181,29 +181,21 @@
 <td>Echoue si $x et $y sont la même variable</td>
 </tr>
                 <tr>
-<td><span class="new_code">assertPattern($p, $x)</span></td>
+<td><span class="new_code">assertWantedPattern($p, $x)</span></td>
 <td>Echoue sauf si l'expression rationnelle $p capture $x</td>
 </tr>
                 <tr>
-<td><span class="new_code">assertNoPattern($p, $x)</span></td>
+<td><span class="new_code">assertNoUnwantedPattern($p, $x)</span></td>
 <td>Echoue si l'expression rationnelle $p capture $x</td>
 </tr>
                 <tr>
-<td><span class="new_code">expectError($x)</span></td>
-<td>Echoue si l'erreur correspondante n'arrive pas</td>
+<td><span class="new_code">assertNoErrors()</span></td>
+<td>Echoue si une erreur PHP arrive</td>
 </tr>
                 <tr>
-<td><span class="new_code">expectException($x)</span></td>
-<td>Echoue si l'exception correspondante n'est pas levée</td>
+<td><span class="new_code">assertError($x)</span></td>
+<td>Echoue si aucune erreur ou message incorrect de PHP n'arrive</td>
 </tr>
-                <tr>
-<td><span class="new_code">ignoreException($x)</span></td>
-<td>Avale toutes les exceptions correspondantes qui surviendraient</td>
-</tr>
-                <tr>
-<td><span class="new_code">assert($e)</span></td>
-<td>Echoue sur un objet <a href="expectation_documentation.html">attente</a> $e qui échouerait</td>
-</tr>
             </tbody></table>
                 Toutes les méthodes d'assertion peuvent recevoir
                 une description optionnelle :
@@ -242,35 +234,38 @@
                 Échouera étant donné que la variable <span class="new_code">$b</span>
                 est une copie de <span class="new_code">$a</span>.
 <pre>
-<strong>$this-&gt;assertPattern('/hello/i', 'Hello world');</strong>
+<strong>$this-&gt;assertWantedPattern('/hello/i', 'Hello world');</strong>
 </pre>
                 Là, ça passe puisque la recherche est insensible
                 à la casse et que donc <span class="new_code">hello</span>
                 est bien repérable dans <span class="new_code">Hello world</span>.
 <pre>
-<strong>$this-&gt;expectError();</strong>
+<strong>trigger_error('Disaster');
 trigger_error('Catastrophe');
+$this-&gt;assertError();
+$this-&gt;assertError('Catastrophe');
+$this-&gt;assertNoErrors();</strong>
 </pre>
-                Ici la vérification attrape le message "Catastrophe"
-				sans vérifier le texte et passe.
-				Elle enlève l'erreur de la queue au passage.
-<pre>
-<strong>$this-&gt;expectError('Catastrophe');</strong>
-trigger_error('Catastrophe');
-</pre>
-                La vérification d'erreur suivante teste non seulement
-				l'existance de l'erreur mais aussi le texte qui,
-				dans le cas présent, correspond et donc un nouveau succès.
-				Si des erreurs non vérifiées sont laissées pour compte
-				à la fin d'une méthode de test alors un exception sera levé
-				dans le test.
+                Ici, il y a besoin d'une petite explication :
+                toutes passent !
             </p>
             <p>
-                Notez que SimpleTest ne peut pas attraper des erreurs PHP
-				au moment de la compilation.
+                Les erreurs PHP dans SimpleTest sont piégées et
+                placées dans une queue. Ici la première vérification
+                d'erreur attrape le message "Disaster"
+                sans vérifier le texte et passe. Résultat :
+                l'erreur est supprimée de la queue.
+                La vérification suivante teste non seulement l'existence
+                de l'erreur mais aussi le texte qui correspond :
+                un autre succès. Désormais la queue est vide
+                et le dernier test passe aussi.
+                Si une autre erreur non vérifiée est encore
+                dans la queue à la fin de notre méthode de test
+                alors une exception sera rapportée dans le test.
+                Notez que SimpleTest ne peut pas attraper les erreurs PHP à la compilation.
             </p>
             <p>
-                Les scénarios de tests peuvent utiliser des méthodes
+                Les scénarios de test peuvent utiliser des méthodes
                 bien pratiques pour déboguer le code ou pour étendre la suite...
                 <table><tbody>
                     <tr>
@@ -294,6 +289,10 @@
 <td>Envoi un évènement exception</td>
 </tr>
                     <tr>
+<td><span class="new_code">sendMessage()</span></td>
+<td>Envoie un message d'état aux systèmes d'affichage qui le supporte</td>
+</tr>
+                    <tr>
 <td><span class="new_code">signal($type, $payload)</span></td>
 <td>Envoie un message défini par l'utilisateur au rapporteur du test</td>
 </tr>
@@ -301,6 +300,10 @@
 <td><span class="new_code">dump($var)</span></td>
 <td>Effectue un <span class="new_code">print_r()</span> formaté pour du déboguage rapide et grossier</td>
 </tr>
+                    <tr>
+<td><span class="new_code">swallowErrors()</span></td>
+<td>Vide les erreurs de la queue</td>
+</tr>
                 </tbody></table>
             </p>
         
@@ -317,7 +320,7 @@
     function FileTester($name = false) {
         $this-&gt;UnitTestCase($name);
     }
-
+    
     function assertFileExists($filename, $message = '%s') {
         $this-&gt;assertTrue(
                 file_exists($filename),
@@ -338,15 +341,15 @@
                 comme un scénario de test classique...
 <pre>
 class FileTestCase extends <strong>FileTester</strong> {
-
+    
     function setUp() {
         @unlink('../temp/test.txt');
     }
-
+    
     function tearDown() {
         @unlink('../temp/test.txt');
     }
-
+    
     function testCreation() {
         $writer = &amp;new FileWriter('../temp/test.txt');
         $writer-&gt;write('Hello');<strong>

Modified: trunk/src/Engine/app/vendors/simpletest/eclipse.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/eclipse.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/eclipse.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,9 +1,9 @@
 <?php
 /**
- *  base include file for eclipse plugin
+ *  base include file for eclipse plugin  
  *  @package    SimpleTest
  *  @subpackage Eclipse
- *  @version    $Id: eclipse.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: eclipse.php 1787 2008-04-26 20:35:39Z pp11 $
  */
 /**#@+
  * simpletest include files
@@ -16,12 +16,12 @@
 /**#@-*/
 
 /**
- *  base reported class for eclipse plugin
+ *  base reported class for eclipse plugin  
  *  @package    SimpleTest
  *  @subpackage Eclipse
  */
 class EclipseReporter extends SimpleScorer {
-
+    
     /**
      *    Reporter to be run inside of Eclipse interface.
      *    @param object $listener   Eclipse listener (?).
@@ -37,7 +37,7 @@
         $this->error = false;
         $this->fail = false;
     }
-
+    
     /**
      *    Means to display human readable object comparisons.
      *    @return SimpleDumper        Visual comparer.
@@ -45,7 +45,7 @@
     function getDumper() {
         return new SimpleDumper();
     }
-
+    
     /**
      *    Localhost connection from Eclipse.
      *    @param integer $port      Port to connect to Eclipse.
@@ -56,7 +56,7 @@
         $tmplistener = &new SimpleSocket($host, $port, 5);
         return $tmplistener;
     }
-
+    
     /**
      *    Wraps the test in an output buffer.
      *    @param SimpleInvoker $invoker     Current test runner.
@@ -67,7 +67,7 @@
         $eclinvoker = &new EclipseInvoker($invoker, $this->listener);
         return $eclinvoker;
     }
-
+    
     /**
      *    C style escaping.
      *    @param string $raw    String with backslashes, quotes and whitespace.
@@ -78,7 +78,7 @@
         $replace = array('\\\\','\"','\/','\b','\f','\n','\r','\t');
         return str_replace($needle, $replace, $raw);
     }
-
+    
     /**
      *    Stash the first passing item. Clicking the test
      *    item goes to first pass.
@@ -91,7 +91,7 @@
         }
         $this->pass = true;
     }
-
+    
     /**
      *    Stash the first failing item. Clicking the test
      *    item goes to first fail.
@@ -106,7 +106,7 @@
             $this->listener->write('{status:"fail",message:"'.$this->message.'",group:"'.$this->group.'",case:"'.$this->case.'",method:"'.$this->method.'"}');
         }
     }
-
+    
     /**
      *    Stash the first error. Clicking the test
      *    item goes to first error.
@@ -120,8 +120,8 @@
             $this->listener->write('{status:"error",message:"'.$this->message.'",group:"'.$this->group.'",case:"'.$this->case.'",method:"'.$this->method.'"}');
         }
     }
-
-
+    
+    
     /**
      *    Stash the first exception. Clicking the test
      *    item goes to first message.
@@ -141,8 +141,8 @@
                     . '"}');
         }
     }
+    
 
-
     /**
      *    We don't display any special header.
      *    @param string $test_name     First test top level
@@ -159,7 +159,7 @@
      */
     function paintFooter($test_name) {
     }
-
+    
     /**
      *    Paints nothing at the start of a test method, but stash
      *    the method name for later.
@@ -172,14 +172,14 @@
         $this->error = false;
         $this->method = $this->escapeVal($method);
     }
-
+        
     /**
      *    Only send one message if the test passes, after that
      *    suppress the message.
      *    @param string $test_name   Name of test that is ending.
      *    @access public
      */
-    function paintMethodEnd($method){
+    function paintMethodEnd($method){   
         if ($this->fail || $this->error || ! $this->pass){
         } else {
             $this->listener->write(
@@ -188,7 +188,7 @@
                         $this->method . '"}');
         }
     }
-
+    
     /**
      *    Stashes the test case name for the later failure message.
      *    @param string $test_name     Name of test or other label.
@@ -197,7 +197,7 @@
     function paintCaseStart($case){
         $this->case = $this->escapeVal($case);
     }
-
+    
     /**
      *    Drops the name.
      *    @param string $test_name     Name of test or other label.
@@ -206,7 +206,7 @@
     function paintCaseEnd($case){
         $this->case = "";
     }
-
+    
     /**
      *    Stashes the name of the test suite. Starts test coverage
      *    if enabled.
@@ -218,7 +218,7 @@
         $this->group = $this->escapeVal($group);
         if ($this->cc){
             if (extension_loaded('xdebug')){
-                xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
+                xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); 
             }
         }
     }
@@ -268,7 +268,7 @@
 
 /**
  *  Invoker decorator for Eclipse. Captures output until
- *  the end of the test.
+ *  the end of the test.  
  *  @package    SimpleTest
  *  @subpackage Eclipse
  */
@@ -277,7 +277,7 @@
         $this->listener = &$listener;
         $this->SimpleInvokerDecorator($invoker);
     }
-
+    
     /**
      *    Starts output buffering.
      *    @param string $method    Test method to call.

Modified: trunk/src/Engine/app/vendors/simpletest/encoding.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/encoding.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/encoding.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,9 +3,9 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: encoding.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: encoding.php 1964 2009-10-13 15:27:31Z maetl_ $
  */
-
+    
 /**#@+
  *  include other SimpleTest class files
  */
@@ -20,7 +20,7 @@
 class SimpleEncodedPair {
     private $key;
     private $value;
-
+    
     /**
      *    Stashes the data for rendering later.
      *    @param string $key       Form element name.
@@ -30,7 +30,7 @@
         $this->key = $key;
         $this->value = $value;
     }
-
+    
     /**
      *    The pair as a single string.
      *    @return string        Encoded pair.
@@ -39,7 +39,7 @@
     function asRequest() {
         return urlencode($this->key) . '=' . urlencode($this->value);
     }
-
+    
     /**
      *    The MIME part as a string.
      *    @return string        MIME part encoding.
@@ -51,7 +51,7 @@
         $part .= "\r\n" . $this->value;
         return $part;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @param string $key    Identifier.
@@ -61,7 +61,7 @@
     function isKey($key) {
         return $key == $this->key;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @return string       Identifier.
@@ -70,7 +70,7 @@
     function getKey() {
         return $this->key;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @return string       Content.
@@ -90,7 +90,7 @@
     private $key;
     private $content;
     private $filename;
-
+    
     /**
      *    Stashes the data for rendering later.
      *    @param string $key          Key to add value to.
@@ -102,7 +102,7 @@
         $this->content = $content;
         $this->filename = $filename;
     }
-
+    
     /**
      *    The pair as a single string.
      *    @return string        Encoded pair.
@@ -111,7 +111,7 @@
     function asRequest() {
         return '';
     }
-
+    
     /**
      *    The MIME part as a string.
      *    @return string        MIME part encoding.
@@ -125,7 +125,7 @@
         $part .= "\r\n\r\n" . $this->content;
         return $part;
     }
-
+    
     /**
      *    Attempts to figure out the MIME type from the
      *    file extension and the content.
@@ -138,7 +138,7 @@
         }
         return 'application/octet-stream';
     }
-
+    
     /**
      *    Tests each character is in the range 0-127.
      *    @param string $ascii    String to test.
@@ -152,7 +152,7 @@
         }
         return true;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @param string $key    Identifier.
@@ -162,7 +162,7 @@
     function isKey($key) {
         return $key == $this->key;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @return string       Identifier.
@@ -171,7 +171,7 @@
     function getKey() {
         return $this->key;
     }
-
+    
     /**
      *    Is this the value we are looking for?
      *    @return string       Content.
@@ -190,7 +190,7 @@
  */
 class SimpleEncoding {
     private $request;
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -205,7 +205,7 @@
         $this->clear();
         $this->merge($query);
     }
-
+    
     /**
      *    Empties the request of parameters.
      *    @access public
@@ -213,7 +213,7 @@
     function clear() {
         $this->request = array();
     }
-
+    
     /**
      *    Adds a parameter to the query.
      *    @param string $key            Key to add value to.
@@ -232,7 +232,7 @@
             $this->addPair($key, $value);
         }
     }
-
+    
     /**
      *    Adds a new value into the request.
      *    @param string $key            Key to add value to.
@@ -242,7 +242,7 @@
     protected function addPair($key, $value) {
         $this->request[] = new SimpleEncodedPair($key, $value);
     }
-
+    
     /**
      *    Adds a MIME part to the query. Does nothing for a
      *    form encoded packet.
@@ -254,7 +254,7 @@
     function attach($key, $content, $filename) {
         $this->request[] = new SimpleAttachment($key, $content, $filename);
     }
-
+    
     /**
      *    Adds a set of parameters to this query.
      *    @param array/SimpleQueryString $query  Multiple values are
@@ -270,7 +270,7 @@
             }
         }
     }
-
+    
     /**
      *    Accessor for single value.
      *    @return string/array    False if missing, string
@@ -293,7 +293,7 @@
             return $values;
         }
     }
-
+    
     /**
      *    Accessor for listing of pairs.
      *    @return array        All pair objects.
@@ -302,7 +302,7 @@
     function getAll() {
         return $this->request;
     }
-
+    
     /**
      *    Renders the query string as a URL encoded
      *    request part.
@@ -327,7 +327,7 @@
  *    @subpackage WebTester
  */
 class SimpleGetEncoding extends SimpleEncoding {
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -338,7 +338,7 @@
     function __construct($query = false) {
         parent::__construct($query);
     }
-
+    
     /**
      *    HTTP request method.
      *    @return string        Always GET.
@@ -347,7 +347,7 @@
     function getMethod() {
         return 'GET';
     }
-
+    
     /**
      *    Writes no extra headers.
      *    @param SimpleSocket $socket        Socket to write to.
@@ -355,7 +355,7 @@
      */
     function writeHeadersTo(&$socket) {
     }
-
+    
     /**
      *    No data is sent to the socket as the data is encoded into
      *    the URL.
@@ -364,7 +364,7 @@
      */
     function writeTo(&$socket) {
     }
-
+    
     /**
      *    Renders the query string as a URL encoded
      *    request part for attaching to a URL.
@@ -382,7 +382,7 @@
  *    @subpackage WebTester
  */
 class SimpleHeadEncoding extends SimpleGetEncoding {
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -393,7 +393,7 @@
     function __construct($query = false) {
         parent::__construct($query);
     }
-
+    
     /**
      *    HTTP request method.
      *    @return string        Always HEAD.
@@ -410,7 +410,7 @@
  *    @subpackage WebTester
  */
 class SimpleDeleteEncoding extends SimpleGetEncoding {
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -421,7 +421,7 @@
     function __construct($query = false) {
         parent::__construct($query);
     }
-
+    
     /**
      *    HTTP request method.
      *    @return string        Always DELETE.
@@ -433,7 +433,7 @@
 }
 
 /**
- *    Bundles an entity-body for transporting
+ *    Bundles an entity-body for transporting 
  *    a raw content payload with the request.
  *    @package SimpleTest
  *    @subpackage WebTester
@@ -441,7 +441,7 @@
 class SimpleEntityEncoding extends SimpleEncoding {
     private $content_type;
     private $body;
-
+    
     function __construct($query = false, $content_type = false) {
         $this->content_type = $content_type;
     	if (is_string($query)) {
@@ -451,7 +451,7 @@
             parent::__construct($query);
         }
     }
-
+    
     /**
      *    Returns the media type of the entity body
      *    @return string
@@ -463,7 +463,7 @@
         }
     	return $this->content_type;
     }
-
+       
     /**
      *    Dispatches the form headers down the socket.
      *    @param SimpleSocket $socket        Socket to write to.
@@ -473,7 +473,7 @@
         $socket->write("Content-Length: " . (integer)strlen($this->encode()) . "\r\n");
         $socket->write("Content-Type: " .  $this->getContentType() . "\r\n");
     }
-
+    
     /**
      *    Dispatches the form data down the socket.
      *    @param SimpleSocket $socket        Socket to write to.
@@ -482,7 +482,7 @@
     function writeTo(&$socket) {
         $socket->write($this->encode());
     }
-
+    
     /**
      *    Renders the request body
      *    @return Encoded entity body
@@ -500,7 +500,7 @@
  *    @subpackage WebTester
  */
 class SimplePostEncoding extends SimpleEntityEncoding {
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -514,7 +514,7 @@
         }
         parent::__construct($query, $content_type);
     }
-
+    
     function hasMoreThanOneLevel($query) {
         foreach ($query as $key => $value) {
             if (is_array($value)) {
@@ -538,10 +538,10 @@
         if ($this->hasMoreThanOneLevel($query_)) {
             $query_ = $this->rewriteArrayWithMultipleLevels($query_);
         }
-
+        
         return $query_;
     }
-
+    
     /**
      *    HTTP request method.
      *    @return string        Always POST.
@@ -550,7 +550,7 @@
     function getMethod() {
         return 'POST';
     }
-
+    
     /**
      *    Renders the query string as a URL encoded
      *    request part for attaching to a URL.
@@ -568,7 +568,7 @@
  *    @subpackage WebTester
  */
 class SimplePutEncoding extends SimpleEntityEncoding {
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -579,7 +579,7 @@
     function __construct($query = false, $content_type = false) {
         parent::__construct($query, $content_type);
     }
-
+    
     /**
      *    HTTP request method.
      *    @return string        Always PUT.
@@ -598,7 +598,7 @@
  */
 class SimpleMultipartEncoding extends SimplePostEncoding {
     private $boundary;
-
+    
     /**
      *    Starts empty.
      *    @param array $query       Hash of parameters.
@@ -610,7 +610,7 @@
         parent::__construct($query);
         $this->boundary = ($boundary === false ? uniqid('st') : $boundary);
     }
-
+    
     /**
      *    Dispatches the form headers down the socket.
      *    @param SimpleSocket $socket        Socket to write to.
@@ -620,7 +620,7 @@
         $socket->write("Content-Length: " . (integer)strlen($this->encode()) . "\r\n");
         $socket->write("Content-Type: multipart/form-data; boundary=" . $this->boundary . "\r\n");
     }
-
+    
     /**
      *    Dispatches the form data down the socket.
      *    @param SimpleSocket $socket        Socket to write to.
@@ -629,7 +629,7 @@
     function writeTo(&$socket) {
         $socket->write($this->encode());
     }
-
+    
     /**
      *    Renders the query string as a URL encoded
      *    request part.

Modified: trunk/src/Engine/app/vendors/simpletest/errors.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/errors.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/errors.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: errors.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: errors.php 1981 2010-03-23 23:29:56Z lastcraft $
  */
 
 /**#@+
@@ -43,7 +43,7 @@
         restore_error_handler();
         $queue->tally();
     }
-
+    
     /**
      *    Wires up the error queue for a single test.
      *    @return SimpleErrorQueue    Queue connected to the test.
@@ -120,7 +120,7 @@
         $content = str_replace('%', '%%', $content);
         $this->testLatestError($severity, $content, $filename, $line);
     }
-
+    
     /**
      *    Any errors still in the queue are sent to the test
      *    case. Any unfulfilled expectations trigger failures.

Modified: trunk/src/Engine/app/vendors/simpletest/expectation.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/expectation.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/expectation.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *    base include file for SimpleTest
  *    @package    SimpleTest
  *    @subpackage    UnitTester
- *    @version    $Id: expectation.php 2009 2011-04-28 08:57:25Z pp11 $
+ *    @version    $Id: expectation.php 1905 2009-07-29 13:54:00Z dgheath $
  */
 
 /**#@+
@@ -770,23 +770,23 @@
         if (is_object($compare)) {
             return SimpleTestCompatibility::isA($compare, $this->type);
         } else {
-            $function = 'is_'.$this->canonicalType($this->type);
-            if (is_callable($function)) {
-                return $function($compare);
-            }
-            return false;
+            return (strtolower(gettype($compare)) == $this->canonicalType($this->type));
         }
     }
 
     /**
-     *    Coerces type name into a is_*() match.
+     *    Coerces type name into a gettype() match.
      *    @param string $type        User type.
      *    @return string             Simpler type.
      *    @access private
      */
     protected function canonicalType($type) {
         $type = strtolower($type);
-        $map = array('boolean' => 'bool');
+        $map = array(
+                'bool' => 'boolean',
+                'float' => 'double',
+                'real' => 'double',
+                'int' => 'integer');
         if (isset($map[$type])) {
             $type = $map[$type];
         }

Modified: trunk/src/Engine/app/vendors/simpletest/extensions/testdox.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/extensions/testdox.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/extensions/testdox.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,16 +1,10 @@
 <?php
 /**
- *	Extension for a TestDox reporter
+ *	base include file for SimpleTest
  *	@package	SimpleTest
  *	@subpackage	Extensions
- *	@version	$Id: testdox.php 2004 2010-10-31 13:44:14Z jsweat $
+ *	@version	$Id: testdox.php 1982 2010-03-28 11:57:54Z lastcraft $
  */
-
-/**
- * 	TestDox reporter 
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
 class TestDoxReporter extends SimpleReporter
 {
     var $_test_case_pattern = '/^TestOf(.*)$/';
@@ -50,4 +44,4 @@
         echo " [FAILED]";
     }
 }
-?>
+?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/form.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/form.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/form.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest.
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: form.php 2013 2011-04-29 09:29:45Z pp11 $
+ *  @version    $Id: form.php 1996 2010-07-27 09:11:59Z pp11 $
  */
 
 /**#@+
@@ -350,12 +350,8 @@
      *    @return hash           Submitted values.
      *    @access public
      */
-    function submit($additional = false) {
-        $encoding = $this->encode();
-        if ($additional) {
-            $encoding->merge($additional);
-        }
-        return $encoding;
+    function submit() {
+        return $this->encode();
     }
 }
 ?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/http.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/http.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/http.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: http.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: http.php 1829 2008-12-08 17:56:37Z edwardzyang $
  */
 
 /**#@+
@@ -22,7 +22,7 @@
  */
 class SimpleRoute {
     private $url;
-
+    
     /**
      *    Sets the target URL.
      *    @param SimpleUrl $url   URL as object.
@@ -31,7 +31,7 @@
     function __construct($url) {
         $this->url = $url;
     }
-
+    
     /**
      *    Resource name.
      *    @return SimpleUrl        Current url.
@@ -40,7 +40,7 @@
     function getUrl() {
         return $this->url;
     }
-
+    
     /**
      *    Creates the first line which is the actual request.
      *    @param string $method   HTTP request method, usually GET.
@@ -51,7 +51,7 @@
         return $method . ' ' . $this->url->getPath() .
                 $this->url->getEncodedRequest() . ' HTTP/1.0';
     }
-
+    
     /**
      *    Creates the host part of the request.
      *    @return string          Host line content.
@@ -64,7 +64,7 @@
         }
         return $line;
     }
-
+    
     /**
      *    Opens a socket to the route.
      *    @param string $method      HTTP request method, usually GET.
@@ -86,7 +86,7 @@
         }
         return $socket;
     }
-
+    
     /**
      *    Factory for socket.
      *    @param string $scheme                   Protocol to use.
@@ -117,7 +117,7 @@
     private $proxy;
     private $username;
     private $password;
-
+    
     /**
      *    Stashes the proxy address.
      *    @param SimpleUrl $url     URL as object.
@@ -132,7 +132,7 @@
         $this->username = $username;
         $this->password = $password;
     }
-
+    
     /**
      *    Creates the first line which is the actual request.
      *    @param string $method   HTTP request method, usually GET.
@@ -147,7 +147,7 @@
         return $method . ' ' . $scheme . '://' . $url->getHost() . $port .
                 $url->getPath() . $url->getEncodedRequest() . ' HTTP/1.0';
     }
-
+    
     /**
      *    Creates the host part of the request.
      *    @param SimpleUrl $url   URL as object.
@@ -159,7 +159,7 @@
         $port = $this->proxy->getPort() ? $this->proxy->getPort() : 8080;
         return "$host:$port";
     }
-
+    
     /**
      *    Opens a socket to the route.
      *    @param string $method       HTTP request method, usually GET.
@@ -199,7 +199,7 @@
     private $encoding;
     private $headers;
     private $cookies;
-
+    
     /**
      *    Builds the socket request from the different pieces.
      *    These include proxy information, URL, cookies, headers,
@@ -215,7 +215,7 @@
         $this->headers = array();
         $this->cookies = array();
     }
-
+    
     /**
      *    Dispatches the content to the route's socket.
      *    @param integer $timeout      Connection timeout.
@@ -231,7 +231,7 @@
         }
         return $this->createResponse($socket);
     }
-
+    
     /**
      *    Sends the headers.
      *    @param SimpleSocket $socket           Open socket.
@@ -251,7 +251,7 @@
         $socket->write("\r\n");
         $encoding->writeTo($socket);
     }
-
+    
     /**
      *    Adds a header line to the request.
      *    @param string $header_line    Text of full header line.
@@ -260,7 +260,7 @@
     function addHeaderLine($header_line) {
         $this->headers[] = $header_line;
     }
-
+    
     /**
      *    Reads all the relevant cookies from the
      *    cookie jar.
@@ -271,7 +271,7 @@
     function readCookiesFromJar($jar, $url) {
         $this->cookies = $jar->selectAsPairs($url);
     }
-
+    
     /**
      *    Wraps the socket in a response parser.
      *    @param SimpleSocket $socket   Responding socket.
@@ -302,7 +302,7 @@
     private $cookies;
     private $authentication;
     private $realm;
-
+    
     /**
      *    Parses the incoming header block.
      *    @param string $headers     Header block.
@@ -321,7 +321,7 @@
             $this->parseHeaderLine($header_line);
         }
     }
-
+    
     /**
      *    Accessor for parsed HTTP protocol version.
      *    @return integer           HTTP error code.
@@ -330,7 +330,7 @@
     function getHttpVersion() {
         return $this->http_version;
     }
-
+    
     /**
      *    Accessor for raw header block.
      *    @return string        All headers as raw string.
@@ -339,7 +339,7 @@
     function getRaw() {
         return $this->raw_headers;
     }
-
+    
     /**
      *    Accessor for parsed HTTP error code.
      *    @return integer           HTTP error code.
@@ -348,7 +348,7 @@
     function getResponseCode() {
         return (integer)$this->response_code;
     }
-
+    
     /**
      *    Returns the redirected URL or false if
      *    no redirection.
@@ -358,7 +358,7 @@
     function getLocation() {
         return $this->location;
     }
-
+    
     /**
      *    Test to see if the response is a valid redirect.
      *    @return boolean       True if valid redirect.
@@ -368,7 +368,7 @@
         return in_array($this->response_code, array(301, 302, 303, 307)) &&
                 (boolean)$this->getLocation();
     }
-
+    
     /**
      *    Test to see if the response is an authentication
      *    challenge.
@@ -380,7 +380,7 @@
                 (boolean)$this->authentication &&
                 (boolean)$this->realm;
     }
-
+    
     /**
      *    Accessor for MIME type header information.
      *    @return string           MIME type.
@@ -389,7 +389,7 @@
     function getMimeType() {
         return $this->mime_type;
     }
-
+    
     /**
      *    Accessor for authentication type.
      *    @return string        Type.
@@ -398,7 +398,7 @@
     function getAuthentication() {
         return $this->authentication;
     }
-
+    
     /**
      *    Accessor for security realm.
      *    @return string        Realm.
@@ -407,7 +407,7 @@
     function getRealm() {
         return $this->realm;
     }
-
+    
     /**
      *    Writes new cookies to the cookie jar.
      *    @param SimpleCookieJar $jar   Jar to write to.
@@ -450,7 +450,7 @@
             $this->realm = trim($matches[2]);
         }
     }
-
+    
     /**
      *    Parse the Set-cookie content.
      *    @param string $cookie_line    Text after "Set-cookie:"
@@ -485,7 +485,7 @@
     private $sent;
     private $content;
     private $headers;
-
+    
     /**
      *    Constructor. Reads and parses the incoming
      *    content and headers.
@@ -508,7 +508,7 @@
         }
         $this->parse($raw);
     }
-
+    
     /**
      *    Splits up the headers and the rest of the content.
      *    @param string $raw    Content to parse.
@@ -529,7 +529,7 @@
             $this->headers = new SimpleHttpHeaders($headers);
         }
     }
-
+    
     /**
      *    Original request method.
      *    @return string        GET, POST or HEAD.
@@ -538,7 +538,7 @@
     function getMethod() {
         return $this->encoding->getMethod();
     }
-
+    
     /**
      *    Resource name.
      *    @return SimpleUrl        Current url.
@@ -547,7 +547,7 @@
     function getUrl() {
         return $this->url;
     }
-
+    
     /**
      *    Original request data.
      *    @return mixed              Sent content.
@@ -556,7 +556,7 @@
     function getRequestData() {
         return $this->encoding;
     }
-
+    
     /**
      *    Raw request that was sent down the wire.
      *    @return string        Bytes actually sent.
@@ -565,7 +565,7 @@
     function getSent() {
         return $this->sent;
     }
-
+    
     /**
      *    Accessor for the content after the last
      *    header line.
@@ -575,7 +575,7 @@
     function getContent() {
         return $this->content;
     }
-
+    
     /**
      *    Accessor for header block. The response is the
      *    combination of this and the content.
@@ -585,7 +585,7 @@
     function getHeaders() {
         return $this->headers;
     }
-
+    
     /**
      *    Accessor for any new cookies.
      *    @return array       List of new cookies.
@@ -594,7 +594,7 @@
     function getNewCookies() {
         return $this->headers->getNewCookies();
     }
-
+    
     /**
      *    Reads the whole of the socket output into a
      *    single string.
@@ -610,7 +610,7 @@
         }
         return $all;
     }
-
+    
     /**
      *    Test to see if the packet from the socket is the
      *    last one.
@@ -625,4 +625,4 @@
         return ! $packet;
     }
 }
-?>
\ No newline at end of file
+?>

Deleted: trunk/src/Engine/app/vendors/simpletest/recorder.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/recorder.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/recorder.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,101 +0,0 @@
-<?php
-/**
- *	base include file for SimpleTest
- *	@package	SimpleTest
- *	@subpackage	Extensions
- *  @author Rene vd O (original code)
- *  @author Perrick Penet
- *  @author Marcus Baker
- *	@version	$Id: recorder.php 2011 2011-04-29 08:22:48Z pp11 $
- */
-
-/**
- *	include other SimpleTest class files
- */
-require_once(dirname(__FILE__) . '/scorer.php');
-
-/**
- *	A single test result.
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
-abstract class SimpleResult {
-	public $time;
-	public $breadcrumb;
-	public $message;
-
-	/**
-	 * Records the test result as public members.
-	 * @param array $breadcrumb		Test stack at the time of the event.
-	 * @param string $message       The messsage to the human.
-	 */
-	function __construct($breadcrumb, $message) {
-		list($this->time, $this->breadcrumb, $this->message) =
-				array(time(), $breadcrumb, $message);
-	}
-}
-
-/**
- *	A single pass captured for later.
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
-class SimpleResultOfPass extends SimpleResult { }
-
-/**
- *	A single failure captured for later.
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
-class SimpleResultOfFail extends SimpleResult { }
-
-/**
- *	A single exception captured for later.
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
-class SimpleResultOfException extends SimpleResult { }
-
-/**
- *    Array-based test recorder. Returns an array
- *    with timestamp, status, test name and message for each pass and failure.
- *	@package	SimpleTest
- *	@subpackage	Extensions
- */
-class Recorder extends SimpleReporterDecorator {
-    public $results = array();
-
-	/**
-	 *    Stashes the pass as a SimpleResultOfPass
-	 *    for later retrieval.
-     *    @param string $message    Pass message to be displayed
-     *    							eventually.
-	 */
-	function paintPass($message) {
-        parent::paintPass($message);
-        $this->results[] = new SimpleResultOfPass(parent::getTestList(), $message);
-	}
-
-	/**
-	 * 	  Stashes the fail as a SimpleResultOfFail
-	 * 	  for later retrieval.
-     *    @param string $message    Failure message to be displayed
-     *    							eventually.
-	 */
-	function paintFail($message) {
-        parent::paintFail($message);
-        $this->results[] = new SimpleResultOfFail(parent::getTestList(), $message);
-	}
-
-	/**
-	 * 	  Stashes the exception as a SimpleResultOfException
-	 * 	  for later retrieval.
-     *    @param string $message    Exception message to be displayed
-     *    							eventually.
-	 */
-	function paintException($message) {
-        parent::paintException($message);
-        $this->results[] = new SimpleResultOfException(parent::getTestList(), $message);
-	}
-}
-?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/reflection_php4.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/reflection_php4.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/reflection_php4.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: reflection_php4.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: reflection_php4.php 1672 2008-03-02 04:47:34Z edwardzyang $
  */
 
 /**
@@ -112,7 +112,7 @@
     function isInterface() {
         return false;
     }
-
+        
     /**
      *    Scans for final methods, but as it's PHP 4 there
      *    aren't any.

Modified: trunk/src/Engine/app/vendors/simpletest/reflection_php5.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/reflection_php5.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/reflection_php5.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: reflection_php5.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: reflection_php5.php 1786 2008-04-26 17:32:20Z pp11 $
  */
 
 /**
@@ -294,7 +294,7 @@
         if ($name == '__toString') {
             return "function $name()";
         }
-
+        
         // This wonky try-catch is a work around for a faulty method_exists()
         // in early versions of PHP 5 which would return false for static
         // methods. The Reflection classes work fine, but hasMethod()

Modified: trunk/src/Engine/app/vendors/simpletest/remote.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/remote.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/remote.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: remote.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: remote.php 1786 2008-04-26 17:32:20Z pp11 $
  */
 
 /**#@+
@@ -23,7 +23,7 @@
     private $url;
     private $dry_url;
     private $size;
-
+    
     /**
      *    Sets the location of the remote test.
      *    @param string $url       Test location.
@@ -35,7 +35,7 @@
         $this->dry_url = $dry_url ? $dry_url : $url;
         $this->size = false;
     }
-
+    
     /**
      *    Accessor for the test name for subclasses.
      *    @return string           Name of the test.
@@ -67,7 +67,7 @@
         }
         return true;
     }
-
+    
     /**
      *    Creates a new web browser object for fetching
      *    the XML report.
@@ -77,7 +77,7 @@
     protected function createBrowser() {
         return new SimpleBrowser();
     }
-
+    
     /**
      *    Creates the XML parser.
      *    @param SimpleReporter $reporter    Target of test results.
@@ -87,7 +87,7 @@
     protected function createParser($reporter) {
         return new SimpleTestXmlParser($reporter);
     }
-
+    
     /**
      *    Accessor for the number of subtests.
      *    @return integer           Number of test cases.

Modified: trunk/src/Engine/app/vendors/simpletest/reporter.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/reporter.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/reporter.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,14 +3,14 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: reporter.php 2005 2010-11-02 14:09:34Z lastcraft $
+ *  @version    $Id: reporter.php 1995 2010-04-06 12:57:40Z lastcraft $
  */
 
 /**#@+
  *  include other SimpleTest class files
  */
 require_once(dirname(__FILE__) . '/scorer.php');
-//require_once(dirname(__FILE__) . '/arguments.php');
+require_once(dirname(__FILE__) . '/arguments.php');
 /**#@-*/
 
 /**
@@ -147,7 +147,7 @@
                 ' line ' . $exception->getLine() . ']';
         print " -&gt; <strong>" . $this->htmlEntities($message) . "</strong><br />\n";
     }
-
+    
     /**
      *    Prints the message for skipping tests.
      *    @param string $message    Text of skip condition.
@@ -281,7 +281,7 @@
         print "\tin " . implode("\n\tin ", array_reverse($breadcrumb));
         print "\n";
     }
-
+    
     /**
      *    Prints the message for skipping tests.
      *    @param string $message    Text of skip condition.
@@ -313,7 +313,7 @@
     private $just_this_case = false;
     private $just_this_test = false;
     private $on;
-
+    
     /**
      *    Selects the test case or group to be run,
      *    and optionally a specific test.
@@ -362,7 +362,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Switch on testing for the group or subgroup.
      *    @access private
@@ -370,7 +370,7 @@
     protected function on() {
         $this->on = true;
     }
-
+    
     /**
      *    Switch off testing for the group or subgroup.
      *    @access private
@@ -378,7 +378,7 @@
     protected function off() {
         $this->on = false;
     }
-
+    
     /**
      *    Is this group actually being tested?
      *    @return boolean     True if the current test group is active.
@@ -434,7 +434,7 @@
  *    @subpackage UnitTester
  */
 class NoSkipsReporter extends SimpleReporterDecorator {
-
+    
     /**
      *    Does nothing.
      *    @param string $message    Text of skip condition.

Modified: trunk/src/Engine/app/vendors/simpletest/scorer.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/scorer.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/scorer.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: scorer.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: scorer.php 1982 2010-03-28 11:57:54Z lastcraft $
  */
 
 /**#@+*/
@@ -166,7 +166,7 @@
     function paintException($exception) {
         $this->exceptions++;
     }
-
+    
     /**
      *    Prints the message for skipping tests.
      *    @param string $message    Text of skip condition.
@@ -253,7 +253,7 @@
         $this->size = null;
         $this->progress = 0;
     }
-
+    
     /**
      *    Gets the formatter for small generic data items.
      *    @return SimpleDumper          Formatter.
@@ -481,7 +481,7 @@
     function createInvoker($invoker) {
         return $this->reporter->createInvoker($invoker);
     }
-
+    
     /**
      *    Gets the formatter for privateiables and other small
      *    generic data items.
@@ -583,7 +583,7 @@
     function paintException($exception) {
         $this->reporter->paintException($exception);
     }
-
+    
     /**
      *    Prints the message for skipping tests.
      *    @param string $message    Text of skip condition.
@@ -701,7 +701,7 @@
         }
         return $invoker;
     }
-
+    
     /**
      *    Gets the formatter for privateiables and other small
      *    generic data items.
@@ -812,7 +812,7 @@
             $this->reporters[$i]->paintError($message);
         }
     }
-
+    
     /**
      *    Chains to the wrapped reporter.
      *    @param Exception $exception    Exception to display.

Modified: trunk/src/Engine/app/vendors/simpletest/shell_tester.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/shell_tester.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/shell_tester.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: shell_tester.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: shell_tester.php 1786 2008-04-26 17:32:20Z pp11 $
  */
 
 /**#@+
@@ -154,7 +154,7 @@
     function assertFalse($result, $message = '%s') {
         return $this->assert(new FalseExpectation(), $result, $message);
     }
-
+    
     /**
      *    Will trigger a pass if the two parameters have
      *    the same value only. Otherwise a fail. This
@@ -171,7 +171,7 @@
                 $second,
                 $message);
     }
-
+    
     /**
      *    Will trigger a pass if the two parameters have
      *    a different value. Otherwise a fail. This

Modified: trunk/src/Engine/app/vendors/simpletest/simpletest.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/simpletest.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/simpletest.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Global state for SimpleTest and kicker script in future versions.
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: simpletest.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: simpletest.php 1994 2010-04-03 16:26:26Z lastcraft $
  */
 
 /**#@+
@@ -219,7 +219,7 @@
                 'DefaultProxyPassword' => false,
                 'Preferred' => array(new HtmlReporter(), new TextReporter(), new XmlReporter()));
     }
-
+    
     /**
      *    @deprecated
      */

Modified: trunk/src/Engine/app/vendors/simpletest/tag.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/tag.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/tag.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest.
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: tag.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: tag.php 1929 2009-07-31 13:49:36Z dgheath $
  */
 
 /**#@+
@@ -182,7 +182,7 @@
             $this->addTag($tag);
         }
     }
-
+    
     /**
      *    Accessor for tag name.
      *    @return string       Name of tag.

Modified: trunk/src/Engine/app/vendors/simpletest/test/acceptance_test.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/acceptance_test.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test/acceptance_test.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,5 +1,5 @@
 <?php
-// $Id: acceptance_test.php 2013 2011-04-29 09:29:45Z pp11 $
+// $Id: acceptance_test.php 1972 2009-12-13 21:38:19Z lastcraft $
 require_once(dirname(__FILE__) . '/../autorun.php');
 require_once(dirname(__FILE__) . '/../compatibility.php');
 require_once(dirname(__FILE__) . '/../browser.php');
@@ -780,12 +780,6 @@
         $this->assertText('go=[Go!]');
     }
 
-    function testFormSubmissionWithIdsAndAdditionnalData() {
-        $this->get($this->samples() . 'form.html');
-        $this->assertTrue($this->clickSubmitById(99, array('additionnal' => "data")));
-        $this->assertText('additionnal=[data]');
-    }
-
     function testFormSubmissionWithLabels() {
         $this->get($this->samples() . 'form.html');
         $this->assertField('Text A', '');

Deleted: trunk/src/Engine/app/vendors/simpletest/test/arguments_test.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/arguments_test.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test/arguments_test.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,82 +0,0 @@
-<?php
-// $Id: cookies_test.php 1506 2007-05-07 00:58:03Z lastcraft $
-require_once(dirname(__FILE__) . '/../autorun.php');
-require_once(dirname(__FILE__) . '/../arguments.php');
-
-class TestOfCommandLineArgumentParsing extends UnitTestCase {
-    function testArgumentListWithJustProgramNameGivesFalseToEveryName() {
-        $arguments = new SimpleArguments(array('me'));
-        $this->assertIdentical($arguments->a, false);
-        $this->assertIdentical($arguments->all(), array());
-    }
-    
-    function testSingleArgumentNameRecordedAsTrue() {
-        $arguments = new SimpleArguments(array('me', '-a'));
-        $this->assertIdentical($arguments->a, true);
-    }
-    
-    function testSingleArgumentCanBeGivenAValue() {
-        $arguments = new SimpleArguments(array('me', '-a=AAA'));
-        $this->assertIdentical($arguments->a, 'AAA');
-    }
-    
-    function testSingleArgumentCanBeGivenSpaceSeparatedValue() {
-        $arguments = new SimpleArguments(array('me', '-a', 'AAA'));
-        $this->assertIdentical($arguments->a, 'AAA');
-    }
-    
-    function testWillBuildArrayFromRepeatedValue() {
-        $arguments = new SimpleArguments(array('me', '-a', 'A', '-a', 'AA'));
-        $this->assertIdentical($arguments->a, array('A', 'AA'));
-    }
-    
-    function testWillBuildArrayFromMultiplyRepeatedValues() {
-        $arguments = new SimpleArguments(array('me', '-a', 'A', '-a', 'AA', '-a', 'AAA'));
-        $this->assertIdentical($arguments->a, array('A', 'AA', 'AAA'));
-    }
-    
-    function testCanParseLongFormArguments() {
-        $arguments = new SimpleArguments(array('me', '--aa=AA', '--bb', 'BB'));
-        $this->assertIdentical($arguments->aa, 'AA');
-        $this->assertIdentical($arguments->bb, 'BB');
-    }
-    
-    function testGetsFullSetOfResultsAsHash() {
-        $arguments = new SimpleArguments(array('me', '-a', '-b=1', '-b', '2', '--aa=AA', '--bb', 'BB', '-c'));
-        $this->assertEqual($arguments->all(),
-                           array('a' => true, 'b' => array('1', '2'), 'aa' => 'AA', 'bb' => 'BB', 'c' => true));
-    }
-}
-
-class TestOfHelpOutput extends UnitTestCase {
-    function testDisplaysGeneralHelpBanner() {
-        $help = new SimpleHelp('Cool program');
-        $this->assertEqual($help->render(), "Cool program\n");
-    }
-    
-    function testDisplaysOnlySingleLineEndings() {
-        $help = new SimpleHelp("Cool program\n");
-        $this->assertEqual($help->render(), "Cool program\n");
-    }
-    
-    function testDisplaysHelpOnShortFlag() {
-        $help = new SimpleHelp('Cool program');
-        $help->explainFlag('a', 'Enables A');
-        $this->assertEqual($help->render(), "Cool program\n-a    Enables A\n");
-    }
-    
-    function testHasAtleastFourSpacesAfterLongestFlag() {
-        $help = new SimpleHelp('Cool program');
-        $help->explainFlag('a', 'Enables A');
-        $help->explainFlag('long', 'Enables Long');
-        $this->assertEqual($help->render(),
-                           "Cool program\n-a        Enables A\n--long    Enables Long\n");
-    }
-    
-    function testCanDisplaysMultipleFlagsForEachOption() {
-        $help = new SimpleHelp('Cool program');
-        $help->explainFlag(array('a', 'aa'), 'Enables A');
-        $this->assertEqual($help->render(), "Cool program\n-a      Enables A\n  --aa\n");
-    }
-}
-?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/test/expectation_test.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/expectation_test.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test/expectation_test.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,5 +1,5 @@
 <?php
-// $Id: expectation_test.php 2009 2011-04-28 08:57:25Z pp11 $
+// $Id: expectation_test.php 1905 2009-07-29 13:54:00Z dgheath $
 require_once(dirname(__FILE__) . '/../autorun.php');
 require_once(dirname(__FILE__) . '/../expectation.php');
 
@@ -286,24 +286,6 @@
         $this->assertTrue($expectation->test(5));
         $this->assertFalse($expectation->test(5.0));
     }
-
-    function testScalar() {
-        $expectation = new IsAExpectation('scalar');
-        $this->assertTrue($expectation->test(5));
-        $this->assertFalse($expectation->test(array(5)));
-    }
-
-    function testNumeric() {
-        $expectation = new IsAExpectation('numeric');
-        $this->assertTrue($expectation->test(5));
-        $this->assertFalse($expectation->test('string'));
-    }
-
-    function testNull() {
-        $expectation = new IsAExpectation('null');
-        $this->assertTrue($expectation->test(null));
-        $this->assertFalse($expectation->test('string'));
-    }
 }
 
 class TestOfNotA extends UnitTestCase {

Deleted: trunk/src/Engine/app/vendors/simpletest/test/recorder_test.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/recorder_test.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test/recorder_test.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,23 +0,0 @@
-<?php
-// $Id: test.php 1500 2007-04-29 14:33:31Z pp11 $
-require_once(dirname(__FILE__) . '/../autorun.php');
-require_once(dirname(__FILE__) . '/../recorder.php');
-
-class TestOfRecorder extends UnitTestCase {
-    
-    function testContentOfRecorderWithOnePassAndOneFailure() {
-        $test = new TestSuite();
-        $test->addFile(dirname(__FILE__) . '/support/recorder_sample.php');
-        $recorder = new Recorder(new SimpleReporter());
-        $test->run($recorder);
-        $this->assertEqual(count($recorder->results), 2);
-        $this->assertIsA($recorder->results[0], 'SimpleResultOfPass');
-        $this->assertEqual('testTrueIsTrue', array_pop($recorder->results[0]->breadcrumb));
-        $this->assertPattern('/ at \[.*\Wrecorder_sample\.php line 7\]/', $recorder->results[0]->message);
-        $this->assertIsA($recorder->results[1], 'SimpleResultOfFail');
-        $this->assertEqual('testFalseIsTrue', array_pop($recorder->results[1]->breadcrumb));
-        $this->assertPattern("/Expected false, got \[Boolean: true\] at \[.*\Wrecorder_sample\.php line 11\]/",
-                             $recorder->results[1]->message);
-    }
-}
-?>
\ No newline at end of file

Added: trunk/src/Engine/app/vendors/simpletest/test/reflection_php4_test.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/reflection_php4_test.php	                        (rev 0)
+++ trunk/src/Engine/app/vendors/simpletest/test/reflection_php4_test.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -0,0 +1,61 @@
+<?php
+// $Id: reflection_php4_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class AnyOldThing {
+    function aMethod() {
+    }
+}
+
+class AnyOldChildThing extends AnyOldThing { }
+
+class TestOfReflection extends UnitTestCase {
+
+    function testClassExistence() {
+        $reflection = new SimpleReflection('AnyOldThing');
+        $this->assertTrue($reflection->classOrInterfaceExists());
+        $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload());
+    }
+
+    function testClassNonExistence() {
+        $reflection = new SimpleReflection('UnknownThing');
+        $this->assertFalse($reflection->classOrInterfaceExists());
+        $this->assertFalse($reflection->classOrInterfaceExistsSansAutoload());
+    }
+
+    function testDetectionOfInterfacesAlwaysFalse() {
+        $reflection = new SimpleReflection('AnyOldThing');
+        $this->assertFalse($reflection->isAbstract());
+        $this->assertFalse($reflection->isInterface());
+    }
+
+    function testFindingParentClass() {
+        $reflection = new SimpleReflection('AnyOldChildThing');
+        $this->assertEqual(strtolower($reflection->getParent()), 'anyoldthing');
+    }
+
+    function testMethodsListFromClass() {
+        $reflection = new SimpleReflection('AnyOldThing');
+        $methods = $reflection->getMethods();
+        $this->assertEqualIgnoringCase($methods[0], 'aMethod');
+    }
+
+    function testNoInterfacesForPHP4() {
+        $reflection = new SimpleReflection('AnyOldThing');
+        $this->assertEqual(
+                $reflection->getInterfaces(),
+                array());
+    }
+
+    function testMostGeneralPossibleSignature() {
+        $reflection = new SimpleReflection('AnyOldThing');
+        $this->assertEqualIgnoringCase(
+                $reflection->getSignature('aMethod'),
+                'function &aMethod()');
+    }
+
+    function assertEqualIgnoringCase($a, $b) {
+        return $this->assertEqual(strtolower($a), strtolower($b));
+    }
+}
+?>
\ No newline at end of file

Deleted: trunk/src/Engine/app/vendors/simpletest/test/support/recorder_sample.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test/support/recorder_sample.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test/support/recorder_sample.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -1,14 +0,0 @@
-<?php
-// $Id: sample_test.php 1500 2007-04-29 14:33:31Z pp11 $
-require_once dirname(__FILE__) . '/../../autorun.php';
-
-class SampleTestForRecorder extends UnitTestCase {
-    function testTrueIsTrue() {
-        $this->assertTrue(true);
-    }
-
-    function testFalseIsTrue() {
-        $this->assertFalse(true);
-    }
-}
-?>
\ No newline at end of file

Modified: trunk/src/Engine/app/vendors/simpletest/test_case.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/test_case.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/test_case.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage UnitTester
- *  @version    $Id: test_case.php 2012 2011-04-29 08:57:00Z pp11 $
+ *  @version    $Id: test_case.php 1968 2009-10-19 18:24:23Z maetl_ $
  */
 
 /**#@+
@@ -149,7 +149,6 @@
             $reporter->paintCaseEnd($this->getLabel());
         }
         unset($this->reporter);
-        $context->setTest(null);
         return $reporter->getStatus();
     }
 

Modified: trunk/src/Engine/app/vendors/simpletest/url.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/url.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/url.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: url.php 2011 2011-04-29 08:22:48Z pp11 $
+ *  @version    $Id: url.php 1997 2010-07-27 09:53:01Z pp11 $
  */
 
 /**#@+
@@ -35,7 +35,7 @@
     private $y;
     private $target;
     private $raw = false;
-
+    
     /**
      *    Constructor. Parses URL into sections.
      *    @param string $url        Incoming URL.
@@ -71,7 +71,7 @@
         $this->fragment = (strncmp($url, "#", 1) == 0 ? substr($url, 1) : false);
         $this->target = false;
     }
-
+    
     /**
      *    Extracts the X, Y coordinate pair from an image map.
      *    @param string $url   URL so far. The coordinates will be
@@ -86,7 +86,7 @@
         }
         return array(false, false);
     }
-
+    
     /**
      *    Extracts the scheme part of an incoming URL.
      *    @param string $url   URL so far. The scheme will be
@@ -101,7 +101,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Extracts the username and password from the
      *    incoming URL. The // prefix will be reattached
@@ -128,7 +128,7 @@
         $url = $prefix . $url;
         return array(false, false);
     }
-
+    
     /**
      *    Extracts the host part of an incoming URL.
      *    Includes the port number part. Will extract
@@ -157,7 +157,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Extracts the path information from the incoming
      *    URL. Strips this path from the URL.
@@ -173,7 +173,7 @@
         }
         return '';
     }
-
+    
     /**
      *    Strips off the request data.
      *    @param string $url  URL so far. The request will be
@@ -188,7 +188,7 @@
         }
         return '';
     }
-
+        
     /**
      *    Breaks the request down into an object.
      *    @param string $raw           Raw request.
@@ -207,7 +207,7 @@
         }
         return $request;
     }
-
+    
     /**
      *    Accessor for protocol part.
      *    @param string $default    Value to use if not present.
@@ -217,7 +217,7 @@
     function getScheme($default = false) {
         return $this->scheme ? $this->scheme : $default;
     }
-
+    
     /**
      *    Accessor for user name.
      *    @return string    Username preceding host.
@@ -226,7 +226,7 @@
     function getUsername() {
         return $this->username;
     }
-
+    
     /**
      *    Accessor for password.
      *    @return string    Password preceding host.
@@ -235,7 +235,7 @@
     function getPassword() {
         return $this->password;
     }
-
+    
     /**
      *    Accessor for hostname and port.
      *    @param string $default    Value to use if not present.
@@ -245,7 +245,7 @@
     function getHost($default = false) {
         return $this->host ? $this->host : $default;
     }
-
+    
     /**
      *    Accessor for top level domain.
      *    @return string       Last part of host.
@@ -255,7 +255,7 @@
         $path_parts = pathinfo($this->getHost());
         return (isset($path_parts['extension']) ? $path_parts['extension'] : false);
     }
-
+    
     /**
      *    Accessor for port number.
      *    @return integer    TCP/IP port number.
@@ -263,8 +263,8 @@
      */
     function getPort() {
         return $this->port;
-    }
-
+    }        
+            
     /**
      *    Accessor for path.
      *    @return string    Full path including leading slash if implied.
@@ -276,7 +276,7 @@
         }
         return $this->path;
     }
-
+    
     /**
      *    Accessor for page if any. This may be a
      *    directory name if ambiguious.
@@ -289,7 +289,7 @@
         }
         return $matches[1];
     }
-
+    
     /**
      *    Gets the path to the page.
      *    @return string       Path less the page.
@@ -301,7 +301,7 @@
         }
         return $matches[1];
     }
-
+    
     /**
      *    Accessor for fragment at end of URL after the "#".
      *    @return string    Part after "#".
@@ -310,7 +310,7 @@
     function getFragment() {
         return $this->fragment;
     }
-
+    
     /**
      *    Sets image coordinates. Set to false to clear
      *    them.
@@ -326,7 +326,7 @@
         $this->x = (integer)$x;
         $this->y = (integer)$y;
     }
-
+    
     /**
      *    Accessor for horizontal image coordinate.
      *    @return integer        X value.
@@ -335,7 +335,7 @@
     function getX() {
         return $this->x;
     }
-
+        
     /**
      *    Accessor for vertical image coordinate.
      *    @return integer        Y value.
@@ -344,7 +344,7 @@
     function getY() {
         return $this->y;
     }
-
+    
     /**
      *    Accessor for current request parameters
      *    in URL string form. Will return teh original request
@@ -364,7 +364,7 @@
         }
         return '';
     }
-
+    
     /**
      *    Adds an additional parameter to the request.
      *    @param string $key            Name of parameter.
@@ -375,7 +375,7 @@
         $this->raw = false;
         $this->request->add($key, $value);
     }
-
+    
     /**
      *    Adds additional parameters to the request.
      *    @param hash/SimpleFormEncoding $parameters   Additional
@@ -386,7 +386,7 @@
         $this->raw = false;
         $this->request->merge($parameters);
     }
-
+    
     /**
      *    Clears down all parameters.
      *    @access public
@@ -395,7 +395,7 @@
         $this->raw = false;
         $this->request = new SimpleGetEncoding();
     }
-
+    
     /**
      *    Gets the frame target if present. Although
      *    not strictly part of the URL specification it
@@ -406,7 +406,7 @@
     function getTarget() {
         return $this->target;
     }
-
+    
     /**
      *    Attaches a frame target.
      *    @param string $frame        Name of frame.
@@ -416,7 +416,7 @@
         $this->raw = false;
         $this->target = $frame;
     }
-
+    
     /**
      *    Renders the URL back into a string.
      *    @return string        URL in canonical form.
@@ -450,7 +450,7 @@
         $coords = $this->getX() === false ? '' : '?' . $this->getX() . ',' . $this->getY();
         return "$scheme$identity$host$port$path$encoded$fragment$coords";
     }
-
+    
     /**
      *    Replaces unknown sections to turn a relative
      *    URL into an absolute one. The base URL can
@@ -482,7 +482,7 @@
         $coords = $this->getX() === false ? '' : '?' . $this->getX() . ',' . $this->getY();
         return new SimpleUrl("$scheme://$identity$host$port$path$encoded$fragment$coords");
     }
-
+    
     /**
      *    Replaces unknown sections of the path with base parts
      *    to return a complete absolute one.
@@ -502,7 +502,7 @@
         }
         return $base->getPath();
     }
-
+    
     /**
      *    Simple test to see if a path part is relative.
      *    @param string $path        Path to test.
@@ -512,7 +512,7 @@
     protected function isRelativePath($path) {
         return (substr($path, 0, 1) != '/');
     }
-
+    
     /**
      *    Extracts the username and password for use in rendering
      *    a URL.
@@ -525,7 +525,7 @@
         }
         return false;
     }
-
+    
     /**
      *    Replaces . and .. sections of the path.
      *    @param string $path    Unoptimised path.
@@ -536,7 +536,7 @@
         $path = preg_replace('|/\./|', '/', $path);
         return preg_replace('|/[^/]+/\.\./|', '/', $path);
     }
-
+    
     /**
      *    A pipe seperated list of all TLDs that result in two part
      *    domain names.
@@ -547,4 +547,4 @@
         return 'com|edu|net|org|gov|mil|int|biz|info|name|pro|aero|coop|museum';
     }
 }
-?>
\ No newline at end of file
+?>

Modified: trunk/src/Engine/app/vendors/simpletest/user_agent.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/user_agent.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/user_agent.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: user_agent.php 2039 2011-11-30 18:16:15Z pp11 $
+ *  @version    $Id: user_agent.php 1787 2008-04-26 20:35:39Z pp11 $
  */
 
 /**#@+
@@ -38,7 +38,7 @@
     private $proxy_password = false;
     private $connection_timeout = DEFAULT_CONNECTION_TIMEOUT;
     private $additional_headers = array();
-
+    
     /**
      *    Starts with no cookies, realms or proxies.
      *    @access public
@@ -47,7 +47,7 @@
         $this->cookie_jar = new SimpleCookieJar();
         $this->authenticator = new SimpleAuthenticator();
     }
-
+    
     /**
      *    Removes expired and temporary cookies as if
      *    the browser was closed and re-opened. Authorisation
@@ -61,7 +61,7 @@
         $this->cookie_jar->restartSession($date);
         $this->authenticator->restartSession();
     }
-
+    
     /**
      *    Adds a header to every fetch.
      *    @param string $header       Header line to add to every
@@ -71,7 +71,7 @@
     function addHeader($header) {
         $this->additional_headers[] = $header;
     }
-
+    
     /**
      *    Ages the cookies by the specified time.
      *    @param integer $interval    Amount in seconds.
@@ -80,7 +80,7 @@
     function ageCookies($interval) {
         $this->cookie_jar->agePrematurely($interval);
     }
-
+    
     /**
      *    Sets an additional cookie. If a cookie has
      *    the same name and path it is replaced.
@@ -94,7 +94,7 @@
     function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
         $this->cookie_jar->setCookie($name, $value, $host, $path, $expiry);
     }
-
+    
     /**
      *    Reads the most specific cookie value from the
      *    browser cookies.
@@ -108,7 +108,7 @@
     function getCookieValue($host, $path, $name) {
         return $this->cookie_jar->getCookieValue($host, $path, $name);
     }
-
+    
     /**
      *    Reads the current cookies within the base URL.
      *    @param string $name     Key of cookie to find.
@@ -123,7 +123,7 @@
         }
         return $this->getCookieValue($base->getHost(), $base->getPath(), $name);
     }
-
+    
     /**
      *    Switches off cookie sending and recieving.
      *    @access public
@@ -131,7 +131,7 @@
     function ignoreCookies() {
         $this->cookies_enabled = false;
     }
-
+    
     /**
      *    Switches back on the cookie sending and recieving.
      *    @access public
@@ -139,7 +139,7 @@
     function useCookies() {
         $this->cookies_enabled = true;
     }
-
+    
     /**
      *    Sets the socket timeout for opening a connection.
      *    @param integer $timeout      Maximum time in seconds.
@@ -148,7 +148,7 @@
     function setConnectionTimeout($timeout) {
         $this->connection_timeout = $timeout;
     }
-
+    
     /**
      *    Sets the maximum number of redirects before
      *    a page will be loaded anyway.
@@ -158,7 +158,7 @@
     function setMaximumRedirects($max) {
         $this->max_redirects = $max;
     }
-
+    
     /**
      *    Sets proxy to use on all requests for when
      *    testing from behind a firewall. Set URL
@@ -180,7 +180,7 @@
         $this->proxy_username = $username;
         $this->proxy_password = $password;
     }
-
+    
     /**
      *    Test to see if the redirect limit is passed.
      *    @param integer $redirects        Count so far.
@@ -190,7 +190,7 @@
     protected function isTooManyRedirects($redirects) {
         return ($redirects > $this->max_redirects);
     }
-
+    
     /**
      *    Sets the identity for the current realm.
      *    @param string $host        Host to which realm applies.
@@ -202,7 +202,7 @@
     function setIdentity($host, $realm, $username, $password) {
         $this->authenticator->setIdentityForRealm($host, $realm, $username, $password);
     }
-
+    
     /**
      *    Fetches a URL as a response object. Will keep trying if redirected.
      *    It will also collect authentication realm information.
@@ -227,7 +227,7 @@
         }
         return $response;
     }
-
+    
     /**
      *    Fetches the page until no longer redirected or
      *    until the redirect limit runs out.
@@ -244,19 +244,19 @@
                 return $response;
             }
             $headers = $response->getHeaders();
+            $location = new SimpleUrl($headers->getLocation());
+            $url = $location->makeAbsolute($url);
             if ($this->cookies_enabled) {
                 $headers->writeCookiesToJar($this->cookie_jar, $url);
             }
             if (! $headers->isRedirect()) {
                 break;
             }
-            $location = new SimpleUrl($headers->getLocation());
-            $url = $location->makeAbsolute($url);
             $encoding = new SimpleGetEncoding();
         } while (! $this->isTooManyRedirects(++$redirects));
         return $response;
     }
-
+    
     /**
      *    Actually make the web request.
      *    @param SimpleUrl $url                   Target to fetch.
@@ -268,7 +268,7 @@
         $request = $this->createRequest($url, $encoding);
         return $request->fetch($this->connection_timeout);
     }
-
+    
     /**
      *    Creates a full page request.
      *    @param SimpleUrl $url                 Target to fetch as url object.
@@ -285,7 +285,7 @@
         $this->authenticator->addHeaders($request, $url);
         return $request;
     }
-
+    
     /**
      *    Builds the appropriate HTTP request object.
      *    @param SimpleUrl $url                  Target to fetch as url object.
@@ -296,7 +296,7 @@
     protected function createHttpRequest($url, $encoding) {
         return new SimpleHttpRequest($this->createRoute($url), $encoding);
     }
-
+    
     /**
      *    Sets up either a direct route or via a proxy.
      *    @param SimpleUrl $url   Target to fetch as url object.
@@ -313,7 +313,7 @@
         }
         return new SimpleRoute($url);
     }
-
+    
     /**
      *    Adds additional manual headers.
      *    @param SimpleHttpRequest $request    Outgoing request.

Modified: trunk/src/Engine/app/vendors/simpletest/web_tester.php
===================================================================
--- trunk/src/Engine/app/vendors/simpletest/web_tester.php	2012-06-03 14:28:52 UTC (rev 115)
+++ trunk/src/Engine/app/vendors/simpletest/web_tester.php	2012-06-03 14:35:58 UTC (rev 116)
@@ -3,7 +3,7 @@
  *  Base include file for SimpleTest.
  *  @package    SimpleTest
  *  @subpackage WebTester
- *  @version    $Id: web_tester.php 2013 2011-04-29 09:29:45Z pp11 $
+ *  @version    $Id: web_tester.php 1967 2009-10-14 13:09:41Z maetl_ $
  */
 
 /**#@+
@@ -729,7 +729,7 @@
     function put($url, $body = false, $content_type = false) {
         return $this->failOnError($this->browser->put($url, $body, $content_type));
     }
-
+    
     /**
      *    Fetches a page by a DELETE request
      *    @param string $url          URL to fetch.
@@ -740,8 +740,8 @@
     function delete($url, $parameters = false) {
         return $this->failOnError($this->browser->delete($url, $parameters));
     }
-
-
+    
+    
     /**
      *    Does a HTTP HEAD fetch, fetching only the page
      *    headers. The current base URL is unchanged by this.
@@ -1012,8 +1012,8 @@
      *    @return boolean/string  Page on success.
      *    @access public
      */
-    function submitFormById($id, $additional = false) {
-        return $this->failOnError($this->browser->submitFormById($id, $additional));
+    function submitFormById($id) {
+        return $this->failOnError($this->browser->submitFormById($id));
     }
 
     /**
@@ -1466,7 +1466,7 @@
      *    @return boolean           True on pass
      *    @access public
      */
-    function assertTrue($result, $message = '%s') {
+    function assertTrue($result, $message = false) {
         return $this->assert(new TrueExpectation(), $result, $message);
     }
 
@@ -1529,4 +1529,4 @@
         return $trace->traceMethod();
     }
 }
-?>
\ No newline at end of file
+?>



Smartupload-svn メーリングリストの案内
Back to archive index