fix: 포트 충돌 회피 — note_bridge 8098, intent_service 8099
Jellyfin(8096), OrbStack(8097) 포트 충돌으로 변경. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
"""This implemensts RFC 6868.
|
||||
|
||||
There are only some changes to parameters needed.
|
||||
"""
|
||||
import os
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import pytest
|
||||
|
||||
from icalendar import Calendar
|
||||
from icalendar.parser import dquote, rfc_6868_escape, rfc_6868_unescape
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from icalendar import vCalAddress, vText
|
||||
|
||||
|
||||
param_duplicate = pytest.mark.parametrize(
|
||||
"duplicate",
|
||||
[ lambda x:x, lambda cal: Calendar.from_ical(cal.to_ical()) ]
|
||||
)
|
||||
|
||||
@param_duplicate
|
||||
def test_rfc_6868_example(calendars, duplicate):
|
||||
"""Check the example from the RFC."""
|
||||
cal : Calendar = duplicate(calendars.rfc_6868)
|
||||
attendee : vCalAddress = cal.events[0]["attendee"]
|
||||
assert attendee.name == 'George Herman "Babe" Ruth'
|
||||
|
||||
|
||||
@param_duplicate
|
||||
def test_all_parameters(calendars, duplicate):
|
||||
"""Check that all examples get decoded correctly."""
|
||||
cal : Calendar = duplicate(calendars.rfc_6868)
|
||||
param = cal["X-PARAM"].params["ALL"]
|
||||
assert param == '^"\n'
|
||||
|
||||
|
||||
@param_duplicate
|
||||
def test_unknown_character(calendars, duplicate):
|
||||
"""if a ^ (U+005E) character is followed by any character other than
|
||||
the ones above, parsers MUST leave both the ^ and the following
|
||||
character in place"""
|
||||
cal : Calendar = duplicate(calendars.rfc_6868)
|
||||
param = cal["X-PARAM"].params["UNKNOWN"]
|
||||
assert param == "^a^ ^asd"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("text", "expected"),
|
||||
[
|
||||
("^a", "^a"),
|
||||
("^^", "^"),
|
||||
# ("^n", ), # see other test
|
||||
("^'", '"'),
|
||||
("^^a^b", "^a^b")
|
||||
],
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"modify", [lambda x: x, lambda x: x*10, lambda x: f"asd{x}aaA^AA"]
|
||||
)
|
||||
def test_unescape(text, expected, modify):
|
||||
"""Check unescaping."""
|
||||
result = rfc_6868_unescape(modify(text))
|
||||
assert result == modify(expected)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"newline", ["\n", "\r\n", "\r", os.linesep])
|
||||
def test_unescape_newline(newline, monkeypatch):
|
||||
"""Unescape the newline."""
|
||||
monkeypatch.setattr(os, "linesep", newline)
|
||||
assert rfc_6868_unescape("^n") == newline
|
||||
|
||||
|
||||
param_values = pytest.mark.parametrize("text, expected", [
|
||||
("", ""),
|
||||
("^", "^^"),
|
||||
("^n", "^^n"),
|
||||
("This text\n has\r several\r\n lines", "This text^n has^n several^n lines"),
|
||||
('Call me "Harry".', "Call me ^'Harry^'."),
|
||||
]
|
||||
)
|
||||
|
||||
@param_values
|
||||
def test_escape_rfc_6868(text, expected):
|
||||
"""Check that we can escape the content with special characters."""
|
||||
escaped = rfc_6868_escape(text)
|
||||
assert escaped == expected, f"{escaped!r} == {expected!r}"
|
||||
assert rfc_6868_escape(rfc_6868_unescape(escaped)) == expected
|
||||
|
||||
|
||||
@param_values
|
||||
def test_escaping_parameters(text, expected):
|
||||
cal = Calendar()
|
||||
cal.add("X-Param", "asd")
|
||||
param : vText = cal["X-PARAM"]
|
||||
param.params["RFC6868"] = text
|
||||
ical = cal.to_ical().decode()
|
||||
print(ical)
|
||||
assert "X-PARAM;RFC6868=" + dquote(expected) in ical
|
||||
|
||||
|
||||
def test_encode_example_again(calendars):
|
||||
"""The example file should yield its content again."""
|
||||
cal : Calendar = calendars.rfc_6868
|
||||
again = Calendar.from_ical(cal.to_ical())
|
||||
assert cal == again
|
||||
assert cal.to_ical() == again.to_ical()
|
||||
Reference in New Issue
Block a user