From e9119dd04cd630f2b2568b3b2e5655bbc0f5f0ea Mon Sep 17 00:00:00 2001 From: Reshetnikov Alexandr Date: Fri, 17 Feb 2023 21:07:05 +0400 Subject: [PATCH] fix + simple tests --- .../Serialization/DeserializerTest.cs | 37 +++++++++++++++++++ YamlDotNet/Core/MergingParser.cs | 3 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/YamlDotNet.Test/Serialization/DeserializerTest.cs b/YamlDotNet.Test/Serialization/DeserializerTest.cs index 7f851c265..642136481 100644 --- a/YamlDotNet.Test/Serialization/DeserializerTest.cs +++ b/YamlDotNet.Test/Serialization/DeserializerTest.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using FluentAssertions; using Xunit; @@ -331,6 +332,42 @@ public void DeserializeWithoutDuplicateKeyChecking_YamlWithDuplicateKeys_DoesNot act = () => sut.Deserialize>>(parser); act.ShouldNotThrow("Because duplicate key checking is not enabled"); } + + [Fact] + public void MergingParserWithMergeObjectWithSequence_ShouldNotThrowException() + { + var yaml = @" +base_level: &base + tenant: + - a1 +Level1: &Level1 + <<: [*base] +Level2: &Level2 + <<: *Level1 +"; + var mergingParserFailed = new MergingParser(new Parser(new StringReader(yaml))); + var deserializer = new DeserializerBuilder().Build(); + Action act = () => deserializer.Deserialize(mergingParserFailed); + act.ShouldNotThrow(); + } + + [Fact] + public void MergingParserWithNestedSequence_ShouldNotThrowException() + { + var yaml = @" +base_level: &base {} +Level1: &Level1 + <<: [*base] +Level2: &Level2 + <<: [*Level1] +Level3: + <<: *Level2 +"; + var mergingParserFailed = new MergingParser(new Parser(new StringReader(yaml))); + var deserializer = new DeserializerBuilder().Build(); + Action act = () => deserializer.Deserialize(mergingParserFailed); + act.ShouldNotThrow(); + } public class Test { diff --git a/YamlDotNet/Core/MergingParser.cs b/YamlDotNet/Core/MergingParser.cs index 2bde3d308..ae3e34e50 100644 --- a/YamlDotNet/Core/MergingParser.cs +++ b/YamlDotNet/Core/MergingParser.cs @@ -140,7 +140,8 @@ private bool HandleSequence(LinkedListNode node) var current = node; while (current != null) { - if (current.Value is SequenceEnd) + if (current.Value is SequenceEnd && + current.Value.Start.Line >= sequenceStart.Value.Start.Line) { events.MarkDeleted(current); return true;