My test log:
platform openbsd7 -- Python 3.10.13, pytest-7.1.3, pluggy-1.3.0
rootdir: /home/wen/ports/obj/khal-0.11.2/khal-0.11.2
plugins: cov-4.0.0, hypothesis-6.47.1
collected 315 items

tests/backend_test.py ..............................                     [  9%]
tests/cal_display_test.py .....FFFF                                      [ 12%]
tests/cli_test.py ..........xX.X..................FF.......              [ 25%]
tests/configwizard_test.py ..                                            [ 26%]
tests/controller_test.py ............                                    [ 29%]
tests/event_test.py ..F...............F..F.........F.................F.. [ 46%]
..F.                                                                     [ 47%]
tests/icalendar_test.py .FFF...                                          [ 49%]
tests/khalendar_test.py ..........F............F......                   [ 59%]
tests/khalendar_utils_test.py .........................................  [ 72%]
tests/parse_datetime_test.py .......................................FFFF [ 86%]
FFFFF                                                                    [ 87%]
tests/settings_test.py ............                                      [ 91%]
tests/terminal_test.py ...                                               [ 92%]
tests/utils_test.py ........                                             [ 94%]
tests/vdir_test.py ...                                                   [ 95%]
tests/vtimezone_test.py FFF                                              [ 96%]
tests/ui/test_calendarwidget.py .....                                    [ 98%]
tests/ui/test_editor.py ....                                             [ 99%]
tests/ui/test_widgets.py .                                               [100%]

=================================== FAILURES ===================================
_________________________ test_vertical_month_unicode __________________________

    def test_vertical_month_unicode():
        try:
            locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
            vert_str = vertical_month(month=12, year=2011,
                                      today=dt.date(2011, 12, 12))
            # de_DE locale on at least Net and FreeBSD is different from the one
            # commonly used on linux systems
            if platform.system() == 'FreeBSD':
                assert vert_str == example_de_freebsd
            elif platform.system() == 'NetBSD':
                assert vert_str == example_de_netbsd
            else:
>               assert vert_str == example_de
E               AssertionError: assert ['\x1b[1m    ... 31  1 ', ...] == 
['\x1b[1m    ... 31  1 ', ...]
E                 At index 0 diff: '\x1b[1m    Mo Tu We Th Fr Sa Su \x1b[0m' != 
'\x1b[1m    Mo Di Mi Do Fr Sa So \x1b[0m'
E                 Use -v to get more diff

tests/cal_display_test.py:357: AssertionError
____________________ test_vertical_month_unicode_weekdeays _____________________

    def test_vertical_month_unicode_weekdeays():
        try:
            locale.setlocale(locale.LC_ALL, 'cs_CZ.UTF-8')
            vert_str = vertical_month(month=12, year=2011,
                                      today=dt.date(2011, 12, 12))
