'alveolata', 'sections' => [ [ 'name' => 'storage', 'sections' => [ [ 'name' => 'wrapper', 'setup' => function (&$environment) { $environment['path_database'] = '/tmp/localdb.sqlite'; exec(sprintf('echo "" > %s', $environment['path_database'])); $database = \alveolata\database\make( 'sqlite', [ 'path' => $environment['path_database'], ] ); $tablename = '_testtable_'; $fields = [ [ 'name' => 'state', 'type' => 'VARCHAR(64)', 'null_allowed' => false, 'default' => '', ], ]; $core = \alveolata\storage\implementation_sqltable::make( $database, $tablename, $fields ); $environment['storage'] = \alveolata\storage\implementation_wrapper::make( $core, function (string $key_outer) : int { return intval($key_outer); }, function (int $key_inner) : string { return strval($key_inner); }, function (bool $value_outer) : array { return [ 'state' => ( $value_outer ? 'true' : 'false' ), ]; }, function (array $value_inner) : bool { return ($value_inner['state'] === 'true'); } ); $environment['storage']->setup(); }, 'sections' => [ [ 'name' => 'create_delete', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $state = true; // execution & assertions $assert->runs( function () use (&$environment, &$state) { $key = $environment['storage']->create($state); $environment['storage']->delete($key); } ); } ], ] ], [ 'name' => 'read', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $state = true; // setup $key = $environment['storage']->create($state); // execution $value = $environment['storage']->read($key); // assertions $assert->equal($value, $state); // cleanup $environment['storage']->delete($key); } ], ] ], [ 'name' => 'search', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $state = true; // setup $key = $environment['storage']->create($state); // execution $keys = $environment['storage']->search([]); // assertions $assert->equal($keys, [$key]); // cleanup $environment['storage']->delete($key); } ], ] ], [ 'name' => 'update', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $state1 = true; $state2 = false; // setup $key = $environment['storage']->create($state1); // execution $environment['storage']->update($key, $state2); $value = $environment['storage']->read($key); // assertions $assert->equal($value, $state2); // cleanup $environment['storage']->delete($key); } ], ] ], ], 'cleanup' => function (&$environment) { $environment['storage']->teardown(); exec(sprintf('rm -f %s', $environment['path_database'])); } ] ] ], ] ] );