static TextWriter Wrap(TextWriter w, int indent = 2, int pageWidth = 80) { var wrap = new ActionTextWriter(line => { var words = Regex.Split(line, @"\s+"); int pos = 0; bool first = true; foreach (var word in words) { if (first) { first = false; } else if (pos == 0) { w.Write(new string(' ', indent)); pos = indent; } w.Write(word); w.Write(' '); pos += word.Length + 1; if (pos > pageWidth) { w.WriteLine(); pos = 0; } } if (pos != 0) { w.WriteLine(); } }); return(wrap); }
public void WriteGivenStringPerformsActionManyTimes() { string[] originals = { "First", "Second", "Third" }; var expected = string.Join(Environment.NewLine, originals); var actual = string.Empty; var actionTextWriter = new ActionTextWriter(value => actual += value); foreach (var original in originals) { actionTextWriter.WriteLine(original); } Assert.AreEqual(expected + Environment.NewLine, actual); }