Exemplo n.º 1
0
        public void IsAssignable_ReturnsTrueIfAncestorTypeImplementsInterface()
        {
            // Arrange
            var source      = @"
namespace TestApp
{
public interface ITestInterface
{
}

public class ITestInterfaceA : ITestInterface
{
}

public class ITestInterfaceB : ITestInterfaceA
{
}

public class TestClass : ITestInterfaceB
{
}";
            var compilation = TestCompilation.Create(source);
            var sourceType  = compilation.GetTypeByMetadataName("TestApp.ITestInterface");
            var target      = compilation.GetTypeByMetadataName("TestApp.TestClass");

            // Act
            var isAssignableFrom        = CodeAnalysisExtensions.IsAssignableFrom(sourceType, target);
            var isAssignableFromDerived = CodeAnalysisExtensions.IsAssignableFrom(target, sourceType);

            // Assert
            Assert.True(isAssignableFrom);
            Assert.False(isAssignableFromDerived); // Inverse shouldn't be true
        }
        public async Task IsAssignable_ReturnsTrue_IfSourceAndDestinationAreTheSameInterface()
        {
            // Arrange
            var compilation = await GetCompilation(nameof(IsAssignable_ReturnsTrueIfTypeImplementsInterface));

            var source = compilation.GetTypeByMetadataName(typeof(IsAssignable_ReturnsTrueIfTypeImplementsInterface).FullName);
            var target = compilation.GetTypeByMetadataName(typeof(IsAssignable_ReturnsTrueIfTypeImplementsInterface).FullName);

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(source, target);

            // Assert
            Assert.True(isAssignableFrom);
        }
        public async Task IsAssignable_ReturnsTrueIfTypesAreExact()
        {
            // Arrange
            var compilation = await GetCompilation();

            var source = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsTrueIfTypesAreExact");
            var target = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsTrueIfTypesAreExact");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(source, target);

            // Assert
            Assert.True(isAssignableFrom);
        }
        public async Task IsAssignable_ReturnsFalseIfTypeDoesNotImplementInterface()
        {
            // Arrange
            var compilation = await GetCompilation(nameof(IsAssignable_ReturnsFalseForDifferentTypes));

            var source = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsFalseForDifferentTypesA");
            var target = compilation.GetTypeByMetadataName($"System.IDisposable");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(source, target);

            // Assert
            Assert.False(isAssignableFrom);
        }
        public async Task IsAssignable_ReturnsFalseForDifferentTypes()
        {
            // Arrange
            var compilation = await GetCompilation();

            var source = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsFalseForDifferentTypesA");
            var target = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsFalseForDifferentTypesB");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(source, target);

            // Assert
            Assert.False(isAssignableFrom);
        }
        public async Task IsAssignable_ReturnsTrueIfAncestorTypeImplementsInterface()
        {
            // Arrange
            var compilation = await GetCompilation();

            var source = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsTrueIfAncestorTypeImplementsInterface");
            var target = compilation.GetTypeByMetadataName($"{Namespace}.IsAssignable_ReturnsTrueIfAncestorTypeImplementsInterfaceTest");

            // Act
            var isAssignableFrom        = CodeAnalysisExtensions.IsAssignableFrom(source, target);
            var isAssignableFromDerived = CodeAnalysisExtensions.IsAssignableFrom(target, source);

            // Assert
            Assert.True(isAssignableFrom);
            Assert.False(isAssignableFromDerived); // Inverse shouldn't be true
        }
Exemplo n.º 7
0
        public void IsAssignable_ReturnsTrue_IfSourceAndDestinationAreTheSameInterface()
        {
            // Arrange
            var source = @"
namespace TestApp
{
    public interface ITestInterface { }
}";

            var compilation = TestCompilation.Create(source);
            var sourceType  = compilation.GetTypeByMetadataName("TestApp.ITestInterface");
            var target      = compilation.GetTypeByMetadataName("TestApp.ITestInterface");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(sourceType, target);

            // Assert
            Assert.True(isAssignableFrom);
        }
Exemplo n.º 8
0
        public void IsAssignable_ReturnsTrueIfTypesAreExact()
        {
            // Arrange
            var source = @"
namespace TestApp
{
    public class TestType  {  }
}";

            var compilation = TestCompilation.Create(source);
            var sourceType  = compilation.GetTypeByMetadataName("TestApp.TestType");
            var target      = compilation.GetTypeByMetadataName("TestApp.TestType");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(sourceType, target);

            // Assert
            Assert.True(isAssignableFrom);
        }
Exemplo n.º 9
0
        public void IsAssignable_ReturnsFalseIfTypeDoesNotImplementInterface()
        {
            // Arrange
            var source = @"
namespace TestApp
{
    public class TypeA { }
}";

            var compilation = TestCompilation.Create(source);
            var sourceType  = compilation.GetTypeByMetadataName("TestApp.TypeA");
            var target      = compilation.GetTypeByMetadataName("System.IDisposable");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(sourceType, target);

            // Assert
            Assert.False(isAssignableFrom);
        }
Exemplo n.º 10
0
        public void IsAssignable_ReturnsFalseForDifferentTypes()
        {
            // Arrange
            var source = @"
namespace TestApp
{
    public class TypeA { }

    public class TypeB { }
}";

            var compilation = TestCompilation.Create(source);
            var sourceType  = compilation.GetTypeByMetadataName("TestApp.TypeA");
            var target      = compilation.GetTypeByMetadataName("TestApp.TypeB");

            // Act
            var isAssignableFrom = CodeAnalysisExtensions.IsAssignableFrom(sourceType, target);

            // Assert
            Assert.False(isAssignableFrom);
        }