ensuring local tags are retained after loading a node + test

This commit is contained in:
IMaloney
2024-10-12 16:03:37 -04:00
committed by Jesse Beder
parent f878043f12
commit 1da813f56a
2 changed files with 18 additions and 2 deletions

View File

@@ -116,8 +116,13 @@ void EmitFromEvents::BeginNode() {
}
void EmitFromEvents::EmitProps(const std::string& tag, anchor_t anchor) {
if (!tag.empty() && tag != "?" && tag != "!")
m_emitter << VerbatimTag(tag);
if (!tag.empty() && tag != "?" && tag != "!"){
if (tag[0] == '!') {
m_emitter << LocalTag(std::string(tag.begin()+1, tag.end()));
} else {
m_emitter << VerbatimTag(tag);
}
}
if (anchor)
m_emitter << Anchor(ToString(anchor));
}

View File

@@ -629,6 +629,17 @@ TEST_F(EmitterTest, LocalTagWithScalar) {
ExpectEmit("!foo bar");
}
TEST_F(EmitterTest, LocalTagRetainedAfterLoadingNode) {
Node n = Node("hello");
out << LocalTag("foo") << n;
std::string expected = "!foo hello";
ExpectEmit(expected);
Node yamlNode = Load(out.c_str());
Emitter emitter;
emitter << yamlNode;
EXPECT_EQ(expected, emitter.c_str());
}
TEST_F(EmitterTest, ComplexDoc) {
out << BeginMap;
out << Key << "receipt";