/*
Copyright (C) 2013 Rocky Bernstein <rocky@gnu.org>
Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
Regression test for lib/cdda_interface/toc.c
To compile as s standalone program:
gcc -g3 -Wall -DHAVE_CONFIG_H -I../.. -I../..include toc.c \
../../lib/paranoia/libcdio_paranoia.la ../../lib/cdda_interface/.lib/libcdio_cdda.a -lcdio -o toc
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#define __CDIO_CONFIG_H__ 1
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <cdio/paranoia/cdda.h>
#include <cdio/cd_types.h>
#include <cdio/logging.h>
#ifndef DATA_DIR
#define DATA_DIR "@srcdir@/../data"
#endif
static void
log_handler (cdio_log_level_t level, const char message[])
{
switch(level) {
case CDIO_LOG_DEBUG:
case CDIO_LOG_INFO:
return;
default:
printf("cdio %d message: %s\n", level, message);
}
}
static int testit(cdrom_drive_t *d) {
track_t t = 0;
lsn_t lsn = 0;
/* Check number of tracks.
*/
t = cdda_tracks(d);
if (t != 1) {
printf("Should have found one track, got %d\n", t);
return 1;
}
/* Check disc sector reporting.
*/
lsn = cdda_disc_firstsector(d);
if ( lsn != 0 ) {
printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
return 2;
}
lsn = cdda_disc_lastsector(d);
if ( lsn != 301 ) {
printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
return 2;
}
/* Check pregap sector reporting (should fail here).
*/
lsn = cdda_track_firstsector(d, 0);
if ( lsn != -402 ) {
printf("Should have gotten error code -402, got %d.\n", lsn);
return 3;
}
lsn = cdda_track_lastsector(d, 0);
if ( lsn != -402 ) {
printf("Should have gotten error code -402, got %d.\n", lsn);
return 3;
}
/* Check track sector reporting.
*/
lsn = cdda_track_firstsector(d, 1);
if ( lsn != 0 ) {
printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
return 2;
}
lsn = cdda_track_lastsector(d, 1);
if ( lsn != 301 ) {
printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
return 2;
}
/* Check sector track reporting.
*/
t = cdda_sector_gettrack(d, 100);
if ( 1 != t ) {
printf("Should have gotten 1 as the track, got %d.\n", t);
return 2;
}
t = cdda_sector_gettrack(d, 1000);
if ( CDIO_INVALID_TRACK != t ) {
printf("Should have gotten CDIO_INVALID_TRACK as the track, got %d.\n", t);
return 3;
}
return 0;
}
int
main(int argc, const char *argv[])
{
cdrom_drive_t *d = NULL; /* Place to store handle given by cd-paranoia. */
CdIo_t *p_cdio;
int rc;
cdio_log_set_handler (log_handler);
if (cdio_have_driver(DRIVER_BINCUE)) {
p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.cue", DRIVER_UNKNOWN);
} else if (cdio_have_driver(DRIVER_CDRDAO)) {
p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.toc", DRIVER_UNKNOWN);
} else {
printf("-- You don't have enough drivers for this test\n");
return 77;
}
d=cdio_cddap_identify_cdio(p_cdio, CDDA_MESSAGE_PRINTIT, NULL);
if ( !d ) {
printf("Should have identified as an audio CD disc.\n");
return 1;
}
if ( 0 != cdio_cddap_open(d) ) {
printf("Unable to open disc.\n");
return 2;
}
rc = testit(d);
cdio_cddap_close_no_free_cdio(d);
cdio_destroy(p_cdio);
return rc;
}