--- a/devtools/repotest.py Fri Dec 10 12:17:18 2010 +0100
+++ b/devtools/repotest.py Fri Mar 11 09:46:45 2011 +0100
@@ -22,9 +22,11 @@
__docformat__ = "restructuredtext en"
+from copy import deepcopy
from pprint import pprint
from logilab.common.decorators import clear_cache
+from logilab.common.testlib import SkipTest
def tuplify(list):
for i in range(len(list)):
@@ -140,7 +142,7 @@
from rql import RQLHelper
from cubicweb.devtools.fake import FakeRepo, FakeSession
-from cubicweb.server import set_debug
+from cubicweb.server import set_debug, debugged
from cubicweb.server.querier import QuerierHelper
from cubicweb.server.session import Session
from cubicweb.server.sources.rql2sql import SQLGenerator, remove_unused_solutions
@@ -148,6 +150,15 @@
class RQLGeneratorTC(TestCase):
schema = backend = None # set this in concret test
+
+ @classmethod
+ def setUpClass(cls):
+ if cls.backend is not None:
+ try:
+ cls.dbhelper = get_db_helper(cls.backend)
+ except ImportError, ex:
+ raise SkipTest(str(ex))
+
def setUp(self):
self.repo = FakeRepo(self.schema)
self.repo.system_source = mock_object(dbdriver=self.backend)
@@ -158,11 +169,7 @@
ExecutionPlan._check_permissions = _dummy_check_permissions
rqlannotation._select_principal = _select_principal
if self.backend is not None:
- try:
- dbhelper = get_db_helper(self.backend)
- except ImportError, ex:
- self.skipTest(str(ex))
- self.o = SQLGenerator(self.schema, dbhelper)
+ self.o = SQLGenerator(self.schema, self.dbhelper)
def tearDown(self):
ExecutionPlan._check_permissions = _orig_check_permissions
@@ -170,6 +177,8 @@
def set_debug(self, debug):
set_debug(debug)
+ def debugged(self, debug):
+ return debugged(debug)
def _prepare(self, rql):
#print '******************** prepare', rql
@@ -221,6 +230,8 @@
def set_debug(self, debug):
set_debug(debug)
+ def debugged(self, debug):
+ return debugged(debug)
def _rqlhelper(self):
rqlhelper = self.repo.vreg.rqlhelper
@@ -284,8 +295,7 @@
self.repo.vreg.rqlhelper.backend = 'postgres' # so FTIRANK is considered
def add_source(self, sourcecls, uri):
- self.sources.append(sourcecls(self.repo, self.o.schema,
- {'uri': uri}))
+ self.sources.append(sourcecls(self.repo, {'uri': uri}))
self.repo.sources_by_uri[uri] = self.sources[-1]
setattr(self, uri, self.sources[-1])
self.newsources += 1
@@ -364,17 +374,17 @@
from cubicweb.server.msplanner import PartPlanInformation
except ImportError:
class PartPlanInformation(object):
- def merge_input_maps(self, *args):
+ def merge_input_maps(self, *args, **kwargs):
pass
def _choose_term(self, sourceterms):
pass
_orig_merge_input_maps = PartPlanInformation.merge_input_maps
_orig_choose_term = PartPlanInformation._choose_term
-def _merge_input_maps(*args):
- return sorted(_orig_merge_input_maps(*args))
+def _merge_input_maps(*args, **kwargs):
+ return sorted(_orig_merge_input_maps(*args, **kwargs))
-def _choose_term(self, sourceterms):
+def _choose_term(self, source, sourceterms):
# predictable order for test purpose
def get_key(x):
try:
@@ -387,8 +397,13 @@
except AttributeError:
# const
return x.value
- return _orig_choose_term(self, DumbOrderedDict2(sourceterms, get_key))
+ return _orig_choose_term(self, source, DumbOrderedDict2(sourceterms, get_key))
+from cubicweb.server.sources.pyrorql import PyroRQLSource
+_orig_syntax_tree_search = PyroRQLSource.syntax_tree_search
+
+def _syntax_tree_search(*args, **kwargs):
+ return deepcopy(_orig_syntax_tree_search(*args, **kwargs))
def do_monkey_patch():
RQLRewriter.insert_snippets = _insert_snippets
@@ -398,6 +413,7 @@
ExecutionPlan.init_temp_table = _init_temp_table
PartPlanInformation.merge_input_maps = _merge_input_maps
PartPlanInformation._choose_term = _choose_term
+ PyroRQLSource.syntax_tree_search = _syntax_tree_search
def undo_monkey_patch():
RQLRewriter.insert_snippets = _orig_insert_snippets
@@ -406,3 +422,4 @@
ExecutionPlan.init_temp_table = _orig_init_temp_table
PartPlanInformation.merge_input_maps = _orig_merge_input_maps
PartPlanInformation._choose_term = _orig_choose_term
+ PyroRQLSource.syntax_tree_search = _orig_syntax_tree_search