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 "chrome/common/media_galleries/pmp_test_util.h" | 5 #include "chrome/common/media_galleries/pmp_test_util.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 |
7 #include <algorithm> | 9 #include <algorithm> |
8 #include <iterator> | 10 #include <iterator> |
9 | 11 |
10 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
11 #include "base/logging.h" | 13 #include "base/logging.h" |
12 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
13 #include "chrome/common/media_galleries/picasa_types.h" | 15 #include "chrome/common/media_galleries/picasa_types.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 | 17 |
16 namespace picasa { | 18 namespace picasa { |
17 | 19 |
18 namespace { | 20 namespace { |
19 | 21 |
20 // Flatten a vector of elements into an array of bytes. | 22 // Flatten a vector of elements into an array of bytes. |
21 template<class T> | 23 template<class T> |
22 std::vector<char> Flatten(const std::vector<T>& elems) { | 24 std::vector<char> Flatten(const std::vector<T>& elems) { |
23 if (elems.empty()) | 25 if (elems.empty()) |
24 return std::vector<char>(); | 26 return std::vector<char>(); |
25 | 27 |
26 const uint8* elems0 = reinterpret_cast<const uint8*>(&elems[0]); | 28 const uint8_t* elems0 = reinterpret_cast<const uint8_t*>(&elems[0]); |
27 std::vector<char> data_body(elems0, elems0 + sizeof(T) * elems.size()); | 29 std::vector<char> data_body(elems0, elems0 + sizeof(T) * elems.size()); |
28 return data_body; | 30 return data_body; |
29 } | 31 } |
30 | 32 |
31 // Custom specialization for std::string. | 33 // Custom specialization for std::string. |
32 template<> | 34 template<> |
33 std::vector<char> Flatten(const std::vector<std::string>& strings) { | 35 std::vector<char> Flatten(const std::vector<std::string>& strings) { |
34 std::vector<char> totalchars; | 36 std::vector<char> totalchars; |
35 | 37 |
36 for (std::vector<std::string>::const_iterator it = strings.begin(); | 38 for (std::vector<std::string>::const_iterator it = strings.begin(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 field_type, elements_vector.size(), elements_vector); | 81 field_type, elements_vector.size(), elements_vector); |
80 | 82 |
81 size_t bytes_written = base::WriteFile(path, &data[0], data.size()); | 83 size_t bytes_written = base::WriteFile(path, &data[0], data.size()); |
82 return (bytes_written == data.size()); | 84 return (bytes_written == data.size()); |
83 } | 85 } |
84 | 86 |
85 // Explicit Instantiation for all the valid types. | 87 // Explicit Instantiation for all the valid types. |
86 template bool PmpTestUtil::WriteColumnFileFromVector<std::string>( | 88 template bool PmpTestUtil::WriteColumnFileFromVector<std::string>( |
87 const base::FilePath&, const std::string&, const std::string&, | 89 const base::FilePath&, const std::string&, const std::string&, |
88 const PmpFieldType, const std::vector<std::string>&); | 90 const PmpFieldType, const std::vector<std::string>&); |
89 template bool PmpTestUtil::WriteColumnFileFromVector<uint32>( | 91 template bool PmpTestUtil::WriteColumnFileFromVector<uint32_t>( |
90 const base::FilePath&, const std::string&, const std::string&, | 92 const base::FilePath&, |
91 const PmpFieldType, const std::vector<uint32>&); | 93 const std::string&, |
| 94 const std::string&, |
| 95 const PmpFieldType, |
| 96 const std::vector<uint32_t>&); |
92 template bool PmpTestUtil::WriteColumnFileFromVector<double>( | 97 template bool PmpTestUtil::WriteColumnFileFromVector<double>( |
93 const base::FilePath&, const std::string&, const std::string&, | 98 const base::FilePath&, const std::string&, const std::string&, |
94 const PmpFieldType, const std::vector<double>&); | 99 const PmpFieldType, const std::vector<double>&); |
95 template bool PmpTestUtil::WriteColumnFileFromVector<uint8>( | 100 template bool PmpTestUtil::WriteColumnFileFromVector<uint8_t>( |
96 const base::FilePath&, const std::string&, const std::string&, | 101 const base::FilePath&, |
97 const PmpFieldType, const std::vector<uint8>&); | 102 const std::string&, |
98 template bool PmpTestUtil::WriteColumnFileFromVector<uint64>( | 103 const std::string&, |
99 const base::FilePath&, const std::string&, const std::string&, | 104 const PmpFieldType, |
100 const PmpFieldType, const std::vector<uint64>&); | 105 const std::vector<uint8_t>&); |
| 106 template bool PmpTestUtil::WriteColumnFileFromVector<uint64_t>( |
| 107 const base::FilePath&, |
| 108 const std::string&, |
| 109 const std::string&, |
| 110 const PmpFieldType, |
| 111 const std::vector<uint64_t>&); |
101 | 112 |
102 // Return a vector so we don't have to worry about memory management. | 113 // Return a vector so we don't have to worry about memory management. |
103 std::vector<char> PmpTestUtil::MakeHeader(const PmpFieldType field_type, | 114 std::vector<char> PmpTestUtil::MakeHeader(const PmpFieldType field_type, |
104 const uint32 row_count) { | 115 const uint32_t row_count) { |
105 std::vector<char> header(picasa::kPmpHeaderSize); | 116 std::vector<char> header(picasa::kPmpHeaderSize); |
106 | 117 |
107 // Copy in magic bytes. | 118 // Copy in magic bytes. |
108 memcpy(&header[picasa::kPmpMagic1Offset], &picasa::kPmpMagic1, | 119 memcpy(&header[picasa::kPmpMagic1Offset], &picasa::kPmpMagic1, |
109 sizeof(picasa::kPmpMagic1)); | 120 sizeof(picasa::kPmpMagic1)); |
110 memcpy(&header[picasa::kPmpMagic2Offset], &picasa::kPmpMagic2, | 121 memcpy(&header[picasa::kPmpMagic2Offset], &picasa::kPmpMagic2, |
111 sizeof(picasa::kPmpMagic2)); | 122 sizeof(picasa::kPmpMagic2)); |
112 memcpy(&header[picasa::kPmpMagic3Offset], &picasa::kPmpMagic3, | 123 memcpy(&header[picasa::kPmpMagic3Offset], &picasa::kPmpMagic3, |
113 sizeof(picasa::kPmpMagic3)); | 124 sizeof(picasa::kPmpMagic3)); |
114 memcpy(&header[picasa::kPmpMagic4Offset], &picasa::kPmpMagic4, | 125 memcpy(&header[picasa::kPmpMagic4Offset], &picasa::kPmpMagic4, |
115 sizeof(picasa::kPmpMagic4)); | 126 sizeof(picasa::kPmpMagic4)); |
116 | 127 |
117 // Copy in field type. | 128 // Copy in field type. |
118 uint16 field_type_short = static_cast<uint16>(field_type); | 129 uint16_t field_type_short = static_cast<uint16_t>(field_type); |
119 memcpy(&header[picasa::kPmpFieldType1Offset], &field_type_short, | 130 memcpy(&header[picasa::kPmpFieldType1Offset], &field_type_short, |
120 sizeof(uint16)); | 131 sizeof(uint16_t)); |
121 memcpy(&header[picasa::kPmpFieldType2Offset], &field_type_short, | 132 memcpy(&header[picasa::kPmpFieldType2Offset], &field_type_short, |
122 sizeof(uint16)); | 133 sizeof(uint16_t)); |
123 | 134 |
124 // Copy in row count. | 135 // Copy in row count. |
125 memcpy(&header[picasa::kPmpRowCountOffset], &row_count, sizeof(uint32)); | 136 memcpy(&header[picasa::kPmpRowCountOffset], &row_count, sizeof(uint32_t)); |
126 | 137 |
127 return header; | 138 return header; |
128 } | 139 } |
129 | 140 |
130 template<class T> | 141 template <class T> |
131 std::vector<char> PmpTestUtil::MakeHeaderAndBody( | 142 std::vector<char> PmpTestUtil::MakeHeaderAndBody(const PmpFieldType field_type, |
132 const PmpFieldType field_type, const uint32 row_count, | 143 const uint32_t row_count, |
133 const std::vector<T>& elems) { | 144 const std::vector<T>& elems) { |
134 return CombinedVectors(PmpTestUtil::MakeHeader(field_type, row_count), | 145 return CombinedVectors(PmpTestUtil::MakeHeader(field_type, row_count), |
135 Flatten(elems)); | 146 Flatten(elems)); |
136 } | 147 } |
137 | 148 |
138 // Explicit Instantiation for all the valid types. | 149 // Explicit Instantiation for all the valid types. |
139 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<std::string>( | 150 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<std::string>( |
140 const PmpFieldType, const uint32, const std::vector<std::string>&); | 151 const PmpFieldType, |
141 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint32>( | 152 const uint32_t, |
142 const PmpFieldType, const uint32, const std::vector<uint32>&); | 153 const std::vector<std::string>&); |
| 154 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint32_t>( |
| 155 const PmpFieldType, |
| 156 const uint32_t, |
| 157 const std::vector<uint32_t>&); |
143 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<double>( | 158 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<double>( |
144 const PmpFieldType, const uint32, const std::vector<double>&); | 159 const PmpFieldType, |
145 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint8>( | 160 const uint32_t, |
146 const PmpFieldType, const uint32, const std::vector<uint8>&); | 161 const std::vector<double>&); |
147 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint64>( | 162 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint8_t>( |
148 const PmpFieldType, const uint32, const std::vector<uint64>&); | 163 const PmpFieldType, |
| 164 const uint32_t, |
| 165 const std::vector<uint8_t>&); |
| 166 template std::vector<char> PmpTestUtil::MakeHeaderAndBody<uint64_t>( |
| 167 const PmpFieldType, |
| 168 const uint32_t, |
| 169 const std::vector<uint64_t>&); |
149 | 170 |
150 } // namespace picasa | 171 } // namespace picasa |
OLD | NEW |