Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: services/file_manager/file_manager_apptest.cc

Issue 875643004: Prototype of Files service. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: wipwipwip Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698