>           assert [line.lower() for line in vert_str] == [line.lower() for 
> line in example_cz]
E           AssertionError: assert ['\x1b[1m    ... 31  1 ', ...] == ['\x1b[1m  
  ... 31  1 ', ...]
E             At index 0 diff: '\x1b[1m    mo tu we th fr sa su \x1b[0m' != 
'\x1b[1m    po út st čt pá so ne \x1b[0m'
E             Use -v to get more diff

tests/cal_display_test.py:379: AssertionError
___________________ test_vertical_month_unicode_weekdeays_gr ___________________

    def test_vertical_month_unicode_weekdeays_gr():
        try:
            locale.setlocale(locale.LC_ALL, 'el_GR.UTF-8')
            vert_str = vertical_month(month=12, year=2011,
                                      today=dt.date(2011, 12, 12))
            # on some OSes, Greek locale's abbreviated day of the week and
            # month names have accents, on some they haven't
            if platform.system() == 'Darwin':
                assert strip_accents('\n'.join([line.lower() for line in 
vert_str])) == \
                    '\n'.join(example_gr_darwin)
            else:
>               assert strip_accents('\n'.join([line.lower() for line in 
> vert_str])) == \
                    '\n'.join(example_gr)
E                   AssertionError: assert '\x1b[1m    m...  1  2  3  4 ' == 
'\x1b[1m     ...  1  2  3  4 '
E                     -      δε τρ τε πε πα σα κυ
E                     +     mo tu we th fr sa su
E                     - δεκ  28 29 30  1  2  3  4
E                     ?     ^^^^
E                     + dec 28 29 30  1  2  3  4
E                     ?     ^^^
E                     -       5  6  7  8  9 10 11 ...
E
E                     ...Full output truncated (42 lines hidden), use '-vv' to 
show

tests/cal_display_test.py:412: AssertionError
_________________________ test_vertical_month_abbr_fr __________________________

    def test_vertical_month_abbr_fr():
        # see issue #653
        try:
            locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
            vert_str = vertical_month(month=12, year=2011,
                                      today=dt.date(2011, 12, 12))
            if platform.system() == 'Darwin':
                assert '\n'.join(vert_str) == '\n'.join(example_fr_darwin)
            else:
>               assert '\n'.join(vert_str) == '\n'.join(example_fr)
E               AssertionError: assert '\x1b[1m    M...  1  2  3  4 ' == 
'\x1b[1m     ...  1  2  3  4 '
E                 -       lu ma me je ve sa di
E                 +     Mo Tu We Th Fr Sa Su
E                 - déc.  28 29 30  1  2  3  4
E                 ?     ^^ --
E                 + Dec 28 29 30  1  2  3  4
E                 ?     ^^
E                 -        5  6  7  8  9 10 11 ...
E
E                 ...Full output truncated (42 lines hidden), use '-vv' to show

tests/cal_display_test.py:438: AssertionError
_______________ test_configure_command_cannot_write_config_file ________________

runner = <tests.cli_test.CustomCliRunner object at 0xa287cf442e0>

    def test_configure_command_cannot_write_config_file(runner):
        runner = runner()
        runner.config_file.remove()
        os.chmod(str(runner.xdg_config_home), 555)
        result = runner.invoke(main_khal, ['configure'], input=choices())
>       assert result.exit_code == 1
E       assert 0 == 1
E        +  where 0 = <Result okay>.exit_code

tests/cli_test.py:786: AssertionError
__________________ test_configure_command_cannot_create_vdir ___________________

runner = <tests.cli_test.CustomCliRunner object at 0xa287cf45120>

    def test_configure_command_cannot_create_vdir(runner):
        runner = runner()
        runner.config_file.remove()
        os.mkdir(str(runner.xdg_data_home), mode=555)
        result = runner.invoke(
            main_khal, ['configure'],
            input=choices(),
        )
>       assert 'Exiting' in result.output
E       AssertionError: assert 'Exiting' in 'What ordering of year, month, date 
do you want to use?\n[0] year-month-day (today: 2023-12-06)\n[1] day/month/year 
(t...Successfully wrote configuration to 
/tmp/pytest-of-root/pytest-0/test_configure_command_cannot_1/.config/khal/config\n'
E        +  where 'What ordering of year, month, date do you want to use?\n[0] 
year-month-day (today: 2023-12-06)\n[1] day/month/year (t...Successfully wrote 
configuration to 
/tmp/pytest-of-root/pytest-0/test_configure_command_cannot_1/.config/khal/config\n'
 = <Result okay>.output

tests/cli_test.py:799: AssertionError
_________________________________ test_raw_dt __________________________________

    def test_raw_dt():
        event_dt = _get_text('event_dt_simple')
        start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30))
        end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30))
        event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS)
        with freeze_time('2016-1-1'):
>           assert normalize_component(event.raw) == \
                normalize_component(_get_text('event_dt_simple_inkl_vtimezone'))
E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
('VCALENDAR',...enset())}))}))
E             At index 2 diff: frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
frozenset({('DAYLIGHT', 
b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
 frozenset()), ('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
 frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
Event\r\nDTSTART;TZID=Europe/Berlin:20140409T093000\r\nDTEND;TZID=Europe/Berlin:201404...
E
E             ...Full output truncated (2 lines hidden), use '-vv' to show

tests/event_test.py:50: AssertionError
_____________________________ test_transform_event _____________________________

    def test_transform_event():
        """test if transformation between different event types works"""
        event_d = _get_text('event_d')
        event = Event.fromString(event_d, **EVENT_KWARGS)
        assert isinstance(event, AllDayEvent)
        start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30))
        end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30))
        event.update_start_end(start, end)
        assert isinstance(event, LocalizedEvent)
        assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '09:30-10:30 
