OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <fstream> | 5 #include <fstream> |
6 #include <iostream> | 6 #include <iostream> |
7 | 7 |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 const char* encode_next = encoded_source; | 115 const char* encode_next = encoded_source; |
116 int encode_avail_size = encoded_source_len; | 116 int encode_avail_size = encoded_source_len; |
117 | 117 |
118 Filter::FilterStatus code = Filter::FILTER_OK; | 118 Filter::FilterStatus code = Filter::FILTER_OK; |
119 while (code != Filter::FILTER_DONE) { | 119 while (code != Filter::FILTER_DONE) { |
120 int encode_data_len; | 120 int encode_data_len; |
121 if (get_extra_data && !encode_avail_size) | 121 if (get_extra_data && !encode_avail_size) |
122 break; | 122 break; |
123 encode_data_len = std::min(encode_avail_size, | 123 encode_data_len = std::min(encode_avail_size, |
124 filter->stream_buffer_size()); | 124 filter->stream_buffer_size()); |
125 memcpy(filter->stream_buffer(), encode_next, encode_data_len); | 125 memcpy(filter->stream_buffer()->data(), encode_next, encode_data_len); |
126 filter->FlushStreamBuffer(encode_data_len); | 126 filter->FlushStreamBuffer(encode_data_len); |
127 encode_next += encode_data_len; | 127 encode_next += encode_data_len; |
128 encode_avail_size -= encode_data_len; | 128 encode_avail_size -= encode_data_len; |
129 | 129 |
130 while (1) { | 130 while (1) { |
131 int decode_data_len = std::min(decode_avail_size, output_buffer_size); | 131 int decode_data_len = std::min(decode_avail_size, output_buffer_size); |
132 | 132 |
133 code = filter->ReadData(decode_next, &decode_data_len); | 133 code = filter->ReadData(decode_next, &decode_data_len); |
134 decode_next += decode_data_len; | 134 decode_next += decode_data_len; |
135 decode_avail_size -= decode_data_len; | 135 decode_avail_size -= decode_data_len; |
(...skipping 19 matching lines...) Expand all Loading... |
155 // Unsafe function to use filter to decode compressed data. | 155 // Unsafe function to use filter to decode compressed data. |
156 // Parameters: Source and source_len are compressed data and its size. | 156 // Parameters: Source and source_len are compressed data and its size. |
157 // Dest is the buffer for decoding results. Upon entry, *dest_len is the size | 157 // Dest is the buffer for decoding results. Upon entry, *dest_len is the size |
158 // of the dest buffer. Upon exit, *dest_len is the number of chars written | 158 // of the dest buffer. Upon exit, *dest_len is the number of chars written |
159 // into the buffer. | 159 // into the buffer. |
160 Filter::FilterStatus DecodeAllWithFilter(Filter* filter, | 160 Filter::FilterStatus DecodeAllWithFilter(Filter* filter, |
161 const char* source, | 161 const char* source, |
162 int source_len, | 162 int source_len, |
163 char* dest, | 163 char* dest, |
164 int* dest_len) { | 164 int* dest_len) { |
165 memcpy(filter->stream_buffer(), source, source_len); | 165 memcpy(filter->stream_buffer()->data(), source, source_len); |
166 filter->FlushStreamBuffer(source_len); | 166 filter->FlushStreamBuffer(source_len); |
167 return filter->ReadData(dest, dest_len); | 167 return filter->ReadData(dest, dest_len); |
168 } | 168 } |
169 | 169 |
170 const char* source_buffer() const { return source_buffer_.data(); } | 170 const char* source_buffer() const { return source_buffer_.data(); } |
171 int source_len() const { | 171 int source_len() const { |
172 return static_cast<int>(source_buffer_.size()) - kExtraDataBufferSize; | 172 return static_cast<int>(source_buffer_.size()) - kExtraDataBufferSize; |
173 } | 173 } |
174 | 174 |
175 std::string source_buffer_; | 175 std::string source_buffer_; |
176 | 176 |
177 scoped_ptr<bz_stream> bzip2_data_stream_; | 177 scoped_ptr<bz_stream> bzip2_data_stream_; |
178 char* bzip2_encode_buffer_; | 178 char* bzip2_encode_buffer_; |
179 int bzip2_encode_len_; | 179 int bzip2_encode_len_; |
180 }; | 180 }; |
181 | 181 |
182 // Basic scenario: decoding bzip2 data with big enough buffer. | 182 // Basic scenario: decoding bzip2 data with big enough buffer. |
183 TEST_F(BZip2FilterUnitTest, DecodeBZip2) { | 183 TEST_F(BZip2FilterUnitTest, DecodeBZip2) { |
184 // Decode the compressed data with filter | 184 // Decode the compressed data with filter |
185 std::vector<Filter::FilterType> filter_types; | 185 std::vector<Filter::FilterType> filter_types; |
186 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); | 186 filter_types.push_back(Filter::FILTER_TYPE_BZIP2); |
187 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); | 187 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kDefaultBufferSize)); |
188 ASSERT_TRUE(filter.get()); | 188 ASSERT_TRUE(filter.get()); |
189 memcpy(filter->stream_buffer(), bzip2_encode_buffer_, bzip2_encode_len_); | 189 memcpy(filter->stream_buffer()->data(), bzip2_encode_buffer_, |
| 190 bzip2_encode_len_); |
190 filter->FlushStreamBuffer(bzip2_encode_len_); | 191 filter->FlushStreamBuffer(bzip2_encode_len_); |
191 | 192 |
192 char bzip2_decode_buffer[kDefaultBufferSize]; | 193 char bzip2_decode_buffer[kDefaultBufferSize]; |
193 int bzip2_decode_size = kDefaultBufferSize; | 194 int bzip2_decode_size = kDefaultBufferSize; |
194 Filter::FilterStatus result = | 195 Filter::FilterStatus result = |
195 filter->ReadData(bzip2_decode_buffer, &bzip2_decode_size); | 196 filter->ReadData(bzip2_decode_buffer, &bzip2_decode_size); |
196 ASSERT_EQ(Filter::FILTER_DONE, result); | 197 ASSERT_EQ(Filter::FILTER_DONE, result); |
197 | 198 |
198 // Compare the decoding result with source data | 199 // Compare the decoding result with source data |
199 EXPECT_TRUE(bzip2_decode_size == source_len()); | 200 EXPECT_TRUE(bzip2_decode_size == source_len()); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 DecodeAndCompareWithFilter(filter.get(), | 380 DecodeAndCompareWithFilter(filter.get(), |
380 source_buffer(), | 381 source_buffer(), |
381 source_len() + kExtraDataBufferSize, | 382 source_len() + kExtraDataBufferSize, |
382 more_data, | 383 more_data, |
383 more_data_len, | 384 more_data_len, |
384 kDefaultBufferSize, | 385 kDefaultBufferSize, |
385 true); | 386 true); |
386 } | 387 } |
387 | 388 |
388 } // namespace | 389 } // namespace |
OLD | NEW |