X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fdevel%2Ftests%2Fsrc%2FFunctional%2FDevelDumperTest.php;fp=web%2Fmodules%2Fcontrib%2Fdevel%2Ftests%2Fsrc%2FFunctional%2FDevelDumperTest.php;h=a4ef9b48fc773ece2c348ae4d2a2139cd9cbd583;hp=0000000000000000000000000000000000000000;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/web/modules/contrib/devel/tests/src/Functional/DevelDumperTest.php b/web/modules/contrib/devel/tests/src/Functional/DevelDumperTest.php new file mode 100644 index 000000000..a4ef9b48f --- /dev/null +++ b/web/modules/contrib/devel/tests/src/Functional/DevelDumperTest.php @@ -0,0 +1,165 @@ +drupalCreateUser(['administer site configuration', 'access devel information']); + $this->drupalLogin($admin_user); + } + + /** + * Test dumpers configuration page. + */ + public function testDumpersConfiguration() { + $this->drupalGet('admin/config/development/devel'); + + // Ensures that the dumper input is present on the config page. + $this->assertSession()->fieldExists('dumper'); + + // Ensures that the 'default' dumper is enabled by default. + $this->assertSession()->checkboxChecked('edit-dumper-default'); + + // Ensures that all dumpers declared by devel are present on the config page + // and that only the available dumpers are selectable. + $dumpers = [ + 'default', + 'drupal_variable', + 'firephp', + 'chromephp', + 'var_dumper', + ]; + $available_dumpers = ['default', 'drupal_variable']; + + foreach ($dumpers as $dumper) { + $this->assertFieldByXPath('//input[@type="radio" and @name="dumper"]', $dumper); + if (in_array($dumper, $available_dumpers)) { + $this->assertFieldByXPath('//input[@name="dumper" and not(@disabled="disabled")]', $dumper); + } + else { + $this->assertFieldByXPath('//input[@name="dumper" and @disabled="disabled"]', $dumper); + } + } + + // Ensures that dumper plugins declared by other modules are present on the + // config page and that only the available dumpers are selectable. + $this->assertFieldByXPath('//input[@name="dumper"]', 'available_test_dumper'); + $this->assertSession()->pageTextContains('Available test dumper.'); + $this->assertSession()->pageTextContains('Drupal dumper for testing purposes (available).'); + $this->assertFieldByXPath('//input[@name="dumper" and not(@disabled="disabled")]', 'available_test_dumper', 'Available dumper input not is disabled.'); + + $this->assertFieldByXPath('//input[@name="dumper"]', 'not_available_test_dumper'); + $this->assertSession()->pageTextContains('Not available test dumper.'); + $this->assertSession()->pageTextContains('Drupal dumper for testing purposes (not available).Not available. You may need to install external dependencies for use this plugin.'); + $this->assertFieldByXPath('//input[@name="dumper" and @disabled="disabled"]', 'not_available_test_dumper', 'Non available dumper input is disabled.'); + + // Ensures that saving of the dumpers configuration works as expected. + $edit = [ + 'dumper' => 'drupal_variable', + ]; + $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration')); + $this->assertSession()->pageTextContains(t('The configuration options have been saved.')); + + $config = \Drupal::config('devel.settings')->get('devel_dumper'); + $this->assertEquals('drupal_variable', $config, 'The configuration options have been properly saved'); + + // Ensure that if the chosen dumper is not available (e.g. the module that + // provide it is uninstalled) the 'default' dumper appears selected in the + // config page. + \Drupal::service('module_installer')->install(['kint']); + + $this->drupalGet('admin/config/development/devel'); + $this->assertFieldByXPath('//input[@name="dumper"]', 'kint'); + + $edit = [ + 'dumper' => 'kint', + ]; + $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration')); + $this->assertSession()->pageTextContains(t('The configuration options have been saved.')); + + $config = \Drupal::config('devel.settings')->get('devel_dumper'); + $this->assertEquals('kint', $config, 'The configuration options have been properly saved'); + + \Drupal::service('module_installer')->uninstall(['kint']); + + $this->drupalGet('admin/config/development/devel'); + $this->assertNoFieldByXPath('//input[@name="dumper"]', 'kint'); + $this->assertSession()->checkboxChecked('edit-dumper-default'); + } + + /** + * Test variable is dumped in page. + */ + function testDumpersOutput() { + $edit = [ + 'dumper' => 'available_test_dumper', + ]; + $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration')); + $this->assertSession()->pageTextContains(t('The configuration options have been saved.')); + + $this->drupalGet('devel_dumper_test/dump'); + $elements = $this->xpath('//body/pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::dump() Test output']); + $this->assertTrue(!empty($elements), 'Dumped message is present.'); + + $this->drupalGet('devel_dumper_test/message'); + $elements = $this->xpath('//div[contains(@class, "messages")]/pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::export() Test output']); + $this->assertTrue(!empty($elements), 'Dumped message is present.'); + + $this->drupalGet('devel_dumper_test/export'); + $elements = $this->xpath('//div[@class="layout-content"]//pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::export() Test output']); + $this->assertTrue(!empty($elements), 'Dumped message is present.'); + + $this->drupalGet('devel_dumper_test/export_renderable'); + $elements = $this->xpath('//div[@class="layout-content"]//pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::exportAsRenderable() Test output']); + $this->assertTrue(!empty($elements), 'Dumped message is present.'); + // Ensures that plugins can add libraries to the page when the + // ::exportAsRenderable() method is used. + $this->assertSession()->responseContains('devel_dumper_test/css/devel_dumper_test.css'); + $this->assertSession()->responseContains('devel_dumper_test/js/devel_dumper_test.js'); + + $debug_filename = file_directory_temp() . '/drupal_debug.txt'; + + $this->drupalGet('devel_dumper_test/debug'); + $file_content = file_get_contents($debug_filename); + $expected = <<AvailableTestDumper::export() Test output + +EOF; + $this->assertEquals($file_content, $expected, 'Dumped message is present.'); + + // Ensures that the DevelDumperManager::debug() is not access checked and + // that the dump is written in the debug file even if the user has not the + // 'access devel information' permission. + file_put_contents($debug_filename, ''); + $this->drupalLogout(); + $this->drupalGet('devel_dumper_test/debug'); + $file_content = file_get_contents($debug_filename); + $expected = <<AvailableTestDumper::export() Test output + +EOF; + $this->assertEquals($file_content, $expected, 'Dumped message is present.'); + } + +}