[limb-svn] r6575 - in 3.x/trunk/limb/core: . tests/cases

svn at limb-project.com svn at limb-project.com
Tue Dec 4 14:37:10 MSK 2007


Author: pachanga
Date: 2007-12-04 14:37:10 +0300 (Tue, 04 Dec 2007)
New Revision: 6575
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6575

Modified:
   3.x/trunk/limb/core/common.inc.php
   3.x/trunk/limb/core/tests/cases/lmbRequireClassTest.class.php
   3.x/trunk/limb/core/tests/cases/lmbRequireTest.class.php
Log:
-- lmb_require static includes cache for modules with classes fixed

Modified: 3.x/trunk/limb/core/common.inc.php
===================================================================
--- 3.x/trunk/limb/core/common.inc.php	2007-12-04 11:26:06 UTC (rev 6574)
+++ 3.x/trunk/limb/core/common.inc.php	2007-12-04 11:37:10 UTC (rev 6575)
@@ -64,14 +64,14 @@
           (strlen($path) > 2 && $path{1} == ':'));
 }
 
-function lmb_require($file_path, $class = null)
+function lmb_require($file_path, $class = '')
 {
   static $tried = array();
 
-  if(isset($tried[$file_path]))
+  if(isset($tried[$file_path . $class]))
     return;
   else
-    $tried[$file_path] = true;
+    $tried[$file_path . $class] = true;
 
   //do we really need this stuff here?
   if(strpos($file_path, '*') !== false)
@@ -104,15 +104,8 @@
     throw new lmbException("Could not include source file '$file_path'");
 }
 
-function lmb_require_class($file_path, $class = null)
+function lmb_require_class($file_path, $class = '')
 {
-  static $tried = array();
-
-  if(isset($tried[$file_path]))
-    return;
-  else
-    $tried[$file_path] = true;
-
   if(!$class)
   {
     //autoguessing class or interface name by file

Modified: 3.x/trunk/limb/core/tests/cases/lmbRequireClassTest.class.php
===================================================================
--- 3.x/trunk/limb/core/tests/cases/lmbRequireClassTest.class.php	2007-12-04 11:26:06 UTC (rev 6574)
+++ 3.x/trunk/limb/core/tests/cases/lmbRequireClassTest.class.php	2007-12-04 11:37:10 UTC (rev 6575)
@@ -46,6 +46,26 @@
     $this->assertFalse(in_array($name2, get_declared_classes()));
   }
 
+  function testLazyLoadSeveralClassesFromOneFile()
+  {
+    $module = $this->_rndName();
+
+    $name1 = $this->_rndName();
+    $name2 = $this->_rndName();
+    $path = $this->_writeModule("$module.inc.php", "<?php class $name1 {}; class $name2 {}; ?>");
+
+    lmb_require_class($path, $name1);
+    lmb_require_class($path, $name2);
+
+    $this->assertFalse(in_array($name1, get_declared_classes()));
+    $this->assertFalse(in_array($name2, get_declared_classes()));
+
+    $this->assertTrue(class_exists($name2, true));//triggers autoload
+
+    $this->assertTrue(in_array($name1, get_declared_classes()));
+    $this->assertTrue(in_array($name2, get_declared_classes()));
+  }
+
   function testLazyLoadClassGuessNameFromFile()
   {
     $name1 = $this->_rndName();

Modified: 3.x/trunk/limb/core/tests/cases/lmbRequireTest.class.php
===================================================================
--- 3.x/trunk/limb/core/tests/cases/lmbRequireTest.class.php	2007-12-04 11:26:06 UTC (rev 6574)
+++ 3.x/trunk/limb/core/tests/cases/lmbRequireTest.class.php	2007-12-04 11:37:10 UTC (rev 6575)
@@ -46,6 +46,26 @@
     $this->assertFalse(in_array($name2, get_declared_classes()));
   }
 
+  function testLazyLoadSeveralClassesFromOneFile()
+  {
+    $module = $this->_rndName();
+
+    $name1 = $this->_rndName();
+    $name2 = $this->_rndName();
+    $path = $this->_writeModule("$module.inc.php", "<?php class $name1 {}; class $name2 {}; ?>");
+
+    lmb_require($path, $name1);
+    lmb_require($path, $name2);
+
+    $this->assertFalse(in_array($name1, get_declared_classes()));
+    $this->assertFalse(in_array($name2, get_declared_classes()));
+
+    $this->assertTrue(class_exists($name2, true));//triggers autoload, we try 2nd class first since we need to check how behaves static $tried cache 
+
+    $this->assertTrue(in_array($name1, get_declared_classes()));
+    $this->assertTrue(in_array($name2, get_declared_classes()));
+  }
+
   function testLazyLoadClassGuessNameFromFile()
   {
     $name1 = $this->_rndName();



More information about the limb-svn mailing list