⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maildirstoretest.cpp

📁 MIME解析的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -