Skip to content

Commit fcce067

Browse files
添加测试用例(#110
1 parent 3a46468 commit fcce067

3 files changed

Lines changed: 187 additions & 0 deletions

File tree

test/Rougamo.Fody.Tests/IssueTest.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Issues;
22
using Issues.Attributes;
33
using System;
4+
using System.Collections;
45
using System.Collections.Generic;
56
using System.Linq;
67
using System.Threading.Tasks;
@@ -269,11 +270,69 @@ public void Issue107Test()
269270
var instance = Assembly.GetInstance(nameof(Issue107));
270271
instance.Test();
271272
}
273+
272274
[Fact]
273275
public void Issue108Test()
274276
{
275277
var instance = Assembly.GetInstance("Issue108`1", false, t => t.MakeGenericType(typeof(string)));
276278
instance.CatchAndGetStackTrace(108, "mono-stacktrace");
277279
}
280+
281+
[Fact]
282+
public async Task Issue110Test()
283+
{
284+
var instance = Assembly.GetInstance(nameof(Issue110));
285+
var logs = new List<string>();
286+
287+
var enumerator = (IEnumerator)instance.Enumerator(logs);
288+
while (enumerator.MoveNext()) ;
289+
Assert.Equal(["Enumerator OnEntry", "Enumerator OnSuccess", "Enumerator OnExit"], logs);
290+
logs.Clear();
291+
292+
var genericEnumerator = (IEnumerator<int>)instance.GenericEnumerator(logs);
293+
while (genericEnumerator.MoveNext()) ;
294+
Assert.Equal(["GenericEnumerator OnEntry", "GenericEnumerator OnSuccess", "GenericEnumerator OnExit"], logs);
295+
logs.Clear();
296+
297+
var genericEnumerator1 = (IEnumerator<Guid>)instance.GenericEnumerator<Guid>(logs);
298+
while (genericEnumerator1.MoveNext()) ;
299+
Assert.Equal(["GenericEnumerator`1 OnEntry", "GenericEnumerator`1 OnSuccess", "GenericEnumerator`1 OnExit"], logs);
300+
logs.Clear();
301+
302+
var enumerable = (IEnumerable)instance.Enumerable(logs);
303+
foreach (var item in enumerable) ;
304+
Assert.Equal(["Enumerable OnEntry", "Enumerable OnSuccess", "Enumerable OnExit"], logs);
305+
logs.Clear();
306+
307+
var genericEnumerable = (IEnumerable<int>)instance.GenericEnumerable(logs);
308+
foreach (var item in genericEnumerable) ;
309+
Assert.Equal(["GenericEnumerable OnEntry", "GenericEnumerable OnSuccess", "GenericEnumerable OnExit"], logs);
310+
logs.Clear();
311+
312+
var genericEnumerable1 = (IEnumerable<string>)instance.GenericEnumerable<string>(logs);
313+
foreach (var item in genericEnumerable1) ;
314+
Assert.Equal(["GenericEnumerable`1 OnEntry", "GenericEnumerable`1 OnSuccess", "GenericEnumerable`1 OnExit"], logs);
315+
logs.Clear();
316+
317+
var asyncEnumerator = (IAsyncEnumerator<int>)instance.EnumeratorAsync(logs);
318+
while (await asyncEnumerator.MoveNextAsync()) ;
319+
Assert.Equal(["EnumeratorAsync OnEntry", "EnumeratorAsync OnSuccess", "EnumeratorAsync OnExit"], logs);
320+
logs.Clear();
321+
322+
var asyncEnumerator1 = (IAsyncEnumerator<decimal>)instance.EnumeratorAsync<decimal>(logs);
323+
while (await asyncEnumerator1.MoveNextAsync()) ;
324+
Assert.Equal(["EnumeratorAsync`1 OnEntry", "EnumeratorAsync`1 OnSuccess", "EnumeratorAsync`1 OnExit"], logs);
325+
logs.Clear();
326+
327+
var asyncEnumerable = (IAsyncEnumerable<int>)instance.EnumerableAsync(logs);
328+
await foreach (var item in asyncEnumerable) ;
329+
Assert.Equal(["EnumerableAsync OnEntry", "EnumerableAsync OnSuccess", "EnumerableAsync OnExit"], logs);
330+
logs.Clear();
331+
332+
var asyncEnumerable1 = (IAsyncEnumerable<DateTime>)instance.EnumerableAsync<DateTime>(logs);
333+
await foreach (var item in asyncEnumerable1) ;
334+
Assert.Equal(["EnumerableAsync`1 OnEntry", "EnumerableAsync`1 OnSuccess", "EnumerableAsync`1 OnExit"], logs);
335+
logs.Clear();
336+
}
278337
}
279338
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Rougamo;
2+
using Rougamo.Context;
3+
using System.Collections.Generic;
4+
5+
namespace Issues.Attributes;
6+
7+
public class _110_Attribute : MoAttribute
8+
{
9+
public override void OnEntry(MethodContext context)
10+
{
11+
((List<string>)context.Arguments[0]).Add($"{GetMethodName(context)} OnEntry");
12+
}
13+
14+
public override void OnSuccess(MethodContext context)
15+
{
16+
((List<string>)context.Arguments[0]).Add($"{GetMethodName(context)} OnSuccess");
17+
}
18+
19+
public override void OnException(MethodContext context)
20+
{
21+
((List<string>)context.Arguments[0]).Add($"{GetMethodName(context)} OnException");
22+
}
23+
24+
public override void OnExit(MethodContext context)
25+
{
26+
((List<string>)context.Arguments[0]).Add($"{GetMethodName(context)} OnExit");
27+
}
28+
29+
public static string GetMethodName(MethodContext context)
30+
{
31+
if (!context.Method.IsGenericMethodDefinition) return context.Method.Name;
32+
33+
var count = context.Method.GetGenericArguments().Length;
34+
35+
return $"{context.Method.Name}`{count}";
36+
}
37+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using Issues.Attributes;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Threading.Tasks;
5+
6+
namespace Issues;
7+
8+
public class Issue110
9+
{
10+
public int X { get; set; } = 1;
11+
12+
public int Y { get; set; } = 2;
13+
14+
public int Z { get; set; } = 3;
15+
16+
[_110_]
17+
public IEnumerator Enumerator(List<string> logs)
18+
{
19+
yield return X;
20+
yield return Y;
21+
yield return Z;
22+
}
23+
24+
[_110_]
25+
public IEnumerator<int> GenericEnumerator(List<string> logs)
26+
{
27+
yield return X;
28+
yield return Y;
29+
yield return Z;
30+
}
31+
32+
[_110_]
33+
public IEnumerator<T> GenericEnumerator<T>(List<string> logs)
34+
{
35+
yield return default;
36+
}
37+
38+
[_110_]
39+
public IEnumerable Enumerable(List<string> logs)
40+
{
41+
yield return X;
42+
yield return Y;
43+
yield return Z;
44+
}
45+
46+
[_110_]
47+
public IEnumerable<int> GenericEnumerable(List<string> logs)
48+
{
49+
yield return X;
50+
yield return Y;
51+
yield return Z;
52+
}
53+
54+
[_110_]
55+
public IEnumerable<T> GenericEnumerable<T>(List<string> logs)
56+
{
57+
yield return default;
58+
}
59+
60+
[_110_]
61+
public async IAsyncEnumerator<int> EnumeratorAsync(List<string> logs)
62+
{
63+
await Task.Yield();
64+
yield return X;
65+
yield return Y;
66+
yield return Z;
67+
}
68+
69+
[_110_]
70+
public async IAsyncEnumerator<T> EnumeratorAsync<T>(List<string> logs)
71+
{
72+
await Task.Yield();
73+
yield return default;
74+
}
75+
76+
[_110_]
77+
public async IAsyncEnumerable<int> EnumerableAsync(List<string> logs)
78+
{
79+
await Task.Yield();
80+
yield return X;
81+
yield return Y;
82+
yield return Z;
83+
}
84+
85+
[_110_]
86+
public async IAsyncEnumerable<T> EnumerableAsync<T>(List<string> logs)
87+
{
88+
await Task.Yield();
89+
yield return default;
90+
}
91+
}

0 commit comments

Comments
 (0)