annotate core/modules/field/tests/src/Kernel/FieldDefinitionIntegrityTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\field\Kernel;
Chris@0 4
Chris@0 5 use Drupal\Core\Extension\Extension;
Chris@0 6 use Drupal\KernelTests\KernelTestBase;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests the integrity of field API plugin definitions.
Chris@0 10 *
Chris@0 11 * @group field
Chris@0 12 */
Chris@0 13 class FieldDefinitionIntegrityTest extends KernelTestBase {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * @var array
Chris@0 17 */
Chris@0 18 public static $modules = ['system'];
Chris@0 19
Chris@0 20 /**
Chris@0 21 * Tests the integrity of field plugin definitions.
Chris@0 22 */
Chris@0 23 public function testFieldPluginDefinitionIntegrity() {
Chris@0 24
Chris@0 25 // Enable all core modules that provide field plugins.
Chris@0 26 $modules = system_rebuild_module_data();
Chris@0 27 $modules = array_filter($modules, function (Extension $module) {
Chris@0 28 // Filter contrib, hidden, already enabled modules and modules in the
Chris@0 29 // Testing package.
Chris@0 30 if ($module->origin === 'core'
Chris@0 31 && empty($module->info['hidden'])
Chris@0 32 && $module->status == FALSE
Chris@0 33 && $module->info['package'] !== 'Testing'
Chris@0 34 && is_readable($module->getPath() . '/src/Plugin/Field')) {
Chris@0 35 return TRUE;
Chris@0 36 }
Chris@0 37 return FALSE;
Chris@0 38 });
Chris@0 39 $this->enableModules(array_keys($modules));
Chris@0 40
Chris@0 41 /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_type_manager */
Chris@0 42 $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
Chris@0 43
Chris@0 44 /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_type_manager */
Chris@0 45 $field_formatter_manager = \Drupal::service('plugin.manager.field.formatter');
Chris@0 46
Chris@0 47 /** @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface $field_type_manager */
Chris@0 48 $field_widget_manager = \Drupal::service('plugin.manager.field.widget');
Chris@0 49
Chris@0 50 // Load the IDs of all available field type plugins.
Chris@0 51 $available_field_type_ids = [];
Chris@0 52 foreach ($field_type_manager->getDefinitions() as $definition) {
Chris@0 53 $available_field_type_ids[] = $definition['id'];
Chris@0 54 }
Chris@0 55
Chris@0 56 // Load the IDs of all available field widget plugins.
Chris@0 57 $available_field_widget_ids = [];
Chris@0 58 foreach ($field_widget_manager->getDefinitions() as $definition) {
Chris@0 59 $available_field_widget_ids[] = $definition['id'];
Chris@0 60 }
Chris@0 61
Chris@0 62 // Load the IDs of all available field formatter plugins.
Chris@0 63 $available_field_formatter_ids = [];
Chris@0 64 foreach ($field_formatter_manager->getDefinitions() as $definition) {
Chris@0 65 $available_field_formatter_ids[] = $definition['id'];
Chris@0 66 }
Chris@0 67
Chris@0 68 // Test the field type plugins.
Chris@0 69 foreach ($field_type_manager->getDefinitions() as $definition) {
Chris@0 70 // Test default field widgets.
Chris@0 71 if (isset($definition['default_widget'])) {
Chris@0 72 if (in_array($definition['default_widget'], $available_field_widget_ids)) {
Chris@0 73 $this->pass(sprintf('Field type %s uses an existing field widget by default.', $definition['id']));
Chris@0 74 }
Chris@0 75 else {
Chris@0 76 $this->fail(sprintf('Field type %s uses a non-existent field widget by default: %s', $definition['id'], $definition['default_widget']));
Chris@0 77 }
Chris@0 78 }
Chris@0 79
Chris@0 80 // Test default field formatters.
Chris@0 81 if (isset($definition['default_formatter'])) {
Chris@0 82 if (in_array($definition['default_formatter'], $available_field_formatter_ids)) {
Chris@0 83 $this->pass(sprintf('Field type %s uses an existing field formatter by default.', $definition['id']));
Chris@0 84 }
Chris@0 85 else {
Chris@0 86 $this->fail(sprintf('Field type %s uses a non-existent field formatter by default: %s', $definition['id'], $definition['default_formatter']));
Chris@0 87 }
Chris@0 88 }
Chris@0 89 }
Chris@0 90
Chris@0 91 // Test the field widget plugins.
Chris@0 92 foreach ($field_widget_manager->getDefinitions() as $definition) {
Chris@0 93 $missing_field_type_ids = array_diff($definition['field_types'], $available_field_type_ids);
Chris@0 94 if ($missing_field_type_ids) {
Chris@0 95 $this->fail(sprintf('Field widget %s integrates with non-existent field types: %s', $definition['id'], implode(', ', $missing_field_type_ids)));
Chris@0 96 }
Chris@0 97 else {
Chris@0 98 $this->pass(sprintf('Field widget %s integrates with existing field types.', $definition['id']));
Chris@0 99 }
Chris@0 100 }
Chris@0 101
Chris@0 102 // Test the field formatter plugins.
Chris@0 103 foreach ($field_formatter_manager->getDefinitions() as $definition) {
Chris@0 104 $missing_field_type_ids = array_diff($definition['field_types'], $available_field_type_ids);
Chris@0 105 if ($missing_field_type_ids) {
Chris@0 106 $this->fail(sprintf('Field formatter %s integrates with non-existent field types: %s', $definition['id'], implode(', ', $missing_field_type_ids)));
Chris@0 107 }
Chris@0 108 else {
Chris@0 109 $this->pass(sprintf('Field formatter %s integrates with existing field types.', $definition['id']));
Chris@0 110 }
Chris@0 111 }
Chris@0 112 }
Chris@0 113
Chris@0 114 }