📄 maildirstoretest.cpp
字号:
vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder" / "SubSubFolder2"); int count, unseen; folder->status(count, unseen); VASSERT_EQ("Message count", 1, count); folder->open(vmime::net::folder::MODE_READ_ONLY); vmime::ref <vmime::net::message> msg = folder->getMessage(1); folder->fetchMessage(msg, vmime::net::folder::FETCH_SIZE); VASSERT_EQ("Message size", TEST_MESSAGE_1.length(), msg->getSize()); std::ostringstream oss; vmime::utility::outputStreamAdapter os(oss); msg->extract(os); VASSERT_EQ("Message contents", TEST_MESSAGE_1, oss.str()); folder->close(false); destroyMaildir(); } void testRenameFolder_KMail() { testRenameFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); } void testRenameFolder_Courier() { testRenameFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); } void testRenameFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Rename "Folder/SubFolder" to "Folder/foo" vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder"); folder->rename(fpath() / "Folder" / "foo"); // Ensure folder and its subfolders have been renamed const std::vector <vmime::ref <vmime::net::folder> > allFolders = rootFolder->getFolders(true); VASSERT_EQ("1", 5, allFolders.size()); VASSERT("2", findFolder(allFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(allFolders, fpath() / "Folder" / "SubFolder") == NULL); VASSERT("4", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder1") == NULL); VASSERT("5", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder2") == NULL); VASSERT("6", findFolder(allFolders, fpath() / "Folder2") != NULL); VASSERT("7", findFolder(allFolders, fpath() / "Folder" / "foo") != NULL); VASSERT("8", findFolder(allFolders, fpath() / "Folder" / "foo" / "SubSubFolder1") != NULL); VASSERT("9", findFolder(allFolders, fpath() / "Folder" / "foo" / "SubSubFolder2") != NULL); destroyMaildir(); } void testDestroyFolder_KMail() { testDestroyFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); } void testDestroyFolder_Courier() { testDestroyFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); } void testDestroyFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Destroy "Folder/SubFolder" (total: 3 folders) vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder"); folder->destroy(); // Ensure folder and its subfolders have been deleted and other folders still exist const std::vector <vmime::ref <vmime::net::folder> > allFolders = rootFolder->getFolders(true); VASSERT_EQ("1", 2, allFolders.size()); VASSERT("2", findFolder(allFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(allFolders, fpath() / "Folder" / "SubFolder") == NULL); VASSERT("4", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder1") == NULL); VASSERT("5", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder2") == NULL); VASSERT("6", findFolder(allFolders, fpath() / "Folder2") != NULL); destroyMaildir(); } void testFolderExists_KMail() { testFolderExistsImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); } void testFolderExists_Courier() { testFolderExistsImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); } void testFolderExistsImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); VASSERT("1", store->getFolder(fpath() / "Folder" / "SubFolder")->exists()); VASSERT("2", !store->getFolder(fpath() / "Folder" / "SubSubFolder1")->exists()); VASSERT("3", store->getFolder(fpath() / "Folder2")->exists()); VASSERT("4", store->getFolder(fpath() / "Folder" / "SubFolder" / "SubSubFolder2")->exists()); destroyMaildir(); } void testCreateFolder_KMail() { testCreateFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); } void testCreateFolder_Courier() { testCreateFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); } void testCreateFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); VASSERT("Before", !store->getFolder(fpath() / "Folder" / "NewFolder")->exists()); VASSERT_NO_THROW("Creation", store->getFolder(fpath() / "Folder" / "NewFolder")-> create(vmime::net::folder::TYPE_CONTAINS_MESSAGES)); VASSERT("After", store->getFolder(fpath() / "Folder" / "NewFolder")->exists()); destroyMaildir(); }private: vmime::utility::file::path m_tempPath; vmime::ref <vmime::net::store> createAndConnectStore() { vmime::ref <vmime::net::session> session = vmime::create <vmime::net::session>(); vmime::ref <vmime::net::store> store = session->getStore(getStoreURL()); store->connect(); return store; } const vmime::ref <vmime::net::folder> findFolder (const std::vector <vmime::ref <vmime::net::folder> >& folders, const vmime::net::folder::path& path) { for (unsigned int i = 0, n = folders.size() ; i < n ; ++i) { if (folders[i]->getFullPath() == path) return folders[i]; } return NULL; } const vmime::utility::url getStoreURL() { vmime::utility::fileSystemFactory* fsf = vmime::platform::getHandler()->getFileSystemFactory(); vmime::utility::url url(std::string("maildir://localhost") + fsf->pathToString(m_tempPath)); return url; } void createMaildir(const vmime::string* const dirs, const vmime::string* const files) { vmime::utility::fileSystemFactory* fsf = vmime::platform::getHandler()->getFileSystemFactory(); vmime::ref <vmime::utility::file> rootDir = fsf->create(m_tempPath); rootDir->createDirectory(false); for (vmime::string const* dir = dirs ; *dir != "*" ; ++dir) { vmime::ref <vmime::utility::file> fdir = fsf->create(m_tempPath / fsf->stringToPath(*dir)); fdir->createDirectory(false); } for (vmime::string const* file = files ; *file != "*" ; file += 2) { const vmime::string& contents = *(file + 1); vmime::ref <vmime::utility::file> ffile = fsf->create(m_tempPath / fsf->stringToPath(*file)); ffile->createFile(); vmime::ref <vmime::utility::fileWriter> fileWriter = ffile->getFileWriter(); vmime::ref <vmime::utility::outputStream> os = fileWriter->getOutputStream(); os->write(contents.data(), contents.length()); os->flush(); fileWriter = NULL; } } void destroyMaildir() { vmime::utility::fileSystemFactory* fsf = vmime::platform::getHandler()->getFileSystemFactory(); recursiveDelete(fsf->create(m_tempPath)); } void recursiveDelete(vmime::ref <vmime::utility::file> dir) { if (!dir->exists() || !dir->isDirectory()) return; vmime::ref <vmime::utility::fileIterator> files = dir->getFiles(); // First, delete files and subdirectories in this directory while (files->hasMoreElements()) { vmime::ref <vmime::utility::file> file = files->nextElement(); if (file->isDirectory()) { recursiveDelete(file); } else { try { file->remove(); } catch (vmime::exceptions::filesystem_exception&) { // Ignore } } } // Then, delete this (empty) directory try { dir->remove(); } catch (vmime::exceptions::filesystem_exception&) { // Ignore } }VMIME_TEST_SUITE_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -