function FieldAttachOtherTestCase::testFieldAttachView in Drupal 7
Test field_attach_view() and field_attach_prepare_view().
File
- modules/
field/ tests/ field.test, line 719 - Tests for field.module.
Class
- FieldAttachOtherTestCase
- Unit test class for non-storage related field_attach_* functions.
Code
function testFieldAttachView() {
$this
->createFieldWithInstance('_2');
$entity_type = 'test_entity';
$entity_init = field_test_create_stub_entity();
$langcode = LANGUAGE_NONE;
$options = array(
'field_name' => $this->field_name_2,
);
// Populate values to be displayed.
$values = $this
->_generateTestFieldValues($this->field['cardinality']);
$entity_init->{$this->field_name}[$langcode] = $values;
$values_2 = $this
->_generateTestFieldValues($this->field_2['cardinality']);
$entity_init->{$this->field_name_2}[$langcode] = $values_2;
// Simple formatter, label displayed.
$entity = clone $entity_init;
$formatter_setting = $this
->randomName();
$this->instance['display'] = array(
'full' => array(
'label' => 'above',
'type' => 'field_test_default',
'settings' => array(
'test_formatter_setting' => $formatter_setting,
),
),
);
field_update_instance($this->instance);
$formatter_setting_2 = $this
->randomName();
$this->instance_2['display'] = array(
'full' => array(
'label' => 'above',
'type' => 'field_test_default',
'settings' => array(
'test_formatter_setting' => $formatter_setting_2,
),
),
);
field_update_instance($this->instance_2);
// View all fields.
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full');
$entity->content = field_attach_view($entity_type, $entity, 'full');
$output = drupal_render($entity->content);
$this->content = $output;
$this
->assertRaw($this->instance['label'], "First field's label is displayed.");
foreach ($values as $delta => $value) {
$this->content = $output;
$this
->assertRaw("{$formatter_setting}|{$value['value']}", "Value {$delta} is displayed, formatter settings are applied.");
}
$this
->assertRaw($this->instance_2['label'], "Second field's label is displayed.");
foreach ($values_2 as $delta => $value) {
$this->content = $output;
$this
->assertRaw("{$formatter_setting_2}|{$value['value']}", "Value {$delta} is displayed, formatter settings are applied.");
}
// View single field (the second field).
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full', $langcode, $options);
$entity->content = field_attach_view($entity_type, $entity, 'full', $langcode, $options);
$output = drupal_render($entity->content);
$this->content = $output;
$this
->assertNoRaw($this->instance['label'], "First field's label is not displayed.");
foreach ($values as $delta => $value) {
$this->content = $output;
$this
->assertNoRaw("{$formatter_setting}|{$value['value']}", "Value {$delta} is displayed, formatter settings are applied.");
}
$this
->assertRaw($this->instance_2['label'], "Second field's label is displayed.");
foreach ($values_2 as $delta => $value) {
$this->content = $output;
$this
->assertRaw("{$formatter_setting_2}|{$value['value']}", "Value {$delta} is displayed, formatter settings are applied.");
}
// Label hidden.
$entity = clone $entity_init;
$this->instance['display']['full']['label'] = 'hidden';
field_update_instance($this->instance);
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full');
$entity->content = field_attach_view($entity_type, $entity, 'full');
$output = drupal_render($entity->content);
$this->content = $output;
$this
->assertNoRaw($this->instance['label'], "Hidden label: label is not displayed.");
// Field hidden.
$entity = clone $entity_init;
$this->instance['display'] = array(
'full' => array(
'label' => 'above',
'type' => 'hidden',
),
);
field_update_instance($this->instance);
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full');
$entity->content = field_attach_view($entity_type, $entity, 'full');
$output = drupal_render($entity->content);
$this->content = $output;
$this
->assertNoRaw($this->instance['label'], "Hidden field: label is not displayed.");
foreach ($values as $delta => $value) {
$this
->assertNoRaw("{$formatter_setting}|{$value['value']}", "Hidden field: value {$delta} is not displayed.");
}
// Multiple formatter.
$entity = clone $entity_init;
$formatter_setting = $this
->randomName();
$this->instance['display'] = array(
'full' => array(
'label' => 'above',
'type' => 'field_test_multiple',
'settings' => array(
'test_formatter_setting_multiple' => $formatter_setting,
),
),
);
field_update_instance($this->instance);
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full');
$entity->content = field_attach_view($entity_type, $entity, 'full');
$output = drupal_render($entity->content);
$display = $formatter_setting;
foreach ($values as $delta => $value) {
$display .= "|{$delta}:{$value['value']}";
}
$this->content = $output;
$this
->assertRaw($display, "Multiple formatter: all values are displayed, formatter settings are applied.");
// Test a formatter that uses hook_field_formatter_prepare_view().
$entity = clone $entity_init;
$formatter_setting = $this
->randomName();
$this->instance['display'] = array(
'full' => array(
'label' => 'above',
'type' => 'field_test_with_prepare_view',
'settings' => array(
'test_formatter_setting_additional' => $formatter_setting,
),
),
);
field_update_instance($this->instance);
field_attach_prepare_view($entity_type, array(
$entity->ftid => $entity,
), 'full');
$entity->content = field_attach_view($entity_type, $entity, 'full');
$output = drupal_render($entity->content);
$this->content = $output;
foreach ($values as $delta => $value) {
$this->content = $output;
$expected = $formatter_setting . '|' . $value['value'] . '|' . ($value['value'] + 1);
$this
->assertRaw($expected, "Value {$delta} is displayed, formatter settings are applied.");
}
// TODO:
// - check display order with several fields
// Preprocess template.
$variables = array();
field_attach_preprocess($entity_type, $entity, $entity->content, $variables);
$result = TRUE;
foreach ($values as $delta => $item) {
if ($variables[$this->field_name][$delta]['value'] !== $item['value']) {
$result = FALSE;
break;
}
}
$this
->assertTrue($result, format_string('Variable $@field_name correctly populated.', array(
'@field_name' => $this->field_name,
)));
}