class BuildTestTest
Same name in other branches
- 8.9.x core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php \Drupal\BuildTests\Framework\Tests\BuildTestTest
- 10 core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php \Drupal\BuildTests\Framework\Tests\BuildTestTest
- 11.x core/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php \Drupal\BuildTests\Framework\Tests\BuildTestTest
@coversDefaultClass \Drupal\BuildTests\Framework\BuildTestBase @group Build
Hierarchy
- class \Drupal\BuildTests\Framework\BuildTestBase extends \PHPUnit\Framework\TestCase uses \Drupal\BuildTests\Framework\ExternalCommandRequirementsTrait, \Drupal\Tests\Traits\PhpUnitWarnings, \Drupal\Tests\PhpUnitCompatibilityTrait
- class \Drupal\BuildTests\Framework\Tests\BuildTestTest extends \Drupal\BuildTests\Framework\BuildTestBase
Expanded class hierarchy of BuildTestTest
File
-
core/
tests/ Drupal/ BuildTests/ Framework/ Tests/ BuildTestTest.php, line 14
Namespace
Drupal\BuildTests\Framework\TestsView source
class BuildTestTest extends BuildTestBase {
/**
* Ensure that workspaces work.
*/
public function testWorkspace() {
$test_directory = 'test_directory';
// Execute an empty command through the shell to build out a working
// directory.
$process = $this->executeCommand('', $test_directory);
$this->assertCommandSuccessful();
// Assert that our working directory exists and is in use by the process.
$workspace = $this->getWorkspaceDirectory();
$working_path = $workspace . '/' . $test_directory;
$this->assertDirectoryExists($working_path);
$this->assertEquals($working_path, $process->getWorkingDirectory());
}
/**
* @covers ::copyCodebase
*/
public function testCopyCodebase() {
$test_directory = 'copied_codebase';
$this->copyCodebase(NULL, $test_directory);
$full_path = $this->getWorkspaceDirectory() . '/' . $test_directory;
$files = [
'autoload.php',
'composer.json',
'index.php',
'README.md',
'.git',
'.ht.router.php',
];
foreach ($files as $file) {
$this->assertFileExists($full_path . '/' . $file);
}
}
/**
* Ensure we're not copying directories we wish to exclude.
*
* @covers ::copyCodebase
*/
public function testCopyCodebaseExclude() {
// Create a virtual file system containing items that should be
// excluded. Exception being modules directory.
vfsStream::setup('drupal', NULL, [
'sites' => [
'default' => [
'files' => [
'a_file.txt' => 'some file.',
],
'settings.php' => '<?php $settings = stuff;',
'settings.local.php' => '<?php $settings = override;',
],
'simpletest' => [
'simpletest_hash' => [
'some_results.xml' => '<xml/>',
],
],
],
'vendor' => [
'composer' => [
'composer' => [
'installed.json' => '"items": {"things"}',
],
],
],
'modules' => [
'my_module' => [
'vendor' => [
'my_vendor' => [
'composer.json' => "{\n}",
],
],
],
],
]);
// Mock BuildTestBase so that it thinks our VFS is the Drupal root.
/** @var \PHPUnit\Framework\MockObject\MockBuilder|\Drupal\BuildTests\Framework\BuildTestBase $base */
$base = $this->getMockBuilder(BuildTestBase::class)
->onlyMethods([
'getDrupalRoot',
])
->getMockForAbstractClass();
$base->expects($this->exactly(2))
->method('getDrupalRoot')
->willReturn(vfsStream::url('drupal'));
$base->setUp();
// Perform the copy.
$test_directory = 'copied_codebase';
$base->copyCodebase(NULL, $test_directory);
$full_path = $base->getWorkspaceDirectory() . '/' . $test_directory;
$this->assertDirectoryExists($full_path);
// Verify nested vendor directory was not excluded. Then remove it for next
// validation.
$this->assertFileExists($full_path . DIRECTORY_SEPARATOR . 'modules/my_module/vendor/my_vendor/composer.json');
$file_system = new Filesystem();
$file_system->remove($full_path . DIRECTORY_SEPARATOR . 'modules');
// Use scandir() to determine if our target directory is empty. It should
// only contain the system dot directories.
$this->assertTrue(($files = @scandir($full_path)) && count($files) <= 2, 'Directory is not empty: ' . implode(', ', $files));
$base->tearDown();
}
/**
* @covers ::findAvailablePort
*/
public function testPortMany() {
$iterator = (new Finder())->in($this->getDrupalRoot())
->ignoreDotFiles(FALSE)
->exclude([
'sites/simpletest',
])
->path('/^.ht.router.php$/')
->getIterator();
$this->copyCodebase($iterator);
/** @var \Symfony\Component\Process\Process[] $processes */
$processes = [];
$count = 15;
for ($i = 0; $i <= $count; $i++) {
$port = $this->findAvailablePort();
$this->assertArrayNotHasKey($port, $processes, 'Port ' . $port . ' was already in use by a process.');
$processes[$port] = $this->instantiateServer($port);
$this->assertNotEmpty($processes[$port]);
$this->assertTrue($processes[$port]->isRunning(), 'Process on port ' . $port . ' is not still running.');
$this->assertFalse($this->checkPortIsAvailable($port));
}
// Clean up after ourselves.
foreach ($processes as $process) {
$process->stop();
}
}
/**
* @covers ::standUpServer
*/
public function testStandUpServer() {
// Stand up a server with working directory 'first'.
$this->standUpServer('first');
// Get the process object for the server.
$ref_process = new \ReflectionProperty(parent::class, 'serverProcess');
$ref_process->setAccessible(TRUE);
$first_process = $ref_process->getValue($this);
// Standing up the server again should not change the server process.
$this->standUpServer('first');
$this->assertSame($first_process, $ref_process->getValue($this));
// Standing up the server with working directory 'second' should give us a
// new server process.
$this->standUpServer('second');
$this->assertNotSame($first_process, $second_process = $ref_process->getValue($this));
// And even with the original working directory name, we should get a new
// server process.
$this->standUpServer('first');
$this->assertNotSame($first_process, $ref_process->getValue($this));
$this->assertNotSame($second_process, $ref_process->getValue($this));
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overrides |
---|---|---|---|---|
BuildTestBase::$commandProcess | private | property | The most recent command process. | |
BuildTestBase::$destroyBuild | protected | property | Default to destroying build artifacts after a test finishes. | |
BuildTestBase::$hostName | private static | property | Our native host name, used by PHP when it starts up the server. | |
BuildTestBase::$hostPort | private | property | Port that will be tested. | |
BuildTestBase::$mink | private | property | The Mink session manager. | |
BuildTestBase::$phpFinder | private | property | The PHP executable finder. | |
BuildTestBase::$portLocks | private | property | A list of ports used by the test. | |
BuildTestBase::$serverDocroot | private | property | The docroot for the server process. | |
BuildTestBase::$serverProcess | private | property | The process that's running the HTTP server. | |
BuildTestBase::$workspaceDir | private | property | The working directory where this test will manipulate files. | |
BuildTestBase::assertCommandExitCode | public | function | Asserts that the last command returned the specified exit code. | |
BuildTestBase::assertCommandOutputContains | public | function | Assert that text is present in the output of the most recent command. | |
BuildTestBase::assertCommandSuccessful | public | function | Asserts that the last command ran without error. | |
BuildTestBase::assertDrupalVisit | public | function | Helper function to assert that the last visit was a Drupal site. | |
BuildTestBase::assertErrorOutputContains | public | function | Assert that text is present in the error output of the most recent command. | |
BuildTestBase::assertErrorOutputNotContains | public | function | Assert text is not present in the error output of the most recent command. | |
BuildTestBase::checkPortIsAvailable | protected | function | Checks whether a port is available. | |
BuildTestBase::copyCodebase | public | function | Copy the current working codebase into a workspace. | |
BuildTestBase::executeCommand | public | function | Run a command. | |
BuildTestBase::findAvailablePort | protected | function | Discover an available port number. | |
BuildTestBase::getCodebaseFinder | public | function | Get a default Finder object for a Drupal codebase. | |
BuildTestBase::getDrupalRoot | protected | function | Get the root path of this Drupal codebase. | |
BuildTestBase::getMink | public | function | Get the Mink instance. | |
BuildTestBase::getPortNumber | protected | function | Get the port number for requests. | |
BuildTestBase::getWorkingPath | protected | function | Get the working directory within the workspace, creating if necessary. | |
BuildTestBase::getWorkspaceDirectory | public | function | Full path to the workspace where this test can build. | |
BuildTestBase::initMink | protected | function | Set up the Mink session manager. | |
BuildTestBase::instantiateServer | protected | function | Do the work of making a server process. | |
BuildTestBase::setUp | protected | function | 2 | |
BuildTestBase::setUpBeforeClass | public static | function | ||
BuildTestBase::standUpServer | protected | function | Makes a local test server using PHP's internal HTTP server. | |
BuildTestBase::stopServer | protected | function | Stop the HTTP server, zero out all necessary variables. | |
BuildTestBase::tearDown | protected | function | 1 | |
BuildTestBase::visit | public | function | Visit a URI on the HTTP server. | |
BuildTestTest::testCopyCodebase | public | function | @covers ::copyCodebase | |
BuildTestTest::testCopyCodebaseExclude | public | function | Ensure we're not copying directories we wish to exclude. | |
BuildTestTest::testPortMany | public | function | @covers ::findAvailablePort | |
BuildTestTest::testStandUpServer | public | function | @covers ::standUpServer | |
BuildTestTest::testWorkspace | public | function | Ensure that workspaces work. | |
ExternalCommandRequirementsTrait::$existingCommands | private static | property | A list of existing external commands we've already discovered. | |
ExternalCommandRequirementsTrait::checkClassCommandRequirements | private static | function | Checks whether required external commands are available per test class. | |
ExternalCommandRequirementsTrait::checkExternalCommandRequirements | private static | function | Checks missing external command requirements. | |
ExternalCommandRequirementsTrait::checkMethodCommandRequirements | private static | function | Checks whether required external commands are available per method. | |
ExternalCommandRequirementsTrait::externalCommandIsAvailable | private static | function | Determine if an external command is available. | 3 |
PhpUnitWarnings::$deprecationWarnings | private static | property | Deprecation warnings from PHPUnit to raise with @trigger_error(). | |
PhpUnitWarnings::addWarning | public | function | Converts PHPUnit deprecation warnings to E_USER_DEPRECATED. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.