Test picture formatters on node display.
public function _testPictureFieldFormatters($scheme) {
$field_name = drupal_strtolower($this
->randomName());
$this
->createImageField($field_name, 'article', array(
'uri_scheme' => $scheme,
));
// Create a new node with an image attached.
$test_image = current($this
->drupalGetTestFiles('image'));
$nid = $this
->uploadNodeImage($test_image, $field_name, 'article');
$node = node_load($nid, TRUE);
// Test that the default formatter is being used.
$image_uri = file_load($node->{$field_name}[Language::LANGCODE_NOT_SPECIFIED][0]['fid'])->uri;
$image_info = array(
'uri' => $image_uri,
'width' => 40,
'height' => 20,
);
$default_output = theme('image', $image_info);
$this
->assertRaw($default_output, 'Default formatter displaying correctly on full node view.');
// Use the picture formatter linked to file formatter.
$display_options = array(
'type' => 'picture',
'module' => 'picture',
'settings' => array(
'image_link' => 'file',
),
);
$display = entity_get_display('node', 'article', 'default');
$display
->setComponent($field_name, $display_options)
->save();
$default_output = l(theme('image', $image_info), file_create_url($image_uri), array(
'html' => TRUE,
));
$this
->drupalGet('node/' . $nid);
$this
->assertRaw($default_output, 'Image linked to file formatter displaying correctly on full node view.');
// Verify that the image can be downloaded.
$this
->assertEqual(file_get_contents($test_image->uri), $this
->drupalGet(file_create_url($image_uri)), 'File was downloaded successfully.');
if ($scheme == 'private') {
// Only verify HTTP headers when using private scheme and the headers are
// sent by Drupal.
$this
->assertEqual($this
->drupalGetHeader('Content-Type'), 'image/png', 'Content-Type header was sent.');
$this
->assertTrue(strstr($this
->drupalGetHeader('Cache-Control'), 'private') !== FALSE, 'Cache-Control header was sent.');
// Log out and try to access the file.
$this
->drupalLogout();
$this
->drupalGet(file_create_url($image_uri));
$this
->assertResponse('403', 'Access denied to original image as anonymous user.');
// Log in again.
$this
->drupalLogin($this->admin_user);
}
// Use the picture formatter with a picture mapping.
$display_options['settings']['picture_mapping'] = 'mapping_one';
$display
->setComponent($field_name, $display_options)
->save();
// Output should contain all image styles and all breakpoints.
$this
->drupalGet('node/' . $nid);
$this
->assertRaw('/styles/thumbnail/');
$this
->assertRaw('/styles/medium/');
$this
->assertRaw('/styles/large/');
$this
->assertRaw('media="(min-width: 200px)"');
$this
->assertRaw('media="(min-width: 400px)"');
$this
->assertRaw('media="(min-width: 600px)"');
// Test the fallback image style.
$display_options['settings']['image_link'] = '';
$display_options['settings']['fallback_image_style'] = 'large';
$display
->setComponent($field_name, $display_options)
->save();
$this
->drupalGet(image_style_url('large', $image_uri));
$image_info['uri'] = $image_uri;
$image_info['width'] = 480;
$image_info['height'] = 240;
$image_info['style_name'] = 'large';
$default_output = '<noscript>' . theme('image_style', $image_info) . '</noscript>';
$this
->drupalGet('node/' . $nid);
$this
->assertRaw($default_output, 'Image style thumbnail formatter displaying correctly on full node view.');
if ($scheme == 'private') {
// Log out and try to access the file.
$this
->drupalLogout();
$this
->drupalGet(image_style_url('large', $image_uri));
$this
->assertResponse('403', 'Access denied to image style thumbnail as anonymous user.');
}
}