summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-05-12 15:37:16 +0300
committerrobot-piglet <[email protected]>2025-05-12 15:47:58 +0300
commit76d726807912081a8f4539bf96243567333e376c (patch)
treef90066152e8e4673b1126c4419a912baf0557530
parent19059a3158ec26dc228a8b220a93f64f8bb7f473 (diff)
Intermediate changes
commit_hash:997ca0ebed62643660cf78acb0eee2d8049a38ee
-rw-r--r--yt/yt/core/ytree/unittests/yson_struct_ut.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/yt/yt/core/ytree/unittests/yson_struct_ut.cpp b/yt/yt/core/ytree/unittests/yson_struct_ut.cpp
index b720c885e95..aaed3fd853b 100644
--- a/yt/yt/core/ytree/unittests/yson_struct_ut.cpp
+++ b/yt/yt/core/ytree/unittests/yson_struct_ut.cpp
@@ -377,6 +377,59 @@ TEST_P(TYsonStructParseTest, UnrecognizedSimple)
EXPECT_TRUE(AreNodesEqual(ConvertToNode(config), ConvertToNode(deserializedConfig)));
}
+////////////////////////////////////////////////////////////////////////////////
+
+class TSimpleStructKeepUnrecognized
+ : public TYsonStruct
+{
+public:
+ int Value;
+
+ REGISTER_YSON_STRUCT(TSimpleStructKeepUnrecognized);
+
+ static void Register(TRegistrar registrar)
+ {
+ registrar.UnrecognizedStrategy(EUnrecognizedStrategy::KeepRecursive);
+
+ registrar.Parameter("value", &TSimpleStructKeepUnrecognized::Value)
+ .Default(1);
+ }
+};
+
+TEST_P(TYsonStructParseTest, UnrecognizedSorted)
+{
+ auto configNode = BuildYsonNodeFluently()
+ .BeginMap()
+ .Item("value_unrecognized").Value(42)
+ .Item("unrecognized").Value("TestString")
+ .Item("value").Value(1337)
+ .Item("a_unrecognized").Value("TestString")
+ .EndMap();
+
+ auto config = Load<TSimpleStructKeepUnrecognized>(configNode->AsMap());
+
+ auto unrecognizedNode = config->GetLocalUnrecognized();
+ auto unrecognizedRecursivelyNode = config->GetRecursiveUnrecognized();
+ EXPECT_TRUE(AreNodesEqual(unrecognizedNode, unrecognizedRecursivelyNode));
+ EXPECT_EQ(3, unrecognizedNode->GetChildCount());
+
+ TString expectedYson;
+ expectedYson += "{\"a_unrecognized\"=\"TestString\";";
+ expectedYson += "\"value\"=1337;";
+ expectedYson += "\"value_unrecognized\"=42;";
+ expectedYson += "\"unrecognized\"=\"TestString\";}";
+
+ auto output = ConvertToYsonString(config, NYson::EYsonFormat::Text);
+
+ EXPECT_TRUE(AreNodesEqual(
+ ConvertToNode(TYsonString(expectedYson)),
+ ConvertToNode(TYsonString(output.AsStringBuf()))))
+ << "Expected: " << expectedYson
+ << ", got: " << output.AsStringBuf();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
template <EUnrecognizedStrategy strategy>
class TThrowOnUnrecognized
: public TYsonStruct