diff --git a/product/ERP5/tests/testXHTML.py b/product/ERP5/tests/testXHTML.py
index 6aa59556c32275273fcde621bcabda563d271e49..3da8dae3947b92065c8ee253eda4a19844b44ef8 100644
--- a/product/ERP5/tests/testXHTML.py
+++ b/product/ERP5/tests/testXHTML.py
@@ -54,7 +54,6 @@ bt5_path = os.path.join(INSTANCE_HOME, 'bt5')
 target_business_templates = (
   'erp5_base',
   'erp5_trade',
-  'erp5_mysql_innodb_catalog',
 
   'erp5_pdf_editor',
   'erp5_pdf_style',
@@ -146,10 +145,17 @@ def makeTestMethod(module_id, portal_type, view_name):
 
 
 def addTestMethodDynamically():
-  from Products.ERP5.tests.utils import BusinessTemplateInfo
+  from Products.ERP5.tests.utils import BusinessTemplateInfoTar
+  from Products.ERP5.tests.utils import BusinessTemplateInfoDir
   for i in target_business_templates:
-    business_template = os.path.join(bt5_path, '%s.bt5' % i)
-    business_template_info = BusinessTemplateInfo(business_template)
+    business_template = os.path.join(bt5_path, i)
+    if os.path.isdir(business_template):
+      business_template_info = BusinessTemplateInfoDir(business_template)
+    elif os.path.isfile(business_template+'.bt5'):
+      business_template_info = BusinessTemplateInfoTar(business_template+'.bt5')
+    else:
+      raise KeyError, "Can't find the business template:%s." % i
+
     for module_id, module_portal_type in business_template_info.modules.items():
       for portal_type in business_template_info.allowed_content_types.get(
         module_portal_type, ()):
@@ -165,7 +171,6 @@ def addTestMethodDynamically():
 
 addTestMethodDynamically()
 
-
 if __name__ == '__main__':
     framework()
 else:
diff --git a/product/ERP5/tests/utils.py b/product/ERP5/tests/utils.py
index 53d3d949af9ee050309d838974aade3397eae1d1..f9d78d1bfbe532e6d22d4cf5861da01a2b56ade7 100644
--- a/product/ERP5/tests/utils.py
+++ b/product/ERP5/tests/utils.py
@@ -25,16 +25,17 @@
 #
 ##############################################################################
 
+import os.path
 import tarfile
 import xml.parsers.expat
 import xml.dom.minidom
 from urllib import url2pathname
 
 
-class BusinessTemplateInfo:
+class BusinessTemplateInfoBase:
 
-  def __init__(self, tar_path):
-    self.tar = tarfile.open(tar_path, 'r:gz')
+  def __init__(self, target):
+    self.target = target
     self.setUp()
 
   def setUp(self):
@@ -48,28 +49,41 @@ class BusinessTemplateInfo:
     self.setUpAllowedContentTypes()
     self.setUpActions()
 
+  def findFileInfosByName(self, startswith='', endswith=''):
+    raise NotImplementedError
+
+  def getFileInfo(self, name):
+    raise NotImplementedError
+
+  def getFileInfoName(self, fileinfo):
+    raise NotImplementedError
+
+  def readFileInfo(self, fileinfo):
+    raise NotImplementedError
+
+  def getPrefix(self):
+    raise NotImplementedError
+
   def setUpTitle(self):
-    for tarinfo in self.tar.getmembers():
-      if tarinfo.name.endswith('/bt/title'):
-        self.title = self.tar.extractfile(tarinfo).read()
+    for i in self.findFileInfosByName(endswith='/bt/title'):
+      self.title = self.readFileInfo(i)
 
   def setUpModules(self):
-    name = '%s/ModuleTemplateItem/' % self.title
-    for tarinfo in self.tar.getmembers():
-      if tarinfo.name.startswith(name) and tarinfo.type==tarfile.REGTYPE:
-        source = self.tar.extractfile(tarinfo).read()
-        doc = xml.dom.minidom.parseString(source)
-        module_id = doc.getElementsByTagName('id')[0].childNodes[0].data
-        portal_type = doc.getElementsByTagName('portal_type')[0].childNodes[0].data
-        self.modules[module_id] = portal_type
+    name = '%s/ModuleTemplateItem/' % self.getPrefix()
+    for i in self.findFileInfosByName(startswith=name):
+      source = self.readFileInfo(i)
+      doc = xml.dom.minidom.parseString(source)
+      module_id = doc.getElementsByTagName('id')[0].childNodes[0].data
+      portal_type = doc.getElementsByTagName('portal_type')[0].childNodes[0].data
+      self.modules[module_id] = portal_type
 
   def setUpAllowedContentTypes(self):
-    name = '%s/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml' % self.title
+    name = '%s/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml' % self.getPrefix()
     try:
-      tarinfo = self.tar.getmember(name)
-    except KeyError:
+      fileinfo = self.getFileInfo(name)
+    except NotFoundError:
       return
-    source = self.tar.extractfile(tarinfo).read()
+    source = self.readFileInfo(fileinfo)
     doc = xml.dom.minidom.parseString(source)
     for portal_type_node in doc.getElementsByTagName('portal_type'):
       portal_type = portal_type_node.getAttribute('id')
@@ -130,11 +144,74 @@ class BusinessTemplateInfo:
       p.Parse(source)
       return handler.data
 
-    name = '%s/ActionTemplateItem/portal_types/' % self.title
-    for tarinfo in self.tar.getmembers():
-      if tarinfo.name.startswith(name) and tarinfo.type==tarfile.REGTYPE:
-        portal_type = url2pathname(tarinfo.name.split('/')[-2])
-        if not portal_type in self.actions:
-          self.actions[portal_type] = []
-        data = parse(self.tar.extractfile(tarinfo).read())
-        self.actions[portal_type].append(data)
+    name = '%s/ActionTemplateItem/portal_types/' % self.getPrefix()
+    for i in self.findFileInfosByName(startswith=name):
+      portal_type = url2pathname(self.getFileInfoName(i).split('/')[-2])
+      if not portal_type in self.actions:
+        self.actions[portal_type] = []
+      data = parse(self.readFileInfo(i))
+      self.actions[portal_type].append(data)
+
+
+class NotFoundError(Exception):
+  """FileInfo does not exists."""
+
+
+class BusinessTemplateInfoTar(BusinessTemplateInfoBase):
+
+  def __init__(self, target):
+    self.target = tarfile.open(target, 'r:gz')
+    self.setUp()
+
+  def getPrefix(self):
+    return self.title
+
+  def findFileInfosByName(self, startswith='', endswith=''):
+    for tarinfo in self.target.getmembers():
+      if (tarinfo.name.startswith(startswith) and
+          tarinfo.name.endswith(endswith) and
+          tarinfo.type==tarfile.REGTYPE):
+        yield tarinfo
+
+  def getFileInfo(self, name):
+    try:
+      return self.target.getmember(name)
+    except KeyError:
+      raise NotFoundError
+
+  def getFileInfoName(self, fileinfo):
+    return fileinfo.name
+
+  def readFileInfo(self, fileinfo):
+    return self.target.extractfile(fileinfo).read()
+
+
+class BusinessTemplateInfoDir(BusinessTemplateInfoBase):
+
+  def getPrefix(self):
+    return self.target
+
+  def findFileInfosByName(self, startswith='', endswith=''):
+    allfiles = []
+    def visit(arg, dirname, names):
+      if '.svn' in dirname:
+        return
+      for i in names:
+        path = os.path.join(self.target, dirname, i)
+        if os.path.isfile(path):
+          allfiles.append(path)
+    os.path.walk(self.target, visit, None)
+    for i in allfiles:
+      if i.startswith(startswith) and i.endswith(endswith):
+        yield i
+
+  def getFileInfo(self, name):
+    if not os.path.isfile(name):
+      raise NotFoundError
+    return name
+
+  def getFileInfoName(self, fileinfo):
+    return fileinfo
+
+  def readFileInfo(self, fileinfo):
+    return file(fileinfo).read()