Mercurial > hg > isophonics-drupal-site
diff core/modules/simpletest/src/Tests/BrokenSetUpTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/simpletest/src/Tests/BrokenSetUpTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,120 @@ +<?php + +namespace Drupal\simpletest\Tests; + +use Drupal\simpletest\WebTestBase; + +/** + * Tests a test case that does not call parent::setUp(). + * + * If a test case does not call parent::setUp(), running + * \Drupal\simpletest\WebTestBase::tearDown() would destroy the main site's + * database tables. Therefore, we ensure that tests which are not set up + * properly are skipped. + * + * @group simpletest + * @see \Drupal\simpletest\WebTestBase + */ +class BrokenSetUpTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['simpletest']; + + /** + * The path to the shared trigger file. + * + * @var string + */ + protected $sharedTriggerFile; + + protected function setUp() { + // If the test is being run from the main site, set up normally. + if (!$this->isInChildSite()) { + parent::setUp(); + + $this->sharedTriggerFile = $this->publicFilesDirectory . '/trigger'; + + // Create and log in user. + $admin_user = $this->drupalCreateUser(['administer unit tests']); + $this->drupalLogin($admin_user); + } + // If the test is being run from within simpletest, set up the broken test. + else { + $this->sharedTriggerFile = $this->originalFileDirectory . '/trigger'; + + if (file_get_contents($this->sharedTriggerFile) === 'setup') { + throw new \Exception('Broken setup'); + } + $this->pass('The setUp() method has run.'); + } + } + + protected function tearDown() { + // If the test is being run from the main site, tear down normally. + if (!$this->isInChildSite()) { + unlink($this->sharedTriggerFile); + parent::tearDown(); + } + // If the test is being run from within simpletest, output a message. + else { + if (file_get_contents($this->sharedTriggerFile) === 'teardown') { + throw new \Exception('Broken teardown'); + } + $this->pass('The tearDown() method has run.'); + } + } + + /** + * Runs this test case from within the simpletest child site. + */ + public function testMethod() { + // If the test is being run from the main site, run it again from the web + // interface within the simpletest child site. + if (!$this->isInChildSite()) { + // Verify that a broken setUp() method is caught. + file_put_contents($this->sharedTriggerFile, 'setup'); + $edit['tests[Drupal\simpletest\Tests\BrokenSetUpTest]'] = TRUE; + $this->drupalPostForm('admin/config/development/testing', $edit, t('Run tests')); + $this->assertRaw('Broken setup'); + $this->assertNoRaw('The setUp() method has run.'); + $this->assertNoRaw('Broken test'); + $this->assertNoRaw('The test method has run.'); + $this->assertNoRaw('Broken teardown'); + $this->assertNoRaw('The tearDown() method has run.'); + + // Verify that a broken tearDown() method is caught. + file_put_contents($this->sharedTriggerFile, 'teardown'); + $edit['tests[Drupal\simpletest\Tests\BrokenSetUpTest]'] = TRUE; + $this->drupalPostForm('admin/config/development/testing', $edit, t('Run tests')); + $this->assertNoRaw('Broken setup'); + $this->assertRaw('The setUp() method has run.'); + $this->assertNoRaw('Broken test'); + $this->assertRaw('The test method has run.'); + $this->assertRaw('Broken teardown'); + $this->assertNoRaw('The tearDown() method has run.'); + + // Verify that a broken test method is caught. + file_put_contents($this->sharedTriggerFile, 'test'); + $edit['tests[Drupal\simpletest\Tests\BrokenSetUpTest]'] = TRUE; + $this->drupalPostForm('admin/config/development/testing', $edit, t('Run tests')); + $this->assertNoRaw('Broken setup'); + $this->assertRaw('The setUp() method has run.'); + $this->assertRaw('Broken test'); + $this->assertNoRaw('The test method has run.'); + $this->assertNoRaw('Broken teardown'); + $this->assertRaw('The tearDown() method has run.'); + } + // If the test is being run from within simpletest, output a message. + else { + if (file_get_contents($this->sharedTriggerFile) === 'test') { + throw new \Exception('Broken test'); + } + $this->pass('The test method has run.'); + } + } + +}