using NUnit.Framework; using ICSharpCode.NRefactory.CSharp.CodeIssues; using ICSharpCode.NRefactory.CSharp.Refactoring; 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(testInput, 1); } [Test] public void ShouldNotReturnIssueIfBaseClassHasDefaultConstructor() { var testInput = @"class BaseClass { } class ChildClass : BaseClass { }"; Test(testInput, 0); } [Test] public void ShouldNotReturnIssueIfBaseConstructorIsInvoked() { var testInput = @"class BaseClass { public BaseClass(string input) {} } class ChildClass : BaseClass { public ChildClass() : base(""test"") {} }"; Test(testInput, 0); } [Test] public void ShouldReturnIssueIfInvalidArgumentsArePassedToBaseConstructor() { var testInput = @"class BaseClass { public BaseClass(string input) {} } class ChildClass : BaseClass { public ChildClass() : base(123) {} }"; Test(testInput, 1); } [Test] public void ShouldIgnoreInterfaces() { var testInput = @"class TestClass : System.Collections.IList { }"; Test(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(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(testInput, 0); } [Test] public void ShouldReturnAnIssueIfBaseConstructorIsPrivate() { var testInput = @"class BaseClass { private BaseClass() {} } class ChildClass : BaseClass { }"; Test(testInput, 1); } } }