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 |