An Event\x1b[0m'
        assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == \
            '09.04.2014 09:30-10:30 An Event\x1b[0m'
        analog_event = Event.fromString(_get_text('event_dt_simple'), 
**EVENT_KWARGS)
>       assert normalize_component(event.raw) == 
> normalize_component(analog_event.raw)
E       AssertionError: assert ('VCALENDAR',...enset())}))})) == 
('VCALENDAR',...enset())}))}))
E         At index 2 diff: frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
frozenset({('DAYLIGHT', 
b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
 frozenset()), ('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
 frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
Event\r\nDTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20140409T093000\r\nDTEND;TZID=Euro...
E
E         ...Full output truncated (2 lines hidden), use '-vv' to show

tests/event_test.py:184: AssertionError
________________________________ test_dt_two_tz ________________________________

    def test_dt_two_tz():
        event_dt_two_tz = _get_text('event_dt_two_tz')
        cal_dt_two_tz = _get_text('cal_dt_two_tz')

        event = Event.fromString(event_dt_two_tz, **EVENT_KWARGS)
        with freeze_time('2016-02-16 12:00:00'):
>           assert normalize_component(cal_dt_two_tz) == 
> normalize_component(event.raw)
E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
('VCALENDAR',...enset())}))}))
E             At index 2 diff: frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:America/New_York\r\nEND:VTIMEZONE\r\n', 
frozenset({('DAYLIGHT', 
b'BEGIN:DAYLIGHT\r\nDTSTART:20140309T030000\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nEND:DAYLIGHT\r\n',
 frozenset()), ('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART:20141102T010000\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nEND:STANDARD\r\n',
 frozenset())})), ('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
frozenset({('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nTZNAME:C...
E
E             ...Full output truncated (2 lines hidden), use '-vv' to show

tests/event_test.py:222: AssertionError
______________________________ test_event_no_dst _______________________________

    def test_event_no_dst():
        """test the creation of a corect VTIMEZONE for timezones with no dst"""
        event_no_dst = _get_text('event_no_dst')
        cal_no_dst = _get_text('cal_no_dst')
        event = Event.fromString(event_no_dst, calendar='foobar', 
locale=LOCALE_BOGOTA)
        if version.parse(pytz.__version__) > version.Version('2017.1'):
            if version.parse(pytz.__version__) < version.Version('2022.7'):
                cal_no_dst = cal_no_dst.replace(
                    'TZNAME:COT',
                    'RDATE:20380118T221407\r\nTZNAME:-05'
                )
            else:
                cal_no_dst = cal_no_dst.replace(
                    'TZNAME:COT',
                    'TZNAME:-05'
                )

>       assert normalize_component(event.raw) == normalize_component(cal_no_dst)
E       AssertionError: assert ('VCALENDAR',...enset())}))})) == 
('VCALENDAR',...enset())}))}))
E         At index 2 diff: frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:America/Bogota\r\nEND:VTIMEZONE\r\n', 
frozenset({('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:19930206T230000\r\nTZNAME:-05\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nEND:STANDARD\r\n',
 frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
Event\r\nDTSTART;TZID=America/Bogota:20140409T093000\r\nDTEND;TZID=America/Bogota:20140409T103000\r\nDTSTAMP:20140401T234817Z\r\nUID:event_no_dst\r\nEND:VEVENT\r\n',
 frozenset())}) != frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:America/Bogota\r...
E
E         ...Full output truncated (2 lines hidden), use '-vv' to show

tests/event_test.py:370: AssertionError
_________________________ test_create_timezone_static __________________________

    def test_create_timezone_static():
        gmt = pytz.timezone('Etc/GMT-8')
>       assert create_timezone(gmt).to_ical().split() == [
            b'BEGIN:VTIMEZONE',
            b'TZID:Etc/GMT-8',
            b'BEGIN:STANDARD',
            b'DTSTART:16010101T000000',
            b'RDATE:16010101T000000',
            b'TZNAME:Etc/GMT-8',
            b'TZOFFSETFROM:+0800',
            b'TZOFFSETTO:+0800',
            b'END:STANDARD',
            b'END:VTIMEZONE',
        ]
E       AssertionError: assert [b'BEGIN:VTIM...c/GMT-8', ...] == 
[b'BEGIN:VTIM...c/GMT-8', ...]
E         At index 3 diff: b'DTSTART;VALUE=DATE-TIME:16010101T000000' != 
b'DTSTART:16010101T000000'
E         Use -v to get more diff

tests/event_test.py:552: AssertionError
________________________ test_create_timezone_in_future ________________________

    def test_create_timezone_in_future():
        """Events too far into the future (after the next DST transition) used
        to be created with invalid timezones"""
        with freeze_time('2019-03-31'):
>           assert create_timezone(
                pytz.timezone('Europe/Amsterdam'),
                dt.datetime(2022, 1, 1, 18, 0)).to_ical().split() == [
                    b'BEGIN:VTIMEZONE',
                    b'TZID:Europe/Amsterdam',
                    b'BEGIN:STANDARD',
                    b'DTSTART:20211031T020000',
                    b'TZNAME:CET',
                    b'TZOFFSETFROM:+0200',
                    b'TZOFFSETTO:+0100',
                    b'END:STANDARD',
                    b'BEGIN:DAYLIGHT',
                    b'DTSTART:20220327T030000',
                    b'TZNAME:CEST',
                    b'TZOFFSETFROM:+0100',
                    b'TZOFFSETTO:+0200',
                    b'END:DAYLIGHT',
                    b'END:VTIMEZONE']
E           AssertionError: assert [b'BEGIN:VTIM...M:+0200', ...] == 
[b'BEGIN:VTIM...M:+0200', ...]
E             At index 3 diff: b'DTSTART;VALUE=DATE-TIME:20211031T020000' != 
b'DTSTART:20211031T020000'
E             Use -v to get more diff

