6 changed files with 211 additions and 23 deletions
@ -0,0 +1,157 @@
@@ -0,0 +1,157 @@
|
||||
// Copyright (c) 2010 AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture] |
||||
public class ConversionsTest |
||||
{ |
||||
IProjectContent mscorlib = CecilLoaderTests.Mscorlib; |
||||
Conversions conversions = new Conversions(CecilLoaderTests.Mscorlib); |
||||
|
||||
bool ImplicitConversion(Type from, Type to) |
||||
{ |
||||
IType from2 = from.ToTypeReference().Resolve(mscorlib); |
||||
IType to2 = to.ToTypeReference().Resolve(mscorlib); |
||||
return conversions.ImplicitConversion(from2, to2); |
||||
} |
||||
|
||||
bool ImplicitConversion(Type from, IType to) |
||||
{ |
||||
IType from2 = from.ToTypeReference().Resolve(mscorlib); |
||||
return conversions.ImplicitConversion(from2, to); |
||||
} |
||||
|
||||
bool ImplicitConversion(IType from, Type to) |
||||
{ |
||||
IType to2 = to.ToTypeReference().Resolve(mscorlib); |
||||
return conversions.ImplicitConversion(from, to2); |
||||
} |
||||
|
||||
[Test] |
||||
public void IdentityConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(char), typeof(char))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(string), typeof(string))); |
||||
Assert.IsTrue(conversions.ImplicitConversion(SharedTypes.Dynamic, SharedTypes.Dynamic)); |
||||
Assert.IsTrue(conversions.ImplicitConversion(SharedTypes.UnknownType, SharedTypes.UnknownType)); |
||||
Assert.IsTrue(conversions.ImplicitConversion(SharedTypes.Null, SharedTypes.Null)); |
||||
} |
||||
|
||||
[Test] |
||||
public void PrimitiveConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(char), typeof(ushort))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(byte), typeof(char))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int), typeof(long))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(long), typeof(int))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int), typeof(float))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(bool), typeof(float))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(float), typeof(double))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(float), typeof(decimal))); |
||||
} |
||||
|
||||
[Test] |
||||
public void NullableConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(char), typeof(ushort?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(byte), typeof(char?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int), typeof(long?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(long), typeof(int?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int), typeof(float?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(bool), typeof(float?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(float), typeof(double?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(float), typeof(decimal?))); |
||||
} |
||||
|
||||
[Test] |
||||
public void NullableConversions2() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(char?), typeof(ushort?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(byte?), typeof(char?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int?), typeof(long?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(long?), typeof(int?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int?), typeof(float?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(bool?), typeof(float?))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(float?), typeof(double?))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(float?), typeof(decimal?))); |
||||
} |
||||
|
||||
[Test] |
||||
public void NullLiteralConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Null, typeof(int?))); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Null, typeof(char?))); |
||||
Assert.IsFalse(ImplicitConversion(SharedTypes.Null, typeof(int))); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Null, typeof(object))); |
||||
Assert.IsTrue(conversions.ImplicitConversion(SharedTypes.Null, SharedTypes.Dynamic)); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Null, typeof(string))); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Null, typeof(int[]))); |
||||
} |
||||
|
||||
[Test] |
||||
public void SimpleReferenceConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(string), typeof(object))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(BitArray), typeof(ICollection))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(IList), typeof(IEnumerable))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(object), typeof(string))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(ICollection), typeof(BitArray))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(IEnumerable), typeof(IList))); |
||||
} |
||||
|
||||
[Test] |
||||
public void SimpleDynamicConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(string), SharedTypes.Dynamic)); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Dynamic, typeof(string))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(int), SharedTypes.Dynamic)); |
||||
Assert.IsTrue(ImplicitConversion(SharedTypes.Dynamic, typeof(int))); |
||||
} |
||||
|
||||
[Test] |
||||
public void ArrayConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(string[]), typeof(object[]))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(string[,]), typeof(object[,]))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(string[]), typeof(object[,]))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(object[]), typeof(string[]))); |
||||
|
||||
Assert.IsTrue(ImplicitConversion(typeof(string[]), typeof(IList<string>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(string[,]), typeof(IList<string>))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(string[]), typeof(IList<object>))); |
||||
|
||||
Assert.IsTrue(ImplicitConversion(typeof(string[]), typeof(Array))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(string[]), typeof(ICloneable))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(Array), typeof(string[]))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(object), typeof(object[]))); |
||||
} |
||||
|
||||
[Test] |
||||
public void VarianceConversions() |
||||
{ |
||||
Assert.IsTrue(ImplicitConversion(typeof(List<string>), typeof(IEnumerable<object>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(List<object>), typeof(IEnumerable<string>))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(IEnumerable<string>), typeof(IEnumerable<object>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(ICollection<string>), typeof(ICollection<object>))); |
||||
|
||||
Assert.IsTrue(ImplicitConversion(typeof(Comparer<object>), typeof(IComparer<string>))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(Comparer<object>), typeof(IComparer<Array>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(Comparer<object>), typeof(Comparer<string>))); |
||||
|
||||
Assert.IsFalse(ImplicitConversion(typeof(List<object>), typeof(IEnumerable<string>))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(IEnumerable<string>), typeof(IEnumerable<object>))); |
||||
|
||||
Assert.IsTrue(ImplicitConversion(typeof(Func<ICollection, ICollection>), typeof(Func<IList, IEnumerable>))); |
||||
Assert.IsTrue(ImplicitConversion(typeof(Func<IEnumerable, IList>), typeof(Func<ICollection, ICollection>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(Func<ICollection, ICollection>), typeof(Func<IEnumerable, IList>))); |
||||
Assert.IsFalse(ImplicitConversion(typeof(Func<IList, IEnumerable>), typeof(Func<ICollection, ICollection>))); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue