#!/usr/bin/perl
#use warnings; # Testing
no warnings; # Production
use strict;
use Test::More tests => 13; # One test temporarily removed
use Mac::iPod::GNUpod;
use File::Spec;
my $fakepod = File::Spec->catdir('t', 'fakepod');
my $mp3 = File::Spec->catfile('t', 'test.mp3');
my $accent = File::Spec->catfile('t', 'accented.mp3');
# This test adds/removes files
{
my $ipod = Mac::iPod::GNUpod->new(mountpoint => $fakepod);
# Add a file
my $id;
ok $id = $ipod->add_song($mp3), "Adding $mp3";
# Is it actually there?
my($path) = $ipod->get_path($id);
ok -e $path, "$mp3 successfully moved";
# In the db?
is scalar($ipod->all_songs), 1, "Song added to DB";
# Do the same w/ a song with a weird name
$ipod->allow_dup(1);
ok $id = $ipod->add_song($accent), "Adding $accent";
my $path = $ipod->get_path($id);
ok -e $path, "$accent successfully moved";
my $fh = $ipod->get_song($id);
is $fh->{title}->latin1, "Áccèñtëd Song", "Accents correctly handled";
$ipod->allow_dup(0);
# Rm the file
ok $ipod->rm_song($id), "Removing test.mp3";
# Is it gone?
ok((not -e $path), "Song successfully removed");
# Not in db?
is scalar($ipod->all_songs), 1, "Song rmed from DB";
}
# Test finding duplicates
{
my $ipod = Mac::iPod::GNUpod->new(mountpoint => $fakepod);
my $id0 = $ipod->add_song($mp3);
# This should fail
my $id1 = $ipod->add_song($mp3);
ok((not $id1), "Add failed on duplicate");
# Try again, turning duplicate checking off
$ipod->allow_dup(1);
my $id2 = $ipod->add_song($mp3);
ok $id2, "Duplicate succeeded w/ allow_dup on";
# Check there are two actual files on disk
my ($path1, $path2) = $ipod->get_path($id0, $id2);
ok((-e $path1 && -e $path2), 'Both songs exist on disk');
# Cleanup: rm all songs
$ipod->rm_song($ipod->all_songs);
}
# Test obedience of move_files
{
my $ipod = Mac::iPod::GNUpod->new(mountpoint => $fakepod);
# Don't move the file
$ipod->move_files(0);
my $id = $ipod->add_song($mp3);
my $path = $ipod->get_path($id);
#ok((not -f $path), "No path for new $mp3");
$ipod->rm_song($id); # Out of DB!
# Is the preceding test meaningful? The return of get_path when move_files
# is off is pure garbage.
# Ok, now move the file
$ipod->move_files(1);
$id = $ipod->add_song($mp3);
($path) = $ipod->get_path($id);
# Rm the song w/ move_files off
$ipod->move_files(0);
$ipod->rm_song($id);
ok -e $path, "File still exists";
}
# Final cleanup
#unlink glob './t/fakepod/iPod_Control/Music/*/*';