| Index: services/file_manager/file_manager_apptest.cc
|
| diff --git a/services/file_manager/file_manager_apptest.cc b/services/file_manager/file_manager_apptest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..227821259fc3b170af6badf4aec32aa06a8a43ba
|
| --- /dev/null
|
| +++ b/services/file_manager/file_manager_apptest.cc
|
| @@ -0,0 +1,146 @@
|
| +// 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 <vector>
|
| +
|
| +#include "base/macros.h"
|
| +#include "mojo/public/cpp/application/application_impl.h"
|
| +#include "mojo/public/cpp/application/application_test_base.h"
|
| +#include "mojo/public/cpp/bindings/interface_request.h"
|
| +#include "mojo/public/cpp/bindings/type_converter.h"
|
| +#include "services/file_manager/directory.mojom.h"
|
| +#include "services/file_manager/file.mojom.h"
|
| +#include "services/file_manager/file_manager.mojom.h"
|
| +
|
| +namespace mojo {
|
| +namespace files {
|
| +
|
| +class ErrorCallback {
|
| + public:
|
| + explicit ErrorCallback(Error* error) : error_(error) {}
|
| + void Run(Error error) const { *error_ = error; }
|
| +
|
| + private:
|
| + Error* error_;
|
| +};
|
| +
|
| +template <typename T>
|
| +class ErrorAndValueCallback {
|
| + public:
|
| + explicit ErrorAndValueCallback(Error* error, T* value)
|
| + : error_(error), value_(value) {}
|
| + void Run(Error error, T value) const {
|
| + *error_ = error;
|
| + *value_ = value;
|
| + }
|
| +
|
| + private:
|
| + Error* error_;
|
| + T* value_;
|
| +};
|
| +
|
| +template <typename V>
|
| +class ErrorAndValueCallback<Array<V>> {
|
| + public:
|
| + explicit ErrorAndValueCallback(Error* error, Array<V>* value)
|
| + : error_(error), value_(value) {}
|
| + void Run(Error error, Array<V> value) const {
|
| + *error_ = error;
|
| + value.Swap(value_);
|
| + }
|
| +
|
| + private:
|
| + Error* error_;
|
| + Array<V>* value_;
|
| +};
|
| +
|
| +class FileManagerAppTest : public test::ApplicationTestBase {
|
| + public:
|
| + FileManagerAppTest() {}
|
| + ~FileManagerAppTest() override {}
|
| +
|
| + void SetUp() override {
|
| + test::ApplicationTestBase::SetUp();
|
| + application_impl()->ConnectToService("mojo:file_manager", &file_manager_);
|
| + }
|
| +
|
| + FileManagerPtr& file_manager() { return file_manager_; }
|
| +
|
| + private:
|
| + FileManagerPtr file_manager_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FileManagerAppTest);
|
| +};
|
| +
|
| +TEST_F(FileManagerAppTest, CreateWriteCloseRenameOpenRead) {
|
| + // Get a temporary root directory.
|
| + DirectoryPtr directory;
|
| + Error error = ERROR_INTERNAL;
|
| + file_manager()->OpenFileSystem(FILE_SYSTEM_TEMPORARY, GetProxy(&directory),
|
| + ErrorCallback(&error));
|
| + ASSERT_TRUE(file_manager().WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| +
|
| + {
|
| + // Create my_file.
|
| + FilePtr file;
|
| + error = ERROR_INTERNAL;
|
| + directory->OpenFile("my_file", GetProxy(&file), kAccessFlagWrite,
|
| + kOpenFlagCreate, ErrorCallback(&error));
|
| + ASSERT_TRUE(directory.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| +
|
| + // Write to it.
|
| + std::vector<uint8_t> bytes_to_write;
|
| + bytes_to_write.push_back(static_cast<uint8_t>('h'));
|
| + bytes_to_write.push_back(static_cast<uint8_t>('e'));
|
| + bytes_to_write.push_back(static_cast<uint8_t>('l'));
|
| + bytes_to_write.push_back(static_cast<uint8_t>('l'));
|
| + bytes_to_write.push_back(static_cast<uint8_t>('o'));
|
| + error = ERROR_INTERNAL;
|
| + uint32_t num_bytes_written = 0;
|
| + file->Write(Array<uint8_t>::From(bytes_to_write), 0, WHENCE_FROM_CURRENT,
|
| + ErrorAndValueCallback<uint32_t>(&error, &num_bytes_written));
|
| + ASSERT_TRUE(file.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| + EXPECT_EQ(5u, bytes_to_write.size());
|
| +
|
| + // Close it.
|
| + error = ERROR_INTERNAL;
|
| + file->Close(ErrorCallback(&error));
|
| + ASSERT_TRUE(file.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| + }
|
| +
|
| + // Rename it.
|
| + error = ERROR_INTERNAL;
|
| + directory->Rename("my_file", "your_file", ErrorCallback(&error));
|
| + ASSERT_TRUE(directory.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| +
|
| + {
|
| + // Open my_file again.
|
| + FilePtr file;
|
| + error = ERROR_INTERNAL;
|
| + directory->OpenFile("your_file", GetProxy(&file), kAccessFlagRead, 0,
|
| + ErrorCallback(&error));
|
| + ASSERT_TRUE(directory.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| +
|
| + // Read from it.
|
| + Array<uint8_t> bytes_read;
|
| + error = ERROR_INTERNAL;
|
| + file->Read(3, 1, WHENCE_FROM_START,
|
| + ErrorAndValueCallback<Array<uint8_t>>(&error, &bytes_read));
|
| + ASSERT_TRUE(file.WaitForIncomingMethodCall());
|
| + EXPECT_EQ(ERROR_OK, error);
|
| + ASSERT_EQ(3u, bytes_read.size());
|
| + EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[0]);
|
| + EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[1]);
|
| + EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]);
|
| + }
|
| +}
|
| +
|
| +} // namespace files
|
| +} // namespace mojo
|
|
|