/**
  * Tests responsive image formatter on node display with one source.
  */
 public function testResponsiveImageFieldFormattersOneSource()
 {
     $this->responsiveImgStyle->addImageStyleMapping('responsive_image_test_module.empty', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'medium'))->addImageStyleMapping('responsive_image_test_module.empty', '2x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'large'))->save();
     $node_storage = $this->container->get('entity.manager')->getStorage('node');
     $field_name = Unicode::strtolower($this->randomMachineName());
     $this->createImageField($field_name, 'article', array('uri_scheme' => 'public'));
     // Create a new node with an image attached.
     $test_image = current($this->drupalGetTestFiles('image'));
     $nid = $this->uploadNodeImage($test_image, $field_name, 'article', $this->randomMachineName());
     $node_storage->resetCache(array($nid));
     // Use the responsive image formatter linked to file formatter.
     $display_options = array('type' => 'responsive_image', 'settings' => array('image_link' => '', 'responsive_image_style' => 'style_one'));
     $display = entity_get_display('node', 'article', 'default');
     $display->setComponent($field_name, $display_options)->save();
     // View the node.
     $this->drupalGet('node/' . $nid);
     // Assert the media attribute is present if it has a value.
     $large_style = ImageStyle::load('large');
     $medium_style = ImageStyle::load('medium');
     $node = $node_storage->load($nid);
     $image_uri = File::load($node->{$field_name}->target_id)->getFileUri();
     $this->assertRaw('<img srcset="' . file_url_transform_relative($medium_style->buildUrl($image_uri)) . ' 1x, ' . file_url_transform_relative($large_style->buildUrl($image_uri)) . ' 2x"');
 }
 /**
  * Tests responsive image formatter on node display with an empty media query.
  */
 public function testResponsiveImageFieldFormattersEmptyMediaQuery()
 {
     $this->responsiveImgStyle->addImageStyleMapping('responsive_image_test_module.empty', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => RESPONSIVE_IMAGE_EMPTY_IMAGE))->addImageStyleMapping('responsive_image_test_module.mobile', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'thumbnail'))->save();
     $node_storage = $this->container->get('entity.manager')->getStorage('node');
     $field_name = Unicode::strtolower($this->randomMachineName());
     $this->createImageField($field_name, 'article', array('uri_scheme' => 'public'));
     // Create a new node with an image attached.
     $test_image = current($this->drupalGetTestFiles('image'));
     $nid = $this->uploadNodeImage($test_image, $field_name, 'article', $this->randomMachineName());
     $node_storage->resetCache(array($nid));
     // Use the responsive image formatter linked to file formatter.
     $display_options = array('type' => 'responsive_image', 'settings' => array('image_link' => '', 'responsive_image_style' => 'style_one'));
     $display = entity_get_display('node', 'article', 'default');
     $display->setComponent($field_name, $display_options)->save();
     // View the node.
     $this->drupalGet('node/' . $nid);
     // Assert an empty media attribute is not output.
     $this->assertNoPattern('@srcset="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 1x".+?media=".+?/><source@');
     // Assert the media attribute is present if it has a value.
     $thumbnail_style = ImageStyle::load('thumbnail');
     $node = $node_storage->load($nid);
     $image_uri = File::load($node->{$field_name}->target_id)->getFileUri();
     $this->assertPattern('/srcset="' . preg_quote($thumbnail_style->buildUrl($image_uri), '/') . ' 1x".+?media="\\(min-width: 0px\\)"/');
 }
 /**
  * @covers ::setBreakpointGroup
  * @covers ::getBreakpointGroup
  */
 public function testSetBreakpointGroup()
 {
     $entity = new ResponsiveImageStyle(array('breakpoint_group' => 'test_group'));
     $entity->addImageStyleMapping('test_breakpoint', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'large'));
     $entity->addImageStyleMapping('test_breakpoint', '2x', array('image_mapping_type' => 'sizes', 'image_mapping' => array('sizes' => '(min-width:700px) 700px, 100vw', 'sizes_image_styles' => array('large' => 'large'))));
     $entity->addImageStyleMapping('test_breakpoint2', '1x', array('image_mapping_type' => 'image_style', 'image_mapping' => 'thumbnail'));
     // Ensure that setting to same group does not remove mappings.
     $entity->setBreakpointGroup('test_group');
     $this->assertTrue($entity->hasImageStyleMappings());
     $this->assertEquals('test_group', $entity->getBreakpointGroup());
     // Ensure that changing the group removes mappings.
     $entity->setBreakpointGroup('test_group2');
     $this->assertEquals('test_group2', $entity->getBreakpointGroup());
     $this->assertFalse($entity->hasImageStyleMappings());
 }