#!/usr/bin/python from univention.admin import property import unittest from argparse import Namespace as N class FakeObject(dict): set_defaults = True class TestProperty(unittest.TestCase): def test_default_sv(self): p = property() o = N(set_defaults=False) self.assertEqual(p.default(o), '') def test_default_mv(self): p = property(multivalue=True) o = N(set_defaults=False) self.assertEqual(p.default(o), []) def test_base_default_sv(self): p = property() o = FakeObject() self.assertIsNone(p.default(o)) def test_base_default_mv(self): p = property(multivalue=True) o = FakeObject() self.assertEqual(p.default(o), []) def test_str_default_sv(self): p = property(default='x') o = FakeObject() self.assertEqual(p.default(o), 'x') # def test_str_default_mv(self): # p = property(multivalue=True, default=('x', 'y')) # o = N(set_defaults=True) # self.assertEqual(p.default(o), ['x', 'y']) def test_complex_syntax(self): s = N(subsyntaxes=()) p = property(multivalue=False, default=(('x', 'y'),), syntax=s) o = FakeObject() self.assertEqual(p.default(o), ('x', 'y')) def test_template_sv_empty(self): p = property(multivalue=False, default=('templ', ['prop'])) o = FakeObject(prop='') self.assertIsNone(p.default(o)) def test_template_sv_set(self): p = property(multivalue=False, default=('', ['prop'])) o = FakeObject(prop='value') self.assertEqual(p.default(o), 'value') def test_template_mv_set(self): p = property(multivalue=True, default=('', '')) o = FakeObject(prop1='value1', prop2='value2') self.assertEqual(p.default(o), ['value1', 'value2']) def test_template_mv_incomplete(self): p = property(multivalue=True, default=('', None)) o = FakeObject() self.assertEqual(p.default(o), ['']) def test_template_mv_empty(self): p = property(multivalue=True, default=('', None)) o = FakeObject() self.assertEqual(p.default(o), []) def test_callable_set(self): x = object() o = FakeObject(prop='value1') f = lambda obj, extra: 'value2' if extra is x and obj is o else 'error' p = property(multivalue=False, default=(f, ['prop'], x)) self.assertEqual(p.default(o), 'value2') def test_callable_empty_sv(self): x = object() o = FakeObject(prop='') f = lambda obj, extra: 1 / 0 p = property(multivalue=False, default=(f, ['prop'], x)) self.assertIsNone(p.default(o)) def test_callable_empty_mv(self): x = object() o = FakeObject(prop='') f = lambda obj, extra: 1 / 0 p = property(multivalue=True, default=(f, ['prop'], x)) self.assertEqual(p.default(o), []) def test_fallback_sv(self): o = FakeObject() p = property(multivalue=False, default=(None,)) self.assertIsNone(p.default(o)) def test_fallback_mv(self): o = FakeObject() p = property(multivalue=True, default=(None,)) self.assertEqual(p.default(o), []) if __name__ == '__main__': unittest.main()