# test/cache_self.py """Tests for m.cache_self """ import unittest, os, shutil, stat, sys, time, warnings import testbase from test_component_reloading import ComponentReloadTests, purge_module class CacheSelfTests(ComponentReloadTests): """Abstract base class of tests for component reloading.""" def setUp(self): # Blow away cache shutil.rmtree(os.path.join(self.cache, 'container_dbm'), ignore_errors=True) #time.sleep(1) ComponentReloadTests.setUp(self) def reinitializeInterpreter(self): params = self.resolverArgs() self.module_runner = self.module_runner_class(data_dir=self.cache, **params) def testComponent(self, text="howdy"): """Test that we can resolve and execute our component. """ self.failUnlessEqual(self.executeComponent().strip(), text) def testCache(self): """Test that cache remains intact across interpreter incarnations. """ self.testComponent() time.sleep(1) self.changeComponentSource(text="changed") # Create a new myghty interpreter self.reinitializeInterpreter() # We should still see the cached value, not the changed value self.testComponent() def testStaleCache(self): """Test that cache gets invalidated if the component source changes. """ #os.system("ls -lR " + self.cache) self.testComponent() time.sleep(1) self.createComponentSource(text="changed") # Create a new myghty interpreter self.reinitializeInterpreter() self.testComponent("changed") ################################################################ # # (The actual unittest.TestCase sub-classes begin here.) # ################################################################ class FileComponentTests(CacheSelfTests, testbase.MyghtyTest): def srcFile(self): return os.path.join(self.htdocs, "comp.myt") def srcText(self, text="howdy"): return """ <%%init> if m.cache_self(): return %s """ % text def resolverArgs(self): return {'component_root': self.htdocs} def componentPath(self): return "/comp.myt" class ModuleComponentTests(CacheSelfTests, testbase.MyghtyTest): def setUp(self): purge_module('module') CacheSelfTests.setUp(self) def reinitializeInterpreter(self): purge_module('module') CacheSelfTests.reinitializeInterpreter(self) def srcFile(self): return os.path.join(self.lib, "module.py") def srcText(self, text="howdy"): return """ def comp(m): if not m.cache_self(): m.write('%s')""" % text def resolverArgs(self): try: del sys.modules['module'] except KeyError: pass return {'module_components': [{'/mycomp': 'module:comp'}]} def componentPath(self): return "/mycomp" if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2, descriptions=False) unittest.main(testRunner=runner)