Improve unittests to run trytond from tests
Use sqlite as default backend Add skiptest attribute to data tag Add option to test_tryton to run tests from all modules
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
* Improve unittests to run trytond from tests
|
||||
Use sqlite as default backend
|
||||
Add skiptest attribute to data tag
|
||||
Add option to test_tryton to run tests from all modules
|
||||
* Add MySQL backend
|
||||
* Refactoring by validation with pylint
|
||||
* Modify ondelete attribute of Many2One according to required attribute value
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
|
||||
# Configure the database type
|
||||
# allowed values are postgresql, sqlite, mysql
|
||||
db_type = postgresql
|
||||
#db_type = postgresql
|
||||
|
||||
# Configure the database connection
|
||||
## Note: Only databases owned by db_user will be displayed in the connection dialog
|
||||
|
||||
@@ -179,7 +179,12 @@ class Database(DatabaseInterface):
|
||||
@staticmethod
|
||||
def list(cursor):
|
||||
res = []
|
||||
for db_file in os.listdir(CONFIG['data_path']) + [':memory:']:
|
||||
listdir = [':memory:']
|
||||
try:
|
||||
listdir += os.listdir(CONFIG['data_path'])
|
||||
except OSError:
|
||||
pass
|
||||
for db_file in listdir:
|
||||
if db_file.endswith('.sqlite') or db_file == ':memory:':
|
||||
if db_file == ':memory:':
|
||||
db_name = ':memory:'
|
||||
|
||||
+2
-2
@@ -119,14 +119,14 @@ class ConfigManager(object):
|
||||
init = {}
|
||||
if opt.init:
|
||||
for i in opt.init.split(','):
|
||||
if i != 'tests':
|
||||
if i != 'test':
|
||||
init[i] = 1
|
||||
self.options['init'] = init
|
||||
|
||||
update = {}
|
||||
if opt.update:
|
||||
for i in opt.update.split(','):
|
||||
if i != 'tests':
|
||||
if i != 'test':
|
||||
update[i] = 1
|
||||
self.options['update'] = update
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">ir.module.module</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain">[('name', '!=', 'tests')]</field>
|
||||
<field name="domain">[('name', '!=', 'test')]</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="act_module_form_view1">
|
||||
|
||||
@@ -133,7 +133,7 @@ def create_graph(module_list, force=None):
|
||||
for module in module_list:
|
||||
tryton_file = OPJ(MODULES_PATH, module, '__tryton__.py')
|
||||
mod_path = OPJ(MODULES_PATH, module)
|
||||
if module in ('ir', 'workflow', 'res', 'webdav', 'tests'):
|
||||
if module in ('ir', 'workflow', 'res', 'webdav', 'test'):
|
||||
root_path = os.path.dirname(os.path.dirname(__file__))
|
||||
tryton_file = OPJ(root_path, module, '__tryton__.py')
|
||||
mod_path = OPJ(root_path, module)
|
||||
@@ -171,7 +171,7 @@ def create_graph(module_list, force=None):
|
||||
for kind in ('init', 'update'):
|
||||
if (package in CONFIG[kind]) \
|
||||
or (('all' in CONFIG[kind]) \
|
||||
and (package != 'tests')) \
|
||||
and (package != 'test')) \
|
||||
or (kind in force):
|
||||
setattr(node, kind, True)
|
||||
else:
|
||||
@@ -314,7 +314,7 @@ def get_module_list():
|
||||
module_list.add('workflow')
|
||||
module_list.add('res')
|
||||
module_list.add('webdav')
|
||||
module_list.add('tests')
|
||||
module_list.add('test')
|
||||
return list(module_list)
|
||||
|
||||
def register_classes(reload_p=False):
|
||||
@@ -328,11 +328,11 @@ def register_classes(reload_p=False):
|
||||
import trytond.workflow
|
||||
import trytond.res
|
||||
import trytond.webdav
|
||||
import trytond.tests
|
||||
import trytond.test
|
||||
else:
|
||||
for module in ('trytond.model', 'trytond.report', 'trytond.wizard',
|
||||
'trytond.ir', 'trytond.workflow', 'trytond.res',
|
||||
'trytond.webdav', 'trytond.tests'):
|
||||
'trytond.webdav', 'trytond.test'):
|
||||
for i in sys.modules.keys():
|
||||
if i.startswith(module) \
|
||||
and i != module:
|
||||
@@ -345,7 +345,7 @@ def register_classes(reload_p=False):
|
||||
module = package.name
|
||||
logger.info('%s:registering classes' % module)
|
||||
|
||||
if module in ('ir', 'workflow', 'res', 'webdav', 'tests'):
|
||||
if module in ('ir', 'workflow', 'res', 'webdav', 'test'):
|
||||
MODULES.append(module)
|
||||
continue
|
||||
|
||||
@@ -396,7 +396,7 @@ def load_modules(database_name, pool, update=False, lang=None):
|
||||
if update:
|
||||
if 'all' in CONFIG['init']:
|
||||
cursor.execute("SELECT name FROM ir_module_module " \
|
||||
"WHERE name != \'tests\'")
|
||||
"WHERE name != \'test\'")
|
||||
else:
|
||||
cursor.execute("SELECT name FROM ir_module_module " \
|
||||
"WHERE state IN ('installed', 'to install', " \
|
||||
|
||||
@@ -16,6 +16,7 @@ class Pool(object):
|
||||
_locks = {}
|
||||
_pool = {}
|
||||
_pools = {}
|
||||
test = False
|
||||
|
||||
def __new__(cls, database_name):
|
||||
cls._lock.acquire()
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
from test import *
|
||||
from model import *
|
||||
from mptt import *
|
||||
from import_data import *
|
||||
@@ -6,7 +6,7 @@ from trytond.model import ModelSQL, fields
|
||||
|
||||
class ImportDataBoolean(ModelSQL):
|
||||
"Import Data Boolean"
|
||||
_name = 'tests.import_data.boolean'
|
||||
_name = 'test.import_data.boolean'
|
||||
_description = __doc__
|
||||
boolean = fields.Boolean('Boolean')
|
||||
|
||||
@@ -15,7 +15,7 @@ ImportDataBoolean()
|
||||
|
||||
class ImportDataInteger(ModelSQL):
|
||||
"Import Data Integer"
|
||||
_name = 'tests.import_data.integer'
|
||||
_name = 'test.import_data.integer'
|
||||
_description = __doc__
|
||||
integer = fields.Integer('Integer')
|
||||
|
||||
@@ -24,7 +24,7 @@ ImportDataInteger()
|
||||
|
||||
class ImportDataFloat(ModelSQL):
|
||||
"Import Data Float"
|
||||
_name = 'tests.import_data.float'
|
||||
_name = 'test.import_data.float'
|
||||
_description = __doc__
|
||||
float = fields.Float('Float')
|
||||
|
||||
@@ -33,7 +33,7 @@ ImportDataFloat()
|
||||
|
||||
class ImportDataNumeric(ModelSQL):
|
||||
"Import Data Numeric"
|
||||
_name = 'tests.import_data.numeric'
|
||||
_name = 'test.import_data.numeric'
|
||||
_description = __doc__
|
||||
numeric = fields.Numeric('Numeric')
|
||||
|
||||
@@ -42,7 +42,7 @@ ImportDataNumeric()
|
||||
|
||||
class ImportDataChar(ModelSQL):
|
||||
"Import Data Char"
|
||||
_name = 'tests.import_data.char'
|
||||
_name = 'test.import_data.char'
|
||||
_description = __doc__
|
||||
char = fields.Char('Char')
|
||||
|
||||
@@ -51,7 +51,7 @@ ImportDataChar()
|
||||
|
||||
class ImportDataText(ModelSQL):
|
||||
"Import Data Text"
|
||||
_name = 'tests.import_data.text'
|
||||
_name = 'test.import_data.text'
|
||||
_description = __doc__
|
||||
text = fields.Text('Text')
|
||||
|
||||
@@ -60,7 +60,7 @@ ImportDataText()
|
||||
|
||||
class ImportDataSha(ModelSQL):
|
||||
"Import Data Sha"
|
||||
_name = 'tests.import_data.sha'
|
||||
_name = 'test.import_data.sha'
|
||||
_description = __doc__
|
||||
sha = fields.Sha('Sha')
|
||||
|
||||
@@ -69,7 +69,7 @@ ImportDataSha()
|
||||
|
||||
class ImportDataDate(ModelSQL):
|
||||
"Import Data Date"
|
||||
_name = 'tests.import_data.date'
|
||||
_name = 'test.import_data.date'
|
||||
_description = __doc__
|
||||
date = fields.Date('Date')
|
||||
|
||||
@@ -78,7 +78,7 @@ ImportDataDate()
|
||||
|
||||
class ImportDataDateTime(ModelSQL):
|
||||
"Import Data DateTime"
|
||||
_name = 'tests.import_data.datetime'
|
||||
_name = 'test.import_data.datetime'
|
||||
_description = __doc__
|
||||
datetime = fields.DateTime('DateTime')
|
||||
|
||||
@@ -87,7 +87,7 @@ ImportDataDateTime()
|
||||
|
||||
class ImportDataSelection(ModelSQL):
|
||||
"Import Data Selection"
|
||||
_name = 'tests.import_data.selection'
|
||||
_name = 'test.import_data.selection'
|
||||
_description = __doc__
|
||||
selection = fields.Selection([
|
||||
('select1', 'Select 1'),
|
||||
@@ -100,7 +100,7 @@ ImportDataSelection()
|
||||
|
||||
class ImportDataMany2OneTarget(ModelSQL):
|
||||
"Import Data Many2One Target"
|
||||
_name = 'tests.import_data.many2one.target'
|
||||
_name = 'test.import_data.many2one.target'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name')
|
||||
|
||||
@@ -109,9 +109,9 @@ ImportDataMany2OneTarget()
|
||||
|
||||
class ImportDataMany2One(ModelSQL):
|
||||
"Import Data Many2One"
|
||||
_name = 'tests.import_data.many2one'
|
||||
_name = 'test.import_data.many2one'
|
||||
_description = __doc__
|
||||
many2one = fields.Many2One('tests.import_data.many2one.target',
|
||||
many2one = fields.Many2One('test.import_data.many2one.target',
|
||||
'Many2One')
|
||||
|
||||
ImportDataMany2One()
|
||||
@@ -119,7 +119,7 @@ ImportDataMany2One()
|
||||
|
||||
class ImportDataMany2ManyTarget(ModelSQL):
|
||||
"Import Data Many2Many Target"
|
||||
_name = 'tests.import_data.many2many.target'
|
||||
_name = 'test.import_data.many2many.target'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name')
|
||||
|
||||
@@ -128,9 +128,9 @@ ImportDataMany2ManyTarget()
|
||||
|
||||
class ImportDataMany2Many(ModelSQL):
|
||||
"Import Data Many2Many"
|
||||
_name = 'tests.import_data.many2many'
|
||||
_name = 'test.import_data.many2many'
|
||||
_description = __doc__
|
||||
many2many = fields.Many2Many('tests.import_data.many2many.relation',
|
||||
many2many = fields.Many2Many('test.import_data.many2many.relation',
|
||||
'many2many', 'target', 'Many2Many')
|
||||
|
||||
ImportDataMany2Many()
|
||||
@@ -138,19 +138,19 @@ ImportDataMany2Many()
|
||||
|
||||
class ImportDataMany2ManyRelation(ModelSQL):
|
||||
"Import Data Many2Many Relation"
|
||||
_name = 'tests.import_data.many2many.relation'
|
||||
many2many = fields.Many2One('tests.import_data.many2many', 'Many2One')
|
||||
target = fields.Many2One('tests.import_data.many2many.target', 'Target')
|
||||
_name = 'test.import_data.many2many.relation'
|
||||
many2many = fields.Many2One('test.import_data.many2many', 'Many2One')
|
||||
target = fields.Many2One('test.import_data.many2many.target', 'Target')
|
||||
|
||||
ImportDataMany2ManyRelation()
|
||||
|
||||
|
||||
class ImportDataOne2Many(ModelSQL):
|
||||
"Import Data One2Many"
|
||||
_name = 'tests.import_data.one2many'
|
||||
_name = 'test.import_data.one2many'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name')
|
||||
one2many = fields.One2Many('tests.import_data.one2many.target', 'one2many',
|
||||
one2many = fields.One2Many('test.import_data.one2many.target', 'one2many',
|
||||
'One2Many')
|
||||
|
||||
ImportDataOne2Many()
|
||||
@@ -158,17 +158,17 @@ ImportDataOne2Many()
|
||||
|
||||
class ImportDataOne2ManyTarget(ModelSQL):
|
||||
"Import Data One2Many Target"
|
||||
_name = 'tests.import_data.one2many.target'
|
||||
_name = 'test.import_data.one2many.target'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name')
|
||||
one2many = fields.Many2One('tests.import_data.one2many', 'One2Many')
|
||||
one2many = fields.Many2One('test.import_data.one2many', 'One2Many')
|
||||
|
||||
ImportDataOne2ManyTarget()
|
||||
|
||||
|
||||
class ImportDataReferenceSelection(ModelSQL):
|
||||
"Import Data Reference Selection"
|
||||
_name = 'tests.import_data.reference.selection'
|
||||
_name = 'test.import_data.reference.selection'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name')
|
||||
|
||||
@@ -177,9 +177,9 @@ ImportDataReferenceSelection()
|
||||
|
||||
class ImportDataReference(ModelSQL):
|
||||
"Import Data Reference"
|
||||
_name = 'tests.import_data.reference'
|
||||
_name = 'test.import_data.reference'
|
||||
reference = fields.Reference('Reference', [
|
||||
('tests.import_data.reference.selection', 'Test'),
|
||||
('test.import_data.reference.selection', 'Test'),
|
||||
])
|
||||
|
||||
ImportDataReference()
|
||||
@@ -4,57 +4,57 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
|
||||
<record model="tests.import_data.many2one.target"
|
||||
<record model="test.import_data.many2one.target"
|
||||
id="import_data_many2one_target_test">
|
||||
<field name="name">Test</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2one.target"
|
||||
<record model="test.import_data.many2one.target"
|
||||
id="import_data_many2one_target_duplicate1">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2one.target"
|
||||
<record model="test.import_data.many2one.target"
|
||||
id="import_data_many2one_target_duplicate2">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2many.target"
|
||||
<record model="test.import_data.many2many.target"
|
||||
id="import_data_many2many_target_test1">
|
||||
<field name="name">Test 1</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2many.target"
|
||||
<record model="test.import_data.many2many.target"
|
||||
id="import_data_many2many_target_test2">
|
||||
<field name="name">Test 2</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2many.target"
|
||||
<record model="test.import_data.many2many.target"
|
||||
id="import_data_many2many_target_test_comma">
|
||||
<field name="name">Test, comma</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2many.target"
|
||||
<record model="test.import_data.many2many.target"
|
||||
id="import_data_many2many_target_duplicate1">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.many2many.target"
|
||||
<record model="test.import_data.many2many.target"
|
||||
id="import_data_many2many_target_duplicate2">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.reference.selection"
|
||||
<record model="test.import_data.reference.selection"
|
||||
id="import_data_reference_selection_test">
|
||||
<field name="name">Test</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.reference.selection"
|
||||
<record model="test.import_data.reference.selection"
|
||||
id="import_data_reference_selection_duplicate1">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
|
||||
<record model="tests.import_data.reference.selection"
|
||||
<record model="test.import_data.reference.selection"
|
||||
id="import_data_reference_selection_duplicate2">
|
||||
<field name="name">Duplicate</field>
|
||||
</record>
|
||||
@@ -5,7 +5,7 @@ from trytond.model import ModelSingleton, ModelSQL, fields
|
||||
|
||||
class Singleton(ModelSingleton, ModelSQL):
|
||||
'Singleton'
|
||||
_name = 'tests.singleton'
|
||||
_name = 'test.singleton'
|
||||
_description = __doc__
|
||||
|
||||
name = fields.Char('Name')
|
||||
@@ -6,15 +6,15 @@ from trytond.model import ModelView, ModelSQL, fields
|
||||
|
||||
class MPTT(ModelSQL, ModelView):
|
||||
'Modified Preorder Tree Traversal'
|
||||
_name = 'tests.mptt'
|
||||
_name = 'test.mptt'
|
||||
_description = __doc__
|
||||
name = fields.Char('Name', required=True)
|
||||
sequence = fields.Integer('Sequence')
|
||||
parent = fields.Many2One('tests.mptt', "Parent", select=1,
|
||||
parent = fields.Many2One('test.mptt', "Parent", select=1,
|
||||
left="left", right="right")
|
||||
left = fields.Integer('Left', required=True, select=1)
|
||||
right = fields.Integer('Right', required=True, select=1)
|
||||
childs = fields.One2Many('tests.mptt', 'parent', 'Children')
|
||||
childs = fields.One2Many('test.mptt', 'parent', 'Children')
|
||||
active = fields.Boolean('Active')
|
||||
|
||||
def __init__(self):
|
||||
@@ -7,7 +7,7 @@ import datetime
|
||||
|
||||
class Boolean(ModelSQL):
|
||||
'Boolean'
|
||||
_name = 'tests.boolean'
|
||||
_name = 'test.boolean'
|
||||
_description = __doc__
|
||||
boolean = fields.Boolean(string='Boolean', help='Test boolean',
|
||||
required=False)
|
||||
@@ -17,7 +17,7 @@ Boolean()
|
||||
|
||||
class BooleanDefault(ModelSQL):
|
||||
'Boolean Default'
|
||||
_name = 'tests.boolean_default'
|
||||
_name = 'test.boolean_default'
|
||||
_description = __doc__
|
||||
boolean = fields.Boolean(string='Boolean', help='Test boolean',
|
||||
required=False)
|
||||
@@ -30,7 +30,7 @@ BooleanDefault()
|
||||
|
||||
class Integer(ModelSQL):
|
||||
'Integer'
|
||||
_name = 'tests.integer'
|
||||
_name = 'test.integer'
|
||||
_description = __doc__
|
||||
integer = fields.Integer(string='Integer', help='Test integer',
|
||||
required=False)
|
||||
@@ -40,7 +40,7 @@ Integer()
|
||||
|
||||
class IntegerDefault(ModelSQL):
|
||||
'Integer Default'
|
||||
_name = 'tests.integer_default'
|
||||
_name = 'test.integer_default'
|
||||
_description = __doc__
|
||||
integer = fields.Integer(string='Integer', help='Test integer',
|
||||
required=False)
|
||||
@@ -53,7 +53,7 @@ IntegerDefault()
|
||||
|
||||
class IntegerRequired(ModelSQL):
|
||||
'Integer Required'
|
||||
_name = 'tests.integer_required'
|
||||
_name = 'test.integer_required'
|
||||
_description = __doc__
|
||||
integer = fields.Integer(string='Integer', help='Test integer',
|
||||
required=True)
|
||||
@@ -63,7 +63,7 @@ IntegerRequired()
|
||||
|
||||
class Float(ModelSQL):
|
||||
'Float'
|
||||
_name = 'tests.float'
|
||||
_name = 'test.float'
|
||||
_description = __doc__
|
||||
float = fields.Float(string='Float', help='Test float',
|
||||
required=False)
|
||||
@@ -73,7 +73,7 @@ Float()
|
||||
|
||||
class FloatDefault(ModelSQL):
|
||||
'Float Default'
|
||||
_name = 'tests.float_default'
|
||||
_name = 'test.float_default'
|
||||
_description = __doc__
|
||||
float = fields.Float(string='Float', help='Test float',
|
||||
required=False)
|
||||
@@ -86,7 +86,7 @@ FloatDefault()
|
||||
|
||||
class FloatRequired(ModelSQL):
|
||||
'Float Required'
|
||||
_name = 'tests.float_required'
|
||||
_name = 'test.float_required'
|
||||
_description = __doc__
|
||||
float = fields.Float(string='Float', help='Test float',
|
||||
required=True)
|
||||
@@ -96,7 +96,7 @@ FloatRequired()
|
||||
|
||||
class Numeric(ModelSQL):
|
||||
'Numeric'
|
||||
_name = 'tests.numeric'
|
||||
_name = 'test.numeric'
|
||||
_description = __doc__
|
||||
numeric = fields.Numeric(string='Numeric', help='Test numeric',
|
||||
required=False)
|
||||
@@ -106,7 +106,7 @@ Numeric()
|
||||
|
||||
class NumericDefault(ModelSQL):
|
||||
'Numeric Default'
|
||||
_name = 'tests.numeric_default'
|
||||
_name = 'test.numeric_default'
|
||||
_description = __doc__
|
||||
numeric = fields.Numeric(string='Numeric', help='Test numeric',
|
||||
required=False)
|
||||
@@ -119,7 +119,7 @@ NumericDefault()
|
||||
|
||||
class NumericRequired(ModelSQL):
|
||||
'Numeric Required'
|
||||
_name = 'tests.numeric_required'
|
||||
_name = 'test.numeric_required'
|
||||
_description = __doc__
|
||||
numeric = fields.Numeric(string='Numeric', help='Test numeric',
|
||||
required=True)
|
||||
@@ -129,7 +129,7 @@ NumericRequired()
|
||||
|
||||
class Char(ModelSQL):
|
||||
'Char'
|
||||
_name = 'tests.char'
|
||||
_name = 'test.char'
|
||||
_description = __doc__
|
||||
char = fields.Char(string='Char', size=None, help='Test char',
|
||||
required=False)
|
||||
@@ -139,7 +139,7 @@ Char()
|
||||
|
||||
class CharDefault(ModelSQL):
|
||||
'Char Default'
|
||||
_name = 'tests.char_default'
|
||||
_name = 'test.char_default'
|
||||
_description = __doc__
|
||||
char = fields.Char(string='Char', size=None, help='Test char',
|
||||
required=False)
|
||||
@@ -152,7 +152,7 @@ CharDefault()
|
||||
|
||||
class CharRequired(ModelSQL):
|
||||
'Char Required'
|
||||
_name = 'tests.char_required'
|
||||
_name = 'test.char_required'
|
||||
_description = __doc__
|
||||
char = fields.Char(string='Char', size=None, help='Test char',
|
||||
required=True)
|
||||
@@ -162,7 +162,7 @@ CharRequired()
|
||||
|
||||
class CharSize(ModelSQL):
|
||||
'Char Size'
|
||||
_name = 'tests.char_size'
|
||||
_name = 'test.char_size'
|
||||
_description = __doc__
|
||||
char = fields.Char(string='Char', size=5, help='Test char',
|
||||
required=False)
|
||||
@@ -172,7 +172,7 @@ CharSize()
|
||||
|
||||
class Text(ModelSQL):
|
||||
'Text'
|
||||
_name = 'tests.text'
|
||||
_name = 'test.text'
|
||||
_description = __doc__
|
||||
text = fields.Text(string='Text', size=None, help='Test text',
|
||||
required=False)
|
||||
@@ -182,7 +182,7 @@ Text()
|
||||
|
||||
class TextDefault(ModelSQL):
|
||||
'Text Default'
|
||||
_name = 'tests.text_default'
|
||||
_name = 'test.text_default'
|
||||
_description = __doc__
|
||||
text = fields.Text(string='Text', size=None, help='Test text',
|
||||
required=False)
|
||||
@@ -195,7 +195,7 @@ TextDefault()
|
||||
|
||||
class TextRequired(ModelSQL):
|
||||
'Text Required'
|
||||
_name = 'tests.text_required'
|
||||
_name = 'test.text_required'
|
||||
_description = __doc__
|
||||
text = fields.Text(string='Text', size=None, help='Test text',
|
||||
required=True)
|
||||
@@ -205,7 +205,7 @@ TextRequired()
|
||||
|
||||
class TextSize(ModelSQL):
|
||||
'Text Size'
|
||||
_name = 'tests.text_size'
|
||||
_name = 'test.text_size'
|
||||
_description = __doc__
|
||||
text = fields.Text(string='Text', size=5, help='Test text',
|
||||
required=False)
|
||||
@@ -215,7 +215,7 @@ TextSize()
|
||||
|
||||
class Sha(ModelSQL):
|
||||
'Sha'
|
||||
_name = 'tests.sha'
|
||||
_name = 'test.sha'
|
||||
_description = __doc__
|
||||
sha = fields.Sha(string='Sha', help='Test sha',
|
||||
required=False)
|
||||
@@ -225,7 +225,7 @@ Sha()
|
||||
|
||||
class ShaDefault(ModelSQL):
|
||||
'Sha Default'
|
||||
_name = 'tests.sha_default'
|
||||
_name = 'test.sha_default'
|
||||
_description = __doc__
|
||||
sha = fields.Sha(string='Sha', help='Test sha',
|
||||
required=False)
|
||||
@@ -238,7 +238,7 @@ ShaDefault()
|
||||
|
||||
class ShaRequired(ModelSQL):
|
||||
'Sha Required'
|
||||
_name = 'tests.sha_required'
|
||||
_name = 'test.sha_required'
|
||||
_description = __doc__
|
||||
sha = fields.Sha(string='Sha', help='Test sha',
|
||||
required=True)
|
||||
@@ -248,7 +248,7 @@ ShaRequired()
|
||||
|
||||
class Date(ModelSQL):
|
||||
'Date'
|
||||
_name = 'tests.date'
|
||||
_name = 'test.date'
|
||||
_description = __doc__
|
||||
date = fields.Date(string='Date', help='Test date',
|
||||
required=False)
|
||||
@@ -258,7 +258,7 @@ Date()
|
||||
|
||||
class DateDefault(ModelSQL):
|
||||
'Date Default'
|
||||
_name = 'tests.date_default'
|
||||
_name = 'test.date_default'
|
||||
_description = __doc__
|
||||
date = fields.Date(string='Date', help='Test date',
|
||||
required=False)
|
||||
@@ -271,7 +271,7 @@ DateDefault()
|
||||
|
||||
class DateRequired(ModelSQL):
|
||||
'Date Required'
|
||||
_name = 'tests.date_required'
|
||||
_name = 'test.date_required'
|
||||
_description = __doc__
|
||||
date = fields.Date(string='Date', help='Test date',
|
||||
required=True)
|
||||
@@ -281,7 +281,7 @@ DateRequired()
|
||||
|
||||
class DateTime(ModelSQL):
|
||||
'DateTime'
|
||||
_name = 'tests.datetime'
|
||||
_name = 'test.datetime'
|
||||
_description = __doc__
|
||||
datetime = fields.DateTime(string='DateTime', help='Test datetime',
|
||||
required=False)
|
||||
@@ -291,7 +291,7 @@ DateTime()
|
||||
|
||||
class DateTimeDefault(ModelSQL):
|
||||
'DateTime Default'
|
||||
_name = 'tests.datetime_default'
|
||||
_name = 'test.datetime_default'
|
||||
_description = __doc__
|
||||
datetime = fields.DateTime(string='DateTime', help='Test datetime',
|
||||
required=False)
|
||||
@@ -304,7 +304,7 @@ DateTimeDefault()
|
||||
|
||||
class DateTimeRequired(ModelSQL):
|
||||
'DateTime Required'
|
||||
_name = 'tests.datetime_required'
|
||||
_name = 'test.datetime_required'
|
||||
_description = __doc__
|
||||
datetime = fields.DateTime(string='DateTime', help='Test datetime',
|
||||
required=True)
|
||||
@@ -1,7 +1,2 @@
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
from tests import *
|
||||
from model import *
|
||||
from mptt import *
|
||||
from import_data import *
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,415 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import logging
|
||||
logging.basicConfig(level=logging.FATAL)
|
||||
|
||||
import unittest
|
||||
from trytond.tests.test_tryton import POOL, DB, USER, CONTEXT, install_module
|
||||
|
||||
|
||||
class ImportDataTestCase(unittest.TestCase):
|
||||
'''
|
||||
Test import_data.
|
||||
'''
|
||||
|
||||
def setUp(self):
|
||||
install_module('test')
|
||||
self.boolean = POOL.get('test.import_data.boolean')
|
||||
self.integer = POOL.get('test.import_data.integer')
|
||||
self.float = POOL.get('test.import_data.float')
|
||||
self.numeric = POOL.get('test.import_data.numeric')
|
||||
self.char = POOL.get('test.import_data.char')
|
||||
self.text = POOL.get('test.import_data.text')
|
||||
self.sha = POOL.get('test.import_data.sha')
|
||||
self.date = POOL.get('test.import_data.date')
|
||||
self.datetime = POOL.get('test.import_data.datetime')
|
||||
self.selection = POOL.get('test.import_data.selection')
|
||||
self.many2one = POOL.get('test.import_data.many2one')
|
||||
self.many2many = POOL.get('test.import_data.many2many')
|
||||
self.one2many = POOL.get('test.import_data.one2many')
|
||||
self.reference = POOL.get('test.import_data.reference')
|
||||
|
||||
def test0010boolean(self):
|
||||
'''
|
||||
Test boolean.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['True']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['False']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['0']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['True'], ['False']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.boolean.import_data(cursor, USER, ['boolean'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0020integer(self):
|
||||
'''
|
||||
Test integer.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['-1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['1'], ['2']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['1.1']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['-1.1']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.integer.import_data(cursor, USER, ['integer'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0030float(self):
|
||||
'''
|
||||
Test float.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'], [['1.1']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'],
|
||||
[['-1.1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'], [['1']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'], [['']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'], [['1.1'],
|
||||
['2.2']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.float.import_data(cursor, USER, ['float'], [['foo']],
|
||||
CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0040numeric(self):
|
||||
'''
|
||||
Test numeric.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['1.1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['-1.1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['1.1'], ['2.2']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.numeric.import_data(cursor, USER, ['numeric'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0050char(self):
|
||||
'''
|
||||
Test char.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.char.import_data(cursor, USER, ['char'], [['test']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.char.import_data(cursor, USER, ['char'], [['']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.char.import_data(cursor, USER, ['char'], [['test'],
|
||||
['foo'], ['bar']], CONTEXT) == (3, 0, 0, 0))
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0060text(self):
|
||||
'''
|
||||
Test text.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.text.import_data(cursor, USER, ['text'], [['test']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.text.import_data(cursor, USER, ['text'], [['']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.text.import_data(cursor, USER, ['text'], [['test'],
|
||||
['foo'], ['bar']], CONTEXT) == (3, 0, 0, 0))
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0070sha(self):
|
||||
'''
|
||||
Test sha.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.sha.import_data(cursor, USER, ['sha'], [['test']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.sha.import_data(cursor, USER, ['sha'], [['']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.sha.import_data(cursor, USER, ['sha'], [['test'],
|
||||
['foo']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0080date(self):
|
||||
'''
|
||||
Test date.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.date.import_data(cursor, USER, ['date'],
|
||||
[['2010-01-01']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.date.import_data(cursor, USER, ['date'], [['']],
|
||||
CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.date.import_data(cursor, USER, ['date'], [
|
||||
['2010-01-01'], ['2010-02-01']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.date.import_data(cursor, USER, ['date'], [['foo']],
|
||||
CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0090datetime(self):
|
||||
'''
|
||||
Test datetime.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.datetime.import_data(cursor, USER, ['datetime'],
|
||||
[['2010-01-01 12:00:00']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.datetime.import_data(cursor, USER, ['datetime'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.datetime.import_data(cursor, USER, ['datetime'],
|
||||
[['2010-01-01 12:00:00'], ['2010-01-01 13:30:00']], CONTEXT) == (2,
|
||||
0, 0, 0))
|
||||
|
||||
self.assert_(self.datetime.import_data(cursor, USER, ['datetime'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0100selection(self):
|
||||
'''
|
||||
Test selection.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.selection.import_data(cursor, USER, ['selection'],
|
||||
[['select1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.selection.import_data(cursor, USER, ['selection'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.selection.import_data(cursor, USER, ['selection'],
|
||||
[['select1'], ['select2']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.selection.import_data(cursor, USER, ['selection'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0110many2one(self):
|
||||
'''
|
||||
Test many2one.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one'],
|
||||
[['Test']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one:id'],
|
||||
[['test.import_data_many2one_target_test']], CONTEXT) == (1, 0, 0,
|
||||
0))
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one'],
|
||||
[['Test'], ['Test']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one'],
|
||||
[['Duplicate']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one:id'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2one.import_data(cursor, USER, ['many2one:id'],
|
||||
[['test.foo']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0120many2many(self):
|
||||
'''
|
||||
Test many2many.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test 1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many:id'],
|
||||
[['test.import_data_many2many_target_test1']], CONTEXT) == (1, 0,
|
||||
0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test 1,Test 2']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many:id'],
|
||||
[['test.import_data_many2many_target_test1,' \
|
||||
'test.import_data_many2many_target_test2']], CONTEXT) ==
|
||||
(1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test\, comma']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test\, comma,Test 1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test 1'], ['Test 2']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test 1,foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Duplicate']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.many2many.import_data(cursor, USER, ['many2many'],
|
||||
[['Test 1,Duplicate']], CONTEXT)[0] == -1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0130one2many(self):
|
||||
'''
|
||||
Test one2many.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.one2many.import_data(cursor, USER, ['name',
|
||||
'one2many/name'], [['Test', 'Test 1']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.one2many.import_data(cursor, USER, ['name',
|
||||
'one2many/name'], [['Test', 'Test 1'], ['', 'Test 2']], CONTEXT) ==
|
||||
(1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.one2many.import_data(cursor, USER, ['name',
|
||||
'one2many/name'], [['Test 1', 'Test 1'], ['', 'Test 2'], ['Test 2',
|
||||
'Test 1']], CONTEXT) == (2, 0, 0, 0))
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0140reference(self):
|
||||
'''
|
||||
Test reference.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference'],
|
||||
[['test.import_data.reference.selection,Test']], CONTEXT) == (1, 0,
|
||||
0, 0))
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference:id'],
|
||||
[['test.import_data.reference.selection,'\
|
||||
'test.import_data_reference_selection_test']], CONTEXT) ==
|
||||
(1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference'],
|
||||
[['']], CONTEXT) == (1, 0, 0, 0))
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference'],
|
||||
[['test.import_data.reference.selection,Test'],
|
||||
['test.import_data.reference.selection,Test']], CONTEXT) == (2,
|
||||
0, 0, 0))
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference'],
|
||||
[['test.import_data.reference.selection,foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference'],
|
||||
[['test.import_data.reference.selection,Duplicate']], CONTEXT)[0]
|
||||
== -1)
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference:id'],
|
||||
[['test.import_data.reference.selection,foo']], CONTEXT)[0] == -1)
|
||||
|
||||
self.assert_(self.reference.import_data(cursor, USER, ['reference:id'],
|
||||
[['test.import_data.reference.selection,test.foo']], CONTEXT)[0] ==
|
||||
-1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def suite():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(ImportDataTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = suite()
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
|
||||
@@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import logging
|
||||
logging.basicConfig(level=logging.FATAL)
|
||||
|
||||
import unittest
|
||||
from trytond.tests.test_tryton import POOL, DB, USER, CONTEXT, install_module
|
||||
|
||||
|
||||
class ModelSingletonTestCase(unittest.TestCase):
|
||||
'''
|
||||
Test ModelSingleton
|
||||
'''
|
||||
|
||||
def setUp(self):
|
||||
install_module('test')
|
||||
self.singleton = POOL.get('test.singleton')
|
||||
|
||||
def test0010read(self):
|
||||
'''
|
||||
Test read method.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
singleton = self.singleton.read(cursor, USER, 1, ['name'], CONTEXT)
|
||||
self.assert_(singleton['name'] == 'test')
|
||||
self.assert_(singleton['id'] == 1)
|
||||
|
||||
singleton = self.singleton.read(cursor, USER, [1], ['name'], CONTEXT)[0]
|
||||
self.assert_(singleton['name'] == 'test')
|
||||
self.assert_(singleton['id'] == 1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0020create(self):
|
||||
'''
|
||||
Test create method.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
singleton_id = self.singleton.create(cursor, USER, {'name': 'bar'},
|
||||
CONTEXT)
|
||||
self.assert_(singleton_id)
|
||||
|
||||
singleton = self.singleton.read(cursor, USER, singleton_id, ['name'],
|
||||
CONTEXT)
|
||||
self.assert_(singleton['name'] == 'bar')
|
||||
|
||||
singleton2_id = self.singleton.create(cursor, USER, {'name': 'foo'},
|
||||
CONTEXT)
|
||||
self.assert_(singleton2_id == singleton_id)
|
||||
|
||||
singleton = self.singleton.read(cursor, USER, singleton_id, ['name'],
|
||||
CONTEXT)
|
||||
self.assert_(singleton['name'] == 'foo')
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT)
|
||||
self.assert_(len(singleton_ids) == 1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0030copy(self):
|
||||
'''
|
||||
Test copy method.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
singleton_id = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT)[0]
|
||||
|
||||
singleton2_id = self.singleton.copy(cursor, USER, singleton_id, None,
|
||||
CONTEXT)
|
||||
self.assert_(singleton2_id == singleton_id)
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT)
|
||||
self.assert_(len(singleton_ids) == 1)
|
||||
|
||||
singleton3_id = self.singleton.copy(cursor, USER, singleton_id,
|
||||
{'name': 'bar'}, CONTEXT)
|
||||
self.assert_(singleton3_id == singleton_id)
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT)
|
||||
self.assert_(len(singleton_ids) == 1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0040default_get(self):
|
||||
'''
|
||||
Test default_get method.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['name'], CONTEXT)
|
||||
self.assert_(default == {'name': 'test'})
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['create_uid'],
|
||||
CONTEXT)
|
||||
self.assert_(len(default) == 2)
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['create_uid'],
|
||||
CONTEXT, False)
|
||||
self.assert_(len(default) == 1)
|
||||
|
||||
self.singleton.create(cursor, USER, {'name': 'bar'}, CONTEXT)
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['name'], CONTEXT)
|
||||
self.assert_(default == {'name': 'bar'})
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['create_uid'],
|
||||
CONTEXT)
|
||||
self.assert_(len(default) == 2)
|
||||
|
||||
default = self.singleton.default_get(cursor, USER, ['create_uid'],
|
||||
CONTEXT, False)
|
||||
self.assert_(len(default) == 1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0050search(self):
|
||||
'''
|
||||
Test search method.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT)
|
||||
self.assert_(singleton_ids == [1])
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, 1, None,
|
||||
CONTEXT)
|
||||
self.assert_(singleton_ids == [1])
|
||||
|
||||
singleton_ids = self.singleton.search(cursor, USER, [], 0, None, None,
|
||||
CONTEXT, True)
|
||||
self.assert_(singleton_ids == 1)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def suite():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(ModelSingletonTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = suite()
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
@@ -0,0 +1,224 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import logging
|
||||
logging.basicConfig(level=logging.FATAL)
|
||||
|
||||
import unittest
|
||||
from trytond.tests.test_tryton import POOL, DB, USER, CONTEXT, install_module
|
||||
|
||||
|
||||
class MPTTTestCase(unittest.TestCase):
|
||||
'''
|
||||
Test Modified Preorder Tree Traversal.
|
||||
'''
|
||||
|
||||
def setUp(self):
|
||||
install_module('test')
|
||||
self.mptt = POOL.get('test.mptt')
|
||||
|
||||
def CheckTree(self, cursor, parent_id=False, left=0, right=0):
|
||||
child_ids = self.mptt.search(cursor, USER, [
|
||||
('parent', '=', parent_id),
|
||||
], 0, None, None, CONTEXT)
|
||||
childs = self.mptt.read(cursor, USER, child_ids, ['left', 'right'],
|
||||
CONTEXT)
|
||||
childs.sort(lambda x, y: cmp(child_ids.index(x['id']),
|
||||
child_ids.index(y['id'])))
|
||||
for child in childs:
|
||||
assert child['left'] > left, \
|
||||
'Record (%d): left %d <= parent left %d' % \
|
||||
(child['id'], child['left'], left)
|
||||
assert child['left'] < child['right'], \
|
||||
'Record (%d): left %d >= right %d' % \
|
||||
(child['id'], child['left'], child['right'])
|
||||
assert right == 0 or child['right'] < right, \
|
||||
'Record (%d): right %d >= parent right %d' % \
|
||||
(child['id'], child['right'], right)
|
||||
self.CheckTree(cursor, child['id'], left=child['left'],
|
||||
right=child['right'])
|
||||
next_left = 0
|
||||
for child in childs:
|
||||
assert child['left'] > next_left, \
|
||||
'Record (%d): left %d <= next left %d' % \
|
||||
(child['id'], child['left'], next_left)
|
||||
next_left = child['right']
|
||||
childs.reverse()
|
||||
previous_right = 0
|
||||
for child in childs:
|
||||
assert previous_right == 0 or child['right'] < previous_right, \
|
||||
'Record (%d): right %d >= previous right %d' % \
|
||||
(child['id'] , child['right'], previous_right)
|
||||
previous_right = child['left']
|
||||
|
||||
|
||||
def ReParent(self, cursor, parent_id=False):
|
||||
record_ids = self.mptt.search(cursor, USER, [
|
||||
('parent', '=', parent_id),
|
||||
], 0, None, None, CONTEXT)
|
||||
if not record_ids:
|
||||
return
|
||||
for record_id in record_ids:
|
||||
for record2_id in record_ids:
|
||||
if record_id != record2_id:
|
||||
self.mptt.write(cursor, USER, record_id, {
|
||||
'parent': record2_id,
|
||||
}, CONTEXT)
|
||||
self.mptt.write(cursor, USER, record_id, {
|
||||
'parent': parent_id,
|
||||
}, CONTEXT)
|
||||
for record_id in record_ids:
|
||||
self.ReParent(cursor, record_id)
|
||||
|
||||
def ReOrder(self, cursor, parent_id=False):
|
||||
record_ids = self.mptt.search(cursor, USER, [
|
||||
('parent', '=', parent_id),
|
||||
], 0, None, None, CONTEXT)
|
||||
if not record_ids:
|
||||
return
|
||||
i = len(record_ids)
|
||||
for record_id in record_ids:
|
||||
self.mptt.write(cursor, USER, record_id, {
|
||||
'sequence': i,
|
||||
}, CONTEXT)
|
||||
i -= 1
|
||||
i = 0
|
||||
for record_id in record_ids:
|
||||
self.mptt.write(cursor, USER, record_id, {
|
||||
'sequence': i,
|
||||
}, CONTEXT)
|
||||
i += 1
|
||||
for record_id in record_ids:
|
||||
self.ReOrder(cursor, record_id)
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
self.mptt.write(cursor, USER, record_ids, {
|
||||
'sequence': 0,
|
||||
}, CONTEXT)
|
||||
|
||||
def test0010create(self):
|
||||
'''
|
||||
Create tree.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
new_records = [False]
|
||||
for j in range(3):
|
||||
parent_records = new_records
|
||||
new_records = []
|
||||
k = 0
|
||||
for parent_record in parent_records:
|
||||
for i in range(3):
|
||||
record_id = self.mptt.create(cursor, USER, {
|
||||
'name': 'Test %d %d %d' % (j, k, i),
|
||||
'parent': parent_record,
|
||||
}, CONTEXT)
|
||||
new_records.append(record_id)
|
||||
k += 1
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.commit()
|
||||
cursor.close()
|
||||
|
||||
def test0020reorder(self):
|
||||
'''
|
||||
Re-order.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.ReOrder(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0030reparent(self):
|
||||
'''
|
||||
Re-parent.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
self.ReParent(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0040active(self):
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
for record_id in record_ids:
|
||||
if record_id % 2:
|
||||
self.mptt.write(cursor, USER, record_id, {
|
||||
'active': False
|
||||
}, CONTEXT)
|
||||
self.CheckTree(cursor)
|
||||
self.ReParent(cursor)
|
||||
self.CheckTree(cursor)
|
||||
self.ReOrder(cursor)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
self.mptt.write(cursor, USER, record_ids[:len(record_ids)/2], {
|
||||
'active': False
|
||||
}, CONTEXT)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
self.mptt.write(cursor, USER, record_ids, {
|
||||
'active': False
|
||||
}, CONTEXT)
|
||||
self.ReParent(cursor)
|
||||
self.CheckTree(cursor)
|
||||
self.ReOrder(cursor)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def test0050delete(self):
|
||||
'''
|
||||
Delete.
|
||||
'''
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
for record_id in record_ids:
|
||||
if record_id % 2:
|
||||
self.mptt.delete(cursor, USER, record_id, CONTEXT)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
self.mptt.delete(cursor, USER, record_ids[:len(record_ids)/2], CONTEXT)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
cursor = DB.cursor()
|
||||
|
||||
record_ids = self.mptt.search(cursor, USER, [], 0, None, None, CONTEXT)
|
||||
self.mptt.delete(cursor, USER, record_ids, CONTEXT)
|
||||
self.CheckTree(cursor)
|
||||
|
||||
cursor.rollback()
|
||||
cursor.close()
|
||||
|
||||
def suite():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(MPTTTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = suite()
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
@@ -0,0 +1,545 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import unittest
|
||||
import datetime
|
||||
from trytond import pyson
|
||||
|
||||
|
||||
class PYSONTestCase(unittest.TestCase):
|
||||
'''
|
||||
Test PySON.
|
||||
'''
|
||||
|
||||
def test0010Eval(self):
|
||||
'''
|
||||
Test pyson.Eval
|
||||
'''
|
||||
self.assert_(pyson.Eval('test').pyson() == {
|
||||
'__class__': 'Eval',
|
||||
'v': 'test',
|
||||
'd': '',
|
||||
})
|
||||
self.assert_(pyson.Eval('test', 'foo').pyson() == {
|
||||
'__class__': 'Eval',
|
||||
'v': 'test',
|
||||
'd': 'foo',
|
||||
})
|
||||
|
||||
self.assert_(pyson.Eval('test', 'foo').types() == set([type('foo')]))
|
||||
self.assert_(pyson.Eval('test', 1).types() == set([type(1)]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Eval('test', 0))
|
||||
self.assert_(pyson.PYSONDecoder({'test': 1}).decode(eval) == 1)
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 0)
|
||||
|
||||
def test0020Not(self):
|
||||
'''
|
||||
Test pyson.Not
|
||||
'''
|
||||
self.assert_(pyson.Not(True).pyson() == {
|
||||
'__class__': 'Not',
|
||||
'v': True,
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Not, 'foo')
|
||||
|
||||
self.assert_(pyson.Not(True).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Not(True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Not(False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
def test0030Bool(self):
|
||||
'''
|
||||
Test pyson.Bool
|
||||
'''
|
||||
self.assert_(pyson.Bool('test').pyson() == {
|
||||
'__class__': 'Bool',
|
||||
'v': 'test',
|
||||
})
|
||||
|
||||
self.assert_(pyson.Bool('test').types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool('test'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(''))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(0))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool(['test']))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool([]))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool({'foo': 'bar'}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Bool({}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
def test0040And(self):
|
||||
'''
|
||||
Test pyson.And
|
||||
'''
|
||||
self.assert_(pyson.And(True, False).pyson() == {
|
||||
'__class__': 'And',
|
||||
's': (True, False),
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.And, 'test', False)
|
||||
self.assertRaises(AssertionError, pyson.And, True, 'test')
|
||||
self.assertRaises(AssertionError, pyson.And, True, False, 'test')
|
||||
self.assertRaises(AssertionError, pyson.And, True)
|
||||
self.assertRaises(AssertionError, pyson.And)
|
||||
|
||||
self.assert_(pyson.And(True, False).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(True, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(True, True, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(True, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(False, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(False, False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(True, False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(False, True, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.And(False, False, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
def test0050Or(self):
|
||||
'''
|
||||
Test pyson.Or
|
||||
'''
|
||||
self.assert_(pyson.Or(True, False).pyson() == {
|
||||
'__class__': 'Or',
|
||||
's': (True, False),
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Or, 'test', False)
|
||||
self.assertRaises(AssertionError, pyson.Or, True, 'test')
|
||||
self.assertRaises(AssertionError, pyson.Or, True, False, 'test')
|
||||
self.assertRaises(AssertionError, pyson.Or, True)
|
||||
self.assertRaises(AssertionError, pyson.Or)
|
||||
|
||||
self.assert_(pyson.Or(True, False).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(True, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(True, True, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(True, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(False, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(False, False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(True, False, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(False, True, False))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Or(False, False, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
def test0060Equal(self):
|
||||
'''
|
||||
Test pyson.Equal
|
||||
'''
|
||||
self.assert_(pyson.Equal('test', 'test').pyson() == {
|
||||
'__class__': 'Equal',
|
||||
's1': 'test',
|
||||
's2': 'test',
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Equal, 'test', True)
|
||||
|
||||
self.assert_(pyson.Equal('test', 'test').types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Equal('test', 'test'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Equal('foo', 'bar'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
def test0070Greater(self):
|
||||
'''
|
||||
Test pyson.Greater
|
||||
'''
|
||||
self.assert_(pyson.Greater(1, 0).pyson() == {
|
||||
'__class__': 'Greater',
|
||||
's1': 1,
|
||||
's2': 0,
|
||||
'e': False,
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Greater, 'test', 0)
|
||||
self.assertRaises(AssertionError, pyson.Greater, 1, 'test')
|
||||
self.assertRaises(AssertionError, pyson.Greater, 1, 0, 'test')
|
||||
|
||||
self.assert_(pyson.Greater(1, 0).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 0))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(0, 1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 0, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(0, 1, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 1, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
def test0080Less(self):
|
||||
'''
|
||||
Test pyson.Less
|
||||
'''
|
||||
self.assert_(pyson.Less(0, 1).pyson() == {
|
||||
'__class__': 'Less',
|
||||
's1': 0,
|
||||
's2': 1,
|
||||
'e': False,
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Less, 'test', 1)
|
||||
self.assertRaises(AssertionError, pyson.Less, 0, 'test')
|
||||
self.assertRaises(AssertionError, pyson.Less, 0, 1, 'test')
|
||||
|
||||
self.assert_(pyson.Less(0, 1).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(0, 1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(1, 0))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(0, 1, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(1, 0, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(1, 1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Less(1, 1, True))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
def test0090If(self):
|
||||
'''
|
||||
Test pyson.If
|
||||
'''
|
||||
self.assert_(pyson.If(True, 'foo', 'bar').pyson() == {
|
||||
'__class__': 'If',
|
||||
'c': True,
|
||||
't': 'foo',
|
||||
'e': 'bar',
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.If, 'test', 'foo', 'bar')
|
||||
self.assertRaises(AssertionError, pyson.If, True, 'foo', False)
|
||||
|
||||
self.assert_(pyson.If(True, 'foo', 'bar').types() == set([type('foo')]))
|
||||
self.assert_(pyson.If(True, False, True).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.If(True, 'foo', 'bar'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 'foo')
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.If(False, 'foo', 'bar'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 'bar')
|
||||
|
||||
def test0100Get(self):
|
||||
'''
|
||||
Test pyson.Get
|
||||
'''
|
||||
self.assert_(pyson.Get({'foo': 'bar'}, 'foo', 'default').pyson() == {
|
||||
'__class__': 'Get',
|
||||
'v': {'foo': 'bar'},
|
||||
'k': 'foo',
|
||||
'd': 'default',
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Get, 'test', 'foo', 'default')
|
||||
self.assertRaises(AssertionError, pyson.Get, {}, 1, 'default')
|
||||
|
||||
self.assert_(pyson.Get({}, 'foo', 'default').types() == set([str]))
|
||||
self.assert_(pyson.Get({}, 'foo', True).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Get(
|
||||
{'foo': 'bar'}, 'foo', 'default'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 'bar')
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Get(
|
||||
{'foo': 'bar'}, 'test', 'default'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 'default')
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Get(
|
||||
{}, 'foo', 'default'))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == 'default')
|
||||
|
||||
def test0110In(self):
|
||||
'''
|
||||
Test pyson.In
|
||||
'''
|
||||
self.assert_(pyson.In('foo', {'foo': 'bar'}).pyson() == {
|
||||
'__class__': 'In',
|
||||
'k': 'foo',
|
||||
'v': {'foo': 'bar'},
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.In, object(), {})
|
||||
self.assertRaises(AssertionError, pyson.In, 'test', 'foo')
|
||||
|
||||
self.assert_(pyson.In('foo', {}).types() == set([bool]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('foo', {'foo': 'bar'}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('1', {1: 'bar'}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('test', {'foo': 'bar'}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('1', {2: 'bar'}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('test', {}))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('foo', ['foo']))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In(1, [1]))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == True)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('test', ['foo']))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In(1, [2]))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.In('test', []))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval) == False)
|
||||
|
||||
def test0120Date(self):
|
||||
'''
|
||||
Test pyson.Date
|
||||
'''
|
||||
self.assert_(pyson.Date(2010, 1, 12, -1, 12, -7).pyson() == {
|
||||
'__class__': 'Date',
|
||||
'y': 2010,
|
||||
'M': 1,
|
||||
'd': 12,
|
||||
'dy': -1,
|
||||
'dM': 12,
|
||||
'dd': -7
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.Date, 'test', 1, 12, -1, 12,
|
||||
-7)
|
||||
self.assertRaises(AssertionError, pyson.Date, 2010, 'test', 12, -1, 12,
|
||||
-7)
|
||||
self.assertRaises(AssertionError, pyson.Date, 2010, 1, 'test', -1, 12,
|
||||
-7)
|
||||
self.assertRaises(AssertionError, pyson.Date, 2010, 1, 12, 'test', 12,
|
||||
-7)
|
||||
self.assertRaises(AssertionError, pyson.Date, 2010, 1, 12, -1, 'test',
|
||||
-7)
|
||||
self.assertRaises(AssertionError, pyson.Date, 2010, 1, 12, -1, 12,
|
||||
'test')
|
||||
|
||||
self.assert_(pyson.Date(2010, 1, 12, -1, 12, -7).types()
|
||||
== set([datetime.date]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Date())
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date.today())
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Date(2010, 1, 12))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date(2010, 1, 12))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Date(2010, 1, 12, -1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date(2009, 1, 12))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Date(2010, 1, 12, 0, 12))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date(2011, 1, 12))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.Date(2010, 1, 12, 0, 0, -7))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date(2010, 1, 5))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(datetime.date(2010, 2, 22))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.date(2010, 2, 22))
|
||||
|
||||
def test0130DateTime(self):
|
||||
'''
|
||||
Test pyson.DateTime
|
||||
'''
|
||||
self.assert_(pyson.DateTime(2010, 1, 12, 10, 30, 20, 0,
|
||||
-1, 12, -7, 2, 15, 30, 1).pyson() == {
|
||||
'__class__': 'DateTime',
|
||||
'y': 2010,
|
||||
'M': 1,
|
||||
'd': 12,
|
||||
'h': 10,
|
||||
'm': 30,
|
||||
's': 20,
|
||||
'ms': 0,
|
||||
'dy': -1,
|
||||
'dM': 12,
|
||||
'dd': -7,
|
||||
'dh': 2,
|
||||
'dm': 15,
|
||||
'ds': 30,
|
||||
'dms': 1,
|
||||
})
|
||||
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 'test', 1, 12, 10,
|
||||
30, 20, 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 'test', 12, 10,
|
||||
30, 20, 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 'test', 10,
|
||||
30, 20, 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 'test',
|
||||
30, 20, 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10,
|
||||
'test', 20, 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
'test', 0, -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 'test', -1, 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, 'test', 12, -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 'test', -7, 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 12, 'test', 2, 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 12, -7, 'test', 15, 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 12, -7, 2, 'test', 30, 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 12, -7, 2, 15, 'test', 1)
|
||||
self.assertRaises(AssertionError, pyson.DateTime, 2010, 1, 12, 10, 30,
|
||||
20, 0, -1, 12, -7, 2, 15, 30, 'test')
|
||||
|
||||
self.assert_(pyson.DateTime(2010, 1, 12, 10, 30, 20, 0,
|
||||
-1, 12, -7, 2, 15, 30, 1).types() == set([datetime.datetime]))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 12, 10, 30, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, -1))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2009, 1, 12, 10, 30, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 12))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2011, 1, 12, 10, 30, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 0, -7))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 5, 10, 30, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 0, 0, 12))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 12, 22, 30, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 0, 0, 0, -30))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 12, 10, 0, 20, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 0, 0, 0, 0, 30))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 12, 10, 30, 50, 0))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(pyson.DateTime(2010, 1, 12,
|
||||
10, 30, 20, 0, 0, 0, 0, 0, 0, 0, 200))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 1, 12, 10, 30, 20, 200))
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(datetime.datetime(
|
||||
2010, 2, 22, 10, 30, 20, 200))
|
||||
self.assert_(pyson.PYSONDecoder().decode(eval)
|
||||
== datetime.datetime(2010, 2, 22, 10, 30, 20, 200))
|
||||
|
||||
def test0900Composite(self):
|
||||
'''
|
||||
Test Composite
|
||||
'''
|
||||
|
||||
eval = pyson.PYSONEncoder().encode(['id', pyson.If(pyson.Not(
|
||||
pyson.In('company', pyson.Eval('context', {}))), '=', '!='),
|
||||
pyson.Get(pyson.Eval('context', {}), 'company', 0)])
|
||||
self.assert_(pyson.PYSONDecoder({'context': {'company': 1}}
|
||||
).decode(eval) == ['id', '!=', 1])
|
||||
self.assert_(pyson.PYSONDecoder({'context': {}}
|
||||
).decode(eval) == ['id', '=', 0])
|
||||
|
||||
def suite():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(PYSONTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = suite()
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import unittest
|
||||
import datetime
|
||||
from trytond.tools import reduce_ids, safe_eval, datetime_strftime
|
||||
|
||||
|
||||
class ToolsTestCase(unittest.TestCase):
|
||||
'''
|
||||
Test tools.
|
||||
'''
|
||||
|
||||
def test0000reduce_ids_empty(self):
|
||||
'''
|
||||
Test reduce_ids empty list.
|
||||
'''
|
||||
self.assert_(('(%s)', [False]) == reduce_ids('id', []))
|
||||
|
||||
def test0010reduce_ids_continue(self):
|
||||
'''
|
||||
Test reduce_ids continue list.
|
||||
'''
|
||||
self.assert_(('(((id >= %s) AND (id <= %s)))', [0, 9]) == \
|
||||
reduce_ids('id', range(10)))
|
||||
|
||||
def test0020reduce_ids_one_hole(self):
|
||||
'''
|
||||
Test reduce_ids continue list with one hole.
|
||||
'''
|
||||
self.assert_(('(((id >= %s) AND (id <= %s)) OR ' \
|
||||
'((id >= %s) AND (id <= %s)))', [0, 9, 20, 29]) == \
|
||||
reduce_ids('id', range(10) + map(lambda x: x + 20, range(10))))
|
||||
|
||||
def test0030reduce_ids_short_continue(self):
|
||||
'''
|
||||
Test reduce_ids short continue list.
|
||||
'''
|
||||
self.assert_(('((id IN (%s,%s,%s,%s)))', [0, 1, 2, 3]) == \
|
||||
reduce_ids('id', range(4)))
|
||||
|
||||
def test0040reduce_ids_complex(self):
|
||||
'''
|
||||
Test reduce_ids complex list.
|
||||
'''
|
||||
self.assert_(('(((id >= %s) AND (id <= %s)) OR ' \
|
||||
'(id IN (%s,%s,%s,%s,%s)))', [0, 14, 25, 26, 27, 28, 29]) == \
|
||||
reduce_ids('id', range(10) + map(lambda x: x + 25, range(5)) + \
|
||||
map(lambda x: x + 5, range(10))))
|
||||
|
||||
def test0050reduce_ids_complex_small_continue(self):
|
||||
'''
|
||||
Test reduce_ids complex list with small continue.
|
||||
'''
|
||||
self.assert_(('(((id >= %s) AND (id <= %s)) OR (id IN (%s,%s,%s,%s)))',
|
||||
[1, 12, 15, 18, 19, 21]) == \
|
||||
reduce_ids('id', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15,
|
||||
18, 19, 21]))
|
||||
|
||||
def test0060safe_eval_builtin(self):
|
||||
'''
|
||||
Attempt to access a unsafe builtin.
|
||||
'''
|
||||
self.assertRaises(Exception, safe_eval, "open('test.txt', 'w')")
|
||||
|
||||
def test0061safe_eval_getattr(self):
|
||||
'''
|
||||
Attempt to get arround direct attr access.
|
||||
'''
|
||||
self.assertRaises(Exception, safe_eval, "getattr(int, '__abs__')")
|
||||
|
||||
def test0062safe_eval_func_globals(self):
|
||||
'''
|
||||
Attempt to access global enviroment where fun was defined.
|
||||
'''
|
||||
self.assertRaises(Exception, safe_eval,
|
||||
"def x(): pass; print x.func_globals")
|
||||
|
||||
def test0063safe_eval_lowlevel(self):
|
||||
'''
|
||||
Lowlevel tricks to access 'object'.
|
||||
'''
|
||||
self.assertRaises(Exception, safe_eval,
|
||||
"().__class__.mro()[1].__subclasses__()")
|
||||
|
||||
def test0070datetime_strftime(self):
|
||||
'''
|
||||
Test datetime_strftime
|
||||
'''
|
||||
self.assert_(datetime_strftime(datetime.date(2005, 3, 2),
|
||||
'%Y-%m-%d'), '2005-03-02')
|
||||
self.assert_(datetime_strftime(datetime.date(1805, 3, 2),
|
||||
'%Y-%m-%d'), '1805-03-02')
|
||||
|
||||
def suite():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(ToolsTestCase)
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = suite()
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
+159
-3262
File diff suppressed because it is too large
Load Diff
@@ -404,6 +404,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
|
||||
self.fs2db = Fs2bdAccessor(cursor, self.user, self.modeldata_obj, pool)
|
||||
self.to_delete = self.populate_to_delete()
|
||||
self.noupdate = None
|
||||
self.skip_data = False
|
||||
|
||||
# Tag handlders are used to delegate the processing
|
||||
self.taghandlerlist = {
|
||||
@@ -453,6 +454,11 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
|
||||
|
||||
elif name == "data":
|
||||
self.noupdate = bool(int(attributes.get("noupdate", '0')))
|
||||
if self.pool.test and \
|
||||
bool(int(attributes.get("skiptest", '0'))):
|
||||
self.skip_data = True
|
||||
else:
|
||||
self.skip_data = False
|
||||
|
||||
elif name == "tryton":
|
||||
pass
|
||||
@@ -461,7 +467,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
|
||||
logging.getLogger("convert").info( "Tag %s not supported" %
|
||||
name)
|
||||
return
|
||||
else:
|
||||
elif not self.skip_data:
|
||||
self.taghandler.startElement(name, attributes)
|
||||
|
||||
def characters(self, data):
|
||||
@@ -472,7 +478,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
|
||||
|
||||
# Closing tag found, if we are in a delegation the handler
|
||||
# know what to do:
|
||||
if self.taghandler:
|
||||
if self.taghandler and not self.skip_data:
|
||||
self.taghandler = self.taghandler.endElement(name)
|
||||
|
||||
def current_state(self):
|
||||
|
||||
@@ -94,7 +94,7 @@ def file_open(name, mode="r", subdir='modules'):
|
||||
or name.startswith('workflow' + os.sep) \
|
||||
or name.startswith('res' + os.sep) \
|
||||
or name.startswith('webdav' + os.sep) \
|
||||
or name.startswith('tests' + os.sep)):
|
||||
or name.startswith('test' + os.sep)):
|
||||
name = os.path.join(root_path, name)
|
||||
else:
|
||||
name = os.path.join(root_path, subdir, name)
|
||||
|
||||
Reference in New Issue
Block a user