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

Side by Side 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, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "base/macros.h"
8 #include "mojo/public/cpp/application/application_impl.h"
9 #include "mojo/public/cpp/application/application_test_base.h"
10 #include "mojo/public/cpp/bindings/interface_request.h"
11 #include "mojo/public/cpp/bindings/type_converter.h"
12 #include "services/file_manager/directory.mojom.h"
13 #include "services/file_manager/file.mojom.h"
14 #include "services/file_manager/file_manager.mojom.h"
15
16 namespace mojo {
17 namespace files {
18
19 class ErrorCallback {
20 public:
21 explicit ErrorCallback(Error* error) : error_(error) {}
22 void Run(Error error) const { *error_ = error; }
23
24 private:
25 Error* error_;
26 };
27
28 template <typename T>
29 class ErrorAndValueCallback {
30 public:
31 explicit ErrorAndValueCallback(Error* error, T* value)
32 : error_(error), value_(value) {}
33 void Run(Error error, T value) const {
34 *error_ = error;
35 *value_ = value;
36 }
37
38 private:
39 Error* error_;
40 T* value_;
41 };
42
43 template <typename V>
44 class ErrorAndValueCallback<Array<V>> {
45 public:
46 explicit ErrorAndValueCallback(Error* error, Array<V>* value)
47 : error_(error), value_(value) {}
48 void Run(Error error, Array<V> value) const {
49 *error_ = error;
50 value.Swap(value_);
51 }
52
53 private:
54 Error* error_;
55 Array<V>* value_;
56 };
57
58 class FileManagerAppTest : public test::ApplicationTestBase {
59 public:
60 FileManagerAppTest() {}
61 ~FileManagerAppTest() override {}
62
63 void SetUp() override {
64 test::ApplicationTestBase::SetUp();
65 application_impl()->ConnectToService("mojo:file_manager", &file_manager_);
66 }
67
68 FileManagerPtr& file_manager() { return file_manager_; }
69
70 private:
71 FileManagerPtr file_manager_;
72
73 DISALLOW_COPY_AND_ASSIGN(FileManagerAppTest);
74 };
75
76 TEST_F(FileManagerAppTest, CreateWriteCloseRenameOpenRead) {
77 // Get a temporary root directory.
78 DirectoryPtr directory;
79 Error error = ERROR_INTERNAL;
80 file_manager()->OpenFileSystem(FILE_SYSTEM_TEMPORARY, GetProxy(&directory),
81 ErrorCallback(&error));
82 ASSERT_TRUE(file_manager().WaitForIncomingMethodCall());
83 EXPECT_EQ(ERROR_OK, error);
84
85 {
86 // Create my_file.
87 FilePtr file;
88 error = ERROR_INTERNAL;
89 directory->OpenFile("my_file", GetProxy(&file), kAccessFlagWrite,
90 kOpenFlagCreate, ErrorCallback(&error));
91 ASSERT_TRUE(directory.WaitForIncomingMethodCall());
92 EXPECT_EQ(ERROR_OK, error);
93
94 // Write to it.
95 std::vector<uint8_t> bytes_to_write;
96 bytes_to_write.push_back(static_cast<uint8_t>('h'));
97 bytes_to_write.push_back(static_cast<uint8_t>('e'));
98 bytes_to_write.push_back(static_cast<uint8_t>('l'));
99 bytes_to_write.push_back(static_cast<uint8_t>('l'));
100 bytes_to_write.push_back(static_cast<uint8_t>('o'));
101 error = ERROR_INTERNAL;
102 uint32_t num_bytes_written = 0;
103 file->Write(Array<uint8_t>::From(bytes_to_write), 0, WHENCE_FROM_CURRENT,
104 ErrorAndValueCallback<uint32_t>(&error, &num_bytes_written));
105 ASSERT_TRUE(file.WaitForIncomingMethodCall());
106 EXPECT_EQ(ERROR_OK, error);
107 EXPECT_EQ(5u, bytes_to_write.size());
108
109 // Close it.
110 error = ERROR_INTERNAL;
111 file->Close(ErrorCallback(&error));
112 ASSERT_TRUE(file.WaitForIncomingMethodCall());
113 EXPECT_EQ(ERROR_OK, error);
114 }
115
116 // Rename it.
117 error = ERROR_INTERNAL;
118 directory->Rename("my_file", "your_file", ErrorCallback(&error));
119 ASSERT_TRUE(directory.WaitForIncomingMethodCall());
120 EXPECT_EQ(ERROR_OK, error);
121
122 {
123 // Open my_file again.
124 FilePtr file;
125 error = ERROR_INTERNAL;
126 directory->OpenFile("your_file", GetProxy(&file), kAccessFlagRead, 0,
127 ErrorCallback(&error));
128 ASSERT_TRUE(directory.WaitForIncomingMethodCall());
129 EXPECT_EQ(ERROR_OK, error);
130
131 // Read from it.
132 Array<uint8_t> bytes_read;
133 error = ERROR_INTERNAL;
134 file->Read(3, 1, WHENCE_FROM_START,
135 ErrorAndValueCallback<Array<uint8_t>>(&error, &bytes_read));
136 ASSERT_TRUE(file.WaitForIncomingMethodCall());
137 EXPECT_EQ(ERROR_OK, error);
138 ASSERT_EQ(3u, bytes_read.size());
139 EXPECT_EQ(static_cast<uint8_t>('e'), bytes_read[0]);
140 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[1]);
141 EXPECT_EQ(static_cast<uint8_t>('l'), bytes_read[2]);
142 }
143 }
144
145 } // namespace files
146 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698