コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }