Jellyfin(8096), OrbStack(8097) 포트 충돌으로 변경. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
import datetime
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("field", "expected_value"),
|
|
[
|
|
("PRODID", "-//Plönë.org//NONSGML plone.app.event//EN"),
|
|
("X-WR-CALDESC", "test non ascii: äöü ÄÖÜ €"),
|
|
],
|
|
)
|
|
def test_calendar_from_ical_respects_unicode(field, expected_value, calendars):
|
|
cal = calendars.calendar_with_unicode
|
|
assert cal[field].to_ical().decode("utf-8") == expected_value
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("test_input", "field", "expected_value"),
|
|
[
|
|
("event_with_unicode_fields", "SUMMARY", "Non-ASCII Test: ÄÖÜ äöü €"),
|
|
(
|
|
"event_with_unicode_fields",
|
|
"DESCRIPTION",
|
|
"icalendar should be able to handle non-ascii: €äüöÄÜÖ.",
|
|
),
|
|
("event_with_unicode_fields", "LOCATION", "Tribstrül"),
|
|
# Non-unicode characters in summary
|
|
# https://github.com/collective/icalendar/issues/64
|
|
("issue_64_event_with_non_ascii_summary", "SUMMARY", "åäö"),
|
|
# Unicode characters in summary
|
|
("issue_64_event_with_ascii_summary", "SUMMARY", "abcdef"),
|
|
],
|
|
)
|
|
def test_event_from_ical_respects_unicode(test_input, field, expected_value, events):
|
|
event = events[test_input]
|
|
assert event[field].to_ical().decode("utf-8") == expected_value
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("test_input", "expected_output"),
|
|
[
|
|
# chokes on umlauts in ORGANIZER
|
|
# https://github.com/collective/icalendar/issues/101
|
|
("issue_101_icalendar_chokes_on_umlauts_in_organizer", "acme, ädmin"),
|
|
("event_with_unicode_organizer", "Джон Доу"),
|
|
],
|
|
)
|
|
def test_events_parameter_unicoded(events, test_input, expected_output):
|
|
assert events[test_input]["ORGANIZER"].params["CN"] == expected_output
|
|
|
|
|
|
def test_parses_event_with_non_ascii_tzid_issue_237(calendars, in_timezone):
|
|
"""Issue #237 - Fail to parse timezone with non-ascii TZID
|
|
see https://github.com/collective/icalendar/issues/237
|
|
"""
|
|
start = calendars.issue_237_fail_to_parse_timezone_with_non_ascii_tzid.walk(
|
|
"VEVENT"
|
|
)[0].decoded("DTSTART")
|
|
expected = in_timezone(datetime.datetime(2017, 5, 11, 13, 30), "America/Sao_Paulo")
|
|
assert not calendars.issue_237_fail_to_parse_timezone_with_non_ascii_tzid.errors
|
|
assert start == expected
|
|
|
|
|
|
def test_parses_timezone_with_non_ascii_tzid_issue_237(timezones):
|
|
"""Issue #237 - Fail to parse timezone with non-ascii TZID
|
|
see https://github.com/collective/icalendar/issues/237
|
|
"""
|
|
assert timezones.issue_237_brazilia_standard["tzid"] == "(UTC-03:00) Brasília"
|
|
|
|
|
|
@pytest.mark.parametrize("timezone_name", ["standard", "daylight"])
|
|
def test_parses_timezone_with_non_ascii_tzname_issue_273(timezones, timezone_name):
|
|
"""Issue #237 - Fail to parse timezone with non-ascii TZID
|
|
see https://github.com/collective/icalendar/issues/237
|
|
"""
|
|
assert (
|
|
timezones.issue_237_brazilia_standard.walk(timezone_name)[0]["TZNAME"]
|
|
== f"Brasília {timezone_name}"
|
|
)
|
|
|
|
|
|
def test_broken_property(calendars):
|
|
"""
|
|
Test if error messages are encoded properly.
|
|
"""
|
|
for event in calendars.broken_ical.walk("vevent"):
|
|
assert len(event.errors) == 1, "Not the right amount of errors."
|
|
error = event.errors[0][1]
|
|
assert error.startswith("Content line could not be parsed into parts")
|
|
|
|
|
|
def test_apple_xlocation(calendars):
|
|
"""
|
|
Test if we support base64 encoded binary data in parameter values.
|
|
"""
|
|
for event in calendars.x_location.walk("vevent"):
|
|
assert len(event.errors) == 0, "Got too many errors"
|