Browse Source

[CodeAction] IterateViaForeachAction: Add tests for slightly invalid expression statements and use Script.InsertAfter() to avoid problematic formatting.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
4d602909ea
  1. 10
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/IterateViaForeachAction.cs
  2. 50
      ICSharpCode.NRefactory.Tests/CSharp/CodeActions/IterateViaForeachTests.cs

10
ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/IterateViaForeachAction.cs

@ -76,14 +76,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -76,14 +76,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return null;
return new CodeAction(context.TranslateString("Iterate via foreach"), script => {
var iterator = MakeForeach(expression.Clone(), context);
if (expression == expressionStatement.Expression) {
if (expression == expressionStatement.Expression)
script.Replace(expressionStatement, iterator);
} else {
script.InsertBefore(expressionStatement.NextSibling, iterator);
// Work around incorrect formatting when inserting relatively to
// a node on a different indentation level
script.FormatText(context.GetNode<BlockStatement>());
}
else
script.InsertAfter(expressionStatement, iterator);
});
}

50
ICSharpCode.NRefactory.Tests/CSharp/CodeActions/IterateViaForeachTests.cs

@ -124,6 +124,56 @@ class TestClass @@ -124,6 +124,56 @@ class TestClass
}");
}
[Test]
public void HandlesAsExpressionStatement()
{
Test<IterateViaForeachAction>(@"
using System.Collections.Generic;
class TestClass
{
public void F()
{
object s = """";
s as IEnumerable$<char>;
}
}", @"
using System.Collections.Generic;
class TestClass
{
public void F()
{
object s = """";
foreach (var item in s as IEnumerable<char>) {
}
}
}", 0, true);
}
[Test]
public void HandlesAsExpression()
{
Test<IterateViaForeachAction>(@"
using System.Collections.Generic;
class TestClass
{
public void F()
{
object s = """";
s as IEnumerable$<char>
}
}", @"
using System.Collections.Generic;
class TestClass
{
public void F()
{
object s = """";
foreach (var item in s as IEnumerable<char>) {
}
}
}", 0, true);
}
[Test]
public void HandlesLinqExpressionAssignment()
{

Loading…
Cancel
Save