Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quoted Printable field support #523

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
DTSTART:20070303T150000
DTEND:20070303T170000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =90=EC=8D=E8 - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6810
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=93=99=81X=97=CD=97=A4=8F=E3=8B=A3=8BZ=8F=EA
END:VEVENT
BEGIN:VEVENT
DTSTART:20070311T140300
DTEND:20070311T160300
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - G=91=E5=8D=E3
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6822
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070317T160300
DTEND:20070317T180300
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =90=E7=97t - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6828
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=83t=83N=83_=93d=8Eq=83A=83=8A=81[=83i
END:VEVENT
BEGIN:VEVENT
DTSTART:20070331T190400
DTEND:20070331T210400
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =90_=8C=CB - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6840
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=83z=81[=83=80=83Y=83X=83^=83W=83A=83=80=90_=8C=CB
END:VEVENT
BEGIN:VEVENT
DTSTART:20070407T160000
DTEND:20070407T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =91=E5=8B{
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6847
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070414T140000
DTEND:20070414T160000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =89=A1=95lFC - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6853
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=93=FA=8EY=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070421T190000
DTEND:20070421T210000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =90=B4=90=85 - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6866
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=93=FA=96{=95=BD=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070429T160000
DTEND:20070429T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =89Y=98a
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6878
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070503T160000
DTEND:20070503T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 FC=93=8C=8B=9E - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6882
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=96=A1=82=CC=91f=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070506T150000
DTEND:20070506T170000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =89=A1=95lFM
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6892
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070512T190000
DTEND:20070512T210000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =94=D6=93c
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6901
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070519T140000
DTEND:20070519T160000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =90V=8A=83 - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6907
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=93=8C=96k=93d=97=CD=83r=83b=83O=83X=83=8F=83=93=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070526T160000
DTEND:20070526T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =8Db=95{
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6918
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070609T150000
DTEND:20070609T170000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =91=E5=95=AA - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6927
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8B=E3=8FB=90=CE=96=FB=83h=81[=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070616T160000
DTEND:20070616T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =8DL=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6936
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070620T190000
DTEND:20070620T210000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =94=90 - =8E=AD=93=87
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6943
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=93=FA=97=A7=94=90=83T=83b=83J=81[=8F=EA
END:VEVENT
BEGIN:VEVENT
DTSTART:20070624T160000
DTEND:20070624T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - =96=BC=8C=C3=89=AE
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6959
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
BEGIN:VEVENT
DTSTART:20070630T160000
DTEND:20070630T180000
SUMMARY;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
J1 =8E=AD=93=87 - FC=93=8C=8B=9E
DESCRIPTION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
http://soccer.phew.homeip.net/match/?mid=3D6962
LOCATION;CHARSET=SJIS;ENCODING=QUOTED-PRINTABLE:=
=8C=A7=97=A7=83J=83V=83}=83T=83b=83J=81[=83X=83^=83W=83A=83=80
END:VEVENT
END:VCALENDAR
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
BEGIN:VCALENDAR
VERSION:1.0
PRODID:vCal ID default
TZ:-04:00
BEGIN:VEVENT
UID:content://com.android.calendar/events/123353
DESCRIPTION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=0D=0A=2D=2D=20=44=6F=20=6E=6F=74=20=64=65=6C=65=74=65=20=6F=72=20=63=
=68=61=6E=67=65=20=61=6E=79=20=6F=66=20=74=68=65=20=66=6F=6C=6C=6F=77=
=69=6E=67=20=74=65=78=74=2E=20=2D=2D=0D=0A=0D=0A=4A=6F=69=6E=20=57=65=
=62=45=78=20=6D=65=65=74=69=6E=67=3C=68=74=74=70=73=3A=2F=2F=63=61=70=
=63=6F=6D=2E=77=65=62=65=78=2E=63=6F=6D=2F=63=61=70=63=6F=6D=2F=6A=2E=
=70=68=70=3F=4D=54=49=44=3D=6D=63=35=65=38=31=30=33=39=63=65=33=34=34=
=35=62=37=31=32=33=31=66=65=39=63=33=37=61=62=39=30=31=33=3E=0D=0A=4D=
=65=65=74=69=6E=67=20=6E=75=6D=62=65=72=20=28=61=63=63=65=73=73=20=63=
=6F=64=65=29=3A=20=37=34=35=20=34=39=31=20=32=35=36=0D=0A=4D=65=65=74=
=69=6E=67=20=70=61=73=73=77=6F=72=64=3A=20=51=37=32=64=71=42=70=6D=0D=
=0A=0D=0A=4A=6F=69=6E=20=66=72=6F=6D=20=61=20=76=69=64=65=6F=20=73=79=
=73=74=65=6D=20=6F=72=20=61=70=70=6C=69=63=61=74=69=6F=6E=0D=0A=44=69=
=61=6C=20=37=34=35=34=39=31=32=35=36=40=63=61=70=63=6F=6D=2E=77=65=62=
=65=78=2E=63=6F=6D=3C=73=69=70=3A=37=34=35=34=39=31=32=35=36=40=63=61=
=70=63=6F=6D=2E=77=65=62=65=78=2E=63=6F=6D=3E=0D=0A=0D=0A=0D=0A=4A=6F=
=69=6E=20=62=79=20=70=68=6F=6E=65=0D=0A=2B=31=20=32=31=30=20=36=30=36=
=20=39=34=36=36=20=55=53=20=54=6F=6C=6C=0D=0A=2B=31=20=38=36=36=20=32=
=38=32=20=37=33=36=36=20=55=53=20=54=6F=6C=6C=20=46=72=65=65=0D=0A=47=
=6C=6F=62=61=6C=20=63=61=6C=6C=2D=69=6E=20=6E=75=6D=62=65=72=73=3C=68=
=74=74=70=73=3A=2F=2F=63=61=70=63=6F=6D=2E=77=65=62=65=78=2E=63=6F=6D=
=2F=63=61=70=63=6F=6D=2F=67=6C=6F=62=61=6C=63=61=6C=6C=69=6E=2E=70=68=
=70=3F=73=65=72=76=69=63=65=54=79=70=65=3D=4D=43=26=45=44=3D=34=38=33=
=33=39=30=35=35=32=26=74=6F=6C=6C=46=72=65=65=3D=31=3E=20=20=7C=20=20=
=54=6F=6C=6C=2D=66=72=65=65=20=63=61=6C=6C=69=6E=67=20=72=65=73=74=72=
=69=63=74=69=6F=6E=73=3C=68=74=74=70=73=3A=2F=2F=77=77=77=2E=77=65=62=
=65=78=2E=63=6F=6D=2F=70=64=66=2F=74=6F=6C=6C=66=72=65=65=5F=72=65=73=
=74=72=69=63=74=69=6F=6E=73=2E=70=64=66=3E=0D=0A=0D=0A=0D=0A=43=61=6E=
=27=74=20=6A=6F=69=6E=20=74=68=65=20=6D=65=65=74=69=6E=67=3F=3C=68=74=
=74=70=73=3A=2F=2F=68=65=6C=70=2E=77=65=62=65=78=2E=63=6F=6D=2F=64=6F=
=63=73=2F=44=4F=43=2D=35=34=31=32=3E=0D=0A=0D=0A=49=66=20=79=6F=75=20=
=61=72=65=20=61=20=68=6F=73=74=2C=20=67=6F=20=68=65=72=65=3C=68=74=74=
=70=73=3A=2F=2F=63=61=70=63=6F=6D=2E=77=65=62=65=78=2E=63=6F=6D=2F=63=
=61=70=63=6F=6D=2F=6A=2E=70=68=70=3F=4D=54=49=44=3D=6D=32=31=63=63=66=
=32=38=33=62=65=63=33=33=30=66=61=63=33=37=31=32=66=30=39=37=63=63=65=
=61=30=36=64=3E=20=74=6F=20=76=69=65=77=20=68=6F=73=74=20=69=6E=66=6F=
=72=6D=61=74=69=6F=6E=2E=0D=0A=0D=0A=49=4D=50=4F=52=54=41=4E=54=20=4E=
=4F=54=49=43=45=3A=20=50=6C=65=61=73=65=20=6E=6F=74=65=20=74=68=61=74=
=20=74=68=69=73=20=57=65=62=45=78=20=73=65=72=76=69=63=65=20=61=6C=6C=
=6F=77=73=20=61=75=64=69=6F=20=61=6E=64=20=6F=74=68=65=72=20=69=6E=66=
=6F=72=6D=61=74=69=6F=6E=20=73=65=6E=74=20=64=75=72=69=6E=67=20=74=68=
=65=20=73=65=73=73=69=6F=6E=20=74=6F=20=62=65=20=72=65=63=6F=72=64=65=
=64=2C=20=77=68=69=63=68=20=6D=61=79=20=62=65=20=64=69=73=63=6F=76=65=
=72=61=62=6C=65=20=69=6E=20=61=20=6C=65=67=61=6C=20=6D=61=74=74=65=72=
=2E=20=42=79=20=6A=6F=69=6E=69=6E=67=20=74=68=69=73=20=73=65=73=73=69=
=6F=6E=2C=20=79=6F=75=20=61=75=74=6F=6D=61=74=69=63=61=6C=6C=79=20=63=
=6F=6E=73=65=6E=74=20=74=6F=20=73=75=63=68=20=72=65=63=6F=72=64=69=6E=
=67=73=2E=20=49=66=20=79=6F=75=20=64=6F=20=6E=6F=74=20=63=6F=6E=73=65=
=6E=74=20=74=6F=20=62=65=69=6E=67=20=72=65=63=6F=72=64=65=64=2C=20=64=
=69=73=63=75=73=73=20=79=6F=75=72=20=63=6F=6E=63=65=72=6E=73=20=77=69=
=74=68=20=74=68=65=20=68=6F=73=74=20=6F=72=20=64=6F=20=6E=6F=74=20=6A=
=6F=69=6E=20=74=68=65=20=73=65=73=73=69=6F=6E=2E=0D=0A=0D=0A=0D=0A
DTEND:20160725T183000Z
DTSTART:20160725T173000Z
LOCATION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=42=32=2F=46=32=2F=43=61=72=69=62=62=65=61=6E
COMPLETED:20160725T183000Z
SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=57=65=62=65=78=20=66=6F=72=20=6D=74=67=20=77=2F=20=41=72=6D
ALARM:20160725T171500Z;;1;
END:VEVENT
END:VCALENDAR

2 changes: 2 additions & 0 deletions src/Ical.Net.CoreUnitTests/IcsFiles.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ internal static string ReadStream(string manifestResource)
internal static string Event2 => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.Event2.ics");
internal static string Event3 => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.Event3.ics");
internal static string Event4 => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.Event4.ics");
internal static string QuotedPrintableContent => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.QuotedPrintableContent.ics");
internal static string QuotedPrintableSJISEncoding => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.QuotedPrintable-NSEncoding.ics");
internal static string EventStatus => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.EventStatus.ics");
internal static string GeographicLocation1 => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.GeographicLocation1.ics");
internal static string Google1 => ReadStream("Ical.Net.CoreUnitTests.Calendars.Serialization.Google1.ics");
Expand Down
109 changes: 109 additions & 0 deletions src/Ical.Net.CoreUnitTests/QuotedPrintableDeserializationTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using Ical.Net.CalendarComponents;
using Ical.Net.DataTypes;
using Ical.Net.Serialization;
using Ical.Net.Serialization.DataTypes;
using NUnit.Framework;

namespace Ical.Net.CoreUnitTests
{
[TestFixture]
public class QuotedPrintableDeserializationTests
{

[Test, Category("Deserialization")]
public void QuotedPrintable_Decription()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

StringAssert.StartsWith("\r\n-- Do not delete or change any of the following text. --", evt.Description);
}

[Test, Category("Deserialization")]
public void QuotedPrintable_Location()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual("B2/F2/Caribbean", evt.Location);
}

[Test, Category("Deserialization")]
public void QuotedPrintable_Alarms()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual(1, evt.Alarms.Count());
}

[Test, Category("Deserialization")]
public void QuotedPrintable_UID()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual("content://com.android.calendar/events/123353", evt.Uid);
}

[Test, Category("Deserialization")]
public void QuotedPrintable_Summary()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual("Webex for mtg w/ Arm", evt.Summary);
}

[Test, Category("Deserialization")]
public void QuotedPrintable_Start()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual("2016-07-25T17:30:00 UTC", evt.Start.ToString("yyyy-MM-ddTHH:mm:ss", null));
}

[Test, Category("Deserialization")]
public void QuotedPrintable_End()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.AreEqual("2016-07-25T18:30:00 UTC", evt.End.ToString("yyyy-MM-ddTHH:mm:ss", null));
}

[Test, Category("Deserialization")]
public void QuotedPrintable_Complete()
{
var iCal = SimpleDeserializer.Default.Deserialize(new StringReader(IcsFiles.QuotedPrintableContent)).Cast<Calendar>().Single();
Assert.AreEqual(1, iCal.Events.Count);

var evt = iCal.Events.First();

Assert.IsInstanceOf<IDateTime>(evt.Properties["COMPLETED"].Value);
var completed = evt.Properties["COMPLETED"].Value as IDateTime;
Assert.AreEqual("2016-07-25T18:30:00 UTC", completed.ToString("yyyy-MM-ddTHH:mm:ss", null));
}
}
}
Loading