From: Jesse F. Williamson Date: Wed, 14 Jan 2026 23:17:43 +0000 (-0800) Subject: Hide intrusive tests from public interface. X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f17a834535013b54ec8cb337473f8ebca48baed4;p=ceph-ci.git Hide intrusive tests from public interface. Signed-off-by: Jesse F. Williamson --- diff --git a/src/common/ceph_json.cc b/src/common/ceph_json.cc index e68a68a182d..83fa8bdec34 100644 --- a/src/common/ceph_json.cc +++ b/src/common/ceph_json.cc @@ -175,6 +175,65 @@ bool JSONFormattable::val_bool() const { boost::iequals(value.str, "yes")); } +std::list JSONFormattable::generate_test_instances() { + std::list o; + o.emplace_back(); + o.emplace_back(); + o.back().set_type(FMT_VALUE); + o.back().value.str = "foo"; + o.back().value.quoted = true; + o.emplace_back(); + o.back().set_type(FMT_VALUE); + o.back().value.str = "foo"; + o.back().value.quoted = false; + o.emplace_back(); + o.back().set_type(FMT_ARRAY); + o.back().arr.push_back(JSONFormattable()); + o.back().arr.back().set_type(FMT_VALUE); + o.back().arr.back().value.str = "foo"; + o.back().arr.back().value.quoted = true; + o.back().arr.push_back(JSONFormattable()); + o.back().arr.back().set_type(FMT_VALUE); + o.back().arr.back().value.str = "bar"; + o.back().arr.back().value.quoted = true; + o.emplace_back(); + o.back().set_type(FMT_OBJ); + o.back().obj["foo"] = JSONFormattable(); + o.back().obj["foo"].set_type(FMT_VALUE); + o.back().obj["foo"].value.str = "bar"; + o.back().obj["foo"].value.quoted = true; + return o; + } + +void JSONFormattable::generate_test_instances(std::list& o) { + o.push_back(new JSONFormattable); + o.push_back(new JSONFormattable); + o.back()->set_type(FMT_VALUE); + o.back()->value.str = "foo"; + o.back()->value.quoted = true; + o.push_back(new JSONFormattable); + o.back()->set_type(FMT_VALUE); + o.back()->value.str = "foo"; + o.back()->value.quoted = false; + o.push_back(new JSONFormattable); + o.back()->set_type(FMT_ARRAY); + o.back()->arr.push_back(JSONFormattable()); + o.back()->arr.back().set_type(FMT_VALUE); + o.back()->arr.back().value.str = "foo"; + o.back()->arr.back().value.quoted = true; + o.back()->arr.push_back(JSONFormattable()); + o.back()->arr.back().set_type(FMT_VALUE); + o.back()->arr.back().value.str = "bar"; + o.back()->arr.back().value.quoted = true; + o.push_back(new JSONFormattable); + o.back()->set_type(FMT_OBJ); + o.back()->obj["foo"] = JSONFormattable(); + o.back()->obj["foo"].set_type(FMT_VALUE); + o.back()->obj["foo"].value.str = "bar"; + o.back()->obj["foo"].value.quoted = true; + } + + struct field_entity { bool is_obj{false}; /* either obj field or array entity */ string name; /* if obj */ diff --git a/src/common/ceph_json.h b/src/common/ceph_json.h index 567ceebb316..4d90d789d4b 100644 --- a/src/common/ceph_json.h +++ b/src/common/ceph_json.h @@ -1039,69 +1039,17 @@ public: bool is_array() const { return type == FMT_ARRAY; } -public: - static std::list generate_test_instances() { - std::list o; - o.emplace_back(); - o.emplace_back(); - o.back().set_type(FMT_VALUE); - o.back().value.str = "foo"; - o.back().value.quoted = true; - o.emplace_back(); - o.back().set_type(FMT_VALUE); - o.back().value.str = "foo"; - o.back().value.quoted = false; - o.emplace_back(); - o.back().set_type(FMT_ARRAY); - o.back().arr.push_back(JSONFormattable()); - o.back().arr.back().set_type(FMT_VALUE); - o.back().arr.back().value.str = "foo"; - o.back().arr.back().value.quoted = true; - o.back().arr.push_back(JSONFormattable()); - o.back().arr.back().set_type(FMT_VALUE); - o.back().arr.back().value.str = "bar"; - o.back().arr.back().value.quoted = true; - o.emplace_back(); - o.back().set_type(FMT_OBJ); - o.back().obj["foo"] = JSONFormattable(); - o.back().obj["foo"].set_type(FMT_VALUE); - o.back().obj["foo"].value.str = "bar"; - o.back().obj["foo"].value.quoted = true; - return o; - } - - static void generate_test_instances(std::list& o) { - o.push_back(new JSONFormattable); - o.push_back(new JSONFormattable); - o.back()->set_type(FMT_VALUE); - o.back()->value.str = "foo"; - o.back()->value.quoted = true; - o.push_back(new JSONFormattable); - o.back()->set_type(FMT_VALUE); - o.back()->value.str = "foo"; - o.back()->value.quoted = false; - o.push_back(new JSONFormattable); - o.back()->set_type(FMT_ARRAY); - o.back()->arr.push_back(JSONFormattable()); - o.back()->arr.back().set_type(FMT_VALUE); - o.back()->arr.back().value.str = "foo"; - o.back()->arr.back().value.quoted = true; - o.back()->arr.push_back(JSONFormattable()); - o.back()->arr.back().set_type(FMT_VALUE); - o.back()->arr.back().value.str = "bar"; - o.back()->arr.back().value.quoted = true; - o.push_back(new JSONFormattable); - o.back()->set_type(FMT_OBJ); - o.back()->obj["foo"] = JSONFormattable(); - o.back()->obj["foo"].set_type(FMT_VALUE); - o.back()->obj["foo"].value.str = "bar"; - o.back()->obj["foo"].value.quoted = true; - } + // Intrusive test support: + private: + template friend class DencoderBase; + static std::list generate_test_instances(); + static void generate_test_instances(std::list& o); }; WRITE_CLASS_ENCODER(JSONFormattable) static inline JSONFormattable default_formattable; +// Note that this does NOT have the same semantics as an STL container: inline JSONFormattable& JSONFormattable::operator[](const std::string& name) { if (const auto i = obj.find(name); end(obj) != i) return i->second;