Obj* Tokenizer_dump(Tokenizer *self) { Tokenizer_dump_t super_dump = (Tokenizer_dump_t)SUPER_METHOD(&TOKENIZER, Tokenizer, Dump); Hash *dump = (Hash*)ASSERT_IS_A(super_dump(self), HASH); Hash_Store_Str(dump, "pattern", 7, Obj_Dump(self->pattern)); return (Obj*)dump; }
VArray* VA_dump(VArray *self) { VArray *dump = VA_new(self->size); u32_t i, max; for (i = 0, max = self->size; i < max; i++) { Obj *elem = VA_Fetch(self, i); if (elem) { VA_Store(dump, i, Obj_Dump(elem)); } } return dump; }
static void test_Dump(TestBatch *batch) { Obj *testobj = S_new_testobj(); CharBuf *string = Obj_To_String(testobj); Obj *dump = Obj_Dump(testobj); TEST_TRUE(batch, Obj_Equals(dump, (Obj*)string), "Default Dump returns To_String"); DECREF(dump); DECREF(string); DECREF(testobj); }
Hash* Hash_dump(Hash *self) { Hash *dump = Hash_new(self->size); Obj *key; Obj *value; Hash_Iterate(self); while (Hash_Next(self, &key, &value)) { // Since JSON only supports text hash keys, Dump() can only support // text hash keys. CERTIFY(key, CHARBUF); Hash_Store(dump, key, Obj_Dump(value)); } return dump; }
static void test_Dump_Load_and_Equals(TestBatch *batch) { CaseFolder *case_folder = CaseFolder_new(); CaseFolder *other = CaseFolder_new(); Obj *dump = Obj_Dump(case_folder); CaseFolder *clone = (CaseFolder*)Obj_Load(other, dump); ASSERT_TRUE(batch, Obj_Equals(case_folder, (Obj*)other), "Equals"); ASSERT_TRUE(batch, CaseFolder_Dump_Equals(case_folder, (Obj*)dump), "Dump_Equals"); ASSERT_FALSE(batch, Obj_Equals(case_folder, (Obj*)&EMPTY), "Not Equals"); ASSERT_TRUE(batch, Obj_Equals(case_folder, (Obj*)clone), "Dump => Load round trip"); DECREF(case_folder); DECREF(other); DECREF(dump); DECREF(clone); }