Drupal 8.0.0 beta 12. More info: https://www.drupal.org/node/2514176
This commit is contained in:
commit
9921556621
13277 changed files with 1459781 additions and 0 deletions
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Functional\BrowserTestBaseTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Functional;
|
||||
|
||||
use Drupal\simpletest\BrowserTestBase;
|
||||
|
||||
/**
|
||||
* Tests BrowserTestBase functionality.
|
||||
*
|
||||
* @group simpletest
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
class BrowserTestBaseTest extends BrowserTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('test_page_test', 'form_test');
|
||||
|
||||
/**
|
||||
* Tests basic page test.
|
||||
*/
|
||||
public function testGoTo() {
|
||||
$account = $this->drupalCreateUser();
|
||||
$this->drupalLogin($account);
|
||||
|
||||
// Visit a Drupal page that requires login.
|
||||
$this->drupalGet('/test-page');
|
||||
$this->assertSession()->statusCodeEquals(200);
|
||||
|
||||
// Test page contains some text.
|
||||
$this->assertSession()->pageTextContains('Test page text.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests basic form functionality.
|
||||
*/
|
||||
public function testForm() {
|
||||
// Ensure the proper response code for a _form route.
|
||||
$this->drupalGet('/form-test/object-builder');
|
||||
$this->assertSession()->statusCodeEquals(200);
|
||||
|
||||
// Ensure the form and text field exist.
|
||||
$this->assertSession()->elementExists('css', 'form#form-test-form-test-object');
|
||||
$this->assertSession()->fieldExists('bananas');
|
||||
|
||||
$edit = ['bananas' => 'green'];
|
||||
$this->submitForm($edit, 'Save', 'form-test-form-test-object');
|
||||
|
||||
$config_factory = $this->container->get('config.factory');
|
||||
$value = $config_factory->get('form_test.object')->get('bananas');
|
||||
$this->assertSame('green', $value);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Unit\PhpUnitAutoloaderTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* Tests that classes are correctly loaded during PHPUnit initialization.
|
||||
*
|
||||
* @group simpletest
|
||||
*/
|
||||
class PhpUnitAutoloaderTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* Test loading of classes provided by test sub modules.
|
||||
*/
|
||||
public function testPhpUnitTestClassesLoading() {
|
||||
$this->assertTrue(class_exists('\Drupal\phpunit_test\PhpUnitTestDummyClass'), 'Class provided by test module was not autoloaded.');
|
||||
}
|
||||
|
||||
}
|
44
core/modules/simpletest/tests/src/Unit/PhpUnitErrorTest.php
Normal file
44
core/modules/simpletest/tests/src/Unit/PhpUnitErrorTest.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Unit\PhpUnitErrorTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* Tests PHPUnit errors are getting converted to Simpletest errors.
|
||||
*
|
||||
* @group simpletest
|
||||
*/
|
||||
class PhpUnitErrorTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* Test errors reported.
|
||||
*
|
||||
* @covers ::simpletest_phpunit_xml_to_rows
|
||||
*/
|
||||
public function testPhpUnitXmlParsing() {
|
||||
require_once __DIR__ . '/../../../simpletest.module';
|
||||
|
||||
$phpunit_error_xml = __DIR__ . '/../../fixtures/phpunit_error.xml';
|
||||
|
||||
$res = simpletest_phpunit_xml_to_rows(1, $phpunit_error_xml);
|
||||
$this->assertEquals(count($res), 4, 'All testcases got extracted');
|
||||
$this->assertNotEquals($res[0]['status'], 'pass');
|
||||
$this->assertEquals($res[0]['status'], 'fail');
|
||||
|
||||
// Test nested testsuites, which appear when you use @dataProvider.
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$this->assertNotEquals($res[$i + 1]['status'], 'pass');
|
||||
$this->assertEquals($res[$i + 1]['status'], 'fail');
|
||||
}
|
||||
|
||||
// Make sure simpletest_phpunit_xml_to_rows() does not balk if the test
|
||||
// didn't run.
|
||||
simpletest_phpunit_xml_to_rows(1, 'foobar');
|
||||
}
|
||||
}
|
472
core/modules/simpletest/tests/src/Unit/TestBaseTest.php
Normal file
472
core/modules/simpletest/tests/src/Unit/TestBaseTest.php
Normal file
|
@ -0,0 +1,472 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Unit\TestBaseTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\simpletest\TestBase
|
||||
* @group simpletest
|
||||
*/
|
||||
class TestBaseTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* Helper method for constructing a mock TestBase object.
|
||||
*
|
||||
* TestBase is abstract, so we have to mock it. We'll also
|
||||
* mock the storeAssertion() method so we don't need the database.
|
||||
*
|
||||
* @param string $test_id
|
||||
* An identifying name for the mocked test.
|
||||
*
|
||||
* @return object
|
||||
* Mock of Drupal\simpletest\TestBase.
|
||||
*/
|
||||
public function getTestBaseForAssertionTests($test_id) {
|
||||
$mock_test_base = $this->getMockBuilder('Drupal\simpletest\TestBase')
|
||||
->setConstructorArgs(array($test_id))
|
||||
->setMethods(array('storeAssertion'))
|
||||
->getMockForAbstractClass();
|
||||
// Override storeAssertion() so we don't need a database.
|
||||
$mock_test_base->expects($this->any())
|
||||
->method('storeAssertion')
|
||||
->will($this->returnValue(NULL));
|
||||
return $mock_test_base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke methods that are protected or private.
|
||||
*
|
||||
* @param object $object
|
||||
* Object on which to invoke the method.
|
||||
* @param string $method_name
|
||||
* Name of the method to invoke.
|
||||
* @param array $arguments
|
||||
* Array of arguments to be passed to the method.
|
||||
*
|
||||
* @return mixed
|
||||
* Value returned by the invoked method.
|
||||
*/
|
||||
public function invokeProtectedMethod($object, $method_name, array $arguments) {
|
||||
$ref_method = new \ReflectionMethod($object, $method_name);
|
||||
$ref_method->setAccessible(TRUE);
|
||||
return $ref_method->invokeArgs($object, $arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides data for the random string validation test.
|
||||
*
|
||||
* @return array
|
||||
* - The expected result of the validation.
|
||||
* - The string to validate.
|
||||
*/
|
||||
public function providerRandomStringValidate() {
|
||||
return array(
|
||||
array(FALSE, ' curry paste'),
|
||||
array(FALSE, 'curry paste '),
|
||||
array(FALSE, 'curry paste'),
|
||||
array(FALSE, 'curry paste'),
|
||||
array(TRUE, 'curry paste'),
|
||||
array(TRUE, 'thai green curry paste'),
|
||||
array(FALSE, '@startswithat'),
|
||||
array(TRUE, 'contains@at'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::randomStringValidate
|
||||
* @dataProvider providerRandomStringValidate
|
||||
*/
|
||||
public function testRandomStringValidate($expected, $string) {
|
||||
$mock_test_base = $this->getMockForAbstractClass('Drupal\simpletest\TestBase');
|
||||
$actual = $mock_test_base->randomStringValidate($string);
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides data for testRandomString() and others.
|
||||
*
|
||||
* @return array
|
||||
* - The number of items (characters, object properties) we expect any of
|
||||
* the random functions to give us.
|
||||
*/
|
||||
public function providerRandomItems() {
|
||||
return [
|
||||
[NULL],
|
||||
[0],
|
||||
[1],
|
||||
[2],
|
||||
[3],
|
||||
[4],
|
||||
[7],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::randomString
|
||||
* @dataProvider providerRandomItems
|
||||
*/
|
||||
public function testRandomString($length) {
|
||||
$mock_test_base = $this->getMockForAbstractClass('Drupal\simpletest\TestBase');
|
||||
$string = $mock_test_base->randomString($length);
|
||||
$this->assertEquals($length, strlen($string));
|
||||
// randomString() should always include an ampersand ('&') if $length is
|
||||
// greater than 2.
|
||||
if ($length > 2) {
|
||||
$this->assertContains('&', $string);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::randomObject
|
||||
* @dataProvider providerRandomItems
|
||||
*/
|
||||
public function testRandomObject($size) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
// Note: count((array)object) works for now, maybe not later.
|
||||
$this->assertEquals($size, count((array) $test_base->randomObject($size)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::checkRequirements
|
||||
*/
|
||||
public function testCheckRequirements() {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertInternalType(
|
||||
'array',
|
||||
$this->invokeProtectedMethod($test_base, 'checkRequirements', array())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testAssert().
|
||||
*
|
||||
* @return array
|
||||
* Standard dataProvider array of arrays:
|
||||
* - Expected result from assert().
|
||||
* - Expected status stored in TestBase->assertions.
|
||||
* - Status, passed to assert().
|
||||
* - Message, passed to assert().
|
||||
* - Group, passed to assert().
|
||||
* - Caller, passed to assert().
|
||||
*/
|
||||
public function providerAssert() {
|
||||
return array(
|
||||
array(TRUE, 'pass', TRUE, 'Yay pass', 'test', array()),
|
||||
array(FALSE, 'fail', FALSE, 'Boo fail', 'test', array()),
|
||||
array(TRUE, 'pass', 'pass', 'Yay pass', 'test', array()),
|
||||
array(FALSE, 'fail', 'fail', 'Boo fail', 'test', array()),
|
||||
array(FALSE, 'exception', 'exception', 'Boo fail', 'test', array()),
|
||||
array(FALSE, 'debug', 'debug', 'Boo fail', 'test', array()),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assert
|
||||
* @dataProvider providerAssert
|
||||
*/
|
||||
public function testAssert($expected, $assertion_status, $status, $message, $group, $caller) {
|
||||
$test_id = 'luke_i_am_your_' . $assertion_status;
|
||||
$test_base = $this->getTestBaseForAssertionTests($test_id);
|
||||
|
||||
// Verify some startup values.
|
||||
$this->assertAttributeEmpty('assertions', $test_base);
|
||||
if (is_string($status)) {
|
||||
$this->assertEquals(0, $test_base->results['#' . $status]);
|
||||
}
|
||||
|
||||
// assert() is protected so we have to make it accessible.
|
||||
$ref_assert = new \ReflectionMethod($test_base, 'assert');
|
||||
$ref_assert->setAccessible(TRUE);
|
||||
|
||||
// Call assert() from within our hall of mirrors.
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$ref_assert->invokeArgs($test_base,
|
||||
array($status, $message, $group, $caller)
|
||||
)
|
||||
);
|
||||
|
||||
// Check the side-effects of assert().
|
||||
if (is_string($status)) {
|
||||
$this->assertEquals(1, $test_base->results['#' . $status]);
|
||||
}
|
||||
$this->assertAttributeNotEmpty('assertions', $test_base);
|
||||
// Make a ReflectionProperty for the assertions property,
|
||||
// since it's protected.
|
||||
$ref_assertions = new \ReflectionProperty($test_base, 'assertions');
|
||||
$ref_assertions->setAccessible(TRUE);
|
||||
$assertions = $ref_assertions->getValue($test_base);
|
||||
$assertion = reset($assertions);
|
||||
$this->assertEquals($assertion_status, $assertion['status']);
|
||||
$this->assertEquals($test_id, $assertion['test_id']);
|
||||
$this->assertEquals(get_class($test_base), $assertion['test_class']);
|
||||
$this->assertEquals($message, $assertion['message']);
|
||||
$this->assertEquals($group, $assertion['message_group']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for assertTrue().
|
||||
*/
|
||||
public function providerAssertTrue() {
|
||||
return array(
|
||||
array(TRUE, TRUE),
|
||||
array(FALSE, FALSE),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertTrue
|
||||
* @dataProvider providerAssertTrue
|
||||
*/
|
||||
public function testAssertTrue($expected, $value) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$this->invokeProtectedMethod($test_base, 'assertTrue', array($value))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertFalse
|
||||
* @dataProvider providerAssertTrue
|
||||
*/
|
||||
public function testAssertFalse($expected, $value) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
(!$expected),
|
||||
$this->invokeProtectedMethod($test_base, 'assertFalse', array($value))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for assertNull().
|
||||
*/
|
||||
public function providerAssertNull() {
|
||||
return array(
|
||||
array(TRUE, NULL),
|
||||
array(FALSE, ''),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertNull
|
||||
* @dataProvider providerAssertNull
|
||||
*/
|
||||
public function testAssertNull($expected, $value) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$this->invokeProtectedMethod($test_base, 'assertNull', array($value))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertNotNull
|
||||
* @dataProvider providerAssertNull
|
||||
*/
|
||||
public function testAssertNotNull($expected, $value) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
(!$expected),
|
||||
$this->invokeProtectedMethod($test_base, 'assertNotNull', array($value))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for tests of equality assertions.
|
||||
*
|
||||
* Used by testAssertIdentical(), testAssertEqual(), testAssertNotIdentical(),
|
||||
* and testAssertNotEqual().
|
||||
*
|
||||
* @return
|
||||
* Array of test data.
|
||||
* - Expected assertion value for identical comparison.
|
||||
* - Expected assertion value for equal comparison.
|
||||
* - First value to compare.
|
||||
* - Second value to compare.
|
||||
*/
|
||||
public function providerEqualityAssertions() {
|
||||
return [
|
||||
// Integers and floats.
|
||||
[TRUE, TRUE, 0, 0],
|
||||
[FALSE, TRUE, 0, 0.0],
|
||||
[FALSE, TRUE, '0', 0],
|
||||
[FALSE, TRUE, '0.0', 0.0],
|
||||
[FALSE, FALSE, 23, 77],
|
||||
[TRUE, TRUE, 23.0, 23.0],
|
||||
// Strings.
|
||||
[FALSE, FALSE, 'foof', 'yay'],
|
||||
[TRUE, TRUE, 'yay', 'yay'],
|
||||
// Bools with type conversion.
|
||||
[TRUE, TRUE, TRUE, TRUE],
|
||||
[TRUE, TRUE, FALSE, FALSE],
|
||||
[FALSE, TRUE, NULL, FALSE],
|
||||
[FALSE, TRUE, 'TRUE', TRUE],
|
||||
[FALSE, FALSE, 'FALSE', FALSE],
|
||||
[FALSE, TRUE, 0, FALSE],
|
||||
[FALSE, TRUE, 1, TRUE],
|
||||
[FALSE, TRUE, -1, TRUE],
|
||||
[FALSE, TRUE, '1', TRUE],
|
||||
[FALSE, TRUE, '1.3', TRUE],
|
||||
// Null.
|
||||
[FALSE, FALSE, 'NULL', NULL],
|
||||
[TRUE, TRUE, NULL, NULL],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertIdentical
|
||||
* @dataProvider providerEqualityAssertions
|
||||
*/
|
||||
public function testAssertIdentical($expected_identical, $expected_equal, $first, $second) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
$expected_identical,
|
||||
$this->invokeProtectedMethod($test_base, 'assertIdentical', array($first, $second))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertNotIdentical
|
||||
* @dataProvider providerEqualityAssertions
|
||||
*/
|
||||
public function testAssertNotIdentical($expected_identical, $expected_equal, $first, $second) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
(!$expected_identical),
|
||||
$this->invokeProtectedMethod($test_base, 'assertNotIdentical', array($first, $second))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertEqual
|
||||
* @dataProvider providerEqualityAssertions
|
||||
*/
|
||||
public function testAssertEqual($expected_identical, $expected_equal, $first, $second) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
$expected_equal,
|
||||
$this->invokeProtectedMethod($test_base, 'assertEqual', array($first, $second))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertNotEqual
|
||||
* @dataProvider providerEqualityAssertions
|
||||
*/
|
||||
public function testAssertNotEqual($expected_identical, $expected_equal, $first, $second) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
(!$expected_equal),
|
||||
$this->invokeProtectedMethod($test_base, 'assertNotEqual', array($first, $second))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testAssertIdenticalObject().
|
||||
*/
|
||||
public function providerAssertIdenticalObject() {
|
||||
$obj1 = new \stdClass();
|
||||
$obj1->foof = 'yay';
|
||||
$obj2 = $obj1;
|
||||
$obj3 = clone $obj1;
|
||||
$obj4 = new \stdClass();
|
||||
return array(
|
||||
array(TRUE, $obj1, $obj2),
|
||||
array(TRUE, $obj1, $obj3),
|
||||
array(FALSE, $obj1, $obj4),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::assertIdenticalObject
|
||||
* @dataProvider providerAssertIdenticalObject
|
||||
*/
|
||||
public function testAssertIdenticalObject($expected, $first, $second) {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$this->invokeProtectedMethod($test_base, 'assertIdenticalObject', array($first, $second))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::pass
|
||||
*/
|
||||
public function testPass() {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
TRUE,
|
||||
$this->invokeProtectedMethod($test_base, 'pass', array())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::fail
|
||||
*/
|
||||
public function testFail() {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertEquals(
|
||||
FALSE,
|
||||
$this->invokeProtectedMethod($test_base, 'fail', array())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testError().
|
||||
*
|
||||
* @return array
|
||||
* - Expected status for assertion.
|
||||
* - Group for use in assert().
|
||||
*/
|
||||
public function providerError() {
|
||||
return array(
|
||||
array('debug', 'User notice'),
|
||||
array('exception', 'Not User notice'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::error
|
||||
* @dataProvider providerError
|
||||
*/
|
||||
public function testError($status, $group) {
|
||||
// Mock up a TestBase object.
|
||||
$mock_test_base = $this->getMockBuilder('Drupal\simpletest\TestBase')
|
||||
->setMethods(array('assert'))
|
||||
->getMockForAbstractClass();
|
||||
|
||||
// Set expectations for assert().
|
||||
$mock_test_base->expects($this->once())
|
||||
->method('assert')
|
||||
// The first argument to assert() should be the expected $status. This is
|
||||
// the most important expectation of this test.
|
||||
->with($status)
|
||||
// Arbitrary return value.
|
||||
->willReturn("$status:$group");
|
||||
|
||||
// Invoke error().
|
||||
$this->assertEquals(
|
||||
"$status:$group",
|
||||
$this->invokeProtectedMethod($mock_test_base, 'error', array('msg', $group))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::getRandomGenerator
|
||||
*/
|
||||
public function testGetRandomGenerator() {
|
||||
$test_base = $this->getTestBaseForAssertionTests('test_id');
|
||||
$this->assertInstanceOf(
|
||||
'Drupal\Component\Utility\Random',
|
||||
$this->invokeProtectedMethod($test_base, 'getRandomGenerator', array())
|
||||
);
|
||||
}
|
||||
|
||||
}
|
235
core/modules/simpletest/tests/src/Unit/TestInfoParsingTest.php
Normal file
235
core/modules/simpletest/tests/src/Unit/TestInfoParsingTest.php
Normal file
|
@ -0,0 +1,235 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Unit\TestInfoParsingTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\simpletest\TestDiscovery
|
||||
* @group simpletest
|
||||
*/
|
||||
class TestInfoParsingTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* @covers ::getTestInfo
|
||||
* @dataProvider infoParserProvider
|
||||
*/
|
||||
public function testTestInfoParser($expected, $classname, $doc_comment = NULL) {
|
||||
$info = \Drupal\simpletest\TestDiscovery::getTestInfo($classname, $doc_comment);
|
||||
$this->assertEquals($expected, $info);
|
||||
}
|
||||
|
||||
public function infoParserProvider() {
|
||||
// A module provided unit test.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\Tests\simpletest\Unit\TestInfoParsingTest',
|
||||
'group' => 'PHPUnit',
|
||||
'description' => 'Tests \Drupal\simpletest\TestDiscovery.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\Tests\simpletest\Unit\TestInfoParsingTest',
|
||||
];
|
||||
|
||||
// A core unit test.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\Tests\Core\DrupalTest',
|
||||
'group' => 'PHPUnit',
|
||||
'description' => 'Tests \Drupal.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\Tests\Core\DrupalTest',
|
||||
];
|
||||
|
||||
// Functional PHPUnit test.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\Tests\simpletest\Functional\BrowserTestBaseTest',
|
||||
'group' => 'simpletest',
|
||||
'description' => 'Tests BrowserTestBase functionality.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\Tests\simpletest\Functional\BrowserTestBaseTest',
|
||||
];
|
||||
|
||||
// Simpletest classes can not be autoloaded in a PHPUnit test, therefore
|
||||
// provide a docblock.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// Test with a different amount of leading spaces.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// Make sure that a "* @" inside a string does not get parsed as an
|
||||
// annotation.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards. * @',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards. * @
|
||||
*
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// Multiple @group annotations.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'Test',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*
|
||||
* @group Test
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// @dependencies annotation.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards.',
|
||||
'requires' => ['module' => ['test']],
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*
|
||||
* @dependencies test
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// Multiple @dependencies annotation.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards.',
|
||||
'requires' => ['module' => ['test', 'test1', 'test2']],
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*
|
||||
* @dependencies test, test1,test2
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
|
||||
// Multi-line summary line.
|
||||
$tests[] = [
|
||||
// Expected result.
|
||||
[
|
||||
'name' => 'Drupal\field\Tests\BulkDeleteTest',
|
||||
'group' => 'field',
|
||||
'description' => 'Bulk delete storages and fields, and clean up afterwards. And the summary line continues and there is no gap to the annotation.',
|
||||
],
|
||||
// Classname.
|
||||
'Drupal\field\Tests\BulkDeleteTest',
|
||||
// Doc block.
|
||||
"/**
|
||||
* Bulk delete storages and fields, and clean up afterwards. And the summary
|
||||
* line continues and there is no gap to the annotation.
|
||||
* @group field
|
||||
*/
|
||||
",
|
||||
];
|
||||
return $tests;
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::getTestInfo
|
||||
* @expectedException \Drupal\simpletest\Exception\MissingGroupException
|
||||
* @expectedExceptionMessage Missing @group annotation in Drupal\field\Tests\BulkDeleteTest
|
||||
*/
|
||||
public function testTestInfoParserMissingGroup() {
|
||||
$classname = 'Drupal\field\Tests\BulkDeleteTest';
|
||||
$doc_comment = <<<EOT
|
||||
/**
|
||||
* Bulk delete storages and fields, and clean up afterwards.
|
||||
*/
|
||||
EOT;
|
||||
\Drupal\simpletest\TestDiscovery::getTestInfo($classname, $doc_comment);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::getTestInfo
|
||||
*/
|
||||
public function testTestInfoParserMissingSummary() {
|
||||
$classname = 'Drupal\field\Tests\BulkDeleteTest';
|
||||
$doc_comment = <<<EOT
|
||||
/**
|
||||
* @group field
|
||||
*/
|
||||
EOT;
|
||||
$info = \Drupal\simpletest\TestDiscovery::getTestInfo($classname, $doc_comment);
|
||||
$this->assertEmpty($info['description']);
|
||||
}
|
||||
|
||||
}
|
201
core/modules/simpletest/tests/src/Unit/WebTestBaseTest.php
Normal file
201
core/modules/simpletest/tests/src/Unit/WebTestBaseTest.php
Normal file
|
@ -0,0 +1,201 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\simpletest\Unit\WebTestBaseTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\simpletest\WebTestBase
|
||||
* @group simpletest
|
||||
*/
|
||||
class WebTestBaseTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* Provides data for testing the assertFieldByName() helper.
|
||||
*
|
||||
* @return array
|
||||
* An array of values passed to the test method.
|
||||
*/
|
||||
public function providerAssertFieldByName() {
|
||||
$data = array();
|
||||
$data[] = array('select_2nd_selected', 'test', '1', FALSE);
|
||||
$data[] = array('select_2nd_selected', 'test', '2', TRUE);
|
||||
$data[] = array('select_none_selected', 'test', '', FALSE);
|
||||
$data[] = array('select_none_selected', 'test', '1', TRUE);
|
||||
$data[] = array('select_none_selected', 'test', NULL, TRUE);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the assertFieldByName() helper.
|
||||
*
|
||||
* @param string $filename
|
||||
* Name of file containing the output to test.
|
||||
* @param string $name
|
||||
* Name of field to assert.
|
||||
* @param string $value
|
||||
* Value of the field to assert.
|
||||
* @param bool $expected
|
||||
* The expected result of the assert.
|
||||
*
|
||||
* @see \Drupal\simpletest\WebTestBase::assertFieldByName()
|
||||
*
|
||||
* @dataProvider providerAssertFieldByName
|
||||
* @covers ::assertFieldByName
|
||||
*/
|
||||
public function testAssertFieldByName($filename, $name, $value, $expected) {
|
||||
$content = file_get_contents(__DIR__ . '/../../fixtures/' . $filename . '.html');
|
||||
|
||||
$web_test = $this->getMockBuilder('Drupal\simpletest\WebTestBase')
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(array('getRawContent', 'assertTrue', 'pass'))
|
||||
->getMock();
|
||||
|
||||
$web_test->expects($this->any())
|
||||
->method('getRawContent')
|
||||
->will($this->returnValue($content));
|
||||
|
||||
$web_test->expects($this->once())
|
||||
->method('assertTrue')
|
||||
->with($this->identicalTo($expected),
|
||||
$this->identicalTo('message'),
|
||||
$this->identicalTo('Browser'));
|
||||
|
||||
$test_method = new \ReflectionMethod('Drupal\simpletest\WebTestBase', 'assertFieldByName');
|
||||
$test_method->setAccessible(TRUE);
|
||||
$test_method->invokeArgs($web_test, array($name, $value, 'message'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testClickLink().
|
||||
*
|
||||
* In the test method, we mock drupalGet() to return a known string:
|
||||
* 'This Text Returned By drupalGet()'. Since clickLink() can only return
|
||||
* either the value of drupalGet() or FALSE, our expected return value is the
|
||||
* same as this mocked return value when we expect a link to be found.
|
||||
*
|
||||
* @see https://www.drupal.org/node/1452896
|
||||
*
|
||||
* @return array
|
||||
* Array of arrays of test data. Test data is structured as follows:
|
||||
* - Expected return value of clickLink().
|
||||
* - Parameter $label to clickLink().
|
||||
* - Parameter $index to clickLink().
|
||||
* - Test data to be returned by mocked xpath(). Return an empty array here
|
||||
* to mock no link found on the page.
|
||||
*/
|
||||
public function providerTestClickLink() {
|
||||
return array(
|
||||
// Test for a non-existent label.
|
||||
array(
|
||||
FALSE,
|
||||
'does_not_exist',
|
||||
0,
|
||||
array(),
|
||||
),
|
||||
// Test for an existing label.
|
||||
array(
|
||||
'This Text Returned By drupalGet()',
|
||||
'exists',
|
||||
0,
|
||||
array(0 => array('href' => 'this_is_a_url')),
|
||||
),
|
||||
// Test for an existing label that isn't the first one.
|
||||
array(
|
||||
'This Text Returned By drupalGet()',
|
||||
'exists',
|
||||
1,
|
||||
array(
|
||||
0 => array('href' => 'this_is_a_url'),
|
||||
1 => array('href' => 'this_is_another_url'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test WebTestBase::clickLink().
|
||||
*
|
||||
* @param mixed $expected
|
||||
* Expected return value of clickLink().
|
||||
* @param string $label
|
||||
* Parameter $label to clickLink().
|
||||
* @param int $index
|
||||
* Parameter $index to clickLink().
|
||||
* @param array $xpath_data
|
||||
* Test data to be returned by mocked xpath().
|
||||
*
|
||||
* @dataProvider providerTestClickLink
|
||||
* @covers ::clickLink
|
||||
*/
|
||||
public function testClickLink($expected, $label, $index, $xpath_data) {
|
||||
// Mock a WebTestBase object and some of its methods.
|
||||
$web_test = $this->getMockBuilder('Drupal\simpletest\WebTestBase')
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(array(
|
||||
'pass',
|
||||
'fail',
|
||||
'getUrl',
|
||||
'xpath',
|
||||
'drupalGet',
|
||||
'getAbsoluteUrl',
|
||||
))
|
||||
->getMock();
|
||||
|
||||
// Mocked getUrl() is only used for reporting so we just return a string.
|
||||
$web_test->expects($this->any())
|
||||
->method('getUrl')
|
||||
->will($this->returnValue('url_before'));
|
||||
|
||||
// Mocked xpath() should return our test data.
|
||||
$web_test->expects($this->any())
|
||||
->method('xpath')
|
||||
->will($this->returnValue($xpath_data));
|
||||
|
||||
if ($expected === FALSE) {
|
||||
// If link does not exist clickLink() will not try to do a drupalGet() or
|
||||
// a getAbsoluteUrl()
|
||||
$web_test->expects($this->never())
|
||||
->method('drupalGet');
|
||||
$web_test->expects($this->never())
|
||||
->method('getAbsoluteUrl');
|
||||
// The test should fail and not pass.
|
||||
$web_test->expects($this->never())
|
||||
->method('pass');
|
||||
$web_test->expects($this->once())
|
||||
->method('fail')
|
||||
->will($this->returnValue(NULL));
|
||||
}
|
||||
else {
|
||||
// Mocked getAbsoluteUrl() should return whatever comes in.
|
||||
$web_test->expects($this->once())
|
||||
->method('getAbsoluteUrl')
|
||||
->with($xpath_data[$index]['href'])
|
||||
->will($this->returnArgument(0));
|
||||
// We're only testing clickLink(), so drupalGet() always returns a string.
|
||||
$web_test->expects($this->once())
|
||||
->method('drupalGet')
|
||||
->with($xpath_data[$index]['href'])
|
||||
->will($this->returnValue('This Text Returned By drupalGet()'));
|
||||
// The test should pass and not fail.
|
||||
$web_test->expects($this->never())
|
||||
->method('fail');
|
||||
$web_test->expects($this->once())
|
||||
->method('pass')
|
||||
->will($this->returnValue(NULL));
|
||||
}
|
||||
|
||||
// Set the clickLink() method to public so we can test it.
|
||||
$clicklink_method = new \ReflectionMethod($web_test, 'clickLink');
|
||||
$clicklink_method->setAccessible(TRUE);
|
||||
|
||||
$this->assertSame($expected, $clicklink_method->invoke($web_test, $label, $index));
|
||||
}
|
||||
|
||||
}
|
Reference in a new issue