/**
  * Sets the character set for this message.
  *
  * If the content type of this message is a text/* media type, the character
  * set in the respective Content-Type header will be updated by this method.
  *
  * @param string $charset A valid IANA character set identifier
  * @return \TYPO3\Flow\Http\Message This message, for method chaining
  * @see http://www.iana.org/assignments/character-sets
  * @api
  */
 public function setCharset($charset)
 {
     $this->charset = $charset;
     if ($this->headers->has('Content-Type')) {
         $contentType = $this->headers->get('Content-Type');
         if (stripos($contentType, 'text/') === 0) {
             $matches = array();
             if (preg_match('/(?P<contenttype>.*); ?charset[^;]+(?P<extra>;.*)?/iu', $contentType, $matches)) {
                 $contentType = $matches['contenttype'];
             }
             $contentType .= '; charset=' . $this->charset . (isset($matches['extra']) ? $matches['extra'] : '');
             $this->setHeader('Content-Type', $contentType, TRUE);
         }
     }
     return $this;
 }
 /**
  * @dataProvider cacheControlHeaders
  * @test
  */
 public function cacheControlHeaderPassedToSetIsParsedCorrectly($rawFieldValue, $renderedFieldValue)
 {
     $headers = new Headers();
     $this->assertFalse($headers->has('Cache-Control'));
     $headers->set('Cache-Control', $rawFieldValue);
     $this->assertTrue($headers->has('Cache-Control'));
     $this->assertEquals($renderedFieldValue, $headers->get('Cache-Control'));
 }