Blender  V3.3
BLI_serialize_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "BLI_serialize.hh"
6 
7 /* -------------------------------------------------------------------- */
8 /* tests */
9 
11 
12 TEST(serialize, string_to_json)
13 {
14  JsonFormatter json;
15  std::stringstream out;
16  StringValue test_value("Hello JSON");
17  json.serialize(out, test_value);
18  EXPECT_EQ(out.str(), "\"Hello JSON\"");
19 }
20 
21 static void test_int_to_json(int64_t value, StringRef expected)
22 {
23  JsonFormatter json;
24  std::stringstream out;
25  IntValue test_value(value);
26  json.serialize(out, test_value);
27  EXPECT_EQ(out.str(), expected);
28 }
29 
30 TEST(serialize, int_to_json)
31 {
32  test_int_to_json(42, "42");
33  test_int_to_json(-42, "-42");
36  test_int_to_json(std::numeric_limits<int64_t>::max(), "9223372036854775807");
37  test_int_to_json(std::numeric_limits<int64_t>::min(), "-9223372036854775808");
38 }
39 
40 TEST(serialize, double_to_json)
41 {
42  JsonFormatter json;
43  std::stringstream out;
44  DoubleValue test_value(42.31);
45  json.serialize(out, test_value);
46  EXPECT_EQ(out.str(), "42.31");
47 }
48 
49 TEST(serialize, null_to_json)
50 {
51  JsonFormatter json;
52  std::stringstream out;
53  NullValue test_value;
54  json.serialize(out, test_value);
55  EXPECT_EQ(out.str(), "null");
56 }
57 
58 TEST(serialize, false_to_json)
59 {
60  JsonFormatter json;
61  std::stringstream out;
62  BooleanValue value(false);
63  json.serialize(out, value);
64  EXPECT_EQ(out.str(), "false");
65 }
66 
67 TEST(serialize, true_to_json)
68 {
69  JsonFormatter json;
70  std::stringstream out;
71  BooleanValue value(true);
72  json.serialize(out, value);
73  EXPECT_EQ(out.str(), "true");
74 }
75 
76 TEST(serialize, array_to_json)
77 {
78  JsonFormatter json;
79  std::stringstream out;
80  ArrayValue value_array;
81  ArrayValue::Items &array = value_array.elements();
82  array.append_as(new IntValue(42));
83  array.append_as(new StringValue("Hello JSON"));
84  array.append_as(new NullValue);
85  array.append_as(new BooleanValue(false));
86  array.append_as(new BooleanValue(true));
87 
88  json.serialize(out, value_array);
89  EXPECT_EQ(out.str(), "[42,\"Hello JSON\",null,false,true]");
90 }
91 
92 TEST(serialize, object_to_json)
93 {
94  JsonFormatter json;
95  std::stringstream out;
96  DictionaryValue value_object;
97  DictionaryValue::Items &attributes = value_object.elements();
98  attributes.append_as(std::pair(std::string("best_number"), new IntValue(42)));
99 
100  json.serialize(out, value_object);
101  EXPECT_EQ(out.str(), "{\"best_number\":42}");
102 }
103 
104 TEST(serialize, json_roundtrip_ordering)
105 {
106  const std::string input =
107  "[{\"_id\":\"614ada7c476c472ecbd0ecbb\",\"index\":0,\"guid\":\"d5b81381-cef8-4327-923d-"
108  "41e57ff79326\",\"isActive\":false,\"balance\":\"$2,062.25\",\"picture\":\"http://"
109  "placehold.it/32x32\",\"age\":26,\"eyeColor\":\"brown\",\"name\":\"Geneva "
110  "Vega\",\"gender\":\"female\",\"company\":\"SLOGANAUT\",\"email\":\"genevavega@sloganaut."
111  "com\",\"phone\":\"+1 (993) 432-2805\",\"address\":\"943 Christopher Avenue, Northchase, "
112  "Alabama, 5769\",\"about\":\"Eu cillum qui eu fugiat sit nulla eu duis. Aliqua nulla aliqua "
113  "ea tempor dolor fugiat sint consectetur exercitation ipsum magna ex. Aute laborum esse "
114  "magna nostrud in cillum et mollit proident. Deserunt ex minim adipisicing incididunt "
115  "incididunt dolore velit aliqua.\\r\\n\",\"registered\":\"2014-06-02T06:29:33 "
116  "-02:00\",\"latitude\":-66.003108,\"longitude\":44.038986,\"tags\":[\"exercitation\","
117  "\"laborum\",\"velit\",\"magna\",\"officia\",\"aliqua\",\"laboris\"],\"friends\":[{\"id\":0,"
118  "\"name\":\"Daniel Stuart\"},{\"id\":1,\"name\":\"Jackson "
119  "Velez\"},{\"id\":2,\"name\":\"Browning Boyd\"}],\"greeting\":\"Hello, Geneva Vega! You "
120  "have 8 unread "
121  "messages.\",\"favoriteFruit\":\"strawberry\"},{\"_id\":\"614ada7cf28685063c6722af\","
122  "\"index\":1,\"guid\":\"e157edf3-a86d-4984-b18d-e2fe568a9915\",\"isActive\":false,"
123  "\"balance\":\"$3,550.44\",\"picture\":\"http://placehold.it/"
124  "32x32\",\"age\":40,\"eyeColor\":\"blue\",\"name\":\"Lamb "
125  "Lowe\",\"gender\":\"male\",\"company\":\"PROXSOFT\",\"email\":\"lamblowe@proxsoft.com\","
126  "\"phone\":\"+1 (999) 573-2855\",\"address\":\"632 Rockwell Place, Diaperville, "
127  "Pennsylvania, 5050\",\"about\":\"Anim dolor deserunt esse quis velit adipisicing aute "
128  "nostrud velit minim culpa aute et tempor. Dolor aliqua reprehenderit anim voluptate. "
129  "Consequat proident ut culpa reprehenderit qui. Nisi proident velit cillum voluptate. "
130  "Ullamco id sunt quis aute adipisicing cupidatat consequat "
131  "aliquip.\\r\\n\",\"registered\":\"2014-09-06T06:13:36 "
132  "-02:00\",\"latitude\":-44.550228,\"longitude\":-80.893356,\"tags\":[\"anim\",\"id\","
133  "\"irure\",\"do\",\"officia\",\"irure\",\"Lorem\"],\"friends\":[{\"id\":0,\"name\":"
134  "\"Faulkner Watkins\"},{\"id\":1,\"name\":\"Cecile Schneider\"},{\"id\":2,\"name\":\"Burt "
135  "Lester\"}],\"greeting\":\"Hello, Lamb Lowe! You have 1 unread "
136  "messages.\",\"favoriteFruit\":\"strawberry\"},{\"_id\":\"614ada7c235335fc56bc2f78\","
137  "\"index\":2,\"guid\":\"8206bad1-8274-49fd-9223-d727589f22ca\",\"isActive\":false,"
138  "\"balance\":\"$2,548.34\",\"picture\":\"http://placehold.it/"
139  "32x32\",\"age\":37,\"eyeColor\":\"blue\",\"name\":\"Sallie "
140  "Chase\",\"gender\":\"female\",\"company\":\"FLEETMIX\",\"email\":\"salliechase@fleetmix."
141  "com\",\"phone\":\"+1 (953) 453-3388\",\"address\":\"865 Irving Place, Chelsea, Utah, "
142  "9777\",\"about\":\"In magna exercitation incididunt exercitation dolor anim. Consectetur "
143  "dolore commodo elit cillum dolor reprehenderit magna minim et ex labore pariatur. Nulla "
144  "ullamco officia velit in aute proident nostrud. Duis deserunt et labore Lorem aliqua "
145  "eiusmod commodo sunt.\\r\\n\",\"registered\":\"2017-03-16T08:54:53 "
146  "-01:00\",\"latitude\":-78.481939,\"longitude\":-149.820215,\"tags\":[\"Lorem\",\"ipsum\","
147  "\"in\",\"tempor\",\"consectetur\",\"voluptate\",\"elit\"],\"friends\":[{\"id\":0,\"name\":"
148  "\"Gibson Garner\"},{\"id\":1,\"name\":\"Anna Frank\"},{\"id\":2,\"name\":\"Roberson "
149  "Daugherty\"}],\"greeting\":\"Hello, Sallie Chase! You have 7 unread "
150  "messages.\",\"favoriteFruit\":\"apple\"},{\"_id\":\"614ada7c93b63ecad5f9ba5e\",\"index\":3,"
151  "\"guid\":\"924b02fc-7c27-481a-9941-db3b9403dfe1\",\"isActive\":true,\"balance\":\"$1,633."
152  "60\",\"picture\":\"http://placehold.it/"
153  "32x32\",\"age\":29,\"eyeColor\":\"brown\",\"name\":\"Grace "
154  "Mccall\",\"gender\":\"female\",\"company\":\"PIVITOL\",\"email\":\"gracemccall@pivitol."
155  "com\",\"phone\":\"+1 (964) 541-2514\",\"address\":\"734 Schaefer Street, Topaz, Virginia, "
156  "9137\",\"about\":\"Amet officia magna fugiat ut pariatur fugiat elit culpa voluptate elit "
157  "do proident culpa minim. Commodo do minim reprehenderit ut voluptate ut velit id esse "
158  "consequat. Labore ullamco deserunt irure eiusmod cillum tempor incididunt qui adipisicing "
159  "nostrud pariatur enim aliquip. Excepteur nostrud commodo consectetur esse duis irure "
160  "qui.\\r\\n\",\"registered\":\"2015-04-24T03:55:17 "
161  "-02:00\",\"latitude\":58.801446,\"longitude\":-157.413865,\"tags\":[\"do\",\"ea\",\"eu\","
162  "\"eu\",\"qui\",\"duis\",\"sint\"],\"friends\":[{\"id\":0,\"name\":\"Carrie "
163  "Short\"},{\"id\":1,\"name\":\"Dickerson Barnes\"},{\"id\":2,\"name\":\"Rae "
164  "Rios\"}],\"greeting\":\"Hello, Grace Mccall! You have 5 unread "
165  "messages.\",\"favoriteFruit\":\"apple\"},{\"_id\":\"614ada7c9caf1353b0e22bbf\",\"index\":4,"
166  "\"guid\":\"e5981ae1-90e4-41c4-9905-161522db700b\",\"isActive\":false,\"balance\":\"$3,660."
167  "34\",\"picture\":\"http://placehold.it/"
168  "32x32\",\"age\":31,\"eyeColor\":\"blue\",\"name\":\"Herring "
169  "Powers\",\"gender\":\"male\",\"company\":\"PYRAMIA\",\"email\":\"herringpowers@pyramia."
170  "com\",\"phone\":\"+1 (981) 541-2829\",\"address\":\"409 Furman Avenue, Waterloo, South "
171  "Carolina, 380\",\"about\":\"In officia culpa aliqua culpa pariatur aliqua mollit ex. Velit "
172  "est Lorem enim magna cillum sunt elit consectetur deserunt ea est consectetur fugiat "
173  "mollit. Aute Lorem excepteur minim esse qui. Id Lorem in tempor et. Nisi aliquip laborum "
174  "magna eu aute.\\r\\n\",\"registered\":\"2018-07-05T07:28:54 "
175  "-02:00\",\"latitude\":51.497405,\"longitude\":-129.422711,\"tags\":[\"eiusmod\",\"et\","
176  "\"nostrud\",\"reprehenderit\",\"Lorem\",\"cillum\",\"nulla\"],\"friends\":[{\"id\":0,"
177  "\"name\":\"Tonia Keith\"},{\"id\":1,\"name\":\"Leanne Rice\"},{\"id\":2,\"name\":\"Craig "
178  "Gregory\"}],\"greeting\":\"Hello, Herring Powers! You have 6 unread "
179  "messages.\",\"favoriteFruit\":\"strawberry\"},{\"_id\":\"614ada7c53a3d6da77468f25\","
180  "\"index\":5,\"guid\":\"abb2eec9-c4f0-4a0d-b20a-5c8e50fe88a1\",\"isActive\":true,"
181  "\"balance\":\"$1,481.08\",\"picture\":\"http://placehold.it/"
182  "32x32\",\"age\":31,\"eyeColor\":\"green\",\"name\":\"Lela "
183  "Dillard\",\"gender\":\"female\",\"company\":\"CEMENTION\",\"email\":\"leladillard@"
184  "cemention.com\",\"phone\":\"+1 (856) 456-3657\",\"address\":\"391 Diamond Street, Madaket, "
185  "Ohio, 9337\",\"about\":\"Tempor dolor ullamco esse cillum excepteur. Excepteur aliqua non "
186  "enim anim esse amet cupidatat non. Cillum excepteur occaecat cupidatat elit labore. "
187  "Pariatur ut esse sint elit. Velit sint magna et commodo sit velit labore consectetur irure "
188  "officia proident aliquip. Aliqua dolore ipsum voluptate veniam deserunt amet irure. Cillum "
189  "consequat veniam proident Lorem in anim enim veniam ea "
190  "nulla.\\r\\n\",\"registered\":\"2017-01-11T11:07:22 "
191  "-01:00\",\"latitude\":86.349081,\"longitude\":-179.983754,\"tags\":[\"consequat\","
192  "\"labore\",\"consectetur\",\"dolor\",\"laborum\",\"eiusmod\",\"in\"],\"friends\":[{\"id\":"
193  "0,\"name\":\"Hancock Rivera\"},{\"id\":1,\"name\":\"Chasity "
194  "Oneil\"},{\"id\":2,\"name\":\"Whitaker Barr\"}],\"greeting\":\"Hello, Lela Dillard! You "
195  "have 3 unread messages.\",\"favoriteFruit\":\"strawberry\"}]";
196  std::stringstream is(input);
197 
198  JsonFormatter json;
199  std::unique_ptr<Value> value = json.deserialize(is);
200  EXPECT_EQ(value->type(), eValueType::Array);
201 
202  std::stringstream out;
203  json.serialize(out, *value);
204  EXPECT_EQ(out.str(), input);
205 }
206 
207 } // namespace blender::io::serialize::json::testing
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
virtual bool serialize(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
Data buffer MUST be 16 byte aligned.
void append_as(ForwardValue &&...value)
Definition: BLI_vector.hh:442
const Container & elements() const
std::unique_ptr< Value > deserialize(std::istream &is) override
Definition: serialize.cc:212
void serialize(std::ostream &os, const Value &value) override
Definition: serialize.cc:200
ccl_global KernelShaderEvalInput * input
static void test_int_to_json(int64_t value, StringRef expected)
PrimitiveValue< int64_t, eValueType::Int > IntValue
PrimitiveValue< bool, eValueType::Boolean > BooleanValue
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
#define min(a, b)
Definition: sort.c:35
__int64 int64_t
Definition: stdint.h:89
float max