tests/event_test.py:631: AssertionError
_______________________________ test_new_vevent ________________________________

    def test_new_vevent():
        with freeze_time('20220702T1400'):
            vevent = _replace_uid(new_vevent(
                LOCALE_BERLIN,
                dt.date(2022, 7, 2),
                dt.date(2022, 7, 3),
                'An Event',
                allday=True,
                repeat='weekly',
            ))
>           assert vevent.to_ical().decode('utf-8') == '\r\n'.join([
                'BEGIN:VEVENT',
                'SUMMARY:An Event',
                'DTSTART;VALUE=DATE:20220702',
                'DTEND;VALUE=DATE:20220703',
                'DTSTAMP:20220702T140000Z',
                'UID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA',
                'RRULE:FREQ=WEEKLY',
                'END:VEVENT',
                ''
            ])
E           AssertionError: assert 'BEGIN:VEVENT...ND:VEVENT\r\n' == 
'BEGIN:VEVENT...ND:VEVENT\r\n'
E             Skipping 85 identical leading characters in diff, use -v to show
E               3
E             - DTSTAMP:20220702T140000Z
E             + DTSTAMP;VALUE=DATE-TIME:20220702T140000Z
E             ?        ++++++++++++++++
E               UID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA
...             RRULE:FREQ=WEEKLY
E
E             ...Full output truncated (2 lines hidden), use '-vv' to show

tests/icalendar_test.py:40: AssertionError
________________________________ test_split_ics ________________________________

    def test_split_ics():
        cal = _get_text('cal_lots_of_timezones')
        vevents = split_ics(cal)

        vevents0 = vevents[0].split('\r\n')
        vevents1 = vevents[1].split('\r\n')

        part0 = _get_text('part0').split('\n')
        part1 = _get_text('part1').split('\n')

        assert _get_TZIDs(vevents0) == _get_TZIDs(part0)
        assert _get_TZIDs(vevents1) == _get_TZIDs(part1)

>       assert sorted(vevents0) == sorted(part0)
E       AssertionError: assert ['', 'BEGIN:D...IMEZONE', ...] == ['', 
'BEGIN:D...IMEZONE', ...]
E         At index 6 diff: 
'DTEND;TZID=Europe_London;VALUE=DATE-TIME:20140509T203000' != 
'DTEND;TZID=Europe_London:20140509T203000'
E         Use -v to get more diff

tests/icalendar_test.py:66: AssertionError
__________________________ test_split_ics_random_uid ___________________________

    def test_split_ics_random_uid():
        random.seed(123)
        cal = _get_text('cal_lots_of_timezones')
        vevents = split_ics(cal, random_uid=True)

        part0 = _get_text('part0').split('\n')
        part1 = _get_text('part1').split('\n')

        for item in icalendar.Calendar.from_ical(vevents[0]).walk():
            if item.name == 'VEVENT':
                assert item['UID'] == 'DRF0RGCY89VVDKIV9VPKA1FYEAU2GCFJIBS1'
        for item in icalendar.Calendar.from_ical(vevents[1]).walk():
            if item.name == 'VEVENT':
                assert item['UID'] == '4Q4CTV74N7UAZ618570X6CLF5QKVV9ZE3YVB'

        # after replacing the UIDs, everything should be as above
        vevents0 = vevents[0].replace('DRF0RGCY89VVDKIV9VPKA1FYEAU2GCFJIBS1', 
'123').split('\r\n')
        vevents1 = vevents[1].replace('4Q4CTV74N7UAZ618570X6CLF5QKVV9ZE3YVB', 
'abcde').split('\r\n')

        assert _get_TZIDs(vevents0) == _get_TZIDs(part0)
        assert _get_TZIDs(vevents1) == _get_TZIDs(part1)

>       assert sorted(vevents0) == sorted(part0)
E       AssertionError: assert ['', 'BEGIN:D...IMEZONE', ...] == ['', 
'BEGIN:D...IMEZONE', ...]
E         At index 6 diff: 
'DTEND;TZID=Europe_London;VALUE=DATE-TIME:20140509T203000' != 
'DTEND;TZID=Europe_London:20140509T203000'
E         Use -v to get more diff

tests/icalendar_test.py:92: AssertionError
___________________________ TestCollection.test_get ____________________________

self = <tests.khalendar_test.TestCollection object at 0xa295e854f40>
coll_vdirs = (<khal.khalendar.khalendar.CalendarCollection object at 
0xa287d039270>, {"Dad's calendar": <khal.khalendar.vdir.Vdir o...r': 
<khal.khalendar.vdir.Vdir object at 0xa287d03b640>, 'private': 
<khal.khalendar.vdir.Vdir object at 0xa287d03b940>})

    def test_get(self, coll_vdirs):
        """test getting an event by its href"""
        coll, vdirs = coll_vdirs
        event = Event.fromString(
            _get_text('event_dt_simple'), href='xyz.ics', calendar=cal1, 
locale=LOCALE_BERLIN,
        )
        coll.insert(event, cal1)
        event_from_db = coll.get_event(SIMPLE_EVENT_UID + '.ics', cal1)
        with freeze_time('2016-1-1'):
