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;