Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Side by Side Diff: ui/base/resource/data_pack_unittest.cc

Issue 2969123002: Add deduplication logic to .pak files (Closed)
Patch Set: sizeof() Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/base/resource/data_pack_literal.cc ('k') | ui/base/resource/resource_bundle_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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));
167 ASSERT_FALSE(pack.GetStringPiece(140, &data)); 163 ASSERT_FALSE(pack.GetStringPiece(140, &data));
168 } 164 }
169 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));
189 }
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
177 TEST(DataPackTest, LoadFileWithTruncatedHeader) { 198 TEST(DataPackTest, LoadFileWithTruncatedHeader) {
178 base::FilePath data_path; 199 base::FilePath data_path;
179 ASSERT_TRUE(PathService::Get(UI_DIR_TEST_DATA, &data_path)); 200 ASSERT_TRUE(PathService::Get(UI_DIR_TEST_DATA, &data_path));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
OLDNEW
« no previous file with comments | « ui/base/resource/data_pack_literal.cc ('k') | ui/base/resource/resource_bundle_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698