Browse Source
Overriding abstract members now inserts "throw new NotImplementedException();" instead of a call to the base method. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2613 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
9 changed files with 177 additions and 40 deletions
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.Ast; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Dom.Refactoring; |
||||
using NUnit.Framework; |
||||
using System.Text; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests |
||||
{ |
||||
/// <summary>
|
||||
/// Description of GenerateOverrideMethod.
|
||||
/// </summary>
|
||||
[TestFixture] |
||||
public class GenerateOverrideMethodTests |
||||
{ |
||||
NRefactoryResolverTests helper = new NRefactoryResolverTests(); |
||||
|
||||
void Run(string input, string expectedOutput) |
||||
{ |
||||
ICompilationUnit cu = helper.Parse("a.cs", input + "\nclass DerivedClass {\n \n}"); |
||||
Assert.AreEqual(2, cu.Classes.Count); |
||||
Assert.AreEqual(1, cu.Classes[0].Methods.Count + cu.Classes[0].Properties.Count); |
||||
IMember virtualMember; |
||||
if (cu.Classes[0].Methods.Count > 0) |
||||
virtualMember = cu.Classes[0].Methods[0]; |
||||
else //if (cu.Classes[0].Properties.Count > 0)
|
||||
virtualMember = cu.Classes[0].Properties[0]; |
||||
CSharpCodeGenerator ccg = new CSharpCodeGenerator(); |
||||
AttributedNode result = ccg.GetOverridingMethod(virtualMember, new ClassFinder(cu.Classes[1], 3, 1)); |
||||
Assert.IsNotNull(result); |
||||
string output = ccg.GenerateCode(result, ""); |
||||
Assert.AreEqual(expectedOutput, NormalizeWhitespace(output)); |
||||
} |
||||
|
||||
string NormalizeWhitespace(string t) |
||||
{ |
||||
StringBuilder b = new StringBuilder(); |
||||
bool wasWhitespace = true; |
||||
foreach (char c in t) { |
||||
if (char.IsWhiteSpace(c)) { |
||||
if (!wasWhitespace) { |
||||
wasWhitespace = true; |
||||
b.Append(' '); |
||||
} |
||||
} else { |
||||
b.Append(c); |
||||
wasWhitespace = false; |
||||
} |
||||
} |
||||
return b.ToString().Trim(); |
||||
} |
||||
|
||||
[Test] |
||||
public void ReadonlyVirtualProperty() |
||||
{ |
||||
Run("class BaseClass { public virtual int Prop { get { return 0; } } }", |
||||
"public override int Prop { get { return base.Prop; } }"); |
||||
} |
||||
|
||||
[Test] |
||||
public void ReadonlyAbstractProperty() |
||||
{ |
||||
Run("class BaseClass { public abstract int Prop { get; } }", |
||||
"public override int Prop { get { throw new NotImplementedException(); } }"); |
||||
} |
||||
|
||||
[Test] |
||||
public void ReadWriteProperty() |
||||
{ |
||||
Run("class BaseClass { public virtual int Prop { get { return 0; } set { } } }", |
||||
"public override int Prop { get { return base.Prop; } set { base.Prop = value; } }"); |
||||
} |
||||
|
||||
[Test] |
||||
public void PublicReadProtectedWriteProperty() |
||||
{ |
||||
Run("class BaseClass { public virtual int Prop { get { return 0; } protected set { } } }", |
||||
"public override int Prop { get { return base.Prop; } protected set { base.Prop = value; } }"); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue