Merge branch 'MDL-29201_20' of git://github.com/timhunt/moodle into MOODLE_20_STABLE
[moodle.git] / lib / simpletestlib / detached.php
blob706c4ceedc046b64a25483b91a604786c9d5e027
1 <?php
2 /**
3 * base include file for SimpleTest
4 * @package SimpleTest
5 * @subpackage UnitTester
6 * @version $Id$
7 */
9 /**#@+
10 * include other SimpleTest class files
12 require_once(dirname(__FILE__) . '/xml.php');
13 require_once(dirname(__FILE__) . '/shell_tester.php');
14 /**#@-*/
16 /**
17 * Runs an XML formated test in a separate process.
18 * @package SimpleTest
19 * @subpackage UnitTester
21 class DetachedTestCase {
22 var $_command;
23 var $_dry_command;
24 var $_size;
26 /**
27 * Sets the location of the remote test.
28 * @param string $command Test script.
29 * @param string $dry_command Script for dry run.
30 * @access public
32 function DetachedTestCase($command, $dry_command = false) {
33 $this->_command = $command;
34 $this->_dry_command = $dry_command ? $dry_command : $command;
35 $this->_size = false;
38 /**
39 * Accessor for the test name for subclasses.
40 * @return string Name of the test.
41 * @access public
43 function getLabel() {
44 return $this->_command;
47 /**
48 * Runs the top level test for this class. Currently
49 * reads the data as a single chunk. I'll fix this
50 * once I have added iteration to the browser.
51 * @param SimpleReporter $reporter Target of test results.
52 * @returns boolean True if no failures.
53 * @access public
55 function run(&$reporter) {
56 $shell = new SimpleShell();
57 $shell->execute($this->_command);
58 $parser = &$this->_createParser($reporter);
59 if (! $parser->parse($shell->getOutput())) {
60 trigger_error('Cannot parse incoming XML from [' . $this->_command . ']');
61 return false;
63 return true;
66 /**
67 * Accessor for the number of subtests.
68 * @return integer Number of test cases.
69 * @access public
71 function getSize() {
72 if ($this->_size === false) {
73 $shell = new SimpleShell();
74 $shell->execute($this->_dry_command);
75 $reporter = new SimpleReporter();
76 $parser = &$this->_createParser($reporter);
77 if (! $parser->parse($shell->getOutput())) {
78 trigger_error('Cannot parse incoming XML from [' . $this->_dry_command . ']');
79 return false;
81 $this->_size = $reporter->getTestCaseCount();
83 return $this->_size;
86 /**
87 * Creates the XML parser.
88 * @param SimpleReporter $reporter Target of test results.
89 * @return SimpleTestXmlListener XML reader.
90 * @access protected
92 function &_createParser(&$reporter) {
93 return new SimpleTestXmlParser($reporter);