1 // Copyright (c) 2008 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.
5 #include "base/data_pack.h"
7 #include "base/file_path.h"
8 #include "base/file_util.h"
9 #include "base/path_service.h"
10 #include "base/scoped_temp_dir.h"
11 #include "base/string_piece.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 TEST(DataPackTest
, Load
) {
16 PathService::Get(base::DIR_SOURCE_ROOT
, &data_path
);
17 data_path
= data_path
.Append(
18 FILE_PATH_LITERAL("base/data/data_pack_unittest/sample.pak"));
21 ASSERT_TRUE(pack
.Load(data_path
));
23 base::StringPiece data
;
24 ASSERT_TRUE(pack
.GetStringPiece(4, &data
));
25 EXPECT_EQ("this is id 4", data
);
26 ASSERT_TRUE(pack
.GetStringPiece(6, &data
));
27 EXPECT_EQ("this is id 6", data
);
29 // Try reading zero-length data blobs, just in case.
30 ASSERT_TRUE(pack
.GetStringPiece(1, &data
));
31 EXPECT_EQ(0U, data
.length());
32 ASSERT_TRUE(pack
.GetStringPiece(10, &data
));
33 EXPECT_EQ(0U, data
.length());
35 // Try looking up an invalid key.
36 ASSERT_FALSE(pack
.GetStringPiece(140, &data
));
39 TEST(DataPackTest
, Write
) {
41 ASSERT_TRUE(dir
.CreateUniqueTempDir());
42 FilePath file
= dir
.path().Append(FILE_PATH_LITERAL("data.pak"));
44 std::string
one("one");
45 std::string
two("two");
46 std::string
three("three");
47 std::string
four("four");
48 std::string
fifteen("fifteen");
50 std::map
<uint32
, base::StringPiece
> resources
;
51 resources
.insert(std::make_pair(1, base::StringPiece(one
)));
52 resources
.insert(std::make_pair(2, base::StringPiece(two
)));
53 resources
.insert(std::make_pair(15, base::StringPiece(fifteen
)));
54 resources
.insert(std::make_pair(3, base::StringPiece(three
)));
55 resources
.insert(std::make_pair(4, base::StringPiece(four
)));
56 ASSERT_TRUE(base::DataPack::WritePack(file
, resources
));
58 // Now try to read the data back in.
60 ASSERT_TRUE(pack
.Load(file
));
62 base::StringPiece data
;
63 ASSERT_TRUE(pack
.GetStringPiece(1, &data
));
65 ASSERT_TRUE(pack
.GetStringPiece(2, &data
));
67 ASSERT_TRUE(pack
.GetStringPiece(3, &data
));
68 EXPECT_EQ(three
, data
);
69 ASSERT_TRUE(pack
.GetStringPiece(4, &data
));
70 EXPECT_EQ(four
, data
);
71 ASSERT_TRUE(pack
.GetStringPiece(15, &data
));
72 EXPECT_EQ(fifteen
, data
);