Skip to content

Commit 3f46c8c

Browse files
committed
Formatting multi-line member init values
1 parent 0f6d82d commit 3f46c8c

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

ReadableExpressions.UnitTests/WhenTranslatingObjectCreations.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,35 @@ public void ShouldTranslateANewExpressionWithASingleInitialisation()
5151
Assert.AreEqual("new MemoryStream { Position = 0L }", translated);
5252
}
5353

54+
[TestMethod]
55+
public void ShouldTranslateANewExpressionWithAMultiLineInitialisationValue()
56+
{
57+
Expression<Action> writeWat = () => Console.WriteLine("Wat");
58+
Expression<Func<long>> read = () => Console.Read();
59+
60+
var newMemoryStream = Expression.New(typeof(MemoryStream));
61+
var positionProperty = newMemoryStream.Type.GetProperty("Position");
62+
var valueBlock = Expression.Block(writeWat.Body, writeWat.Body, read.Body);
63+
// ReSharper disable once AssignNullToNotNullAttribute
64+
var positionInit = Expression.Bind(positionProperty, valueBlock);
65+
var memoryStreamInit = Expression.MemberInit(newMemoryStream, positionInit);
66+
67+
var translated = memoryStreamInit.ToReadableString();
68+
69+
const string EXPECTED = @"
70+
new MemoryStream
71+
{
72+
Position =
73+
{
74+
Console.WriteLine(""Wat"");
75+
Console.WriteLine(""Wat"");
76+
77+
return ((long)Console.Read());
78+
}
79+
}";
80+
Assert.AreEqual(EXPECTED.TrimStart(), translated);
81+
}
82+
5483
[TestMethod]
5584
public void ShouldTranslateANewExpressionWithMultipleInitialisations()
5685
{

ReadableExpressions/Translators/InitialisationExpressionTranslator.Helpers.Member.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private string[] GetInitialisations(IEnumerable<MemberBinding> memberBindings, T
4040
private static string TranslateAssignmentBinding(MemberBinding binding, TranslationContext context)
4141
{
4242
var assignment = (MemberAssignment)binding;
43-
var value = context.Translate(assignment.Expression);
43+
var value = context.TranslateAsCodeBlock(assignment.Expression);
4444

4545
return assignment.Member.Name + " = " + value;
4646
}

0 commit comments

Comments
 (0)