mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This updates to mojo commit d259eb58aa59 and limits the roll script to only pull in the parts of //mojo that are currently being used. More stuff will be dropped in the future.
96 lines
3.2 KiB
C++
96 lines
3.2 KiB
C++
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "base/bind.h"
|
|
#include "base/files/file_path.h"
|
|
#include "base/files/file_util.h"
|
|
#include "base/files/scoped_temp_dir.h"
|
|
#include "base/run_loop.h"
|
|
#include "mojo/data_pipe_utils/data_pipe_utils.h"
|
|
#include "mojo/public/cpp/application/application_impl.h"
|
|
#include "mojo/public/cpp/application/application_test_base.h"
|
|
#include "mojo/services/asset_bundle/public/interfaces/asset_bundle.mojom.h"
|
|
#include "third_party/zlib/google/zip.h"
|
|
|
|
namespace asset_bundle {
|
|
|
|
class AssetBundleAppTest : public mojo::test::ApplicationTestBase {
|
|
public:
|
|
AssetBundleAppTest() {}
|
|
~AssetBundleAppTest() override {}
|
|
|
|
void SetUp() override {
|
|
mojo::test::ApplicationTestBase::SetUp();
|
|
application_impl()->ConnectToService("mojo:asset_bundle", &asset_unpacker_);
|
|
}
|
|
|
|
protected:
|
|
mojo::asset_bundle::AssetUnpackerPtr asset_unpacker_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(AssetBundleAppTest);
|
|
};
|
|
|
|
TEST_F(AssetBundleAppTest, CanGetText) {
|
|
std::string foo_content = "Some plain data";
|
|
std::string bar_content = "The wrong data";
|
|
|
|
base::ScopedTempDir zip_dir;
|
|
ASSERT_TRUE(zip_dir.CreateUniqueTempDir());
|
|
|
|
base::FilePath foo_path = zip_dir.path().Append("foo.txt");
|
|
base::WriteFile(foo_path, foo_content.data(), foo_content.size());
|
|
|
|
base::FilePath bar_path = zip_dir.path().Append("bar.txt");
|
|
base::WriteFile(bar_path, bar_content.data(), bar_content.size());
|
|
|
|
base::FilePath zip_path;
|
|
ASSERT_TRUE(base::CreateTemporaryFile(&zip_path));
|
|
|
|
zip::Zip(zip_dir.path(), zip_path, false);
|
|
std::string zip_contents;
|
|
ASSERT_TRUE(base::ReadFileToString(zip_path, &zip_contents));
|
|
ASSERT_TRUE(base::DeleteFile(zip_path, false));
|
|
|
|
mojo::DataPipe zip_pipe;
|
|
mojo::asset_bundle::AssetBundlePtr asset_bundle;
|
|
asset_unpacker_->UnpackZipStream(zip_pipe.consumer_handle.Pass(),
|
|
GetProxy(&asset_bundle));
|
|
|
|
EXPECT_TRUE(mojo::common::BlockingCopyFromString(
|
|
zip_contents, zip_pipe.producer_handle));
|
|
zip_pipe.producer_handle.reset();
|
|
|
|
std::string asset_content;
|
|
asset_bundle->GetAsStream("foo.txt",
|
|
[&](mojo::ScopedDataPipeConsumerHandle asset_pipe) {
|
|
mojo::common::BlockingCopyToString(asset_pipe.Pass(), &asset_content);
|
|
});
|
|
ASSERT_TRUE(asset_bundle.WaitForIncomingResponse());
|
|
|
|
EXPECT_EQ(foo_content, asset_content)
|
|
<< "Failed to get the correct contents back from the asset bundle";
|
|
|
|
std::string missing_content;
|
|
asset_bundle->GetAsStream("missing.txt",
|
|
[&](mojo::ScopedDataPipeConsumerHandle asset_pipe) {
|
|
mojo::common::BlockingCopyToString(asset_pipe.Pass(), &missing_content);
|
|
});
|
|
ASSERT_TRUE(asset_bundle.WaitForIncomingResponse());
|
|
|
|
EXPECT_EQ("", missing_content)
|
|
<< "Missing asset keys are treated as empty data streams";
|
|
|
|
std::string outside_content;
|
|
asset_bundle->GetAsStream("../../out-of-bundle.txt",
|
|
[&](mojo::ScopedDataPipeConsumerHandle asset_pipe) {
|
|
mojo::common::BlockingCopyToString(asset_pipe.Pass(), &outside_content);
|
|
});
|
|
ASSERT_TRUE(asset_bundle.WaitForIncomingResponse());
|
|
|
|
EXPECT_EQ("", outside_content)
|
|
<< "Traversing outside of bundle is treated as an empty data stream";
|
|
}
|
|
|
|
} // namespace asset_bundle
|