Skip to content

Commit

Permalink
Target net45, avoid a few superfluous collection materializations. #392
Browse files Browse the repository at this point in the history
  • Loading branch information
Rian Stockbower committed May 29, 2018
1 parent 0341487 commit 46e5af8
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 7 deletions.
28 changes: 28 additions & 0 deletions net-core/Ical.Net.CoreUnitTests/SerializationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -442,5 +442,33 @@ public void UnicodeDescription()
Assert.IsTrue(deserializedEvent.Description.Contains("•"));
Assert.IsTrue(deserializedEvent.Description.Contains("‘"));
}

[Test]
public void TestRRuleUntilSerialization()
{
var rrule = new RecurrencePattern(FrequencyType.Daily)
{
Until = _nowTime.AddDays(7),
};
const string someTz = "Europe/Volgograd";
var e = new CalendarEvent
{
Start = new CalDateTime(_nowTime, someTz),
End = new CalDateTime(_nowTime.AddHours(1), someTz),
RecurrenceRules = new List<RecurrencePattern> { rrule },
};
var c = new Calendar
{
Events = { e },
};
var serialized = new CalendarSerializer().SerializeToString(c);
var serializedUntilNotContainsZSuffix = serialized
.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
.Single(line => line.StartsWith("RRULE:", StringComparison.Ordinal));
var untilIndex = serializedUntilNotContainsZSuffix.IndexOf("UNTIL", StringComparison.Ordinal);
var until = serializedUntilNotContainsZSuffix.Substring(untilIndex);

Assert.IsTrue(!until.EndsWith("Z"));
}
}
}
28 changes: 28 additions & 0 deletions net-core/Ical.Net.FrameworkUnitTests/SerializationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -442,5 +442,33 @@ public void UnicodeDescription()
Assert.IsTrue(deserializedEvent.Description.Contains("•"));
Assert.IsTrue(deserializedEvent.Description.Contains("‘"));
}

[Test]
public void TestRRuleUntilSerialization()
{
var rrule = new RecurrencePattern(FrequencyType.Daily)
{
Until = _nowTime.AddDays(7),
};
const string someTz = "Europe/Volgograd";
var e = new CalendarEvent
{
Start = new CalDateTime(_nowTime, someTz),
End = new CalDateTime(_nowTime.AddHours(1), someTz),
RecurrenceRules = new List<RecurrencePattern> {rrule},
};
var c = new Calendar
{
Events = { e },
};
var serialized = new CalendarSerializer().SerializeToString(c);
var serializedUntilNotContainsZSuffix = serialized
.Split(new[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries)
.Single(line => line.StartsWith("RRULE:", StringComparison.Ordinal));
var untilIndex = serializedUntilNotContainsZSuffix.IndexOf("UNTIL", StringComparison.Ordinal);
var until = serializedUntilNotContainsZSuffix.Substring(untilIndex);

Assert.IsTrue(!until.EndsWith("Z"));
}
}
}
6 changes: 3 additions & 3 deletions net-core/Ical.Net.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
<!--<file src="Ical.Net\bin\Release\netstandard1.3\Ical.Net.xml" target="lib\netstandard1.3\Ical.Net.xml" />-->
<file src="Ical.Net\bin\Release\netstandard1.3\Ical.Net.deps.json" target="lib\netstandard1.3\Ical.Net.deps.json" />

<file src="Ical.Net\bin\Release\net46\Ical.Net.dll" target="lib\net46\Ical.Net.dll" />
<file src="Ical.Net\bin\Release\net46\Ical.Net.pdb" target="lib\net46\Ical.Net.pdb" />
<!--<file src="Ical.Net\bin\Release\net46\Ical.Net.xml" target="lib\net46\Ical.Net.xml" />-->
<file src="Ical.Net\bin\Release\net45\Ical.Net.dll" target="lib\net45\Ical.Net.dll" />
<file src="Ical.Net\bin\Release\net45\Ical.Net.pdb" target="lib\net45\Ical.Net.pdb" />
<!--<file src="Ical.Net\bin\Release\net45\Ical.Net.xml" target="lib\net45\Ical.Net.xml" />-->
</files>
</package>
2 changes: 1 addition & 1 deletion net-core/Ical.Net/Ical.Net.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup>
<TargetFrameworks>netstandard1.3;net46</TargetFrameworks>
<TargetFrameworks>netstandard1.3;net45</TargetFrameworks>
<Version>4.0.1</Version>
<Authors>Rian Stockbower, Douglas Day</Authors>
<Company />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,15 +161,15 @@ public override string SerializeToString(object obj)

if (recur.ByDay.Count > 0)
{
var bydayValues = new List<string>();
var bydayValues = new List<string>(recur.ByDay.Count);

var serializer = factory.Build(typeof (WeekDay), SerializationContext) as IStringSerializer;
if (serializer != null)
{
bydayValues.AddRange(recur.ByDay.Select(byday => serializer.SerializeToString(byday)));
}

values.Add("BYDAY=" + string.Join(",", bydayValues.ToArray()));
values.Add("BYDAY=" + string.Join(",", bydayValues));
}

SerializeByValue(values, recur.ByHour, "BYHOUR");
Expand All @@ -184,7 +184,7 @@ public override string SerializeToString(object obj)
// Pop the recurrence pattern off the serialization stack
SerializationContext.Pop();

return Encode(recur, string.Join(";", values.ToArray()));
return Encode(recur, string.Join(";", values));
}

//Compiling these is a one-time penalty of about 80ms
Expand Down

0 comments on commit 46e5af8

Please sign in to comment.