1 // Copyright 2014 The Android Open Source Project
2 //
3 // This software is licensed under the terms of the GNU General Public
4 // License version 2, as published by the Free Software Foundation, and
5 // may be copied, distributed, and modified under those terms.
6 //
7 // This program is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 // GNU General Public License for more details.
11
12 #include "android/utils/file_data.h"
13
14 #include <gtest/gtest.h>
15
16 class ScopedFileData {
17 public:
ScopedFileData()18 ScopedFileData() : mStatus(0) { fileData_initEmpty(&mFileData); }
19
ScopedFileData(const void * buff,size_t length)20 ScopedFileData(const void* buff, size_t length) {
21 mStatus = fileData_initFromMemory(&mFileData, buff, length);
22 }
23
ScopedFileData(const ScopedFileData & other)24 explicit ScopedFileData(const ScopedFileData& other) {
25 mStatus = fileData_initFrom(&mFileData, other.ptr());
26 }
27
ScopedFileData(const FileData * other)28 explicit ScopedFileData(const FileData* other) {
29 mStatus = fileData_initFrom(&mFileData, other);
30 }
31
~ScopedFileData()32 ~ScopedFileData() { fileData_done(&mFileData); }
33
status() const34 int status() const { return mStatus; }
ptr()35 FileData* ptr() { return &mFileData; }
ptr() const36 const FileData* ptr() const { return &mFileData; }
operator *()37 FileData& operator*() { return mFileData; }
operator ->()38 FileData* operator->() { return &mFileData; }
39 private:
40 FileData mFileData;
41 int mStatus;
42 };
43
TEST(FileData,IsValid)44 TEST(FileData, IsValid) {
45 EXPECT_FALSE(fileData_isValid(NULL));
46
47 FileData fakeData = { (uint8_t*)0x012345678, 12345, 23983 };
48 EXPECT_FALSE(fileData_isValid(&fakeData));
49 }
50
TEST(FileData,InitializerConstant)51 TEST(FileData, InitializerConstant) {
52 FileData data = FILE_DATA_INIT;
53 EXPECT_TRUE(fileData_isValid(&data));
54 EXPECT_TRUE(fileData_isEmpty(&data));
55 }
56
TEST(FileData,InitializerIsFullOfZeroes)57 TEST(FileData, InitializerIsFullOfZeroes) {
58 FileData data;
59 memset(&data, 0, sizeof data);
60 EXPECT_TRUE(fileData_isEmpty(&data));
61 EXPECT_TRUE(fileData_isValid(&data));
62 }
63
TEST(FileData,EmptyInitializer)64 TEST(FileData, EmptyInitializer) {
65 ScopedFileData data;
66 EXPECT_EQ(0, data.status());
67 EXPECT_TRUE(fileData_isEmpty(data.ptr()));
68 }
69
TEST(FileData,InitEmpty)70 TEST(FileData, InitEmpty) {
71 ScopedFileData data("", 0U);
72 EXPECT_EQ(0, data.status());
73 EXPECT_TRUE(fileData_isEmpty(data.ptr()));
74 EXPECT_FALSE(data->data);
75 EXPECT_EQ(0U, data->size);
76 }
77
TEST(FileData,InitFromMemory)78 TEST(FileData, InitFromMemory) {
79 static const char kData[] = "Hello World!";
80 ScopedFileData data(kData, sizeof kData);
81 EXPECT_EQ(0, data.status());
82 EXPECT_NE(kData, (const char*)data->data);
83 for (size_t n = 0; n < sizeof kData; ++n) {
84 EXPECT_EQ(kData[n], data->data[n]) << "index " << n;
85 }
86 }
87
TEST(FileData,InitFromOther)88 TEST(FileData, InitFromOther) {
89 static const char kData[] = "Hello World!";
90 ScopedFileData data1(kData, sizeof kData);
91 EXPECT_EQ(0, data1.status());
92
93 ScopedFileData data2(data1.ptr());
94 EXPECT_EQ(0, data2.status());
95
96 EXPECT_EQ(data1->size, data2->size);
97 EXPECT_NE(data1->data, data2->data);
98 for (size_t n = 0; n < data1->size; ++n) {
99 EXPECT_EQ(kData[n], data1->data[n]) << "index " << n;
100 EXPECT_EQ(kData[n], data2->data[n]) << "index " << n;
101 }
102 }
103
TEST(FileData,Swap)104 TEST(FileData, Swap) {
105 static const char kData[] = "Hello World!";
106 ScopedFileData data1(kData, sizeof kData);
107 EXPECT_EQ(0, data1.status());
108
109 ScopedFileData data2;
110 EXPECT_EQ(0, data2.status());
111 fileData_swap(data1.ptr(), data2.ptr());
112
113 EXPECT_TRUE(fileData_isEmpty(data1.ptr()));
114 EXPECT_FALSE(fileData_isEmpty(data2.ptr()));
115 EXPECT_EQ(sizeof kData, data2->size);
116 for (size_t n = 0; n < data2->size; ++n) {
117 EXPECT_EQ(kData[n], data2->data[n]) << "index " << n;
118 }
119 }
120