// load different test sets require "cache.php"; require "configuration.php"; require "database.php"; require "model.php"; require "template.php"; // connect to database require "_options.php"; $database = new Framework\Database($options); $database = $database->initialize(); $database = $database->connect(); // execute tests $results = Framework\Test::run(function () use($database) { // do nothing }, function () use($database) { $database->execute("DROP TABLE `examples`"); $database->execute("DROP TABLE `example`"); $database->execute("DELETE FROM `users` WHERE `email` = \"info@example.com\" AND `password` = \"password\""); }); ?> <!DOCTYPE html> <html> <head> <title>Unit Tests</title> <style type="text/css"> body { padding: 25px; margin: 0; font-family: "Helvetica"; font-size: 12px;
<?php Framework\Test::add(function () { $configuration = new Framework\Configuration(); return $configuration instanceof Framework\Configuration; }, "Configuration instantiates in uninitialized state", "Configuration"); Framework\Test::add(function () { $configuration = new Framework\Configuration(array("type" => "ini")); $configuration = $configuration->initialize(); return $configuration instanceof Framework\Configuration\Driver\Ini; }, "Configuration\\Driver\\Ini initializes", "Configuration\\Driver\\Ini"); Framework\Test::add(function () { $configuration = new Framework\Configuration(array("type" => "ini")); $configuration = $configuration->initialize(); $parsed = $configuration->parse("_configuration"); return $parsed->config->first == "hello" && $parsed->config->second->second == "bar"; }, "Configuration\\Driver\\Ini parses configuration files", "Configuration\\Driver\\Ini");
$cache = $cache->connect(); return $cache->set("foo", "bar", 1) instanceof Framework\Cache\Driver\Memcached; }, "Cache\\Driver\\Memcached sets values and returns self", "Cache\\Driver\\Memcached"); Framework\Test::add(function () { $cache = new Framework\Cache(array("type" => "memcached")); $cache = $cache->initialize(); $cache = $cache->connect(); return $cache->get("foo") == "bar"; }, "Cache\\Driver\\Memcached retrieves values", "Cache\\Driver\\Memcached"); Framework\Test::add(function () { $cache = new Framework\Cache(array("type" => "memcached")); $cache = $cache->initialize(); $cache = $cache->connect(); return $cache->get("404", "baz") == "baz"; }, "Cache\\Driver\\Memcached returns default values", "Cache\\Driver\\Memcached"); Framework\Test::add(function () { $cache = new Framework\Cache(array("type" => "memcached")); $cache = $cache->initialize(); $cache = $cache->connect(); // we sleep to void the 1 second cache key/value above sleep(1); return $cache->get("foo") == null; }, "Cache\\Driver\\Memcached expires values", "Cache\\Driver\\Memcached"); Framework\Test::add(function () { $cache = new Framework\Cache(array("type" => "memcached")); $cache = $cache->initialize(); $cache = $cache->connect(); $cache = $cache->set("hello", "world"); $cache = $cache->erase("hello"); return $cache->get("hello") == null && $cache instanceof Framework\Cache\Driver\Memcached; }, "Cache\\Driver\\Memcached erases values and returns self", "Cache\\Driver\\Memcached");
$template->parse("{script \$_text[] = 'foo bar' }"); $processed = $template->process(); return $processed == "foo bar"; }, "Template parses script tag", "Template"); Framework\Test::add(function () use($template) { $template->parse("\n {foreach \$number in \$numbers}{echo \$number_i},{echo \$number},{/foreach}"); $processed = $template->process(array("numbers" => array(1, 2, 3))); return trim($processed) == "0,1,1,2,2,3,"; }, "Template parses foreach tag", "Template"); Framework\Test::add(function () use($template) { $template->parse("\n {for \$number in \$numbers}{echo \$number_i},{echo \$number},{/for}\n "); $processed = $template->process(array("numbers" => array(1, 2, 3))); return trim($processed) == "0,1,1,2,2,3,"; }, "Template parses for tag", "Template"); Framework\Test::add(function () use($template) { $template->parse("\n {if \$check == \"yes\"}yes{/if}\n {elseif \$check == \"maybe\"}yes{/elseif}\n {else}yes{/else}\n "); $yes = $template->process(array("check" => "yes")); $maybe = $template->process(array("check" => "maybe")); $no = $template->process(array("check" => null)); return $yes == $maybe && $maybe == $no; }, "Template parses if, else and elseif tags", "Template"); Framework\Test::add(function () use($template) { $template->parse("\n {macro foo(\$number)}\n {echo \$number + 2}\n {/macro}\n \n {echo foo(2)}\n "); $processed = $template->process(); return $processed == 4; }, "Template parses macro tag", "Template"); Framework\Test::add(function () use($template) { $template->parse("\n {literal}\n {echo \"hello world\"}\n {/literal}\n "); $processed = $template->process(); return trim($processed) == "{echo \"hello world\"}"; }, "Template parses literal tag", "Template");
$rows = $database->query()->from("tests", array("id" => "foo"))->all(); return sizeof($rows) && isset($rows[0]["foo"]) && $rows[0]["foo"] == 1; }, "Database\\Query\\Mysql can alias fields", "Database\\Query\\Mysql"); Framework\Test::add(function () use($options) { $database = new Framework\Database($options); $database = $database->initialize(); $database = $database->connect(); $rows = $database->query()->from("tests", array("tests.id" => "foo"))->join("tests AS baz", "tests.id = baz.id", array("baz.id" => "bar"))->all(); return sizeof($rows) && $rows[0]->foo == $rows[0]->bar; }, "Database\\Query\\Mysql can join tables and alias joined fields", "Database\\Query\\Mysql"); Framework\Test::add(function () use($options) { $database = new Framework\Database($options); $database = $database->initialize(); $database = $database->connect(); $result = $database->query()->from("tests")->save(array("number" => 3, "text" => "foo", "boolean" => true)); return $result == 5; }, "Database\\Query\\Mysql can insert rows", "Database\\Query\\Mysql"); Framework\Test::add(function () use($options) { $database = new Framework\Database($options); $database = $database->initialize(); $database = $database->connect(); $result = $database->query()->from("tests")->where("id = ?", 5)->save(array("number" => 3, "text" => "foo", "boolean" => false)); return $result == 0; }, "Database\\Query\\Mysql can update rows", "Database\\Query\\Mysql"); Framework\Test::add(function () use($options) { $database = new Framework\Database($options); $database = $database->initialize(); $database = $database->connect(); $database->query()->from("tests")->delete(); return $database->query()->from("tests")->count() == 0; }, "Database\\Query\\Mysql can delete rows", "Database\\Query\\Mysql");
*/ protected $_created; } Framework\Test::add(function () use($database) { $example = new Example(); return $database->sync($example) instanceof Framework\Database\Connector\Mysql; }, "Model syncs", "Model"); Framework\Test::add(function () use($database) { $example = new Example(array("name" => "foo", "created" => date("Y-m-d H:i:s"))); return $example->save() > 0; }, "Model inserts rows", "Model"); Framework\Test::add(function () use($database) { return Example::count() == 1; }, "Model fetches number of rows", "Model"); Framework\Test::add(function () use($database) { $example = new Example(array("name" => "foo", "created" => date("Y-m-d H:i:s"))); $example->save(); $example->save(); $example->save(); return Example::count() == 2; }, "Model saves single row multiple times", "Model"); Framework\Test::add(function () use($database) { $example = new Example(array("id" => 1, "name" => "hello", "created" => date("Y-m-d H:i:s"))); $example->save(); return Example::first()->name == "hello"; }, "Model updates rows", "Model"); Framework\Test::add(function () use($database) { $example = new Example(array("id" => 2)); $example->delete(); return Example::count() == 1; }, "Model deletes rows", "Model");