>           assert normalize_component(event_from_db.raw) == \
                normalize_component(_get_text('event_dt_simple_inkl_vtimezone'))
E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
('VCALENDAR',...enset())}))}))
E             At index 2 diff: frozenset({('VTIMEZONE', 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
frozenset({('DAYLIGHT', 
b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
 frozenset()), ('STANDARD', 
b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
 frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
Event\r\nDTSTART;TZID=Europe/Berlin:20140409T093000\r\nDTEND;TZID=Europe/Berlin:201404...
E
E             ...Full output truncated (2 lines hidden), use '-vv' to show

tests/khalendar_test.py:227: AssertionError
_____________________ TestDbCreation.test_failed_create_db _____________________

self = <tests.khalendar_test.TestDbCreation object at 0xa294fe3ded0>
tmpdir = local('/tmp/pytest-of-root/pytest-0/test_failed_create_db0')

    def test_failed_create_db(self, tmpdir):
        dbdir = str(tmpdir) + '/subdir/'
        dbpath = dbdir + 'khal.db'
        os.chmod(str(tmpdir), 400)

        calendars = {cal1: {'name': cal1, 'path': str(tmpdir)}}
>       with pytest.raises(CouldNotCreateDbDir):
E       Failed: DID NOT RAISE <class 
'khal.khalendar.exceptions.CouldNotCreateDbDir'>

tests/khalendar_test.py:415: Failed
________________________ test_construct_event_format_de ________________________

    @freeze_time('20140216T120000')
    def test_construct_event_format_de():
        for data_list, vevent_expected in test_set_format_de:
            vevent = _construct_event(data_list.split(), locale=LOCALE_BERLIN)
>           assert _replace_uid(vevent).to_ical() == vevent_expected
E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E             At index 102 diff: b';' != b':'
E             Use -v to get more diff

tests/parse_datetime_test.py:400: AssertionError
_______________________ test__construct_event_format_us ________________________

    @freeze_time('2014-02-16 12:00:00')
    def test__construct_event_format_us():
        for data_list, vevent in test_set_format_us:
            event = _construct_event(data_list.split(), locale=LOCALE_NEW_YORK)
>           assert _replace_uid(event).to_ical() == vevent
E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E             At index 68 diff: b';' != b':'
E             Use -v to get more diff

tests/parse_datetime_test.py:419: AssertionError
__________________ test__construct_event_format_de_complexer ___________________

    @freeze_time('2014-02-16 12:00:00')
    def test__construct_event_format_de_complexer():
        for data_list, vevent in test_set_format_de_complexer:
            event = _construct_event(data_list.split(), locale=LOCALE_BERLIN)
>           assert _replace_uid(event).to_ical() == vevent
E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E             At index 65 diff: b';' != b':'
E             Use -v to get more diff

tests/parse_datetime_test.py:452: AssertionError
________________________________ test_leap_year ________________________________

    def test_leap_year():
        for data_list, vevent in test_set_leap_year:
            with freeze_time('1999-1-1'):
                with pytest.raises(DateTimeParseError):
                    event = _construct_event(data_list.split(), 
locale=LOCALE_BERLIN)
            with freeze_time('2016-1-1 20:21:22'):
                event = _construct_event(data_list.split(), 
locale=LOCALE_BERLIN)
>               assert _replace_uid(event).to_ical() == vevent
E               AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E                 At index 102 diff: b';' != b':'
E                 Use -v to get more diff

tests/parse_datetime_test.py:471: AssertionError
_______________________________ test_description _______________________________

    def test_description():
        for data_list, vevent in test_set_description:
            with freeze_time('2014-02-16 12:00:00'):
                event = _construct_event(data_list.split(), 
locale=LOCALE_BERLIN)
>               assert _replace_uid(event).to_ical() == vevent
E               AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E                 At index 65 diff: b';' != b':'
E                 Use -v to get more diff

tests/parse_datetime_test.py:501: AssertionError
_____________________________ test_repeat_floating _____________________________

    def test_repeat_floating():
        for data_list, vevent in test_set_repeat_floating:
            with freeze_time('2014-02-16 12:00:00'):
                event = _construct_event(data_list.split(),
                                         description='please describe the 
event',
                                         repeat='daily',
                                         until='04.06.2015',
                                         locale=LOCALE_FLOATING)
>               assert normalize_component(_replace_uid(event).to_ical()) == \
                    normalize_component(vevent)
E               AssertionError: assert ('VEVENT', b'..., frozenset()) == 
('VEVENT', b'..., frozenset())
E                 At index 1 diff: 
b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
Event\r\nDTSTART;VALUE=DATE-TIME:20140216T080000\r\nDTEND;VALUE=DATE-TIME:20140216T090000\r\nDTSTAMP;VALUE=DATE-TIME:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T000000\r\nDESCRIPTION:please
 describe the event\r\nEND:VEVENT\r\n' != 
b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
Event\r\nDTSTART:20140216T080000\r\nDTEND:20140216T090000\r\nDTSTAMP:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T000000\r\nDESCR...
E
E                 ...Full output truncated (2 lines hidden), use '-vv' to show

tests/parse_datetime_test.py:523: AssertionError
____________________________ test_repeat_localized _____________________________

    def test_repeat_localized():
        for data_list, vevent in test_set_repeat_localized:
            with freeze_time('2014-02-16 12:00:00'):
                event = _construct_event(data_list.split(),
                                         description='please describe the 
event',
                                         repeat='daily',
                                         until='05.06.2015',
                                         locale=LOCALE_BERLIN)
>               assert normalize_component(_replace_uid(event).to_ical()) == \
                    normalize_component(vevent)
E               AssertionError: assert ('VEVENT', b'..., frozenset()) == 
('VEVENT', b'..., frozenset())
E                 At index 1 diff: 
b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
Event\r\nDTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20140216T080000\r\nDTEND;TZID=Europe/Berlin;VALUE=DATE-TIME:20140216T090000\r\nDTSTAMP;VALUE=DATE-TIME:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T230000Z\r\nDESCRIPTION:please
 describe the event\r\nEND:VEVENT\r\n' != 
b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
Event\r\nDTSTART;TZID=Europe/Berlin:20140216T080000\r\nDTEND;TZID=Europe/Berlin:20140216T090000\r\nDTSTAMP:20140216T120000Z\r\nUID:E41JRQX2DB...
E
E                 ...Full output truncated (2 lines hidden), use '-vv' to show

tests/parse_datetime_test.py:546: AssertionError
__________________________________ test_alarm __________________________________

    @freeze_time('2014-02-16 12:00:00')
    def test_alarm():
        for data_list, vevent in test_set_alarm:
            event = _construct_event(data_list.split(),
                                     description='please describe the event',
                                     alarm='23m',
                                     locale=LOCALE_BERLIN)
>           assert _replace_uid(event).to_ical() == vevent
E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E             At index 65 diff: b';' != b':'
E             Use -v to get more diff

tests/parse_datetime_test.py:574: AssertionError
_________________ test_description_and_location_and_categories _________________

    @freeze_time('2014-02-16 12:00:00')
    def test_description_and_location_and_categories():
        for data_list, vevent in 
test_set_description_and_location_and_categories:
            event = _construct_event(data_list.split(),
                                     description='please describe the event',
                                     location='in the office',
                                     categories=['boring meeting'],
                                     locale=LOCALE_BERLIN)
>           assert _replace_uid(event).to_ical() == vevent
E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
b'BEGIN:VEVEN...ND:VEVENT\r\n'
E             At index 65 diff: b';' != b':'
E             Use -v to get more diff

tests/parse_datetime_test.py:597: AssertionError
_________________________________ test_berlin __________________________________

    def test_berlin():
        vberlin_std = b'\r\n'.join(
            [b'BEGIN:STANDARD',
             b'DTSTART:20141026T020000',
             b'TZNAME:CET',
             b'TZOFFSETFROM:+0200',
             b'TZOFFSETTO:+0100',
             b'END:STANDARD',
             ])

        vberlin_dst = b'\r\n'.join(
            [b'BEGIN:DAYLIGHT',
             b'DTSTART:20150329T030000',
             b'TZNAME:CEST',
             b'TZOFFSETFROM:+0100',
             b'TZOFFSETTO:+0200',
             b'END:DAYLIGHT',
             ])

        vberlin = create_timezone(berlin, atime, atime).to_ical()
        assert b'TZID:Europe/Berlin' in vberlin
>       assert vberlin_std in vberlin
E       AssertionError: assert 
b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD'
 in 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nBEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\n...ATE-TIME:20150329T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n'

tests/vtimezone_test.py:36: AssertionError
______________________________ test_berlin_rdate _______________________________

    def test_berlin_rdate():
        vberlin_std = b'\r\n'.join(
            [b'BEGIN:STANDARD',
             b'DTSTART:20141026T020000',
             b'RDATE:20151025T020000,20161030T020000',
             b'TZNAME:CET',
             b'TZOFFSETFROM:+0200',
             b'TZOFFSETTO:+0100',
             b'END:STANDARD',
             ])

        vberlin_dst = b'\r\n'.join(
            [b'BEGIN:DAYLIGHT',
             b'DTSTART:20150329T030000',
             b'RDATE:20160327T030000',
             b'TZNAME:CEST',
             b'TZOFFSETFROM:+0100',
             b'TZOFFSETTO:+0200',
             b'END:DAYLIGHT',
             ])

        vberlin = create_timezone(berlin, atime, btime).to_ical()
        assert b'TZID:Europe/Berlin' in vberlin
>       assert vberlin_std in vberlin
E       AssertionError: assert 
b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nRDATE:20151025T020000,20161030T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD'
 in 
b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nBEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nRDATE:20151025...r\nRDATE:20160327T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n'

tests/vtimezone_test.py:63: AssertionError
_________________________________ test_bogota __________________________________

    def test_bogota():
        vbogota = [b'BEGIN:VTIMEZONE',
                   b'TZID:America/Bogota',
                   b'BEGIN:STANDARD',
                   b'DTSTART:19930206T230000',
                   b'TZNAME:COT',
                   b'TZOFFSETFROM:-0400',
                   b'TZOFFSETTO:-0500',
                   b'END:STANDARD',
                   b'END:VTIMEZONE',
                   b'']
        if version.parse(pytz.__version__) > version.Version('2017.1'):
            vbogota[4] = b'TZNAME:-05'
            if version.parse(pytz.__version__) < version.Version('2022.7'):
                vbogota.insert(4, b'RDATE:20380118T221407')

>       assert create_timezone(bogota, atime, atime).to_ical().split(b'\r\n') 
> == vbogota
E       AssertionError: assert [b'BEGIN:VTIM...M:-0400', ...] == 
[b'BEGIN:VTIM...M:-0400', ...]
E         At index 3 diff: b'DTSTART;VALUE=DATE-TIME:19930206T230000' != 
b'DTSTART:19930206T230000'
E         Use -v to get more diff

tests/vtimezone_test.py:83: AssertionError
=============================== warnings summary ===============================
tests/backend_test.py:5
  /home/wen/ports/obj/khal-0.11.2/khal-0.11.2/tests/backend_test.py:5: 
DeprecationWarning: pkg_resources is deprecated as an API. See 
https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
  /usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871: 
DeprecationWarning: Deprecated call to 
`pkg_resources.declare_namespace('mpl_toolkits')`.
  Implementing implicit namespace packages (as specified in PEP 420) is 
preferred to `pkg_resources.declare_namespace`. See 
https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
  /usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871: 
DeprecationWarning: Deprecated call to 
`pkg_resources.declare_namespace('sphinxcontrib')`.
  Implementing implicit namespace packages (as specified in PEP 420) is 
preferred to `pkg_resources.declare_namespace`. See 
https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/cal_display_test.py::test_vertical_month_unicode - AssertionErro...
FAILED tests/cal_display_test.py::test_vertical_month_unicode_weekdeays - Ass...
FAILED tests/cal_display_test.py::test_vertical_month_unicode_weekdeays_gr - ...
FAILED tests/cal_display_test.py::test_vertical_month_abbr_fr - AssertionErro...
FAILED tests/cli_test.py::test_configure_command_cannot_write_config_file - a...
FAILED tests/cli_test.py::test_configure_command_cannot_create_vdir - Asserti...
FAILED tests/event_test.py::test_raw_dt - AssertionError: assert ('VCALENDAR'...
FAILED tests/event_test.py::test_transform_event - AssertionError: assert ('V...
FAILED tests/event_test.py::test_dt_two_tz - AssertionError: assert ('VCALEND...
FAILED tests/event_test.py::test_event_no_dst - AssertionError: assert ('VCAL...
FAILED tests/event_test.py::test_create_timezone_static - AssertionError: ass...
FAILED tests/event_test.py::test_create_timezone_in_future - AssertionError: ...
FAILED tests/icalendar_test.py::test_new_vevent - AssertionError: assert 'BEG...
FAILED tests/icalendar_test.py::test_split_ics - AssertionError: assert ['', ...
FAILED tests/icalendar_test.py::test_split_ics_random_uid - AssertionError: a...
FAILED tests/khalendar_test.py::TestCollection::test_get - AssertionError: as...
FAILED tests/khalendar_test.py::TestDbCreation::test_failed_create_db - Faile...
FAILED tests/parse_datetime_test.py::test_construct_event_format_de - Asserti...
FAILED tests/parse_datetime_test.py::test__construct_event_format_us - Assert...
FAILED tests/parse_datetime_test.py::test__construct_event_format_de_complexer
FAILED tests/parse_datetime_test.py::test_leap_year - AssertionError: assert ...
FAILED tests/parse_datetime_test.py::test_description - AssertionError: asser...
FAILED tests/parse_datetime_test.py::test_repeat_floating - AssertionError: a...
FAILED tests/parse_datetime_test.py::test_repeat_localized - AssertionError: ...
FAILED tests/parse_datetime_test.py::test_alarm - AssertionError: assert b'BE...
FAILED 
tests/parse_datetime_test.py::test_description_and_location_and_categories
FAILED tests/vtimezone_test.py::test_berlin - AssertionError: assert b'BEGIN:...
FAILED tests/vtimezone_test.py::test_berlin_rdate - AssertionError: assert b'...
FAILED tests/vtimezone_test.py::test_bogota - AssertionError: assert [b'BEGIN...
====== 29 failed, 283 passed, 1 xfailed, 2 xpassed, 7 warnings in 18.76s =======

________________________________________
发件人: Stuart Henderson <s...@spacehopper.org>
发送时间: 2023年12月5日 20:14
收件人: wen heping
抄送: j...@openbsd.org; ports@openbsd.org
主题: Re: productivity/khal: Update to 0.11.2

On 2023/12/05 03:08, wen heping wrote:
> Hi, all:
>
>     Here is a patch for productivity/khal:
>     i) Update to 0.11.2
>     ii) Add some missing TEST_DEPENDS
>
>    It build and run well on amd64-current system.
>    In all 300+ tests there are 29 tests failed.
>    No other ports depend on it.

vdirsyncer is a RUN_DEPENDS so it doesn't need listing again in
TEST_DEPENDS

can you show your test log? I only get 4 failed so maybe there are
some other deps we can add.


> Index: productivity/khal/Makefile
> ===================================================================
> RCS file: /cvs/ports/productivity/khal/Makefile,v
> retrieving revision 1.20
> diff -u -p -r1.20 Makefile
> --- productivity/khal/Makefile        13 Nov 2022 20:31:00 -0000      1.20
> +++ productivity/khal/Makefile        5 Dec 2023 03:03:27 -0000
> @@ -1,8 +1,7 @@
>  COMMENT =            standards based terminal calendar
>
> -MODPY_EGG_VERSION =  0.10.4
> +MODPY_EGG_VERSION =  0.11.2
>  DISTNAME =           khal-${MODPY_EGG_VERSION}
> -REVISION =           2
>
>  CATEGORIES =         productivity
>
> @@ -31,7 +30,9 @@ RUN_DEPENDS =               devel/py-atomicwrites${MO
>                       devel/py-urwid${MODPY_FLAVOR} \
>                       devel/py-xdg${MODPY_FLAVOR} \
>                       productivity/vdirsyncer
> -TEST_DEPENDS =               devel/py-freezegun${MODPY_FLAVOR} \
> -                     devel/py-test-cov${MODPY_FLAVOR}
> +TEST_DEPENDS =               devel/py-hypothesis${MODPY_FLAVOR} \
> +                     devel/py-freezegun${MODPY_FLAVOR} \
> +                     productivity/vdirsyncer \
> +                     sysutils/py-packaging${MODPY_FLAVOR}
>
>  .include <bsd.port.mk>
> Index: productivity/khal/distinfo
> ===================================================================
> RCS file: /cvs/ports/productivity/khal/distinfo,v
> retrieving revision 1.8
> diff -u -p -r1.8 distinfo
> --- productivity/khal/distinfo        15 Sep 2021 20:06:12 -0000      1.8
> +++ productivity/khal/distinfo        5 Dec 2023 03:03:27 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (khal-0.10.4.tar.gz) = P9uYCpphwCBteoKxb3e0CKTzQaK4ZrnJ/PamQYUNEp8=
> -SIZE (khal-0.10.4.tar.gz) = 185736
> +SHA256 (khal-0.11.2.tar.gz) = j7jYk3HlPiI1lToHZeQbl+F0hIpojWN2hHdXbQP4mbo=
> +SIZE (khal-0.11.2.tar.gz) = 196986
> Index: productivity/khal/pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/productivity/khal/pkg/PLIST,v
> retrieving revision 1.6
> diff -u -p -r1.6 PLIST
> --- productivity/khal/pkg/PLIST       13 Nov 2022 20:31:00 -0000      1.6
> +++ productivity/khal/pkg/PLIST       5 Dec 2023 03:03:27 -0000
> @@ -24,6 +24,8 @@ lib/python${MODPY_VERSION}/site-packages
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}configwizard.${MODPY_PYC_MAGIC_TAG}pyc
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}controllers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}controllers.${MODPY_PYC_MAGIC_TAG}pyc
> +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}custom_types.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}custom_types.${MODPY_PYC_MAGIC_TAG}pyc
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}pyc
>  
> lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}icalendar.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> @@ -40,6 +42,7 @@ lib/python${MODPY_VERSION}/site-packages
>  lib/python${MODPY_VERSION}/site-packages/khal/cli.py
>  lib/python${MODPY_VERSION}/site-packages/khal/configwizard.py
>  lib/python${MODPY_VERSION}/site-packages/khal/controllers.py
> +lib/python${MODPY_VERSION}/site-packages/khal/custom_types.py
>  lib/python${MODPY_VERSION}/site-packages/khal/exceptions.py
>  lib/python${MODPY_VERSION}/site-packages/khal/icalendar.py
>  lib/python${MODPY_VERSION}/site-packages/khal/khalendar/

Reply via email to