boost::iequals(value.str, "yes"));
}
+std::list<JSONFormattable> JSONFormattable::generate_test_instances() {
+ std::list<JSONFormattable> 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<JSONFormattable*>& 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 */
bool is_array() const { return type == FMT_ARRAY; }
-public:
- static std::list<JSONFormattable> generate_test_instances() {
- std::list<JSONFormattable> 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<JSONFormattable*>& 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 <typename> friend class DencoderBase;
+ static std::list<JSONFormattable> generate_test_instances();
+ static void generate_test_instances(std::list<JSONFormattable*>& 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;