'Display tests', 'description' => 'Test the field group display.', 'group' => 'Field group', ); } function setUp() { parent::setUp('field_test', 'field_group', 'field_group_test'); $node = new stdClass(); $node->type = 'article'; $node->title = $this->randomName(); $node->status = 1; // Create test fields. $test_fields = array('field_test', 'field_test_2', 'field_no_access'); foreach ($test_fields as $field_name) { $field = array( 'field_name' => $field_name, 'type' => 'test_field', 'cardinality' => 1, ); $instance = array( 'field_name' => $field_name, 'entity_type' => 'node', 'bundle' => 'article', 'label' => $this->randomName(), 'display' => array( 'default' => array( 'type' => 'field_test_default', 'settings' => array( 'test_formatter_setting' => $this->randomName(), ), ), 'teaser' => array( 'type' => 'field_test_default', 'settings' => array( 'test_formatter_setting' => $this->randomName(), ), ), ), ); field_create_field($field); field_create_instance($instance); $node->{$field_name}[LANGUAGE_NONE][0]['value'] = mt_rand(1, 127); } node_save($node); $this->node = $node; } /** * Create a new group. * @param array $data * Data for the field group. */ function createGroup($mode, array $data) { $group_name = 'group_' . drupal_strtolower($this->randomName(8)); $identifier = $group_name . '|node|article|' . $mode; $field_group = new stdClass; $field_group->disabled = FALSE; $field_group->api_version = 1; $field_group->identifier = $identifier; $field_group->group_name = $group_name; $field_group->entity_type = 'node'; $field_group->bundle = 'article'; $field_group->mode = $mode; $field_group->parent_name = ''; $field_group->children = $data['children']; $field_group->data = $data; drupal_write_record('field_group', $field_group); ctools_export_crud_enable('field_group', $field_group->identifier); return $field_group; } /** * Test if an empty formatter. */ function testFieldAccess() { $data = array( 'label' => 'Wrapper', 'weight' => '1', 'children' => array( 0 => 'field_no_access', ), 'format_type' => 'div', 'format_settings' => array( 'label' => 'Link', 'instance_settings' => array( 'required_fields' => 0, 'id' => 'wrapper-id', 'classes' => 'test-class', 'description' => '', 'show_label' => FALSE, 'label_element' => 'h3', 'effect' => 'blink', 'speed' => 'fast', ), 'formatter' => 'open', ), ); $group = $this->createGroup('default', $data); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); // Test if group is not shown. $this->assertNoFieldByXPath("//div[contains(@id, 'wrapper-id')]", NULL, t('Div that contains fields with no access is not shown.')); } /** * Test the div formatter. */ function testDiv() { $data = array( 'label' => 'Wrapper', 'weight' => '1', 'children' => array( 0 => 'field_test', ), 'format_type' => 'div', 'format_settings' => array( 'label' => 'Link', 'instance_settings' => array( 'required_fields' => 0, 'id' => 'wrapper-id', 'classes' => 'test-class', 'description' => '', 'show_label' => FALSE, 'label_element' => 'h3', 'effect' => 'blink', 'speed' => 'fast', ), 'formatter' => 'open', ), ); $group = $this->createGroup('default', $data); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); // Test group ids and classes. $this->assertFieldByXPath("//div[contains(@id, 'wrapper-id')]", NULL, t('Wrapper id set on wrapper div')); $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, t('Test class set on wrapper div') . 'class="' . $group->group_name . ' test-class'); // Test group label. $this->assertNoRaw('

' . $data['label'] . '

', t('Label is not shown')); // Set show label to true. $group->data['format_settings']['instance_settings']['show_label'] = TRUE; drupal_write_record('field_group', $group, array('identifier')); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); $this->assertRaw('

' . $data['label'] . '

', t('Label is shown')); // Change to collapsible $group->data['format_settings']['formatter'] = 'collapsible'; drupal_write_record('field_group', $group, array('identifier')); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); $this->assertFieldByXPath("//div[contains(@class, 'speed-fast')]", NULL, t('Speed class is set')); $this->assertFieldByXPath("//div[contains(@class, 'effect-blink')]", NULL, t('Effect class is set')); } /** * Test the horizontal tabs formatter. */ function testHorizontalTabs() { $data = array( 'label' => 'Tab 1', 'weight' => '1', 'children' => array( 0 => 'field_test', ), 'format_type' => 'htab', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class', 'description' => '', ), 'formatter' => 'open', ), ); $first_tab = $this->createGroup('default', $data); $first_tab_id = 'node_article_full_' . $first_tab->group_name; $data = array( 'label' => 'Tab 2', 'weight' => '1', 'children' => array( 0 => 'field_test_2', ), 'format_type' => 'htab', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class-2', 'description' => 'description of second tab', ), 'formatter' => 'closed', ), ); $second_tab = $this->createGroup('default', $data); $second_tab_id = 'node_article_full_' . $first_tab->group_name; $data = array( 'label' => 'Tabs', 'weight' => '1', 'children' => array( 0 => $first_tab->group_name, 1 => $second_tab->group_name, ), 'format_type' => 'htabs', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class-wrapper', ), ), ); $tabs = $this->createGroup('default', $data); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); // Test properties. $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, t('Test class set on tabs wrapper')); $this->assertFieldByXPath("//fieldset[contains(@class, 'test-class-2')]", NULL, t('Test class set on second tab')); $this->assertRaw('
description of second tab
', t('Description of tab is shown')); $this->assertRaw('class="collapsible collapsed test-class-2', t('Second tab is default collapsed')); // Test if correctly nested $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//fieldset[contains(@id, '$first_tab_id')]", NULL, 'First tab is displayed as child of the wrapper.'); $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//fieldset[contains(@id, '$second_tab_id')]", NULL, 'Second tab is displayed as child of the wrapper.'); } /** * Test the vertical tabs formatter. */ function testVerticalTabs() { $data = array( 'label' => 'Tab 1', 'weight' => '1', 'children' => array( 0 => 'field_test', ), 'format_type' => 'tab', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class', 'description' => '', ), 'formatter' => 'open', ), ); $first_tab = $this->createGroup('default', $data); $first_tab_id = 'node_article_full_' . $first_tab->group_name; $data = array( 'label' => 'Tab 2', 'weight' => '1', 'children' => array( 0 => 'field_test_2', ), 'format_type' => 'tab', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class-2', 'description' => 'description of second tab', ), 'formatter' => 'closed', ), ); $second_tab = $this->createGroup('default', $data); $second_tab_id = 'node_article_full_' . $first_tab->group_name; $data = array( 'label' => 'Tabs', 'weight' => '1', 'children' => array( 0 => $first_tab->group_name, 1 => $second_tab->group_name, ), 'format_type' => 'tabs', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class-wrapper', ), ), ); $tabs = $this->createGroup('default', $data); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); // Test properties. $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, t('Test class set on tabs wrapper')); $this->assertFieldByXPath("//fieldset[contains(@class, 'test-class-2')]", NULL, t('Test class set on second tab')); $this->assertRaw('
description of second tab
', t('Description of tab is shown')); $this->assertRaw('class="collapsible collapsed test-class-2', t('Second tab is default collapsed')); // Test if correctly nested $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//fieldset[contains(@id, '$first_tab_id')]", NULL, 'First tab is displayed as child of the wrapper.'); $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//fieldset[contains(@id, '$second_tab_id')]", NULL, 'Second tab is displayed as child of the wrapper.'); } /** * Test the accordion formatter. */ function testAccordion() { $data = array( 'label' => 'Accordion item 1', 'weight' => '1', 'children' => array( 0 => 'field_test', ), 'format_type' => 'accordion-item', 'format_settings' => array( 'label' => 'Accordion item 1', 'instance_settings' => array( 'classes' => 'test-class', ), 'formatter' => 'closed', ), ); $first_item = $this->createGroup('default', $data); $first_item_id = 'node_article_full_' . $first_item->group_name; $data = array( 'label' => 'Accordion item 2', 'weight' => '1', 'children' => array( 0 => 'field_test_2', ), 'format_type' => 'accordion-item', 'format_settings' => array( 'label' => 'Tab 2', 'instance_settings' => array( 'classes' => 'test-class-2', ), 'formatter' => 'open', ), ); $second_item = $this->createGroup('default', $data); $second_item_id = 'node_article_full_' . $second_item->group_name; $data = array( 'label' => 'Accordion', 'weight' => '1', 'children' => array( 0 => $first_item->group_name, 1 => $second_item->group_name, ), 'format_type' => 'accordion', 'format_settings' => array( 'label' => 'Tab 1', 'instance_settings' => array( 'classes' => 'test-class-wrapper', 'effect' => 'bounceslide' ), ), ); $accordion = $this->createGroup('default', $data); $groups = field_group_info_groups('node', 'article', 'default', TRUE); $this->drupalGet('node/' . $this->node->nid); // Test properties. $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, t('Test class set on tabs wrapper')); $this->assertFieldByXPath("//div[contains(@class, 'effect-bounceslide')]", NULL, t('Correct effect is set on the accordion')); $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, t('Accordion item with test-class is shown')); $this->assertFieldByXPath("//div[contains(@class, 'test-class-2')]", NULL, t('Accordion item with test-class-2 is shown')); $this->assertFieldByXPath("//h3[contains(@class, 'field-group-accordion-active')]", NULL, t('Accordion item 2 was set active')); // Test if correctly nested $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//div[contains(@class, 'test-class')]", NULL, 'First item is displayed as child of the wrapper.'); $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//div[contains(@class, 'test-class-2')]", NULL, 'Second item is displayed as child of the wrapper.'); } }