1 // Copyright 2018 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 "base/files/scoped_temp_dir.h"
6 #include "mojo/public/cpp/base/file_mojom_traits.h"
7 #include "mojo/public/cpp/test_support/test_utils.h"
8 #include "mojo/public/mojom/base/file.mojom.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace mojo_base {
12 namespace file_unittest {
13 
TEST(FileTest,File)14 TEST(FileTest, File) {
15   base::ScopedTempDir temp_dir;
16   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
17 
18   base::File file(
19       temp_dir.GetPath().AppendASCII("test_file.txt"),
20       base::File::FLAG_CREATE | base::File::FLAG_WRITE | base::File::FLAG_READ);
21   const base::StringPiece test_content =
22       "A test string to be stored in a test file";
23   file.WriteAtCurrentPos(test_content.data(),
24                          base::checked_cast<int>(test_content.size()));
25 
26   base::File file_out;
27   ASSERT_TRUE(
28       mojo::test::SerializeAndDeserialize<mojom::File>(&file, &file_out));
29   std::vector<char> content(test_content.size());
30   ASSERT_TRUE(file_out.IsValid());
31   ASSERT_FALSE(file_out.async());
32   ASSERT_EQ(static_cast<int>(test_content.size()),
33             file_out.Read(0, content.data(),
34                           base::checked_cast<int>(test_content.size())));
35   EXPECT_EQ(test_content,
36             base::StringPiece(content.data(), test_content.size()));
37 }
38 
TEST(FileTest,AsyncFile)39 TEST(FileTest, AsyncFile) {
40   base::ScopedTempDir temp_dir;
41   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
42   base::FilePath path = temp_dir.GetPath().AppendASCII("async_test_file.txt");
43 
44   base::File write_file(path, base::File::FLAG_CREATE | base::File::FLAG_WRITE);
45   const base::StringPiece test_content = "test string";
46   write_file.WriteAtCurrentPos(test_content.data(),
47                                base::checked_cast<int>(test_content.size()));
48   write_file.Close();
49 
50   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ |
51                             base::File::FLAG_ASYNC);
52   base::File file_out;
53   ASSERT_TRUE(
54       mojo::test::SerializeAndDeserialize<mojom::File>(&file, &file_out));
55   ASSERT_TRUE(file_out.async());
56 }
57 
TEST(FileTest,InvalidFile)58 TEST(FileTest, InvalidFile) {
59   base::ScopedTempDir temp_dir;
60   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
61   // Test that |file_out| is set to an invalid file.
62   base::File file_out(
63       temp_dir.GetPath().AppendASCII("test_file.txt"),
64       base::File::FLAG_CREATE | base::File::FLAG_WRITE | base::File::FLAG_READ);
65 
66   base::File file = base::File();
67   ASSERT_TRUE(
68       mojo::test::SerializeAndDeserialize<mojom::File>(&file, &file_out));
69   EXPECT_FALSE(file_out.IsValid());
70 }
71 
72 }  // namespace file_unittest
73 }  // namespace mojo_base
74