public function testAcceptHeaderFromString()
 {
     $item = AcceptHeaderItem::fromString('text/html;q=0.5;version=1;charset="utf-8,ISO-8859-1"');
     $this->assertEquals('text/html', $item->getValue());
     $this->assertEquals('1', $item->getParameter('version'));
     $this->assertEquals('utf-8,ISO-8859-1', $item->getParameter('charset'));
 }
 /**
  * Factory create AcceptHeader from string representation.
  *
  * @param string $headerLine
  *
  * @return $this
  *
  * @throws InvalidArgumentException
  */
 public static function fromString($headerLine)
 {
     $headerLine = (string) $headerLine;
     $pos = strpos($headerLine, ':');
     $fieldName = substr($headerLine, 0, $pos);
     $header = new static();
     $items = array();
     if ($fieldName !== $header->getFieldName()) {
         throw new InvalidArgumentException(sprintf('Header "%s" can\'t parse value "%s".', $header->getFieldName(), $fieldName));
     }
     preg_match_all('#((("[^"\']++")|(\'[^"\']++\'))|[^,"\'])+#', trim(substr($headerLine, $pos + 1)), $items);
     foreach (array_map('trim', $items[0]) as $index => $itemValueString) {
         $item = AcceptHeaderItem::fromString($itemValueString);
         $item->setIndex($index);
         $header->add($item);
     }
     return $header;
 }