private function parse()
 {
     $headerBodyParts = explode("\n", $this->getConfiguration()->getRawOutput(), 2);
     $header = trim($headerBodyParts[0]);
     $body = trim($headerBodyParts[1]);
     if (ExceptionOutputParser::is($body)) {
         $exceptionOutputParser = new ExceptionOutputParser();
         $exceptionOutputParser->setRawOutput($body);
         $this->output->setException($exceptionOutputParser->getOutput());
         return;
     }
     if ($this->isIncorrectUsageOutput($header)) {
         $this->output->setIsIncorrectUsageOutput(true);
         return;
     }
     $this->rawHeader = $header;
     $this->rawBody = $body;
     $optionsParser = new OptionsParser();
     $optionsParser->setOptionsOutput($header);
     $messageParser = new MessageParser();
     $this->output->setOptions($optionsParser->getOptions());
     $bodyDom = new \DOMDocument();
     $bodyDom->loadXML($this->extractXmlContentFromBody($body));
     $container = $bodyDom->getElementsByTagName('observationresponse')->item(0);
     if ($this->isPassedNoMessagesOutput($container)) {
         return;
     }
     $this->output->setSourceUrl($container->getAttribute('ref'));
     $this->output->setDateTime(new \DateTime($container->getAttribute('date')));
     $messageElements = $container->getElementsByTagName('message');
     foreach ($messageElements as $messageElement) {
         /* @var $messageElement \DomElement */
         $messageParser->setMessageElement($messageElement);
         /* @var $message \webignition\CssValidatorOutput\Message\Message */
         $message = $messageParser->getMessage();
         if ($this->getConfiguration()->getReportVendorExtensionIssuesAsWarnings() && $message->isError() && $this->isVendorExtensionMessage($message)) {
             $message = \webignition\CssValidatorOutput\Message\Warning::fromError($message);
         }
         if ($message->isWarning() && $this->getConfiguration()->getIgnoreWarnings() === true) {
             continue;
         }
         if ($this->hasRefDomainToIgnore($message)) {
             continue;
         }
         if ($this->getConfiguration()->getIgnoreVendorExtensionIssues() === true && $this->isVendorExtensionMessage($message)) {
             continue;
         }
         if ($this->getConfiguration()->getIgnoreFalseImageDataUrlMessages() && $this->isFalseImageDataUrlMessage($message)) {
             continue;
         }
         $this->output->addMessage($message);
     }
 }
 public function testParseWithNoOutputSpecified()
 {
     $optionsParser = new CssValidatorOutputOptionsParser();
     $options = $optionsParser->getOptions();
     $this->assertNull($options);
 }