diff --git a/extras/ConfigSchema/DirectiveParser.php b/extras/ConfigSchema/DirectiveParser.php deleted file mode 100644 index 068c2bad..00000000 --- a/extras/ConfigSchema/DirectiveParser.php +++ /dev/null @@ -1,10 +0,0 @@ - 'DefaultKeyValue', + * 'KEY' => 'Value', + * 'KEY2' => 'Value2', + * 'MULTILINE-KEY' => "Multiline\nvalue.\n", + * ) + * + * We use this as an easy to use file-format for configuration schema + * files. + */ +class ConfigSchema_StringHashParser +{ + + public $default = 'ID'; + + public function parseFile($file) { + if (is_string($file)) $file = new FSTools_File($file); + if (!$file->exists()) throw new Exception('File does not exist'); + $file->open('r'); + $state = false; + $single = false; + $ret = array(); + while (($line = $file->getLine()) !== false) { + $line = rtrim($line, "\n\r"); + if (!$state && $line === '') continue; + if (strncmp('--', $line, 2) === 0) { + // Multiline declaration + $state = trim($line, '- '); + continue; + } elseif (!$state) { + $single = true; + if (strpos($line, ':') !== false) { + // Single-line declaration + list($state, $line) = explode(': ', $line, 2); + } else { + // Use default declaration + $state = $this->default; + } + } + if ($single) { + $ret[$state] = $line; + $single = false; + $state = false; + } else { + if (!isset($ret[$state])) $ret[$state] = ''; + $ret[$state] .= "$line\n"; + } + } + $file->close(); + return $ret; + } + +} diff --git a/tests/ConfigSchema/DirectiveParserTest.php b/tests/ConfigSchema/DirectiveParserTest.php deleted file mode 100644 index 933c123a..00000000 --- a/tests/ConfigSchema/DirectiveParserTest.php +++ /dev/null @@ -1,7 +0,0 @@ -parser = new ConfigSchema_StringHashParser(); + } + + /** + * Assert that $file gets parsed into the form of $expect + */ + function assertParse($file, $expect) { + $result = $this->parser->parseFile(dirname(__FILE__) . '/StringHashParser/' . $file); + $this->assertIdentical($result, $expect); + } + + function testSimple() { + $this->assertParse('Simple.txt', array( + 'ID' => 'Namespace.Directive', + 'TYPE' => 'string', + 'DESCRIPTION' => "Multiline\nstuff\n" + )); + } + + function testOverrideSingle() { + $this->assertParse('OverrideSingle.txt', array( + 'KEY' => 'New', + )); + } + + function testAppendMultiline() { + $this->assertParse('AppendMultiline.txt', array( + 'KEY' => "Line1\nLine2\n", + )); + } + + function testDefault() { + $this->parser->default = 'NEW-ID'; + $this->assertParse('Default.txt', array( + 'NEW-ID' => 'DefaultValue', + )); + } + +} diff --git a/tests/test_files.php b/tests/test_files.php index 91ccf672..dec38e1b 100644 --- a/tests/test_files.php +++ b/tests/test_files.php @@ -136,4 +136,4 @@ $test_files[] = 'FSTools/FileTest.php'; // ConfigSchema auxiliary library -$test_files[] = 'ConfigSchema/DirectiveParserTest.php'; +$test_files[] = 'ConfigSchema/StringHashParserTest.php';