diff options
author | robot-piglet <[email protected]> | 2025-05-12 15:37:16 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-05-12 15:47:58 +0300 |
commit | 76d726807912081a8f4539bf96243567333e376c (patch) | |
tree | f90066152e8e4673b1126c4419a912baf0557530 | |
parent | 19059a3158ec26dc228a8b220a93f64f8bb7f473 (diff) |
Intermediate changes
commit_hash:997ca0ebed62643660cf78acb0eee2d8049a38ee
-rw-r--r-- | yt/yt/core/ytree/unittests/yson_struct_ut.cpp | 53 |
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 |