Browse Source

More implicit conversion unit tests.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
e29ca30daf
  1. 84
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConversionsTest.cs

84
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ConversionsTest.cs

@ -1067,12 +1067,12 @@ class Program {
} }
[Test] [Test]
public void UserDefinedImplicitConversion_UseShortResult_X() public void UserDefinedImplicitConversion_Short_Or_NullableByte_Target()
{ {
string program = @"using System; string program = @"using System;
class Test { class Test {
public static implicit operator short(Test d) { return 0; } public static implicit operator short(Test s) { return 0; }
public static implicit operator byte?(Test d) { return 0; } public static implicit operator byte?(Test b) { return 0; }
} }
class Program { class Program {
public static void Main(string[] args) public static void Main(string[] args)
@ -1086,6 +1086,84 @@ class Program {
Assert.AreEqual("System.Int16", c.Method.ReturnType.FullName); Assert.AreEqual("System.Int16", c.Method.ReturnType.FullName);
} }
[Test]
public void UserDefinedImplicitConversion_Byte_Or_NullableShort_Target()
{
string program = @"using System;
class Test {
public static implicit operator byte(Test b) { return 0; }
public static implicit operator short?(Test s) { return 0; }
}
class Program {
public static void Main(string[] args)
{
int? x = $new Test()$;
}
}";
var c = GetConversion(program);
Assert.IsTrue(c.IsValid);
Assert.IsTrue(c.IsUserDefined);
Assert.AreEqual("s", c.Method.Parameters[0].Name);
}
[Test]
public void UserDefinedImplicitConversion_Int_Or_NullableLong_Source()
{
string program = @"using System;
class Test {
public static implicit operator Test(int i) { return new Test(); }
public static implicit operator Test(long? l) { return new Test(); }
}
class Program {
static void Main() {
short s = 0;
Test t = $s$;
}
}";
var c = GetConversion(program);
Assert.IsTrue(c.IsValid);
Assert.IsTrue(c.IsUserDefined);
Assert.AreEqual("i", c.Method.Parameters[0].Name);
}
[Test, Ignore("This is currently broken; not sure why csc sees this case as ambiguous (but not most others)")]
public void UserDefinedImplicitConversion_NullableInt_Or_Long_Source()
{
string program = @"using System;
class Test {
public static implicit operator Test(int? i) { return new Test(); }
public static implicit operator Test(long l) { return new Test(); }
}
class Program {
static void Main() {
short s = 0;
Test t = $s$;
}
}";
var c = GetConversion(program);
Assert.IsFalse(c.IsValid);
Assert.IsTrue(c.IsUserDefined);
}
[Test]
public void UserDefinedImplicitConversion_NullableInt_Or_NullableLong_Source()
{
string program = @"using System;
class Test {
public static implicit operator Test(int? i) { return new Test(); }
public static implicit operator Test(long? l) { return new Test(); }
}
class Program {
static void Main() {
short s = 0;
Test t = $s$;
}
}";
var c = GetConversion(program);
Assert.IsTrue(c.IsValid);
Assert.IsTrue(c.IsUserDefined);
Assert.AreEqual("i", c.Method.Parameters[0].Name);
}
[Test] [Test]
public void PreferUserDefinedConversionOverReferenceConversion() public void PreferUserDefinedConversionOverReferenceConversion()

Loading…
Cancel
Save