Skip to content

Commit 6318fc7

Browse files
committed
Fix tests after review. I've added special handling for cancellation token to the IsEquivalent() method
1 parent df88b69 commit 6318fc7

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

Gofer.NET.Tests/GivenATaskInfo.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Linq;
23
using System.Linq.Expressions;
34
using System.Threading;
45
using System.Threading.Tasks;
@@ -19,20 +20,23 @@ public void ItPersistsPropertiesWhenSerializedAndDeserialized()
1920
var taskInfos = new[] {
2021
GetTestTask(() => TestMethod1("hello world")),
2122
GetTestTask(() => TestMethod2()),
22-
GetTestTask(() => TestMethod3(default))
23+
GetTestTask(() => TestMethod3(new CancellationToken()))
2324
};
2425

2526
foreach (var taskInfo in taskInfos)
2627
{
2728
var serializedTaskInfo = JsonTaskInfoSerializer.Serialize(taskInfo);
2829
var deserializedTaskInfo = JsonTaskInfoSerializer.Deserialize<TaskInfo>(serializedTaskInfo);
2930

31+
// we do skip cancellation tokens as they are ignored on serialization
32+
var importantTaskArgs = taskInfo.Args.Select(a => a is CancellationToken ? null : a).ToArray();
33+
3034
deserializedTaskInfo.Id.Should().Be(taskInfo.Id);
3135
deserializedTaskInfo.AssemblyName.Should().Be(taskInfo.AssemblyName);
3236
deserializedTaskInfo.TypeName.Should().Be(taskInfo.TypeName);
3337
deserializedTaskInfo.MethodName.Should().Be(taskInfo.MethodName);
3438
deserializedTaskInfo.ReturnType.Should().Be(taskInfo.ReturnType);
35-
deserializedTaskInfo.Args.ShouldAllBeEquivalentTo(taskInfo.Args);
39+
deserializedTaskInfo.Args.ShouldAllBeEquivalentTo(importantTaskArgs);
3640
deserializedTaskInfo.ArgTypes.ShouldAllBeEquivalentTo(taskInfo.ArgTypes);
3741
deserializedTaskInfo.CreatedAtUtc.Should().Be(taskInfo.CreatedAtUtc);
3842

@@ -50,7 +54,7 @@ public void ItProperlyDeterminesEquivalence()
5054
var taskInfo2a = GetTestTask(() => TestMethod2());
5155
var taskInfo2b = GetTestTask(() => TestMethod2());
5256

53-
var taskInfo3a = GetTestTask(() => TestMethod3(default));
57+
var taskInfo3a = GetTestTask(() => TestMethod3(new CancellationToken()));
5458
var taskInfo3b = GetTestTask(() => TestMethod3(new CancellationTokenSource().Token));
5559

5660
var taskInfo4a = GetTestTask(() => Console.WriteLine("hello"));

Gofer.NET.Utils/TaskInfo.cs

+15-16
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@ public bool IsEquivalent(TaskInfo otherTaskInfo)
4343
return false;
4444
}
4545

46-
for (var i=0; i<Args.Length; ++i) {
47-
if (!Equals(Args[i], otherTaskInfo.Args[i]))
46+
for (var i = 0; i < Args.Length; ++i)
47+
{
48+
// comparison ignores cancellation tokens
49+
// as they are ignored on serialization
50+
// and will be replaced with proper value at invocation time
51+
if (!Equals(GetEquivalenceArg(Args[i]), GetEquivalenceArg(otherTaskInfo.Args[i])))
4852
{
4953
return false;
5054
}
@@ -56,26 +60,21 @@ public bool IsEquivalent(TaskInfo otherTaskInfo)
5660
&& ReturnType.Equals(otherTaskInfo.ReturnType);
5761
}
5862

59-
public void ConvertTypeArgs()
63+
private object GetEquivalenceArg(object value)
6064
{
61-
for (var i=0;i<Args.Length;++i) {
62-
if (Args[i] == null)
63-
continue;
64-
65-
if (typeof(Type).IsAssignableFrom(Args[i].GetType())) {
66-
Args[i] = new TypeWrapper {Type=(Type)Args[i]};
67-
}
68-
}
65+
return value is CancellationToken ? null : value;
6966
}
7067

71-
public void UnconvertTypeArgs()
68+
public void UnconvertTypeArgs()
7269
{
73-
for (var i=0;i<Args.Length;++i) {
70+
for (var i = 0; i < Args.Length; ++i)
71+
{
7472
if (Args[i] == null)
7573
continue;
76-
77-
if (typeof(TypeWrapper).IsAssignableFrom(Args[i].GetType())) {
78-
Args[i] = ((TypeWrapper) Args[i]).Type;
74+
75+
if (typeof(TypeWrapper).IsAssignableFrom(Args[i].GetType()))
76+
{
77+
Args[i] = ((TypeWrapper)Args[i]).Type;
7978
}
8079
}
8180
}

0 commit comments

Comments
 (0)