promises for async vfs operations

This commit is contained in:
2018-12-13 02:12:18 +07:00
parent ac885a51ef
commit af95e86764
9 changed files with 193 additions and 154 deletions

View File

@@ -25,21 +25,27 @@ TEST_CASE("vfs"){
}
{
buffer b;
auto r = v.open({"file", file_path});
auto r = v.read({"file", file_path});
REQUIRE(r);
REQUIRE(streams::try_read_tail(b, r));
REQUIRE(b == buffer{"hello", 5});
REQUIRE(v.open({"file2", file_path}) == input_stream_uptr());
REQUIRE(v.open({"file", nofile_path}) == input_stream_uptr());
REQUIRE(v.read({"file2", file_path}) == input_stream_uptr());
REQUIRE(v.read({"file", nofile_path}) == input_stream_uptr());
}
{
auto r = v.load({"file", file_path});
REQUIRE(r.second);
REQUIRE(r.first == buffer{"hello", 5});
buffer b0;
REQUIRE(v.load({"file", file_path}, b0));
REQUIRE(b0 == buffer{"hello", 5});
auto r2 = v.load_async({"file", file_path}).get();
REQUIRE(r2.second);
REQUIRE(r2.first == buffer{"hello", 5});
auto b1 = v.load_async({"file", file_path}).get();
REQUIRE(b1 == buffer{"hello", 5});
str b2;
REQUIRE(v.load_as_string({"file", file_path}, b2));
REQUIRE(b2 == "hello");
auto b3 = v.load_as_string_async({"file", file_path}).get();
REQUIRE(b3 == "hello");
}
}
{
@@ -58,17 +64,17 @@ TEST_CASE("vfs"){
REQUIRE_FALSE(v.register_scheme<archive_file_source>(
"archive",
v.open(url("resources://bin/noresources.zip"))));
v.read(url("resources://bin/noresources.zip"))));
REQUIRE(v.register_scheme<filesystem_file_source>("file"));
REQUIRE_FALSE(v.register_scheme<archive_file_source>(
"archive",
v.open(url("resources://bin/noresources.zip"))));
v.read(url("resources://bin/noresources.zip"))));
REQUIRE(v.register_scheme<archive_file_source>(
"archive",
v.open(url("resources://bin/resources.zip"))));
v.read(url("resources://bin/resources.zip"))));
REQUIRE(v.exists({"archive", "test.txt"}));
REQUIRE_FALSE(v.exists({"archive", "TEst.txt"}));
@@ -122,50 +128,70 @@ TEST_CASE("vfs"){
REQUIRE_FALSE(v.extract(url("archive://test.txt"), std::back_inserter(result)));
}
{
auto f = v.open(url("archive://test.txt"));
auto f = v.read(url("archive://test.txt"));
REQUIRE(f);
buffer b;
REQUIRE(streams::try_read_tail(b, f));
REQUIRE(b == buffer("hello", 5));
}
{
auto r = v.load(url("archive://test.txt"));
REQUIRE(r.second);
REQUIRE(r.first == buffer("hello", 5));
buffer b0;
REQUIRE(v.load(url("archive://test.txt"), b0));
REQUIRE(b0 == buffer("hello", 5));
auto r2 = v.load_async(url("archive://test.txt")).get();
REQUIRE(r2.second);
REQUIRE(r2.first == buffer("hello", 5));
auto b1 = v.load_async(url("archive://test.txt")).get();
REQUIRE(b1 == buffer("hello", 5));
str b2;
REQUIRE(v.load_as_string(url("archive://test.txt"), b2));
REQUIRE(b2 == "hello");
auto b3 = v.load_as_string_async(url("archive://test.txt")).get();
REQUIRE(b3 == "hello");
}
{
auto f = v.open(url("archive://folder/file.txt"));
auto f = v.read(url("archive://folder/file.txt"));
REQUIRE(f);
buffer b;
REQUIRE(streams::try_read_tail(b, f));
REQUIRE(b == buffer("world", 5));
}
{
auto r = v.load(url("archive://folder/file.txt"));
REQUIRE(r.second);
REQUIRE(r.first == buffer("world", 5));
buffer b0;
REQUIRE(v.load(url("archive://folder/file.txt"), b0));
REQUIRE(b0 == buffer("world", 5));
auto r2 = v.load_async(url("archive://folder/file.txt")).get();
REQUIRE(r2.second);
REQUIRE(r2.first == buffer("world", 5));
auto b1 = v.load_async(url("archive://folder/file.txt")).get();
REQUIRE(b1 == buffer("world", 5));
str b2;
REQUIRE(v.load_as_string(url("archive://folder/file.txt"), b2));
REQUIRE(b2 == "world");
auto b3 = v.load_as_string_async(url("archive://folder/file.txt")).get();
REQUIRE(b3 == "world");
}
{
REQUIRE(v.open(url("archive://TEst.txt")) == input_stream_uptr());
REQUIRE(v.read(url("archive://TEst.txt")) == input_stream_uptr());
auto r = v.load(url("archive://TEst.txt"));
REQUIRE_FALSE(r.second);
REQUIRE(r.first.empty());
buffer b0;
REQUIRE_FALSE(v.load(url("archive://TEst.txt"), b0));
REQUIRE(b0.empty());
auto r2 = v.load_async(url("archive://TEst.txt")).get();
REQUIRE_FALSE(r2.second);
REQUIRE(r2.first.empty());
REQUIRE_THROWS_AS(
v.load_async(url("archive://TEst.txt")).get(),
vfs_load_async_exception);
str b2;
REQUIRE_FALSE(v.load_as_string(url("archive://TEst.txt"), b2));
REQUIRE(b2.empty());
REQUIRE_THROWS_AS(
v.load_as_string_async(url("archive://TEst.txt")).get(),
vfs_load_async_exception);
}
{
auto f = v.open(url("archive://test.txt"));
auto f = v.read(url("archive://test.txt"));
REQUIRE(f);
REQUIRE(v.unregister_scheme("archive"));
buffer b;