diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-02-12 18:06:32 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-02-12 18:07:58 +0100 |
commit | 357944693017572319334aa8943e888cde0e99c0 (patch) | |
tree | d5c7e79c674c3db637865e8f14356ef2235a81aa /3rdparty/simpletest/arguments.php | |
parent | 0917bdecddd74a48ee2b21f18e184c579d156b62 (diff) | |
download | nextcloud-server-357944693017572319334aa8943e888cde0e99c0.tar.gz nextcloud-server-357944693017572319334aa8943e888cde0e99c0.zip |
use SimpleTest for unit testing
includes some tests for storage providers, more to come
Diffstat (limited to '3rdparty/simpletest/arguments.php')
-rwxr-xr-x | 3rdparty/simpletest/arguments.php | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/3rdparty/simpletest/arguments.php b/3rdparty/simpletest/arguments.php new file mode 100755 index 00000000000..89e7f9de6ef --- /dev/null +++ b/3rdparty/simpletest/arguments.php @@ -0,0 +1,224 @@ +<?php +/** + * base include file for SimpleTest + * @package SimpleTest + * @subpackage UnitTester + * @version $Id: dumper.php 1909 2009-07-29 15:58:11Z dgheath $ + */ + +/** + * Parses the command line arguments. + * @package SimpleTest + * @subpackage UnitTester + */ +class SimpleArguments { + private $all = array(); + + /** + * Parses the command line arguments. The usual formats + * are supported: + * -f value + * -f=value + * --flag=value + * --flag value + * -f (true) + * --flag (true) + * @param array $arguments Normally the PHP $argv. + */ + function __construct($arguments) { + array_shift($arguments); + while (count($arguments) > 0) { + list($key, $value) = $this->parseArgument($arguments); + $this->assign($key, $value); + } + } + + /** + * Sets the value in the argments object. If multiple + * values are added under the same key, the key will + * give an array value in the order they were added. + * @param string $key The variable to assign to. + * @param string value The value that would norally + * be colected on the command line. + */ + function assign($key, $value) { + if ($this->$key === false) { + $this->all[$key] = $value; + } elseif (! is_array($this->$key)) { + $this->all[$key] = array($this->$key, $value); + } else { + $this->all[$key][] = $value; + } + } + + /** + * Extracts the next key and value from the argument list. + * @param array $arguments The remaining arguments to be parsed. + * The argument list will be reduced. + * @return array Two item array of key and value. + * If no value can be found it will + * have the value true assigned instead. + */ + private function parseArgument(&$arguments) { + $argument = array_shift($arguments); + if (preg_match('/^-(\w)=(.+)$/', $argument, $matches)) { + return array($matches[1], $matches[2]); + } elseif (preg_match('/^-(\w)$/', $argument, $matches)) { + return array($matches[1], $this->nextNonFlagElseTrue($arguments)); + } elseif (preg_match('/^--(\w+)=(.+)$/', $argument, $matches)) { + return array($matches[1], $matches[2]); + } elseif (preg_match('/^--(\w+)$/', $argument, $matches)) { + return array($matches[1], $this->nextNonFlagElseTrue($arguments)); + } + } + + /** + * Attempts to use the next argument as a value. It + * won't use what it thinks is a flag. + * @param array $arguments Remaining arguments to be parsed. + * This variable is modified if there + * is a value to be extracted. + * @return string/boolean The next value unless it's a flag. + */ + private function nextNonFlagElseTrue(&$arguments) { + return $this->valueIsNext($arguments) ? array_shift($arguments) : true; + } + + /** + * Test to see if the next available argument is a valid value. + * If it starts with "-" or "--" it's a flag and doesn't count. + * @param array $arguments Remaining arguments to be parsed. + * Not affected by this call. + * boolean True if valid value. + */ + function valueIsNext($arguments) { + return isset($arguments[0]) && ! $this->isFlag($arguments[0]); + } + + /** + * It's a flag if it starts with "-" or "--". + * @param string $argument Value to be tested. + * @return boolean True if it's a flag. + */ + function isFlag($argument) { + return strncmp($argument, '-', 1) == 0; + } + + /** + * The arguments are available as individual member + * variables on the object. + * @param string $key Argument name. + * @return string/array/boolean Either false for no value, + * the value as a string or + * a list of multiple values if + * the flag had been specified more + * than once. + */ + function __get($key) { + if (isset($this->all[$key])) { + return $this->all[$key]; + } + return false; + } + + /** + * The entire argument set as a hash. + * @return hash Each argument and it's value(s). + */ + function all() { + return $this->all; + } +} + +/** + * Renders the help for the command line arguments. + * @package SimpleTest + * @subpackage UnitTester + */ +class SimpleHelp { + private $overview; + private $flag_sets = array(); + private $explanations = array(); + + /** + * Sets up the top level explanation for the program. + * @param string $overview Summary of program. + */ + function __construct($overview = '') { + $this->overview = $overview; + } + + /** + * Adds the explanation for a group of flags that all + * have the same function. + * @param string/array $flags Flag and alternates. Don't + * worry about leading dashes + * as these are inserted automatically. + * @param string $explanation What that flag group does. + */ + function explainFlag($flags, $explanation) { + $flags = is_array($flags) ? $flags : array($flags); + $this->flag_sets[] = $flags; + $this->explanations[] = $explanation; + } + + /** + * Generates the help text. + * @returns string The complete formatted text. + */ + function render() { + $tab_stop = $this->longestFlag($this->flag_sets) + 4; + $text = $this->overview . "\n"; + for ($i = 0; $i < count($this->flag_sets); $i++) { + $text .= $this->renderFlagSet($this->flag_sets[$i], $this->explanations[$i], $tab_stop); + } + return $this->noDuplicateNewLines($text); + } + + /** + * Works out the longest flag for formatting purposes. + * @param array $flag_sets The internal flag set list. + */ + private function longestFlag($flag_sets) { + $longest = 0; + foreach ($flag_sets as $flags) { + foreach ($flags as $flag) { + $longest = max($longest, strlen($this->renderFlag($flag))); + } + } + return $longest; + } + + /** + * Generates the text for a single flag and it's alternate flags. + * @returns string Help text for that flag group. + */ + private function renderFlagSet($flags, $explanation, $tab_stop) { + $flag = array_shift($flags); + $text = str_pad($this->renderFlag($flag), $tab_stop, ' ') . $explanation . "\n"; + foreach ($flags as $flag) { + $text .= ' ' . $this->renderFlag($flag) . "\n"; + } + return $text; + } + + /** + * Generates the flag name including leading dashes. + * @param string $flag Just the name. + * @returns Fag with apropriate dashes. + */ + private function renderFlag($flag) { + return (strlen($flag) == 1 ? '-' : '--') . $flag; + } + + /** + * Converts multiple new lines into a single new line. + * Just there to trap accidental duplicate new lines. + * @param string $text Text to clean up. + * @returns string Text with no blank lines. + */ + private function noDuplicateNewLines($text) { + return preg_replace('/(\n+)/', "\n", $text); + } +} +?>
\ No newline at end of file |