diff --git a/src/emitter.cpp b/src/emitter.cpp index 644b312..4d48307 100644 --- a/src/emitter.cpp +++ b/src/emitter.cpp @@ -533,7 +533,8 @@ void Emitter::BlockMapPrepareNode(EmitterNodeType::value child) { if (m_pState->GetMapKeyFormat() == LongKey) m_pState->SetLongKey(); if (child == EmitterNodeType::BlockSeq || - child == EmitterNodeType::BlockMap) + child == EmitterNodeType::BlockMap || + child == EmitterNodeType::Property) m_pState->SetLongKey(); if (m_pState->CurGroupLongKey()) diff --git a/test/integration/emitter_test.cpp b/test/integration/emitter_test.cpp index 53407c9..b277d57 100644 --- a/test/integration/emitter_test.cpp +++ b/test/integration/emitter_test.cpp @@ -431,6 +431,38 @@ TEST_F(EmitterTest, BlockMapAsKey) { ExpectEmit("? key: value\n next key: next value\n: total value"); } +TEST_F(EmitterTest, TaggedBlockMapAsKey) { + out << BeginMap; + out << Key; + out << LocalTag("innerMap"); + out << BeginMap; + out << Key << "key" << Value << "value"; + out << EndMap; + out << Value; + out << "outerValue"; + out << EndMap; + + ExpectEmit(R"(? !innerMap + key: value +: outerValue)"); +} + +TEST_F(EmitterTest, TaggedBlockListAsKey) { + out << BeginMap; + out << Key; + out << LocalTag("innerList"); + out << BeginSeq; + out << "listItem"; + out << EndSeq; + out << Value; + out << "outerValue"; + out << EndMap; + + ExpectEmit(R"(? !innerList + - listItem +: outerValue)"); +} + TEST_F(EmitterTest, AliasAndAnchor) { out << BeginSeq; out << Anchor("fred"); @@ -520,7 +552,7 @@ TEST_F(EmitterTest, VerbatimTagInBlockMap) { out << Value << VerbatimTag("!waz") << "baz"; out << EndMap; - ExpectEmit("! bar: ! baz"); + ExpectEmit("? ! bar\n: ! baz"); } TEST_F(EmitterTest, VerbatimTagInFlowMap) {