• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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