diff --git a/package.xml b/package.xml index d1e5942..d984b81 100644 --- a/package.xml +++ b/package.xml @@ -43,7 +43,7 @@ New BSD License - Initial release. + - @@ -66,6 +66,12 @@ ${contents} 3.0.0 3.999.9999 + + Lousson_Container + pear.lousson.org + 1.1.2 + 1.999.999 + Lousson_Sniffs pear.lousson.org @@ -77,12 +83,6 @@ ${contents} 1.0.0 1.999.999 - - Yaml - pear.symfony.com - 2.3.1 - 2.999.999 - diff --git a/phpunit.xml.dist b/phpunit.xml.dist index dcb7422..7cf0d2e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -22,6 +22,7 @@ src/php/Lousson/Record/AnyRecordHandler.php src/php/Lousson/Record/AnyRecordManager.php src/php/Lousson/Record/AnyRecordParser.php + src/php/Lousson/Record/AnyRecordPlugin.php diff --git a/src/php/Lousson/Record/AnyRecordPlugin.php b/src/php/Lousson/Record/AnyRecordPlugin.php new file mode 100644 index 0000000..c448f60 --- /dev/null +++ b/src/php/Lousson/Record/AnyRecordPlugin.php @@ -0,0 +1,70 @@ + + * @filesource + */ +namespace Lousson\Record; + +/** Dependencies: */ +use Lousson\Container\Generic\GenericContainer; + +/** + * An interface for record plugins + * + * The AnyRecordPlugin interface declares the API to be provided by + * plugin loader classes, e.g. in the Lousson\Record\Plugin namespace. + * + * @since lousson/Lousson_Record-2.0.0 + * @package org.lousson.record + */ +interface AnyRecordPlugin +{ + /** + * Set up and register the plugin + * + * The bootstrap() method is used by e.g. the BuiltinRecordFactory, + * in order to load, set up and register the plugin with the context + * plugin $container. + * + * @param GenericContainer $container The plugin container + */ + public static function bootstrap(GenericContainer $container); +} + diff --git a/src/php/Lousson/Record/Builtin/BuiltinRecordFactory.php b/src/php/Lousson/Record/Builtin/BuiltinRecordFactory.php index e871018..8ef36b0 100644 --- a/src/php/Lousson/Record/Builtin/BuiltinRecordFactory.php +++ b/src/php/Lousson/Record/Builtin/BuiltinRecordFactory.php @@ -42,11 +42,20 @@ */ namespace Lousson\Record\Builtin; -/** Dependencies: */ +/** Interfaces: */ +use Lousson\Container\AnyContainer; +use Lousson\Record\AnyRecordBuilder; +use Lousson\Record\AnyRecordHandler; use Lousson\Record\AnyRecordFactory; +use Lousson\Record\AnyRecordParser; + +/** Dependencies: */ +use Lousson\Container\Generic\GenericContainerDecorator; +use Lousson\Container\Generic\GenericContainer; use Lousson\Record\Builtin\BuiltinRecordUtil; + +/** Exceptions: */ use Lousson\Record\Error\RecordRuntimeError; -use Lousson\Record\Generic\GenericRecordHandler; /** * The builtin record factory @@ -60,6 +69,24 @@ */ class BuiltinRecordFactory implements AnyRecordFactory { + /** + * Create a container instance + * + * The constructor allows the caller to provide a custom container + * instance to be used as root when loading plugins - instead of the + * default, empty one. + * + * @param AnyContainer $container The factory container + */ + public function __construct(AnyContainer $container = null) + { + if (null === $container) { + $container = new GenericContainer(); + } + + $this->root = $container; + } + /** * Obtain a record parser * @@ -77,13 +104,9 @@ class BuiltinRecordFactory implements AnyRecordFactory */ public function getRecordParser($type) { - $normalizedType = BuiltinRecordUtil::normalizeType($type); + $parser = $this->getRecordEntity($type, "record.parser"); - if (isset($this->parsers[$normalizedType])) { - $class = $this->parsers[$normalizedType]; - $parser = new $class(); - } - else { + if (!$parser instanceof AnyRecordParser) { $parser = $this->getRecordHandler($type); } @@ -107,7 +130,12 @@ public function getRecordParser($type) */ public function getRecordBuilder($type) { - $builder = $this->getRecordHandler($type); + $builder = $this->getRecordEntity($type, "record.builder"); + + if (!$builder instanceof AnyRecordBuilder) { + $builder = $this->getRecordHandler($type); + } + return $builder; } @@ -128,14 +156,10 @@ public function getRecordBuilder($type) */ public function getRecordHandler($type) { - $normalizedType = BuiltinRecordUtil::normalizeType($type); + $handler = $this->getRecordEntity($type, "record.handler"); - if (isset($this->handlers[$normalizedType])) { - $class = $this->handlers[$normalizedType]; - $handler = new $class(); - } - else { - $message = "Could not provide \"$normalizedType\" handler"; + if (!$handler instanceof AnyRecordHandler) { + $message = "Could not provide \"$type\" handler"; $code = RecordRuntimeError::E_NOT_SUPPORTED; throw new RecordRuntimeError($message, $code); } @@ -157,12 +181,14 @@ public function getRecordHandler($type) */ public function hasRecordParser($type) { - $normalizedType = BuiltinRecordUtil::normalizeType($type); - $hasRecordParser = - isset($this->handlers[$normalizedType]) || - isset($this->parsers[$normalizedType]); + $parser = $this->getRecordEntity($type, "record.parser"); + $hasParser = $parser instanceof AnyRecordParser; - return $hasRecordParser; + if (!$hasParser) { + $hasParser = $this->hasRecordHandler($type); + } + + return $hasParser; } /** @@ -179,12 +205,14 @@ public function hasRecordParser($type) */ public function hasRecordBuilder($type) { - $normalizedType = BuiltinRecordUtil::normalizeType($type); - $hasRecordBuilder = - isset($this->handlers[$normalizedType]) || - isset($this->builders[$normalizedType]); + $builder = $this->getRecordEntity($type, "record.builder"); + $hasBuilder = $builder instanceof AnyRecordBuilder; - return $hasRecordBuilder; + if (!$hasBuilder) { + $hasBuilder = $this->hasRecordHandler($type); + } + + return $hasBuilder; } /** @@ -201,47 +229,107 @@ public function hasRecordBuilder($type) */ public function hasRecordHandler($type) { - $hasRecordParser = $this->hasRecordParser($type); - $hasRecordBuilder = $this->hasRecordBuilder($type); - $hasRecordHandler = $hasRecordParser && $hasRecordBuilder; + $handler = $this->getRecordEntity($type, "record.handler"); + $hasHandler = $handler instanceof AnyRecordHandler; + return $hasHandler; + } + + /** + * Obtain an entity instance + * + * The getRecordEntity() method is used internally to retrieve the + * object that is associated with the given $name from the container + * associated with the given mime $type. + * + * @param string $type The media type + * @param string $name The entity name + * + * @return object + * An object is returned on success, NULL otherwise + * + * @throws \Lousson\Record\AnyRecordException + * All exceptions raised implement this interface + * + * @throws \InvalidArgumentException + * Raised in case the $type parameter is malformed + */ + protected function getRecordEntity($type, $name) + { + $type = BuiltinRecordUtil::normalizeType($type); + $entity = null; + $index = "$name.$type"; - return $hasRecordHandler; + if (!isset($this->containers)) { + $this->loadRecordContainers(); + } + + foreach ($this->containers as $container) { + if ($entity = $container->get($index)->orNull()->asObject()) { + break; + } + } + + return $entity; } /** - * A register of builtin parser classes + * Populate the $containers member + * + * The loadRecordContainers() method is used internally to load the + * plugins to be bound to the factory, populating the $containers for + * later use via getRecordContainer(). + */ + private function loadRecordContainers() + { + $plugins = $this->root + ->get("record.plugins") + ->orFallback(self::$plugins) + ->asArray(); + + $plugins = array_filter( + $plugins, function($className) { + return class_exists($className) && is_subclass_of( + $className, "Lousson\\Record\\AnyRecordPlugin" + ); + } + ); + + foreach ($plugins as $className) try { + $child = new GenericContainerDecorator($this->root); + call_user_func(array($className, "bootstrap"), $child); + $this->containers[] = $child; + } + catch (\Exception $error) { + $message = "While loading $className plugin: Caught $error"; + trigger_error($message, E_USER_WARNING); + } + + $this->containers[] = $this->root; + } + + /** + * The default plugins that ship with the package * * @var array */ - private $parsers = array( - "application/textedit" => - "Lousson\\Record\\Builtin\\Parser\\BuiltinRecordParserINI", - "zz-application/zz-winassoc-ini" => - "Lousson\\Record\\Builtin\\Parser\\BuiltinRecordParserINI", + private static $plugins = array( + "Lousson\\Record\\Plugin\\INI", + "Lousson\\Record\\Plugin\\JSON", + "Lousson\\Record\\Plugin\\PHP", ); /** - * A register of builtin handler classes + * The containers loaded from plugins * * @var array */ - private $handlers = array( - "application/json" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerJSON", - "application/vnd.php.serialized" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerPHP", - "text/json" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerJSON", - "text/x-json" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerJSON", - "text/yaml" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerYAML", - "text/x-yaml" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerYAML", - "application/yaml" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerYAML", - "application/x-yaml" => - "Lousson\\Record\\Builtin\\Handler\\BuiltinRecordHandlerYAML", - ); + private $containers; + + /** + * The root container provided at construction time + * + * @var \Lousson\Container\AnyContainer + */ + private $root; } diff --git a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSON.php b/src/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSON.php similarity index 98% rename from src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSON.php rename to src/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSON.php index 195866d..7a3899c 100644 --- a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSON.php +++ b/src/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSON.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Handler\BuiltinRecordHandlerJSON definition + * Lousson\Record\Builtin\BuiltinRecordHandlerJSON definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,7 +40,7 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Handler; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AnyRecordHandler; diff --git a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHP.php b/src/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHP.php similarity index 97% rename from src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHP.php rename to src/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHP.php index e7641e2..ce63ef6 100644 --- a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHP.php +++ b/src/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHP.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHP class definition + * Lousson\Record\Builtin\BuiltinRecordHandlerPHP class definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,7 +40,7 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Handler; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AnyRecordHandler; diff --git a/src/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINI.php b/src/php/Lousson/Record/Builtin/BuiltinRecordParserINI.php similarity index 97% rename from src/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINI.php rename to src/php/Lousson/Record/Builtin/BuiltinRecordParserINI.php index b92d630..901a861 100644 --- a/src/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINI.php +++ b/src/php/Lousson/Record/Builtin/BuiltinRecordParserINI.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Parser\BuiltinRecordParserINI class definition + * Lousson\Record\Builtin\BuiltinRecordParserINI class definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,7 +40,7 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Parser; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AnyRecordParser; diff --git a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAML.php b/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAML.php deleted file mode 100644 index 859eb33..0000000 --- a/src/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAML.php +++ /dev/null @@ -1,167 +0,0 @@ - - * @filesource - */ -namespace Lousson\Record\Builtin\Handler; - -/** Interfaces: */ -use Lousson\Record\AnyRecordHandler; - -/** Dependencies: */ -use Lousson\Record\Builtin\BuiltinRecordHandler; -use Symfony\Component\Yaml; - -/** Exceptions: */ -use Lousson\Record\Error\RecordArgumentError; -use Lousson\Record\Error\RecordRuntimeError; - -/** - * A YAML record handler - * - * @since lousson/Lousson_Record-0.6.0 - * @package org.lousson.record - */ -class BuiltinRecordHandlerYAML - extends BuiltinRecordHandler - implements AnyRecordHandler -{ - /** - * Create a handler instance - * - * The constructor allows the caller to provide YAML parser and - * dumper instances to be used instead of those that would otherwise - * be created at runtime. - * - * @param Yaml\Parser $parser The YAML parser - * @param Yaml\Dumper $dumper The YAML dumper - */ - public function __construct( - Yaml\Parser $parser = null, - Yaml\Dumper $dumper = null - ) { - $this->parser = $parser; - $this->dumper = $dumper; - } - - /** - * Build record content - * - * The buildRecord() method returns a byte sequence representing the - * given $record in its serialized form. - * - * @param array $data The record's data - * - * @return string - * The serialized record is returned on success - * - * @throws \Lousson\Record\AnyRecordException - * Raised in case of malformed $data or internal errors - */ - public function buildRecord(array $data) - { - $record = $this->normalizeInputData($data); - - if (!isset($this->dumper)) { - $this->dumper = new Yaml\Dumper(); - } - - try { - $sequence = $this->dumper->dump($record); - } - catch (\Exception $error) { - $class = get_class($error); - $message = "Failed to build YAML record: Caught $class"; - $code = RecordRuntimeError::E_UNKNOWN; - throw new RecordRuntimeError($message, $code, $error); - } - - return $sequence; - } - - /** - * Parse record content - * - * The parseRecord() method returns an array representing the given - * byte $sequence in its unserialized form. - * - * @param string $sequence The record's byte sequence - * - * @return array - * The unserialized record is returned on success - * - * @throws \Lousson\Record\AnyRecordException - * Indicates a malformed $sequence or an internal error - */ - public function parseRecord($sequence) - { - if (!isset($this->parser)) { - $this->parser = new Yaml\Parser(); - } - - try { - $data = $this->parser->parse($sequence); - } - catch (\Exception $error) { - $class = get_class($error); - $message = "Could not parse YAML record: Caught $class"; - $code = RecordArgumentError::E_UNKNOWN; - throw new RecordArgumentError($message, $code, $error); - } - - $record = $this->normalizeOutputData($data); - return $record; - } - - /** - * The YAML parser instance in use - * - * @var \Symfony\Component\Yaml\Parser - */ - private $parser; - - /** - * The YAML dumper instance in use - * - * @var \Symfony\Component\Yaml\Dumper - */ - private $dumper; -} - diff --git a/src/php/Lousson/Record/Plugin/INI.php b/src/php/Lousson/Record/Plugin/INI.php new file mode 100644 index 0000000..f83532f --- /dev/null +++ b/src/php/Lousson/Record/Plugin/INI.php @@ -0,0 +1,91 @@ + + * @filesource + */ +namespace Lousson\Record\Plugin; + +/** Interfaces: */ +use Lousson\Container\AnyContainer; +use Lousson\Record\AnyRecordPlugin; + +/** Dependencies: */ +use Lousson\Container\Generic\GenericContainer; +use Lousson\Record\Builtin\BuiltinRecordParserINI; + +/** + * A INI record plugin + * + * The Lousson\Record\Plugin\INI class is a plugin for e.g. the builtin + * record factory that ships with the Lousson_Record package, providing a + * INI record parser - including a set of associated mime-types. + * + * @since lousson/Lousson_Record-2.0.0 + * @package org.lousson.record + */ +class INI implements AnyRecordPlugin +{ + /** + * Set up and register the INI plugin + * + * The bootstrap() method is used by e.g. the BuiltinRecordFactory, + * in order to load, set up and register the plugin with the factory's + * plugin $container. + * + * @param GenericContainer $container The plugin container + */ + public static function bootstrap(GenericContainer $container) + { + $callback = function(AnyContainer $container, $name) { + $parser = new BuiltinRecordParserINI(); + return $parser; + }; + + $aliases = array( + "record.parser.application/textedit", + "record.parser.text/plain", + "record.parser.zz-application/zz-winassoc-ini", + ); + + $container->share("record.parser.ini", $callback); + $container->alias("record.parser.ini", $aliases); + } +} + diff --git a/src/php/Lousson/Record/Plugin/JSON.php b/src/php/Lousson/Record/Plugin/JSON.php new file mode 100644 index 0000000..12e7bf8 --- /dev/null +++ b/src/php/Lousson/Record/Plugin/JSON.php @@ -0,0 +1,92 @@ + + * @filesource + */ +namespace Lousson\Record\Plugin; + +/** Interfaces: */ +use Lousson\Container\AnyContainer; +use Lousson\Record\AnyRecordPlugin; + +/** Dependencies: */ +use Lousson\Container\Generic\GenericContainer; +use Lousson\Record\Builtin\BuiltinRecordHandlerJSON; + +/** + * A JSON record plugin + * + * The Lousson\Record\Plugin\JSON class is a plugin for e.g. the builtin + * record factory that ships with the Lousson_Record package, providing a + * JSON record handler - including a set of associated mime-types. + * + * @since lousson/Lousson_Record-2.0.0 + * @package org.lousson.record + */ +class JSON implements AnyRecordPlugin +{ + /** + * Set up and register the JSON plugin + * + * The bootstrap() method is used by e.g. the BuiltinRecordFactory, + * in order to load, set up and register the plugin with the factory's + * plugin $container. + * + * @param GenericContainer $container The plugin container + */ + public static function bootstrap(GenericContainer $container) + { + $callback = function(AnyContainer $container, $name) { + $handler = new BuiltinRecordHandlerJSON(); + return $handler; + }; + + $aliases = array( + "record.handler.application/json", + "record.handler.application/x-json", + "record.handler.text/json", + "record.handler.text/x-json", + ); + + $container->share("record.handler.json", $callback); + $container->alias("record.handler.json", $aliases); + } +} + diff --git a/src/php/Lousson/Record/Plugin/PHP.php b/src/php/Lousson/Record/Plugin/PHP.php new file mode 100644 index 0000000..31ab68c --- /dev/null +++ b/src/php/Lousson/Record/Plugin/PHP.php @@ -0,0 +1,85 @@ + + * @filesource + */ +namespace Lousson\Record\Plugin; + +/** Interfaces: */ +use Lousson\Container\AnyContainer; +use Lousson\Record\AnyRecordPlugin; + +/** Dependencies: */ +use Lousson\Container\Generic\GenericContainer; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHP; + +/** + * A PHP record plugin + * + * The Lousson\Record\Plugin\PHP class is a plugin for e.g. the builtin + * record factory that ships with the Lousson_Record package, providing a + * PHP record handler - including a set of associated mime-types. + * + * @since lousson/Lousson_Record-2.0.0 + * @package org.lousson.record + */ +class PHP implements AnyRecordPlugin +{ + /** + * Set up and register the PHP plugin + * + * The bootstrap() method is used by e.g. the BuiltinRecordFactory, + * in order to load, set up and register the plugin with the factory's + * plugin $container. + * + * @param GenericContainer $container The plugin container + */ + public static function bootstrap(GenericContainer $container) + { + $callback = function(AnyContainer $container, $name) { + $handler = new BuiltinRecordHandlerPHP(); + return $handler; + }; + + $name = "record.handler.application/vnd.php.serialized"; + $container->share($name, $callback); + } +} + diff --git a/src/tests/unit-tests/php/Lousson/Record/AbstractRecordManagerTest.php b/src/tests/unit-tests/php/Lousson/Record/AbstractRecordManagerTest.php index 0c83849..6ec2102 100644 --- a/src/tests/unit-tests/php/Lousson/Record/AbstractRecordManagerTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/AbstractRecordManagerTest.php @@ -142,6 +142,8 @@ public function smokeTest(array $data, $type = null) "The %s::loadRecord() method must return the same value ". "formerly saved via saveRecord()", $managerClass )); + + unlink($location); } } diff --git a/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordFactoryTest.php b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordFactoryTest.php index 24d11ac..6a41e4d 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordFactoryTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordFactoryTest.php @@ -87,10 +87,6 @@ public function provideBuilderMediaTypes() array("application/vnd.php.serialized"), array("text/json"), array("text/x-json"), - array("text/yaml"), - array("text/x-yaml"), - array("application/yaml"), - array("application/x-yaml"), ); } @@ -113,10 +109,6 @@ public function provideParserMediaTypes() array("text/json"), array("text/x-json"), array("zz-application/zz-winassoc-ini"), - array("text/yaml"), - array("text/x-yaml"), - array("application/yaml"), - array("application/x-yaml"), ); } } diff --git a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSONTest.php b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSONTest.php similarity index 97% rename from src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSONTest.php rename to src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSONTest.php index 2302028..406c014 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerJSONTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerJSONTest.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Builder\BuiltinRecordHandlerJSONTest definition + * Lousson\Record\Builtin\BuiltinRecordHandlerJSONTest definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,11 +40,11 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Builder; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AbstractRecordHandlerTest; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerJSON; +use Lousson\Record\Builtin\BuiltinRecordHandlerJSON; use ReflectionException; use ReflectionMethod; diff --git a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHPTest.php b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHPTest.php similarity index 96% rename from src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHPTest.php rename to src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHPTest.php index 27a7a38..1aa5956 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerPHPTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordHandlerPHPTest.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHPTest definition + * Lousson\Record\Builtin\BuiltinRecordHandlerPHPTest definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,11 +40,11 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Handler; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AbstractRecordHandlerTest; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHP; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHP; /** * A test case for the builtin PHP record builder diff --git a/src/tests/unit-tests/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINITest.php b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordParserINITest.php similarity index 96% rename from src/tests/unit-tests/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINITest.php rename to src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordParserINITest.php index a01b7ea..a653add 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Builtin/Parser/BuiltinRecordParserINITest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Builtin/BuiltinRecordParserINITest.php @@ -32,7 +32,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** - * Lousson\Record\Builtin\Parser\BuiltinRecordParserINITest definition + * Lousson\Record\Builtin\BuiltinRecordParserINITest definition * * @package org.lousson.record * @copyright (c) 2013, The Lousson Project @@ -40,11 +40,11 @@ * @author Mathias J. Hennig * @filesource */ -namespace Lousson\Record\Builtin\Parser; +namespace Lousson\Record\Builtin; /** Dependencies: */ use Lousson\Record\AbstractRecordHandlerTest; -use Lousson\Record\Builtin\Parser\BuiltinRecordParserINI; +use Lousson\Record\Builtin\BuiltinRecordParserINI; use ReflectionException; use ReflectionMethod; diff --git a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAMLTest.php b/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAMLTest.php deleted file mode 100644 index b846854..0000000 --- a/src/tests/unit-tests/php/Lousson/Record/Builtin/Handler/BuiltinRecordHandlerYAMLTest.php +++ /dev/null @@ -1,182 +0,0 @@ - - * @filesource - */ -namespace Lousson\Record\Builtin\Handler; - -/** Dependencies: */ -use Lousson\Record\AbstractRecordHandlerTest; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerYAML; -use ReflectionException; -use ReflectionMethod; - -/** - * A test case for the builtin YAML record builder - * - * @since lousson/Lousson_Record-0.6.0 - * @package org.lousson.record - */ -final class BuiltinRecordHandlerYAMLTest - extends AbstractRecordHandlerTest -{ - /** - * Obtain the record builder to test - * - * The getRecordBuilder() method returns the record builder instance - * that is used in the tests or NULL, in case the test does not have - * an associated builder. - * - * @return \Lousson\Record\AnyRecordBuilder - * A record builder instance is returned on success - */ - public function getRecordBuilder() - { - $builder = new BuiltinRecordHandlerYAML(); - return $builder; - } - - /** - * Obtain the record parser to test - * - * The getRecordParser() method returns the record parser instance - * that is used in the tests or NULL, in case the test does not have - * an associated parser. - * - * @return \Lousson\Record\AnyRecordBuilder - * A record builder instance is returned on success - */ - public function getRecordParser() - { - $parser = new BuiltinRecordHandlerYAML(); - return $parser; - } - - /** - * Provide valid parseRecord() parameters - * - * The provideValidRecordBytes() method returns an array of multiple - * items, each of whose is an array with one item; a sequence of bytes - * representing valid record data. - * - * @return array - * A list of parseRecord() parameters is returned on success - */ - public function provideValidRecordBytes() - { - $data[][] = '{"foo":"bar","baz":[0,1,2,3,4,5]}'; - $data[][] = '{"foo":{"bar":"baz"}}'; - $data[][] = '{"foobar":null}'; - - return $data; - } - - /** - * Provide invalid parseRecord() parameters - * - * The provideInvalidRecordBytes() method returns an array of multiple - * items, each of whose is an array with one item; a sequence of bytes - * representing invalid record data. - * - * @return array - * A list of parseRecord() parameters is returned on success - */ - public function provideInvalidRecordBytes() - { - $data[][] = '{"foo":"bar","0 1 2":"baz"}'; - - return $data; - } - - /** - * Test the buildRecord() method - * - + The testBuildRecordException() method is a test case to verify - * that exceptions raised by the Yaml\Dumper are handled properly. - * - * @expectedException Lousson\Record\AnyRecordException - * @test - * - * @throws \Lousson\Record\AnyRecordException - * Raised in case the test is successful - * - * @throws \Exception - * Raised in case of an implementation error - */ - public function testBuildRecordException() - { - $dumper = $this->getMock("Symfony\Component\Yaml\Dumper"); - $dumper - ->expects($this->once()) - ->method("dump") - ->will($this->throwException(new \DomainException)); - - $handler = new BuiltinRecordHandlerYAML(null, $dumper); - $handler->buildRecord(array()); - } - - /** - * Test the parseRecprd() method - * - + The testBuildRecordException() method is a test case to verify - * that exceptions raised by the Yaml\Parser are handled properly. - * - * @expectedException Lousson\Record\AnyRecordException - * @test - * - * @throws \Lousson\Record\AnyRecordException - * Raised in case the test is successful - * - * @throws \Exception - * Raised in case of an implementation error - */ - public function testParseRecordException() - { - $parser = $this->getMock("Symfony\Component\Yaml\Parser"); - $parser - ->expects($this->once()) - ->method("parse") - ->will($this->throwException(new \DomainException)); - - $handler = new BuiltinRecordHandlerYAML($parser, null); - $handler->parseRecord("foo. bar? baz!"); - } -} - diff --git a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordBuilderTest.php b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordBuilderTest.php index e1942cd..d41d853 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordBuilderTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordBuilderTest.php @@ -43,8 +43,8 @@ namespace Lousson\Record\Generic; /** Dependencies: */ -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHP; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHPTest; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHP; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHPTest; use Lousson\Record\Error\RecordRuntimeError; use Lousson\Record\Generic\GenericRecordBuilder; use Closure; diff --git a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryBasicTest.php b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryBasicTest.php index 9fa2d5f..09a5bc2 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryBasicTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryBasicTest.php @@ -47,8 +47,8 @@ use Lousson\Record\AnyRecordBuilder; use Lousson\Record\AnyRecordParser; use Lousson\Record\Builtin\BuiltinRecordFactory; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerJSON; -use Lousson\Record\Builtin\Parser\BuiltinRecordParserINI; +use Lousson\Record\Builtin\BuiltinRecordHandlerJSON; +use Lousson\Record\Builtin\BuiltinRecordParserINI; use Lousson\Record\Generic\GenericRecordFactory; use Lousson\Record\Generic\GenericRecordHandler; diff --git a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryTest.php b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryTest.php index 251141d..e9c9d91 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordFactoryTest.php @@ -47,8 +47,8 @@ use Lousson\Record\AnyRecordBuilder; use Lousson\Record\AnyRecordParser; use Lousson\Record\Builtin\BuiltinRecordFactory; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerJSON; -use Lousson\Record\Builtin\Parser\BuiltinRecordParserINI; +use Lousson\Record\Builtin\BuiltinRecordHandlerJSON; +use Lousson\Record\Builtin\BuiltinRecordParserINI; use Lousson\Record\Generic\GenericRecordFactory; /** diff --git a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordHandlerTest.php b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordHandlerTest.php index a048f48..0c56fae 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordHandlerTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordHandlerTest.php @@ -43,8 +43,8 @@ namespace Lousson\Record\Generic; /** Dependencies: */ -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHP; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHPTest; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHP; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHPTest; use Lousson\Record\Generic\GenericRecordHandler; /** diff --git a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordParserTest.php b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordParserTest.php index e71a302..1d0ae51 100644 --- a/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordParserTest.php +++ b/src/tests/unit-tests/php/Lousson/Record/Generic/GenericRecordParserTest.php @@ -43,8 +43,8 @@ namespace Lousson\Record\Generic; /** Dependencies: */ -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHP; -use Lousson\Record\Builtin\Handler\BuiltinRecordHandlerPHPTest; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHP; +use Lousson\Record\Builtin\BuiltinRecordHandlerPHPTest; use Lousson\Record\Error\RecordRuntimeError; use Lousson\Record\Generic\GenericRecordParser; use Closure;