import datetime import decimal import unittest from lesana import types class testTypes(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_base(self): checker = types.LesanaType() # The base class does not implement empty nor load with self.assertRaises(NotImplementedError): checker.empty() with self.assertRaises(NotImplementedError): checker.load("") def test_string(self): checker = types.LesanaString() s = checker.empty() self.assertEqual(s, "") s = checker.load("Hello World!") self.assertEqual(s, "Hello World!") s = checker.load(None) self.assertEqual(s, None) def test_text(self): checker = types.LesanaText() s = checker.empty() self.assertEqual(s, "") s = checker.load("Hello World!") self.assertEqual(s, "Hello World!") s = checker.load(None) self.assertEqual(s, None) def test_int(self): checker = types.LesanaInt() v = checker.empty() self.assertEqual(v, 0) v = checker.load("10") self.assertEqual(v, 10) v = checker.load(10.5) self.assertEqual(v, 10) for d in ("ten", "10.5"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_float(self): checker = types.LesanaFloat() v = checker.empty() self.assertEqual(v, 0.0) v = checker.load("10") self.assertEqual(v, 10) v = checker.load(10.5) self.assertEqual(v, 10.5) v = checker.load("10.5") self.assertEqual(v, 10.5) for d in ("ten"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_decimal(self): checker = types.LesanaDecimal() v = checker.empty() self.assertEqual(v, decimal.Decimal(0)) v = checker.load("10") self.assertEqual(v, decimal.Decimal(10)) v = checker.load(10.5) self.assertEqual(v, decimal.Decimal(10.5)) v = checker.load("10.5") self.assertEqual(v, decimal.Decimal(10.5)) for d in ("ten"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_timestamp(self): checker = types.LesanaTimestamp() v = checker.empty() self.assertEqual(v, None) now = datetime.datetime.now() v = checker.load(now) self.assertEqual(v, now) v = checker.load("1600000000") self.assertEqual(v, datetime.datetime(2020, 9, 13, 14, 26, 40)) today = datetime.date.today() for d in ( today, "today", "2020-13-01", "2020-01-01", "2020-01-01 10:00" ): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_datetime(self): checker = types.LesanaDatetime() v = checker.empty() self.assertEqual(v, None) now = datetime.datetime.now() v = checker.load(now) self.assertEqual(v, now) today = datetime.date.today() v = checker.load(today) self.assertIsInstance(v, datetime.datetime) for part in ('year', 'month', 'day'): self.assertEqual(getattr(v, part), getattr(today, part)) v = checker.load("2020-01-01") self.assertEqual(v, datetime.datetime(2020, 1, 1)) v = checker.load("2020-01-01 10:00") self.assertEqual(v, datetime.datetime(2020, 1, 1, 10, 0)) for d in ("today", "2020-13-01"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_date(self): checker = types.LesanaDate() v = checker.empty() self.assertEqual(v, None) now = datetime.datetime.now() v = checker.load(now) self.assertIsInstance(v, datetime.date) for part in ('year', 'month', 'day'): self.assertEqual(getattr(v, part), getattr(now, part)) today = datetime.date.today() v = checker.load(today) self.assertEqual(v, today) v = checker.load("2020-01-01") self.assertEqual(v, datetime.datetime(2020, 1, 1)) v = checker.load("2020-01-01 10:00") self.assertEqual(v, datetime.datetime(2020, 1, 1, 10, 0)) for d in ("today", "2020-13-01"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) def test_boolean(self): checker = types.LesanaBoolean() v = checker.empty() self.assertEqual(v, None) v = checker.load(True) self.assertEqual(v, True) for d in ("maybe", "yes", "no"): with self.assertRaises(types.LesanaValueError): checker.load(d) v = checker.load(None) self.assertEqual(v, None) if __name__ == '__main__': unittest.main()