| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/resource/data_pack.h" | 5 #include "ui/base/resource/data_pack.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/files/file.h" | 12 #include "base/files/file.h" |
| 13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 14 #include "base/files/file_util.h" | 14 #include "base/files/file_util.h" |
| 15 #include "base/files/scoped_temp_dir.h" | 15 #include "base/files/scoped_temp_dir.h" |
| 16 #include "base/path_service.h" | 16 #include "base/path_service.h" |
| 17 #include "base/strings/string_piece.h" | 17 #include "base/strings/string_piece.h" |
| 18 #include "build/build_config.h" | 18 #include "build/build_config.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "ui/base/resource/data_pack_literal.h" | |
| 21 #include "ui/base/ui_base_paths.h" | 20 #include "ui/base/ui_base_paths.h" |
| 22 | 21 |
| 23 namespace ui { | 22 namespace ui { |
| 24 | 23 |
| 25 class DataPackTest | 24 class DataPackTest |
| 26 : public testing::TestWithParam<DataPack::TextEncodingType> { | 25 : public testing::TestWithParam<DataPack::TextEncodingType> { |
| 27 public: | 26 public: |
| 28 DataPackTest() {} | 27 DataPackTest() {} |
| 29 }; | 28 }; |
| 30 | 29 |
| 30 extern const char kSamplePakContents[]; |
| 31 extern const char kSampleCorruptPakContents[]; |
| 32 extern const size_t kSamplePakSize; |
| 33 extern const size_t kSampleCorruptPakSize; |
| 34 |
| 31 TEST(DataPackTest, LoadFromPath) { | 35 TEST(DataPackTest, LoadFromPath) { |
| 32 base::ScopedTempDir dir; | 36 base::ScopedTempDir dir; |
| 33 ASSERT_TRUE(dir.CreateUniqueTempDir()); | 37 ASSERT_TRUE(dir.CreateUniqueTempDir()); |
| 34 base::FilePath data_path = | 38 base::FilePath data_path = |
| 35 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); | 39 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); |
| 36 | 40 |
| 37 // Dump contents into the pak file. | 41 // Dump contents into the pak file. |
| 38 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContentsV4, kSamplePakSizeV4), | 42 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContents, kSamplePakSize), |
| 39 static_cast<int>(kSamplePakSizeV4)); | 43 static_cast<int>(kSamplePakSize)); |
| 40 | 44 |
| 41 // Load the file through the data pack API. | 45 // Load the file through the data pack API. |
| 42 DataPack pack(SCALE_FACTOR_100P); | 46 DataPack pack(SCALE_FACTOR_100P); |
| 43 ASSERT_TRUE(pack.LoadFromPath(data_path)); | 47 ASSERT_TRUE(pack.LoadFromPath(data_path)); |
| 44 | 48 |
| 45 base::StringPiece data; | 49 base::StringPiece data; |
| 46 ASSERT_TRUE(pack.HasResource(4)); | 50 ASSERT_TRUE(pack.HasResource(4)); |
| 47 ASSERT_TRUE(pack.GetStringPiece(4, &data)); | 51 ASSERT_TRUE(pack.GetStringPiece(4, &data)); |
| 48 EXPECT_EQ("this is id 4", data); | 52 EXPECT_EQ("this is id 4", data); |
| 49 ASSERT_TRUE(pack.HasResource(6)); | 53 ASSERT_TRUE(pack.HasResource(6)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 61 ASSERT_FALSE(pack.GetStringPiece(140, &data)); | 65 ASSERT_FALSE(pack.GetStringPiece(140, &data)); |
| 62 } | 66 } |
| 63 | 67 |
| 64 TEST(DataPackTest, LoadFromFile) { | 68 TEST(DataPackTest, LoadFromFile) { |
| 65 base::ScopedTempDir dir; | 69 base::ScopedTempDir dir; |
| 66 ASSERT_TRUE(dir.CreateUniqueTempDir()); | 70 ASSERT_TRUE(dir.CreateUniqueTempDir()); |
| 67 base::FilePath data_path = | 71 base::FilePath data_path = |
| 68 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); | 72 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); |
| 69 | 73 |
| 70 // Dump contents into the pak file. | 74 // Dump contents into the pak file. |
| 71 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContentsV4, kSamplePakSizeV4), | 75 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContents, kSamplePakSize), |
| 72 static_cast<int>(kSamplePakSizeV4)); | 76 static_cast<int>(kSamplePakSize)); |
| 73 | 77 |
| 74 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); | 78 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); |
| 75 ASSERT_TRUE(file.IsValid()); | 79 ASSERT_TRUE(file.IsValid()); |
| 76 | 80 |
| 77 // Load the file through the data pack API. | 81 // Load the file through the data pack API. |
| 78 DataPack pack(SCALE_FACTOR_100P); | 82 DataPack pack(SCALE_FACTOR_100P); |
| 79 ASSERT_TRUE(pack.LoadFromFile(std::move(file))); | 83 ASSERT_TRUE(pack.LoadFromFile(std::move(file))); |
| 80 | 84 |
| 81 base::StringPiece data; | 85 base::StringPiece data; |
| 82 ASSERT_TRUE(pack.HasResource(4)); | 86 ASSERT_TRUE(pack.HasResource(4)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 101 base::ScopedTempDir dir; | 105 base::ScopedTempDir dir; |
| 102 ASSERT_TRUE(dir.CreateUniqueTempDir()); | 106 ASSERT_TRUE(dir.CreateUniqueTempDir()); |
| 103 base::FilePath data_path = | 107 base::FilePath data_path = |
| 104 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); | 108 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); |
| 105 | 109 |
| 106 // Construct a file which has a non page-aligned zero-filled header followed | 110 // Construct a file which has a non page-aligned zero-filled header followed |
| 107 // by the actual pak file content. | 111 // by the actual pak file content. |
| 108 const char kPadding[5678] = {0}; | 112 const char kPadding[5678] = {0}; |
| 109 ASSERT_EQ(static_cast<int>(sizeof(kPadding)), | 113 ASSERT_EQ(static_cast<int>(sizeof(kPadding)), |
| 110 base::WriteFile(data_path, kPadding, sizeof(kPadding))); | 114 base::WriteFile(data_path, kPadding, sizeof(kPadding))); |
| 111 ASSERT_TRUE( | 115 ASSERT_TRUE(base::AppendToFile( |
| 112 base::AppendToFile(data_path, kSamplePakContentsV4, kSamplePakSizeV4)); | 116 data_path, kSamplePakContents, kSamplePakSize)); |
| 113 | 117 |
| 114 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); | 118 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); |
| 115 ASSERT_TRUE(file.IsValid()); | 119 ASSERT_TRUE(file.IsValid()); |
| 116 | 120 |
| 117 // Load the file through the data pack API. | 121 // Load the file through the data pack API. |
| 118 DataPack pack(SCALE_FACTOR_100P); | 122 DataPack pack(SCALE_FACTOR_100P); |
| 119 base::MemoryMappedFile::Region region = {sizeof(kPadding), kSamplePakSizeV4}; | 123 base::MemoryMappedFile::Region region = {sizeof(kPadding), kSamplePakSize}; |
| 120 ASSERT_TRUE(pack.LoadFromFileRegion(std::move(file), region)); | 124 ASSERT_TRUE(pack.LoadFromFileRegion(std::move(file), region)); |
| 121 | 125 |
| 122 base::StringPiece data; | 126 base::StringPiece data; |
| 123 ASSERT_TRUE(pack.HasResource(4)); | 127 ASSERT_TRUE(pack.HasResource(4)); |
| 124 ASSERT_TRUE(pack.GetStringPiece(4, &data)); | 128 ASSERT_TRUE(pack.GetStringPiece(4, &data)); |
| 125 EXPECT_EQ("this is id 4", data); | 129 EXPECT_EQ("this is id 4", data); |
| 126 ASSERT_TRUE(pack.HasResource(6)); | 130 ASSERT_TRUE(pack.HasResource(6)); |
| 127 ASSERT_TRUE(pack.GetStringPiece(6, &data)); | 131 ASSERT_TRUE(pack.GetStringPiece(6, &data)); |
| 128 EXPECT_EQ("this is id 6", data); | 132 EXPECT_EQ("this is id 6", data); |
| 129 | 133 |
| 130 // Try reading zero-length data blobs, just in case. | 134 // Try reading zero-length data blobs, just in case. |
| 131 ASSERT_TRUE(pack.GetStringPiece(1, &data)); | 135 ASSERT_TRUE(pack.GetStringPiece(1, &data)); |
| 132 EXPECT_EQ(0U, data.length()); | 136 EXPECT_EQ(0U, data.length()); |
| 133 ASSERT_TRUE(pack.GetStringPiece(10, &data)); | 137 ASSERT_TRUE(pack.GetStringPiece(10, &data)); |
| 134 EXPECT_EQ(0U, data.length()); | 138 EXPECT_EQ(0U, data.length()); |
| 135 | 139 |
| 136 // Try looking up an invalid key. | 140 // Try looking up an invalid key. |
| 137 ASSERT_FALSE(pack.HasResource(140)); | 141 ASSERT_FALSE(pack.HasResource(140)); |
| 138 ASSERT_FALSE(pack.GetStringPiece(140, &data)); | 142 ASSERT_FALSE(pack.GetStringPiece(140, &data)); |
| 139 } | 143 } |
| 140 | 144 |
| 141 TEST(DataPackTest, LoadFromBufferV4) { | 145 TEST(DataPackTest, LoadFromBuffer) { |
| 142 DataPack pack(SCALE_FACTOR_100P); | 146 DataPack pack(SCALE_FACTOR_100P); |
| 143 | 147 |
| 144 ASSERT_TRUE(pack.LoadFromBuffer( | 148 ASSERT_TRUE(pack.LoadFromBuffer( |
| 145 base::StringPiece(kSamplePakContentsV4, kSamplePakSizeV4))); | 149 base::StringPiece(kSamplePakContents, kSamplePakSize))); |
| 146 | 150 |
| 147 base::StringPiece data; | 151 base::StringPiece data; |
| 148 ASSERT_TRUE(pack.HasResource(4)); | 152 ASSERT_TRUE(pack.HasResource(4)); |
| 149 ASSERT_TRUE(pack.GetStringPiece(4, &data)); | 153 ASSERT_TRUE(pack.GetStringPiece(4, &data)); |
| 150 EXPECT_EQ("this is id 4", data); | 154 EXPECT_EQ("this is id 4", data); |
| 151 ASSERT_TRUE(pack.HasResource(6)); | 155 ASSERT_TRUE(pack.HasResource(6)); |
| 152 ASSERT_TRUE(pack.GetStringPiece(6, &data)); | 156 ASSERT_TRUE(pack.GetStringPiece(6, &data)); |
| 153 EXPECT_EQ("this is id 6", data); | 157 EXPECT_EQ("this is id 6", data); |
| 154 | 158 |
| 155 // Try reading zero-length data blobs, just in case. | 159 // Try reading zero-length data blobs, just in case. |
| 156 ASSERT_TRUE(pack.GetStringPiece(1, &data)); | 160 ASSERT_TRUE(pack.GetStringPiece(1, &data)); |
| 157 EXPECT_EQ(0U, data.length()); | 161 EXPECT_EQ(0U, data.length()); |
| 158 ASSERT_TRUE(pack.GetStringPiece(10, &data)); | 162 ASSERT_TRUE(pack.GetStringPiece(10, &data)); |
| 159 EXPECT_EQ(0U, data.length()); | 163 EXPECT_EQ(0U, data.length()); |
| 160 | 164 |
| 161 // Try looking up an invalid key. | 165 // Try looking up an invalid key. |
| 162 ASSERT_FALSE(pack.HasResource(140)); | 166 ASSERT_FALSE(pack.HasResource(140)); |
| 163 ASSERT_FALSE(pack.GetStringPiece(140, &data)); | |
| 164 } | |
| 165 | |
| 166 TEST(DataPackTest, LoadFromBufferV5) { | |
| 167 DataPack pack(SCALE_FACTOR_100P); | |
| 168 | |
| 169 ASSERT_TRUE(pack.LoadFromBuffer( | |
| 170 base::StringPiece(kSamplePakContentsV5, kSamplePakSizeV5))); | |
| 171 | |
| 172 base::StringPiece data; | |
| 173 ASSERT_TRUE(pack.HasResource(4)); | |
| 174 ASSERT_TRUE(pack.GetStringPiece(4, &data)); | |
| 175 EXPECT_EQ("this is id 4", data); | |
| 176 ASSERT_TRUE(pack.HasResource(6)); | |
| 177 ASSERT_TRUE(pack.GetStringPiece(6, &data)); | |
| 178 EXPECT_EQ("this is id 6", data); | |
| 179 | |
| 180 // Try reading zero-length data blobs, just in case. | |
| 181 ASSERT_TRUE(pack.GetStringPiece(1, &data)); | |
| 182 EXPECT_EQ(0U, data.length()); | |
| 183 ASSERT_TRUE(pack.GetStringPiece(10, &data)); | |
| 184 EXPECT_EQ("this is id 4", data); | |
| 185 | |
| 186 // Try looking up an invalid key. | |
| 187 ASSERT_FALSE(pack.HasResource(140)); | |
| 188 ASSERT_FALSE(pack.GetStringPiece(140, &data)); | 167 ASSERT_FALSE(pack.GetStringPiece(140, &data)); |
| 189 } | 168 } |
| 190 | 169 |
| 191 INSTANTIATE_TEST_CASE_P(WriteBINARY, DataPackTest, ::testing::Values( | 170 INSTANTIATE_TEST_CASE_P(WriteBINARY, DataPackTest, ::testing::Values( |
| 192 DataPack::BINARY)); | 171 DataPack::BINARY)); |
| 193 INSTANTIATE_TEST_CASE_P(WriteUTF8, DataPackTest, ::testing::Values( | 172 INSTANTIATE_TEST_CASE_P(WriteUTF8, DataPackTest, ::testing::Values( |
| 194 DataPack::UTF8)); | 173 DataPack::UTF8)); |
| 195 INSTANTIATE_TEST_CASE_P(WriteUTF16, DataPackTest, ::testing::Values( | 174 INSTANTIATE_TEST_CASE_P(WriteUTF16, DataPackTest, ::testing::Values( |
| 196 DataPack::UTF16)); | 175 DataPack::UTF16)); |
| 197 | 176 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 221 } |
| 243 | 222 |
| 244 #if defined(OS_POSIX) | 223 #if defined(OS_POSIX) |
| 245 TEST(DataPackTest, ModifiedWhileUsed) { | 224 TEST(DataPackTest, ModifiedWhileUsed) { |
| 246 base::ScopedTempDir dir; | 225 base::ScopedTempDir dir; |
| 247 ASSERT_TRUE(dir.CreateUniqueTempDir()); | 226 ASSERT_TRUE(dir.CreateUniqueTempDir()); |
| 248 base::FilePath data_path = | 227 base::FilePath data_path = |
| 249 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); | 228 dir.GetPath().Append(FILE_PATH_LITERAL("sample.pak")); |
| 250 | 229 |
| 251 // Dump contents into the pak file. | 230 // Dump contents into the pak file. |
| 252 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContentsV4, kSamplePakSizeV4), | 231 ASSERT_EQ(base::WriteFile(data_path, kSamplePakContents, kSamplePakSize), |
| 253 static_cast<int>(kSamplePakSizeV4)); | 232 static_cast<int>(kSamplePakSize)); |
| 254 | 233 |
| 255 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); | 234 base::File file(data_path, base::File::FLAG_OPEN | base::File::FLAG_READ); |
| 256 ASSERT_TRUE(file.IsValid()); | 235 ASSERT_TRUE(file.IsValid()); |
| 257 | 236 |
| 258 // Load the file through the data pack API. | 237 // Load the file through the data pack API. |
| 259 DataPack pack(SCALE_FACTOR_100P); | 238 DataPack pack(SCALE_FACTOR_100P); |
| 260 ASSERT_TRUE(pack.LoadFromFile(std::move(file))); | 239 ASSERT_TRUE(pack.LoadFromFile(std::move(file))); |
| 261 | 240 |
| 262 base::StringPiece data; | 241 base::StringPiece data; |
| 263 ASSERT_TRUE(pack.HasResource(10)); | 242 ASSERT_TRUE(pack.HasResource(10)); |
| 264 ASSERT_TRUE(pack.GetStringPiece(10, &data)); | 243 ASSERT_TRUE(pack.GetStringPiece(10, &data)); |
| 265 | 244 |
| 266 ASSERT_EQ(base::WriteFile(data_path, kSampleCorruptPakContents, | 245 ASSERT_EQ(base::WriteFile(data_path, kSampleCorruptPakContents, |
| 267 kSampleCorruptPakSize), | 246 kSampleCorruptPakSize), |
| 268 static_cast<int>(kSampleCorruptPakSize)); | 247 static_cast<int>(kSampleCorruptPakSize)); |
| 269 | 248 |
| 270 // Reading asset #10 should now fail as it extends past the end of the file. | 249 // Reading asset #10 should now fail as it extends past the end of the file. |
| 271 ASSERT_TRUE(pack.HasResource(10)); | 250 ASSERT_TRUE(pack.HasResource(10)); |
| 272 ASSERT_FALSE(pack.GetStringPiece(10, &data)); | 251 ASSERT_FALSE(pack.GetStringPiece(10, &data)); |
| 273 } | 252 } |
| 274 #endif | 253 #endif |
| 275 | 254 |
| 276 } // namespace ui | 255 } // namespace ui |
| OLD | NEW |