-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathGenericAutoInterfaceTests.cs
More file actions
49 lines (41 loc) · 1.66 KB
/
Copy pathGenericAutoInterfaceTests.cs
File metadata and controls
49 lines (41 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Reflection;
using FluentAssertions;
using Xunit;
namespace InterfaceGenerator.Tests;
public class GenericAutoInterfaceTests
{
[Fact]
public void GenericParametersGeneratedCorrectly()
{
var t = typeof(IGenericAutoInterfaceTestsService<,>);
var genericArgs = t.GetGenericArguments();
genericArgs.Should().HaveCount(2);
genericArgs[0].Name.Should().Be("TX");
genericArgs[1].Name.Should().Be("TY");
genericArgs[0].IsClass.Should().BeTrue();
genericArgs[0]
.GenericParameterAttributes
.Should()
.HaveFlag(GenericParameterAttributes.DefaultConstructorConstraint);
var iEquatableOfTx = typeof(IEquatable<>).MakeGenericType(genericArgs[0]);
genericArgs[0].GetGenericParameterConstraints().Should().HaveCount(1).And.Contain(iEquatableOfTx);
genericArgs[1].IsValueType.Should().BeTrue();
// base
var interfaces = t.GetInterfaces();
interfaces.Should().HaveCount(2);
interfaces[0].Name.Should().Be(typeof(IAutoInterface<>).Name);
interfaces[1].Name.Should().Be(typeof(IAutoInterface).Name);
var interfaceGenericArgs = interfaces[0].GetGenericArguments();
interfaceGenericArgs.Should().HaveCount(1);
interfaceGenericArgs[0].Name.Should().Be(typeof(GenericAutoInterfaceTestsService<,>).Name);
}
}
[GenerateGenericAutoInterface]
// ReSharper disable once UnusedType.Global
public class GenericAutoInterfaceTestsService<TX, TY> : IGenericAutoInterfaceTestsService<TX, TY>
where TX : class, IEquatable<TX>, new ()
where TY : struct
{
public string A { get; set; }
}