Source code for unit.canvas.drawing.viewproperties

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


from timelinelib.canvas.drawing.viewproperties import ViewProperties
from timelinelib.test.cases.unit import UnitTestCase
from timelinelib.test.utils import an_event_with, a_container, a_category_with


[docs]class Base(UnitTestCase):
[docs] def setUp(self): self.view_properties = ViewProperties() self.id_counter = 0
[docs] def create_category(self, name, parent=None): category = a_category_with(name=name, parent=parent) category.set_id(self.new_id()) return category
[docs] def new_id(self): self.id_counter += 1 return self.id_counter
[docs]class describe_category_visibility(Base):
[docs] def test_visible_by_default(self): work = self.create_category("Work", parent=None) self.assertTrue(self.view_properties.is_category_visible(work))
[docs] def test_can_set_visibility(self): work = self.create_category("Work", parent=None) self.view_properties.set_category_visible(work, True) self.assertTrue(self.view_properties.is_category_visible(work)) self.view_properties.set_category_visible(work, False) self.assertFalse(self.view_properties.is_category_visible(work))
[docs]class describe_event_visiblity(Base):
[docs] def setUp(self): Base.setUp(self) self.work = self.create_category("Work", parent=None) self.meetings = self.create_category("Meetings", parent=self.work) self.fun_meetings = self.create_category("Fun meetings", parent=self.meetings) self.boring_meetings = self.create_category("Boring meetings", parent=self.meetings)
[docs] def assertEventWithCategoryVisible(self, category): self.assertTrue(self.view_properties.is_event_with_category_visible(category))
[docs] def assertEventWithCategoryHidden(self, category): self.assertFalse(self.view_properties.is_event_with_category_visible(category))
[docs] def test_visible_by_default(self): self.assertEventWithCategoryVisible(self.boring_meetings)
[docs] def test_visible_if_no_category(self): self.assertEventWithCategoryVisible(None)
[docs] def test_visible_if_no_category_and_individual_view(self): self.view_properties.view_cats_individually = True self.assertEventWithCategoryVisible(None)
[docs] def test_children_hidden_if_parent_hidden(self): self.view_properties.set_category_visible(self.work, False) self.assertEventWithCategoryHidden(self.boring_meetings)
[docs] def test_children_visible_if_parent_hidden_and_individual_view(self): self.view_properties.view_cats_individually = True self.view_properties.set_category_visible(self.work, False) self.assertEventWithCategoryVisible(self.boring_meetings)
[docs]class describe_event_filtering(Base):
[docs] def setUp(self): Base.setUp(self) self.work = self.create_category("Work", parent=None) self.play = self.create_category("Play", parent=None) self.write_report = self.create_event("Write report", category=self.work) self.play_football = self.create_event("Play football", category=self.play)
[docs] def create_event(self, text, category): event = an_event_with(text=text, category=category) event.set_id(self.new_id()) return event
[docs] def test_none_filtered_by_default(self): events = [self.write_report, self.play_football] self.assertEqual(self.view_properties.filter_events(events), events)
[docs] def test_filters_those_in_hidden_categories(self): self.view_properties.set_category_visible(self.play, False) events = [self.write_report, self.play_football] self.assertEqual(self.view_properties.filter_events(events), [self.write_report])
[docs] def test_filters_those_hidden_in_containers(self): events = a_container("Container", category=self.work, sub_events=[ ("Write report", self.work), ("Play footbal", self.play), ]) self.assertEqual(self.view_properties.filter_events(events), events) self.view_properties.set_category_visible(self.play, False) self.assertEqual(self.view_properties.filter_events(events), [events[0], events[1]])
[docs] def test_filters_those_in_hidden_containers(self): events = a_container("Container", category=self.work, sub_events=[ ("Write report", self.work), ("Play footbal", self.play), ]) self.assertEqual(self.view_properties.filter_events(events), events) self.view_properties.set_category_visible(self.work, False) self.assertEqual(self.view_properties.filter_events(events), [])
[docs]class describe_highlight(Base):
[docs] def test_can_add_highlight_to_events(self): self.assertFalse(self.view_properties.is_highlighted(self.event1)) self.assertFalse(self.view_properties.is_highlighted(self.event2)) self.assertFalse(self.view_properties.has_higlights()) self.view_properties.add_highlight(self.event1, clear=False) self.view_properties.add_highlight(self.event2, clear=False) self.assertTrue(self.view_properties.is_highlighted(self.event1)) self.assertTrue(self.view_properties.is_highlighted(self.event2)) self.assertTrue(self.view_properties.has_higlights())
[docs] def test_can_clear_when_adding_highlight_to_event(self): self.view_properties.add_highlight(self.event1, clear=False) self.view_properties.add_highlight(self.event2, clear=True) self.assertFalse(self.view_properties.is_highlighted(self.event1)) self.assertTrue(self.view_properties.is_highlighted(self.event2))
[docs] def test_can_tick_highlights(self): self.view_properties.add_highlight(self.event1, clear=False) self.assertEqual( self.view_properties.get_highlight_count(self.event1), 0 ) self.view_properties.tick_highlights(10) self.assertEqual( self.view_properties.get_highlight_count(self.event1), 1 )
[docs] def test_tick_removes_highlight_when_limit_is_passed(self): self.view_properties.add_highlight(self.event1, clear=False) self.assertEqual( self.view_properties.get_highlight_count(self.event1), 0 ) self.view_properties.tick_highlights(5) self.view_properties.tick_highlights(5) self.view_properties.tick_highlights(5) self.view_properties.tick_highlights(5) self.view_properties.tick_highlights(5) self.view_properties.tick_highlights(5) self.assertFalse(self.view_properties.is_highlighted(self.event1))
[docs] def test_clear_db_specific_removes_highligt(self): self.view_properties.add_highlight(self.event1, clear=False) self.assertTrue(self.view_properties.is_highlighted(self.event1)) self.view_properties.clear_db_specific() self.assertFalse(self.view_properties.is_highlighted(self.event1))
[docs] def setUp(self): Base.setUp(self) self.event1 = an_event_with(text="1") self.event1.set_id(self.new_id()) self.event2 = an_event_with(text="2") self.event2.set_id(self.new_id())