[pLog-svn] r3732 - in plog/trunk: . class/test class/test/helpers class/test/tests/mail/phpmailer

oscar at devel.lifetype.net oscar at devel.lifetype.net
Mon Jul 17 20:22:07 GMT 2006


Author: oscar
Date: 2006-07-17 20:22:06 +0000 (Mon, 17 Jul 2006)
New Revision: 3732

Removed:
   plog/trunk/class/test/tests/mail/phpmailer/message.txt
Modified:
   plog/trunk/class/test/helpers/htmlreporter.class.php
   plog/trunk/class/test/helpers/lifetypetestcase.class.php
   plog/trunk/class/test/testrunner.class.php
   plog/trunk/runtests.php
Log:
now it's possible to select which test suite to run, instead of running all of them by default. It was already taking too long so no need to run all suites just to wait for the results of one method


Modified: plog/trunk/class/test/helpers/htmlreporter.class.php
===================================================================
--- plog/trunk/class/test/helpers/htmlreporter.class.php	2006-07-17 04:51:06 UTC (rev 3731)
+++ plog/trunk/class/test/helpers/htmlreporter.class.php	2006-07-17 20:22:06 UTC (rev 3732)
@@ -18,9 +18,7 @@
 		
 		function _getHeader()
 		{
-			return('<html>
-			        <head><title>LifeType Test Suite</title></head>
-			        <body>
+			return('
 			        <h1>Test Report</h1>
 			        <table cols="4" border="1" width="100%">
 			        <thead style="text-align:left">
@@ -37,9 +35,9 @@
 		{
 			return( '</tbody>
 			         </table>
+					<a href="javascript:history.go(0)">Run Again</a>&nbsp;
+					<a href="?suite=">Back to List</a>
 			        '.$this->_getStats().'
-			         </body>
-			         </html>
 			      ');
 		}
 		

Modified: plog/trunk/class/test/helpers/lifetypetestcase.class.php
===================================================================
--- plog/trunk/class/test/helpers/lifetypetestcase.class.php	2006-07-17 04:51:06 UTC (rev 3731)
+++ plog/trunk/class/test/helpers/lifetypetestcase.class.php	2006-07-17 20:22:06 UTC (rev 3732)
@@ -10,7 +10,7 @@
 	 * with HTTP requests.
 	 */
 	class LifeTypeTestCase extends PHPUnit_TestCase
-	{
+	{		
 		/**
 		 * makes the given HTTP request and checks that the HTTP response code
 		 * matches with the expected once
@@ -56,6 +56,35 @@
 				$message = $message." expecting '$expected'";
 				return( $this->fail( $message ));
 			}
-		}		
+		}
+		
+		/**
+		 * Returns a list with all the available test methods in the class (a test method is 
+		 * a method whose name starst with "test")
+		 *
+		 * @return An array with all the test methods available
+		 */
+		function getTestMethods()
+		{
+			$testMethods = Array();
+			
+			foreach( get_class_methods( $this ) as $method ) {
+				if( substr( $method, 0, strlen( "test" )) == "test" ) {
+					$testMethods[] = $method;
+				}
+			}
+			
+			return( $testMethods );
+		}
+		
+		/**
+		 * Returns a string identifying the suite
+		 *
+		 * @return A string
+		 */
+		function getSuiteName()
+		{
+			return( str_replace( "_test", "", get_class( $this )));
+		}
 	}
 ?>
\ No newline at end of file

Modified: plog/trunk/class/test/testrunner.class.php
===================================================================
--- plog/trunk/class/test/testrunner.class.php	2006-07-17 04:51:06 UTC (rev 3731)
+++ plog/trunk/class/test/testrunner.class.php	2006-07-17 20:22:06 UTC (rev 3732)
@@ -51,16 +51,26 @@
 			$this->files = $this->_findClasses( $this->folder, $this->pattern );
 		}
 		
-		function run()
+		/**
+		 * Runs a test suite, or all of them if no test suite name is given
+		 *
+		 * @param suite The suite name, "all" or empty to run all suites
+		 */
+		function run( $suite = "all" )
 		{
 			// process all the classes and add them to the test suite
-			$this->suite = new PHPUnit_TestSuite();
+			$this->suite = new PHPUnit_TestSuite();			
 			foreach( $this->files as $file ) {
+				// build the class name
+				$className = str_replace( ".class.php", "", basename( $file ));				
 				// load the class file
-				include_once( $file );
-				// and create an instance of it
-				$className = str_replace( ".class.php", "", basename( $file ));
-				$this->suite->addTestSuite( $className );
+				if( $suite == "all" || $suite == $className || $suite == str_replace( "_test", "", $className )) {
+					// add the current suite only if we're either loading them all or if
+					// the current one is the one we want to load
+					include_once( $file );
+					// and create an instance of it
+					$this->suite->addTestSuite( $className );
+				}
 			}			
 			
 			// after adding all the tests, run the suite and return the result
@@ -70,6 +80,30 @@
 		}
 		
 		/**
+		 * Returns an associative array with the names of all test suites available. The
+		 * name of a test suite consists of its class name minus the "_test" suffix, although
+		 * The TestRunner::run() method can take both naming schemes (with and without suffix)
+		 *
+		 * @return An associative array with the name of all suites
+		 */
+		function getTestSuites()
+		{
+			$suites = Array();
+			foreach( $this->files as $file ) {
+				//$suites[] = str_replace( "_test.class.php", "", basename( $file ));
+				
+				// load the class file and create a new instance
+				include_once( $file );
+				$className = str_replace( ".class.php", "", basename( $file ));
+				$instance = new $className();
+				
+				$suites[] = $instance;				
+			}
+			
+			return( $suites );
+		}
+		
+		/**
 		 * @private
 		 *
 		 * Returns a list of all the files in the given folder that match the given pattern. In this case

Deleted: plog/trunk/class/test/tests/mail/phpmailer/message.txt
===================================================================
--- plog/trunk/class/test/tests/mail/phpmailer/message.txt	2006-07-17 04:51:06 UTC (rev 3731)
+++ plog/trunk/class/test/tests/mail/phpmailer/message.txt	2006-07-17 20:22:06 UTC (rev 3732)
@@ -1,359 +0,0 @@
-Date: Thu, 6 Jul 2006 17:04:35 +0200
-Return-Path: unit_test at phpmailer.sf.net
-To: Test User <please_set at please.set>
-From: Unit Tester <unit_test at phpmailer.sf.net>
-Reply-to: Reply Guy <no_reply at phpmailer.sf.net>
-Subject: Unit Test: AltBody + Attachment
-Message-ID: <da558b7b2173e5637e74b4d5c56e9652 at caladan.local>
-X-Priority: 3
-X-Mailer: PHPMailer [version 1.73]
-MIME-Version: 1.0
-Content-Type: multipart/mixed;
-	boundary="b1_da558b7b2173e5637e74b4d5c56e9652"
-
-
---b1_da558b7b2173e5637e74b4d5c56e9652
-Content-Type: multipart/alternative;
-	boundary="b2_da558b7b2173e5637e74b4d5c56e9652"
-
---b2_da558b7b2173e5637e74b4d5c56e9652
-Content-Type: text/plain; charset = "iso-8859-1"
-Content-Transfer-Encoding: 8bit
-
-
-This is the text part of the email.
-
-
---b2_da558b7b2173e5637e74b4d5c56e9652
-Content-Type: text/html; charset = "iso-8859-1"
-Content-Transfer-Encoding: 8bit
-
-
-This is the <b>HTML</b> part of the email.<br/><br/>---------------------<br/>Unit Test Information<br/>---------------------<br/>phpmailer version: 1.73<br/>Content Type: text/html<br/>Host: localhost<br/>Attachments:<br/><ul><li>Name: phpmailer_test.class.php, Encoding: base64, Type: application/octet-stream<br/></ul><br/>Changes<br/>-------<br/><ul><li>Sender was changed to [unit_test at phpmailer.sf.net]<br/><li>Mailer was changed to [smtp]<br/></ul><br/><br/>
-
-
-
---b2_da558b7b2173e5637e74b4d5c56e9652--
---b1_da558b7b2173e5637e74b4d5c56e9652
-Content-Type: application/octet-stream; name="test_attach.txt"
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment; filename="test_attach.txt"
-
-PD9waHANCi8qKioqKioqKioqKioqKioqKioqDQogIFVuaXQgVGVzdA0KICBUeXBlOiBwaHBtYWls
-ZXIgY2xhc3MNCioqKioqKioqKioqKioqKioqKioqLw0KDQppbmNsdWRlX29uY2UoIFBMT0dfQ0xB
-U1NfUEFUSC4iY2xhc3MvdGVzdC9oZWxwZXJzL2xpZmV0eXBldGVzdGNhc2UuY2xhc3MucGhwIiAp
-Ow0KaW5jbHVkZV9vbmNlKCBQTE9HX0NMQVNTX1BBVEguImNsYXNzL21haWwvcGhwbWFpbGVyL2Ns
-YXNzLnBocG1haWxlci5waHAiICk7DQoNCi8qKg0KICogdGhlc2Ugd2VyZSBub3QgcGFydCBvZiB0
-aGUgb3JpZ2luYWwgdGVzdCBzdWl0ZSBidXQgaGFkIHRvIGJlIGFkZGVkIHRvIGF2b2lkIHBsZW50
-eSBvZiBpc3N1ZXMgd2l0aCBmaWxlcywNCiAqIGZvbGRlcnMsIHBhdGhzIGFuZCBtYWlsIHNlcnZl
-cnMuIFBsZWFzZSBtb2RpZnkgdGhlbSB0byBzdWl0IHlvdXIgbmVlZHMNCiAqLw0KZGVmaW5lKCAi
-VEVTVF9NQUlMX0hPU1QiLCAibG9jYWxob3N0IiApOw0KZGVmaW5lKCAiVEVTVF9NQUlMX1VTRVIi
-LCAicGxlYXNlX3NldEBwbGVhc2Uuc2V0IiApOw0KZGVmaW5lKCAiUEhQTUFJTEVSX1RFU1RfQkFT
-RV9GT0xERVIiLCBQTE9HX0NMQVNTX1BBVEguImNsYXNzL3Rlc3QvdGVzdHMvbWFpbC9waHBtYWls
-ZXIvIiApOw0KDQovKioNCiAqIFBlcmZvcm1zIGF1dGhlbnRpY2F0aW9uIHRlc3RzDQogKi8NCmNs
-YXNzIHBocG1haWxlcl9UZXN0IGV4dGVuZHMgTGlmZVR5cGVUZXN0Q2FzZQ0Kew0KICAgIC8qKg0K
-ICAgICAqIEhvbGRzIHRoZSBkZWZhdWx0IHBocG1haWxlciBpbnN0YW5jZS4NCiAgICAgKiBAcHJp
-dmF0ZQ0KICAgICAqIEB0eXBlIG9iamVjdA0KICAgICAqLw0KICAgIHZhciAkTWFpbCA9IGZhbHNl
-Ow0KDQogICAgLyoqDQogICAgICogSG9sZHMgdGhlIFNNVFAgbWFpbCBob3N0Lg0KICAgICAqIEBw
-dWJsaWMNCiAgICAgKiBAdHlwZSBzdHJpbmcNCiAgICAgKi8NCiAgICB2YXIgJEhvc3QgPSAiIjsN
-CiAgICANCiAgICAvKioNCiAgICAgKiBIb2xkcyB0aGUgY2hhbmdlIGxvZy4NCiAgICAgKiBAcHJp
-dmF0ZQ0KICAgICAqIEB0eXBlIHN0cmluZyBhcnJheQ0KICAgICAqLw0KICAgIHZhciAkQ2hhbmdl
-TG9nID0gYXJyYXkoKTsNCiAgICANCiAgICAgLyoqDQogICAgICogSG9sZHMgdGhlIG5vdGUgbG9n
-Lg0KICAgICAqIEBwcml2YXRlDQogICAgICogQHR5cGUgc3RyaW5nIGFycmF5DQogICAgICovDQog
-ICAgdmFyICROb3RlTG9nID0gYXJyYXkoKTsgICANCg0KICAgIC8qKg0KICAgICAqIENsYXNzIGNv
-bnN0dWN0b3IuDQogICAgICovDQogICAgZnVuY3Rpb24gcGhwbWFpbGVyVGVzdCgkbmFtZSkgew0K
-ICAgICAgICAvKiBtdXN0IGRlZmluZSB0aGlzIGNvbnN0cnVjdG9yICovDQogICAgICAgICR0aGlz
-LT5UZXN0Q2FzZSggJG5hbWUgKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogUnVuIGJl
-Zm9yZSBlYWNoIHRlc3QgaXMgc3RhcnRlZC4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzZXRVcCgp
-IHsNCiAgICAgICAgZ2xvYmFsICRnbG9iYWxfdmFyczsNCiAgICAgICAgZ2xvYmFsICRJTkNMVURF
-X0RJUjsNCg0KICAgICAgICAkdGhpcy0+TWFpbCA9IG5ldyBQSFBNYWlsZXIoKTsNCg0KICAgICAg
-ICAkdGhpcy0+TWFpbC0+UHJpb3JpdHkgPSAzOw0KICAgICAgICAkdGhpcy0+TWFpbC0+RW5jb2Rp
-bmcgPSAiOGJpdCI7DQogICAgICAgICR0aGlzLT5NYWlsLT5DaGFyU2V0ID0gImlzby04ODU5LTEi
-Ow0KICAgICAgICAkdGhpcy0+TWFpbC0+RnJvbSA9ICJ1bml0X3Rlc3RAcGhwbWFpbGVyLnNmLm5l
-dCI7DQogICAgICAgICR0aGlzLT5NYWlsLT5Gcm9tTmFtZSA9ICJVbml0IFRlc3RlciI7DQogICAg
-ICAgICR0aGlzLT5NYWlsLT5TZW5kZXIgPSAiIjsNCiAgICAgICAgJHRoaXMtPk1haWwtPlN1Ympl
-Y3QgPSAiVW5pdCBUZXN0IjsNCiAgICAgICAgJHRoaXMtPk1haWwtPkJvZHkgPSAiIjsNCiAgICAg
-ICAgJHRoaXMtPk1haWwtPkFsdEJvZHkgPSAiIjsNCiAgICAgICAgJHRoaXMtPk1haWwtPldvcmRX
-cmFwID0gMDsNCiAgICAgICAgJHRoaXMtPk1haWwtPkhvc3QgPSBURVNUX01BSUxfSE9TVDsNCiAg
-ICAgICAgJHRoaXMtPk1haWwtPlBvcnQgPSAyNTsNCiAgICAgICAgJHRoaXMtPk1haWwtPkhlbG8g
-PSAibG9jYWxob3N0LmxvY2FsZG9tYWluIjsNCiAgICAgICAgJHRoaXMtPk1haWwtPlNNVFBBdXRo
-ID0gZmFsc2U7DQogICAgICAgICR0aGlzLT5NYWlsLT5Vc2VybmFtZSA9ICIiOw0KICAgICAgICAk
-dGhpcy0+TWFpbC0+UGFzc3dvcmQgPSAiIjsNCiAgICAgICAgJHRoaXMtPk1haWwtPlBsdWdpbkRp
-ciA9ICRJTkNMVURFX0RJUjsNCgkJJHRoaXMtPk1haWwtPkFkZFJlcGx5VG8oIm5vX3JlcGx5QHBo
-cG1haWxlci5zZi5uZXQiLCAiUmVwbHkgR3V5Iik7DQogICAgICAgICR0aGlzLT5NYWlsLT5TZW5k
-ZXIgPSAidW5pdF90ZXN0QHBocG1haWxlci5zZi5uZXQiOw0KCQkvLyBzZXQgdGhlIGxhbmd1YWdl
-IG9yIGVsc2Ugd2UnbGwgZ2V0IHNpbGx5IGVycm9ycw0KCQkkdGhpcy0+TWFpbC0+U2V0TGFuZ3Vh
-Z2UoICdlbicsIFBMT0dfQ0xBU1NfUEFUSC4iY2xhc3MvbWFpbC9waHBtYWlsZXIvbGFuZ3VhZ2Uv
-IiApOw0KDQogICAgICAgIGlmKHN0cmxlbigkdGhpcy0+TWFpbC0+SG9zdCkgPiAwKQ0KICAgICAg
-ICAgICAgJHRoaXMtPk1haWwtPk1haWxlciA9ICJzbXRwIjsNCiAgICAgICAgZWxzZQ0KICAgICAg
-ICB7DQogICAgICAgICAgICAkdGhpcy0+TWFpbC0+TWFpbGVyID0gIm1haWwiOw0KICAgICAgICAg
-ICAgJHRoaXMtPlNlbmRlciA9ICJ1bml0X3Rlc3RAcGhwbWFpbGVyLnNmLm5ldCI7DQogICAgICAg
-IH0NCiAgICAgICAgDQogICAgICAgICR0aGlzLT5TZXRBZGRyZXNzKFRFU1RfTUFJTF9VU0VSLCAi
-VGVzdCBVc2VyIik7DQogICAgICAgIC8qaWYoc3RybGVuKCRnbG9iYWxfdmFyc1sibWFpbF9jYyJd
-KSA+IDApDQogICAgICAgICAgICAkdGhpcy0+U2V0QWRkcmVzcygkZ2xvYmFsX3ZhcnNbIm1haWxf
-Y2MiXSwgIkNhcmJvbiBVc2VyIiwgImNjIik7Ki8NCiAgICB9ICAgICANCg0KICAgIC8qKg0KICAg
-ICAqIFJ1biBhZnRlciBlYWNoIHRlc3QgaXMgY29tcGxldGVkLg0KICAgICAqLw0KICAgIGZ1bmN0
-aW9uIHRlYXJEb3duKCkgew0KICAgICAgICAvLyBDbGVhbiBnbG9iYWwgdmFyaWFibGVzDQogICAg
-ICAgICR0aGlzLT5NYWlsID0gTlVMTDsNCiAgICAgICAgJHRoaXMtPkNoYW5nZUxvZyA9IGFycmF5
-KCk7DQogICAgICAgICR0aGlzLT5Ob3RlTG9nID0gYXJyYXkoKTsNCiAgICB9DQoNCg0KICAgIC8q
-Kg0KICAgICAqIEJ1aWxkIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIGluIHRoZSBhcHByb3ByaWF0
-ZSBmb3JtYXQuDQogICAgICogQHByaXZhdGUNCiAgICAgKiBAcmV0dXJucyB2b2lkDQogICAgICov
-DQogICAgZnVuY3Rpb24gQnVpbGRCb2R5KCkgew0KICAgICAgICAkdGhpcy0+Q2hlY2tDaGFuZ2Vz
-KCk7DQogICAgICAgIA0KICAgICAgICAvLyBEZXRlcm1pbmUgbGluZSBlbmRpbmdzIGZvciBtZXNz
-YWdlICAgICAgICANCiAgICAgICAgaWYoJHRoaXMtPk1haWwtPkNvbnRlbnRUeXBlID09ICJ0ZXh0
-L2h0bWwiIHx8IHN0cmxlbigkdGhpcy0+TWFpbC0+QWx0Qm9keSkgPiAwKQ0KICAgICAgICB7DQog
-ICAgICAgICAgICAkZW9sID0gIjxici8+IjsNCiAgICAgICAgICAgICRidWxsZXQgPSAiPGxpPiI7
-DQogICAgICAgICAgICAkYnVsbGV0X3N0YXJ0ID0gIjx1bD4iOw0KICAgICAgICAgICAgJGJ1bGxl
-dF9lbmQgPSAiPC91bD4iOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAg
-ICAgICAgICAgJGVvbCA9ICJcbiI7DQogICAgICAgICAgICAkYnVsbGV0ID0gIiAtICI7DQogICAg
-ICAgICAgICAkYnVsbGV0X3N0YXJ0ID0gIiI7DQogICAgICAgICAgICAkYnVsbGV0X2VuZCA9ICIi
-Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkUmVwb3J0Qm9keSA9ICIiOw0KICAgICAg
-ICANCiAgICAgICAgJFJlcG9ydEJvZHkgLj0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgLiAkZW9s
-Ow0KICAgICAgICAkUmVwb3J0Qm9keSAuPSAiVW5pdCBUZXN0IEluZm9ybWF0aW9uIiAuICRlb2w7
-DQogICAgICAgICRSZXBvcnRCb2R5IC49ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0iIC4gJGVvbDsN
-CiAgICAgICAgJFJlcG9ydEJvZHkgLj0gInBocG1haWxlciB2ZXJzaW9uOiAiIC4gJHRoaXMtPk1h
-aWwtPlZlcnNpb24gLiAkZW9sOw0KICAgICAgICAkUmVwb3J0Qm9keSAuPSAiQ29udGVudCBUeXBl
-OiAiIC4gJHRoaXMtPk1haWwtPkNvbnRlbnRUeXBlIC4gJGVvbDsNCiAgICAgICAgDQogICAgICAg
-IGlmKHN0cmxlbigkdGhpcy0+TWFpbC0+SG9zdCkgPiAwKQ0KICAgICAgICAgICAgJFJlcG9ydEJv
-ZHkgLj0gIkhvc3Q6ICIgLiAkdGhpcy0+TWFpbC0+SG9zdCAuICRlb2w7DQogICAgICAgIA0KICAg
-ICAgICAvLyBJZiBhdHRhY2htZW50cyB0aGVuIGNyZWF0ZSBhbiBhdHRhY2htZW50IGxpc3QNCiAg
-ICAgICAgaWYoY291bnQoJHRoaXMtPk1haWwtPmF0dGFjaG1lbnQpID4gMCkNCiAgICAgICAgew0K
-ICAgICAgICAgICAgJFJlcG9ydEJvZHkgLj0gIkF0dGFjaG1lbnRzOiIgLiAkZW9sOw0KICAgICAg
-ICAgICAgJFJlcG9ydEJvZHkgLj0gJGJ1bGxldF9zdGFydDsNCiAgICAgICAgICAgIGZvcigkaSA9
-IDA7ICRpIDwgY291bnQoJHRoaXMtPk1haWwtPmF0dGFjaG1lbnQpOyAkaSsrKQ0KICAgICAgICAg
-ICAgew0KICAgICAgICAgICAgICAgICRSZXBvcnRCb2R5IC49ICRidWxsZXQgLiAiTmFtZTogIiAu
-ICR0aGlzLT5NYWlsLT5hdHRhY2htZW50WyRpXVsxXSAuICIsICI7DQogICAgICAgICAgICAgICAg
-JFJlcG9ydEJvZHkgLj0gIkVuY29kaW5nOiAiIC4gJHRoaXMtPk1haWwtPmF0dGFjaG1lbnRbJGld
-WzNdIC4gIiwgIjsNCiAgICAgICAgICAgICAgICAkUmVwb3J0Qm9keSAuPSAiVHlwZTogIiAuICR0
-aGlzLT5NYWlsLT5hdHRhY2htZW50WyRpXVs0XSAuICRlb2w7DQogICAgICAgICAgICB9DQogICAg
-ICAgICAgICAkUmVwb3J0Qm9keSAuPSAkYnVsbGV0X2VuZCAuICRlb2w7DQogICAgICAgIH0NCiAg
-ICAgICAgDQogICAgICAgIC8vIElmIHRoZXJlIGFyZSBjaGFuZ2VzIHRoZW4gbGlzdCB0aGVtDQog
-ICAgICAgIGlmKGNvdW50KCR0aGlzLT5DaGFuZ2VMb2cpID4gMCkNCiAgICAgICAgew0KICAgICAg
-ICAgICAgJFJlcG9ydEJvZHkgLj0gIkNoYW5nZXMiIC4gJGVvbDsNCiAgICAgICAgICAgICRSZXBv
-cnRCb2R5IC49ICItLS0tLS0tIiAuICRlb2w7DQoNCiAgICAgICAgICAgICRSZXBvcnRCb2R5IC49
-ICRidWxsZXRfc3RhcnQ7DQogICAgICAgICAgICBmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlz
-LT5DaGFuZ2VMb2cpOyAkaSsrKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRSZXBv
-cnRCb2R5IC49ICRidWxsZXQgLiAkdGhpcy0+Q2hhbmdlTG9nWyRpXVswXSAuICIgd2FzIGNoYW5n
-ZWQgdG8gWyIgLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Q2hhbmdl
-TG9nWyRpXVsxXSAuICJdIiAuICRlb2w7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkUmVw
-b3J0Qm9keSAuPSAkYnVsbGV0X2VuZCAuICRlb2wgLiAkZW9sOw0KICAgICAgICB9DQogICAgICAg
-IA0KICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm90ZXMgdGhlbiBsaXN0IHRoZW0NCiAgICAgICAg
-aWYoY291bnQoJHRoaXMtPk5vdGVMb2cpID4gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgJFJl
-cG9ydEJvZHkgLj0gIk5vdGVzIiAuICRlb2w7DQogICAgICAgICAgICAkUmVwb3J0Qm9keSAuPSAi
-LS0tLS0iIC4gJGVvbDsNCg0KICAgICAgICAgICAgJFJlcG9ydEJvZHkgLj0gJGJ1bGxldF9zdGFy
-dDsNCiAgICAgICAgICAgIGZvcigkaSA9IDA7ICRpIDwgY291bnQoJHRoaXMtPk5vdGVMb2cpOyAk
-aSsrKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRSZXBvcnRCb2R5IC49ICRidWxs
-ZXQgLiAkdGhpcy0+Tm90ZUxvZ1skaV0gLiAkZW9sOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
-ICAgJFJlcG9ydEJvZHkgLj0gJGJ1bGxldF9lbmQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAg
-ICAgIC8vIFJlLWF0dGFjaCB0aGUgb3JpZ2luYWwgYm9keQ0KICAgICAgICAkdGhpcy0+TWFpbC0+
-Qm9keSAuPSAkZW9sIC4gJGVvbCAuICRSZXBvcnRCb2R5Ow0KICAgIH0NCiAgICANCiAgICAvKioN
-CiAgICAgKiBDaGVjayB3aGljaCBkZWZhdWx0IHNldHRpbmdzIGhhdmUgYmVlbiBjaGFuZ2VkIGZv
-ciB0aGUgcmVwb3J0Lg0KICAgICAqIEBwcml2YXRlDQogICAgICogQHJldHVybnMgdm9pZA0KICAg
-ICAqLw0KICAgIGZ1bmN0aW9uIENoZWNrQ2hhbmdlcygpIHsNCiAgICAgICAgaWYoJHRoaXMtPk1h
-aWwtPlByaW9yaXR5ICE9IDMpDQogICAgICAgICAgICAkdGhpcy0+QWRkQ2hhbmdlKCJQcmlvcml0
-eSIsICR0aGlzLT5NYWlsLT5Qcmlvcml0eSk7DQogICAgICAgIGlmKCR0aGlzLT5NYWlsLT5FbmNv
-ZGluZyAhPSAiOGJpdCIpDQogICAgICAgICAgICAkdGhpcy0+QWRkQ2hhbmdlKCJFbmNvZGluZyIs
-ICR0aGlzLT5NYWlsLT5FbmNvZGluZyk7DQogICAgICAgIGlmKCR0aGlzLT5NYWlsLT5DaGFyU2V0
-ICE9ICJpc28tODg1OS0xIikNCiAgICAgICAgICAgICR0aGlzLT5BZGRDaGFuZ2UoIkNoYXJTZXQi
-LCAkdGhpcy0+TWFpbC0+Q2hhclNldCk7DQogICAgICAgIGlmKCR0aGlzLT5NYWlsLT5TZW5kZXIg
-IT0gIiIpDQogICAgICAgICAgICAkdGhpcy0+QWRkQ2hhbmdlKCJTZW5kZXIiLCAkdGhpcy0+TWFp
-bC0+U2VuZGVyKTsNCiAgICAgICAgaWYoJHRoaXMtPk1haWwtPldvcmRXcmFwICE9IDApDQogICAg
-ICAgICAgICAkdGhpcy0+QWRkQ2hhbmdlKCJXb3JkV3JhcCIsICR0aGlzLT5NYWlsLT5Xb3JkV3Jh
-cCk7DQogICAgICAgIGlmKCR0aGlzLT5NYWlsLT5NYWlsZXIgIT0gIm1haWwiKQ0KICAgICAgICAg
-ICAgJHRoaXMtPkFkZENoYW5nZSgiTWFpbGVyIiwgJHRoaXMtPk1haWwtPk1haWxlcik7DQogICAg
-ICAgIGlmKCR0aGlzLT5NYWlsLT5Qb3J0ICE9IDI1KQ0KICAgICAgICAgICAgJHRoaXMtPkFkZENo
-YW5nZSgiUG9ydCIsICR0aGlzLT5NYWlsLT5Qb3J0KTsNCiAgICAgICAgaWYoJHRoaXMtPk1haWwt
-PkhlbG8gIT0gImxvY2FsaG9zdC5sb2NhbGRvbWFpbiIpDQogICAgICAgICAgICAkdGhpcy0+QWRk
-Q2hhbmdlKCJIZWxvIiwgJHRoaXMtPk1haWwtPkhlbG8pOw0KICAgICAgICBpZigkdGhpcy0+TWFp
-bC0+U01UUEF1dGgpDQogICAgICAgICAgICAkdGhpcy0+QWRkQ2hhbmdlKCJTTVRQQXV0aCIsICJ0
-cnVlIik7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEFkZHMgYSBjaGFuZ2UgZW50cnku
-DQogICAgICogQHByaXZhdGUNCiAgICAgKiBAcmV0dXJucyB2b2lkDQogICAgICovDQogICAgZnVu
-Y3Rpb24gQWRkQ2hhbmdlKCRzTmFtZSwgJHNOZXdWYWx1ZSkgew0KICAgICAgICAkY3VyID0gY291
-bnQoJHRoaXMtPkNoYW5nZUxvZyk7DQogICAgICAgICR0aGlzLT5DaGFuZ2VMb2dbJGN1cl1bMF0g
-PSAkc05hbWU7DQogICAgICAgICR0aGlzLT5DaGFuZ2VMb2dbJGN1cl1bMV0gPSAkc05ld1ZhbHVl
-Ow0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBBZGRzIGEgc2ltcGxlIG5vdGUgdG8gdGhl
-IG1lc3NhZ2UuDQogICAgICogQHB1YmxpYw0KICAgICAqIEByZXR1cm5zIHZvaWQNCiAgICAgKi8N
-CiAgICBmdW5jdGlvbiBBZGROb3RlKCRzVmFsdWUpIHsNCiAgICAgICAgJHRoaXMtPk5vdGVMb2db
-XSA9ICRzVmFsdWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkcyBhbGwgb2YgdGhlIGFk
-ZHJlc3Nlcw0KICAgICAqIEBwdWJsaWMNCiAgICAgKiBAcmV0dXJucyB2b2lkDQogICAgICovDQog
-ICAgZnVuY3Rpb24gU2V0QWRkcmVzcygkc0FkZHJlc3MsICRzTmFtZSA9ICIiLCAkc1R5cGUgPSAi
-dG8iKSB7DQogICAgICAgIHN3aXRjaCgkc1R5cGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNh
-c2UgInRvIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+TWFpbC0+QWRkQWRkcmVzcygkc0FkZHJl
-c3MsICRzTmFtZSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJj
-YyI6DQogICAgICAgICAgICAgICAgJHRoaXMtPk1haWwtPkFkZENDKCRzQWRkcmVzcywgJHNOYW1l
-KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgImJjYyI6DQogICAg
-ICAgICAgICAgICAgJHRoaXMtPk1haWwtPkFkZEJDQygkc0FkZHJlc3MsICRzTmFtZSk7DQogICAg
-ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLy8vLy8vLy8vLy8v
-Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAgLy8gVU5JVCBURVNUUw0K
-ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0K
-ICAgIC8qKg0KICAgICAqIFRyeSBhIHBsYWluIG1lc3NhZ2UuDQogICAgICovDQogICAgZnVuY3Rp
-b24gdGVzdF9Xb3JkV3JhcCgpIHsNCg0KICAgICAgICAkdGhpcy0+TWFpbC0+V29yZFdyYXAgPSA0
-MDsNCiAgICAgICAgJG15X2JvZHkgPSAiSGVyZSBpcyB0aGUgbWFpbiBib2R5IG9mIHRoaXMgbWVz
-c2FnZS4gIEl0IHNob3VsZCAiIC4NCiAgICAgICAgICAgICAgICAgICAiYmUgcXVpdGUgYSBmZXcg
-bGluZXMuICBJdCBzaG91bGQgYmUgd3JhcHBlZCBhdCB0aGUgIiAuDQogICAgICAgICAgICAgICAg
-ICAgIjQwIGNoYXJhY3RlcnMuICBNYWtlIHN1cmUgdGhhdCBpdCBpcy4iOw0KICAgICAgICAkbkJv
-ZHlMZW4gPSBzdHJsZW4oJG15X2JvZHkpOw0KICAgICAgICAkbXlfYm9keSAuPSAiXG5cblRoaXMg
-aXMgdGhlIGFib3ZlIGJvZHkgbGVuZ3RoOiAiIC4gJG5Cb2R5TGVuOw0KDQogICAgICAgICR0aGlz
-LT5NYWlsLT5Cb2R5ID0gJG15X2JvZHk7DQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0IC49
-ICI6IFdvcmR3cmFwIjsNCg0KICAgICAgICAkdGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgICR0
-aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5NYWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvcklu
-Zm8pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRyeSBhIHBsYWluIG1lc3NhZ2UuDQogICAg
-ICovDQogICAgZnVuY3Rpb24gdGVzdF9Mb3dfUHJpb3JpdHkoKSB7DQogICAgDQogICAgICAgICR0
-aGlzLT5NYWlsLT5Qcmlvcml0eSA9IDU7DQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5ID0gIkhl
-cmUgaXMgdGhlIG1haW4gYm9keS4gIFRoZXJlIHNob3VsZCBiZSAiIC4NCiAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAiYSByZXBseSB0byBhZGRyZXNzIGluIHRoaXMgbWVzc2FnZS4iOw0KICAg
-ICAgICAkdGhpcy0+TWFpbC0+U3ViamVjdCAuPSAiOiBMb3cgUHJpb3JpdHkiOw0KICAgICAgICAk
-dGhpcy0+TWFpbC0+QWRkUmVwbHlUbygibm9ib2R5QG5vYm9keS5jb20iLCAiTm9ib2R5IChVbml0
-IFRlc3QpIik7DQoNCiAgICAgICAgJHRoaXMtPkJ1aWxkQm9keSgpOw0KICAgICAgICAkdGhpcy0+
-YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgpLCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZvKTsN
-CiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTaW1wbGUgcGxhaW4gZmlsZSBhdHRhY2htZW50IHRl
-c3QuDQogICAgICovDQogICAgZnVuY3Rpb24gdGVzdF9NdWx0aXBsZV9QbGFpbl9GaWxlQXR0YWNo
-bWVudCgpIHsNCg0KICAgICAgICAkdGhpcy0+TWFpbC0+Qm9keSA9ICJIZXJlIGlzIHRoZSB0ZXh0
-IGJvZHkiOw0KICAgICAgICAkdGhpcy0+TWFpbC0+U3ViamVjdCAuPSAiOiBQbGFpbiArIE11bHRp
-cGxlIEZpbGVBdHRhY2htZW50cyI7DQoNCiAgICAgICAgaWYoISR0aGlzLT5NYWlsLT5BZGRBdHRh
-Y2htZW50KCBQSFBNQUlMRVJfVEVTVF9CQVNFX0ZPTERFUi4idGVzdC5wbmciKSkNCiAgICAgICAg
-ew0KICAgICAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoZmFsc2UsICR0aGlzLT5NYWlsLT5FcnJv
-ckluZm8pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoISR0
-aGlzLT5NYWlsLT5BZGRBdHRhY2htZW50KCBQSFBNQUlMRVJfVEVTVF9CQVNFX0ZPTERFUi4icGhw
-bWFpbGVyX3Rlc3QuY2xhc3MucGhwIiwgInRlc3QudHh0IikpDQogICAgICAgIHsNCiAgICAgICAg
-ICAgICR0aGlzLT5hc3NlcnRUcnVlKGZhbHNlLCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZvKTsNCiAg
-ICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5CdWlsZEJvZHko
-KTsNCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPk1haWwtPlNlbmQoKSwgJHRoaXMt
-Pk1haWwtPkVycm9ySW5mbyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2ltcGxlIHBsYWlu
-IHN0cmluZyBhdHRhY2htZW50IHRlc3QuDQogICAgICovDQogICAgZnVuY3Rpb24gdGVzdF9QbGFp
-bl9TdHJpbmdBdHRhY2htZW50KCkgew0KDQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5ID0gIkhl
-cmUgaXMgdGhlIHRleHQgYm9keSI7DQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0IC49ICI6
-IFBsYWluICsgU3RyaW5nQXR0YWNobWVudCI7DQogICAgICAgIA0KICAgICAgICAkc0F0dGFjaG1l
-bnQgPSAiVGhlc2UgY2hhcmFjdGVycyBhcmUgdGhlIGNvbnRlbnQgb2YgdGhlICIgLg0KICAgICAg
-ICAgICAgICAgICAgICAgICAic3RyaW5nIGF0dGFjaG1lbnQuXG5UaGlzIG1pZ2h0IGJlIHRha2Vu
-IGZyb20gYSAiLg0KICAgICAgICAgICAgICAgICAgICAgICAiZGF0YWJhc2Ugb3Igc29tZSBvdGhl
-ciBzdWNoIHRoaW5nLiAiOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPk1haWwtPkFkZFN0cmlu
-Z0F0dGFjaG1lbnQoJHNBdHRhY2htZW50LCAic3RyaW5nX2F0dGFjaC50eHQiKTsNCg0KICAgICAg
-ICAkdGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5N
-YWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCg0KICAgIC8qKg0K
-ICAgICAqIFBsYWluIHF1b3RlZC1wcmludGFibGUgbWVzc2FnZS4NCiAgICAgKi8NCiAgICBmdW5j
-dGlvbiB0ZXN0X1F1b3RlZF9QcmludGFibGUoKSB7DQoNCiAgICAgICAgJHRoaXMtPk1haWwtPkJv
-ZHkgPSAiSGVyZSBpcyB0aGUgbWFpbiBib2R5IjsNCiAgICAgICAgJHRoaXMtPk1haWwtPlN1Ympl
-Y3QgLj0gIjogUGxhaW4gKyBRdW90ZWQtcHJpbnRhYmxlIjsNCiAgICAgICAgJHRoaXMtPk1haWwt
-PkVuY29kaW5nID0gInF1b3RlZC1wcmludGFibGUiOw0KDQogICAgICAgICR0aGlzLT5CdWlsZEJv
-ZHkoKTsNCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPk1haWwtPlNlbmQoKSwgJHRo
-aXMtPk1haWwtPkVycm9ySW5mbyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVHJ5IGEgcGxh
-aW4gbWVzc2FnZS4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiB0ZXN0X0h0bWwoKSB7DQogICAgDQog
-ICAgICAgICR0aGlzLT5NYWlsLT5Jc0hUTUwodHJ1ZSk7DQogICAgICAgICR0aGlzLT5NYWlsLT5T
-dWJqZWN0IC49ICI6IEhUTUwgb25seSI7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+TWFpbC0+
-Qm9keSA9ICJUaGlzIGlzIGEgPGI+dGVzdCBtZXNzYWdlPC9iPiB3cml0dGVuIGluIEhUTUwuIDwv
-YnI+IiAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdvIHRvIDxhIGhyZWY9XCJodHRw
-Oi8vcGhwbWFpbGVyLnNvdXJjZWZvcmdlLm5ldC9cIj4iIC4NCiAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAiaHR0cDovL3BocG1haWxlci5zb3VyY2Vmb3JnZS5uZXQvPC9hPiBmb3IgbmV3IHZl
-cnNpb25zIG9mICIgLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaHBtYWlsZXIuICA8
-cC8+IFRoYW5rIHlvdSEiOw0KDQogICAgICAgICR0aGlzLT5CdWlsZEJvZHkoKTsNCiAgICAgICAg
-JHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPk1haWwtPlNlbmQoKSwgJHRoaXMtPk1haWwtPkVycm9y
-SW5mbyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2ltcGxlIEhUTUwgYW5kIGF0dGFjaG1l
-bnQgdGVzdA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHRlc3RfSFRNTF9BdHRhY2htZW50KCkgew0K
-DQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5ID0gIlRoaXMgaXMgdGhlIDxiPkhUTUw8L2I+IHBh
-cnQgb2YgdGhlIGVtYWlsLiI7DQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0IC49ICI6IEhU
-TUwgKyBBdHRhY2htZW50IjsNCiAgICAgICAgJHRoaXMtPk1haWwtPklzSFRNTCh0cnVlKTsNCiAg
-ICAgICAgDQogICAgICAgIGlmKCEkdGhpcy0+TWFpbC0+QWRkQXR0YWNobWVudChQSFBNQUlMRVJf
-VEVTVF9CQVNFX0ZPTERFUi4icGhwbWFpbGVyX3Rlc3QuY2xhc3MucGhwIiwgInRlc3RfYXR0YWNo
-LnR4dCIpKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShmYWxzZSwg
-JHRoaXMtPk1haWwtPkVycm9ySW5mbyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0N
-Cg0KICAgICAgICAkdGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVl
-KCR0aGlzLT5NYWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCg0K
-ICAgIC8qKg0KICAgICAqIEFuIGVtYmVkZGVkIGF0dGFjaG1lbnQgdGVzdC4NCiAgICAgKi8NCiAg
-ICBmdW5jdGlvbiB0ZXN0X0VtYmVkZGVkX0ltYWdlKCkgew0KDQogICAgICAgICR0aGlzLT5NYWls
-LT5Cb2R5ID0gIkVtYmVkZGVkIEltYWdlOiA8aW1nIGFsdD1cInBocG1haWxlclwiIHNyYz1cImNp
-ZDpteS1hdHRhY2hcIj4iIC4NCiAgICAgICAgICAgICAgICAgICAgICJIZXJlIGlzIGFuIGltYWdl
-ITwvYT4iOw0KICAgICAgICAkdGhpcy0+TWFpbC0+U3ViamVjdCAuPSAiOiBFbWJlZGRlZCBJbWFn
-ZSI7DQogICAgICAgICR0aGlzLT5NYWlsLT5Jc0hUTUwodHJ1ZSk7DQogICAgICAgIA0KICAgICAg
-ICBpZighJHRoaXMtPk1haWwtPkFkZEVtYmVkZGVkSW1hZ2UoUEhQTUFJTEVSX1RFU1RfQkFTRV9G
-T0xERVIuInRlc3QucG5nIiwgIm15LWF0dGFjaCIsICJ0ZXN0LnBuZyIsDQogICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZTY0IiwgImltYWdlL3BuZyIpKQ0KICAg
-ICAgICB7DQogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShmYWxzZSwgJHRoaXMtPk1haWwt
-PkVycm9ySW5mbyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICAk
-dGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5NYWls
-LT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCg0KICAgIC8qKg0KICAg
-ICAqIEFuIGVtYmVkZGVkIGF0dGFjaG1lbnQgdGVzdC4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiB0
-ZXN0X011bHRpX0VtYmVkZGVkX0ltYWdlKCkgew0KDQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5
-ID0gIkVtYmVkZGVkIEltYWdlOiA8aW1nIGFsdD1cInBocG1haWxlclwiIHNyYz1cImNpZDpteS1h
-dHRhY2hcIj4iIC4NCiAgICAgICAgICAgICAgICAgICAgICJIZXJlIGlzIGFuIGltYWdlITwvYT4i
-Ow0KICAgICAgICAkdGhpcy0+TWFpbC0+U3ViamVjdCAuPSAiOiBFbWJlZGRlZCBJbWFnZSArIEF0
-dGFjaG1lbnQiOw0KICAgICAgICAkdGhpcy0+TWFpbC0+SXNIVE1MKHRydWUpOw0KICAgICAgICAN
-CiAgICAgICAgaWYoISR0aGlzLT5NYWlsLT5BZGRFbWJlZGRlZEltYWdlKFBIUE1BSUxFUl9URVNU
-X0JBU0VfRk9MREVSLiJ0ZXN0LnBuZyIsICJteS1hdHRhY2giLCAidGVzdC5wbmciLA0KICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2U2NCIsICJpbWFnZS9wbmci
-KSkNCiAgICAgICAgew0KICAgICAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoZmFsc2UsICR0aGlz
-LT5NYWlsLT5FcnJvckluZm8pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAg
-ICAgICAgaWYoISR0aGlzLT5NYWlsLT5BZGRBdHRhY2htZW50KFBIUE1BSUxFUl9URVNUX0JBU0Vf
-Rk9MREVSLiJwaHBtYWlsZXJfdGVzdC5jbGFzcy5waHAiLCAidGVzdC50eHQiKSkNCiAgICAgICAg
-ew0KICAgICAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoZmFsc2UsICR0aGlzLT5NYWlsLT5FcnJv
-ckluZm8pOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAg
-ICAkdGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5N
-YWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCg0KICAgIC8qKg0K
-ICAgICAqIFNpbXBsZSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgdGVzdC4NCiAgICAgKi8NCiAgICBm
-dW5jdGlvbiB0ZXN0X0FsdEJvZHkoKSB7DQoNCiAgICAgICAgJHRoaXMtPk1haWwtPkJvZHkgPSAi
-VGhpcyBpcyB0aGUgPGI+SFRNTDwvYj4gcGFydCBvZiB0aGUgZW1haWwuIjsNCiAgICAgICAgJHRo
-aXMtPk1haWwtPkFsdEJvZHkgPSAiSGVyZSBpcyB0aGUgdGV4dCBib2R5IG9mIHRoaXMgbWVzc2Fn
-ZS4gICIgLg0KICAgICAgICAgICAgICAgICAgICJJdCBzaG91bGQgYmUgcXVpdGUgYSBmZXcgbGlu
-ZXMuICBJdCBzaG91bGQgYmUgd3JhcHBlZCBhdCB0aGUgIiAuDQogICAgICAgICAgICAgICAgICAg
-IjQwIGNoYXJhY3RlcnMuICBNYWtlIHN1cmUgdGhhdCBpdCBpcy4iOw0KICAgICAgICAkdGhpcy0+
-TWFpbC0+V29yZFdyYXAgPSA0MDsNCiAgICAgICAgJHRoaXMtPkFkZE5vdGUoIlRoaXMgaXMgYSBt
-dWxpcGFydCBhbHRlcm5hdGl2ZSBlbWFpbCIpOw0KICAgICAgICAkdGhpcy0+TWFpbC0+U3ViamVj
-dCAuPSAiOiBBbHRCb2R5ICsgV29yZCBXcmFwIjsNCg0KICAgICAgICAkdGhpcy0+QnVpbGRCb2R5
-KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5NYWlsLT5TZW5kKCksICR0aGlz
-LT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNpbXBsZSBIVE1M
-IGFuZCBhdHRhY2htZW50IHRlc3QNCiAgICAgKi8NCiAgICBmdW5jdGlvbiB0ZXN0X0FsdEJvZHlf
-QXR0YWNobWVudCgpIHsNCg0KICAgICAgICAkdGhpcy0+TWFpbC0+Qm9keSA9ICJUaGlzIGlzIHRo
-ZSA8Yj5IVE1MPC9iPiBwYXJ0IG9mIHRoZSBlbWFpbC4iOw0KICAgICAgICAkdGhpcy0+TWFpbC0+
-QWx0Qm9keSA9ICJUaGlzIGlzIHRoZSB0ZXh0IHBhcnQgb2YgdGhlIGVtYWlsLiI7DQogICAgICAg
-ICR0aGlzLT5NYWlsLT5TdWJqZWN0IC49ICI6IEFsdEJvZHkgKyBBdHRhY2htZW50IjsNCiAgICAg
-ICAgJHRoaXMtPk1haWwtPklzSFRNTCh0cnVlKTsNCiAgICAgICAgDQogICAgICAgIGlmKCEkdGhp
-cy0+TWFpbC0+QWRkQXR0YWNobWVudChQSFBNQUlMRVJfVEVTVF9CQVNFX0ZPTERFUi4icGhwbWFp
-bGVyX3Rlc3QuY2xhc3MucGhwIiwgInRlc3RfYXR0YWNoLnR4dCIpKQ0KICAgICAgICB7DQogICAg
-ICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShmYWxzZSwgJHRoaXMtPk1haWwtPkVycm9ySW5mbyk7
-DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICAkdGhpcy0+QnVpbGRC
-b2R5KCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5NYWlsLT5TZW5kKCksICR0
-aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KDQogICAgICAgICRmcCA9IGZvcGVuKFBIUE1BSUxFUl9U
-RVNUX0JBU0VfRk9MREVSLiJtZXNzYWdlLnR4dCIsICJ3Iik7DQogICAgICAgIGZ3cml0ZSgkZnAs
-ICR0aGlzLT5NYWlsLT5DcmVhdGVIZWFkZXIoKSAuICR0aGlzLT5NYWlsLT5DcmVhdGVCb2R5KCkp
-Ow0KICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICB9ICAgIA0KDQogICAgZnVuY3Rpb24gdGVzdF9N
-dWx0aXBsZVNlbmQoKSB7DQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5ID0gIlNlbmRpbmcgdHdv
-IG1lc3NhZ2VzIHdpdGhvdXQga2VlcGFsaXZlIjsNCiAgICAgICAgJHRoaXMtPkJ1aWxkQm9keSgp
-Ow0KICAgICAgICAkc3ViamVjdCA9ICR0aGlzLT5NYWlsLT5TdWJqZWN0Ow0KDQogICAgICAgICR0
-aGlzLT5NYWlsLT5TdWJqZWN0ID0gJHN1YmplY3QgLiAiOiBTTVRQIDEiOw0KICAgICAgICAkdGhp
-cy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgpLCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZv
-KTsNCiAgICAgICAgDQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0ID0gJHN1YmplY3QgLiAi
-OiBTTVRQIDIiOw0KICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgp
-LCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZvKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0ZXN0X1Nt
-dHBLZWVwQWxpdmUoKSB7DQogICAgICAgICR0aGlzLT5NYWlsLT5Cb2R5ID0gIlRoaXMgd2FzIGRv
-bmUgdXNpbmcgdGhlIFNNVFAga2VlcC1hbGl2ZS4iOw0KICAgICAgICAkdGhpcy0+QnVpbGRCb2R5
-KCk7DQogICAgICAgICRzdWJqZWN0ID0gJHRoaXMtPk1haWwtPlN1YmplY3Q7DQoNCiAgICAgICAg
-JHRoaXMtPk1haWwtPlNNVFBLZWVwQWxpdmUgPSB0cnVlOw0KICAgICAgICAkdGhpcy0+TWFpbC0+
-U3ViamVjdCA9ICRzdWJqZWN0IC4gIjogU01UUCBrZWVwLWFsaXZlIDEiOw0KICAgICAgICAkdGhp
-cy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgpLCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZv
-KTsNCiAgICAgICAgDQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0ID0gJHN1YmplY3QgLiAi
-OiBTTVRQIGtlZXAtYWxpdmUgMiI7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5N
-YWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgICAgICAkdGhpcy0+TWFp
-bC0+U210cENsb3NlKCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFRlc3RzIHRoaXMg
-ZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrOiANCiAgICAgKiAgICBodHRwOi8vd3d3LmN5YnNlYy5j
-b20vdnVsbi9QSFBNYWlsZXItRE9TLnBkZg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHRlc3RfRGVu
-aWFsT2ZTZXJ2aWNlQXR0YWNrKCkgew0KICAgICAgICAkdGhpcy0+TWFpbC0+Qm9keSA9ICJUaGlz
-IHNob3VsZCBubyBsb25nZXIgY2F1c2UgYSBkZW5pYWwgb2Ygc2VydmljZS4iOw0KICAgICAgICAk
-dGhpcy0+QnVpbGRCb2R5KCk7DQogICAgICAgDQogICAgICAgICR0aGlzLT5NYWlsLT5TdWJqZWN0
-ID0gc3RyX3JlcGVhdCgiQSIsIDk5OCk7DQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlz
-LT5NYWlsLT5TZW5kKCksICR0aGlzLT5NYWlsLT5FcnJvckluZm8pOw0KICAgIH0NCiAgICANCiAg
-ICBmdW5jdGlvbiB0ZXN0X0Vycm9yKCkgew0KICAgICAgICAkdGhpcy0+TWFpbC0+U3ViamVjdCAu
-PSAiOiBUaGlzIHNob3VsZCBiZSBzZW50IjsgDQogICAgICAgICR0aGlzLT5CdWlsZEJvZHkoKTsN
-CiAgICAgICAgJHRoaXMtPk1haWwtPkNsZWFyQWxsUmVjaXBpZW50cygpOyAvLyBubyBhZGRyZXNz
-ZXMgc2hvdWxkIGNhdXNlIGFuIGVycm9yDQogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCR0aGlz
-LT5NYWlsLT5Jc0Vycm9yKCkgPT0gZmFsc2UsICJFcnJvciBmb3VuZCIpOw0KICAgICAgICAkdGhp
-cy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgpID09IGZhbHNlLCAiU2VuZCBzdWNjZWVk
-ZWQiKTsNCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPk1haWwtPklzRXJyb3IoKSwg
-Ik5vIGVycm9yIGZvdW5kIik7DQogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ1lvdSBtdXN0
-IHByb3ZpZGUgYXQgbGVhc3Qgb25lICcgLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy
-ZWNpcGllbnQgZW1haWwgYWRkcmVzcy4nLCAkdGhpcy0+TWFpbC0+RXJyb3JJbmZvKTsNCiAgICAg
-ICAgJHRoaXMtPk1haWwtPkFkZEFkZHJlc3MoVEVTVF9NQUlMX1VTRVIpOw0KICAgICAgICAkdGhp
-cy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+TWFpbC0+U2VuZCgpLCAiU2VuZCBmYWlsZWQiKTsNCiAgICB9
-DQp9ICA=
-
-
---b1_da558b7b2173e5637e74b4d5c56e9652--

Modified: plog/trunk/runtests.php
===================================================================
--- plog/trunk/runtests.php	2006-07-17 04:51:06 UTC (rev 3731)
+++ plog/trunk/runtests.php	2006-07-17 20:22:06 UTC (rev 3732)
@@ -1,3 +1,8 @@
+<html>
+	<head>
+		<title>LifeType Test Suite</title>
+	</head>
+	<body>
 <?php
 
 	if (!defined( "PLOG_CLASS_PATH" )) {
@@ -6,13 +11,51 @@
 
 	include_once( PLOG_CLASS_PATH."class/test/testrunner.class.php" );
 	include_once( PLOG_CLASS_PATH."class/test/helpers/htmlreporter.class.php" );	
+	include_once( PLOG_CLASS_PATH."class/net/http/httpvars.class.php" );
+	
+	// get the suite name from the request or run all of them if no parameter specified
+	$request = HttpVars::getRequest();
+	$suiteName = isset( $request["suite"] ) ? $request["suite"] : "";
 
 	// create a new TestRunner class, which will take care of loading all our
-	// tests cases, instantiate them and tell PHPUnit to run the tests
+	// tests cases, instantiate them and tell PHPUnit to run the tests specified
+	// in the request
 	$r = new TestRunner();
-	$result = $r->run();
 	
-	// check the results when ready
-	$reporter = new HTMLReporter( $result );
-	print($reporter->generate());
-?>
\ No newline at end of file
+	if( $suiteName == "" ) {
+		// no suite name was specified, let's just show what we have
+		$suites = $r->getTestSuites();		
+?>
+<h1>Available Test Suites</h1>
+<p>Plese select a test suite to run or click "All" to run all the test suites together.</p>
+<table border="1">
+	<thead>
+		<th>Suite</th>
+		<th>Run</th>
+		<th>Available methods</th>
+	</thead>
+	<?php foreach( $suites as $suite ) { ?>
+	<tr>
+		<td><?php print( $suite->getSuiteName()) ?></td>
+		<td><a href="?suite=<?php print( $suite->getSuiteName()) ?>">Run</a></td>
+		<td><?php foreach( $suite->getTestMethods() as $method ) { print( $method.", " ); } ?></td>
+	</tr>
+	<?php } ?>
+	<tr>
+		<td>ALL</td>
+		<td><a href="?suite=all">Run</a></td>
+		<td>&nbsp;</td>
+	</tr>
+</table>
+<?php
+	}
+	else {
+		$result = $r->run( $suiteName );
+	
+		// check the results when ready
+		$reporter = new HTMLReporter( $result );
+		print($reporter->generate());
+	}
+?>
+</body>
+</html>
\ No newline at end of file



More information about the pLog-svn mailing list