aboutsummaryrefslogtreecommitdiffstats
path: root/tests/class_loader
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2010-06-25 14:24:04 +0200
committerNils Adermann <naderman@naderman.de>2010-07-05 15:40:46 +0200
commit22c3041e128bd2d10d37672bdf5c7c1eb4112b12 (patch)
tree07f1ace82305fecee57cd6260c49278df3e637d4 /tests/class_loader
parent55a22363fa4e0cc49a55478ccd238b078003fd78 (diff)
downloadforums-22c3041e128bd2d10d37672bdf5c7c1eb4112b12.tar
forums-22c3041e128bd2d10d37672bdf5c7c1eb4112b12.tar.gz
forums-22c3041e128bd2d10d37672bdf5c7c1eb4112b12.tar.bz2
forums-22c3041e128bd2d10d37672bdf5c7c1eb4112b12.tar.xz
forums-22c3041e128bd2d10d37672bdf5c7c1eb4112b12.zip
[feature/auto-loading] Added a phpBB autoloader with caching support.
phpBB class name lookups follow these rules: - All classes are prefixed with phpbb_ - All classes reside in includes/ or a subdirectory thereof - Directories must not contain underscores - The class name is separated into parts by underscores, the parts are checked from first to last, until one is found which is not a directory, all remaining parts make up the file name. If no parts are left, the last directory name is used. Examples: directory structure: includes/ class_name.php dir/ class_name.php dir.php subdir/ class_name.php lookups: phpbb_class_name -> includes/class_name.php phpbb_dir_class_name -> includes/dir/class_name.php phpbb_dir -> includes/dir/dir.php phpbb_dir_subdir_class_name -> includes/dir/subdir/class_name.php Optionally the class can be supplied with a cache instance, either in the constructor or via set_cache() at a later time. This allows for the lookups to be cached, so the directories do not have to be traveresed on every request. This makes it necessary for the cache and its dependency to continue to be loaded the old way - without autoloading. The code will not be changed to use autoloading, but it will rather only be used for new classes where applicable. PHPBB3-9682
Diffstat (limited to 'tests/class_loader')
-rw-r--r--tests/class_loader/all_tests.php41
-rw-r--r--tests/class_loader/cache_mock.php29
-rw-r--r--tests/class_loader/class_loader_test.php65
-rw-r--r--tests/class_loader/includes/class_name.php6
-rw-r--r--tests/class_loader/includes/dir/class_name.php6
-rw-r--r--tests/class_loader/includes/dir/subdir/class_name.php6
6 files changed, 153 insertions, 0 deletions
diff --git a/tests/class_loader/all_tests.php b/tests/class_loader/all_tests.php
new file mode 100644
index 0000000000..451a1b02c2
--- /dev/null
+++ b/tests/class_loader/all_tests.php
@@ -0,0 +1,41 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+if (!defined('PHPUnit_MAIN_METHOD'))
+{
+ define('PHPUnit_MAIN_METHOD', 'phpbb_class_loader_all_tests::main');
+}
+
+require_once 'test_framework/framework.php';
+require_once 'PHPUnit/TextUI/TestRunner.php';
+
+require_once 'class_loader/class_loader_test.php';
+
+class phpbb_class_loader_all_tests
+{
+ public static function main()
+ {
+ PHPUnit_TextUI_TestRunner::run(self::suite());
+ }
+
+ public static function suite()
+ {
+ $suite = new PHPUnit_Framework_TestSuite('phpBB Class Loader');
+
+ $suite->addTestSuite('phpbb_class_loader_test');
+
+ return $suite;
+ }
+}
+
+if (PHPUnit_MAIN_METHOD == 'phpbb_class_loader_all_tests::main')
+{
+ phpbb_class_loader_all_tests::main();
+}
+
diff --git a/tests/class_loader/cache_mock.php b/tests/class_loader/cache_mock.php
new file mode 100644
index 0000000000..c8069fa9cc
--- /dev/null
+++ b/tests/class_loader/cache_mock.php
@@ -0,0 +1,29 @@
+<?php
+/**
+*
+* @package testing
+* @version $Id$
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+class phpbb_cache_mock
+{
+ private $variables = array();
+
+ function get($var_name)
+ {
+ if (isset($this->variables[$var_name]))
+ {
+ return $this->variables[$var_name];
+ }
+
+ return false;
+ }
+
+ function put($var_name, $value)
+ {
+ $this->variables[$var_name] = $value;
+ }
+} \ No newline at end of file
diff --git a/tests/class_loader/class_loader_test.php b/tests/class_loader/class_loader_test.php
new file mode 100644
index 0000000000..37c11657c4
--- /dev/null
+++ b/tests/class_loader/class_loader_test.php
@@ -0,0 +1,65 @@
+<?php
+/**
+*
+* @package testing
+* @version $Id$
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once 'test_framework/framework.php';
+require_once 'class_loader/cache_mock.php';
+
+require_once '../phpBB/includes/class_loader.php';
+
+
+class phpbb_class_loader_test extends PHPUnit_Framework_TestCase
+{
+ public function test_resolve_path()
+ {
+ $prefix = 'class_loader/';
+ $class_loader = new phpbb_class_loader($prefix);
+
+ $prefix .= 'includes/';
+
+ $this->assertEquals(
+ $prefix . 'class_name.php',
+ $class_loader->resolve_path('phpbb_class_name'),
+ 'Top level class'
+ );
+ $this->assertEquals(
+ $prefix . 'dir/class_name.php',
+ $class_loader->resolve_path('phpbb_dir_class_name'),
+ 'Class in a directory'
+ );
+ $this->assertEquals(
+ $prefix . 'dir/subdir/class_name.php',
+ $class_loader->resolve_path('phpbb_dir_subdir_class_name'),
+ 'Class in a sub-directory'
+ );
+ }
+
+ public function test_resolve_cached()
+ {
+ $cache = new phpbb_cache_mock;
+ $cache->put('class_loader', array('phpbb_a_cached_name' => 'a/cached_name'));
+
+ $prefix = 'class_loader/';
+ $class_loader = new phpbb_class_loader($prefix, '.php', $cache);
+
+ $prefix .= 'includes/';
+
+ $this->assertEquals(
+ $prefix . 'dir/class_name.php',
+ $class_loader->resolve_path('phpbb_dir_class_name'),
+ 'Class in a directory'
+ );
+
+ $this->assertEquals(
+ $prefix . 'a/cached_name.php',
+ $class_loader->resolve_path('phpbb_a_cached_name'),
+ 'Class in a directory'
+ );
+ }
+}
diff --git a/tests/class_loader/includes/class_name.php b/tests/class_loader/includes/class_name.php
new file mode 100644
index 0000000000..e941173cdd
--- /dev/null
+++ b/tests/class_loader/includes/class_name.php
@@ -0,0 +1,6 @@
+<?php
+
+class phpbb_class_name
+{
+}
+
diff --git a/tests/class_loader/includes/dir/class_name.php b/tests/class_loader/includes/dir/class_name.php
new file mode 100644
index 0000000000..0675aa8fc5
--- /dev/null
+++ b/tests/class_loader/includes/dir/class_name.php
@@ -0,0 +1,6 @@
+<?php
+
+class phpbb_dir_class_name
+{
+}
+
diff --git a/tests/class_loader/includes/dir/subdir/class_name.php b/tests/class_loader/includes/dir/subdir/class_name.php
new file mode 100644
index 0000000000..7321a609cc
--- /dev/null
+++ b/tests/class_loader/includes/dir/subdir/class_name.php
@@ -0,0 +1,6 @@
+<?php
+
+class phpbb_dir_subdir_class_name
+{
+}
+