def test_todo_ge(self): t1 = Todo() t2 = Todo(name='a') t3 = Todo(name='b') t4 = Todo(due=datetime.fromtimestamp(10)) t5 = Todo(due=datetime.fromtimestamp(20)) # Check comparison by name self.assertTrue(t1 >= t1) self.assertTrue(t1 <= t2) self.assertFalse(t2 <= t1) self.assertFalse(t2 >= t3) self.assertTrue(t2 >= t2) self.assertTrue(t3 >= t2) # Check comparison by due time self.assertFalse(t4 >= t5) self.assertTrue(t4 >= t4) self.assertTrue(t5 >= t4) # Check invalid call with self.assertRaises(TypeError): t4 > t4.due with self.assertRaises(TypeError): t2 >= 1
def test_invalid_time_attributes(self): # due and duration must not be set at the same time with self.assertRaises(ValueError): Todo(begin=1, due=2, duration=1) # duration requires begin with self.assertRaises(ValueError): Todo(duration=1)
def test_neq_todos(self): c0, c1 = Calendar(), Calendar() t0, t1 = Todo(), Todo() c0.events.add(t0) c1.events.add(t1) self.assertNotEqual(c0, c1)
def test_priority(self): t1 = Todo(priority=0) self.assertEqual(t1.priority, 0) t2 = Todo(priority=9) self.assertEqual(t2.priority, 9) with self.assertRaises(ValueError): Todo(priority=-1) with self.assertRaises(ValueError): Todo(priority=10)
def test_begin(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=utc) t = Todo(begin=begin) self.assertEqual(t.begin, arrow.get(begin)) # begin after due t = Todo(due=1) with self.assertRaises(ValueError): t.begin = 2
def test_percent(self): t1 = Todo(percent=0) self.assertEqual(t1.percent, 0) t2 = Todo(percent=100) self.assertEqual(t2.percent, 100) with self.assertRaises(ValueError): Todo(percent=-1) with self.assertRaises(ValueError): Todo(percent=101)
def test_begin(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=datetime_tzutc) t = Todo(begin=begin) self.assertEqual(t.begin, begin) # begin after due t = Todo(due=datetime.fromtimestamp(1)) with self.assertRaises(ValueError): t.begin = datetime.fromtimestamp(2)
def test_begin(self): begin = arrow.get('2018-02-18T12:19') t = Todo(begin=begin) self.assertEqual(t.begin, begin) # begin after due with self.assertRaises(ValueError): t = Todo(due=1) t.begin = 2
def test_todo_ne(self): t1 = Todo() t2 = Todo() self.assertFalse(t1 != t1) self.assertTrue(t1 != t2) with self.assertRaises(NotImplementedError): t1 != 1
def test_invalid_time_attributes(self): # due and duration must not be set at the same time with self.assertRaises(ValueError): Todo(begin=datetime.now(), due=datetime.now() + timedelta(1), duration=timedelta(1)) # duration requires begin with self.assertRaises(ValueError): Todo(duration=timedelta(1))
def test_repr(self): c = Calendar() self.assertEqual(c.__repr__(), '<Calendar with 0 event and 0 todo>') c.events.append(Event()) c.todos.append(Todo()) self.assertEqual(c.__repr__(), '<Calendar with 1 event and 1 todo>') c.events.append(Event()) c.todos.append(Todo()) self.assertEqual(c.__repr__(), '<Calendar with 2 events and 2 todos>')
def test_duration(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=utc) t1 = Todo(begin=begin, duration={'hours': 1}) self.assertEqual(t1.duration, timedelta(hours=1)) t2 = Todo(begin=begin, duration=1) self.assertEqual(t2.duration, timedelta(days=1)) t3 = Todo(begin=begin, duration=timedelta(minutes=1)) self.assertEqual(t3.duration, timedelta(minutes=1)) # Calculate duration from begin and due values t4 = Todo(begin=begin, due=begin + timedelta(1)) self.assertEqual(t4.duration, timedelta(1))
def test_duration(self): begin = arrow.get('2018-02-18T12:19') t1 = Todo(begin=begin, duration={'hours': 1}) self.assertEqual(t1.duration, timedelta(hours=1)) t2 = Todo(begin=begin, duration=1) self.assertEqual(t2.duration, timedelta(days=1)) t3 = Todo(begin=begin, duration=timedelta(minutes=1)) self.assertEqual(t3.duration, timedelta(minutes=1)) # Calculate duration from begin and due values t4 = Todo(begin=begin, due=begin.shift(days=1)) self.assertEqual(t4.duration, timedelta(1))
def test_urepr(self): # TODO : more cases c = Calendar() self.assertEqual(c.__urepr__(), '<Calendar with 0 event and 0 todo>') c.events.add(Event()) c.todos.add(Todo()) self.assertEqual(c.__urepr__(), '<Calendar with 1 event and 1 todo>') c.events.add(Event()) c.todos.add(Todo()) self.assertEqual(c.__urepr__(), '<Calendar with 2 events and 2 todos>')
def test_due(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=utc) due = begin + timedelta(1) t1 = Todo(due=due) self.assertEqual(t1.due, begin + timedelta(1)) due = begin - timedelta(1) with self.assertRaises(ValueError): Todo(begin=begin, due=due) # Calculate due from begin and duration value t2 = Todo(begin=begin, duration=1) self.assertEqual(t2.due, begin + timedelta(1))
def test_due(self): begin = arrow.get('2018-02-18T12:19') due = begin.shift(days=1) with freeze_time(begin.format()): t1 = Todo(due=due) self.assertEqual(t1.due, begin.shift(days=1)) due = begin.shift(days=-1) with self.assertRaises(ValueError): Todo(begin=begin, due=due) # Calculate due from begin and duration value t2 = Todo(begin=begin, duration=1) self.assertEqual(t2.due, begin.shift(days=1))
def test_escape_output(self): dtstamp = datetime(2018, 2, 19, 21, 00, tzinfo=utc) t = Todo(dtstamp=dtstamp, uid='Uid') t.name = "Hello, with \\ special; chars and \n newlines" t.location = "Here; too" t.description = "Every\nwhere ! Yes, yes !" test_str = CRLF.join( ("BEGIN:VTODO", "DESCRIPTION:Every\\nwhere ! Yes\\, yes !", "DTSTAMP:20180219T210000Z", "LOCATION:Here\\; too", "SUMMARY:Hello\\, with \\\\ special\\; chars and \\n newlines", "UID:Uid", "END:VTODO")) self.assertEqual(str(t), test_str)
def test_escape_output(self): dtstamp = datetime(2018, 2, 19, 21, 00, tzinfo=utc) t = Todo(dtstamp=dtstamp, uid='Uid') t.name = "Hello, with \\ special; chars and \n newlines" t.location = "Here; too" t.description = "Every\nwhere ! Yes, yes !" test_str = CRLF.join(("BEGIN:VTODO", "DTSTAMP:20180219T210000Z", "UID:Uid", "DESCRIPTION:Every\\nwhere ! Yes\\, yes !", "LOCATION:Here\\; too", "SUMMARY:Hello\\, with \\\\ special\\; chars and \\n newlines", "END:VTODO")) self.assertEqual(str(t), test_str)
def test_init_non_exclusive_arguments(self): # attributes percent, priority, begin, due, and duration # aren't tested here dtstamp = datetime(2018, 2, 18, 12, 19, tzinfo=datetime_tzutc) completed = dtstamp + timedelta(days=1) created = dtstamp + timedelta(seconds=1) alarms = [DisplayAlarm] t = Todo(uid='uid', dtstamp=dtstamp, completed=completed, created=created, description='description', location='location', name='name', url='url', alarms=alarms) self.assertEqual(t.uid, 'uid') self.assertEqual(t.dtstamp, dtstamp) self.assertEqual(t.completed, completed) self.assertEqual(t.created, created) self.assertEqual(t.description, 'description') self.assertEqual(t.location, 'location') self.assertEqual(t.name, 'name') self.assertEqual(t.url, 'url') self.assertEqual(t.alarms, alarms)
def test_init_non_exclusive_arguments(self): # attributes percent, priority, begin, due, and duration # aren't tested here dtstamp = datetime(2018, 2, 18, 12, 19, tzinfo=utc) completed = dtstamp + timedelta(days=1) created = dtstamp + timedelta(seconds=1) alarm = [AlarmFactory().get_type_from_action('DISPLAY')] alarms = set() alarms.update(alarm) t = Todo(uid='uid', dtstamp=dtstamp, completed=completed, created=created, description='description', location='location', name='name', url='url', alarms=alarm) self.assertEqual(t.uid, 'uid') self.assertEqual(t.dtstamp, arrow.get(dtstamp)) self.assertEqual(t.completed, arrow.get(completed)) self.assertEqual(t.created, arrow.get(created)) self.assertEqual(t.description, 'description') self.assertEqual(t.location, 'location') self.assertEqual(t.name, 'name') self.assertEqual(t.url, 'url') self.assertSetEqual(t.alarms, alarms)
def test_todos_setter(self): c = Calendar(cal1) t = Todo() c.todos = [t] self.assertEqual(c.todos, [t])
def test_output_due(self): dtstamp = datetime(2018, 2, 19, 21, 00, tzinfo=utc) due = datetime(2018, 2, 20, 1, 00, tzinfo=utc) t = Todo(dtstamp=dtstamp, uid='Uid', due=due) test_str = CRLF.join(("BEGIN:VTODO", "DTSTAMP:20180219T210000Z", "UID:Uid", "DUE:20180220T010000Z", "END:VTODO")) self.assertEqual(str(t), test_str)
def test_todo_ge(self): t1 = Todo() t2 = Todo(name='a') t3 = Todo(name='b') t4 = Todo(due=10) t5 = Todo(due=20) due_time = datetime(2018, 2, 18, 12, 19, tzinfo=utc) t6 = Todo(due=due_time) t7 = Todo(due=due_time + timedelta(days=1)) # Check comparison by name self.assertTrue(t1 >= t1) self.assertTrue(t1 >= t2) self.assertFalse(t2 >= t1) self.assertFalse(t2 >= t3) self.assertTrue(t2 >= t2) self.assertTrue(t3 >= t2) # Check comparison by due time self.assertFalse(t4 >= t5) self.assertTrue(t4 >= t4) self.assertTrue(t5 >= t4) # Check comparison with datetime self.assertFalse(t4 >= due_time) self.assertTrue(t6 >= due_time) self.assertTrue(t7 >= due_time) # Check invalid call with self.assertRaises(NotImplementedError): t1 >= due_time with self.assertRaises(NotImplementedError): t2 >= due_time with self.assertRaises(NotImplementedError): t2 >= 1
def test_repr(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=utc) t1 = Todo() self.assertEqual(repr(t1), '<Todo>') t2 = Todo(name='foo') self.assertEqual(repr(t2), "<Todo 'foo'>") t3 = Todo(name='foo', begin=begin) self.assertEqual(repr(t3), "<Todo 'foo' begin:2018-02-18T12:19:00+00:00>") t4 = Todo(name='foo', due=begin) self.assertEqual(repr(t4), "<Todo 'foo' due:2018-02-18T12:19:00+00:00>") t4 = Todo(name='foo', begin=begin, due=begin + timedelta(1)) self.assertEqual(repr(t4), "<Todo 'foo' begin:2018-02-18T12:19:00+00:00 due:2018-02-19T12:19:00+00:00>")
def test_output_due(self): dtstamp = arrow.get('2018-02-19T21:00') due = arrow.get('2018-02-20T01:00') with freeze_time(dtstamp.format()): t = Todo(dtstamp=dtstamp, uid='Uid', due=due) test_str = CRLF.join(("BEGIN:VTODO", "DTSTAMP:20180219T210000Z", "UID:Uid", "DUE:20180220T010000Z", "END:VTODO")) self.assertEqual(str(t), test_str)
def test_clone(self): c0 = Calendar() e = Event() t = Todo() c0.events.add(e) c0.todos.add(t) c1 = c0.clone() self.assertEqual(c0.events, c1.events) self.assertEqual(c0.todos, c1.todos) self.assertEqual(c0, c1)
def test_neq_len(self): c0, c1 = Calendar(), Calendar() e1 = Event() e2 = Event() c0.events.add(e1) c0.events.add(e2) c1.events.add(e1) self.assertNotEqual(c0, c1) t1 = Todo() t2 = Todo() c0.todos.add(t1) c0.todos.add(t2) c1.todos.add(t1) self.assertNotEqual(c0, c1)
def test_todo_lt(self): t1 = Todo() t2 = Todo(name='a') t3 = Todo(name='b') with freeze_time('1970-01-01'): t4 = Todo(due=10) t5 = Todo(due=20) due_time = arrow.get('2018-02-18T12:19') due_datetime = due_time.datetime with freeze_time(due_time.shift(days=-1).format()): t6 = Todo(due=due_time) # Check comparison by name self.assertFalse(t1 < t1) self.assertTrue(t1 < t2) self.assertFalse(t2 < t1) self.assertTrue(t2 < t3) self.assertFalse(t3 < t2) # Check comparison by due time self.assertTrue(t4 < t5) self.assertFalse(t4 < t4) self.assertFalse(t5 < t4) # Check comparison with datetime self.assertTrue(t4 < due_datetime) self.assertFalse(t6 < due_datetime) # Check invalid call with self.assertRaises(NotImplementedError): t1 < due_time with self.assertRaises(NotImplementedError): t2 < due_time with self.assertRaises(NotImplementedError): t2 < 1
def test_todo_lt(self): t1 = Todo() t2 = Todo(name='a') t3 = Todo(name='b') t4 = Todo(due=10) t5 = Todo(due=20) due_time = datetime(2018, 2, 18, 12, 19, tzinfo=utc) t6 = Todo(due=due_time) # Check comparison by name self.assertFalse(t1 < t1) self.assertTrue(t1 < t2) self.assertFalse(t2 < t1) self.assertTrue(t2 < t3) self.assertFalse(t3 < t2) # Check comparison by due time self.assertTrue(t4 < t5) self.assertFalse(t4 < t4) self.assertFalse(t5 < t4) # Check comparison with datetime self.assertTrue(t4 < due_time) self.assertFalse(t6 < due_time) # Check invalid call with self.assertRaises(NotImplementedError): t1 < due_time with self.assertRaises(NotImplementedError): t2 < due_time with self.assertRaises(NotImplementedError): t2 < 1
def test_repr(self): begin = datetime(2018, 2, 18, 12, 19, tzinfo=datetime_tzutc) t1 = Todo() self.assertEqual(repr(t1), '<floating Todo>') t2 = Todo(name='foo') self.assertEqual(repr(t2), "<floating Todo 'foo'>") t3 = Todo(name='foo', begin=begin) self.assertEqual(repr(t3), "<Todo 'foo' begin: 2018-02-18 12:19:00+00:00>") t4 = Todo(name='foo', due=begin) self.assertEqual(repr(t4), "<Todo 'foo' fixed due: 2018-02-18 12:19:00+00:00>") t4 = Todo(name='foo', begin=begin, due=begin + timedelta(1)) self.assertEqual( repr(t4), "<Todo 'foo' begin: 2018-02-18 12:19:00+00:00 fixed due: 2018-02-19 12:19:00+00:00 duration: 1 day, 0:00:00>" )
def test_eq(self): c0, c1 = Calendar(), Calendar() e = Event() c0.events.append(e) c1.events.append(e) self.assertEqual(c0, c1) t = Todo() c0.todos.append(t) c1.todos.append(t)