From 810d2fca242cd1faddd20f8812ae52a97fa89125 Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Sat, 29 Jan 2022 23:03:15 +0000 Subject: [PATCH] Fix negative Span when dates are not Gregorian Fixes #12525 --- gramps/gen/lib/date.py | 8 ++++---- gramps/gen/lib/test/date_test.py | 32 +++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/gramps/gen/lib/date.py b/gramps/gen/lib/date.py index 682839da2..518f70c06 100644 --- a/gramps/gen/lib/date.py +++ b/gramps/gen/lib/date.py @@ -77,14 +77,14 @@ class Span: self.precision = 2 self.negative = False if self.valid: - if self.date1.calendar != Date.CAL_GREGORIAN: - self.date1 = self.date1.to_calendar("gregorian") - if self.date2.calendar != Date.CAL_GREGORIAN: - self.date2 = self.date2.to_calendar("gregorian") if self.date1.sortval < self.date2.sortval: self.date1 = date2 self.date2 = date1 self.negative = True + if self.date1.calendar != Date.CAL_GREGORIAN: + self.date1 = self.date1.to_calendar("gregorian") + if self.date2.calendar != Date.CAL_GREGORIAN: + self.date2 = self.date2.to_calendar("gregorian") if self.date1.get_modifier() == Date.MOD_NONE: if self.date2.get_modifier() == Date.MOD_NONE: val = self.date1.sortval - self.date2.sortval diff --git a/gramps/gen/lib/test/date_test.py b/gramps/gen/lib/test/date_test.py index d4312637b..13517224a 100644 --- a/gramps/gen/lib/test/date_test.py +++ b/gramps/gen/lib/test/date_test.py @@ -38,7 +38,7 @@ from ...datehandler import get_date_formats, set_format from ...datehandler import parser as _dp from ...datehandler import displayer as _dd from ...datehandler._datedisplay import DateDisplayEn -from ...lib.date import Date, DateError, Today, calendar_has_fixed_newyear +from ...lib.date import Date, DateError, Today, calendar_has_fixed_newyear, Span date_tests = {} @@ -432,6 +432,36 @@ class ArithmeticDateTest(BaseDateTest): self.assertEqual(val1, val2, "'%s' should be '%s' but was '%s'" % (exp1, val2, val1)) +#------------------------------------------------------------------------- +# +# SpanTest +# +#------------------------------------------------------------------------- +class SpanTest(BaseDateTest): + """ + Test spans. + """ + tests = [((2000, 1, 31), (2000, 1, 1), 30), + ((1799, 11, 19), (8, 2, 18, Date.CAL_FRENCH), 10), + ((8, 2, 18, Date.CAL_FRENCH), (1799, 11, 4), 5), + ((8, 2, 18, Date.CAL_FRENCH), (3, 2, 9, Date.CAL_FRENCH), 1836)] + + def test_evaluate(self): + for value1, value2, duration in self.tests: + date1 = self._get_date(value1) + date2 = self._get_date(value2) + span1 = Span(date1, date2) + self.assertEqual(int(span1), duration) + span2 = Span(date2, date1) + self.assertEqual(int(span2), -duration) + + def _get_date(self, value): + date = Date() + if len(value) == 4: + date.set_calendar(value[3]) + date.set_yr_mon_day(value[0], value[1], value[2]) + return date + #------------------------------------------------------------------------- # # SwedishDateTest