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