Chris@13: $chunk) { Chris@13: $lastPart = array_pop($chunk); Chris@13: list($lastPart, $mode) = $this->extractMode($lastPart); Chris@13: $tests[] = [$mode, array_merge($chunk, [$lastPart])]; Chris@13: } Chris@13: Chris@13: return [$name, $tests]; Chris@13: } Chris@13: Chris@13: public function reconstructTest($name, array $tests) { Chris@13: $result = $name; Chris@13: foreach ($tests as list($mode, $parts)) { Chris@13: $lastPart = array_pop($parts); Chris@13: foreach ($parts as $part) { Chris@13: $result .= "\n-----\n$part"; Chris@13: } Chris@13: Chris@13: $result .= "\n-----\n"; Chris@13: if (null !== $mode) { Chris@13: $result .= "!!$mode\n"; Chris@13: } Chris@13: $result .= $lastPart; Chris@13: } Chris@13: return $result; Chris@13: } Chris@13: Chris@13: private function extractMode($expected) { Chris@13: $firstNewLine = strpos($expected, "\n"); Chris@13: if (false === $firstNewLine) { Chris@13: $firstNewLine = strlen($expected); Chris@13: } Chris@13: Chris@13: $firstLine = substr($expected, 0, $firstNewLine); Chris@13: if (0 !== strpos($firstLine, '!!')) { Chris@13: return [$expected, null]; Chris@13: } Chris@13: Chris@13: $expected = (string) substr($expected, $firstNewLine + 1); Chris@13: return [$expected, substr($firstLine, 2)]; Chris@13: } Chris@13: }