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.
169 lines
3.0 KiB
169 lines
3.0 KiB
using NUnit.Framework; |
|
using ICSharpCode.NRefactory.CSharp.CodeIssues; |
|
using ICSharpCode.NRefactory.CSharp.Refactoring; |
|
using ICSharpCode.NRefactory.CSharp.CodeActions; |
|
using System.Linq; |
|
|
|
namespace ICSharpCode.NRefactory.CSharp.CodeIssues |
|
{ |
|
[TestFixture] |
|
public class NoDefaultConstructorIssueTests : InspectionActionTestBase |
|
{ |
|
[Test] |
|
public void ShouldReturnIssueIfBaseConstructorNotInvoked() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
public BaseClass(string input) {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 1); |
|
} |
|
|
|
[Test] |
|
public void ShouldNotReturnIssueIfBaseClassHasDefaultConstructor() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 0); |
|
} |
|
|
|
[Test] |
|
public void ShouldNotReturnIssueIfBaseConstructorIsInvoked() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
public BaseClass(string input) {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
public ChildClass() : base(""test"") {} |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 0); |
|
} |
|
|
|
[Test] |
|
public void ShouldReturnIssueIfInvalidArgumentsArePassedToBaseConstructor() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
public BaseClass(string input) {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
public ChildClass() : base(123) {} |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 1); |
|
} |
|
|
|
[Test] |
|
public void ShouldIgnoreInterfaces() |
|
{ |
|
var testInput = |
|
@"class TestClass : System.Collections.IList |
|
{ |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 0); |
|
} |
|
|
|
[Test] |
|
public void ShouldMakeSureAllConstructorsInvokeBaseConstructor() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
public BaseClass(string test) {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
public ChildClass() : base(""test"") {} |
|
public ChildClass(string test) {} |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 1); |
|
} |
|
|
|
[Test] |
|
public void ShouldOnlyLookAtDirectBaseClasses() |
|
{ |
|
var testInput = |
|
@"class TopLevelClass |
|
{ |
|
public TopLevelClass(string test) {} |
|
} |
|
|
|
class BaseClass : TopLevelClass |
|
{ |
|
public BaseClass() : base(""hello"") {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 0); |
|
} |
|
|
|
[Test] |
|
public void ShouldReturnAnIssueIfBaseConstructorIsPrivate() |
|
{ |
|
var testInput = |
|
@"class BaseClass |
|
{ |
|
private BaseClass() {} |
|
} |
|
|
|
class ChildClass : BaseClass |
|
{ |
|
}"; |
|
|
|
Test<NoDefaultConstructorIssue>(testInput, 1); |
|
} |
|
|
|
[Test] |
|
public void ShouldReturnIssuesForNestedTypes() |
|
{ |
|
TestRefactoringContext context; |
|
|
|
var testInput = |
|
@"class B { |
|
public B(string test) {} |
|
} |
|
|
|
class D { |
|
public D(string test) {} |
|
} |
|
|
|
class A : B { |
|
class C : D {} |
|
public A() {} |
|
}"; |
|
|
|
var issues = GetIssues(new NoDefaultConstructorIssue(), testInput, out context, false); |
|
|
|
Assert.AreEqual("CS1729: The type 'B' does not contain a constructor that takes '0' arguments", issues.ElementAt(1).Description); |
|
Assert.AreEqual("CS1729: The type 'D' does not contain a constructor that takes '0' arguments", issues.ElementAt(0).Description); |
|
} |
|
} |
|
} |
|
|
|
|