Version 1
[yaffs-website] / web / core / modules / simpletest / src / Tests / BrokenSetUpTest.php
diff --git a/web/core/modules/simpletest/src/Tests/BrokenSetUpTest.php b/web/core/modules/simpletest/src/Tests/BrokenSetUpTest.php
new file mode 100644 (file)
index 0000000..febb9cf
--- /dev/null
@@ -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.');
+    }
+  }
+
+}