#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

241 lines
3.6 KiB

using System.Linq;
using ICSharpCode.NRefactory.CSharp.Refactoring;
using NUnit.Framework;
using ICSharpCode.NRefactory.CSharp.CodeActions;
namespace ICSharpCode.NRefactory.CSharp.CodeIssues
{
[TestFixture]
public class CS0029InvalidConversionIssueTests : InspectionActionTestBase
{
[Test]
public void TestConversion()
{
var input = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x;
x = i;
}
}";
var output = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x;
x = (int)i;
}
}";
Test<CS0029InvalidConversionIssue>(input, output);
}
[Test]
public void TestConversionInInitializer()
{
var input = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x = i;
}
}";
var output = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x = (int)i;
}
}";
Test<CS0029InvalidConversionIssue>(input, output);
}
[Test]
public void TestClassConversion()
{
var input = @"
class Base {}
class Test: Base {}
class TestClass
{
void TestMethod (Test i)
{
Base x;
x = i;
}
}";
Test<CS0029InvalidConversionIssue>(input, 0);
}
[Test]
public void TestConversionDoubleFloat()
{
var input = @"
class Foo
{
void Bar () {
double c = 3.5;
float fc;
fc = c;
}
}";
var output = @"
class Foo
{
void Bar () {
double c = 3.5;
float fc;
fc = (float)c;
}
}";
Test<CS0029InvalidConversionIssue>(input, output);
}
[Test]
public void TestConversionEnumToInt()
{
var input = @"
class Foo
{
enum Enum { Zero }
void Bar () {
var e = Enum.Zero;
int val;
val = e;
}
}";
var output = @"
class Foo
{
enum Enum { Zero }
void Bar () {
var e = Enum.Zero;
int val;
val = (int)e;
}
}";
Test<CS0029InvalidConversionIssue>(input, output);
}
[Test]
public void TestConversionSameType()
{
var input = @"
class TestClass
{
void TestMethod ()
{
int x =0;
int y = 1;
$x = i;
}
}";
Test<CS0029InvalidConversionIssue>(input, 0);
}
[Test]
public void TestUserDefinedAddition()
{
var input = @"
struct Vector {
public static explicit operator Point(Vector v) { return new Point(); }
}
struct Point {
public static Point operator +(Point p, Vector v) { return new Point(); }
}
class TestClass
{
void TestMethod ()
{
Point p = new Point();
$p += new Vector();
}
}";
Test<CS0029InvalidConversionIssue>(input, 0);
}
[Test]
public void TestImplicitOperator()
{
var input = @"
struct Vector {
public static implicit operator Point(Vector v) { return new Point(); }
}
struct Point {
}
class TestClass
{
void TestMethod ()
{
Point p;
p = new Vector ();
}
}";
Test<CS0029InvalidConversionIssue>(input, 0);
}
[Test]
public void TestAssignZeroToEnum()
{
var input = @"using System;
class TestClass
{
void TestMethod ()
{
StringComparison c = 0;
c = 0;
}
}";
Test<CS0029InvalidConversionIssue>(input, 0);
}
[Test]
public void AssignCustomClassToString()
{
var input = @"
class TestClass
{
void TestMethod ()
{
string x = this;
}
}";
TestRefactoringContext context;
var issues = GetIssues (new CS0029InvalidConversionIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
Assert.IsFalse(issues[0].Actions.Any());
}
/// <summary>
/// Bug 12490 - Cast warnings with literals
/// </summary>
[Test]
public void TestBug12490()
{
var input = @"
class TestClass
{
void TestMethod ()
{
uint t;
t = 6;
}
}";
TestRefactoringContext context;
var issues = GetIssues (new CS0029InvalidConversionIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
}
}