From a65b79d03a1fcf998c97186f8296964cfd8fa394 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 14 Feb 2017 17:42:33 -0600 Subject: [PATCH] Test file tree query --- SiaDrive.Api/SiaApi.h | 2 +- SiaDrive.Api/SiaFileTree.cpp | 2 +- SiaDrive.Dokan.Api/SiaDokanDrive.cpp | 2 +- UnitTests/SiaApiFileTreeTests.cpp | 45 ++++++++++++++++++++++++++-- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/SiaDrive.Api/SiaApi.h b/SiaDrive.Api/SiaApi.h index 90aa807..cd5c7a8 100644 --- a/SiaDrive.Api/SiaApi.h +++ b/SiaDrive.Api/SiaApi.h @@ -71,7 +71,7 @@ public: std::vector> GetFileList() const; - std::vector> QueryFiles(String query) const; + std::vector> Query(String query) const; std::shared_ptr<_CSiaFile> GetFile(const String& siaPath) const; diff --git a/SiaDrive.Api/SiaFileTree.cpp b/SiaDrive.Api/SiaFileTree.cpp index abdab93..74d1d69 100644 --- a/SiaDrive.Api/SiaFileTree.cpp +++ b/SiaDrive.Api/SiaFileTree.cpp @@ -61,7 +61,7 @@ CSiaFilePtr CSiaApi::_CSiaFileTree::GetFile(const String& siaPath) const return ((result != _fileList.end()) ? *result : nullptr); } -CSiaFileCollection CSiaApi::_CSiaFileTree::QueryFiles(String query) const +CSiaFileCollection CSiaApi::_CSiaFileTree::Query(String query) const { query = CSiaApi::FormatToSiaPath(query); ReplaceStringInPlace(ReplaceStringInPlace(ReplaceStringInPlace(query, L".", L"\\."), L"*", L".+"), L"?", L".?"); diff --git a/SiaDrive.Dokan.Api/SiaDokanDrive.cpp b/SiaDrive.Dokan.Api/SiaDokanDrive.cpp index 430ffed..073a35d 100644 --- a/SiaDrive.Dokan.Api/SiaDokanDrive.cpp +++ b/SiaDrive.Dokan.Api/SiaDokanDrive.cpp @@ -325,7 +325,7 @@ private: if (siaFileTree) { String siaQuery = CSiaApi::FormatToSiaPath(PathSkipRoot(FileName)); - auto fileList = siaFileTree->QueryFiles(siaQuery); + auto fileList = siaFileTree->Query(siaQuery); for (auto& file : fileList) { WIN32_FIND_DATA fd = { 0 }; diff --git a/UnitTests/SiaApiFileTreeTests.cpp b/UnitTests/SiaApiFileTreeTests.cpp index 1b2f7fc..fc43956 100644 --- a/UnitTests/SiaApiFileTreeTests.cpp +++ b/UnitTests/SiaApiFileTreeTests.cpp @@ -20,14 +20,14 @@ namespace UnitTests CSiaCurl siaCurl; siaCurl.SetHostConfig(_hostConfig); - json j = + json j = { - {"files", + { "files", { { { "siapath", "root/sub1/file1.txt" },{ "filesize", 1 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, { { "siapath", "root/sub1/file2.txt" },{ "filesize", 2 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, { { "siapath", "root/sub1/file3.txt" },{ "filesize", 3 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } } - }} + } } }; CSiaFileTree ft(siaCurl); @@ -43,6 +43,45 @@ namespace UnitTests Assert::AreEqual(static_cast(2), fileList[1]->GetFileSize()); Assert::AreEqual(static_cast(3), fileList[2]->GetFileSize()); } + + TEST_METHOD(QueryByExtension) + { + CSiaCurl siaCurl; + siaCurl.SetHostConfig(_hostConfig); + + json j = + { + { "files", + { + { { "siapath", "root/sub1/file1.dat" },{ "filesize", 1 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, + { { "siapath", "root/sub1/file2.dat" },{ "filesize", 2 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, + { { "siapath", "root/sub1/file3.dat" },{ "filesize", 1 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, + { { "siapath", "root/sub1/file1.txt" },{ "filesize", 2 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, + { { "siapath", "root/sub1/file2.txt" },{ "filesize", 2 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } }, + { { "siapath", "root/sub1/file3.txt" },{ "filesize", 3 },{ "available", true },{ "renewing", true },{ "redundancy", 5 },{ "uploadprogress", 100 },{ "expiration", 60000 } } + } } + }; + + CSiaFileTree ft(siaCurl); + ft.BuildTree(j); + auto ret = ft.Query(L"root/sub1/*.txt"); + Assert::AreEqual((size_t)3, ret.size()); + + ret = ft.Query(L"root/sub1/*.txt1"); + Assert::AreEqual((size_t)0, ret.size()); + + ret = ft.Query(L"root/sub1/*.t?t"); + Assert::AreEqual((size_t)3, ret.size()); + + ret = ft.Query(L"root/*/*.t?t"); + Assert::AreEqual((size_t)3, ret.size()); + + ret = ft.Query(L"root/sub1/file?.*"); + Assert::AreEqual((size_t)6, ret.size()); + + ret = ft.Query(L"root/sub1/file*.??t"); + Assert::AreEqual((size_t)6, ret.size()); + } }; DEFINE_DAEMON(SiaApiFileTree);