class TestRunTest

Same name and namespace in other branches
  1. 11.x core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php \Drupal\KernelTests\Core\Test\TestRunTest

@coversDefaultClass \Drupal\Core\Test\TestRun
@group Test

Hierarchy

Expanded class hierarchy of TestRunTest

File

core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php, line 18

Namespace

Drupal\KernelTests\Core\Test
View source
class TestRunTest extends KernelTestBase {
  
  /**
   * The database connection for testing.
   *
   * NOTE: this is the connection to the fixture database to allow testing the
   * storage class, NOT the database where actual tests results are stored.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $connection;
  
  /**
   * The test run results storage.
   *
   * @var \Drupal\Core\Test\TestRunResultsStorageInterface
   */
  protected $testRunResultsStorage;
  
  /**
   * {@inheritdoc}
   */
  public function setUp() : void {
    parent::setUp();
    $this->connection = Database::getConnection();
    $this->testRunResultsStorage = new SimpletestTestRunResultsStorage($this->connection);
    $this->testRunResultsStorage
      ->buildTestingResultsEnvironment(FALSE);
  }
  
  /**
   * @covers ::createNew
   * @covers ::get
   * @covers ::id
   * @covers ::insertLogEntry
   * @covers ::setDatabasePrefix
   * @covers ::getDatabasePrefix
   * @covers ::getTestClass
   */
  public function testCreateAndGet() : void {
    // Test ::createNew.
    $test_run = TestRun::createNew($this->testRunResultsStorage);
    $this->assertEquals(1, $test_run->id());
    $this->assertEquals(0, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $this->connection
      ->select('simpletest_test_id')
      ->countQuery()
      ->execute()
      ->fetchField());
    $test_run->setDatabasePrefix('oddity1234');
    $this->assertEquals('oddity1234', $test_run->getDatabasePrefix());
    $this->assertEquals('oddity1234', $this->connection
      ->select('simpletest_test_id', 's')
      ->fields('s', [
      'last_prefix',
    ])
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $test_run->insertLogEntry($this->getTestLogEntry('Test\\GroundControl')));
    $this->assertEquals('oddity1234', $test_run->getDatabasePrefix());
    $this->assertEquals('Test\\GroundControl', $test_run->getTestClass());
    $this->assertEquals(1, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $this->connection
      ->select('simpletest_test_id')
      ->countQuery()
      ->execute()
      ->fetchField());
    // Explicitly void the $test_run variable.
    $test_run = NULL;
    // Test ::get.
    $test_run = TestRun::get($this->testRunResultsStorage, 1);
    $this->assertEquals(1, $test_run->id());
    $this->assertEquals('oddity1234', $test_run->getDatabasePrefix());
    $this->assertEquals('Test\\GroundControl', $test_run->getTestClass());
  }
  
  /**
   * @covers ::createNew
   * @covers ::id
   * @covers ::insertLogEntry
   * @covers ::setDatabasePrefix
   */
  public function testCreateAndRemove() : void {
    $test_run_1 = TestRun::createNew($this->testRunResultsStorage);
    $test_run_1->setDatabasePrefix('oddity1234');
    $test_run_1->insertLogEntry($this->getTestLogEntry('Test\\GroundControl'));
    $this->assertEquals(1, $test_run_1->id());
    $this->assertEquals(1, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $this->connection
      ->select('simpletest_test_id')
      ->countQuery()
      ->execute()
      ->fetchField());
    $test_run_2 = TestRun::createNew($this->testRunResultsStorage);
    $test_run_2->setDatabasePrefix('oddity5678');
    $test_run_2->insertLogEntry($this->getTestLogEntry('Test\\PlanetEarth'));
    $this->assertEquals(2, $test_run_2->id());
    $this->assertEquals(2, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(2, $this->connection
      ->select('simpletest_test_id')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $test_run_1->removeResults());
    $this->assertEquals(1, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
    $this->assertEquals(1, $this->connection
      ->select('simpletest_test_id')
      ->countQuery()
      ->execute()
      ->fetchField());
  }
  
  /**
   * @covers ::createNew
   * @covers ::insertLogEntry
   * @covers ::setDatabasePrefix
   * @covers ::getLogEntriesByTestClass
   * @covers ::getDatabasePrefix
   * @covers ::getTestClass
   */
  public function testGetLogEntriesByTestClass() : void {
    $test_run = TestRun::createNew($this->testRunResultsStorage);
    $test_run->setDatabasePrefix('oddity1234');
    $this->assertEquals(1, $test_run->insertLogEntry($this->getTestLogEntry('Test\\PlanetEarth')));
    $this->assertEquals(2, $test_run->insertLogEntry($this->getTestLogEntry('Test\\GroundControl')));
    $this->assertEquals([
      0 => (object) [
        'message_id' => 2,
        'test_id' => 1,
        'test_class' => 'Test\\GroundControl',
        'status' => 'pass',
        'message' => 'Major Tom',
        'message_group' => 'other',
        'function' => 'Unknown',
        'line' => 0,
        'file' => 'Unknown',
      ],
      1 => (object) [
        'message_id' => 1,
        'test_id' => 1,
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'pass',
        'message' => 'Major Tom',
        'message_group' => 'other',
        'function' => 'Unknown',
        'line' => 0,
        'file' => 'Unknown',
      ],
    ], $test_run->getLogEntriesByTestClass());
    $this->assertEquals('oddity1234', $test_run->getDatabasePrefix());
    $this->assertEquals('Test\\GroundControl', $test_run->getTestClass());
  }
  
  /**
   * @covers ::createNew
   * @covers ::setDatabasePrefix
   * @covers ::processPhpErrorLogFile
   * @covers ::getLogEntriesByTestClass
   */
  public function testProcessPhpErrorLogFile() : void {
    $test_run = TestRun::createNew($this->testRunResultsStorage);
    $test_run->setDatabasePrefix('oddity1234');
    $test_run->processPhpErrorLogFile('core/tests/fixtures/test-error.log', 'Test\\PlanetEarth');
    $this->assertEquals([
      0 => (object) [
        'message_id' => '1',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "Argument 1 passed to Drupal\\FunctionalTests\\Bootstrap\\ErrorContainer::Drupal\\FunctionalTests\\Bootstrap\\{closure}() must be an instance of Drupal\\FunctionalTests\\Bootstrap\\ErrorContainer, int given, called",
        'message_group' => 'TypeError',
        'function' => 'Unknown',
        'line' => '18',
        'file' => '/var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ErrorContainer.php on line 20 in /var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ErrorContainer.php',
      ],
      1 => (object) [
        'message_id' => '2',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#1 /var/www/core/lib/Drupal/Core/DrupalKernel.php(1396): Drupal\\FunctionalTests\\Bootstrap\\ErrorContainer->get('http_kernel')\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      2 => (object) [
        'message_id' => '3',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#2 /var/www/core/lib/Drupal/Core/DrupalKernel.php(693): Drupal\\Core\\DrupalKernel->getHttpKernel()\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      3 => (object) [
        'message_id' => '4',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#3 /var/www/index.php(19): Drupal\\Core\\DrupalKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      4 => (object) [
        'message_id' => '5',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#4 {main}\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      5 => (object) [
        'message_id' => '6',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "Thrown exception during Container::get",
        'message_group' => 'Exception',
        'function' => 'Unknown',
        'line' => '17',
        'file' => '/var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ExceptionContainer.php',
      ],
      6 => (object) [
        'message_id' => '7',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#1 /var/www/core/lib/Drupal/Core/DrupalKernel.php(693): Drupal\\Core\\DrupalKernel->getHttpKernel()\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      7 => (object) [
        'message_id' => '8',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#2 /var/www/index.php(19): Drupal\\Core\\DrupalKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
      8 => (object) [
        'message_id' => '9',
        'test_id' => '1',
        'test_class' => 'Test\\PlanetEarth',
        'status' => 'fail',
        'message' => "#3 {main}\n",
        'message_group' => 'Fatal error',
        'function' => 'Unknown',
        'line' => '0',
        'file' => 'Unknown',
      ],
    ], $test_run->getLogEntriesByTestClass());
  }
  
  /**
   * @covers ::insertLogEntry
   */
  public function testProcessPhpUnitResults() : void {
    $phpunit_error_xml = __DIR__ . '/../../../Tests/Core/Test/fixtures/phpunit_error.xml';
    $res = JUnitConverter::xmlToRows(1, $phpunit_error_xml);
    $runner = PhpUnitTestRunner::create(\Drupal::getContainer());
    $test_run = TestRun::createNew($this->testRunResultsStorage);
    $runner->processPhpUnitResults($test_run, $res);
    $this->assertEquals(4, $this->connection
      ->select('simpletest')
      ->countQuery()
      ->execute()
      ->fetchField());
  }
  
  /**
   * Returns a sample test run log entry.
   *
   * @param string $test_class
   *   The test class.
   *
   * @return string[]
   *   An array with the elements to be logged.
   */
  protected function getTestLogEntry(string $test_class) : array {
    return [
      'test_class' => $test_class,
      'status' => 'pass',
      'message' => 'Major Tom',
      'message_group' => 'other',
    ];
  }

}

Members

Title Sort descending Modifiers Object type Summary
TestRunTest::$connection protected property The database connection for testing.
TestRunTest::$testRunResultsStorage protected property The test run results storage.
TestRunTest::getTestLogEntry protected function Returns a sample test run log entry.
TestRunTest::setUp public function
TestRunTest::testCreateAndGet public function @covers ::createNew[[api-linebreak]]
@covers ::get[[api-linebreak]]
@covers ::id[[api-linebreak]]
@covers ::insertLogEntry[[api-linebreak]]
@covers ::setDatabasePrefix[[api-linebreak]]
@covers ::getDatabasePrefix[[api-linebreak]]
@covers…
TestRunTest::testCreateAndRemove public function @covers ::createNew[[api-linebreak]]
@covers ::id[[api-linebreak]]
@covers ::insertLogEntry[[api-linebreak]]
@covers ::setDatabasePrefix[[api-linebreak]]
TestRunTest::testGetLogEntriesByTestClass public function @covers ::createNew[[api-linebreak]]
@covers ::insertLogEntry[[api-linebreak]]
@covers ::setDatabasePrefix[[api-linebreak]]
@covers ::getLogEntriesByTestClass[[api-linebreak]]
@covers ::getDatabasePrefix[[api-linebreak]]
@covers…
TestRunTest::testProcessPhpErrorLogFile public function @covers ::createNew[[api-linebreak]]
@covers ::setDatabasePrefix[[api-linebreak]]
@covers ::processPhpErrorLogFile[[api-linebreak]]
@covers ::getLogEntriesByTestClass[[api-linebreak]]
TestRunTest::testProcessPhpUnitResults public function @covers ::insertLogEntry[[api-linebreak]]

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.