From 01223c9f49729812e33216796fbac25316c8c988 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Wed, 28 May 2008 14:07:46 +0000 Subject: [PATCH] - Patch #260882 by boombatower: added simpletests for simpletest. :-) --- modules/simpletest/simpletest.test | 168 +++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 modules/simpletest/simpletest.test diff --git a/modules/simpletest/simpletest.test b/modules/simpletest/simpletest.test new file mode 100644 index 000000000000..b4ae106613a6 --- /dev/null +++ b/modules/simpletest/simpletest.test @@ -0,0 +1,168 @@ +<?php +// $Id$ + +class SimpleTestTestCase extends DrupalWebTestCase { + protected $results; + + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('SimpleTest functionality'), + 'description' => t('Test SimpleTest\'s web interface: check that the intended tests were + run and ensure that test reports display the intended results. Also + test SimpleTest\'s internal browser and API\'s both explicitly and + implicitly.'), + 'group' => t('SimpleTest') + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp('simpletest'); + + // Create and login user + $admin_user = $this->drupalCreateUser(array('administer unit tests')); + $this->drupalLogin($admin_user); + } + + /** + * Test the internal browsers functionality. + */ + function testInternalBrowser() { + global $conf; + if (!$this->inCURL()) { + $this->drupalGet('node'); + $this->assertTitle(variable_get('site_name', 'Drupal'), t('Site title matches.')); + } + } + + /** + * Make sure that tests selected through the web interface are run and + * that the results are displayed correctly. + */ + function testWebTestRunner() { + $this->pass = t('SimpleTest pass.'); + $this->fail = t('SimpleTest fail.'); + + if ($this->inCURL()) { + // Only run following code if this test is running itself through a CURL request. + $this->stubTest(); + } + else { + // Run this test from web interface. + $this->drupalGet('admin/build/testing'); + $this->assertText(t('It is strongly suggested to run the tests with the first user!')); + + $edit = array(); + $edit['SimpleTestTestCase'] = TRUE; + $this->drupalPost(NULL, $edit, t('Run tests')); + + $this->getTestResults(); + + $this->confirmStubTestResults(); + } + } + + /** + * Test to be run and the results confirmed. + */ + function stubTest() { + $this->pass($this->pass); + $this->fail($this->fail); + } + + /** + * Confirm that the stub test produced the desired results. + */ + function confirmStubTestResults() { + $this->assertAssertion($this->pass, '[Other]', 'Pass'); + $this->assertAssertion($this->fail, '[Other]', 'Fail'); + } + + /** + * Assert that an assertion with the specified values is displayed + * in the test results. + * + * @param string $message Assertion message. + * @param string $type Assertion type. + * @param string $status Assertion status. + * @return Assertion result. + */ + function assertAssertion($message, $type, $status) { + $found = FALSE; + foreach ($this->results['assertions'] as $assertion) { + if ($assertion['message'] == $message && + $assertion['type'] == $type && + $assertion['status'] == $status) { + $found = TRUE; + break; + } + } + return $this->assertTrue($found, t('Found assertion {"@message", "@type", "@status"}.', array('@message' => $message, '@type' => $type, '@status' => $status))); + } + + /** + * Get the results from a test and store them in the class array $results. + */ + function getTestResults() { + $results = array(); + + if ($this->parse()) { + if ($fieldset = $this->getResultFieldSet()) { + // Code assumes this is the only test in group. + $results['summary'] = $this->asText($fieldset->div[1]); + $results['name'] = $this->asText($fieldset->fieldset->legend); + + $results['assertions'] = array(); + $tbody = $fieldset->fieldset->div[2]->table->tbody; + foreach ($tbody->tr as $row) { + $assertion = array(); + $assertion['message'] = $this->asText($row->td[0]); + $assertion['type'] = $this->asText($row->td[1]); + $assertion['status'] = $this->asText($row->td[2]); + $results['assertions'][] = $assertion; + } + } + } + $this->results = $results; + } + + /** + * Get the fieldset containing the results for group this test is in. + * + * @return fieldset containing the results for group this test is in. + */ + function getResultFieldSet() { + $fieldsets = $this->elements->xpath('//fieldset'); + $info = $this->getInfo(); + foreach ($fieldsets as $fieldset) { + if ($fieldset->legend == $info['group']) { + return $fieldset; + } + } + return FALSE; + } + + /** + * Extract the text contained by the element. + * + * @param SimpleXMLElement $element Element to extract text from. + * @return string Extracted text. + */ + function asText(SimpleXMLElement $element) { + return strip_tags($element->asXML()); + } + + /** + * Check if the test is being run from inside a CURL request. + * + * @return The test is being run from inside a CURL request. + */ + function inCURL() { + return preg_match("/^simpletest\d+/", $_SERVER['HTTP_USER_AGENT']); + } +} -- GitLab