1*600f14f4SXin Li /* test_libFLAC++ - Unit tester for libFLAC++
2*600f14f4SXin Li * Copyright (C) 2002-2009 Josh Coalson
3*600f14f4SXin Li * Copyright (C) 2011-2023 Xiph.Org Foundation
4*600f14f4SXin Li *
5*600f14f4SXin Li * This program is free software; you can redistribute it and/or
6*600f14f4SXin Li * modify it under the terms of the GNU General Public License
7*600f14f4SXin Li * as published by the Free Software Foundation; either version 2
8*600f14f4SXin Li * of the License, or (at your option) any later version.
9*600f14f4SXin Li *
10*600f14f4SXin Li * This program is distributed in the hope that it will be useful,
11*600f14f4SXin Li * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*600f14f4SXin Li * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*600f14f4SXin Li * GNU General Public License for more details.
14*600f14f4SXin Li *
15*600f14f4SXin Li * You should have received a copy of the GNU General Public License along
16*600f14f4SXin Li * with this program; if not, write to the Free Software Foundation, Inc.,
17*600f14f4SXin Li * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*600f14f4SXin Li */
19*600f14f4SXin Li
20*600f14f4SXin Li #ifdef HAVE_CONFIG_H
21*600f14f4SXin Li #include "config.h"
22*600f14f4SXin Li #endif
23*600f14f4SXin Li
24*600f14f4SXin Li #include <stdio.h>
25*600f14f4SXin Li #include <stdlib.h> /* for malloc() */
26*600f14f4SXin Li #include <string.h> /* for memcmp() */
27*600f14f4SXin Li #include "FLAC/assert.h"
28*600f14f4SXin Li #include "FLAC++/metadata.h"
29*600f14f4SXin Li #include "share/safe_str.h"
30*600f14f4SXin Li
31*600f14f4SXin Li static ::FLAC__StreamMetadata streaminfo_, padding_, seektable_, application_, vorbiscomment_, cuesheet_, picture_;
32*600f14f4SXin Li
die_(const char * msg)33*600f14f4SXin Li static bool die_(const char *msg)
34*600f14f4SXin Li {
35*600f14f4SXin Li printf("FAILED, %s\n", msg);
36*600f14f4SXin Li return false;
37*600f14f4SXin Li }
38*600f14f4SXin Li
malloc_or_die_(size_t size)39*600f14f4SXin Li static void *malloc_or_die_(size_t size)
40*600f14f4SXin Li {
41*600f14f4SXin Li void *x = malloc(size);
42*600f14f4SXin Li if(0 == x) {
43*600f14f4SXin Li fprintf(stderr, "ERROR: out of memory allocating %u bytes\n", (uint32_t)size);
44*600f14f4SXin Li exit(1);
45*600f14f4SXin Li }
46*600f14f4SXin Li return x;
47*600f14f4SXin Li }
48*600f14f4SXin Li
strdup_or_die_(const char * s)49*600f14f4SXin Li static char *strdup_or_die_(const char *s)
50*600f14f4SXin Li {
51*600f14f4SXin Li char *x = strdup(s);
52*600f14f4SXin Li if(0 == x) {
53*600f14f4SXin Li fprintf(stderr, "ERROR: out of memory copying string \"%s\"\n", s);
54*600f14f4SXin Li exit(1);
55*600f14f4SXin Li }
56*600f14f4SXin Li return x;
57*600f14f4SXin Li }
58*600f14f4SXin Li
index_is_equal_(const::FLAC__StreamMetadata_CueSheet_Index & indx,const::FLAC__StreamMetadata_CueSheet_Index & indxcopy)59*600f14f4SXin Li static bool index_is_equal_(const ::FLAC__StreamMetadata_CueSheet_Index &indx, const ::FLAC__StreamMetadata_CueSheet_Index &indxcopy)
60*600f14f4SXin Li {
61*600f14f4SXin Li if(indxcopy.offset != indx.offset)
62*600f14f4SXin Li return false;
63*600f14f4SXin Li if(indxcopy.number != indx.number)
64*600f14f4SXin Li return false;
65*600f14f4SXin Li return true;
66*600f14f4SXin Li }
67*600f14f4SXin Li
track_is_equal_(const::FLAC__StreamMetadata_CueSheet_Track * track,const::FLAC__StreamMetadata_CueSheet_Track * trackcopy)68*600f14f4SXin Li static bool track_is_equal_(const ::FLAC__StreamMetadata_CueSheet_Track *track, const ::FLAC__StreamMetadata_CueSheet_Track *trackcopy)
69*600f14f4SXin Li {
70*600f14f4SXin Li uint32_t i;
71*600f14f4SXin Li
72*600f14f4SXin Li if(trackcopy->offset != track->offset)
73*600f14f4SXin Li return false;
74*600f14f4SXin Li if(trackcopy->number != track->number)
75*600f14f4SXin Li return false;
76*600f14f4SXin Li if(0 != strcmp(trackcopy->isrc, track->isrc))
77*600f14f4SXin Li return false;
78*600f14f4SXin Li if(trackcopy->type != track->type)
79*600f14f4SXin Li return false;
80*600f14f4SXin Li if(trackcopy->pre_emphasis != track->pre_emphasis)
81*600f14f4SXin Li return false;
82*600f14f4SXin Li if(trackcopy->num_indices != track->num_indices)
83*600f14f4SXin Li return false;
84*600f14f4SXin Li if(0 == track->indices || 0 == trackcopy->indices) {
85*600f14f4SXin Li if(track->indices != trackcopy->indices)
86*600f14f4SXin Li return false;
87*600f14f4SXin Li }
88*600f14f4SXin Li else {
89*600f14f4SXin Li for(i = 0; i < track->num_indices; i++) {
90*600f14f4SXin Li if(!index_is_equal_(trackcopy->indices[i], track->indices[i]))
91*600f14f4SXin Li return false;
92*600f14f4SXin Li }
93*600f14f4SXin Li }
94*600f14f4SXin Li return true;
95*600f14f4SXin Li }
96*600f14f4SXin Li
init_metadata_blocks_()97*600f14f4SXin Li static void init_metadata_blocks_()
98*600f14f4SXin Li {
99*600f14f4SXin Li streaminfo_.is_last = false;
100*600f14f4SXin Li streaminfo_.type = ::FLAC__METADATA_TYPE_STREAMINFO;
101*600f14f4SXin Li streaminfo_.length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
102*600f14f4SXin Li streaminfo_.data.stream_info.min_blocksize = 576;
103*600f14f4SXin Li streaminfo_.data.stream_info.max_blocksize = 576;
104*600f14f4SXin Li streaminfo_.data.stream_info.min_framesize = 0;
105*600f14f4SXin Li streaminfo_.data.stream_info.max_framesize = 0;
106*600f14f4SXin Li streaminfo_.data.stream_info.sample_rate = 44100;
107*600f14f4SXin Li streaminfo_.data.stream_info.channels = 1;
108*600f14f4SXin Li streaminfo_.data.stream_info.bits_per_sample = 8;
109*600f14f4SXin Li streaminfo_.data.stream_info.total_samples = 0;
110*600f14f4SXin Li memset(streaminfo_.data.stream_info.md5sum, 0, 16);
111*600f14f4SXin Li
112*600f14f4SXin Li padding_.is_last = false;
113*600f14f4SXin Li padding_.type = ::FLAC__METADATA_TYPE_PADDING;
114*600f14f4SXin Li padding_.length = 1234;
115*600f14f4SXin Li
116*600f14f4SXin Li seektable_.is_last = false;
117*600f14f4SXin Li seektable_.type = ::FLAC__METADATA_TYPE_SEEKTABLE;
118*600f14f4SXin Li seektable_.data.seek_table.num_points = 2;
119*600f14f4SXin Li seektable_.length = seektable_.data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
120*600f14f4SXin Li seektable_.data.seek_table.points = (::FLAC__StreamMetadata_SeekPoint*)malloc_or_die_(seektable_.data.seek_table.num_points * sizeof(::FLAC__StreamMetadata_SeekPoint));
121*600f14f4SXin Li seektable_.data.seek_table.points[0].sample_number = 0;
122*600f14f4SXin Li seektable_.data.seek_table.points[0].stream_offset = 0;
123*600f14f4SXin Li seektable_.data.seek_table.points[0].frame_samples = streaminfo_.data.stream_info.min_blocksize;
124*600f14f4SXin Li seektable_.data.seek_table.points[1].sample_number = ::FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
125*600f14f4SXin Li seektable_.data.seek_table.points[1].stream_offset = 1000;
126*600f14f4SXin Li seektable_.data.seek_table.points[1].frame_samples = streaminfo_.data.stream_info.min_blocksize;
127*600f14f4SXin Li
128*600f14f4SXin Li application_.is_last = false;
129*600f14f4SXin Li application_.type = ::FLAC__METADATA_TYPE_APPLICATION;
130*600f14f4SXin Li application_.length = 8;
131*600f14f4SXin Li memcpy(application_.data.application.id, "\xfe\xdc\xba\x98", 4);
132*600f14f4SXin Li application_.data.application.data = (FLAC__byte*)malloc_or_die_(4);
133*600f14f4SXin Li memcpy(application_.data.application.data, "\xf0\xe1\xd2\xc3", 4);
134*600f14f4SXin Li
135*600f14f4SXin Li vorbiscomment_.is_last = false;
136*600f14f4SXin Li vorbiscomment_.type = ::FLAC__METADATA_TYPE_VORBIS_COMMENT;
137*600f14f4SXin Li vorbiscomment_.length = (4 + 5) + 4 + (4 + 12) + (4 + 12);
138*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.vendor_string.length = 5;
139*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.vendor_string.entry = (FLAC__byte*)malloc_or_die_(5+1);
140*600f14f4SXin Li memcpy(vorbiscomment_.data.vorbis_comment.vendor_string.entry, "name0", 5+1);
141*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.num_comments = 2;
142*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.comments = (::FLAC__StreamMetadata_VorbisComment_Entry*)malloc_or_die_(vorbiscomment_.data.vorbis_comment.num_comments * sizeof(::FLAC__StreamMetadata_VorbisComment_Entry));
143*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.comments[0].length = 12;
144*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.comments[0].entry = (FLAC__byte*)malloc_or_die_(12+1);
145*600f14f4SXin Li memcpy(vorbiscomment_.data.vorbis_comment.comments[0].entry, "name2=value2", 12+1);
146*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.comments[1].length = 12;
147*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.comments[1].entry = (FLAC__byte*)malloc_or_die_(12+1);
148*600f14f4SXin Li memcpy(vorbiscomment_.data.vorbis_comment.comments[1].entry, "name3=value3", 12+1);
149*600f14f4SXin Li
150*600f14f4SXin Li cuesheet_.is_last = false;
151*600f14f4SXin Li cuesheet_.type = ::FLAC__METADATA_TYPE_CUESHEET;
152*600f14f4SXin Li cuesheet_.length =
153*600f14f4SXin Li /* cuesheet guts */
154*600f14f4SXin Li (
155*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
156*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
157*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
158*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
159*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
160*600f14f4SXin Li ) / 8 +
161*600f14f4SXin Li /* 2 tracks */
162*600f14f4SXin Li 2 * (
163*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN +
164*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN +
165*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN +
166*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN +
167*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN +
168*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN +
169*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN
170*600f14f4SXin Li ) / 8 +
171*600f14f4SXin Li /* 3 index points */
172*600f14f4SXin Li 3 * (
173*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN +
174*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN +
175*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN
176*600f14f4SXin Li ) / 8
177*600f14f4SXin Li ;
178*600f14f4SXin Li memset(cuesheet_.data.cue_sheet.media_catalog_number, 0, sizeof(cuesheet_.data.cue_sheet.media_catalog_number));
179*600f14f4SXin Li cuesheet_.data.cue_sheet.media_catalog_number[0] = 'j';
180*600f14f4SXin Li cuesheet_.data.cue_sheet.media_catalog_number[1] = 'C';
181*600f14f4SXin Li cuesheet_.data.cue_sheet.lead_in = 159;
182*600f14f4SXin Li cuesheet_.data.cue_sheet.is_cd = true;
183*600f14f4SXin Li cuesheet_.data.cue_sheet.num_tracks = 2;
184*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks = (FLAC__StreamMetadata_CueSheet_Track*)malloc_or_die_(cuesheet_.data.cue_sheet.num_tracks * sizeof(FLAC__StreamMetadata_CueSheet_Track));
185*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].offset = 1;
186*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].number = 1;
187*600f14f4SXin Li memcpy(cuesheet_.data.cue_sheet.tracks[0].isrc, "ACBDE1234567", sizeof(cuesheet_.data.cue_sheet.tracks[0].isrc));
188*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].type = 0;
189*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].pre_emphasis = 1;
190*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].num_indices = 2;
191*600f14f4SXin Li 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));
192*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].indices[0].offset = 0;
193*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].indices[0].number = 0;
194*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].indices[1].offset = 1234567890;
195*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[0].indices[1].number = 1;
196*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].offset = 2345678901u;
197*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].number = 2;
198*600f14f4SXin Li memcpy(cuesheet_.data.cue_sheet.tracks[1].isrc, "ACBDE7654321", sizeof(cuesheet_.data.cue_sheet.tracks[1].isrc));
199*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].type = 1;
200*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].pre_emphasis = 0;
201*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].num_indices = 1;
202*600f14f4SXin Li 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));
203*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].indices[0].offset = 0;
204*600f14f4SXin Li cuesheet_.data.cue_sheet.tracks[1].indices[0].number = 1;
205*600f14f4SXin Li
206*600f14f4SXin Li picture_.is_last = true;
207*600f14f4SXin Li picture_.type = FLAC__METADATA_TYPE_PICTURE;
208*600f14f4SXin Li picture_.length =
209*600f14f4SXin Li (
210*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_TYPE_LEN +
211*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN + /* will add the length for the string later */
212*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN + /* will add the length for the string later */
213*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN +
214*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN +
215*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN +
216*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_COLORS_LEN +
217*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN /* will add the length for the data later */
218*600f14f4SXin Li ) / 8
219*600f14f4SXin Li ;
220*600f14f4SXin Li picture_.data.picture.type = FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER;
221*600f14f4SXin Li picture_.data.picture.mime_type = strdup_or_die_("image/jpeg");
222*600f14f4SXin Li picture_.length += strlen(picture_.data.picture.mime_type);
223*600f14f4SXin Li picture_.data.picture.description = (FLAC__byte*)strdup_or_die_("desc");
224*600f14f4SXin Li picture_.length += strlen((const char *)picture_.data.picture.description);
225*600f14f4SXin Li picture_.data.picture.width = 300;
226*600f14f4SXin Li picture_.data.picture.height = 300;
227*600f14f4SXin Li picture_.data.picture.depth = 24;
228*600f14f4SXin Li picture_.data.picture.colors = 0;
229*600f14f4SXin Li picture_.data.picture.data = (FLAC__byte*)strdup_or_die_("SOMEJPEGDATA");
230*600f14f4SXin Li picture_.data.picture.data_length = strlen((const char *)picture_.data.picture.data);
231*600f14f4SXin Li picture_.length += picture_.data.picture.data_length;
232*600f14f4SXin Li }
233*600f14f4SXin Li
free_metadata_blocks_()234*600f14f4SXin Li static void free_metadata_blocks_()
235*600f14f4SXin Li {
236*600f14f4SXin Li free(seektable_.data.seek_table.points);
237*600f14f4SXin Li free(application_.data.application.data);
238*600f14f4SXin Li free(vorbiscomment_.data.vorbis_comment.vendor_string.entry);
239*600f14f4SXin Li free(vorbiscomment_.data.vorbis_comment.comments[0].entry);
240*600f14f4SXin Li free(vorbiscomment_.data.vorbis_comment.comments[1].entry);
241*600f14f4SXin Li free(vorbiscomment_.data.vorbis_comment.comments);
242*600f14f4SXin Li free(cuesheet_.data.cue_sheet.tracks[0].indices);
243*600f14f4SXin Li free(cuesheet_.data.cue_sheet.tracks[1].indices);
244*600f14f4SXin Li free(cuesheet_.data.cue_sheet.tracks);
245*600f14f4SXin Li free(picture_.data.picture.mime_type);
246*600f14f4SXin Li free(picture_.data.picture.description);
247*600f14f4SXin Li free(picture_.data.picture.data);
248*600f14f4SXin Li }
249*600f14f4SXin Li
test_metadata_object_streaminfo()250*600f14f4SXin Li bool test_metadata_object_streaminfo()
251*600f14f4SXin Li {
252*600f14f4SXin Li uint32_t expected_length;
253*600f14f4SXin Li
254*600f14f4SXin Li printf("testing class FLAC::Metadata::StreamInfo\n");
255*600f14f4SXin Li
256*600f14f4SXin Li printf("testing StreamInfo::StreamInfo()... ");
257*600f14f4SXin Li FLAC::Metadata::StreamInfo block;
258*600f14f4SXin Li if(!block.is_valid())
259*600f14f4SXin Li return die_("!block.is_valid()");
260*600f14f4SXin Li expected_length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
261*600f14f4SXin Li if(block.get_length() != expected_length) {
262*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
263*600f14f4SXin Li return false;
264*600f14f4SXin Li }
265*600f14f4SXin Li printf("OK\n");
266*600f14f4SXin Li
267*600f14f4SXin Li printf("testing StreamInfo::StreamInfo(const StreamInfo &)... +\n");
268*600f14f4SXin Li printf(" StreamInfo::operator!=(const StreamInfo &)... ");
269*600f14f4SXin Li {
270*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy(block);
271*600f14f4SXin Li if(!blockcopy.is_valid())
272*600f14f4SXin Li return die_("!blockcopy.is_valid()");
273*600f14f4SXin Li if(blockcopy != block)
274*600f14f4SXin Li return die_("copy is not identical to original");
275*600f14f4SXin Li printf("OK\n");
276*600f14f4SXin Li
277*600f14f4SXin Li printf("testing StreamInfo::~StreamInfo()... ");
278*600f14f4SXin Li }
279*600f14f4SXin Li printf("OK\n");
280*600f14f4SXin Li
281*600f14f4SXin Li printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata &)... +\n");
282*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata &)... ");
283*600f14f4SXin Li {
284*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy(streaminfo_);
285*600f14f4SXin Li if(!blockcopy.is_valid())
286*600f14f4SXin Li return die_("!blockcopy.is_valid()");
287*600f14f4SXin Li if(blockcopy != streaminfo_)
288*600f14f4SXin Li return die_("copy is not identical to original");
289*600f14f4SXin Li printf("OK\n");
290*600f14f4SXin Li }
291*600f14f4SXin Li
292*600f14f4SXin Li printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *)... +\n");
293*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
294*600f14f4SXin Li {
295*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy(&streaminfo_);
296*600f14f4SXin Li if(!blockcopy.is_valid())
297*600f14f4SXin Li return die_("!blockcopy.is_valid()");
298*600f14f4SXin Li if(blockcopy != streaminfo_)
299*600f14f4SXin Li return die_("copy is not identical to original");
300*600f14f4SXin Li printf("OK\n");
301*600f14f4SXin Li }
302*600f14f4SXin Li
303*600f14f4SXin Li printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *, copy=true)... +\n");
304*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
305*600f14f4SXin Li {
306*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy(&streaminfo_, /*copy=*/true);
307*600f14f4SXin Li if(!blockcopy.is_valid())
308*600f14f4SXin Li return die_("!blockcopy.is_valid()");
309*600f14f4SXin Li if(blockcopy != streaminfo_)
310*600f14f4SXin Li return die_("copy is not identical to original");
311*600f14f4SXin Li printf("OK\n");
312*600f14f4SXin Li }
313*600f14f4SXin Li
314*600f14f4SXin Li printf("testing StreamInfo::StreamInfo(const ::FLAC__StreamMetadata *, copy=false)... +\n");
315*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
316*600f14f4SXin Li {
317*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&streaminfo_);
318*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy(copy, /*copy=*/false);
319*600f14f4SXin Li if(!blockcopy.is_valid())
320*600f14f4SXin Li return die_("!blockcopy.is_valid()");
321*600f14f4SXin Li if(blockcopy != streaminfo_)
322*600f14f4SXin Li return die_("copy is not identical to original");
323*600f14f4SXin Li printf("OK\n");
324*600f14f4SXin Li }
325*600f14f4SXin Li
326*600f14f4SXin Li printf("testing StreamInfo::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
327*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
328*600f14f4SXin Li {
329*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy;
330*600f14f4SXin Li blockcopy.assign(&streaminfo_, /*copy=*/true);
331*600f14f4SXin Li if(!blockcopy.is_valid())
332*600f14f4SXin Li return die_("!blockcopy.is_valid()");
333*600f14f4SXin Li if(blockcopy != streaminfo_)
334*600f14f4SXin Li return die_("copy is not identical to original");
335*600f14f4SXin Li printf("OK\n");
336*600f14f4SXin Li }
337*600f14f4SXin Li
338*600f14f4SXin Li printf("testing StreamInfo::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
339*600f14f4SXin Li printf(" StreamInfo::operator!=(const ::FLAC__StreamMetadata *)... ");
340*600f14f4SXin Li {
341*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&streaminfo_);
342*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy;
343*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
344*600f14f4SXin Li if(!blockcopy.is_valid())
345*600f14f4SXin Li return die_("!blockcopy.is_valid()");
346*600f14f4SXin Li if(blockcopy != streaminfo_)
347*600f14f4SXin Li return die_("copy is not identical to original");
348*600f14f4SXin Li printf("OK\n");
349*600f14f4SXin Li }
350*600f14f4SXin Li
351*600f14f4SXin Li printf("testing StreamInfo::operator=(const StreamInfo &)... +\n");
352*600f14f4SXin Li printf(" StreamInfo::operator==(const StreamInfo &)... ");
353*600f14f4SXin Li {
354*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy = block;
355*600f14f4SXin Li if(!blockcopy.is_valid())
356*600f14f4SXin Li return die_("!blockcopy.is_valid()");
357*600f14f4SXin Li if(!(blockcopy == block))
358*600f14f4SXin Li return die_("copy is not identical to original");
359*600f14f4SXin Li printf("OK\n");
360*600f14f4SXin Li }
361*600f14f4SXin Li
362*600f14f4SXin Li printf("testing StreamInfo::operator=(const ::FLAC__StreamMetadata &)... +\n");
363*600f14f4SXin Li printf(" StreamInfo::operator==(const ::FLAC__StreamMetadata &)... ");
364*600f14f4SXin Li {
365*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy = streaminfo_;
366*600f14f4SXin Li if(!blockcopy.is_valid())
367*600f14f4SXin Li return die_("!blockcopy.is_valid()");
368*600f14f4SXin Li if(!(blockcopy == streaminfo_))
369*600f14f4SXin Li return die_("copy is not identical to original");
370*600f14f4SXin Li printf("OK\n");
371*600f14f4SXin Li }
372*600f14f4SXin Li
373*600f14f4SXin Li printf("testing StreamInfo::operator=(const ::FLAC__StreamMetadata *)... +\n");
374*600f14f4SXin Li printf(" StreamInfo::operator==(const ::FLAC__StreamMetadata *)... ");
375*600f14f4SXin Li {
376*600f14f4SXin Li FLAC::Metadata::StreamInfo blockcopy = &streaminfo_;
377*600f14f4SXin Li if(!blockcopy.is_valid())
378*600f14f4SXin Li return die_("!blockcopy.is_valid()");
379*600f14f4SXin Li if(!(blockcopy == streaminfo_))
380*600f14f4SXin Li return die_("copy is not identical to original");
381*600f14f4SXin Li printf("OK\n");
382*600f14f4SXin Li }
383*600f14f4SXin Li
384*600f14f4SXin Li printf("testing StreamInfo::set_min_blocksize()... ");
385*600f14f4SXin Li block.set_min_blocksize(streaminfo_.data.stream_info.min_blocksize);
386*600f14f4SXin Li printf("OK\n");
387*600f14f4SXin Li
388*600f14f4SXin Li printf("testing StreamInfo::set_max_blocksize()... ");
389*600f14f4SXin Li block.set_max_blocksize(streaminfo_.data.stream_info.max_blocksize);
390*600f14f4SXin Li printf("OK\n");
391*600f14f4SXin Li
392*600f14f4SXin Li printf("testing StreamInfo::set_min_framesize()... ");
393*600f14f4SXin Li block.set_min_framesize(streaminfo_.data.stream_info.min_framesize);
394*600f14f4SXin Li printf("OK\n");
395*600f14f4SXin Li
396*600f14f4SXin Li printf("testing StreamInfo::set_max_framesize()... ");
397*600f14f4SXin Li block.set_max_framesize(streaminfo_.data.stream_info.max_framesize);
398*600f14f4SXin Li printf("OK\n");
399*600f14f4SXin Li
400*600f14f4SXin Li printf("testing StreamInfo::set_sample_rate()... ");
401*600f14f4SXin Li block.set_sample_rate(streaminfo_.data.stream_info.sample_rate);
402*600f14f4SXin Li printf("OK\n");
403*600f14f4SXin Li
404*600f14f4SXin Li printf("testing StreamInfo::set_channels()... ");
405*600f14f4SXin Li block.set_channels(streaminfo_.data.stream_info.channels);
406*600f14f4SXin Li printf("OK\n");
407*600f14f4SXin Li
408*600f14f4SXin Li printf("testing StreamInfo::set_bits_per_sample()... ");
409*600f14f4SXin Li block.set_bits_per_sample(streaminfo_.data.stream_info.bits_per_sample);
410*600f14f4SXin Li printf("OK\n");
411*600f14f4SXin Li
412*600f14f4SXin Li printf("testing StreamInfo::set_total_samples()... ");
413*600f14f4SXin Li block.set_total_samples(streaminfo_.data.stream_info.total_samples);
414*600f14f4SXin Li printf("OK\n");
415*600f14f4SXin Li
416*600f14f4SXin Li printf("testing StreamInfo::set_md5sum()... ");
417*600f14f4SXin Li block.set_md5sum(streaminfo_.data.stream_info.md5sum);
418*600f14f4SXin Li printf("OK\n");
419*600f14f4SXin Li
420*600f14f4SXin Li printf("testing StreamInfo::get_min_blocksize()... ");
421*600f14f4SXin Li if(block.get_min_blocksize() != streaminfo_.data.stream_info.min_blocksize)
422*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
423*600f14f4SXin Li printf("OK\n");
424*600f14f4SXin Li
425*600f14f4SXin Li printf("testing StreamInfo::get_max_blocksize()... ");
426*600f14f4SXin Li if(block.get_max_blocksize() != streaminfo_.data.stream_info.max_blocksize)
427*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
428*600f14f4SXin Li printf("OK\n");
429*600f14f4SXin Li
430*600f14f4SXin Li printf("testing StreamInfo::get_min_framesize()... ");
431*600f14f4SXin Li if(block.get_min_framesize() != streaminfo_.data.stream_info.min_framesize)
432*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
433*600f14f4SXin Li printf("OK\n");
434*600f14f4SXin Li
435*600f14f4SXin Li printf("testing StreamInfo::get_max_framesize()... ");
436*600f14f4SXin Li if(block.get_max_framesize() != streaminfo_.data.stream_info.max_framesize)
437*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
438*600f14f4SXin Li printf("OK\n");
439*600f14f4SXin Li
440*600f14f4SXin Li printf("testing StreamInfo::get_sample_rate()... ");
441*600f14f4SXin Li if(block.get_sample_rate() != streaminfo_.data.stream_info.sample_rate)
442*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
443*600f14f4SXin Li printf("OK\n");
444*600f14f4SXin Li
445*600f14f4SXin Li printf("testing StreamInfo::get_channels()... ");
446*600f14f4SXin Li if(block.get_channels() != streaminfo_.data.stream_info.channels)
447*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
448*600f14f4SXin Li printf("OK\n");
449*600f14f4SXin Li
450*600f14f4SXin Li printf("testing StreamInfo::get_bits_per_sample()... ");
451*600f14f4SXin Li if(block.get_bits_per_sample() != streaminfo_.data.stream_info.bits_per_sample)
452*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
453*600f14f4SXin Li printf("OK\n");
454*600f14f4SXin Li
455*600f14f4SXin Li printf("testing StreamInfo::get_total_samples()... ");
456*600f14f4SXin Li if(block.get_total_samples() != streaminfo_.data.stream_info.total_samples)
457*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
458*600f14f4SXin Li printf("OK\n");
459*600f14f4SXin Li
460*600f14f4SXin Li printf("testing StreamInfo::get_md5sum()... ");
461*600f14f4SXin Li if(0 != memcmp(block.get_md5sum(), streaminfo_.data.stream_info.md5sum, 16))
462*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
463*600f14f4SXin Li printf("OK\n");
464*600f14f4SXin Li
465*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
466*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
467*600f14f4SXin Li if(0 == clone_)
468*600f14f4SXin Li return die_("returned NULL");
469*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::StreamInfo *>(clone_))
470*600f14f4SXin Li return die_("downcast is NULL");
471*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::StreamInfo *>(clone_) != block)
472*600f14f4SXin Li return die_("clone is not identical");
473*600f14f4SXin Li printf("OK\n");
474*600f14f4SXin Li printf("testing StreamInfo::~StreamInfo()... ");
475*600f14f4SXin Li delete clone_;
476*600f14f4SXin Li printf("OK\n");
477*600f14f4SXin Li
478*600f14f4SXin Li
479*600f14f4SXin Li printf("PASSED\n\n");
480*600f14f4SXin Li return true;
481*600f14f4SXin Li }
482*600f14f4SXin Li
test_metadata_object_padding()483*600f14f4SXin Li bool test_metadata_object_padding()
484*600f14f4SXin Li {
485*600f14f4SXin Li uint32_t expected_length;
486*600f14f4SXin Li
487*600f14f4SXin Li printf("testing class FLAC::Metadata::Padding\n");
488*600f14f4SXin Li
489*600f14f4SXin Li printf("testing Padding::Padding()... ");
490*600f14f4SXin Li FLAC::Metadata::Padding block;
491*600f14f4SXin Li if(!block.is_valid())
492*600f14f4SXin Li return die_("!block.is_valid()");
493*600f14f4SXin Li expected_length = 0;
494*600f14f4SXin Li if(block.get_length() != expected_length) {
495*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
496*600f14f4SXin Li return false;
497*600f14f4SXin Li }
498*600f14f4SXin Li printf("OK\n");
499*600f14f4SXin Li
500*600f14f4SXin Li printf("testing Padding::Padding(const Padding &)... +\n");
501*600f14f4SXin Li printf(" Padding::operator!=(const Padding &)... ");
502*600f14f4SXin Li {
503*600f14f4SXin Li FLAC::Metadata::Padding blockcopy(block);
504*600f14f4SXin Li if(!blockcopy.is_valid())
505*600f14f4SXin Li return die_("!blockcopy.is_valid()");
506*600f14f4SXin Li if(blockcopy != block)
507*600f14f4SXin Li return die_("copy is not identical to original");
508*600f14f4SXin Li printf("OK\n");
509*600f14f4SXin Li
510*600f14f4SXin Li printf("testing Padding::~Padding()... ");
511*600f14f4SXin Li }
512*600f14f4SXin Li printf("OK\n");
513*600f14f4SXin Li
514*600f14f4SXin Li printf("testing Padding::Padding(const ::FLAC__StreamMetadata &)... +\n");
515*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata &)... ");
516*600f14f4SXin Li {
517*600f14f4SXin Li FLAC::Metadata::Padding blockcopy(padding_);
518*600f14f4SXin Li if(!blockcopy.is_valid())
519*600f14f4SXin Li return die_("!blockcopy.is_valid()");
520*600f14f4SXin Li if(blockcopy != padding_)
521*600f14f4SXin Li return die_("copy is not identical to original");
522*600f14f4SXin Li printf("OK\n");
523*600f14f4SXin Li }
524*600f14f4SXin Li
525*600f14f4SXin Li printf("testing Padding::Padding(const ::FLAC__StreamMetadata *)... +\n");
526*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
527*600f14f4SXin Li {
528*600f14f4SXin Li FLAC::Metadata::Padding blockcopy(&padding_);
529*600f14f4SXin Li if(!blockcopy.is_valid())
530*600f14f4SXin Li return die_("!blockcopy.is_valid()");
531*600f14f4SXin Li if(blockcopy != padding_)
532*600f14f4SXin Li return die_("copy is not identical to original");
533*600f14f4SXin Li printf("OK\n");
534*600f14f4SXin Li }
535*600f14f4SXin Li
536*600f14f4SXin Li printf("testing Padding::Padding(const ::FLAC__StreamMetadata *, copy=true)... +\n");
537*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
538*600f14f4SXin Li {
539*600f14f4SXin Li FLAC::Metadata::Padding blockcopy(&padding_, /*copy=*/true);
540*600f14f4SXin Li if(!blockcopy.is_valid())
541*600f14f4SXin Li return die_("!blockcopy.is_valid()");
542*600f14f4SXin Li if(blockcopy != padding_)
543*600f14f4SXin Li return die_("copy is not identical to original");
544*600f14f4SXin Li printf("OK\n");
545*600f14f4SXin Li }
546*600f14f4SXin Li
547*600f14f4SXin Li printf("testing Padding::Padding(const ::FLAC__StreamMetadata *, copy=false)... +\n");
548*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
549*600f14f4SXin Li {
550*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&padding_);
551*600f14f4SXin Li FLAC::Metadata::Padding blockcopy(copy, /*copy=*/false);
552*600f14f4SXin Li if(!blockcopy.is_valid())
553*600f14f4SXin Li return die_("!blockcopy.is_valid()");
554*600f14f4SXin Li if(blockcopy != padding_)
555*600f14f4SXin Li return die_("copy is not identical to original");
556*600f14f4SXin Li printf("OK\n");
557*600f14f4SXin Li }
558*600f14f4SXin Li
559*600f14f4SXin Li printf("testing Padding::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
560*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
561*600f14f4SXin Li {
562*600f14f4SXin Li FLAC::Metadata::Padding blockcopy;
563*600f14f4SXin Li blockcopy.assign(&padding_, /*copy=*/true);
564*600f14f4SXin Li if(!blockcopy.is_valid())
565*600f14f4SXin Li return die_("!blockcopy.is_valid()");
566*600f14f4SXin Li if(blockcopy != padding_)
567*600f14f4SXin Li return die_("copy is not identical to original");
568*600f14f4SXin Li printf("OK\n");
569*600f14f4SXin Li }
570*600f14f4SXin Li
571*600f14f4SXin Li printf("testing Padding::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
572*600f14f4SXin Li printf(" Padding::operator!=(const ::FLAC__StreamMetadata *)... ");
573*600f14f4SXin Li {
574*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&padding_);
575*600f14f4SXin Li FLAC::Metadata::Padding blockcopy;
576*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
577*600f14f4SXin Li if(!blockcopy.is_valid())
578*600f14f4SXin Li return die_("!blockcopy.is_valid()");
579*600f14f4SXin Li if(blockcopy != padding_)
580*600f14f4SXin Li return die_("copy is not identical to original");
581*600f14f4SXin Li printf("OK\n");
582*600f14f4SXin Li }
583*600f14f4SXin Li
584*600f14f4SXin Li printf("testing Padding::operator=(const Padding &)... +\n");
585*600f14f4SXin Li printf(" Padding::operator==(const Padding &)... ");
586*600f14f4SXin Li {
587*600f14f4SXin Li FLAC::Metadata::Padding blockcopy = block;
588*600f14f4SXin Li if(!blockcopy.is_valid())
589*600f14f4SXin Li return die_("!blockcopy.is_valid()");
590*600f14f4SXin Li if(!(blockcopy == block))
591*600f14f4SXin Li return die_("copy is not identical to original");
592*600f14f4SXin Li printf("OK\n");
593*600f14f4SXin Li }
594*600f14f4SXin Li
595*600f14f4SXin Li printf("testing Padding::operator=(const ::FLAC__StreamMetadata &)... +\n");
596*600f14f4SXin Li printf(" Padding::operator==(const ::FLAC__StreamMetadata &)... ");
597*600f14f4SXin Li {
598*600f14f4SXin Li FLAC::Metadata::Padding blockcopy = padding_;
599*600f14f4SXin Li if(!blockcopy.is_valid())
600*600f14f4SXin Li return die_("!blockcopy.is_valid()");
601*600f14f4SXin Li if(!(blockcopy == padding_))
602*600f14f4SXin Li return die_("copy is not identical to original");
603*600f14f4SXin Li printf("OK\n");
604*600f14f4SXin Li }
605*600f14f4SXin Li
606*600f14f4SXin Li printf("testing Padding::operator=(const ::FLAC__StreamMetadata *)... +\n");
607*600f14f4SXin Li printf(" Padding::operator==(const ::FLAC__StreamMetadata *)... ");
608*600f14f4SXin Li {
609*600f14f4SXin Li FLAC::Metadata::Padding blockcopy = &padding_;
610*600f14f4SXin Li if(!blockcopy.is_valid())
611*600f14f4SXin Li return die_("!blockcopy.is_valid()");
612*600f14f4SXin Li if(!(blockcopy == padding_))
613*600f14f4SXin Li return die_("copy is not identical to original");
614*600f14f4SXin Li printf("OK\n");
615*600f14f4SXin Li }
616*600f14f4SXin Li
617*600f14f4SXin Li printf("testing Padding::set_length()... ");
618*600f14f4SXin Li block.set_length(padding_.length);
619*600f14f4SXin Li printf("OK\n");
620*600f14f4SXin Li
621*600f14f4SXin Li printf("testing Prototype::get_length()... ");
622*600f14f4SXin Li if(block.get_length() != padding_.length)
623*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
624*600f14f4SXin Li printf("OK\n");
625*600f14f4SXin Li
626*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
627*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
628*600f14f4SXin Li if(0 == clone_)
629*600f14f4SXin Li return die_("returned NULL");
630*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::Padding *>(clone_))
631*600f14f4SXin Li return die_("downcast is NULL");
632*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::Padding *>(clone_) != block)
633*600f14f4SXin Li return die_("clone is not identical");
634*600f14f4SXin Li printf("OK\n");
635*600f14f4SXin Li printf("testing Padding::~Padding()... ");
636*600f14f4SXin Li delete clone_;
637*600f14f4SXin Li printf("OK\n");
638*600f14f4SXin Li
639*600f14f4SXin Li
640*600f14f4SXin Li printf("PASSED\n\n");
641*600f14f4SXin Li return true;
642*600f14f4SXin Li }
643*600f14f4SXin Li
test_metadata_object_application()644*600f14f4SXin Li bool test_metadata_object_application()
645*600f14f4SXin Li {
646*600f14f4SXin Li uint32_t expected_length;
647*600f14f4SXin Li
648*600f14f4SXin Li printf("testing class FLAC::Metadata::Application\n");
649*600f14f4SXin Li
650*600f14f4SXin Li printf("testing Application::Application()... ");
651*600f14f4SXin Li FLAC::Metadata::Application block;
652*600f14f4SXin Li if(!block.is_valid())
653*600f14f4SXin Li return die_("!block.is_valid()");
654*600f14f4SXin Li expected_length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8;
655*600f14f4SXin Li if(block.get_length() != expected_length) {
656*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
657*600f14f4SXin Li return false;
658*600f14f4SXin Li }
659*600f14f4SXin Li printf("OK\n");
660*600f14f4SXin Li
661*600f14f4SXin Li printf("testing Application::Application(const Application &)... +\n");
662*600f14f4SXin Li printf(" Application::operator!=(const Application &)... ");
663*600f14f4SXin Li {
664*600f14f4SXin Li FLAC::Metadata::Application blockcopy(block);
665*600f14f4SXin Li if(!blockcopy.is_valid())
666*600f14f4SXin Li return die_("!blockcopy.is_valid()");
667*600f14f4SXin Li if(blockcopy != block)
668*600f14f4SXin Li return die_("copy is not identical to original");
669*600f14f4SXin Li printf("OK\n");
670*600f14f4SXin Li
671*600f14f4SXin Li printf("testing Application::~Application()... ");
672*600f14f4SXin Li }
673*600f14f4SXin Li printf("OK\n");
674*600f14f4SXin Li
675*600f14f4SXin Li printf("testing Application::Application(const ::FLAC__StreamMetadata &)... +\n");
676*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata &)... ");
677*600f14f4SXin Li {
678*600f14f4SXin Li FLAC::Metadata::Application blockcopy(application_);
679*600f14f4SXin Li if(!blockcopy.is_valid())
680*600f14f4SXin Li return die_("!blockcopy.is_valid()");
681*600f14f4SXin Li if(blockcopy != application_)
682*600f14f4SXin Li return die_("copy is not identical to original");
683*600f14f4SXin Li printf("OK\n");
684*600f14f4SXin Li }
685*600f14f4SXin Li
686*600f14f4SXin Li printf("testing Application::Application(const ::FLAC__StreamMetadata *)... +\n");
687*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
688*600f14f4SXin Li {
689*600f14f4SXin Li FLAC::Metadata::Application blockcopy(&application_);
690*600f14f4SXin Li if(!blockcopy.is_valid())
691*600f14f4SXin Li return die_("!blockcopy.is_valid()");
692*600f14f4SXin Li if(blockcopy != application_)
693*600f14f4SXin Li return die_("copy is not identical to original");
694*600f14f4SXin Li printf("OK\n");
695*600f14f4SXin Li }
696*600f14f4SXin Li
697*600f14f4SXin Li printf("testing Application::Application(const ::FLAC__StreamMetadata *, copy=true)... +\n");
698*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
699*600f14f4SXin Li {
700*600f14f4SXin Li FLAC::Metadata::Application blockcopy(&application_, /*copy=*/true);
701*600f14f4SXin Li if(!blockcopy.is_valid())
702*600f14f4SXin Li return die_("!blockcopy.is_valid()");
703*600f14f4SXin Li if(blockcopy != application_)
704*600f14f4SXin Li return die_("copy is not identical to original");
705*600f14f4SXin Li printf("OK\n");
706*600f14f4SXin Li }
707*600f14f4SXin Li
708*600f14f4SXin Li printf("testing Application::Application(const ::FLAC__StreamMetadata *, copy=false)... +\n");
709*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
710*600f14f4SXin Li {
711*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&application_);
712*600f14f4SXin Li FLAC::Metadata::Application blockcopy(copy, /*copy=*/false);
713*600f14f4SXin Li if(!blockcopy.is_valid())
714*600f14f4SXin Li return die_("!blockcopy.is_valid()");
715*600f14f4SXin Li if(blockcopy != application_)
716*600f14f4SXin Li return die_("copy is not identical to original");
717*600f14f4SXin Li printf("OK\n");
718*600f14f4SXin Li }
719*600f14f4SXin Li
720*600f14f4SXin Li printf("testing Application::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
721*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
722*600f14f4SXin Li {
723*600f14f4SXin Li FLAC::Metadata::Application blockcopy;
724*600f14f4SXin Li blockcopy.assign(&application_, /*copy=*/true);
725*600f14f4SXin Li if(!blockcopy.is_valid())
726*600f14f4SXin Li return die_("!blockcopy.is_valid()");
727*600f14f4SXin Li if(blockcopy != application_)
728*600f14f4SXin Li return die_("copy is not identical to original");
729*600f14f4SXin Li printf("OK\n");
730*600f14f4SXin Li }
731*600f14f4SXin Li
732*600f14f4SXin Li printf("testing Application::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
733*600f14f4SXin Li printf(" Application::operator!=(const ::FLAC__StreamMetadata *)... ");
734*600f14f4SXin Li {
735*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&application_);
736*600f14f4SXin Li FLAC::Metadata::Application blockcopy;
737*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
738*600f14f4SXin Li if(!blockcopy.is_valid())
739*600f14f4SXin Li return die_("!blockcopy.is_valid()");
740*600f14f4SXin Li if(blockcopy != application_)
741*600f14f4SXin Li return die_("copy is not identical to original");
742*600f14f4SXin Li printf("OK\n");
743*600f14f4SXin Li }
744*600f14f4SXin Li
745*600f14f4SXin Li printf("testing Application::operator=(const Application &)... +\n");
746*600f14f4SXin Li printf(" Application::operator==(const Application &)... ");
747*600f14f4SXin Li {
748*600f14f4SXin Li FLAC::Metadata::Application blockcopy = block;
749*600f14f4SXin Li if(!blockcopy.is_valid())
750*600f14f4SXin Li return die_("!blockcopy.is_valid()");
751*600f14f4SXin Li if(!(blockcopy == block))
752*600f14f4SXin Li return die_("copy is not identical to original");
753*600f14f4SXin Li printf("OK\n");
754*600f14f4SXin Li }
755*600f14f4SXin Li
756*600f14f4SXin Li printf("testing Application::operator=(const ::FLAC__StreamMetadata &)... +\n");
757*600f14f4SXin Li printf(" Application::operator==(const ::FLAC__StreamMetadata &)... ");
758*600f14f4SXin Li {
759*600f14f4SXin Li FLAC::Metadata::Application blockcopy = application_;
760*600f14f4SXin Li if(!blockcopy.is_valid())
761*600f14f4SXin Li return die_("!blockcopy.is_valid()");
762*600f14f4SXin Li if(!(blockcopy == application_))
763*600f14f4SXin Li return die_("copy is not identical to original");
764*600f14f4SXin Li printf("OK\n");
765*600f14f4SXin Li }
766*600f14f4SXin Li
767*600f14f4SXin Li printf("testing Application::operator=(const ::FLAC__StreamMetadata *)... +\n");
768*600f14f4SXin Li printf(" Application::operator==(const ::FLAC__StreamMetadata *)... ");
769*600f14f4SXin Li {
770*600f14f4SXin Li FLAC::Metadata::Application blockcopy = &application_;
771*600f14f4SXin Li if(!blockcopy.is_valid())
772*600f14f4SXin Li return die_("!blockcopy.is_valid()");
773*600f14f4SXin Li if(!(blockcopy == application_))
774*600f14f4SXin Li return die_("copy is not identical to original");
775*600f14f4SXin Li printf("OK\n");
776*600f14f4SXin Li }
777*600f14f4SXin Li
778*600f14f4SXin Li printf("testing Application::set_id()... ");
779*600f14f4SXin Li block.set_id(application_.data.application.id);
780*600f14f4SXin Li printf("OK\n");
781*600f14f4SXin Li
782*600f14f4SXin Li printf("testing Application::set_data()... ");
783*600f14f4SXin Li block.set_data(application_.data.application.data, application_.length - sizeof(application_.data.application.id), /*copy=*/true);
784*600f14f4SXin Li printf("OK\n");
785*600f14f4SXin Li
786*600f14f4SXin Li printf("testing Application::get_id()... ");
787*600f14f4SXin Li if(0 != memcmp(block.get_id(), application_.data.application.id, sizeof(application_.data.application.id)))
788*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
789*600f14f4SXin Li printf("OK\n");
790*600f14f4SXin Li
791*600f14f4SXin Li printf("testing Application::get_data()... ");
792*600f14f4SXin Li if(0 != memcmp(block.get_data(), application_.data.application.data, application_.length - sizeof(application_.data.application.id)))
793*600f14f4SXin Li return die_("value mismatch, doesn't match previously set value");
794*600f14f4SXin Li printf("OK\n");
795*600f14f4SXin Li
796*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
797*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
798*600f14f4SXin Li if(0 == clone_)
799*600f14f4SXin Li return die_("returned NULL");
800*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::Application *>(clone_))
801*600f14f4SXin Li return die_("downcast is NULL");
802*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::Application *>(clone_) != block)
803*600f14f4SXin Li return die_("clone is not identical");
804*600f14f4SXin Li printf("OK\n");
805*600f14f4SXin Li printf("testing Application::~Application()... ");
806*600f14f4SXin Li delete clone_;
807*600f14f4SXin Li printf("OK\n");
808*600f14f4SXin Li
809*600f14f4SXin Li
810*600f14f4SXin Li printf("PASSED\n\n");
811*600f14f4SXin Li return true;
812*600f14f4SXin Li }
813*600f14f4SXin Li
test_metadata_object_seektable()814*600f14f4SXin Li bool test_metadata_object_seektable()
815*600f14f4SXin Li {
816*600f14f4SXin Li uint32_t expected_length;
817*600f14f4SXin Li
818*600f14f4SXin Li printf("testing class FLAC::Metadata::SeekTable\n");
819*600f14f4SXin Li
820*600f14f4SXin Li printf("testing SeekTable::SeekTable()... ");
821*600f14f4SXin Li FLAC::Metadata::SeekTable block;
822*600f14f4SXin Li if(!block.is_valid())
823*600f14f4SXin Li return die_("!block.is_valid()");
824*600f14f4SXin Li expected_length = 0;
825*600f14f4SXin Li if(block.get_length() != expected_length) {
826*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
827*600f14f4SXin Li return false;
828*600f14f4SXin Li }
829*600f14f4SXin Li printf("OK\n");
830*600f14f4SXin Li
831*600f14f4SXin Li printf("testing SeekTable::SeekTable(const SeekTable &)... +\n");
832*600f14f4SXin Li printf(" SeekTable::operator!=(const SeekTable &)... ");
833*600f14f4SXin Li {
834*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy(block);
835*600f14f4SXin Li if(!blockcopy.is_valid())
836*600f14f4SXin Li return die_("!blockcopy.is_valid()");
837*600f14f4SXin Li if(blockcopy != block)
838*600f14f4SXin Li return die_("copy is not identical to original");
839*600f14f4SXin Li printf("OK\n");
840*600f14f4SXin Li
841*600f14f4SXin Li printf("testing SeekTable::~SeekTable()... ");
842*600f14f4SXin Li }
843*600f14f4SXin Li printf("OK\n");
844*600f14f4SXin Li
845*600f14f4SXin Li printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata &)... +\n");
846*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata &)... ");
847*600f14f4SXin Li {
848*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy(seektable_);
849*600f14f4SXin Li if(!blockcopy.is_valid())
850*600f14f4SXin Li return die_("!blockcopy.is_valid()");
851*600f14f4SXin Li if(blockcopy != seektable_)
852*600f14f4SXin Li return die_("copy is not identical to original");
853*600f14f4SXin Li printf("OK\n");
854*600f14f4SXin Li }
855*600f14f4SXin Li
856*600f14f4SXin Li printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *)... +\n");
857*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
858*600f14f4SXin Li {
859*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy(&seektable_);
860*600f14f4SXin Li if(!blockcopy.is_valid())
861*600f14f4SXin Li return die_("!blockcopy.is_valid()");
862*600f14f4SXin Li if(blockcopy != seektable_)
863*600f14f4SXin Li return die_("copy is not identical to original");
864*600f14f4SXin Li printf("OK\n");
865*600f14f4SXin Li }
866*600f14f4SXin Li
867*600f14f4SXin Li printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *, copy=true)... +\n");
868*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
869*600f14f4SXin Li {
870*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy(&seektable_, /*copy=*/true);
871*600f14f4SXin Li if(!blockcopy.is_valid())
872*600f14f4SXin Li return die_("!blockcopy.is_valid()");
873*600f14f4SXin Li if(blockcopy != seektable_)
874*600f14f4SXin Li return die_("copy is not identical to original");
875*600f14f4SXin Li printf("OK\n");
876*600f14f4SXin Li }
877*600f14f4SXin Li
878*600f14f4SXin Li printf("testing SeekTable::SeekTable(const ::FLAC__StreamMetadata *, copy=false)... +\n");
879*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
880*600f14f4SXin Li {
881*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&seektable_);
882*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy(copy, /*copy=*/false);
883*600f14f4SXin Li if(!blockcopy.is_valid())
884*600f14f4SXin Li return die_("!blockcopy.is_valid()");
885*600f14f4SXin Li if(blockcopy != seektable_)
886*600f14f4SXin Li return die_("copy is not identical to original");
887*600f14f4SXin Li printf("OK\n");
888*600f14f4SXin Li }
889*600f14f4SXin Li
890*600f14f4SXin Li printf("testing SeekTable::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
891*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
892*600f14f4SXin Li {
893*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy;
894*600f14f4SXin Li blockcopy.assign(&seektable_, /*copy=*/true);
895*600f14f4SXin Li if(!blockcopy.is_valid())
896*600f14f4SXin Li return die_("!blockcopy.is_valid()");
897*600f14f4SXin Li if(blockcopy != seektable_)
898*600f14f4SXin Li return die_("copy is not identical to original");
899*600f14f4SXin Li printf("OK\n");
900*600f14f4SXin Li }
901*600f14f4SXin Li
902*600f14f4SXin Li printf("testing SeekTable::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
903*600f14f4SXin Li printf(" SeekTable::operator!=(const ::FLAC__StreamMetadata *)... ");
904*600f14f4SXin Li {
905*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&seektable_);
906*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy;
907*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
908*600f14f4SXin Li if(!blockcopy.is_valid())
909*600f14f4SXin Li return die_("!blockcopy.is_valid()");
910*600f14f4SXin Li if(blockcopy != seektable_)
911*600f14f4SXin Li return die_("copy is not identical to original");
912*600f14f4SXin Li printf("OK\n");
913*600f14f4SXin Li }
914*600f14f4SXin Li
915*600f14f4SXin Li printf("testing SeekTable::operator=(const SeekTable &)... +\n");
916*600f14f4SXin Li printf(" SeekTable::operator==(const SeekTable &)... ");
917*600f14f4SXin Li {
918*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy = block;
919*600f14f4SXin Li if(!blockcopy.is_valid())
920*600f14f4SXin Li return die_("!blockcopy.is_valid()");
921*600f14f4SXin Li if(!(blockcopy == block))
922*600f14f4SXin Li return die_("copy is not identical to original");
923*600f14f4SXin Li printf("OK\n");
924*600f14f4SXin Li }
925*600f14f4SXin Li
926*600f14f4SXin Li printf("testing SeekTable::operator=(const ::FLAC__StreamMetadata &)... +\n");
927*600f14f4SXin Li printf(" SeekTable::operator==(const ::FLAC__StreamMetadata &)... ");
928*600f14f4SXin Li {
929*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy = seektable_;
930*600f14f4SXin Li if(!blockcopy.is_valid())
931*600f14f4SXin Li return die_("!blockcopy.is_valid()");
932*600f14f4SXin Li if(!(blockcopy == seektable_))
933*600f14f4SXin Li return die_("copy is not identical to original");
934*600f14f4SXin Li printf("OK\n");
935*600f14f4SXin Li }
936*600f14f4SXin Li
937*600f14f4SXin Li printf("testing SeekTable::operator=(const ::FLAC__StreamMetadata *)... +\n");
938*600f14f4SXin Li printf(" SeekTable::operator==(const ::FLAC__StreamMetadata *)... ");
939*600f14f4SXin Li {
940*600f14f4SXin Li FLAC::Metadata::SeekTable blockcopy = &seektable_;
941*600f14f4SXin Li if(!blockcopy.is_valid())
942*600f14f4SXin Li return die_("!blockcopy.is_valid()");
943*600f14f4SXin Li if(!(blockcopy == seektable_))
944*600f14f4SXin Li return die_("copy is not identical to original");
945*600f14f4SXin Li printf("OK\n");
946*600f14f4SXin Li }
947*600f14f4SXin Li
948*600f14f4SXin Li printf("testing SeekTable::insert_point() x 3... ");
949*600f14f4SXin Li if(!block.insert_point(0, seektable_.data.seek_table.points[1]))
950*600f14f4SXin Li return die_("returned false");
951*600f14f4SXin Li if(!block.insert_point(0, seektable_.data.seek_table.points[1]))
952*600f14f4SXin Li return die_("returned false");
953*600f14f4SXin Li if(!block.insert_point(1, seektable_.data.seek_table.points[0]))
954*600f14f4SXin Li return die_("returned false");
955*600f14f4SXin Li printf("OK\n");
956*600f14f4SXin Li
957*600f14f4SXin Li printf("testing SeekTable::is_legal()... ");
958*600f14f4SXin Li if(block.is_legal())
959*600f14f4SXin Li return die_("returned true");
960*600f14f4SXin Li printf("OK\n");
961*600f14f4SXin Li
962*600f14f4SXin Li printf("testing SeekTable::set_point()... ");
963*600f14f4SXin Li block.set_point(0, seektable_.data.seek_table.points[0]);
964*600f14f4SXin Li printf("OK\n");
965*600f14f4SXin Li
966*600f14f4SXin Li printf("testing SeekTable::delete_point()... ");
967*600f14f4SXin Li if(!block.delete_point(0))
968*600f14f4SXin Li return die_("returned false");
969*600f14f4SXin Li printf("OK\n");
970*600f14f4SXin Li
971*600f14f4SXin Li printf("testing SeekTable::is_legal()... ");
972*600f14f4SXin Li if(!block.is_legal())
973*600f14f4SXin Li return die_("returned false");
974*600f14f4SXin Li printf("OK\n");
975*600f14f4SXin Li
976*600f14f4SXin Li printf("testing SeekTable::get_num_points()... ");
977*600f14f4SXin Li if(block.get_num_points() != seektable_.data.seek_table.num_points)
978*600f14f4SXin Li return die_("number mismatch");
979*600f14f4SXin Li printf("OK\n");
980*600f14f4SXin Li
981*600f14f4SXin Li printf("testing SeekTable::operator!=(const ::FLAC__StreamMetadata &)... ");
982*600f14f4SXin Li if(block != seektable_)
983*600f14f4SXin Li return die_("data mismatch");
984*600f14f4SXin Li printf("OK\n");
985*600f14f4SXin Li
986*600f14f4SXin Li printf("testing SeekTable::get_point()... ");
987*600f14f4SXin Li if(
988*600f14f4SXin Li block.get_point(1).sample_number != seektable_.data.seek_table.points[1].sample_number ||
989*600f14f4SXin Li block.get_point(1).stream_offset != seektable_.data.seek_table.points[1].stream_offset ||
990*600f14f4SXin Li block.get_point(1).frame_samples != seektable_.data.seek_table.points[1].frame_samples
991*600f14f4SXin Li )
992*600f14f4SXin Li return die_("point mismatch");
993*600f14f4SXin Li printf("OK\n");
994*600f14f4SXin Li
995*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
996*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
997*600f14f4SXin Li if(0 == clone_)
998*600f14f4SXin Li return die_("returned NULL");
999*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::SeekTable *>(clone_))
1000*600f14f4SXin Li return die_("downcast is NULL");
1001*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::SeekTable *>(clone_) != block)
1002*600f14f4SXin Li return die_("clone is not identical");
1003*600f14f4SXin Li printf("OK\n");
1004*600f14f4SXin Li printf("testing SeekTable::~SeekTable()... ");
1005*600f14f4SXin Li delete clone_;
1006*600f14f4SXin Li printf("OK\n");
1007*600f14f4SXin Li
1008*600f14f4SXin Li
1009*600f14f4SXin Li printf("PASSED\n\n");
1010*600f14f4SXin Li return true;
1011*600f14f4SXin Li }
1012*600f14f4SXin Li
test_metadata_object_vorbiscomment()1013*600f14f4SXin Li bool test_metadata_object_vorbiscomment()
1014*600f14f4SXin Li {
1015*600f14f4SXin Li uint32_t expected_length;
1016*600f14f4SXin Li
1017*600f14f4SXin Li printf("testing class FLAC::Metadata::VorbisComment::Entry\n");
1018*600f14f4SXin Li
1019*600f14f4SXin Li printf("testing Entry::Entry()... ");
1020*600f14f4SXin Li {
1021*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry1;
1022*600f14f4SXin Li if(!entry1.is_valid())
1023*600f14f4SXin Li return die_("!is_valid()");
1024*600f14f4SXin Li printf("OK\n");
1025*600f14f4SXin Li
1026*600f14f4SXin Li printf("testing Entry::~Entry()... ");
1027*600f14f4SXin Li }
1028*600f14f4SXin Li printf("OK\n");
1029*600f14f4SXin Li
1030*600f14f4SXin Li printf("testing Entry::Entry(const char *field, uint32_t field_length)... ");
1031*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry2("name2=value2", strlen("name2=value2"));
1032*600f14f4SXin Li if(!entry2.is_valid())
1033*600f14f4SXin Li return die_("!is_valid()");
1034*600f14f4SXin Li printf("OK\n");
1035*600f14f4SXin Li
1036*600f14f4SXin Li {
1037*600f14f4SXin Li printf("testing Entry::Entry(const char *field)... ");
1038*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry2z("name2=value2");
1039*600f14f4SXin Li if(!entry2z.is_valid())
1040*600f14f4SXin Li return die_("!is_valid()");
1041*600f14f4SXin Li if(strcmp(entry2.get_field(), entry2z.get_field()))
1042*600f14f4SXin Li return die_("bad value");
1043*600f14f4SXin Li printf("OK\n");
1044*600f14f4SXin Li }
1045*600f14f4SXin Li
1046*600f14f4SXin Li printf("testing Entry::Entry(const char *field_name, const char *field_value, uint32_t field_value_length)... ");
1047*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry3("name3", "value3", strlen("value3"));
1048*600f14f4SXin Li if(!entry3.is_valid())
1049*600f14f4SXin Li return die_("!is_valid()");
1050*600f14f4SXin Li printf("OK\n");
1051*600f14f4SXin Li
1052*600f14f4SXin Li {
1053*600f14f4SXin Li printf("testing Entry::Entry(const char *field_name, const char *field_value)... ");
1054*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry3z("name3", "value3");
1055*600f14f4SXin Li if(!entry3z.is_valid())
1056*600f14f4SXin Li return die_("!is_valid()");
1057*600f14f4SXin Li if(strcmp(entry3.get_field(), entry3z.get_field()))
1058*600f14f4SXin Li return die_("bad value");
1059*600f14f4SXin Li printf("OK\n");
1060*600f14f4SXin Li }
1061*600f14f4SXin Li
1062*600f14f4SXin Li printf("testing Entry::Entry(const Entry &entry)... ");
1063*600f14f4SXin Li {
1064*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry2copy(entry2);
1065*600f14f4SXin Li if(!entry2copy.is_valid())
1066*600f14f4SXin Li return die_("!is_valid()");
1067*600f14f4SXin Li printf("OK\n");
1068*600f14f4SXin Li
1069*600f14f4SXin Li printf("testing Entry::~Entry()... ");
1070*600f14f4SXin Li }
1071*600f14f4SXin Li printf("OK\n");
1072*600f14f4SXin Li
1073*600f14f4SXin Li printf("testing Entry::operator=(const Entry &entry)... ");
1074*600f14f4SXin Li FLAC::Metadata::VorbisComment::Entry entry1 = entry2;
1075*600f14f4SXin Li if(!entry2.is_valid())
1076*600f14f4SXin Li return die_("!is_valid()");
1077*600f14f4SXin Li printf("OK\n");
1078*600f14f4SXin Li
1079*600f14f4SXin Li printf("testing Entry::get_field_length()... ");
1080*600f14f4SXin Li if(entry1.get_field_length() != strlen("name2=value2"))
1081*600f14f4SXin Li return die_("value mismatch");
1082*600f14f4SXin Li printf("OK\n");
1083*600f14f4SXin Li
1084*600f14f4SXin Li printf("testing Entry::get_field_name_length()... ");
1085*600f14f4SXin Li if(entry1.get_field_name_length() != strlen("name2"))
1086*600f14f4SXin Li return die_("value mismatch");
1087*600f14f4SXin Li printf("OK\n");
1088*600f14f4SXin Li
1089*600f14f4SXin Li printf("testing Entry::get_field_value_length()... ");
1090*600f14f4SXin Li if(entry1.get_field_value_length() != strlen("value2"))
1091*600f14f4SXin Li return die_("value mismatch");
1092*600f14f4SXin Li printf("OK\n");
1093*600f14f4SXin Li
1094*600f14f4SXin Li printf("testing Entry::get_entry()... ");
1095*600f14f4SXin Li {
1096*600f14f4SXin Li ::FLAC__StreamMetadata_VorbisComment_Entry entry = entry1.get_entry();
1097*600f14f4SXin Li if(entry.length != strlen("name2=value2"))
1098*600f14f4SXin Li return die_("entry length mismatch");
1099*600f14f4SXin Li if(0 != memcmp(entry.entry, "name2=value2", entry.length))
1100*600f14f4SXin Li return die_("entry value mismatch");
1101*600f14f4SXin Li }
1102*600f14f4SXin Li printf("OK\n");
1103*600f14f4SXin Li
1104*600f14f4SXin Li printf("testing Entry::get_field()... ");
1105*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name2=value2", strlen("name2=value2")))
1106*600f14f4SXin Li return die_("value mismatch");
1107*600f14f4SXin Li printf("OK\n");
1108*600f14f4SXin Li
1109*600f14f4SXin Li printf("testing Entry::get_field_name()... ");
1110*600f14f4SXin Li if(0 != memcmp(entry1.get_field_name(), "name2", strlen("name2")))
1111*600f14f4SXin Li return die_("value mismatch");
1112*600f14f4SXin Li printf("OK\n");
1113*600f14f4SXin Li
1114*600f14f4SXin Li printf("testing Entry::get_field_value()... ");
1115*600f14f4SXin Li if(0 != memcmp(entry1.get_field_value(), "value2", strlen("value2")))
1116*600f14f4SXin Li return die_("value mismatch");
1117*600f14f4SXin Li printf("OK\n");
1118*600f14f4SXin Li
1119*600f14f4SXin Li printf("testing Entry::set_field_name()... ");
1120*600f14f4SXin Li if(!entry1.set_field_name("name1"))
1121*600f14f4SXin Li return die_("returned false");
1122*600f14f4SXin Li if(0 != memcmp(entry1.get_field_name(), "name1", strlen("name1")))
1123*600f14f4SXin Li return die_("value mismatch");
1124*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name1=value2", strlen("name1=value2")))
1125*600f14f4SXin Li return die_("entry mismatch");
1126*600f14f4SXin Li printf("OK\n");
1127*600f14f4SXin Li
1128*600f14f4SXin Li printf("testing Entry::set_field_value(const char *field_value, uint32_t field_value_length)... ");
1129*600f14f4SXin Li if(!entry1.set_field_value("value1", strlen("value1")))
1130*600f14f4SXin Li return die_("returned false");
1131*600f14f4SXin Li if(0 != memcmp(entry1.get_field_value(), "value1", strlen("value1")))
1132*600f14f4SXin Li return die_("value mismatch");
1133*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name1=value1", strlen("name1=value1")))
1134*600f14f4SXin Li return die_("entry mismatch");
1135*600f14f4SXin Li printf("OK\n");
1136*600f14f4SXin Li
1137*600f14f4SXin Li printf("testing Entry::set_field_value(const char *field_value)... ");
1138*600f14f4SXin Li if(!entry1.set_field_value("value1"))
1139*600f14f4SXin Li return die_("returned false");
1140*600f14f4SXin Li if(0 != memcmp(entry1.get_field_value(), "value1", strlen("value1")))
1141*600f14f4SXin Li return die_("value mismatch");
1142*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name1=value1", strlen("name1=value1")))
1143*600f14f4SXin Li return die_("entry mismatch");
1144*600f14f4SXin Li printf("OK\n");
1145*600f14f4SXin Li
1146*600f14f4SXin Li printf("testing Entry::set_field(const char *field, uint32_t field_length)... ");
1147*600f14f4SXin Li if(!entry1.set_field("name0=value0", strlen("name0=value0")))
1148*600f14f4SXin Li return die_("returned false");
1149*600f14f4SXin Li if(0 != memcmp(entry1.get_field_name(), "name0", strlen("name0")))
1150*600f14f4SXin Li return die_("value mismatch");
1151*600f14f4SXin Li if(0 != memcmp(entry1.get_field_value(), "value0", strlen("value0")))
1152*600f14f4SXin Li return die_("value mismatch");
1153*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name0=value0", strlen("name0=value0")))
1154*600f14f4SXin Li return die_("entry mismatch");
1155*600f14f4SXin Li printf("OK\n");
1156*600f14f4SXin Li
1157*600f14f4SXin Li printf("testing Entry::set_field(const char *field)... ");
1158*600f14f4SXin Li if(!entry1.set_field("name0=value0"))
1159*600f14f4SXin Li return die_("returned false");
1160*600f14f4SXin Li if(0 != memcmp(entry1.get_field_name(), "name0", strlen("name0")))
1161*600f14f4SXin Li return die_("value mismatch");
1162*600f14f4SXin Li if(0 != memcmp(entry1.get_field_value(), "value0", strlen("value0")))
1163*600f14f4SXin Li return die_("value mismatch");
1164*600f14f4SXin Li if(0 != memcmp(entry1.get_field(), "name0=value0", strlen("name0=value0")))
1165*600f14f4SXin Li return die_("entry mismatch");
1166*600f14f4SXin Li printf("OK\n");
1167*600f14f4SXin Li
1168*600f14f4SXin Li printf("PASSED\n\n");
1169*600f14f4SXin Li
1170*600f14f4SXin Li
1171*600f14f4SXin Li printf("testing class FLAC::Metadata::VorbisComment\n");
1172*600f14f4SXin Li
1173*600f14f4SXin Li printf("testing VorbisComment::VorbisComment()... ");
1174*600f14f4SXin Li FLAC::Metadata::VorbisComment block;
1175*600f14f4SXin Li if(!block.is_valid())
1176*600f14f4SXin Li return die_("!block.is_valid()");
1177*600f14f4SXin Li expected_length = (FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN/8 + strlen(::FLAC__VENDOR_STRING) + FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN/8);
1178*600f14f4SXin Li if(block.get_length() != expected_length) {
1179*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1180*600f14f4SXin Li return false;
1181*600f14f4SXin Li }
1182*600f14f4SXin Li printf("OK\n");
1183*600f14f4SXin Li
1184*600f14f4SXin Li printf("testing VorbisComment::VorbisComment(const VorbisComment &)... +\n");
1185*600f14f4SXin Li printf(" VorbisComment::operator!=(const VorbisComment &)... ");
1186*600f14f4SXin Li {
1187*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy(block);
1188*600f14f4SXin Li if(!blockcopy.is_valid())
1189*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1190*600f14f4SXin Li if(blockcopy != block)
1191*600f14f4SXin Li return die_("copy is not identical to original");
1192*600f14f4SXin Li printf("OK\n");
1193*600f14f4SXin Li
1194*600f14f4SXin Li printf("testing VorbisComment::~VorbisComment()... ");
1195*600f14f4SXin Li }
1196*600f14f4SXin Li printf("OK\n");
1197*600f14f4SXin Li
1198*600f14f4SXin Li printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata &)... +\n");
1199*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata &)... ");
1200*600f14f4SXin Li {
1201*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy(vorbiscomment_);
1202*600f14f4SXin Li if(!blockcopy.is_valid())
1203*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1204*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1205*600f14f4SXin Li return die_("copy is not identical to original");
1206*600f14f4SXin Li printf("OK\n");
1207*600f14f4SXin Li }
1208*600f14f4SXin Li
1209*600f14f4SXin Li printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *)... +\n");
1210*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1211*600f14f4SXin Li {
1212*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy(&vorbiscomment_);
1213*600f14f4SXin Li if(!blockcopy.is_valid())
1214*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1215*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1216*600f14f4SXin Li return die_("copy is not identical to original");
1217*600f14f4SXin Li printf("OK\n");
1218*600f14f4SXin Li }
1219*600f14f4SXin Li
1220*600f14f4SXin Li printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1221*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1222*600f14f4SXin Li {
1223*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy(&vorbiscomment_, /*copy=*/true);
1224*600f14f4SXin Li if(!blockcopy.is_valid())
1225*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1226*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1227*600f14f4SXin Li return die_("copy is not identical to original");
1228*600f14f4SXin Li printf("OK\n");
1229*600f14f4SXin Li }
1230*600f14f4SXin Li
1231*600f14f4SXin Li printf("testing VorbisComment::VorbisComment(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1232*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1233*600f14f4SXin Li {
1234*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&vorbiscomment_);
1235*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy(copy, /*copy=*/false);
1236*600f14f4SXin Li if(!blockcopy.is_valid())
1237*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1238*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1239*600f14f4SXin Li return die_("copy is not identical to original");
1240*600f14f4SXin Li printf("OK\n");
1241*600f14f4SXin Li }
1242*600f14f4SXin Li
1243*600f14f4SXin Li printf("testing VorbisComment::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1244*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1245*600f14f4SXin Li {
1246*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy;
1247*600f14f4SXin Li blockcopy.assign(&vorbiscomment_, /*copy=*/true);
1248*600f14f4SXin Li if(!blockcopy.is_valid())
1249*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1250*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1251*600f14f4SXin Li return die_("copy is not identical to original");
1252*600f14f4SXin Li printf("OK\n");
1253*600f14f4SXin Li }
1254*600f14f4SXin Li
1255*600f14f4SXin Li printf("testing VorbisComment::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1256*600f14f4SXin Li printf(" VorbisComment::operator!=(const ::FLAC__StreamMetadata *)... ");
1257*600f14f4SXin Li {
1258*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&vorbiscomment_);
1259*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy;
1260*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
1261*600f14f4SXin Li if(!blockcopy.is_valid())
1262*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1263*600f14f4SXin Li if(blockcopy != vorbiscomment_)
1264*600f14f4SXin Li return die_("copy is not identical to original");
1265*600f14f4SXin Li printf("OK\n");
1266*600f14f4SXin Li }
1267*600f14f4SXin Li
1268*600f14f4SXin Li printf("testing VorbisComment::operator=(const VorbisComment &)... +\n");
1269*600f14f4SXin Li printf(" VorbisComment::operator==(const VorbisComment &)... ");
1270*600f14f4SXin Li {
1271*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy = block;
1272*600f14f4SXin Li if(!blockcopy.is_valid())
1273*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1274*600f14f4SXin Li if(!(blockcopy == block))
1275*600f14f4SXin Li return die_("copy is not identical to original");
1276*600f14f4SXin Li printf("OK\n");
1277*600f14f4SXin Li }
1278*600f14f4SXin Li
1279*600f14f4SXin Li printf("testing VorbisComment::operator=(const ::FLAC__StreamMetadata &)... +\n");
1280*600f14f4SXin Li printf(" VorbisComment::operator==(const ::FLAC__StreamMetadata &)... ");
1281*600f14f4SXin Li {
1282*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy = vorbiscomment_;
1283*600f14f4SXin Li if(!blockcopy.is_valid())
1284*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1285*600f14f4SXin Li if(!(blockcopy == vorbiscomment_))
1286*600f14f4SXin Li return die_("copy is not identical to original");
1287*600f14f4SXin Li printf("OK\n");
1288*600f14f4SXin Li }
1289*600f14f4SXin Li
1290*600f14f4SXin Li printf("testing VorbisComment::operator=(const ::FLAC__StreamMetadata *)... +\n");
1291*600f14f4SXin Li printf(" VorbisComment::operator==(const ::FLAC__StreamMetadata *)... ");
1292*600f14f4SXin Li {
1293*600f14f4SXin Li FLAC::Metadata::VorbisComment blockcopy = &vorbiscomment_;
1294*600f14f4SXin Li if(!blockcopy.is_valid())
1295*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1296*600f14f4SXin Li if(!(blockcopy == vorbiscomment_))
1297*600f14f4SXin Li return die_("copy is not identical to original");
1298*600f14f4SXin Li printf("OK\n");
1299*600f14f4SXin Li }
1300*600f14f4SXin Li
1301*600f14f4SXin Li printf("testing VorbisComment::get_num_comments()... ");
1302*600f14f4SXin Li if(block.get_num_comments() != 0)
1303*600f14f4SXin Li return die_("value mismatch, expected 0");
1304*600f14f4SXin Li printf("OK\n");
1305*600f14f4SXin Li
1306*600f14f4SXin Li printf("testing VorbisComment::set_vendor_string()... ");
1307*600f14f4SXin Li if(!block.set_vendor_string((const FLAC__byte *)"mame0"))
1308*600f14f4SXin Li return die_("returned false");
1309*600f14f4SXin Li printf("OK\n");
1310*600f14f4SXin Li vorbiscomment_.data.vorbis_comment.vendor_string.entry[0] = 'm';
1311*600f14f4SXin Li
1312*600f14f4SXin Li printf("testing VorbisComment::get_vendor_string()... ");
1313*600f14f4SXin Li if(strlen((const char *)block.get_vendor_string()) != vorbiscomment_.data.vorbis_comment.vendor_string.length)
1314*600f14f4SXin Li return die_("length mismatch");
1315*600f14f4SXin Li if(0 != memcmp(block.get_vendor_string(), vorbiscomment_.data.vorbis_comment.vendor_string.entry, vorbiscomment_.data.vorbis_comment.vendor_string.length))
1316*600f14f4SXin Li return die_("value mismatch");
1317*600f14f4SXin Li printf("OK\n");
1318*600f14f4SXin Li
1319*600f14f4SXin Li printf("testing VorbisComment::append_comment()... +\n");
1320*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1321*600f14f4SXin Li if(!block.append_comment(entry3))
1322*600f14f4SXin Li return die_("returned false");
1323*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1324*600f14f4SXin Li return die_("length mismatch");
1325*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1326*600f14f4SXin Li return die_("value mismatch");
1327*600f14f4SXin Li printf("OK\n");
1328*600f14f4SXin Li
1329*600f14f4SXin Li printf("testing VorbisComment::append_comment()... +\n");
1330*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1331*600f14f4SXin Li if(!block.append_comment(entry2))
1332*600f14f4SXin Li return die_("returned false");
1333*600f14f4SXin Li if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1334*600f14f4SXin Li return die_("length mismatch");
1335*600f14f4SXin Li if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1336*600f14f4SXin Li return die_("value mismatch");
1337*600f14f4SXin Li printf("OK\n");
1338*600f14f4SXin Li
1339*600f14f4SXin Li printf("testing VorbisComment::delete_comment()... +\n");
1340*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1341*600f14f4SXin Li if(!block.delete_comment(0))
1342*600f14f4SXin Li return die_("returned false");
1343*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1344*600f14f4SXin Li return die_("length[0] mismatch");
1345*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1346*600f14f4SXin Li return die_("value[0] mismatch");
1347*600f14f4SXin Li printf("OK\n");
1348*600f14f4SXin Li
1349*600f14f4SXin Li printf("testing VorbisComment::delete_comment()... +\n");
1350*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1351*600f14f4SXin Li if(!block.delete_comment(0))
1352*600f14f4SXin Li return die_("returned false");
1353*600f14f4SXin Li if(block.get_num_comments() != 0)
1354*600f14f4SXin Li return die_("block mismatch, expected num_comments = 0");
1355*600f14f4SXin Li printf("OK\n");
1356*600f14f4SXin Li
1357*600f14f4SXin Li printf("testing VorbisComment::insert_comment()... +\n");
1358*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1359*600f14f4SXin Li if(!block.insert_comment(0, entry3))
1360*600f14f4SXin Li return die_("returned false");
1361*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1362*600f14f4SXin Li return die_("length mismatch");
1363*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1364*600f14f4SXin Li return die_("value mismatch");
1365*600f14f4SXin Li printf("OK\n");
1366*600f14f4SXin Li
1367*600f14f4SXin Li printf("testing VorbisComment::insert_comment()... +\n");
1368*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1369*600f14f4SXin Li if(!block.insert_comment(0, entry3))
1370*600f14f4SXin Li return die_("returned false");
1371*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1372*600f14f4SXin Li return die_("length mismatch");
1373*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1374*600f14f4SXin Li return die_("value mismatch");
1375*600f14f4SXin Li printf("OK\n");
1376*600f14f4SXin Li
1377*600f14f4SXin Li printf("testing VorbisComment::insert_comment()... +\n");
1378*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1379*600f14f4SXin Li if(!block.insert_comment(1, entry2))
1380*600f14f4SXin Li return die_("returned false");
1381*600f14f4SXin Li if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1382*600f14f4SXin Li return die_("length mismatch");
1383*600f14f4SXin Li if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1384*600f14f4SXin Li return die_("value mismatch");
1385*600f14f4SXin Li printf("OK\n");
1386*600f14f4SXin Li
1387*600f14f4SXin Li printf("testing VorbisComment::set_comment()... +\n");
1388*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1389*600f14f4SXin Li if(!block.set_comment(0, entry2))
1390*600f14f4SXin Li return die_("returned false");
1391*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1392*600f14f4SXin Li return die_("length mismatch");
1393*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1394*600f14f4SXin Li return die_("value mismatch");
1395*600f14f4SXin Li printf("OK\n");
1396*600f14f4SXin Li
1397*600f14f4SXin Li printf("testing VorbisComment::delete_comment()... +\n");
1398*600f14f4SXin Li printf(" VorbisComment::get_comment()... ");
1399*600f14f4SXin Li if(!block.delete_comment(0))
1400*600f14f4SXin Li return die_("returned false");
1401*600f14f4SXin Li if(block.get_comment(0).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[0].length)
1402*600f14f4SXin Li return die_("length[0] mismatch");
1403*600f14f4SXin Li if(0 != memcmp(block.get_comment(0).get_field(), vorbiscomment_.data.vorbis_comment.comments[0].entry, vorbiscomment_.data.vorbis_comment.comments[0].length))
1404*600f14f4SXin Li return die_("value[0] mismatch");
1405*600f14f4SXin Li if(block.get_comment(1).get_field_length() != vorbiscomment_.data.vorbis_comment.comments[1].length)
1406*600f14f4SXin Li return die_("length[1] mismatch");
1407*600f14f4SXin Li if(0 != memcmp(block.get_comment(1).get_field(), vorbiscomment_.data.vorbis_comment.comments[1].entry, vorbiscomment_.data.vorbis_comment.comments[1].length))
1408*600f14f4SXin Li return die_("value[0] mismatch");
1409*600f14f4SXin Li printf("OK\n");
1410*600f14f4SXin Li
1411*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
1412*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
1413*600f14f4SXin Li if(0 == clone_)
1414*600f14f4SXin Li return die_("returned NULL");
1415*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::VorbisComment *>(clone_))
1416*600f14f4SXin Li return die_("downcast is NULL");
1417*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::VorbisComment *>(clone_) != block)
1418*600f14f4SXin Li return die_("clone is not identical");
1419*600f14f4SXin Li printf("OK\n");
1420*600f14f4SXin Li printf("testing VorbisComment::~VorbisComment()... ");
1421*600f14f4SXin Li delete clone_;
1422*600f14f4SXin Li printf("OK\n");
1423*600f14f4SXin Li
1424*600f14f4SXin Li
1425*600f14f4SXin Li printf("PASSED\n\n");
1426*600f14f4SXin Li return true;
1427*600f14f4SXin Li }
1428*600f14f4SXin Li
test_metadata_object_cuesheet()1429*600f14f4SXin Li bool test_metadata_object_cuesheet()
1430*600f14f4SXin Li {
1431*600f14f4SXin Li uint32_t expected_length;
1432*600f14f4SXin Li
1433*600f14f4SXin Li printf("testing class FLAC::Metadata::CueSheet::Track\n");
1434*600f14f4SXin Li
1435*600f14f4SXin Li printf("testing Track::Track()... ");
1436*600f14f4SXin Li FLAC::Metadata::CueSheet::Track track0;
1437*600f14f4SXin Li if(!track0.is_valid())
1438*600f14f4SXin Li return die_("!is_valid()");
1439*600f14f4SXin Li printf("OK\n");
1440*600f14f4SXin Li
1441*600f14f4SXin Li {
1442*600f14f4SXin Li printf("testing Track::get_track()... ");
1443*600f14f4SXin Li const ::FLAC__StreamMetadata_CueSheet_Track *trackp = track0.get_track();
1444*600f14f4SXin Li if(0 == trackp)
1445*600f14f4SXin Li return die_("returned pointer is NULL");
1446*600f14f4SXin Li printf("OK\n");
1447*600f14f4SXin Li
1448*600f14f4SXin Li printf("testing Track::Track(const ::FLAC__StreamMetadata_CueSheet_Track*)... ");
1449*600f14f4SXin Li FLAC::Metadata::CueSheet::Track track2(trackp);
1450*600f14f4SXin Li if(!track2.is_valid())
1451*600f14f4SXin Li return die_("!is_valid()");
1452*600f14f4SXin Li if(!track_is_equal_(track2.get_track(), trackp))
1453*600f14f4SXin Li return die_("copy is not equal");
1454*600f14f4SXin Li printf("OK\n");
1455*600f14f4SXin Li
1456*600f14f4SXin Li printf("testing Track::~Track()... ");
1457*600f14f4SXin Li }
1458*600f14f4SXin Li printf("OK\n");
1459*600f14f4SXin Li
1460*600f14f4SXin Li printf("testing Track::Track(const Track &track)... ");
1461*600f14f4SXin Li {
1462*600f14f4SXin Li FLAC::Metadata::CueSheet::Track track0copy(track0);
1463*600f14f4SXin Li if(!track0copy.is_valid())
1464*600f14f4SXin Li return die_("!is_valid()");
1465*600f14f4SXin Li if(!track_is_equal_(track0copy.get_track(), track0.get_track()))
1466*600f14f4SXin Li return die_("copy is not equal");
1467*600f14f4SXin Li printf("OK\n");
1468*600f14f4SXin Li
1469*600f14f4SXin Li printf("testing Track::~Track()... ");
1470*600f14f4SXin Li }
1471*600f14f4SXin Li printf("OK\n");
1472*600f14f4SXin Li
1473*600f14f4SXin Li printf("testing Track::operator=(const Track &track)... ");
1474*600f14f4SXin Li FLAC::Metadata::CueSheet::Track track1 = track0;
1475*600f14f4SXin Li if(!track0.is_valid())
1476*600f14f4SXin Li return die_("!is_valid()");
1477*600f14f4SXin Li if(!track_is_equal_(track1.get_track(), track0.get_track()))
1478*600f14f4SXin Li return die_("copy is not equal");
1479*600f14f4SXin Li printf("OK\n");
1480*600f14f4SXin Li
1481*600f14f4SXin Li printf("testing Track::get_offset()... ");
1482*600f14f4SXin Li if(track1.get_offset() != 0)
1483*600f14f4SXin Li return die_("value mismatch");
1484*600f14f4SXin Li printf("OK\n");
1485*600f14f4SXin Li
1486*600f14f4SXin Li printf("testing Track::get_number()... ");
1487*600f14f4SXin Li if(track1.get_number() != 0)
1488*600f14f4SXin Li return die_("value mismatch");
1489*600f14f4SXin Li printf("OK\n");
1490*600f14f4SXin Li
1491*600f14f4SXin Li printf("testing Track::get_isrc()... ");
1492*600f14f4SXin Li if(0 != memcmp(track1.get_isrc(), "\0\0\0\0\0\0\0\0\0\0\0\0\0", 13))
1493*600f14f4SXin Li return die_("value mismatch");
1494*600f14f4SXin Li printf("OK\n");
1495*600f14f4SXin Li
1496*600f14f4SXin Li printf("testing Track::get_type()... ");
1497*600f14f4SXin Li if(track1.get_type() != 0)
1498*600f14f4SXin Li return die_("value mismatch");
1499*600f14f4SXin Li printf("OK\n");
1500*600f14f4SXin Li
1501*600f14f4SXin Li printf("testing Track::get_pre_emphasis()... ");
1502*600f14f4SXin Li if(track1.get_pre_emphasis() != 0)
1503*600f14f4SXin Li return die_("value mismatch");
1504*600f14f4SXin Li printf("OK\n");
1505*600f14f4SXin Li
1506*600f14f4SXin Li printf("testing Track::get_num_indices()... ");
1507*600f14f4SXin Li if(track1.get_num_indices() != 0)
1508*600f14f4SXin Li return die_("value mismatch");
1509*600f14f4SXin Li printf("OK\n");
1510*600f14f4SXin Li
1511*600f14f4SXin Li printf("testing Track::set_offset()... ");
1512*600f14f4SXin Li track1.set_offset(588);
1513*600f14f4SXin Li if(track1.get_offset() != 588)
1514*600f14f4SXin Li return die_("value mismatch");
1515*600f14f4SXin Li printf("OK\n");
1516*600f14f4SXin Li
1517*600f14f4SXin Li printf("testing Track::set_number()... ");
1518*600f14f4SXin Li track1.set_number(1);
1519*600f14f4SXin Li if(track1.get_number() != 1)
1520*600f14f4SXin Li return die_("value mismatch");
1521*600f14f4SXin Li printf("OK\n");
1522*600f14f4SXin Li
1523*600f14f4SXin Li printf("testing Track::set_isrc()... ");
1524*600f14f4SXin Li track1.set_isrc("ABCDE1234567");
1525*600f14f4SXin Li if(0 != memcmp(track1.get_isrc(), "ABCDE1234567", 13))
1526*600f14f4SXin Li return die_("value mismatch");
1527*600f14f4SXin Li printf("OK\n");
1528*600f14f4SXin Li
1529*600f14f4SXin Li printf("testing Track::set_type()... ");
1530*600f14f4SXin Li track1.set_type(1);
1531*600f14f4SXin Li if(track1.get_type() != 1)
1532*600f14f4SXin Li return die_("value mismatch");
1533*600f14f4SXin Li printf("OK\n");
1534*600f14f4SXin Li
1535*600f14f4SXin Li printf("testing Track::set_pre_emphasis()... ");
1536*600f14f4SXin Li track1.set_pre_emphasis(1);
1537*600f14f4SXin Li if(track1.get_pre_emphasis() != 1)
1538*600f14f4SXin Li return die_("value mismatch");
1539*600f14f4SXin Li printf("OK\n");
1540*600f14f4SXin Li
1541*600f14f4SXin Li printf("PASSED\n\n");
1542*600f14f4SXin Li
1543*600f14f4SXin Li printf("testing class FLAC::Metadata::CueSheet\n");
1544*600f14f4SXin Li
1545*600f14f4SXin Li printf("testing CueSheet::CueSheet()... ");
1546*600f14f4SXin Li FLAC::Metadata::CueSheet block;
1547*600f14f4SXin Li if(!block.is_valid())
1548*600f14f4SXin Li return die_("!block.is_valid()");
1549*600f14f4SXin Li expected_length = (
1550*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
1551*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
1552*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
1553*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
1554*600f14f4SXin Li FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
1555*600f14f4SXin Li ) / 8;
1556*600f14f4SXin Li if(block.get_length() != expected_length) {
1557*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1558*600f14f4SXin Li return false;
1559*600f14f4SXin Li }
1560*600f14f4SXin Li printf("OK\n");
1561*600f14f4SXin Li
1562*600f14f4SXin Li printf("testing CueSheet::CueSheet(const CueSheet &)... +\n");
1563*600f14f4SXin Li printf(" CueSheet::operator!=(const CueSheet &)... ");
1564*600f14f4SXin Li {
1565*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy(block);
1566*600f14f4SXin Li if(!blockcopy.is_valid())
1567*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1568*600f14f4SXin Li if(blockcopy != block)
1569*600f14f4SXin Li return die_("copy is not identical to original");
1570*600f14f4SXin Li printf("OK\n");
1571*600f14f4SXin Li
1572*600f14f4SXin Li printf("testing CueSheet::~CueSheet()... ");
1573*600f14f4SXin Li }
1574*600f14f4SXin Li printf("OK\n");
1575*600f14f4SXin Li
1576*600f14f4SXin Li printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata &)... +\n");
1577*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata &)... ");
1578*600f14f4SXin Li {
1579*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy(cuesheet_);
1580*600f14f4SXin Li if(!blockcopy.is_valid())
1581*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1582*600f14f4SXin Li if(blockcopy != cuesheet_)
1583*600f14f4SXin Li return die_("copy is not identical to original");
1584*600f14f4SXin Li printf("OK\n");
1585*600f14f4SXin Li }
1586*600f14f4SXin Li
1587*600f14f4SXin Li printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *)... +\n");
1588*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1589*600f14f4SXin Li {
1590*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy(&cuesheet_);
1591*600f14f4SXin Li if(!blockcopy.is_valid())
1592*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1593*600f14f4SXin Li if(blockcopy != cuesheet_)
1594*600f14f4SXin Li return die_("copy is not identical to original");
1595*600f14f4SXin Li printf("OK\n");
1596*600f14f4SXin Li }
1597*600f14f4SXin Li
1598*600f14f4SXin Li printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1599*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1600*600f14f4SXin Li {
1601*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy(&cuesheet_, /*copy=*/true);
1602*600f14f4SXin Li if(!blockcopy.is_valid())
1603*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1604*600f14f4SXin Li if(blockcopy != cuesheet_)
1605*600f14f4SXin Li return die_("copy is not identical to original");
1606*600f14f4SXin Li printf("OK\n");
1607*600f14f4SXin Li }
1608*600f14f4SXin Li
1609*600f14f4SXin Li printf("testing CueSheet::CueSheet(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1610*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1611*600f14f4SXin Li {
1612*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&cuesheet_);
1613*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy(copy, /*copy=*/false);
1614*600f14f4SXin Li if(!blockcopy.is_valid())
1615*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1616*600f14f4SXin Li if(blockcopy != cuesheet_)
1617*600f14f4SXin Li return die_("copy is not identical to original");
1618*600f14f4SXin Li printf("OK\n");
1619*600f14f4SXin Li }
1620*600f14f4SXin Li
1621*600f14f4SXin Li printf("testing CueSheet::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1622*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1623*600f14f4SXin Li {
1624*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy;
1625*600f14f4SXin Li blockcopy.assign(&cuesheet_, /*copy=*/true);
1626*600f14f4SXin Li if(!blockcopy.is_valid())
1627*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1628*600f14f4SXin Li if(blockcopy != cuesheet_)
1629*600f14f4SXin Li return die_("copy is not identical to original");
1630*600f14f4SXin Li printf("OK\n");
1631*600f14f4SXin Li }
1632*600f14f4SXin Li
1633*600f14f4SXin Li printf("testing CueSheet::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1634*600f14f4SXin Li printf(" CueSheet::operator!=(const ::FLAC__StreamMetadata *)... ");
1635*600f14f4SXin Li {
1636*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&cuesheet_);
1637*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy;
1638*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
1639*600f14f4SXin Li if(!blockcopy.is_valid())
1640*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1641*600f14f4SXin Li if(blockcopy != cuesheet_)
1642*600f14f4SXin Li return die_("copy is not identical to original");
1643*600f14f4SXin Li printf("OK\n");
1644*600f14f4SXin Li }
1645*600f14f4SXin Li
1646*600f14f4SXin Li printf("testing CueSheet::operator=(const CueSheet &)... +\n");
1647*600f14f4SXin Li printf(" CueSheet::operator==(const CueSheet &)... ");
1648*600f14f4SXin Li {
1649*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy = block;
1650*600f14f4SXin Li if(!blockcopy.is_valid())
1651*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1652*600f14f4SXin Li if(!(blockcopy == block))
1653*600f14f4SXin Li return die_("copy is not identical to original");
1654*600f14f4SXin Li printf("OK\n");
1655*600f14f4SXin Li }
1656*600f14f4SXin Li
1657*600f14f4SXin Li printf("testing CueSheet::operator=(const ::FLAC__StreamMetadata &)... +\n");
1658*600f14f4SXin Li printf(" CueSheet::operator==(const ::FLAC__StreamMetadata &)... ");
1659*600f14f4SXin Li {
1660*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy = cuesheet_;
1661*600f14f4SXin Li if(!blockcopy.is_valid())
1662*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1663*600f14f4SXin Li if(!(blockcopy == cuesheet_))
1664*600f14f4SXin Li return die_("copy is not identical to original");
1665*600f14f4SXin Li printf("OK\n");
1666*600f14f4SXin Li }
1667*600f14f4SXin Li
1668*600f14f4SXin Li printf("testing CueSheet::operator=(const ::FLAC__StreamMetadata *)... +\n");
1669*600f14f4SXin Li printf(" CueSheet::operator==(const ::FLAC__StreamMetadata *)... ");
1670*600f14f4SXin Li {
1671*600f14f4SXin Li FLAC::Metadata::CueSheet blockcopy = &cuesheet_;
1672*600f14f4SXin Li if(!blockcopy.is_valid())
1673*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1674*600f14f4SXin Li if(!(blockcopy == cuesheet_))
1675*600f14f4SXin Li return die_("copy is not identical to original");
1676*600f14f4SXin Li printf("OK\n");
1677*600f14f4SXin Li }
1678*600f14f4SXin Li
1679*600f14f4SXin Li printf("testing CueSheet::get_media_catalog_number()... ");
1680*600f14f4SXin Li if(0 != strcmp(block.get_media_catalog_number(), ""))
1681*600f14f4SXin Li return die_("value mismatch");
1682*600f14f4SXin Li printf("OK\n");
1683*600f14f4SXin Li
1684*600f14f4SXin Li printf("testing CueSheet::get_lead_in()... ");
1685*600f14f4SXin Li if(block.get_lead_in() != 0)
1686*600f14f4SXin Li return die_("value mismatch, expected 0");
1687*600f14f4SXin Li printf("OK\n");
1688*600f14f4SXin Li
1689*600f14f4SXin Li printf("testing CueSheet::get_is_cd()... ");
1690*600f14f4SXin Li if(block.get_is_cd())
1691*600f14f4SXin Li return die_("value mismatch, expected false");
1692*600f14f4SXin Li printf("OK\n");
1693*600f14f4SXin Li
1694*600f14f4SXin Li printf("testing CueSheet::get_num_tracks()... ");
1695*600f14f4SXin Li if(block.get_num_tracks() != 0)
1696*600f14f4SXin Li return die_("value mismatch, expected 0");
1697*600f14f4SXin Li printf("OK\n");
1698*600f14f4SXin Li
1699*600f14f4SXin Li printf("testing CueSheet::set_media_catalog_number()... ");
1700*600f14f4SXin Li {
1701*600f14f4SXin Li char mcn[129];
1702*600f14f4SXin Li memset(mcn, 0, sizeof(mcn));
1703*600f14f4SXin Li safe_strncpy(mcn, "1234567890123", sizeof(mcn));
1704*600f14f4SXin Li block.set_media_catalog_number(mcn);
1705*600f14f4SXin Li if(0 != memcmp(block.get_media_catalog_number(), mcn, sizeof(mcn)))
1706*600f14f4SXin Li return die_("value mismatch");
1707*600f14f4SXin Li }
1708*600f14f4SXin Li printf("OK\n");
1709*600f14f4SXin Li
1710*600f14f4SXin Li printf("testing CueSheet::set_lead_in()... ");
1711*600f14f4SXin Li block.set_lead_in(588);
1712*600f14f4SXin Li if(block.get_lead_in() != 588)
1713*600f14f4SXin Li return die_("value mismatch");
1714*600f14f4SXin Li printf("OK\n");
1715*600f14f4SXin Li
1716*600f14f4SXin Li printf("testing CueSheet::set_is_cd()... ");
1717*600f14f4SXin Li block.set_is_cd(true);
1718*600f14f4SXin Li if(!block.get_is_cd())
1719*600f14f4SXin Li return die_("value mismatch");
1720*600f14f4SXin Li printf("OK\n");
1721*600f14f4SXin Li
1722*600f14f4SXin Li printf("testing CueSheet::insert_track()... +\n");
1723*600f14f4SXin Li printf(" CueSheet::get_track()... ");
1724*600f14f4SXin Li if(!block.insert_track(0, track0))
1725*600f14f4SXin Li return die_("returned false");
1726*600f14f4SXin Li if(!track_is_equal_(block.get_track(0).get_track(), track0.get_track()))
1727*600f14f4SXin Li return die_("value mismatch");
1728*600f14f4SXin Li printf("OK\n");
1729*600f14f4SXin Li
1730*600f14f4SXin Li printf("testing CueSheet::insert_track()... +\n");
1731*600f14f4SXin Li printf(" CueSheet::get_track()... ");
1732*600f14f4SXin Li if(!block.insert_track(1, track1))
1733*600f14f4SXin Li return die_("returned false");
1734*600f14f4SXin Li if(!track_is_equal_(block.get_track(1).get_track(), track1.get_track()))
1735*600f14f4SXin Li return die_("value mismatch");
1736*600f14f4SXin Li printf("OK\n");
1737*600f14f4SXin Li
1738*600f14f4SXin Li ::FLAC__StreamMetadata_CueSheet_Index index0;
1739*600f14f4SXin Li index0.offset = 588*4;
1740*600f14f4SXin Li index0.number = 1;
1741*600f14f4SXin Li
1742*600f14f4SXin Li printf("testing CueSheet::insert_index(0)... +\n");
1743*600f14f4SXin Li printf(" CueSheet::get_track()... +\n");
1744*600f14f4SXin Li printf(" CueSheet::Track::get_index()... ");
1745*600f14f4SXin Li if(!block.insert_index(0, 0, index0))
1746*600f14f4SXin Li return die_("returned false");
1747*600f14f4SXin Li if(!index_is_equal_(block.get_track(0).get_index(0), index0))
1748*600f14f4SXin Li return die_("value mismatch");
1749*600f14f4SXin Li printf("OK\n");
1750*600f14f4SXin Li
1751*600f14f4SXin Li index0.offset = 588*5;
1752*600f14f4SXin Li printf("testing CueSheet::Track::set_index()... ");
1753*600f14f4SXin Li {
1754*600f14f4SXin Li FLAC::Metadata::CueSheet::Track track_ = block.get_track(0);
1755*600f14f4SXin Li track_.set_index(0, index0);
1756*600f14f4SXin Li if(!index_is_equal_(track_.get_index(0), index0))
1757*600f14f4SXin Li return die_("value mismatch");
1758*600f14f4SXin Li }
1759*600f14f4SXin Li printf("OK\n");
1760*600f14f4SXin Li
1761*600f14f4SXin Li index0.offset = 588*6;
1762*600f14f4SXin Li printf("testing CueSheet::set_index()... ");
1763*600f14f4SXin Li block.set_index(0, 0, index0);
1764*600f14f4SXin Li if(!index_is_equal_(block.get_track(0).get_index(0), index0))
1765*600f14f4SXin Li return die_("value mismatch");
1766*600f14f4SXin Li printf("OK\n");
1767*600f14f4SXin Li
1768*600f14f4SXin Li printf("testing CueSheet::delete_index()... ");
1769*600f14f4SXin Li if(!block.delete_index(0, 0))
1770*600f14f4SXin Li return die_("returned false");
1771*600f14f4SXin Li if(block.get_track(0).get_num_indices() != 0)
1772*600f14f4SXin Li return die_("num_indices mismatch");
1773*600f14f4SXin Li printf("OK\n");
1774*600f14f4SXin Li
1775*600f14f4SXin Li
1776*600f14f4SXin Li printf("testing CueSheet::set_track()... +\n");
1777*600f14f4SXin Li printf(" CueSheet::get_track()... ");
1778*600f14f4SXin Li if(!block.set_track(0, track1))
1779*600f14f4SXin Li return die_("returned false");
1780*600f14f4SXin Li if(!track_is_equal_(block.get_track(0).get_track(), track1.get_track()))
1781*600f14f4SXin Li return die_("value mismatch");
1782*600f14f4SXin Li printf("OK\n");
1783*600f14f4SXin Li
1784*600f14f4SXin Li printf("testing CueSheet::delete_track()... ");
1785*600f14f4SXin Li if(!block.delete_track(0))
1786*600f14f4SXin Li return die_("returned false");
1787*600f14f4SXin Li if(block.get_num_tracks() != 1)
1788*600f14f4SXin Li return die_("num_tracks mismatch");
1789*600f14f4SXin Li printf("OK\n");
1790*600f14f4SXin Li
1791*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
1792*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
1793*600f14f4SXin Li if(0 == clone_)
1794*600f14f4SXin Li return die_("returned NULL");
1795*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::CueSheet *>(clone_))
1796*600f14f4SXin Li return die_("downcast is NULL");
1797*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::CueSheet *>(clone_) != block)
1798*600f14f4SXin Li return die_("clone is not identical");
1799*600f14f4SXin Li printf("OK\n");
1800*600f14f4SXin Li printf("testing CueSheet::~CueSheet()... ");
1801*600f14f4SXin Li delete clone_;
1802*600f14f4SXin Li printf("OK\n");
1803*600f14f4SXin Li
1804*600f14f4SXin Li printf("PASSED\n\n");
1805*600f14f4SXin Li return true;
1806*600f14f4SXin Li }
1807*600f14f4SXin Li
test_metadata_object_picture()1808*600f14f4SXin Li bool test_metadata_object_picture()
1809*600f14f4SXin Li {
1810*600f14f4SXin Li uint32_t expected_length;
1811*600f14f4SXin Li
1812*600f14f4SXin Li printf("testing class FLAC::Metadata::Picture\n");
1813*600f14f4SXin Li
1814*600f14f4SXin Li printf("testing Picture::Picture()... ");
1815*600f14f4SXin Li FLAC::Metadata::Picture block;
1816*600f14f4SXin Li if(!block.is_valid())
1817*600f14f4SXin Li return die_("!block.is_valid()");
1818*600f14f4SXin Li expected_length = (
1819*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_TYPE_LEN +
1820*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN +
1821*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN +
1822*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN +
1823*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN +
1824*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN +
1825*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_COLORS_LEN +
1826*600f14f4SXin Li FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN
1827*600f14f4SXin Li ) / 8;
1828*600f14f4SXin Li if(block.get_length() != expected_length) {
1829*600f14f4SXin Li printf("FAILED, bad length, expected %u, got %u\n", expected_length, block.get_length());
1830*600f14f4SXin Li return false;
1831*600f14f4SXin Li }
1832*600f14f4SXin Li printf("OK\n");
1833*600f14f4SXin Li
1834*600f14f4SXin Li printf("testing Picture::Picture(const Picture &)... +\n");
1835*600f14f4SXin Li printf(" Picture::operator!=(const Picture &)... ");
1836*600f14f4SXin Li {
1837*600f14f4SXin Li FLAC::Metadata::Picture blockcopy(block);
1838*600f14f4SXin Li if(!blockcopy.is_valid())
1839*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1840*600f14f4SXin Li if(blockcopy != block)
1841*600f14f4SXin Li return die_("copy is not identical to original");
1842*600f14f4SXin Li printf("OK\n");
1843*600f14f4SXin Li
1844*600f14f4SXin Li printf("testing Picture::~Picture()... ");
1845*600f14f4SXin Li }
1846*600f14f4SXin Li printf("OK\n");
1847*600f14f4SXin Li
1848*600f14f4SXin Li printf("testing Picture::Picture(const ::FLAC__StreamMetadata &)... +\n");
1849*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata &)... ");
1850*600f14f4SXin Li {
1851*600f14f4SXin Li FLAC::Metadata::Picture blockcopy(picture_);
1852*600f14f4SXin Li if(!blockcopy.is_valid())
1853*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1854*600f14f4SXin Li if(blockcopy != picture_)
1855*600f14f4SXin Li return die_("copy is not identical to original");
1856*600f14f4SXin Li printf("OK\n");
1857*600f14f4SXin Li }
1858*600f14f4SXin Li
1859*600f14f4SXin Li printf("testing Picture::Picture(const ::FLAC__StreamMetadata *)... +\n");
1860*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1861*600f14f4SXin Li {
1862*600f14f4SXin Li FLAC::Metadata::Picture blockcopy(&picture_);
1863*600f14f4SXin Li if(!blockcopy.is_valid())
1864*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1865*600f14f4SXin Li if(blockcopy != picture_)
1866*600f14f4SXin Li return die_("copy is not identical to original");
1867*600f14f4SXin Li printf("OK\n");
1868*600f14f4SXin Li }
1869*600f14f4SXin Li
1870*600f14f4SXin Li printf("testing Picture::Picture(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1871*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1872*600f14f4SXin Li {
1873*600f14f4SXin Li FLAC::Metadata::Picture blockcopy(&picture_, /*copy=*/true);
1874*600f14f4SXin Li if(!blockcopy.is_valid())
1875*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1876*600f14f4SXin Li if(blockcopy != picture_)
1877*600f14f4SXin Li return die_("copy is not identical to original");
1878*600f14f4SXin Li printf("OK\n");
1879*600f14f4SXin Li }
1880*600f14f4SXin Li
1881*600f14f4SXin Li printf("testing Picture::Picture(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1882*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1883*600f14f4SXin Li {
1884*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&picture_);
1885*600f14f4SXin Li FLAC::Metadata::Picture blockcopy(copy, /*copy=*/false);
1886*600f14f4SXin Li if(!blockcopy.is_valid())
1887*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1888*600f14f4SXin Li if(blockcopy != picture_)
1889*600f14f4SXin Li return die_("copy is not identical to original");
1890*600f14f4SXin Li printf("OK\n");
1891*600f14f4SXin Li }
1892*600f14f4SXin Li
1893*600f14f4SXin Li printf("testing Picture::assign(const ::FLAC__StreamMetadata *, copy=true)... +\n");
1894*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1895*600f14f4SXin Li {
1896*600f14f4SXin Li FLAC::Metadata::Picture blockcopy;
1897*600f14f4SXin Li blockcopy.assign(&picture_, /*copy=*/true);
1898*600f14f4SXin Li if(!blockcopy.is_valid())
1899*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1900*600f14f4SXin Li if(blockcopy != picture_)
1901*600f14f4SXin Li return die_("copy is not identical to original");
1902*600f14f4SXin Li printf("OK\n");
1903*600f14f4SXin Li }
1904*600f14f4SXin Li
1905*600f14f4SXin Li printf("testing Picture::assign(const ::FLAC__StreamMetadata *, copy=false)... +\n");
1906*600f14f4SXin Li printf(" Picture::operator!=(const ::FLAC__StreamMetadata *)... ");
1907*600f14f4SXin Li {
1908*600f14f4SXin Li ::FLAC__StreamMetadata *copy = ::FLAC__metadata_object_clone(&picture_);
1909*600f14f4SXin Li FLAC::Metadata::Picture blockcopy;
1910*600f14f4SXin Li blockcopy.assign(copy, /*copy=*/false);
1911*600f14f4SXin Li if(!blockcopy.is_valid())
1912*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1913*600f14f4SXin Li if(blockcopy != picture_)
1914*600f14f4SXin Li return die_("copy is not identical to original");
1915*600f14f4SXin Li printf("OK\n");
1916*600f14f4SXin Li }
1917*600f14f4SXin Li
1918*600f14f4SXin Li printf("testing Picture::operator=(const Picture &)... +\n");
1919*600f14f4SXin Li printf(" Picture::operator==(const Picture &)... ");
1920*600f14f4SXin Li {
1921*600f14f4SXin Li FLAC::Metadata::Picture blockcopy = block;
1922*600f14f4SXin Li if(!blockcopy.is_valid())
1923*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1924*600f14f4SXin Li if(!(blockcopy == block))
1925*600f14f4SXin Li return die_("copy is not identical to original");
1926*600f14f4SXin Li printf("OK\n");
1927*600f14f4SXin Li }
1928*600f14f4SXin Li
1929*600f14f4SXin Li printf("testing Picture::operator=(const ::FLAC__StreamMetadata &)... +\n");
1930*600f14f4SXin Li printf(" Picture::operator==(const ::FLAC__StreamMetadata &)... ");
1931*600f14f4SXin Li {
1932*600f14f4SXin Li FLAC::Metadata::Picture blockcopy = picture_;
1933*600f14f4SXin Li if(!blockcopy.is_valid())
1934*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1935*600f14f4SXin Li if(!(blockcopy == picture_))
1936*600f14f4SXin Li return die_("copy is not identical to original");
1937*600f14f4SXin Li printf("OK\n");
1938*600f14f4SXin Li }
1939*600f14f4SXin Li
1940*600f14f4SXin Li printf("testing Picture::operator=(const ::FLAC__StreamMetadata *)... +\n");
1941*600f14f4SXin Li printf(" Picture::operator==(const ::FLAC__StreamMetadata *)... ");
1942*600f14f4SXin Li {
1943*600f14f4SXin Li FLAC::Metadata::Picture blockcopy = &picture_;
1944*600f14f4SXin Li if(!blockcopy.is_valid())
1945*600f14f4SXin Li return die_("!blockcopy.is_valid()");
1946*600f14f4SXin Li if(!(blockcopy == picture_))
1947*600f14f4SXin Li return die_("copy is not identical to original");
1948*600f14f4SXin Li printf("OK\n");
1949*600f14f4SXin Li }
1950*600f14f4SXin Li
1951*600f14f4SXin Li printf("testing Picture::get_type()... ");
1952*600f14f4SXin Li if(block.get_type() != ::FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER)
1953*600f14f4SXin Li return die_("value mismatch, expected ::FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER");
1954*600f14f4SXin Li printf("OK\n");
1955*600f14f4SXin Li
1956*600f14f4SXin Li printf("testing Picture::set_type()... +\n");
1957*600f14f4SXin Li printf(" Picture::get_type()... ");
1958*600f14f4SXin Li block.set_type(::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA);
1959*600f14f4SXin Li if(block.get_type() != ::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA)
1960*600f14f4SXin Li return die_("value mismatch, expected ::FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA");
1961*600f14f4SXin Li printf("OK\n");
1962*600f14f4SXin Li
1963*600f14f4SXin Li printf("testing Picture::set_mime_type()... ");
1964*600f14f4SXin Li if(!block.set_mime_type("qmage/jpeg"))
1965*600f14f4SXin Li return die_("returned false");
1966*600f14f4SXin Li printf("OK\n");
1967*600f14f4SXin Li picture_.data.picture.mime_type[0] = 'q';
1968*600f14f4SXin Li
1969*600f14f4SXin Li printf("testing Picture::get_mime_type()... ");
1970*600f14f4SXin Li if(0 != strcmp(block.get_mime_type(), picture_.data.picture.mime_type))
1971*600f14f4SXin Li return die_("value mismatch");
1972*600f14f4SXin Li printf("OK\n");
1973*600f14f4SXin Li
1974*600f14f4SXin Li printf("testing Picture::set_description()... ");
1975*600f14f4SXin Li if(!block.set_description((const FLAC__byte*)"qesc"))
1976*600f14f4SXin Li return die_("returned false");
1977*600f14f4SXin Li printf("OK\n");
1978*600f14f4SXin Li picture_.data.picture.description[0] = 'q';
1979*600f14f4SXin Li
1980*600f14f4SXin Li printf("testing Picture::get_description()... ");
1981*600f14f4SXin Li if(0 != strcmp((const char *)block.get_description(), (const char *)picture_.data.picture.description))
1982*600f14f4SXin Li return die_("value mismatch");
1983*600f14f4SXin Li printf("OK\n");
1984*600f14f4SXin Li
1985*600f14f4SXin Li printf("testing Picture::get_width()... ");
1986*600f14f4SXin Li if(block.get_width() != 0)
1987*600f14f4SXin Li return die_("value mismatch, expected 0");
1988*600f14f4SXin Li printf("OK\n");
1989*600f14f4SXin Li
1990*600f14f4SXin Li printf("testing Picture::set_width()... +\n");
1991*600f14f4SXin Li printf(" Picture::get_width()... ");
1992*600f14f4SXin Li block.set_width(400);
1993*600f14f4SXin Li if(block.get_width() != 400)
1994*600f14f4SXin Li return die_("value mismatch, expected 400");
1995*600f14f4SXin Li printf("OK\n");
1996*600f14f4SXin Li
1997*600f14f4SXin Li printf("testing Picture::get_height()... ");
1998*600f14f4SXin Li if(block.get_height() != 0)
1999*600f14f4SXin Li return die_("value mismatch, expected 0");
2000*600f14f4SXin Li printf("OK\n");
2001*600f14f4SXin Li
2002*600f14f4SXin Li printf("testing Picture::set_height()... +\n");
2003*600f14f4SXin Li printf(" Picture::get_height()... ");
2004*600f14f4SXin Li block.set_height(200);
2005*600f14f4SXin Li if(block.get_height() != 200)
2006*600f14f4SXin Li return die_("value mismatch, expected 200");
2007*600f14f4SXin Li printf("OK\n");
2008*600f14f4SXin Li
2009*600f14f4SXin Li printf("testing Picture::get_depth()... ");
2010*600f14f4SXin Li if(block.get_depth() != 0)
2011*600f14f4SXin Li return die_("value mismatch, expected 0");
2012*600f14f4SXin Li printf("OK\n");
2013*600f14f4SXin Li
2014*600f14f4SXin Li printf("testing Picture::set_depth()... +\n");
2015*600f14f4SXin Li printf(" Picture::get_depth()... ");
2016*600f14f4SXin Li block.set_depth(16);
2017*600f14f4SXin Li if(block.get_depth() != 16)
2018*600f14f4SXin Li return die_("value mismatch, expected 16");
2019*600f14f4SXin Li printf("OK\n");
2020*600f14f4SXin Li
2021*600f14f4SXin Li printf("testing Picture::get_colors()... ");
2022*600f14f4SXin Li if(block.get_colors() != 0)
2023*600f14f4SXin Li return die_("value mismatch, expected 0");
2024*600f14f4SXin Li printf("OK\n");
2025*600f14f4SXin Li
2026*600f14f4SXin Li printf("testing Picture::set_colors()... +\n");
2027*600f14f4SXin Li printf(" Picture::get_colors()... ");
2028*600f14f4SXin Li block.set_colors(1u>16);
2029*600f14f4SXin Li if(block.get_colors() != (1u>16))
2030*600f14f4SXin Li return die_("value mismatch, expected 2^16");
2031*600f14f4SXin Li printf("OK\n");
2032*600f14f4SXin Li
2033*600f14f4SXin Li printf("testing Picture::get_data_length()... ");
2034*600f14f4SXin Li if(block.get_data_length() != 0)
2035*600f14f4SXin Li return die_("value mismatch, expected 0");
2036*600f14f4SXin Li printf("OK\n");
2037*600f14f4SXin Li
2038*600f14f4SXin Li printf("testing Picture::set_data()... ");
2039*600f14f4SXin Li if(!block.set_data((const FLAC__byte*)"qOMEJPEGDATA", strlen("qOMEJPEGDATA")))
2040*600f14f4SXin Li return die_("returned false");
2041*600f14f4SXin Li printf("OK\n");
2042*600f14f4SXin Li picture_.data.picture.data[0] = 'q';
2043*600f14f4SXin Li
2044*600f14f4SXin Li printf("testing Picture::get_data()... ");
2045*600f14f4SXin Li if(block.get_data_length() != picture_.data.picture.data_length)
2046*600f14f4SXin Li return die_("length mismatch");
2047*600f14f4SXin Li if(0 != memcmp(block.get_data(), picture_.data.picture.data, picture_.data.picture.data_length))
2048*600f14f4SXin Li return die_("value mismatch");
2049*600f14f4SXin Li printf("OK\n");
2050*600f14f4SXin Li
2051*600f14f4SXin Li printf("testing FLAC::Metadata::clone(const FLAC::Metadata::Prototype *)... ");
2052*600f14f4SXin Li FLAC::Metadata::Prototype *clone_ = FLAC::Metadata::clone(&block);
2053*600f14f4SXin Li if(0 == clone_)
2054*600f14f4SXin Li return die_("returned NULL");
2055*600f14f4SXin Li if(0 == dynamic_cast<FLAC::Metadata::Picture *>(clone_))
2056*600f14f4SXin Li return die_("downcast is NULL");
2057*600f14f4SXin Li if(*dynamic_cast<FLAC::Metadata::Picture *>(clone_) != block)
2058*600f14f4SXin Li return die_("clone is not identical");
2059*600f14f4SXin Li printf("OK\n");
2060*600f14f4SXin Li printf("testing Picture::~Picture()... ");
2061*600f14f4SXin Li delete clone_;
2062*600f14f4SXin Li printf("OK\n");
2063*600f14f4SXin Li
2064*600f14f4SXin Li
2065*600f14f4SXin Li printf("PASSED\n\n");
2066*600f14f4SXin Li return true;
2067*600f14f4SXin Li }
2068*600f14f4SXin Li
test_metadata_object()2069*600f14f4SXin Li bool test_metadata_object()
2070*600f14f4SXin Li {
2071*600f14f4SXin Li printf("\n+++ libFLAC++ unit test: metadata objects\n\n");
2072*600f14f4SXin Li
2073*600f14f4SXin Li init_metadata_blocks_();
2074*600f14f4SXin Li
2075*600f14f4SXin Li if(!test_metadata_object_streaminfo())
2076*600f14f4SXin Li return false;
2077*600f14f4SXin Li
2078*600f14f4SXin Li if(!test_metadata_object_padding())
2079*600f14f4SXin Li return false;
2080*600f14f4SXin Li
2081*600f14f4SXin Li if(!test_metadata_object_application())
2082*600f14f4SXin Li return false;
2083*600f14f4SXin Li
2084*600f14f4SXin Li if(!test_metadata_object_seektable())
2085*600f14f4SXin Li return false;
2086*600f14f4SXin Li
2087*600f14f4SXin Li if(!test_metadata_object_vorbiscomment())
2088*600f14f4SXin Li return false;
2089*600f14f4SXin Li
2090*600f14f4SXin Li if(!test_metadata_object_cuesheet())
2091*600f14f4SXin Li return false;
2092*600f14f4SXin Li
2093*600f14f4SXin Li if(!test_metadata_object_picture())
2094*600f14f4SXin Li return false;
2095*600f14f4SXin Li
2096*600f14f4SXin Li free_metadata_blocks_();
2097*600f14f4SXin Li
2098*600f14f4SXin Li return true;
2099*600f14f4SXin Li }
2100