You are here

public function GenericFieldTest::runTestGenericFieldInfo in Examples for Developers 7

Verify that all required fields are specified in hook_field_info().

The full list is label, description, settings, instance_settings, default_widget, default_formatter, no_ui.

Some are optional, and we won't check for those.

In a sane world, this would be a unit test, rather than a web test, but module_implements is unavailable to us in unit tests.

See also

hook_field_info()

1 call to GenericFieldTest::runTestGenericFieldInfo()
FieldTestPermissionsExample::testFieldnoteInfo in field_permission_example/tests/field_permission_example.test
Test of hook_field_info() and other implementation requirements.

File

field_permission_example/tests/field_permission_example.test, line 97
Tests for Field Permission Example.

Class

GenericFieldTest
A generic field testing class.

Code

public function runTestGenericFieldInfo() {
  $field_types = $this
    ->getFieldTypes();
  $module = $this
    ->getModule();
  $info_keys = array(
    'label',
    'description',
    'default_widget',
    'default_formatter',
  );

  // We don't want to use field_info_field_types()
  // because there is a hook_field_info_alter().
  // We're testing the module here, not the rest of
  // the system. So invoke hook_field_info() ourselves.
  $modules = module_implements('field_info');
  $this
    ->assertTrue(in_array($module, $modules), 'Module ' . $module . ' implements hook_field_info()');
  foreach ($field_types as $field_type) {
    $field_info = module_invoke($module, 'field_info');
    $this
      ->assertTrue(isset($field_info[$field_type]), 'Module ' . $module . ' defines field type ' . $field_type);
    $field_info = $field_info[$field_type];
    foreach ($info_keys as $key) {
      $this
        ->assertTrue(isset($field_info[$key]), $field_type . "'s " . $key . ' is set.');
    }
  }
}