OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <algorithm> | 5 #include <algorithm> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_column_reader.h" | 8 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_column_reader.h" |
9 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_constants.h" | 9 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_constants.h" |
10 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_test_helper.h" | 10 #include "chrome/browser/media_galleries/fileapi/picasa/pmp_test_helper.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 } | 37 } |
38 | 38 |
39 // TestValid | 39 // TestValid |
40 template<class T> | 40 template<class T> |
41 void TestValid(const picasa::PmpFieldType field_type, | 41 void TestValid(const picasa::PmpFieldType field_type, |
42 const std::vector<T>& elems) { | 42 const std::vector<T>& elems) { |
43 PmpTestHelper test_helper("test"); | 43 PmpTestHelper test_helper("test"); |
44 ASSERT_TRUE(test_helper.Init()); | 44 ASSERT_TRUE(test_helper.Init()); |
45 | 45 |
46 PmpColumnReader reader; | 46 PmpColumnReader reader; |
47 | |
48 uint32 rows_read = 0xFF; | |
49 | |
50 std::vector<uint8> data = | 47 std::vector<uint8> data = |
51 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); | 48 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); |
52 ASSERT_TRUE(test_helper.InitColumnReaderFromBytes( | 49 ASSERT_TRUE(test_helper.InitColumnReaderFromBytes( |
53 &reader, data, field_type, &rows_read)); | 50 &reader, data, field_type)); |
54 EXPECT_EQ(elems.size(), rows_read); | 51 EXPECT_EQ(elems.size(), reader.rows()); |
55 | 52 |
56 for (uint32 i = 0; i < elems.size() && i < rows_read; i++) { | 53 for (uint32 i = 0; i < elems.size() && i < reader.rows(); i++) { |
57 T target; | 54 T target; |
58 EXPECT_TRUE(DoRead(&reader, i, &target)); | 55 EXPECT_TRUE(DoRead(&reader, i, &target)); |
59 EXPECT_EQ(elems[i], target); | 56 EXPECT_EQ(elems[i], target); |
60 } | 57 } |
61 } | 58 } |
62 | 59 |
63 template<class T> | 60 template<class T> |
64 void TestMalformed(const picasa::PmpFieldType field_type, | 61 void TestMalformed(const picasa::PmpFieldType field_type, |
65 const std::vector<T>& elems) { | 62 const std::vector<T>& elems) { |
66 PmpTestHelper test_helper("test"); | 63 PmpTestHelper test_helper("test"); |
67 ASSERT_TRUE(test_helper.Init()); | 64 ASSERT_TRUE(test_helper.Init()); |
68 | 65 |
69 PmpColumnReader reader_too_few_declared_rows; | 66 PmpColumnReader reader_too_few_declared_rows; |
70 std::vector<uint8> data_too_few_declared_rows = | 67 std::vector<uint8> data_too_few_declared_rows = |
71 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size()-1, elems); | 68 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size()-1, elems); |
72 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 69 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
73 &reader_too_few_declared_rows, | 70 &reader_too_few_declared_rows, |
74 data_too_few_declared_rows, | 71 data_too_few_declared_rows, |
75 field_type, | 72 field_type)); |
76 NULL)); | |
77 | 73 |
78 PmpColumnReader reader_too_many_declared_rows; | 74 PmpColumnReader reader_too_many_declared_rows; |
79 std::vector<uint8> data_too_many_declared_rows = | 75 std::vector<uint8> data_too_many_declared_rows = |
80 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size()+1, elems); | 76 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size()+1, elems); |
81 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 77 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
82 &reader_too_many_declared_rows, | 78 &reader_too_many_declared_rows, |
83 data_too_many_declared_rows, | 79 data_too_many_declared_rows, |
84 field_type, | 80 field_type)); |
85 NULL)); | |
86 | 81 |
87 PmpColumnReader reader_truncated; | 82 PmpColumnReader reader_truncated; |
88 std::vector<uint8> data_truncated = | 83 std::vector<uint8> data_truncated = |
89 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); | 84 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); |
90 data_truncated.resize(data_truncated.size()-10); | 85 data_truncated.resize(data_truncated.size()-10); |
91 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 86 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
92 &reader_truncated, data_truncated, field_type, NULL)); | 87 &reader_truncated, data_truncated, field_type)); |
93 | 88 |
94 PmpColumnReader reader_padded; | 89 PmpColumnReader reader_padded; |
95 std::vector<uint8> data_padded = | 90 std::vector<uint8> data_padded = |
96 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); | 91 PmpTestHelper::MakeHeaderAndBody(field_type, elems.size(), elems); |
97 data_padded.resize(data_padded.size()+10); | 92 data_padded.resize(data_padded.size()+10); |
98 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 93 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
99 &reader_padded, data_padded, field_type, NULL)); | 94 &reader_padded, data_padded, field_type)); |
100 } | 95 } |
101 | 96 |
102 template<class T> | 97 template<class T> |
103 void TestPrimitive(const picasa::PmpFieldType field_type) { | 98 void TestPrimitive(const picasa::PmpFieldType field_type) { |
104 // Make an ascending vector of the primitive. | 99 // Make an ascending vector of the primitive. |
105 uint32 n = 100; | 100 uint32 n = 100; |
106 std::vector<T> data(n, 0); | 101 std::vector<T> data(n, 0); |
107 for (uint32 i = 0; i < n; i++) { | 102 for (uint32 i = 0; i < n; i++) { |
108 data[i] = i*3; | 103 data[i] = i*3; |
109 } | 104 } |
110 | 105 |
111 TestValid<T>(field_type, data); | 106 TestValid<T>(field_type, data); |
112 TestMalformed<T>(field_type, data); | 107 TestMalformed<T>(field_type, data); |
113 } | 108 } |
114 | 109 |
115 | 110 |
116 TEST(PmpColumnReaderTest, HeaderParsingAndValidation) { | 111 TEST(PmpColumnReaderTest, HeaderParsingAndValidation) { |
117 PmpTestHelper test_helper("test"); | 112 PmpTestHelper test_helper("test"); |
118 ASSERT_TRUE(test_helper.Init()); | 113 ASSERT_TRUE(test_helper.Init()); |
119 | 114 |
120 PmpColumnReader reader_good_header; | 115 PmpColumnReader reader_good_header; |
121 uint32 rows_read = 0xFF; | |
122 std::vector<uint8> good_header = | 116 std::vector<uint8> good_header = |
123 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); | 117 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); |
124 EXPECT_TRUE(test_helper.InitColumnReaderFromBytes( | 118 EXPECT_TRUE(test_helper.InitColumnReaderFromBytes( |
125 &reader_good_header, | 119 &reader_good_header, |
126 good_header, | 120 good_header, |
127 picasa::PMP_TYPE_STRING, | 121 picasa::PMP_TYPE_STRING)); |
128 &rows_read)); | 122 EXPECT_EQ(0U, reader_good_header.rows()) << |
129 EXPECT_EQ(0U, rows_read) << "Read non-zero rows from header-only data."; | 123 "Read non-zero rows from header-only data."; |
130 | 124 |
131 PmpColumnReader reader_bad_magic_bytes; | 125 PmpColumnReader reader_bad_magic_bytes; |
132 std::vector<uint8> bad_magic_bytes = | 126 std::vector<uint8> bad_magic_bytes = |
133 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); | 127 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); |
134 bad_magic_bytes[0] = 0xff; | 128 bad_magic_bytes[0] = 0xff; |
135 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 129 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
136 &reader_bad_magic_bytes, | 130 &reader_bad_magic_bytes, |
137 bad_magic_bytes, | 131 bad_magic_bytes, |
138 picasa::PMP_TYPE_STRING, | 132 picasa::PMP_TYPE_STRING)); |
139 NULL)); | |
140 | 133 |
141 PmpColumnReader reader_inconsistent_types; | 134 PmpColumnReader reader_inconsistent_types; |
142 std::vector<uint8> inconsistent_type = | 135 std::vector<uint8> inconsistent_type = |
143 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); | 136 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); |
144 inconsistent_type[picasa::kPmpFieldType1Offset] = 0xff; | 137 inconsistent_type[picasa::kPmpFieldType1Offset] = 0xff; |
145 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 138 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
146 &reader_inconsistent_types, | 139 &reader_inconsistent_types, |
147 inconsistent_type, | 140 inconsistent_type, |
148 picasa::PMP_TYPE_STRING, | 141 picasa::PMP_TYPE_STRING)); |
149 NULL)); | |
150 | 142 |
151 PmpColumnReader reader_invalid_type; | 143 PmpColumnReader reader_invalid_type; |
152 std::vector<uint8> invalid_type = | 144 std::vector<uint8> invalid_type = |
153 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); | 145 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); |
154 invalid_type[picasa::kPmpFieldType1Offset] = 0xff; | 146 invalid_type[picasa::kPmpFieldType1Offset] = 0xff; |
155 invalid_type[picasa::kPmpFieldType2Offset] = 0xff; | 147 invalid_type[picasa::kPmpFieldType2Offset] = 0xff; |
156 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 148 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
157 &reader_invalid_type, | 149 &reader_invalid_type, |
158 invalid_type, | 150 invalid_type, |
159 picasa::PMP_TYPE_STRING, | 151 picasa::PMP_TYPE_STRING)); |
160 NULL)); | |
161 | 152 |
162 PmpColumnReader reader_incomplete_header; | 153 PmpColumnReader reader_incomplete_header; |
163 std::vector<uint8> incomplete_header = | 154 std::vector<uint8> incomplete_header = |
164 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); | 155 PmpTestHelper::MakeHeader(picasa::PMP_TYPE_STRING, 0); |
165 incomplete_header.resize(10); | 156 incomplete_header.resize(10); |
166 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( | 157 EXPECT_FALSE(test_helper.InitColumnReaderFromBytes( |
167 &reader_incomplete_header, | 158 &reader_incomplete_header, |
168 incomplete_header, | 159 incomplete_header, |
169 picasa::PMP_TYPE_STRING, | 160 picasa::PMP_TYPE_STRING)); |
170 NULL)); | |
171 } | 161 } |
172 | 162 |
173 TEST(PmpColumnReaderTest, StringParsing) { | 163 TEST(PmpColumnReaderTest, StringParsing) { |
174 std::vector<std::string> empty_strings(100, ""); | 164 std::vector<std::string> empty_strings(100, ""); |
175 | 165 |
176 // Test empty strings read okay. | 166 // Test empty strings read okay. |
177 TestValid(picasa::PMP_TYPE_STRING, empty_strings); | 167 TestValid(picasa::PMP_TYPE_STRING, empty_strings); |
178 | 168 |
179 std::vector<std::string> mixed_strings; | 169 std::vector<std::string> mixed_strings; |
180 mixed_strings.push_back(""); | 170 mixed_strings.push_back(""); |
(...skipping 12 matching lines...) Expand all Loading... |
193 } | 183 } |
194 | 184 |
195 TEST(PmpColumnReaderTest, PrimitiveParsing) { | 185 TEST(PmpColumnReaderTest, PrimitiveParsing) { |
196 TestPrimitive<uint32>(picasa::PMP_TYPE_UINT32); | 186 TestPrimitive<uint32>(picasa::PMP_TYPE_UINT32); |
197 TestPrimitive<double>(picasa::PMP_TYPE_DOUBLE64); | 187 TestPrimitive<double>(picasa::PMP_TYPE_DOUBLE64); |
198 TestPrimitive<uint8>(picasa::PMP_TYPE_UINT8); | 188 TestPrimitive<uint8>(picasa::PMP_TYPE_UINT8); |
199 TestPrimitive<uint64>(picasa::PMP_TYPE_UINT64); | 189 TestPrimitive<uint64>(picasa::PMP_TYPE_UINT64); |
200 } | 190 } |
201 | 191 |
202 } // namespace | 192 } // namespace |
OLD | NEW |