110 lines
3.0 KiB
Python
110 lines
3.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Unit tests for gluon.dal
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import unittest
|
|
|
|
from gluon.dal import DAL, Field
|
|
|
|
|
|
def tearDownModule():
|
|
try:
|
|
os.unlink('dummy.db')
|
|
except:
|
|
pass
|
|
|
|
|
|
class TestDALSubclass(unittest.TestCase):
|
|
|
|
def testRun(self):
|
|
from gluon.serializers import custom_json, xml
|
|
from gluon import sqlhtml
|
|
db = DAL(check_reserved=['all'])
|
|
self.assertEqual(db.serializers['json'], custom_json)
|
|
self.assertEqual(db.serializers['xml'], xml)
|
|
self.assertEqual(db.representers['rows_render'], sqlhtml.represent)
|
|
self.assertEqual(db.representers['rows_xml'], sqlhtml.SQLTABLE)
|
|
db.close()
|
|
|
|
def testSerialization(self):
|
|
from gluon._compat import pickle
|
|
db = DAL(check_reserved=['all'])
|
|
db.define_table('t_a', Field('f_a'))
|
|
db.t_a.insert(f_a='test')
|
|
a = db(db.t_a.id > 0).select(cacheable=True)
|
|
s = pickle.dumps(a)
|
|
b = pickle.loads(s)
|
|
self.assertEqual(a.db, b.db)
|
|
db.t_a.drop()
|
|
db.close()
|
|
|
|
""" TODO:
|
|
class TestDefaultValidators(unittest.TestCase):
|
|
def testRun(self):
|
|
pass
|
|
"""
|
|
|
|
|
|
def _prepare_exec_for_file(filename):
|
|
module = []
|
|
if filename.endswith('.py'):
|
|
filename = filename[:-3]
|
|
elif os.path.split(filename)[1] == '__init__.py':
|
|
filename = os.path.dirname(filename)
|
|
else:
|
|
raise 'The file provided (%s) does is not a valid Python file.'
|
|
filename = os.path.realpath(filename)
|
|
dirpath = filename
|
|
while True:
|
|
dirpath, extra = os.path.split(dirpath)
|
|
module.append(extra)
|
|
if not os.path.isfile(os.path.join(dirpath, '__init__.py')):
|
|
break
|
|
sys.path.insert(0, dirpath)
|
|
return '.'.join(module[::-1])
|
|
|
|
|
|
def load_pydal_tests_module():
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
if not os.path.isfile(os.path.join(path, 'web2py.py')):
|
|
i = 0
|
|
while i < 10:
|
|
i += 1
|
|
if os.path.exists(os.path.join(path, 'web2py.py')):
|
|
break
|
|
path = os.path.abspath(os.path.join(path, '..'))
|
|
pydal_test_path = os.path.join(
|
|
path, "gluon", "packages", "dal", "tests", "__init__.py")
|
|
mname = _prepare_exec_for_file(pydal_test_path)
|
|
mod = __import__(mname)
|
|
return mod
|
|
|
|
|
|
def pydal_suite():
|
|
mod = load_pydal_tests_module()
|
|
suite = unittest.TestSuite()
|
|
tlist = [
|
|
getattr(mod, el) for el in mod.__dict__.keys() if el.startswith("Test")
|
|
]
|
|
for t in tlist:
|
|
suite.addTest(unittest.makeSuite(t))
|
|
return suite
|
|
|
|
|
|
class TestDALAdapters(unittest.TestCase):
|
|
def _run_tests(self):
|
|
suite = pydal_suite()
|
|
return unittest.TextTestRunner(verbosity=2).run(suite)
|
|
|
|
def test_mysql(self):
|
|
if os.environ.get('APPVEYOR'):
|
|
return
|
|
if os.environ.get('TRAVIS'):
|
|
os.environ["DB"] = "mysql://root:@localhost/pydal"
|
|
result = self._run_tests()
|
|
self.assertTrue(result)
|