diff --git a/traitsui/qt4/datetime_editor.py b/traitsui/qt4/datetime_editor.py index 03c4e7721..9898de5bd 100644 --- a/traitsui/qt4/datetime_editor.py +++ b/traitsui/qt4/datetime_editor.py @@ -38,9 +38,9 @@ def init(self, parent): self.maximum_datetime = self.factory.maximum_datetime self.control = QtGui.QDateTimeEdit() - self.control.dateTimeChanged.connect(self.update_object) self.update_minimum_datetime() self.update_maximum_datetime() + self.control.dateTimeChanged.connect(self.update_object) def dispose(self): """Disposes of the contents of an editor.""" diff --git a/traitsui/tests/test_datetime.py b/traitsui/tests/test_datetime.py new file mode 100644 index 000000000..1f23a95a4 --- /dev/null +++ b/traitsui/tests/test_datetime.py @@ -0,0 +1,71 @@ +# (C) Copyright 2004-2021 Enthought, Inc., Austin, TX +# All rights reserved. +# +# This software is provided without warranty under the terms of the BSD +# license included in LICENSE.txt and may be redistributed only under +# the conditions described in the aforementioned license. The license +# is also available online at http://www.enthought.com/licenses/BSD.txt +# +# Thanks for using Enthought open source! + +""" +Test the initialization of a Datetime when given minimum and maximum +dates in the DatetimeEditor +""" +from datetime import datetime, timedelta +import unittest + +from traits.has_traits import HasTraits +from traits.trait_types import Datetime +from traitsui.editors.datetime_editor import DatetimeEditor +from traitsui.item import Item +from traitsui.view import View + + +from traitsui.tests._tools import ( + BaseTestMixin, + create_ui, + requires_toolkit, + reraise_exceptions, + ToolkitName, +) + +MAX_DATE = datetime.now() +MIN_DATE = MAX_DATE - timedelta(days=10) +DATE = MAX_DATE - timedelta(days=5) + + +class DatetimeInitDailog(HasTraits): + + date = Datetime() + + def _date_default(self): + return DATE + + traits_view = View(Item('date', + editor=DatetimeEditor( + maximum_datetime=MAX_DATE, + minimum_datetime=MIN_DATE))) + + +class TestDatetimeEditor(BaseTestMixin, unittest.TestCase): + + def setUp(self): + BaseTestMixin.setUp(self) + + def tearDown(self): + BaseTestMixin.tearDown(self) + + @requires_toolkit([ToolkitName.qt]) + def test_date_initialization(self): + # Behavior: for a date initialized between maximum and minimum dates in + # DatetimeEditor, that date should be unmodified + + dialog = DatetimeInitDailog() + + # verify that the date is correctly initialized + self.assertEqual(dialog.date, DATE) + + with reraise_exceptions(), create_ui(dialog) as ui: + # verify that the date hasn't changed after creating the ui + self.assertEqual(dialog.date, DATE)