0337d704 |
1 | <?php |
2 | /** |
3 | * base include file for SimpleTest |
4 | * @package SimpleTest |
5 | * @subpackage UnitTester |
6 | * @version $Id: remote.php,v 1.11 2004/08/04 22:09:39 lastcraft Exp $ |
7 | */ |
8 | |
9 | /**#@+ |
10 | * include other SimpleTest class files |
11 | */ |
12 | require_once(dirname(__FILE__) . '/browser.php'); |
13 | require_once(dirname(__FILE__) . '/xml.php'); |
14 | require_once(dirname(__FILE__) . '/simple_test.php'); |
15 | /**#@-*/ |
16 | |
17 | /** |
18 | * Runs an XML formated test on a remote server. |
19 | * @package SimpleTest |
20 | * @subpackage UnitTester |
21 | */ |
22 | class RemoteTestCase { |
23 | var $_url; |
24 | var $_dry_url; |
25 | var $_size; |
26 | |
27 | /** |
28 | * Sets the location of the remote test. |
29 | * @param string $url Test location. |
30 | * @param string $dry_url Location for dry run. |
31 | * @access public |
32 | */ |
33 | function RemoteTestCase($url, $dry_url = false) { |
34 | $this->_url = $url; |
35 | $this->_dry_url = $dry_url ? $dry_url : $url; |
36 | $this->_size = false; |
37 | } |
38 | |
39 | /** |
40 | * Accessor for the test name for subclasses. |
41 | * @return string Name of the test. |
42 | * @access public |
43 | */ |
44 | function getLabel() { |
45 | return $this->_url; |
46 | } |
47 | |
48 | /** |
49 | * Runs the top level test for this class. Currently |
50 | * reads the data as a single chunk. I'll fix this |
51 | * once I have added iteration to the browser. |
52 | * @param SimpleReporter $reporter Target of test results. |
53 | * @returns boolean True if no failures. |
54 | * @access public |
55 | */ |
56 | function run(&$reporter) { |
57 | $browser = &$this->_createBrowser(); |
58 | $xml = $browser->get($this->_url); |
59 | if (! $xml) { |
60 | trigger_error('Cannot read remote test URL [' . $this->_url . ']'); |
61 | return false; |
62 | } |
63 | $parser = &$this->_createParser($reporter); |
64 | if (! $parser->parse($xml)) { |
65 | trigger_error('Cannot parse incoming XML from [' . $this->_url . ']'); |
66 | return false; |
67 | } |
68 | return true; |
69 | } |
70 | |
71 | /** |
72 | * Creates a new web browser object for fetching |
73 | * the XML report. |
74 | * @return SimpleBrowser New browser. |
75 | * @access protected |
76 | */ |
77 | function &_createBrowser() { |
78 | return new SimpleBrowser(); |
79 | } |
80 | |
81 | /** |
82 | * Creates the XML parser. |
83 | * @param SimpleReporter $reporter Target of test results. |
84 | * @return SimpleTestXmlListener XML reader. |
85 | * @access protected |
86 | */ |
87 | function &_createParser(&$reporter) { |
88 | return new SimpleTestXmlParser($reporter); |
89 | } |
90 | |
91 | /** |
92 | * Accessor for the number of subtests. |
93 | * @return integer Number of test cases. |
94 | * @access public |
95 | */ |
96 | function getSize() { |
97 | if ($this->_size === false) { |
98 | $browser = &$this->_createBrowser(); |
99 | $xml = $browser->get($this->_dry_url); |
100 | if (! $xml) { |
101 | trigger_error('Cannot read remote test URL [' . $this->_dry_url . ']'); |
102 | return false; |
103 | } |
104 | $reporter = &new SimpleReporter(); |
105 | $parser = &$this->_createParser($reporter); |
106 | if (! $parser->parse($xml)) { |
107 | trigger_error('Cannot parse incoming XML from [' . $this->_dry_url . ']'); |
108 | return false; |
109 | } |
110 | $this->_size = $reporter->getTestCaseCount(); |
111 | } |
112 | return $this->_size; |
113 | } |
114 | } |
115 | ?> |