DirHandle* RAMFolder_local_open_dir(RAMFolder *self) { RAMDirHandle *dh = RAMDH_new(self); if (!dh) { ERR_ADD_FRAME(Err_get_error()); } return (DirHandle*)dh; }
static void test_all(TestBatchRunner *runner) { RAMFolder *folder = RAMFolder_new(NULL); String *foo = SSTR_WRAP_C("foo"); String *boffo = SSTR_WRAP_C("boffo"); String *foo_boffo = SSTR_WRAP_C("foo/boffo"); bool saw_foo = false; bool saw_boffo = false; bool foo_was_dir = false; bool boffo_was_dir = false; int count = 0; // Set up folder contents. RAMFolder_MkDir(folder, foo); FileHandle *fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY); DECREF(fh); fh = RAMFolder_Open_FileHandle(folder, foo_boffo, FH_CREATE | FH_WRITE_ONLY); DECREF(fh); RAMDirHandle *dh = RAMDH_new(folder); while (RAMDH_Next(dh)) { count++; String *entry = RAMDH_Get_Entry(dh); if (Str_Equals(entry, (Obj*)foo)) { saw_foo = true; foo_was_dir = RAMDH_Entry_Is_Dir(dh); } else if (Str_Equals(entry, (Obj*)boffo)) { saw_boffo = true; boffo_was_dir = RAMDH_Entry_Is_Dir(dh); } DECREF(entry); } TEST_INT_EQ(runner, 2, count, "correct number of entries"); TEST_TRUE(runner, saw_foo, "Directory was iterated over"); TEST_TRUE(runner, foo_was_dir, "Dir correctly identified by Entry_Is_Dir"); TEST_TRUE(runner, saw_boffo, "File was iterated over"); TEST_FALSE(runner, boffo_was_dir, "File correctly identified by Entry_Is_Dir"); uint32_t refcount = REFCOUNT_NN(folder); RAMDH_Close(dh); TEST_INT_EQ(runner, REFCOUNT_NN(folder), refcount - 1, "Folder reference released by Close()"); DECREF(dh); DECREF(folder); }