fixture = new BSTemplate(); $this->fixture->setTemplateDirectory(TEST_TEMPLATE_PATH); $this->fixture->setExtension('test.tpl'); if ($this->db == null) { require_once ISSO . '/DbMySql.php'; $this->db = new BSDbMySql(); $this->db->connect(TEST_DB_MYSQL_HOST, TEST_DB_MYSQL_USER, TEST_DB_MYSQL_PASSWORD, TEST_DB_MYSQL_DATABASE); $this->db->query("CREATE TABLE template (filename VARCHAR (250) NOT NULL, template TEXT NOT NULL, timestamp INT NOT NULL);"); BSApp::$db = $this->db; } } public function tearDown() { $this->db->query("DROP TABLE IF EXISTS template"); @unlink(TEST_TEMPLATE_PATH . '/db.cache.test.tpl'); } public function testFetchInvalidTemplate() { try { $this->fixture->fetch('--invalid--'); $this->fail('exception expected'); } catch (Exception $e) {} } public function testFetch() { $result = $this->fixture->fetch('fetch.lang'); $this->assertEquals('this is a test of " . gettext(\'language\') . " strings', $result); $result = $this->fixture->fetch('fetch.if'); $this->assertEquals('this " . (($a == $b) ? "is cool" : "sucks") . "!', $result); $result = $this->fixture->fetch('fetch.php'); $this->assertEquals('this is " . (date(\'Y\', time()) . " today\'s year', $result); // TODO: pass test // $result = $this->fixture->fetch('fetch.php.nested'); // $this->assertEquals('this is a " . strpos(\'somestr{\', \'}\') . " nested token', $result); $result = $this->fixture->fetch('fetch.lang.tag'); $this->assertEquals('this is a " . sprintf(\'" . gettext(\'a %1$s b %2$s\') . "\', "hello", "there") . " test', $result); $result = $this->fixture->fetch('fetch.if.nested'); $this->assertEquals('this " . (($c == $d) ? "foo " . (($e == $f) ? "e" : "f") . "" : "moo " . (($g == $h) ? "g" : "h") . "") . " rules!', $result); $result = $this->fixture->fetch('fetch.if.noelse'); $this->assertEquals('this is a test " . (($foo != \'moo\') ? "without else" : "") . "!', $result); try { $this->fixture->fetch('fetch.lang.invalid'); $this->fail('exception expected'); } catch (Exception $e) {} $result = $this->fixture->fetch('fetch.lang.indexmissing'); $this->assertEquals('missing " . sprintf(\'" . gettext(\'1 %1$s 2 %2$s 3 %3$s\') . "\', "a", "[MISSING SUBSTITUTION INDEX: 2]", "b") . " index', $result); } public function testPreParseHook() { $func = create_function('$tpl', 'return "this template is now cleared";'); $this->fixture->setPreParseHook($func); $result = $this->fixture->fetch('hook'); $this->assertEquals('this template is now cleared', $result); } public function testStandardCache() { file_put_contents(TEST_TEMPLATE_PATH . '/cache.test.tpl', 'this file is retreived from the cache'); $this->fixture->cache(array('cache')); unlink(TEST_TEMPLATE_PATH . '/cache.test.tpl'); try { $result = $this->fixture->fetch('cache'); $this->assertEquals('this file is retreived from the cache', $result); } catch (Exception $e) { $this->fixture('unexpected exception'); } try { $this->fixture->cache(array('hook')); $this->fail('exception expected'); } catch (Exception $e) {} } public function testDbCache() { $this->fixture->setDatabaseCache('template'); file_put_contents(TEST_TEMPLATE_PATH . '/db.cache.test.tpl', 'store in the database'); $this->fixture->cache(array('db.cache')); $template = $this->db->queryFirst("SELECT * FROM template"); $this->assertNotEquals(null, $template); $this->setUp(); $this->fixture->setDatabaseCache('template'); $this->fixture->cache(array('db.cache')); $this->assertEquals('store in the database', $this->fixture->fetch('db.cache')); file_put_contents(TEST_TEMPLATE_PATH . '/db.cache.test.tpl', 'store in the database, retouched'); sleep(1); // give the file system some time touch(TEST_TEMPLATE_PATH . '/db.cache.test.tpl'); clearstatcache(); $this->setUp(); $this->fixture->setDatabaseCache('template'); $this->fixture->cache(array('db.cache')); $this->setUp(); $this->fixture->setDatabaseCache('template'); $this->fixture->cache(array('db.cache')); $this->assertEquals('store in the database, retouched', $this->fixture->fetch('db.cache')); } public function testFlush() { try { $this->fixture->flush(''); $this->fail('exception expected'); } catch (Exception $e) {} $a = 'foo'; ob_start(); $this->fixture->flush($this->fixture->fetch('flush')); $data = ob_get_contents(); ob_end_clean(); $this->assertEquals('this is a $a test', $data); try { $this->fixture->flush($this->fixture->fetch('flush')); $this->fail('exception expected'); } catch (Exception $e) {} } } ?>