Source code for unit.canvas.eventboxdrawers.defaulteventboxdrawer

# 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/>.


import wx
from unittest.mock import Mock

from timelinelib.test.cases.unit import UnitTestCase
from timelinelib.canvas.eventboxdrawers.defaulteventboxdrawer import DefaultEventBoxDrawer
from timelinelib.canvas.eventboxdrawers.defaulteventboxdrawer import INNER_PADDING
from timelinelib.canvas.eventboxdrawers.defaultmilestonedrawer import DefaultMilestoneDrawer


DEFAULT_TEXT = "test"


[docs]class describe_default_exventbox_drawer_draw_text(UnitTestCase):
[docs] def test_when_rect_has_zero_width_text_is_not_drawn(self): rect = wx.Rect(0, 0, 0, 0) self.drawer._draw_text(self.dc, rect, self.event) self.assertEqual(self.dc.DrawText.call_count, 0)
[docs] def test_when_rect_has_inner_padding_width_text_is_not_drawn(self): rect = wx.Rect(0, 0, INNER_PADDING * 2, 0) self.drawer._draw_text(self.dc, rect, self.event) self.assertEqual(self.dc.DrawText.call_count, 0)
[docs] def test_non_centered_text_is_left_aligned(self): WIDTH = 100 HEIGHT = 20 rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.drawer.center_text = False self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with(DEFAULT_TEXT, INNER_PADDING, INNER_PADDING)
[docs] def test_centered_text_is_not_left_aligned(self): WIDTH = 100 HEIGHT = 20 rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.drawer.center_text = True self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with(DEFAULT_TEXT, (WIDTH - 2 * INNER_PADDING - 50) // 2 + INNER_PADDING, INNER_PADDING)
[docs] def test_centered_text_is_left_aligned_if_text_is_too_long_to_fit(self): WIDTH = 100 HEIGHT = 20 rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.dc.GetTextExtent.return_value = (500, 0) self.drawer.center_text = True self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with(DEFAULT_TEXT, INNER_PADDING, INNER_PADDING)
[docs] def test_non_centered_text_is_left_ajusted_when_fuzzy(self): WIDTH = 100 HEIGHT = 20 self.event.has_edge_icons.return_value = True rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.drawer.center_text = False self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with(DEFAULT_TEXT, INNER_PADDING + HEIGHT // 2, INNER_PADDING)
[docs] def test_non_centered_text_is_left_ajusted_when_locked(self): WIDTH = 100 HEIGHT = 20 self.event.has_edge_icons.return_value = True rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.drawer.center_text = False self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with(DEFAULT_TEXT, INNER_PADDING + HEIGHT // 2, INNER_PADDING)
[docs] def test_if_checkmark_is_to_be_used_it_is_placed_as_first_char_in_text(self): WIDTH = 100 HEIGHT = 20 self.event.has_edge_icons.return_value = True self.event.get_progress.return_value = 100 rect = wx.Rect(0, 0, WIDTH, HEIGHT) self.drawer.center_text = False self.drawer.view_properties.get_display_checkmark_on_events_done.return_value = True self.drawer._draw_text(self.dc, rect, self.event) self.dc.SetClippingRegion.assert_called_with(wx.Rect(INNER_PADDING, INNER_PADDING, WIDTH - 2 * INNER_PADDING, HEIGHT - 2 * INNER_PADDING)) self.dc.DrawText.assert_called_with("\u2714" + DEFAULT_TEXT, INNER_PADDING + HEIGHT // 2, INNER_PADDING)
[docs] def test_milestone_with_no_text_can_be_drawn(self): with self.wxapp(): self.event.text = "" self.event.get_color.return_value = (127, 127, 127) self.dc.GetTextExtent.return_value = wx.Size(10, 10) rect = wx.Rect(0, 0, 100, 20) scene = Mock() try: DefaultMilestoneDrawer(rect, self.event, False).draw(self.dc) self.dc.DrawText.assert_called_with(" ", wx.Point(45, 5)) except IndexError: self.fail("Exception was not expected")
[docs] def setUp(self): self.drawer = DefaultEventBoxDrawer() self.drawer.view_properties = Mock() self.dc = Mock() self.dc.GetTextExtent.return_value = (50, 0) self.event = Mock() self.event.is_container.return_value = False self.event.get_fuzzy.return_value = False self.event.get_locked.return_value = False self.event.get_text.return_value = DEFAULT_TEXT self.event.has_edge_icons.return_value = False self.cat = Mock() self.cat.font_color = (0, 0, 0) self.event.get_category.return_value = self.cat