get_string: Refactoring, performance improvements, bug fixes and unit tests

MDL-18669 get_string refactored to elimiate duplicate code and make it easier to understand.
MDL-17763 parent language not processed correctly when getting a plugin string.
MDL-16181 more intelligent caching to avoid repeated file_exists checks.
MDL-12434 move values to array keys to improve lookup times.

The main part of the refactoring is to create a singleton string_manager class to encapsulate the cached data and the processing, while breaking the code up into more smaller methods.

Other performance improvements include:
* Cache results of plugin name -> locations to search array.
* Cache parent lang lookup.
* Skip eval if the string does not contain $ \ or %.
* Remove the unnecessary sprintf from the eval.

There is a performance testing script in lib/simpletest/getstringperformancetester.php. For now this script has the old get_string implementation copied and pasted to the end, and renamed to old_get_string to allow for comparitive timings.

There are now some unit tests for get_string in lib/simpletest/teststringmanager.php. I think I have managed to cover most of the tricky cases.
This commit is contained in:
tjhunt
2009-03-30 02:21:27 +00:00
parent edbc93a7e4
commit bb45fe62c4
21 changed files with 6032 additions and 459 deletions
+2 -6
View File
@@ -26,6 +26,8 @@
/**
* Unit tests for (some of) ../moodlelib.php.
*
* Note, tests for get_string are in the separate file testgetstring.php.
*
* @copyright © 2006 The Open University
* @author [email protected]
* @author [email protected]
@@ -68,12 +70,6 @@ class moodlelib_test extends UnitTestCase {
)
);
function setUp() {
}
function tearDown() {
}
function test_cleanremoteaddr() {
//IPv4
$this->assertEqual(cleanremoteaddr('1023.121.234.1'), null);