39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import string
|
|
|
|
from hypothesis import given, settings
|
|
import hypothesis.strategies as st
|
|
|
|
from icalendar.parser import Contentline, Contentlines, Parameters
|
|
import unittest
|
|
|
|
|
|
def printable_characters(**kw):
|
|
return st.text(
|
|
st.characters(blacklist_categories=(
|
|
'Cc', 'Cs'
|
|
), **kw)
|
|
)
|
|
|
|
key = st.text(string.ascii_letters + string.digits, min_size=1)
|
|
value = printable_characters(blacklist_characters='\\;:\"')
|
|
|
|
class TestFuzzing(unittest.TestCase):
|
|
|
|
@given(lines=st.lists(
|
|
st.tuples(key, st.dictionaries(key, value), value),
|
|
min_size=1
|
|
))
|
|
@settings(max_examples=10**3)
|
|
def test_main(self, lines):
|
|
cl = Contentlines()
|
|
for key, params, value in lines:
|
|
try:
|
|
params = Parameters(**params)
|
|
except TypeError:
|
|
# Happens when there is a random parameter 'self'...
|
|
continue
|
|
cl.append(Contentline.from_parts(key, params, value))
|
|
cl.append('')
|
|
|
|
assert Contentlines.from_ical(cl.to_ical()) == cl
|