public void ReturnsTrue_When_HasNoConstraints() { IArrayTypeSymbol type = GetSymbol(); Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>()); Assert.True(type.IsValidForTypeParameter(parameter.Object)); }
public void ThrowsArgumentNullException_When_ArrayTypelIsNull() { IArrayTypeSymbol type = null !; Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>()); Assert.Throws <ArgumentNullException>(() => type.IsValidForTypeParameter(parameter.Object)); }
public void ReturnsFalse_When_DoesNotInheritFromConstrainedType() { IArrayTypeSymbol type = GetSymbol(); Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>(Compilation.CurrentCompilation.GetTypeByMetadataName("System.Collections.ArrayList") !)); Assert.False(type.IsValidForTypeParameter(parameter.Object)); }
public void ReturnsFalse_When_HasUnmanagedConstraint() { IArrayTypeSymbol type = GetSymbol(); Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>()); parameter.SetupGet(p => p.HasUnmanagedTypeConstraint).Returns(true); Assert.False(type.IsValidForTypeParameter(parameter.Object)); }
public void ReturnsTrue_When_InheritFromConstraintType_And_ParameterIsConstrainedToNullable() { IArrayTypeSymbol type = GetSymbol(); Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>(Compilation.CurrentCompilation.GetTypeByMetadataName("System.Collections.IList") !)); parameter.SetupGet(p => p.ConstraintNullableAnnotations).Returns(ImmutableArray.Create(NullableAnnotation.Annotated)); Assert.True(type.IsValidForTypeParameter(parameter.Object)); }
public void ReturnsTrue_When_HasNullableReferenceTypeConstraint() { IArrayTypeSymbol type = GetSymbol(); Mock <ITypeParameterSymbol> parameter = new(); parameter.SetupGet(p => p.Name).Returns("T"); parameter.SetupGet(p => p.ConstraintTypes).Returns(ImmutableArray.Create <ITypeSymbol>()); parameter.SetupGet(p => p.HasReferenceTypeConstraint).Returns(true); parameter.SetupGet(p => p.ReferenceTypeConstraintNullableAnnotation).Returns(NullableAnnotation.Annotated); Assert.True(type.IsValidForTypeParameter(parameter.Object)); }