fix issue752: generate right long keys

This commit is contained in:
dota17 2020-06-09 16:40:37 +08:00
parent d9c35b6079
commit f69ca7987c
2 changed files with 38 additions and 0 deletions

View File

@ -556,6 +556,8 @@ void Emitter::BlockMapPrepareLongKey(EmitterNodeType::value child) {
break;
case EmitterNodeType::BlockSeq:
case EmitterNodeType::BlockMap:
if (m_pState->HasBegunContent())
m_stream << "\n";
break;
}
}
@ -579,8 +581,12 @@ void Emitter::BlockMapPrepareLongKeyValue(EmitterNodeType::value child) {
case EmitterNodeType::Scalar:
case EmitterNodeType::FlowSeq:
case EmitterNodeType::FlowMap:
SpaceOrIndentTo(true, curIndent + 1);
break;
case EmitterNodeType::BlockSeq:
case EmitterNodeType::BlockMap:
if (m_pState->HasBegunContent())
m_stream << "\n";
SpaceOrIndentTo(true, curIndent + 1);
break;
}

View File

@ -612,6 +612,38 @@ TEST_F(EmitterTest, SimpleGlobalSettings) {
ExpectEmit("- ? key 1\n : value 1\n ? key 2\n : [a, b, c]");
}
TEST_F(EmitterTest, GlobalLongKeyOnSeq) {
out.SetMapFormat(LongKey);
out << BeginMap;
out << Key << Anchor("key");
out << BeginSeq << "a"
<< "b" << EndSeq;
out << Value << Anchor("value");
out << BeginSeq << "c"
<< "d" << EndSeq;
out << Key << Alias("key") << Value << Alias("value");
out << EndMap;
ExpectEmit("? &key\n - a\n - b\n: &value\n - c\n - d\n? *key\n: *value");
}
TEST_F(EmitterTest, GlobalLongKeyOnMap) {
out.SetMapFormat(LongKey);
out << BeginMap;
out << Key << Anchor("key");
out << BeginMap << "a"
<< "b" << EndMap;
out << Value << Anchor("value");
out << BeginMap << "c"
<< "d" << EndMap;
out << Key << Alias("key") << Value << Alias("value");
out << EndMap;
ExpectEmit("? &key\n ? a\n : b\n: &value\n ? c\n : d\n? *key\n: *value");
}
TEST_F(EmitterTest, ComplexGlobalSettings) {
out << BeginSeq;
out << Block;