1 /* test_libFLAC++ - Unit tester for libFLAC++
2 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Josh Coalson
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include <stdlib.h> /* for malloc() */
21 #include <string.h> /* for memcmp() */
22 #include "FLAC/assert.h"
23 #include "FLAC++/metadata.h"
24 #include "share/safe_str.h"
26 static ::FLAC__StreamMetadata streaminfo_, padding_, seektable_, application_, vorbiscomment_, cuesheet_, picture_;
28 static bool die_(const char *msg)
30 printf("FAILED, %s\n", msg);
34 static void *malloc_or_die_(size_t size)
36 void *x = malloc(size);
38 fprintf(stderr, "ERROR: out of memory allocating %u bytes\n", (unsigned)size);
44 static char *strdup_or_die_(const char *s)
48 fprintf(stderr, "ERROR: out of memory copying string \"%s\"\n", s);
54 static bool index_is_equal_(const ::FLAC__StreamMetadata_CueSheet_Index &indx, const ::FLAC__StreamMetadata_CueSheet_Index &indxcopy)
56 if(indxcopy.offset != indx.offset)
58 if(indxcopy.number != indx.number)
63 static bool track_is_equal_(const ::FLAC__StreamMetadata_CueSheet_Track *track, const ::FLAC__StreamMetadata_CueSheet_Track *trackcopy)
67 if(trackcopy->offset != track->offset)
69 if(trackcopy->number != track->number)
71 if(0 != strcmp(trackcopy->isrc, track->isrc))
73 if(trackcopy->type != track->type)
75 if(trackcopy->pre_emphasis != track->pre_emphasis)
77 if(trackcopy->num_indices != track->num_indices)
79 if(0 == track->indices || 0 == trackcopy->indices) {
80 if(track->indices != trackcopy->indices)
84 for(i = 0; i < track->num_indices; i++) {
85 if(!index_is_equal_(trackcopy->indices[i], track->indices[i]))
92 static void init_metadata_blocks_()
94 streaminfo_.is_last = false;
95 streaminfo_.type = ::FLAC__METADATA_TYPE_STREAMINFO;
96 streaminfo_.length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
97 streaminfo_.data.stream_info.min_blocksize = 576;
98 streaminfo_.data.stream_info.max_blocksize = 576;
99 streaminfo_.data.stream_info.min_framesize = 0;
100 streaminfo_.data.stream_info.max_framesize = 0;
101 streaminfo_.data.stream_info.sample_rate = 44100;
102 streaminfo_.data.stream_info.channels = 1;
103 streaminfo_.data.stream_info.bits_per_sample = 8;
104 streaminfo_.data.stream_info.total_samples = 0;
105 memset(streaminfo_.data.stream_info.md5sum, 0, 16);
107 padding_.is_last = false;
108 padding_.type = ::FLAC__METADATA_TYPE_PADDING;
109 padding_.length = 1234;
111 seektable_.is_last = false;
112 seektable_.type = ::FLAC__METADATA_TYPE_SEEKTABLE;
113 seektable_.data.seek_table.num_points = 2;
114 seektable_.length = seektable_.data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
115 seektable_.data.seek_table.points = (::FLAC__StreamMetadata_SeekPoint*)malloc_or_die_(seektable_.data.seek_table.num_points * sizeof(::FLAC__StreamMetadata_SeekPoint));
116 seektable_.data.seek_table.points[0].sample_number = 0;
117 seektable_.data.seek_table.points[0].stream_offset = 0;
118 seektable_.data.seek_table.points[0].frame_samples = streaminfo_.data.stream_info.min_blocksize;
119 seektable_.data.seek_table.points[1].sample_number = ::FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
120 seektable_.data.seek_table.points[1].stream_offset = 1000;
121 seektable_.data.seek_table.points[1].frame_samples = streaminfo_.data.stream_info.min_blocksize;
123 application_.is_last = false;
124 application_.type = ::FLAC__METADATA_TYPE_APPLICATION;
125 application_.length = 8;
126 memcpy(application_.data.application.id, "\xfe\xdc\xba\x98", 4);
127 application_.data.application.data = (FLAC__byte*)malloc_or_die_(4);
128 memcpy(application_.data.application.data, "\xf0\xe1\xd2\xc3", 4);
130 vorbiscomment_.is_last = false;
131 vorbiscomment_.type = ::FLAC__METADATA_TYPE_VORBIS_COMMENT;
132 vorbiscomment_.length = (4 + 5) + 4 + (4 + 12) + (4 + 12);
133 vorbiscomment_.data.vorbis_comment.vendor_string.length = 5;
134 vorbiscomment_.data.vorbis_comment.vendor_string.entry = (FLAC__byte*)malloc_or_die_(5+1);
135 memcpy(vorbiscomment_.data.vorbis_comment.vendor_string.entry, "name0", 5+1);
136 vorbiscomment_.data.vorbis_comment.num_comments = 2;
137 vorbiscomment_.data.vorbis_comment.comments = (::FLAC__StreamMetadata_VorbisComment_Entry*)malloc_or_die_(vorbiscomment_.data.vorbis_comment.num_comments * sizeof(::FLAC__StreamMetadata_VorbisComment_Entry));
138 vorbiscomment_.data.vorbis_comment.comments[0].length = 12;
139 vorbiscomment_.data.vorbis_comment.comments[0].entry = (FLAC__byte*)malloc_or_die_(12+1);
140 memcpy(vorbiscomment_.data.vorbis_comment.comments[0].entry, "name2=value2", 12+1);
141 vorbiscomment_.data.vorbis_comment.comments[1].length = 12;
142 vorbiscomment_.data.vorbis_comment.comments[1].entry = (FLAC__byte*)malloc_or_die_(12+1);
143 memcpy(vorbiscomment_.data.vorbis_comment.comments[1].entry, "name3=value3", 12+1);
145 cuesheet_.is_last = false;
146 cuesheet_.type = ::FLAC__METADATA_TYPE_CUESHEET;
150 FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
151 FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
152 FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
153 FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
154 FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
158 FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN +
159 FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN +
160 FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN +
161 FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN +
162 FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN +
163 FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN +
164 FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN
168 FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN +
169 FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN +
170 FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN
173 memset(cuesheet_.data.cue_sheet.media_catalog_number, 0, sizeof(cuesheet_.data.cue_sheet.media_catalog_number));
174 cuesheet_.data.cue_sheet.media_catalog_number[0] = 'j';
175 cuesheet_.data.cue_sheet.media_catalog_number[1] = 'C';
176 cuesheet_.data.cue_sheet.lead_in = 159;
177 cuesheet_.data.cue_sheet.is_cd = true;
178 cuesheet_.data.cue_sheet.num_tracks = 2;
179 cuesheet_.data.cue_sheet.tracks = (FLAC__StreamMetadata_CueSheet_Track*)malloc_or_die_(cuesheet_.data.cue_sheet.num_tracks * sizeof(FLAC__StreamMetadata_CueSheet_Track));
180 cuesheet_.data.cue_sheet.tracks[0].offset = 1;
181 cuesheet_.data.cue_sheet.tracks[0].number = 1;
182 memcpy(cuesheet_.data.cue_sheet.tracks[0].isrc, "ACBDE1234567", sizeof(cuesheet_.data.cue_sheet.tracks[0].isrc));
183 cuesheet_.data.cue_sheet.tracks[0].type = 0;
184 cuesheet_.data.cue_sheet.tracks[0].pre_emphasis = 1;
185 cuesheet_.data.cue_sheet.tracks[0].num_indices = 2;
186 cuesheet_.data.cue_sheet.tracks[0].indices = (FLAC__StreamMetadata_CueSheet_Index*)malloc_or_die_(cuesheet_.data.cue_sheet.tracks[0].num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index));
187 cuesheet_.data.cue_sheet.tracks[0].indices[0].offset = 0;
188 cuesheet_.data.cue_sheet.tracks[0].indices[0].number = 0;
189 cuesheet_.data.cue_sheet.tracks[0].indices[1].offset = 1234567890;
190 cuesheet_.data.cue_sheet.tracks[0].indices[1].number = 1;
191 cuesheet_.data.cue_sheet.tracks[1].offset = 2345678901u;
192 cuesheet_.data.cue_sheet.tracks[1].number = 2;
193 memcpy(cuesheet_.data.cue_sheet.tracks[1].isrc, "ACBDE7654321", sizeof(cuesheet_.data.cue_sheet.tracks[1].isrc));
194 cuesheet_.data.cue_sheet.tracks[1].type = 1;
195 cuesheet_.data.cue_sheet.tracks[1].pre_emphasis = 0;
196 cuesheet_.data.cue_sheet.tracks[1].num_indices = 1;
197 cuesheet_.data.cue_sheet.tracks[1].indices = (FLAC__StreamMetadata_CueSheet_Index*)malloc_or_die_(cuesheet_.data.cue_sheet.tracks[1].num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index));
198 cuesheet_.data.cue_sheet.tracks[1].indices[0].offset = 0;
199 cuesheet_.data.cue_sheet.tracks[1].indices[0].number = 1;
201 picture_.is_last = true;
202 picture_.type = FLAC__METADATA_TYPE_PICTURE;
205 FLAC__STREAM_METADATA_PICTURE_TYPE_LEN +
206 FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN + /* will add the length for the string later */
207 FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN + /* will add the length for the string later */
208 FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN +
209 FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN +
210 FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN +
211 FLAC__STREAM_METADATA_PICTURE_COLORS_LEN +
212 FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN /* will add the length for the data later */
215 picture_.data.picture.type = FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER;
216 picture_.data.picture.mime_type = strdup_or_die_("image/jpeg");
217 picture_.length += strlen(picture_.data.picture.mime_type);
218 picture_.data.picture.description = (FLAC__byte*)strdup_or_die_("desc");
219 picture_.length += strlen((const char *)picture_.data.picture.description);
220 picture_.data.picture.width = 300;
221 picture_.data.picture.height = 300;
222 picture_.data.picture.depth = 24;
223 picture_.data.picture.colors = 0;
224 picture_.data.picture.data = (FLAC__byte*)strdup_or_die_("SOMEJPEGDATA");
225 picture_.data.picture.data_length = strlen((const char *)picture_.data.picture.data);
226 picture_.length += picture_.data.picture.data_length;
229 static void free_metadata_blocks_()
231 free(seektable_.data.seek_table.points);
232 free(application_.data.application.data);
233 free(vorbiscomment_.data.vorbis_comment.vendor_string.entry);
234 free(vorbiscomment_.data.vorbis_comment.comments[0].entry);
235 free(vorbiscomment_.data.vorbis_comment.comments[1].entry);
236 free(vorbiscomment_.data.vorbis_comment.comments);
237 free(cuesheet_.data.cue_sheet.tracks[0].indices);
238 free(cuesheet_.data.cue_sheet.tracks[1].indices);
239 free(cuesheet_.data.cue_sheet.tracks);
240 free(picture_.data.picture.mime_type);
241 free(picture_.data.picture.description);
242 free(picture_.data.picture.data);
245 bool test_metadata_object_streaminfo()
247 unsigned expected_length;
249 printf("testing class FLAC::Metadata::StreamInfo\n");
251 printf("testing StreamInfo::StreamInfo()... ");
252 FLAC::Metadata::StreamInfo block;
253 if(!block.is_valid())
254 return die_("!block.is_valid()");
255 expected_length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
256 if(block.get_length() != expected_length) {
257 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
262 printf("testing StreamInfo::StreamInfo(const StreamInfo &)... +\n");
263 printf(" StreamInfo::operator!=(const StreamInfo &)... ");
265 FLAC::Metadata::StreamInfo blockcopy(block);
266 if(!blockcopy.is_valid())
267 return die_("!blockcopy.is_valid()");
268 if(blockcopy != block)
269 return die_("copy is not identical to original");
272 printf("testing StreamInfo::~StreamInfo()... ");
276 printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata &)... +\n");
277 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata &)... ");
279 FLAC::Metadata::StreamInfo blockcopy(streaminfo_);
280 if(!blockcopy.is_valid())
281 return die_("!blockcopy.is_valid()");
282 if(blockcopy != streaminfo_)
283 return die_("copy is not identical to original");
287 printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *)... +\n");
288 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
290 FLAC::Metadata::StreamInfo blockcopy(&streaminfo_);
291 if(!blockcopy.is_valid())
292 return die_("!blockcopy.is_valid()");
293 if(blockcopy != streaminfo_)
294 return die_("copy is not identical to original");
298 printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *, copy=true)... +\n");
299 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
301 FLAC::Metadata::StreamInfo blockcopy(&streaminfo_, /*copy=*/true);
302 if(!blockcopy.is_valid())
303 return die_("!blockcopy.is_valid()");
304 if(blockcopy != streaminfo_)
305 return die_("copy is not identical to original");
309 printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *, copy=false)... +\n");
310 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
312 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&streaminfo_);
313 FLAC::Metadata::StreamInfo blockcopy(copy, /*copy=*/false);
314 if(!blockcopy.is_valid())
315 return die_("!blockcopy.is_valid()");
316 if(blockcopy != streaminfo_)
317 return die_("copy is not identical to original");
321 printf("testing StreamInfo::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
322 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
324 FLAC::Metadata::StreamInfo blockcopy;
325 blockcopy.assign(&streaminfo_, /*copy=*/true);
326 if(!blockcopy.is_valid())
327 return die_("!blockcopy.is_valid()");
328 if(blockcopy != streaminfo_)
329 return die_("copy is not identical to original");
333 printf("testing StreamInfo::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
334 printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
336 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&streaminfo_);
337 FLAC::Metadata::StreamInfo blockcopy;
338 blockcopy.assign(copy, /*copy=*/false);
339 if(!blockcopy.is_valid())
340 return die_("!blockcopy.is_valid()");
341 if(blockcopy != streaminfo_)
342 return die_("copy is not identical to original");
346 printf("testing StreamInfo::operator=(const StreamInfo &)... +\n");
347 printf(" StreamInfo::operator==(const StreamInfo &)... ");
349 FLAC::Metadata::StreamInfo blockcopy = block;
350 if(!blockcopy.is_valid())
351 return die_("!blockcopy.is_valid()");
352 if(!(blockcopy == block))
353 return die_("copy is not identical to original");
357 printf("testing StreamInfo::operator=(const ::FLAC__StreamMetadata &)... +\n");
358 printf(" StreamInfo::operator==(const ::FLAC__StreamMetadata &)... ");
360 FLAC::Metadata::StreamInfo blockcopy = streaminfo_;
361 if(!blockcopy.is_valid())
362 return die_("!blockcopy.is_valid()");
363 if(!(blockcopy == streaminfo_))
364 return die_("copy is not identical to original");
368 printf("testing StreamInfo::operator=(const ::FLAC__StreamMetadata *)... +\n");
369 printf(" StreamInfo::operator==(const ::FLAC__StreamMetadata *)... ");
371 FLAC::Metadata::StreamInfo blockcopy = &streaminfo_;
372 if(!blockcopy.is_valid())
373 return die_("!blockcopy.is_valid()");
374 if(!(blockcopy == streaminfo_))
375 return die_("copy is not identical to original");
379 printf("testing StreamInfo::set_min_blocksize()... ");
380 block.set_min_blocksize(streaminfo_.data.stream_info.min_blocksize);
383 printf("testing StreamInfo::set_max_blocksize()... ");
384 block.set_max_blocksize(streaminfo_.data.stream_info.max_blocksize);
387 printf("testing StreamInfo::set_min_framesize()... ");
388 block.set_min_framesize(streaminfo_.data.stream_info.min_framesize);
391 printf("testing StreamInfo::set_max_framesize()... ");
392 block.set_max_framesize(streaminfo_.data.stream_info.max_framesize);
395 printf("testing StreamInfo::set_sample_rate()... ");
396 block.set_sample_rate(streaminfo_.data.stream_info.sample_rate);
399 printf("testing StreamInfo::set_channels()... ");
400 block.set_channels(streaminfo_.data.stream_info.channels);
403 printf("testing StreamInfo::set_bits_per_sample()... ");
404 block.set_bits_per_sample(streaminfo_.data.stream_info.bits_per_sample);
407 printf("testing StreamInfo::set_total_samples()... ");
408 block.set_total_samples(streaminfo_.data.stream_info.total_samples);
411 printf("testing StreamInfo::set_md5sum()... ");
412 block.set_md5sum(streaminfo_.data.stream_info.md5sum);
415 printf("testing StreamInfo::get_min_blocksize()... ");
416 if(block.get_min_blocksize() != streaminfo_.data.stream_info.min_blocksize)
417 return die_("value mismatch, doesn't match previously set value");
420 printf("testing StreamInfo::get_max_blocksize()... ");
421 if(block.get_max_blocksize() != streaminfo_.data.stream_info.max_blocksize)
422 return die_("value mismatch, doesn't match previously set value");
425 printf("testing StreamInfo::get_min_framesize()... ");
426 if(block.get_min_framesize() != streaminfo_.data.stream_info.min_framesize)
427 return die_("value mismatch, doesn't match previously set value");
430 printf("testing StreamInfo::get_max_framesize()... ");
431 if(block.get_max_framesize() != streaminfo_.data.stream_info.max_framesize)
432 return die_("value mismatch, doesn't match previously set value");
435 printf("testing StreamInfo::get_sample_rate()... ");
436 if(block.get_sample_rate() != streaminfo_.data.stream_info.sample_rate)
437 return die_("value mismatch, doesn't match previously set value");
440 printf("testing StreamInfo::get_channels()... ");
441 if(block.get_channels() != streaminfo_.data.stream_info.channels)
442 return die_("value mismatch, doesn't match previously set value");
445 printf("testing StreamInfo::get_bits_per_sample()... ");
446 if(block.get_bits_per_sample() != streaminfo_.data.stream_info.bits_per_sample)
447 return die_("value mismatch, doesn't match previously set value");
450 printf("testing StreamInfo::get_total_samples()... ");
451 if(block.get_total_samples() != streaminfo_.data.stream_info.total_samples)
452 return die_("value mismatch, doesn't match previously set value");
455 printf("testing StreamInfo::get_md5sum()... ");
456 if(0 != memcmp(block.get_md5sum(), streaminfo_.data.stream_info.md5sum, 16))
457 return die_("value mismatch, doesn't match previously set value");
460 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
461 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
463 return die_("returned NULL");
464 if(0 == dynamic_cast<FLAC::Metadata::StreamInfo *>(clone_))
465 return die_("downcast is NULL");
466 if(*dynamic_cast<FLAC::Metadata::StreamInfo *>(clone_) != block)
467 return die_("clone is not identical");
469 printf("testing StreamInfo::~StreamInfo()... ");
474 printf("PASSED\n\n");
478 bool test_metadata_object_padding()
480 unsigned expected_length;
482 printf("testing class FLAC::Metadata::Padding\n");
484 printf("testing Padding::Padding()... ");
485 FLAC::Metadata::Padding block;
486 if(!block.is_valid())
487 return die_("!block.is_valid()");
489 if(block.get_length() != expected_length) {
490 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
495 printf("testing Padding::Padding(const Padding &)... +\n");
496 printf(" Padding::operator!=(const Padding &)... ");
498 FLAC::Metadata::Padding blockcopy(block);
499 if(!blockcopy.is_valid())
500 return die_("!blockcopy.is_valid()");
501 if(blockcopy != block)
502 return die_("copy is not identical to original");
505 printf("testing Padding::~Padding()... ");
509 printf("testing Padding::Padding(const ::FLAC__StreamMetadata &)... +\n");
510 printf(" Padding::operator!=(const ::FLAC__StreamMetadata &)... ");
512 FLAC::Metadata::Padding blockcopy(padding_);
513 if(!blockcopy.is_valid())
514 return die_("!blockcopy.is_valid()");
515 if(blockcopy != padding_)
516 return die_("copy is not identical to original");
520 printf("testing Padding::Padding(const ::FLAC__StreamMetadata *)... +\n");
521 printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
523 FLAC::Metadata::Padding blockcopy(&padding_);
524 if(!blockcopy.is_valid())
525 return die_("!blockcopy.is_valid()");
526 if(blockcopy != padding_)
527 return die_("copy is not identical to original");
531 printf("testing Padding::Padding(const ::FLAC__StreamMetadata *, copy=true)... +\n");
532 printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
534 FLAC::Metadata::Padding blockcopy(&padding_, /*copy=*/true);
535 if(!blockcopy.is_valid())
536 return die_("!blockcopy.is_valid()");
537 if(blockcopy != padding_)
538 return die_("copy is not identical to original");
542 printf("testing Padding::Padding(const ::FLAC__StreamMetadata *, copy=false)... +\n");
543 printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
545 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&padding_);
546 FLAC::Metadata::Padding blockcopy(copy, /*copy=*/false);
547 if(!blockcopy.is_valid())
548 return die_("!blockcopy.is_valid()");
549 if(blockcopy != padding_)
550 return die_("copy is not identical to original");
554 printf("testing Padding::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
555 printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
557 FLAC::Metadata::Padding blockcopy;
558 blockcopy.assign(&padding_, /*copy=*/true);
559 if(!blockcopy.is_valid())
560 return die_("!blockcopy.is_valid()");
561 if(blockcopy != padding_)
562 return die_("copy is not identical to original");
566 printf("testing Padding::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
567 printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
569 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&padding_);
570 FLAC::Metadata::Padding blockcopy;
571 blockcopy.assign(copy, /*copy=*/false);
572 if(!blockcopy.is_valid())
573 return die_("!blockcopy.is_valid()");
574 if(blockcopy != padding_)
575 return die_("copy is not identical to original");
579 printf("testing Padding::operator=(const Padding &)... +\n");
580 printf(" Padding::operator==(const Padding &)... ");
582 FLAC::Metadata::Padding blockcopy = block;
583 if(!blockcopy.is_valid())
584 return die_("!blockcopy.is_valid()");
585 if(!(blockcopy == block))
586 return die_("copy is not identical to original");
590 printf("testing Padding::operator=(const ::FLAC__StreamMetadata &)... +\n");
591 printf(" Padding::operator==(const ::FLAC__StreamMetadata &)... ");
593 FLAC::Metadata::Padding blockcopy = padding_;
594 if(!blockcopy.is_valid())
595 return die_("!blockcopy.is_valid()");
596 if(!(blockcopy == padding_))
597 return die_("copy is not identical to original");
601 printf("testing Padding::operator=(const ::FLAC__StreamMetadata *)... +\n");
602 printf(" Padding::operator==(const ::FLAC__StreamMetadata *)... ");
604 FLAC::Metadata::Padding blockcopy = &padding_;
605 if(!blockcopy.is_valid())
606 return die_("!blockcopy.is_valid()");
607 if(!(blockcopy == padding_))
608 return die_("copy is not identical to original");
612 printf("testing Padding::set_length()... ");
613 block.set_length(padding_.length);
616 printf("testing Prototype::get_length()... ");
617 if(block.get_length() != padding_.length)
618 return die_("value mismatch, doesn't match previously set value");
621 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
622 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
624 return die_("returned NULL");
625 if(0 == dynamic_cast<FLAC::Metadata::Padding *>(clone_))
626 return die_("downcast is NULL");
627 if(*dynamic_cast<FLAC::Metadata::Padding *>(clone_) != block)
628 return die_("clone is not identical");
630 printf("testing Padding::~Padding()... ");
635 printf("PASSED\n\n");
639 bool test_metadata_object_application()
641 unsigned expected_length;
643 printf("testing class FLAC::Metadata::Application\n");
645 printf("testing Application::Application()... ");
646 FLAC::Metadata::Application block;
647 if(!block.is_valid())
648 return die_("!block.is_valid()");
649 expected_length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8;
650 if(block.get_length() != expected_length) {
651 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
656 printf("testing Application::Application(const Application &)... +\n");
657 printf(" Application::operator!=(const Application &)... ");
659 FLAC::Metadata::Application blockcopy(block);
660 if(!blockcopy.is_valid())
661 return die_("!blockcopy.is_valid()");
662 if(blockcopy != block)
663 return die_("copy is not identical to original");
666 printf("testing Application::~Application()... ");
670 printf("testing Application::Application(const ::FLAC__StreamMetadata &)... +\n");
671 printf(" Application::operator!=(const ::FLAC__StreamMetadata &)... ");
673 FLAC::Metadata::Application blockcopy(application_);
674 if(!blockcopy.is_valid())
675 return die_("!blockcopy.is_valid()");
676 if(blockcopy != application_)
677 return die_("copy is not identical to original");
681 printf("testing Application::Application(const ::FLAC__StreamMetadata *)... +\n");
682 printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
684 FLAC::Metadata::Application blockcopy(&application_);
685 if(!blockcopy.is_valid())
686 return die_("!blockcopy.is_valid()");
687 if(blockcopy != application_)
688 return die_("copy is not identical to original");
692 printf("testing Application::Application(const ::FLAC__StreamMetadata *, copy=true)... +\n");
693 printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
695 FLAC::Metadata::Application blockcopy(&application_, /*copy=*/true);
696 if(!blockcopy.is_valid())
697 return die_("!blockcopy.is_valid()");
698 if(blockcopy != application_)
699 return die_("copy is not identical to original");
703 printf("testing Application::Application(const ::FLAC__StreamMetadata *, copy=false)... +\n");
704 printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
706 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&application_);
707 FLAC::Metadata::Application blockcopy(copy, /*copy=*/false);
708 if(!blockcopy.is_valid())
709 return die_("!blockcopy.is_valid()");
710 if(blockcopy != application_)
711 return die_("copy is not identical to original");
715 printf("testing Application::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
716 printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
718 FLAC::Metadata::Application blockcopy;
719 blockcopy.assign(&application_, /*copy=*/true);
720 if(!blockcopy.is_valid())
721 return die_("!blockcopy.is_valid()");
722 if(blockcopy != application_)
723 return die_("copy is not identical to original");
727 printf("testing Application::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
728 printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
730 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&application_);
731 FLAC::Metadata::Application blockcopy;
732 blockcopy.assign(copy, /*copy=*/false);
733 if(!blockcopy.is_valid())
734 return die_("!blockcopy.is_valid()");
735 if(blockcopy != application_)
736 return die_("copy is not identical to original");
740 printf("testing Application::operator=(const Application &)... +\n");
741 printf(" Application::operator==(const Application &)... ");
743 FLAC::Metadata::Application blockcopy = block;
744 if(!blockcopy.is_valid())
745 return die_("!blockcopy.is_valid()");
746 if(!(blockcopy == block))
747 return die_("copy is not identical to original");
751 printf("testing Application::operator=(const ::FLAC__StreamMetadata &)... +\n");
752 printf(" Application::operator==(const ::FLAC__StreamMetadata &)... ");
754 FLAC::Metadata::Application blockcopy = application_;
755 if(!blockcopy.is_valid())
756 return die_("!blockcopy.is_valid()");
757 if(!(blockcopy == application_))
758 return die_("copy is not identical to original");
762 printf("testing Application::operator=(const ::FLAC__StreamMetadata *)... +\n");
763 printf(" Application::operator==(const ::FLAC__StreamMetadata *)... ");
765 FLAC::Metadata::Application blockcopy = &application_;
766 if(!blockcopy.is_valid())
767 return die_("!blockcopy.is_valid()");
768 if(!(blockcopy == application_))
769 return die_("copy is not identical to original");
773 printf("testing Application::set_id()... ");
774 block.set_id(application_.data.application.id);
777 printf("testing Application::set_data()... ");
778 block.set_data(application_.data.application.data, application_.length - sizeof(application_.data.application.id), /*copy=*/true);
781 printf("testing Application::get_id()... ");
782 if(0 != memcmp(block.get_id(), application_.data.application.id, sizeof(application_.data.application.id)))
783 return die_("value mismatch, doesn't match previously set value");
786 printf("testing Application::get_data()... ");
787 if(0 != memcmp(block.get_data(), application_.data.application.data, application_.length - sizeof(application_.data.application.id)))
788 return die_("value mismatch, doesn't match previously set value");
791 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
792 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
794 return die_("returned NULL");
795 if(0 == dynamic_cast<FLAC::Metadata::Application *>(clone_))
796 return die_("downcast is NULL");
797 if(*dynamic_cast<FLAC::Metadata::Application *>(clone_) != block)
798 return die_("clone is not identical");
800 printf("testing Application::~Application()... ");
805 printf("PASSED\n\n");
809 bool test_metadata_object_seektable()
811 unsigned expected_length;
813 printf("testing class FLAC::Metadata::SeekTable\n");
815 printf("testing SeekTable::SeekTable()... ");
816 FLAC::Metadata::SeekTable block;
817 if(!block.is_valid())
818 return die_("!block.is_valid()");
820 if(block.get_length() != expected_length) {
821 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
826 printf("testing SeekTable::SeekTable(const SeekTable &)... +\n");
827 printf(" SeekTable::operator!=(const SeekTable &)... ");
829 FLAC::Metadata::SeekTable blockcopy(block);
830 if(!blockcopy.is_valid())
831 return die_("!blockcopy.is_valid()");
832 if(blockcopy != block)
833 return die_("copy is not identical to original");
836 printf("testing SeekTable::~SeekTable()... ");
840 printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata &)... +\n");
841 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata &)... ");
843 FLAC::Metadata::SeekTable blockcopy(seektable_);
844 if(!blockcopy.is_valid())
845 return die_("!blockcopy.is_valid()");
846 if(blockcopy != seektable_)
847 return die_("copy is not identical to original");
851 printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *)... +\n");
852 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
854 FLAC::Metadata::SeekTable blockcopy(&seektable_);
855 if(!blockcopy.is_valid())
856 return die_("!blockcopy.is_valid()");
857 if(blockcopy != seektable_)
858 return die_("copy is not identical to original");
862 printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *, copy=true)... +\n");
863 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
865 FLAC::Metadata::SeekTable blockcopy(&seektable_, /*copy=*/true);
866 if(!blockcopy.is_valid())
867 return die_("!blockcopy.is_valid()");
868 if(blockcopy != seektable_)
869 return die_("copy is not identical to original");
873 printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *, copy=false)... +\n");
874 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
876 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&seektable_);
877 FLAC::Metadata::SeekTable blockcopy(copy, /*copy=*/false);
878 if(!blockcopy.is_valid())
879 return die_("!blockcopy.is_valid()");
880 if(blockcopy != seektable_)
881 return die_("copy is not identical to original");
885 printf("testing SeekTable::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
886 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
888 FLAC::Metadata::SeekTable blockcopy;
889 blockcopy.assign(&seektable_, /*copy=*/true);
890 if(!blockcopy.is_valid())
891 return die_("!blockcopy.is_valid()");
892 if(blockcopy != seektable_)
893 return die_("copy is not identical to original");
897 printf("testing SeekTable::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
898 printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
900 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&seektable_);
901 FLAC::Metadata::SeekTable blockcopy;
902 blockcopy.assign(copy, /*copy=*/false);
903 if(!blockcopy.is_valid())
904 return die_("!blockcopy.is_valid()");
905 if(blockcopy != seektable_)
906 return die_("copy is not identical to original");
910 printf("testing SeekTable::operator=(const SeekTable &)... +\n");
911 printf(" SeekTable::operator==(const SeekTable &)... ");
913 FLAC::Metadata::SeekTable blockcopy = block;
914 if(!blockcopy.is_valid())
915 return die_("!blockcopy.is_valid()");
916 if(!(blockcopy == block))
917 return die_("copy is not identical to original");
921 printf("testing SeekTable::operator=(const ::FLAC__StreamMetadata &)... +\n");
922 printf(" SeekTable::operator==(const ::FLAC__StreamMetadata &)... ");
924 FLAC::Metadata::SeekTable blockcopy = seektable_;
925 if(!blockcopy.is_valid())
926 return die_("!blockcopy.is_valid()");
927 if(!(blockcopy == seektable_))
928 return die_("copy is not identical to original");
932 printf("testing SeekTable::operator=(const ::FLAC__StreamMetadata *)... +\n");
933 printf(" SeekTable::operator==(const ::FLAC__StreamMetadata *)... ");
935 FLAC::Metadata::SeekTable blockcopy = &seektable_;
936 if(!blockcopy.is_valid())
937 return die_("!blockcopy.is_valid()");
938 if(!(blockcopy == seektable_))
939 return die_("copy is not identical to original");
943 printf("testing SeekTable::insert_point() x 3... ");
944 if(!block.insert_point(0, seektable_.data.seek_table.points[1]))
945 return die_("returned false");
946 if(!block.insert_point(0, seektable_.data.seek_table.points[1]))
947 return die_("returned false");
948 if(!block.insert_point(1, seektable_.data.seek_table.points[0]))
949 return die_("returned false");
952 printf("testing SeekTable::is_legal()... ");
954 return die_("returned true");
957 printf("testing SeekTable::set_point()... ");
958 block.set_point(0, seektable_.data.seek_table.points[0]);
961 printf("testing SeekTable::delete_point()... ");
962 if(!block.delete_point(0))
963 return die_("returned false");
966 printf("testing SeekTable::is_legal()... ");
967 if(!block.is_legal())
968 return die_("returned false");
971 printf("testing SeekTable::get_num_points()... ");
972 if(block.get_num_points() != seektable_.data.seek_table.num_points)
973 return die_("number mismatch");
976 printf("testing SeekTable::operator!=(const ::FLAC__StreamMetadata &)... ");
977 if(block != seektable_)
978 return die_("data mismatch");
981 printf("testing SeekTable::get_point()... ");
983 block.get_point(1).sample_number != seektable_.data.seek_table.points[1].sample_number ||
984 block.get_point(1).stream_offset != seektable_.data.seek_table.points[1].stream_offset ||
985 block.get_point(1).frame_samples != seektable_.data.seek_table.points[1].frame_samples
987 return die_("point mismatch");
990 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
991 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
993 return die_("returned NULL");
994 if(0 == dynamic_cast<FLAC::Metadata::SeekTable *>(clone_))
995 return die_("downcast is NULL");
996 if(*dynamic_cast<FLAC::Metadata::SeekTable *>(clone_) != block)
997 return die_("clone is not identical");
999 printf("testing SeekTable::~SeekTable()... ");
1004 printf("PASSED\n\n");
1008 bool test_metadata_object_vorbiscomment()
1010 unsigned expected_length;
1012 printf("testing class FLAC::Metadata::VorbisComment::Entry\n");
1014 printf("testing Entry::Entry()... ");
1016 FLAC::Metadata::VorbisComment::Entry entry1;
1017 if(!entry1.is_valid())
1018 return die_("!is_valid()");
1021 printf("testing Entry::~Entry()... ");
1025 printf("testing Entry::Entry(const char *field, unsigned field_length)... ");
1026 FLAC::Metadata::VorbisComment::Entry entry2("name2=value2", strlen("name2=value2"));
1027 if(!entry2.is_valid())
1028 return die_("!is_valid()");
1032 printf("testing Entry::Entry(const char *field)... ");
1033 FLAC::Metadata::VorbisComment::Entry entry2z("name2=value2");
1034 if(!entry2z.is_valid())
1035 return die_("!is_valid()");
1036 if(strcmp(entry2.get_field(), entry2z.get_field()))
1037 return die_("bad value");
1041 printf("testing Entry::Entry(const char *field_name, const char *field_value, unsigned field_value_length)... ");
1042 FLAC::Metadata::VorbisComment::Entry entry3("name3", "value3", strlen("value3"));
1043 if(!entry3.is_valid())
1044 return die_("!is_valid()");
1048 printf("testing Entry::Entry(const char *field_name, const char *field_value)... ");
1049 FLAC::Metadata::VorbisComment::Entry entry3z("name3", "value3");
1050 if(!entry3z.is_valid())
1051 return die_("!is_valid()");
1052 if(strcmp(entry3.get_field(), entry3z.get_field()))
1053 return die_("bad value");
1057 printf("testing Entry::Entry(const Entry &entry)... ");
1059 FLAC::Metadata::VorbisComment::Entry entry2copy(entry2);
1060 if(!entry2copy.is_valid())
1061 return die_("!is_valid()");
1064 printf("testing Entry::~Entry()... ");
1068 printf("testing Entry::operator=(const Entry &entry)... ");
1069 FLAC::Metadata::VorbisComment::Entry entry1 = entry2;
1070 if(!entry2.is_valid())
1071 return die_("!is_valid()");
1074 printf("testing Entry::get_field_length()... ");
1075 if(entry1.get_field_length() != strlen("name2=value2"))
1076 return die_("value mismatch");
1079 printf("testing Entry::get_field_name_length()... ");
1080 if(entry1.get_field_name_length() != strlen("name2"))
1081 return die_("value mismatch");
1084 printf("testing Entry::get_field_value_length()... ");
1085 if(entry1.get_field_value_length() != strlen("value2"))
1086 return die_("value mismatch");
1089 printf("testing Entry::get_entry()... ");
1091 ::FLAC__StreamMetadata_VorbisComment_Entry entry = entry1.get_entry();
1092 if(entry.length != strlen("name2=value2"))
1093 return die_("entry length mismatch");
1094 if(0 != memcmp(entry.entry, "name2=value2", entry.length))
1095 return die_("entry value mismatch");
1099 printf("testing Entry::get_field()... ");
1100 if(0 != memcmp(entry1.get_field(), "name2=value2", strlen("name2=value2")))
1101 return die_("value mismatch");
1104 printf("testing Entry::get_field_name()... ");
1105 if(0 != memcmp(entry1.get_field_name(), "name2", strlen("name2")))
1106 return die_("value mismatch");
1109 printf("testing Entry::get_field_value()... ");
1110 if(0 != memcmp(entry1.get_field_value(), "value2", strlen("value2")))
1111 return die_("value mismatch");
1114 printf("testing Entry::set_field_name()... ");
1115 if(!entry1.set_field_name("name1"))
1116 return die_("returned false");
1117 if(0 != memcmp(entry1.get_field_name(), "name1", strlen("name1")))
1118 return die_("value mismatch");
1119 if(0 != memcmp(entry1.get_field(), "name1=value2", strlen("name1=value2")))
1120 return die_("entry mismatch");
1123 printf("testing Entry::set_field_value(const char *field_value, unsigned field_value_length)... ");
1124 if(!entry1.set_field_value("value1", strlen("value1")))
1125 return die_("returned false");
1126 if(0 != memcmp(entry1.get_field_value(), "value1", strlen("value1")))
1127 return die_("value mismatch");
1128 if(0 != memcmp(entry1.get_field(), "name1=value1", strlen("name1=value1")))
1129 return die_("entry mismatch");
1132 printf("testing Entry::set_field_value(const char *field_value)... ");
1133 if(!entry1.set_field_value("value1"))
1134 return die_("returned false");
1135 if(0 != memcmp(entry1.get_field_value(), "value1", strlen("value1")))
1136 return die_("value mismatch");
1137 if(0 != memcmp(entry1.get_field(), "name1=value1", strlen("name1=value1")))
1138 return die_("entry mismatch");
1141 printf("testing Entry::set_field(const char *field, unsigned field_length)... ");
1142 if(!entry1.set_field("name0=value0", strlen("name0=value0")))
1143 return die_("returned false");
1144 if(0 != memcmp(entry1.get_field_name(), "name0", strlen("name0")))
1145 return die_("value mismatch");
1146 if(0 != memcmp(entry1.get_field_value(), "value0", strlen("value0")))
1147 return die_("value mismatch");
1148 if(0 != memcmp(entry1.get_field(), "name0=value0", strlen("name0=value0")))
1149 return die_("entry mismatch");
1152 printf("testing Entry::set_field(const char *field)... ");
1153 if(!entry1.set_field("name0=value0"))
1154 return die_("returned false");
1155 if(0 != memcmp(entry1.get_field_name(), "name0", strlen("name0")))
1156 return die_("value mismatch");
1157 if(0 != memcmp(entry1.get_field_value(), "value0", strlen("value0")))
1158 return die_("value mismatch");
1159 if(0 != memcmp(entry1.get_field(), "name0=value0", strlen("name0=value0")))
1160 return die_("entry mismatch");
1163 printf("PASSED\n\n");
1166 printf("testing class FLAC::Metadata::VorbisComment\n");
1168 printf("testing VorbisComment::VorbisComment()... ");
1169 FLAC::Metadata::VorbisComment block;
1170 if(!block.is_valid())
1171 return die_("!block.is_valid()");
1172 expected_length = (FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN/8 + strlen(::FLAC__VENDOR_STRING) + FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN/8);
1173 if(block.get_length() != expected_length) {
1174 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1179 printf("testing VorbisComment::VorbisComment(const VorbisComment &)... +\n");
1180 printf(" VorbisComment::operator!=(const VorbisComment &)... ");
1182 FLAC::Metadata::VorbisComment blockcopy(block);
1183 if(!blockcopy.is_valid())
1184 return die_("!blockcopy.is_valid()");
1185 if(blockcopy != block)
1186 return die_("copy is not identical to original");
1189 printf("testing VorbisComment::~VorbisComment()... ");
1193 printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata &)... +\n");
1194 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata &)... ");
1196 FLAC::Metadata::VorbisComment blockcopy(vorbiscomment_);
1197 if(!blockcopy.is_valid())
1198 return die_("!blockcopy.is_valid()");
1199 if(blockcopy != vorbiscomment_)
1200 return die_("copy is not identical to original");
1204 printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *)... +\n");
1205 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1207 FLAC::Metadata::VorbisComment blockcopy(&vorbiscomment_);
1208 if(!blockcopy.is_valid())
1209 return die_("!blockcopy.is_valid()");
1210 if(blockcopy != vorbiscomment_)
1211 return die_("copy is not identical to original");
1215 printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1216 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1218 FLAC::Metadata::VorbisComment blockcopy(&vorbiscomment_, /*copy=*/true);
1219 if(!blockcopy.is_valid())
1220 return die_("!blockcopy.is_valid()");
1221 if(blockcopy != vorbiscomment_)
1222 return die_("copy is not identical to original");
1226 printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1227 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1229 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&vorbiscomment_);
1230 FLAC::Metadata::VorbisComment blockcopy(copy, /*copy=*/false);
1231 if(!blockcopy.is_valid())
1232 return die_("!blockcopy.is_valid()");
1233 if(blockcopy != vorbiscomment_)
1234 return die_("copy is not identical to original");
1238 printf("testing VorbisComment::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1239 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1241 FLAC::Metadata::VorbisComment blockcopy;
1242 blockcopy.assign(&vorbiscomment_, /*copy=*/true);
1243 if(!blockcopy.is_valid())
1244 return die_("!blockcopy.is_valid()");
1245 if(blockcopy != vorbiscomment_)
1246 return die_("copy is not identical to original");
1250 printf("testing VorbisComment::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1251 printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1253 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&vorbiscomment_);
1254 FLAC::Metadata::VorbisComment blockcopy;
1255 blockcopy.assign(copy, /*copy=*/false);
1256 if(!blockcopy.is_valid())
1257 return die_("!blockcopy.is_valid()");
1258 if(blockcopy != vorbiscomment_)
1259 return die_("copy is not identical to original");
1263 printf("testing VorbisComment::operator=(const VorbisComment &)... +\n");
1264 printf(" VorbisComment::operator==(const VorbisComment &)... ");
1266 FLAC::Metadata::VorbisComment blockcopy = block;
1267 if(!blockcopy.is_valid())
1268 return die_("!blockcopy.is_valid()");
1269 if(!(blockcopy == block))
1270 return die_("copy is not identical to original");
1274 printf("testing VorbisComment::operator=(const ::FLAC__StreamMetadata &)... +\n");
1275 printf(" VorbisComment::operator==(const ::FLAC__StreamMetadata &)... ");
1277 FLAC::Metadata::VorbisComment blockcopy = vorbiscomment_;
1278 if(!blockcopy.is_valid())
1279 return die_("!blockcopy.is_valid()");
1280 if(!(blockcopy == vorbiscomment_))
1281 return die_("copy is not identical to original");
1285 printf("testing VorbisComment::operator=(const ::FLAC__StreamMetadata *)... +\n");
1286 printf(" VorbisComment::operator==(const ::FLAC__StreamMetadata *)... ");
1288 FLAC::Metadata::VorbisComment blockcopy = &vorbiscomment_;
1289 if(!blockcopy.is_valid())
1290 return die_("!blockcopy.is_valid()");
1291 if(!(blockcopy == vorbiscomment_))
1292 return die_("copy is not identical to original");
1296 printf("testing VorbisComment::get_num_comments()... ");
1297 if(block.get_num_comments() != 0)
1298 return die_("value mismatch, expected 0");
1301 printf("testing VorbisComment::set_vendor_string()... ");
1302 if(!block.set_vendor_string((const FLAC__byte *)"mame0"))
1303 return die_("returned false");
1305 vorbiscomment_.data.vorbis_comment.vendor_string.entry[0] = 'm';
1307 printf("testing VorbisComment::get_vendor_string()... ");
1308 if(strlen((const char *)block.get_vendor_string()) != vorbiscomment_.data.vorbis_comment.vendor_string.length)
1309 return die_("length mismatch");
1310 if(0 != memcmp(block.get_vendor_string(), vorbiscomment_.data.vorbis_comment.vendor_string.entry, vorbiscomment_.data.vorbis_comment.vendor_string.length))
1311 return die_("value mismatch");
1314 printf("testing VorbisComment::append_comment()... +\n");
1315 printf(" VorbisComment::get_comment()... ");
1316 if(!block.append_comment(entry3))
1317 return die_("returned false");
1318 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1319 return die_("length mismatch");
1320 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1321 return die_("value mismatch");
1324 printf("testing VorbisComment::append_comment()... +\n");
1325 printf(" VorbisComment::get_comment()... ");
1326 if(!block.append_comment(entry2))
1327 return die_("returned false");
1328 if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1329 return die_("length mismatch");
1330 if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1331 return die_("value mismatch");
1334 printf("testing VorbisComment::delete_comment()... +\n");
1335 printf(" VorbisComment::get_comment()... ");
1336 if(!block.delete_comment(0))
1337 return die_("returned false");
1338 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1339 return die_("length[0] mismatch");
1340 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1341 return die_("value[0] mismatch");
1344 printf("testing VorbisComment::delete_comment()... +\n");
1345 printf(" VorbisComment::get_comment()... ");
1346 if(!block.delete_comment(0))
1347 return die_("returned false");
1348 if(block.get_num_comments() != 0)
1349 return die_("block mismatch, expected num_comments = 0");
1352 printf("testing VorbisComment::insert_comment()... +\n");
1353 printf(" VorbisComment::get_comment()... ");
1354 if(!block.insert_comment(0, entry3))
1355 return die_("returned false");
1356 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1357 return die_("length mismatch");
1358 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1359 return die_("value mismatch");
1362 printf("testing VorbisComment::insert_comment()... +\n");
1363 printf(" VorbisComment::get_comment()... ");
1364 if(!block.insert_comment(0, entry3))
1365 return die_("returned false");
1366 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1367 return die_("length mismatch");
1368 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1369 return die_("value mismatch");
1372 printf("testing VorbisComment::insert_comment()... +\n");
1373 printf(" VorbisComment::get_comment()... ");
1374 if(!block.insert_comment(1, entry2))
1375 return die_("returned false");
1376 if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1377 return die_("length mismatch");
1378 if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1379 return die_("value mismatch");
1382 printf("testing VorbisComment::set_comment()... +\n");
1383 printf(" VorbisComment::get_comment()... ");
1384 if(!block.set_comment(0, entry2))
1385 return die_("returned false");
1386 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1387 return die_("length mismatch");
1388 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1389 return die_("value mismatch");
1392 printf("testing VorbisComment::delete_comment()... +\n");
1393 printf(" VorbisComment::get_comment()... ");
1394 if(!block.delete_comment(0))
1395 return die_("returned false");
1396 if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1397 return die_("length[0] mismatch");
1398 if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1399 return die_("value[0] mismatch");
1400 if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1401 return die_("length[1] mismatch");
1402 if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1403 return die_("value[0] mismatch");
1406 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
1407 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
1409 return die_("returned NULL");
1410 if(0 == dynamic_cast<FLAC::Metadata::VorbisComment *>(clone_))
1411 return die_("downcast is NULL");
1412 if(*dynamic_cast<FLAC::Metadata::VorbisComment *>(clone_) != block)
1413 return die_("clone is not identical");
1415 printf("testing VorbisComment::~VorbisComment()... ");
1420 printf("PASSED\n\n");
1424 bool test_metadata_object_cuesheet()
1426 unsigned expected_length;
1428 printf("testing class FLAC::Metadata::CueSheet::Track\n");
1430 printf("testing Track::Track()... ");
1431 FLAC::Metadata::CueSheet::Track track0;
1432 if(!track0.is_valid())
1433 return die_("!is_valid()");
1437 printf("testing Track::get_track()... ");
1438 const ::FLAC__StreamMetadata_CueSheet_Track *trackp = track0.get_track();
1440 return die_("returned pointer is NULL");
1443 printf("testing Track::Track(const ::FLAC__StreamMetadata_CueSheet_Track*)... ");
1444 FLAC::Metadata::CueSheet::Track track2(trackp);
1445 if(!track2.is_valid())
1446 return die_("!is_valid()");
1447 if(!track_is_equal_(track2.get_track(), trackp))
1448 return die_("copy is not equal");
1451 printf("testing Track::~Track()... ");
1455 printf("testing Track::Track(const Track &track)... ");
1457 FLAC::Metadata::CueSheet::Track track0copy(track0);
1458 if(!track0copy.is_valid())
1459 return die_("!is_valid()");
1460 if(!track_is_equal_(track0copy.get_track(), track0.get_track()))
1461 return die_("copy is not equal");
1464 printf("testing Track::~Track()... ");
1468 printf("testing Track::operator=(const Track &track)... ");
1469 FLAC::Metadata::CueSheet::Track track1 = track0;
1470 if(!track0.is_valid())
1471 return die_("!is_valid()");
1472 if(!track_is_equal_(track1.get_track(), track0.get_track()))
1473 return die_("copy is not equal");
1476 printf("testing Track::get_offset()... ");
1477 if(track1.get_offset() != 0)
1478 return die_("value mismatch");
1481 printf("testing Track::get_number()... ");
1482 if(track1.get_number() != 0)
1483 return die_("value mismatch");
1486 printf("testing Track::get_isrc()... ");
1487 if(0 != memcmp(track1.get_isrc(), "\0\0\0\0\0\0\0\0\0\0\0\0\0", 13))
1488 return die_("value mismatch");
1491 printf("testing Track::get_type()... ");
1492 if(track1.get_type() != 0)
1493 return die_("value mismatch");
1496 printf("testing Track::get_pre_emphasis()... ");
1497 if(track1.get_pre_emphasis() != 0)
1498 return die_("value mismatch");
1501 printf("testing Track::get_num_indices()... ");
1502 if(track1.get_num_indices() != 0)
1503 return die_("value mismatch");
1506 printf("testing Track::set_offset()... ");
1507 track1.set_offset(588);
1508 if(track1.get_offset() != 588)
1509 return die_("value mismatch");
1512 printf("testing Track::set_number()... ");
1513 track1.set_number(1);
1514 if(track1.get_number() != 1)
1515 return die_("value mismatch");
1518 printf("testing Track::set_isrc()... ");
1519 track1.set_isrc("ABCDE1234567");
1520 if(0 != memcmp(track1.get_isrc(), "ABCDE1234567", 13))
1521 return die_("value mismatch");
1524 printf("testing Track::set_type()... ");
1526 if(track1.get_type() != 1)
1527 return die_("value mismatch");
1530 printf("testing Track::set_pre_emphasis()... ");
1531 track1.set_pre_emphasis(1);
1532 if(track1.get_pre_emphasis() != 1)
1533 return die_("value mismatch");
1536 printf("PASSED\n\n");
1538 printf("testing class FLAC::Metadata::CueSheet\n");
1540 printf("testing CueSheet::CueSheet()... ");
1541 FLAC::Metadata::CueSheet block;
1542 if(!block.is_valid())
1543 return die_("!block.is_valid()");
1545 FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
1546 FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
1547 FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
1548 FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
1549 FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
1551 if(block.get_length() != expected_length) {
1552 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1557 printf("testing CueSheet::CueSheet(const CueSheet &)... +\n");
1558 printf(" CueSheet::operator!=(const CueSheet &)... ");
1560 FLAC::Metadata::CueSheet blockcopy(block);
1561 if(!blockcopy.is_valid())
1562 return die_("!blockcopy.is_valid()");
1563 if(blockcopy != block)
1564 return die_("copy is not identical to original");
1567 printf("testing CueSheet::~CueSheet()... ");
1571 printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata &)... +\n");
1572 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata &)... ");
1574 FLAC::Metadata::CueSheet blockcopy(cuesheet_);
1575 if(!blockcopy.is_valid())
1576 return die_("!blockcopy.is_valid()");
1577 if(blockcopy != cuesheet_)
1578 return die_("copy is not identical to original");
1582 printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *)... +\n");
1583 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1585 FLAC::Metadata::CueSheet blockcopy(&cuesheet_);
1586 if(!blockcopy.is_valid())
1587 return die_("!blockcopy.is_valid()");
1588 if(blockcopy != cuesheet_)
1589 return die_("copy is not identical to original");
1593 printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1594 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1596 FLAC::Metadata::CueSheet blockcopy(&cuesheet_, /*copy=*/true);
1597 if(!blockcopy.is_valid())
1598 return die_("!blockcopy.is_valid()");
1599 if(blockcopy != cuesheet_)
1600 return die_("copy is not identical to original");
1604 printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1605 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1607 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&cuesheet_);
1608 FLAC::Metadata::CueSheet blockcopy(copy, /*copy=*/false);
1609 if(!blockcopy.is_valid())
1610 return die_("!blockcopy.is_valid()");
1611 if(blockcopy != cuesheet_)
1612 return die_("copy is not identical to original");
1616 printf("testing CueSheet::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1617 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1619 FLAC::Metadata::CueSheet blockcopy;
1620 blockcopy.assign(&cuesheet_, /*copy=*/true);
1621 if(!blockcopy.is_valid())
1622 return die_("!blockcopy.is_valid()");
1623 if(blockcopy != cuesheet_)
1624 return die_("copy is not identical to original");
1628 printf("testing CueSheet::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1629 printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1631 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&cuesheet_);
1632 FLAC::Metadata::CueSheet blockcopy;
1633 blockcopy.assign(copy, /*copy=*/false);
1634 if(!blockcopy.is_valid())
1635 return die_("!blockcopy.is_valid()");
1636 if(blockcopy != cuesheet_)
1637 return die_("copy is not identical to original");
1641 printf("testing CueSheet::operator=(const CueSheet &)... +\n");
1642 printf(" CueSheet::operator==(const CueSheet &)... ");
1644 FLAC::Metadata::CueSheet blockcopy = block;
1645 if(!blockcopy.is_valid())
1646 return die_("!blockcopy.is_valid()");
1647 if(!(blockcopy == block))
1648 return die_("copy is not identical to original");
1652 printf("testing CueSheet::operator=(const ::FLAC__StreamMetadata &)... +\n");
1653 printf(" CueSheet::operator==(const ::FLAC__StreamMetadata &)... ");
1655 FLAC::Metadata::CueSheet blockcopy = cuesheet_;
1656 if(!blockcopy.is_valid())
1657 return die_("!blockcopy.is_valid()");
1658 if(!(blockcopy == cuesheet_))
1659 return die_("copy is not identical to original");
1663 printf("testing CueSheet::operator=(const ::FLAC__StreamMetadata *)... +\n");
1664 printf(" CueSheet::operator==(const ::FLAC__StreamMetadata *)... ");
1666 FLAC::Metadata::CueSheet blockcopy = &cuesheet_;
1667 if(!blockcopy.is_valid())
1668 return die_("!blockcopy.is_valid()");
1669 if(!(blockcopy == cuesheet_))
1670 return die_("copy is not identical to original");
1674 printf("testing CueSheet::get_media_catalog_number()... ");
1675 if(0 != strcmp(block.get_media_catalog_number(), ""))
1676 return die_("value mismatch");
1679 printf("testing CueSheet::get_lead_in()... ");
1680 if(block.get_lead_in() != 0)
1681 return die_("value mismatch, expected 0");
1684 printf("testing CueSheet::get_is_cd()... ");
1685 if(block.get_is_cd())
1686 return die_("value mismatch, expected false");
1689 printf("testing CueSheet::get_num_tracks()... ");
1690 if(block.get_num_tracks() != 0)
1691 return die_("value mismatch, expected 0");
1694 printf("testing CueSheet::set_media_catalog_number()... ");
1697 memset(mcn, 0, sizeof(mcn));
1698 safe_strncpy(mcn, "1234567890123", sizeof(mcn));
1699 block.set_media_catalog_number(mcn);
1700 if(0 != memcmp(block.get_media_catalog_number(), mcn, sizeof(mcn)))
1701 return die_("value mismatch");
1705 printf("testing CueSheet::set_lead_in()... ");
1706 block.set_lead_in(588);
1707 if(block.get_lead_in() != 588)
1708 return die_("value mismatch");
1711 printf("testing CueSheet::set_is_cd()... ");
1712 block.set_is_cd(true);
1713 if(!block.get_is_cd())
1714 return die_("value mismatch");
1717 printf("testing CueSheet::insert_track()... +\n");
1718 printf(" CueSheet::get_track()... ");
1719 if(!block.insert_track(0, track0))
1720 return die_("returned false");
1721 if(!track_is_equal_(block.get_track(0).get_track(), track0.get_track()))
1722 return die_("value mismatch");
1725 printf("testing CueSheet::insert_track()... +\n");
1726 printf(" CueSheet::get_track()... ");
1727 if(!block.insert_track(1, track1))
1728 return die_("returned false");
1729 if(!track_is_equal_(block.get_track(1).get_track(), track1.get_track()))
1730 return die_("value mismatch");
1733 ::FLAC__StreamMetadata_CueSheet_Index index0;
1734 index0.offset = 588*4;
1737 printf("testing CueSheet::insert_index(0)... +\n");
1738 printf(" CueSheet::get_track()... +\n");
1739 printf(" CueSheet::Track::get_index()... ");
1740 if(!block.insert_index(0, 0, index0))
1741 return die_("returned false");
1742 if(!index_is_equal_(block.get_track(0).get_index(0), index0))
1743 return die_("value mismatch");
1746 index0.offset = 588*5;
1747 printf("testing CueSheet::Track::set_index()... ");
1749 FLAC::Metadata::CueSheet::Track track_ = block.get_track(0);
1750 track_.set_index(0, index0);
1751 if(!index_is_equal_(track_.get_index(0), index0))
1752 return die_("value mismatch");
1756 index0.offset = 588*6;
1757 printf("testing CueSheet::set_index()... ");
1758 block.set_index(0, 0, index0);
1759 if(!index_is_equal_(block.get_track(0).get_index(0), index0))
1760 return die_("value mismatch");
1763 printf("testing CueSheet::delete_index()... ");
1764 if(!block.delete_index(0, 0))
1765 return die_("returned false");
1766 if(block.get_track(0).get_num_indices() != 0)
1767 return die_("num_indices mismatch");
1771 printf("testing CueSheet::set_track()... +\n");
1772 printf(" CueSheet::get_track()... ");
1773 if(!block.set_track(0, track1))
1774 return die_("returned false");
1775 if(!track_is_equal_(block.get_track(0).get_track(), track1.get_track()))
1776 return die_("value mismatch");
1779 printf("testing CueSheet::delete_track()... ");
1780 if(!block.delete_track(0))
1781 return die_("returned false");
1782 if(block.get_num_tracks() != 1)
1783 return die_("num_tracks mismatch");
1786 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
1787 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
1789 return die_("returned NULL");
1790 if(0 == dynamic_cast<FLAC::Metadata::CueSheet *>(clone_))
1791 return die_("downcast is NULL");
1792 if(*dynamic_cast<FLAC::Metadata::CueSheet *>(clone_) != block)
1793 return die_("clone is not identical");
1795 printf("testing CueSheet::~CueSheet()... ");
1799 printf("PASSED\n\n");
1803 bool test_metadata_object_picture()
1805 unsigned expected_length;
1807 printf("testing class FLAC::Metadata::Picture\n");
1809 printf("testing Picture::Picture()... ");
1810 FLAC::Metadata::Picture block;
1811 if(!block.is_valid())
1812 return die_("!block.is_valid()");
1814 FLAC__STREAM_METADATA_PICTURE_TYPE_LEN +
1815 FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN +
1816 FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN +
1817 FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN +
1818 FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN +
1819 FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN +
1820 FLAC__STREAM_METADATA_PICTURE_COLORS_LEN +
1821 FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN
1823 if(block.get_length() != expected_length) {
1824 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1829 printf("testing Picture::Picture(const Picture &)... +\n");
1830 printf(" Picture::operator!=(const Picture &)... ");
1832 FLAC::Metadata::Picture blockcopy(block);
1833 if(!blockcopy.is_valid())
1834 return die_("!blockcopy.is_valid()");
1835 if(blockcopy != block)
1836 return die_("copy is not identical to original");
1839 printf("testing Picture::~Picture()... ");
1843 printf("testing Picture::Picture(const ::FLAC__StreamMetadata &)... +\n");
1844 printf(" Picture::operator!=(const ::FLAC__StreamMetadata &)... ");
1846 FLAC::Metadata::Picture blockcopy(picture_);
1847 if(!blockcopy.is_valid())
1848 return die_("!blockcopy.is_valid()");
1849 if(blockcopy != picture_)
1850 return die_("copy is not identical to original");
1854 printf("testing Picture::Picture(const ::FLAC__StreamMetadata *)... +\n");
1855 printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1857 FLAC::Metadata::Picture blockcopy(&picture_);
1858 if(!blockcopy.is_valid())
1859 return die_("!blockcopy.is_valid()");
1860 if(blockcopy != picture_)
1861 return die_("copy is not identical to original");
1865 printf("testing Picture::Picture(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1866 printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1868 FLAC::Metadata::Picture blockcopy(&picture_, /*copy=*/true);
1869 if(!blockcopy.is_valid())
1870 return die_("!blockcopy.is_valid()");
1871 if(blockcopy != picture_)
1872 return die_("copy is not identical to original");
1876 printf("testing Picture::Picture(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1877 printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1879 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&picture_);
1880 FLAC::Metadata::Picture blockcopy(copy, /*copy=*/false);
1881 if(!blockcopy.is_valid())
1882 return die_("!blockcopy.is_valid()");
1883 if(blockcopy != picture_)
1884 return die_("copy is not identical to original");
1888 printf("testing Picture::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1889 printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1891 FLAC::Metadata::Picture blockcopy;
1892 blockcopy.assign(&picture_, /*copy=*/true);
1893 if(!blockcopy.is_valid())
1894 return die_("!blockcopy.is_valid()");
1895 if(blockcopy != picture_)
1896 return die_("copy is not identical to original");
1900 printf("testing Picture::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1901 printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1903 ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&picture_);
1904 FLAC::Metadata::Picture blockcopy;
1905 blockcopy.assign(copy, /*copy=*/false);
1906 if(!blockcopy.is_valid())
1907 return die_("!blockcopy.is_valid()");
1908 if(blockcopy != picture_)
1909 return die_("copy is not identical to original");
1913 printf("testing Picture::operator=(const Picture &)... +\n");
1914 printf(" Picture::operator==(const Picture &)... ");
1916 FLAC::Metadata::Picture blockcopy = block;
1917 if(!blockcopy.is_valid())
1918 return die_("!blockcopy.is_valid()");
1919 if(!(blockcopy == block))
1920 return die_("copy is not identical to original");
1924 printf("testing Picture::operator=(const ::FLAC__StreamMetadata &)... +\n");
1925 printf(" Picture::operator==(const ::FLAC__StreamMetadata &)... ");
1927 FLAC::Metadata::Picture blockcopy = picture_;
1928 if(!blockcopy.is_valid())
1929 return die_("!blockcopy.is_valid()");
1930 if(!(blockcopy == picture_))
1931 return die_("copy is not identical to original");
1935 printf("testing Picture::operator=(const ::FLAC__StreamMetadata *)... +\n");
1936 printf(" Picture::operator==(const ::FLAC__StreamMetadata *)... ");
1938 FLAC::Metadata::Picture blockcopy = &picture_;
1939 if(!blockcopy.is_valid())
1940 return die_("!blockcopy.is_valid()");
1941 if(!(blockcopy == picture_))
1942 return die_("copy is not identical to original");
1946 printf("testing Picture::get_type()... ");
1947 if(block.get_type() != ::FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER)
1948 return die_("value mismatch, expected ::FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER");
1951 printf("testing Picture::set_type()... +\n");
1952 printf(" Picture::get_type()... ");
1953 block.set_type(::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA);
1954 if(block.get_type() != ::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA)
1955 return die_("value mismatch, expected ::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA");
1958 printf("testing Picture::set_mime_type()... ");
1959 if(!block.set_mime_type("qmage/jpeg"))
1960 return die_("returned false");
1962 picture_.data.picture.mime_type[0] = 'q';
1964 printf("testing Picture::get_mime_type()... ");
1965 if(0 != strcmp(block.get_mime_type(), picture_.data.picture.mime_type))
1966 return die_("value mismatch");
1969 printf("testing Picture::set_description()... ");
1970 if(!block.set_description((const FLAC__byte*)"qesc"))
1971 return die_("returned false");
1973 picture_.data.picture.description[0] = 'q';
1975 printf("testing Picture::get_description()... ");
1976 if(0 != strcmp((const char *)block.get_description(), (const char *)picture_.data.picture.description))
1977 return die_("value mismatch");
1980 printf("testing Picture::get_width()... ");
1981 if(block.get_width() != 0)
1982 return die_("value mismatch, expected 0");
1985 printf("testing Picture::set_width()... +\n");
1986 printf(" Picture::get_width()... ");
1987 block.set_width(400);
1988 if(block.get_width() != 400)
1989 return die_("value mismatch, expected 400");
1992 printf("testing Picture::get_height()... ");
1993 if(block.get_height() != 0)
1994 return die_("value mismatch, expected 0");
1997 printf("testing Picture::set_height()... +\n");
1998 printf(" Picture::get_height()... ");
1999 block.set_height(200);
2000 if(block.get_height() != 200)
2001 return die_("value mismatch, expected 200");
2004 printf("testing Picture::get_depth()... ");
2005 if(block.get_depth() != 0)
2006 return die_("value mismatch, expected 0");
2009 printf("testing Picture::set_depth()... +\n");
2010 printf(" Picture::get_depth()... ");
2011 block.set_depth(16);
2012 if(block.get_depth() != 16)
2013 return die_("value mismatch, expected 16");
2016 printf("testing Picture::get_colors()... ");
2017 if(block.get_colors() != 0)
2018 return die_("value mismatch, expected 0");
2021 printf("testing Picture::set_colors()... +\n");
2022 printf(" Picture::get_colors()... ");
2023 block.set_colors(1u>16);
2024 if(block.get_colors() != (1u>16))
2025 return die_("value mismatch, expected 2^16");
2028 printf("testing Picture::get_data_length()... ");
2029 if(block.get_data_length() != 0)
2030 return die_("value mismatch, expected 0");
2033 printf("testing Picture::set_data()... ");
2034 if(!block.set_data((const FLAC__byte*)"qOMEJPEGDATA", strlen("qOMEJPEGDATA")))
2035 return die_("returned false");
2037 picture_.data.picture.data[0] = 'q';
2039 printf("testing Picture::get_data()... ");
2040 if(block.get_data_length() != picture_.data.picture.data_length)
2041 return die_("length mismatch");
2042 if(0 != memcmp(block.get_data(), picture_.data.picture.data, picture_.data.picture.data_length))
2043 return die_("value mismatch");
2046 printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
2047 FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
2049 return die_("returned NULL");
2050 if(0 == dynamic_cast<FLAC::Metadata::Picture *>(clone_))
2051 return die_("downcast is NULL");
2052 if(*dynamic_cast<FLAC::Metadata::Picture *>(clone_) != block)
2053 return die_("clone is not identical");
2055 printf("testing Picture::~Picture()... ");
2060 printf("PASSED\n\n");
2064 bool test_metadata_object()
2066 printf("\n+++ libFLAC++ unit test: metadata objects\n\n");
2068 init_metadata_blocks_();
2070 if(!test_metadata_object_streaminfo())
2073 if(!test_metadata_object_padding())
2076 if(!test_metadata_object_application())
2079 if(!test_metadata_object_seektable())
2082 if(!test_metadata_object_vorbiscomment())
2085 if(!test_metadata_object_cuesheet())
2088 if(!test_metadata_object_picture())
2091 free_metadata_blocks_();