Files
tryton/trytond/tests/test_tools.py
T

124 lines
4.7 KiB
Python
Raw Normal View History

2010-03-04 14:02:27 +01:00
# -*- coding: utf-8 -*-
2014-12-02 12:54:01 +01:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
2010-03-04 14:02:27 +01:00
import unittest
2014-10-27 23:12:45 +01:00
import doctest
2010-03-04 14:02:27 +01:00
import datetime
2013-09-06 22:32:37 +02:00
import sql
import sql.operators
2011-07-20 19:04:52 +02:00
2015-03-09 19:40:41 +01:00
from trytond.tools import reduce_ids, datetime_strftime, \
reduce_domain, decimal_, is_instance_method
2010-03-04 14:02:27 +01:00
class ToolsTestCase(unittest.TestCase):
2014-01-12 19:58:22 +01:00
'Test tools'
2013-09-06 22:32:37 +02:00
table = sql.Table('test')
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_empty(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids empty list'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id, []), sql.Literal(False))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_continue(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids continue list'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id, range(10)),
sql.operators.Or(((self.table.id >= 0) & (self.table.id <= 9),)))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_one_hole(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids continue list with one hole'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id, range(10) + range(20, 30)),
((self.table.id >= 0) & (self.table.id <= 9))
| ((self.table.id >= 20) & (self.table.id <= 29)))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_short_continue(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids short continue list'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id, range(4)),
sql.operators.Or((self.table.id.in_(range(4)),)))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_complex(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids complex list'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id,
range(10) + range(25, 30) + range(15, 20)),
(((self.table.id >= 0) & (self.table.id <= 14))
| (self.table.id.in_(range(25, 30)))))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_complex_small_continue(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids complex list with small continue'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id,
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 21]),
(((self.table.id >= 1) & (self.table.id <= 12))
| (self.table.id.in_([15, 18, 19, 21]))))
2010-03-04 14:02:27 +01:00
2016-02-06 19:10:35 +01:00
def test_reduce_ids_float(self):
2014-01-12 19:58:22 +01:00
'Test reduce_ids with integer as float'
2013-09-06 22:32:37 +02:00
self.assertEqual(reduce_ids(self.table.id,
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0,
15.0, 18.0, 19.0, 21.0]),
(((self.table.id >= 1.0) & (self.table.id <= 12.0))
| (self.table.id.in_([15.0, 18.0, 19.0, 21.0]))))
self.assertRaises(AssertionError, reduce_ids, self.table.id, [1.1])
2012-01-28 12:46:09 +01:00
2016-02-06 19:10:35 +01:00
def test_datetime_strftime(self):
2014-01-12 19:58:22 +01:00
'Test datetime_strftime'
2010-03-04 14:02:27 +01:00
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 test_reduce_domain(self):
2014-01-12 19:58:22 +01:00
'Test reduce_domain'
clause = ('x', '=', 'x')
tests = (
([clause], ['AND', clause]),
([clause, [clause]], ['AND', clause, clause]),
(['AND', clause, [clause]], ['AND', clause, clause]),
([clause, ['AND', clause]], ['AND', clause, clause]),
([clause, ['AND', clause, clause]],
['AND', clause, clause, clause]),
(['AND', clause, ['AND', clause]], ['AND', clause, clause]),
([[[clause]]], ['AND', clause]),
(['OR', clause], ['OR', clause]),
(['OR', clause, [clause]], ['OR', clause, ['AND', clause]]),
(['OR', clause, [clause, clause]],
['OR', clause, ['AND', clause, clause]]),
(['OR', clause, ['OR', clause]], ['OR', clause, clause]),
(['OR', clause, [clause, ['OR', clause, clause]]],
['OR', clause, ['AND', clause, ['OR', clause, clause]]]),
(['OR', [clause]], ['OR', ['AND', clause]]),
([], []),
2011-07-11 20:57:10 +02:00
(['OR', clause, []], ['OR', clause, []]),
(['AND', clause, []], ['AND', clause, []]),
)
for i, j in tests:
self.assertEqual(reduce_domain(i), j,
'%s -> %s != %s' % (i, reduce_domain(i), j))
def test_is_instance_method(self):
'Test is_instance_method'
class Foo(object):
@staticmethod
def static():
pass
@classmethod
def klass(cls):
pass
def instance(self):
pass
self.assertFalse(is_instance_method(Foo, 'static'))
self.assertFalse(is_instance_method(Foo, 'klass'))
self.assertTrue(is_instance_method(Foo, 'instance'))
2011-07-20 19:04:52 +02:00
2010-03-04 14:02:27 +01:00
def suite():
2011-07-20 19:04:52 +02:00
func = unittest.TestLoader().loadTestsFromTestCase
suite = unittest.TestSuite()
for testcase in (ToolsTestCase,):
suite.addTests(func(testcase))
2014-10-27 23:12:45 +01:00
suite.addTest(doctest.DocTestSuite(decimal_))
2011-07-20 19:04:52 +02:00
return suite