Beispiel #1
0
 def __init__(self, time_type, start_time, end_time, text, category=None,
              cid=-1):
     Event.__init__(self, time_type, start_time, end_time, text, category,
                    False, False, False)
     self.container_id = cid
     self.events = []
     self.strategy = DefaultContainerStrategy(self)
Beispiel #2
0
class Container(Event):

    def __init__(self, time_type, start_time, end_time, text, category=None,
                 cid=-1):
        Event.__init__(self, time_type, start_time, end_time, text, category,
                       False, False, False)
        self.container_id = cid
        self.events = []
        self.strategy = DefaultContainerStrategy(self)

    def is_container(self):
        return True

    def is_subevent(self):
        return False

    def cid(self):
        return self.container_id

    def set_cid(self, cid):
        self.container_id = cid

    def register_subevent(self, subevent):
        self.strategy.register_subevent(subevent)

    def unregister_subevent(self, subevent):
        self.strategy.unregister_subevent(subevent)

    def update_container(self, subevent):
        self.strategy.update(subevent)

    def update_properties(self, text, category=None):
        self.text = text
        self.category = category
class DefaultContainerStartegySpec(unittest.TestCase):

    def test_construction(self):
        self.given_strategy_with_container()
        self.assertEqual(self.container, self.strategy.container)

    def test_first_registered_event_decides_container_period(self):
        self.given_strategy_with_container()
        self.given_subevent1()
        self.strategy.register_subevent(self.subevent1)
        self.assert_equal_start(self.container, self.subevent1)
        self.assert_equal_end(self.container, self.subevent1)

    def test_second_registered_event_expands_container_period(self):
        # Container event:   +-------+
        # New sub-event:                 +-------+
        self.given_container_with_two_events_with_nonoverlapping_periods()
        self.assert_equal_start(self.container, self.subevent1)
        self.assert_equal_end(self.container, self.subevent2)

    def test_removing_one_event_contracts_container_period(self):
        # Container event:   +-------+
        # New sub-event:                 +-------+
        self.given_container_with_two_events_with_nonoverlapping_periods()
        self.strategy.unregister_subevent(self.subevent1)
        self.assert_equal_start(self.container, self.subevent2)
        self.assert_equal_end(self.container, self.subevent2)

    def test_updating_subevent_expands_container_period(self):
        # Container event:   +-------+
        # New sub-event:                 +-------+
        self.given_container_with_two_events_with_nonoverlapping_periods()
        self.subevent2.time_period.end_time = self.time("2000-05-01 10:01:01")
        self.strategy.update(self.subevent2)
        self.assert_equal_start(self.container, self.subevent1)
        self.assert_equal_end(self.container, self.subevent2)

    def test_adding_partial_overlapping_event_moves_overlapped_event_backwards(self):
        # Container event:   +-------+
        # New sub-event:          +-------+
        self.given_container_with_two_events_with_overlapping_periods()
        self.assert_start_equals_end(self.subevent2, self.subevent1)

    def test_adding_partial_overlapping_event_moves_overlapped_event_forward(self):
        # Container event:        +-------+
        # New sub-event:     +-------+
        self.given_container_with_two_events_with_overlapping_periods_reversed_order()
        self.assert_start_equals_end(self.subevent2, self.subevent1)

    def test_adding_event_with_same_period_moves_overlapped_event_forward(self):
        # Container event:   +-------+
        # New sub-event:     +-------+
        self.given_container_with_two_events_with_same_periods()
        self.assert_start_equals_end(self.subevent1, self.subevent2)

    def test_adding_event_with_same_start_moves_overlapped_event_forward(self):
        # Container event:   +-------+
        # New sub-event:     +---+
        self.given_container_with_two_events_with_same_start_time()
        self.assert_start_equals_end(self.subevent1, self.subevent2)

    def test_overlapping_nonperiod_event_at_begining_moves_nonperiod_event_backwards(self):
        # Container event:    +
        # New sub-event:     +----------+
        self.given_strategy_with_container()
        self.given_event_overlapping_point_event()
        self.assert_start_equals_start(self.subevent1, self.subevent2)

    def test_overlapping_nonperiod_event_at_end_moves_nonperiod_event_forward(self):
        # Container event:             +
        # New sub-event:     +----------+
        self.given_strategy_with_container()
        self.given_event_overlapping_point_event2()
        self.assert_start_equals_end(self.subevent1, self.subevent2)

    def given_container_with_two_events_with_nonoverlapping_periods(self):
        self.given_strategy_with_container()
        self.given_two_events_with_nonoverlapping_periods()
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_container_with_two_events_with_overlapping_periods(self):
        self.given_strategy_with_container()
        self.given_two_overlapping_events()
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_container_with_two_events_with_overlapping_periods_reversed_order(self):
        self.given_strategy_with_container()
        self.given_two_overlapping_events()
        self.strategy.register_subevent(self.subevent2)
        self.strategy.register_subevent(self.subevent1)

    def given_container_with_two_events_with_same_periods(self):
        self.given_strategy_with_container()
        self.given_two_events_with_same_period()
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_container_with_two_events_with_same_start_time(self):
        self.given_strategy_with_container()
        self.given_two_events_with_same_start_time()
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_strategy_with_container(self):
        self.container = Container(self.db.get_time_type(),
                                   self.time("2000-01-01 10:01:01"),
                                   self.time("2000-01-01 10:01:01"), "Container1")
        self.strategy = DefaultContainerStrategy(self.container)

    def given_event_overlapping_point_event(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-05-01 10:02:01"),
                                  self.time("2000-05-01 10:02:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-05-01 10:01:01"),
                                  self.time("2000-07-01 10:01:01"), "Container1")
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_event_overlapping_point_event2(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-07-01 10:00:01"),
                                  self.time("2000-07-01 10:00:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-05-01 10:01:01"),
                                  self.time("2000-07-01 10:01:01"), "Container1")
        self.strategy.register_subevent(self.subevent1)
        self.strategy.register_subevent(self.subevent2)

    def given_two_overlapping_events(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-06-01 10:01:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-05-01 10:01:01"),
                                  self.time("2000-07-01 10:01:01"), "Container1")

    def given_two_events_with_same_period(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-06-01 10:01:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-06-01 10:01:01"), "Container1")

    def given_two_events_with_same_start_time(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-06-01 10:01:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-04-01 10:01:01"), "Container1")

    def given_two_events_with_nonoverlapping_periods(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-01-01 10:01:01"),
                                  self.time("2000-02-01 10:01:01"), "Container1")
        self.subevent2 = Subevent(self.db.get_time_type(),
                                  self.time("2000-03-01 10:01:01"),
                                  self.time("2000-04-01 10:01:01"), "Container1")

    def given_subevent1(self):
        self.subevent1 = Subevent(self.db.get_time_type(),
                                  self.time("2000-01-01 10:01:01"),
                                  self.time("2000-02-01 10:01:01"), "Container1")

    def assert_equal_start(self, obj1, obj2):
        self.assertEqual(obj1.time_period.start_time, obj2.time_period.start_time)

    def assert_equal_end(self, obj1, obj2):
        self.assertEqual(obj1.time_period.end_time, obj2.time_period.end_time)

    def assert_start_equals_end(self, obj1, obj2):
        self.assertEqual(obj1.time_period.start_time, obj2.time_period.end_time)

    def assert_start_equals_start(self, obj1, obj2):
        self.assertEqual(obj1.time_period.start_time, obj2.time_period.start_time)

    def time(self, tm):
        return self.db.get_time_type().parse_time(tm)

    def setUp(self):
        self.db = MemoryDB()
        self.now = self.db.get_time_type().now()
        self.time_type = self.db.get_time_type()
 def given_strategy_with_container(self):
     self.container = Container(self.db.get_time_type(),
                                self.time("2000-01-01 10:01:01"),
                                self.time("2000-01-01 10:01:01"), "Container1")
     self.strategy = DefaultContainerStrategy(self.container)