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 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 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 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