Fix lost characters when emitting folded scalars with carriage returns.

This commit is contained in:
Antoine Aubry 2013-07-03 15:14:38 +01:00
Родитель 9a6d64ec45
Коммит 7d1dea8a23
2 изменённых файлов: 30 добавлений и 7 удалений

Просмотреть файл

@ -1131,10 +1131,10 @@ namespace YamlDotNet.Core
{ {
if (!previous_break && !leadingSpaces && character == '\n') if (!previous_break && !leadingSpaces && character == '\n')
{ {
do while ((i + 1) < value.Length && IsBreak(value[i + 1]))
{ {
++i; ++i;
} while (i < value.Length && IsBreak(value[i])); };
if (i >= value.Length || value[i] != ' ') if (i >= value.Length || value[i] != ' ')
{ {

Просмотреть файл

@ -19,11 +19,12 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Xunit; using Xunit;
using YamlDotNet.Core; using Xunit.Extensions;
using YamlDotNet.Core;
using YamlDotNet.Core.Events; using YamlDotNet.Core.Events;
namespace YamlDotNet.UnitTests namespace YamlDotNet.UnitTests
@ -169,6 +170,28 @@ namespace YamlDotNet.UnitTests
public void EmitExample14() public void EmitExample14()
{ {
ParseAndEmit("test14.yaml"); ParseAndEmit("test14.yaml");
}
[Theory]
[InlineData("LF hello\nworld")]
[InlineData("CRLF hello\r\nworld")]
public void FoldedStyleDoesNotLooseCharacters(string text)
{
var buffer = new StringWriter();
var emitter = new Emitter(buffer);
emitter.Emit(new StreamStart());
emitter.Emit(new DocumentStart(null, null, true));
emitter.Emit(new SequenceStart(null, null, false, SequenceStyle.Block));
emitter.Emit(new Scalar(null, null, text, ScalarStyle.Folded, true, false));
emitter.Emit(new SequenceEnd());
emitter.Emit(new DocumentEnd(true));
emitter.Emit(new StreamEnd());
var yaml = buffer.ToString();
Console.WriteLine(yaml);
Assert.True(yaml.Contains("world"));
} }
} }
} }