Version 1
[yaffs-website] / web / modules / contrib / devel / src / Tests / DevelDumperTest.php
1 <?php
2
3 namespace Drupal\devel\Tests;
4
5 use Drupal\Component\Render\FormattableMarkup;
6 use Drupal\simpletest\WebTestBase;
7
8 /**
9  * Tests pluggable dumper feature.
10  *
11  * @group devel
12  */
13 class DevelDumperTest extends WebTestBase {
14
15   /**
16    * Modules to enable.
17    *
18    * @var array
19    */
20   public static $modules = ['devel', 'devel_dumper_test'];
21
22   /**
23    * {@inheritdoc}
24    */
25   protected function setUp() {
26     parent::setUp();
27
28     $admin_user = $this->drupalCreateUser(['administer site configuration', 'access devel information']);
29     $this->drupalLogin($admin_user);
30   }
31
32   /**
33    * Test dumpers configuration page.
34    */
35   public function testDumpersConfiguration() {
36     $this->drupalGet('admin/config/development/devel');
37
38     // Ensures that the dumper input is present on the config page.
39     $this->assertFieldByName('dumper');
40
41     // Ensures that the 'default' dumper is enabled by default.
42     $this->assertFieldChecked('edit-dumper-default');
43
44     // Ensures that all dumpers declared by devel are present on the config page
45     // and that only the available dumpers are selectable.
46     $dumpers = ['default', 'drupal_variable', 'firephp', 'chromephp', 'var_dumper'];
47     $available_dumpers = ['default', 'drupal_variable'];
48
49     foreach ($dumpers as $dumper) {
50       $this->assertFieldByXPath('//input[@type="radio" and @name="dumper"]', $dumper, new FormattableMarkup('Radio button for @dumper found.', ['@dumper' => $dumper]));
51       if (in_array($dumper, $available_dumpers)) {
52         $this->assertFieldByXPath('//input[@name="dumper" and not(@disabled="disabled")]', $dumper, new FormattableMarkup('Dumper @dumper is available.', ['@dumper' => $dumper]));
53       }
54       else {
55         $this->assertFieldByXPath('//input[@name="dumper" and @disabled="disabled"]', $dumper, new FormattableMarkup('Dumper @dumper is disabled.', ['@dumper' => $dumper]));
56       }
57     }
58
59     // Ensures that dumper plugins declared by other modules are present on the
60     // config page and that only the available dumpers are selectable.
61     $this->assertFieldByName('dumper', 'available_test_dumper');
62     $this->assertText('Available test dumper.', 'Available dumper label is present');
63     $this->assertText('Drupal dumper for testing purposes (available).', 'Available dumper description is present');
64     $this->assertFieldByXPath('//input[@name="dumper" and not(@disabled="disabled")]', 'available_test_dumper', 'Available dumper input not is disabled.');
65
66     $this->assertFieldByName('dumper', 'not_available_test_dumper');
67     $this->assertText('Not available test dumper.', 'Non available dumper label is present');
68     $this->assertText('Drupal dumper for testing purposes (not available).Not available. You may need to install external dependencies for use this plugin.', 'Non available dumper description is present');
69     $this->assertFieldByXPath('//input[@name="dumper" and @disabled="disabled"]', 'not_available_test_dumper', 'Non available dumper input is disabled.');
70
71     // Ensures that saving of the dumpers configuration works as expected.
72     $edit = [
73       'dumper' => 'drupal_variable',
74     ];
75     $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration'));
76     $this->assertText(t('The configuration options have been saved.'));
77
78     $config = \Drupal::config('devel.settings')->get('devel_dumper');
79     $this->assertEqual('drupal_variable', $config, 'The configuration options have been properly saved');
80
81     // Ensure that if the chosen dumper is not available (e.g. the module that
82     // provide it is uninstalled) the 'default' dumper appears selected in the
83     // config page.
84     \Drupal::service('module_installer')->install(['kint']);
85
86     $this->drupalGet('admin/config/development/devel');
87     $this->assertFieldByName('dumper', 'kint');
88
89     $edit = [
90       'dumper' => 'kint',
91     ];
92     $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration'));
93     $this->assertText(t('The configuration options have been saved.'));
94
95     $config = \Drupal::config('devel.settings')->get('devel_dumper');
96     $this->assertEqual('kint', $config, 'The configuration options have been properly saved');
97
98     \Drupal::service('module_installer')->uninstall(['kint']);
99
100     $this->drupalGet('admin/config/development/devel');
101     $this->assertNoFieldByName('dumper', 'kint');
102     $this->assertFieldChecked('edit-dumper-default');
103   }
104
105   /**
106    * Test variable is dumped in page.
107    */
108   function testDumpersOutput() {
109     $edit = [
110       'dumper' => 'available_test_dumper',
111     ];
112     $this->drupalPostForm('admin/config/development/devel', $edit, t('Save configuration'));
113     $this->assertText(t('The configuration options have been saved.'));
114
115     $this->drupalGet('devel_dumper_test/dump');
116     $elements = $this->xpath('//body/pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::dump() Test output']);
117     $this->assertTrue(!empty($elements), 'Dumped message is present.');
118
119     $this->drupalGet('devel_dumper_test/message');
120     $elements = $this->xpath('//div[contains(@class, "messages")]/pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::export() Test output']);
121     $this->assertTrue(!empty($elements), 'Dumped message is present.');
122
123     $this->drupalGet('devel_dumper_test/export');
124     $elements = $this->xpath('//div[@class="layout-content"]//pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::export() Test output']);
125     $this->assertTrue(!empty($elements), 'Dumped message is present.');
126
127     $this->drupalGet('devel_dumper_test/export_renderable');
128     $elements = $this->xpath('//div[@class="layout-content"]//pre[contains(text(), :message)]', [':message' => 'AvailableTestDumper::exportAsRenderable() Test output']);
129     $this->assertTrue(!empty($elements), 'Dumped message is present.');
130     // Ensures that plugins can add libraries to the page when the
131     // ::exportAsRenderable() method is used.
132     $this->assertRaw('devel_dumper_test/css/devel_dumper_test.css');
133     $this->assertRaw('devel_dumper_test/js/devel_dumper_test.js');
134
135     $debug_filename = file_directory_temp() . '/drupal_debug.txt';
136
137     $this->drupalGet('devel_dumper_test/debug');
138     $file_content = file_get_contents($debug_filename);
139     $expected = <<<EOF
140 <pre>AvailableTestDumper::export() Test output</pre>
141
142 EOF;
143     $this->assertEqual($file_content, $expected, 'Dumped message is present.');
144
145     // Ensures that the DevelDumperManager::debug() is not access checked and
146     // that the dump is written in the debug file even if the user has not the
147     // 'access devel information' permission.
148     file_put_contents($debug_filename, '');
149     $this->drupalLogout();
150     $this->drupalGet('devel_dumper_test/debug');
151     $file_content = file_get_contents($debug_filename);
152     $expected = <<<EOF
153 <pre>AvailableTestDumper::export() Test output</pre>
154
155 EOF;
156     $this->assertEqual($file_content, $expected, 'Dumped message is present.');
157   }
158
159 }