The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use SDL;
use SDL::Config;

my $audiodriver;

BEGIN {
    use Config;
    if ( !$Config{'useithreads'} ) {
        print("1..0 # Skip: Perl not compiled with 'useithreads'\n");
        exit(0);
    }

    use Test::More;
    use lib 't/lib';
    use SDL::TestTool;

    $audiodriver = $ENV{SDL_AUDIODRIVER};
    $ENV{SDL_AUDIODRIVER} = 'dummy' unless $ENV{SDL_RELEASE_TESTING};

    if ( !SDL::TestTool->init(SDL_INIT_AUDIO) ) {
        plan( skip_all => 'Failed to init sound' );
    }
    elsif ( !SDL::Config->has('SDL_mixer') ) {
        plan( skip_all => 'SDL_mixer support not compiled' );
    }
}   #SDL_init(SDL_INIT_AUDIO) + Version bootstrap conflict prevention in windows

#
# To reproduce this bug do
#
# use SDL; use SDL::Version; SDL::init(SDL_INIT_AUDIO);

use SDL::Mixer;
use SDL::Mixer::MixChunk;
use SDL::Mixer::Samples;
use SDL::Mixer::Channels;
use SDL::RWOps;
use SDL::Version;

my @done = qw/
  get_num_chunk_decoders
  get_chunk_decoder
  load_WAV
  volume_chunk
  load_WAV_RW
  /;

my @left = qw/
  quick_load_WAV
  quick_load_RAW
  /;

SDL::Mixer::open_audio( 44100, SDL::Audio::AUDIO_S16SYS, 2, 4096 );

my $version = SDL::Mixer::linked_version();
printf( "got version: %d.%d.%d\n",
    $version->major, $version->minor, $version->patch );

SKIP:
{
    skip 'Need version 1.2.10', 2
      unless ( $version->major >= 1
        && $version->minor >= 2
        && $version->patch >= 10 );

    is( SDL::Mixer::Samples::get_num_chunk_decoders() >= 0,
        1, '[get_num_chunk_decoders] passed' );
    my $stream = SDL::Mixer::Samples::get_chunk_decoder(0);
    is( defined $stream, 1, "[get_chunk_decoder] found decoder $stream" );
}

my $sample_chunk = SDL::Mixer::Samples::load_WAV('test/data/sample.wav');
isa_ok( $sample_chunk, 'SDL::Mixer::MixChunk', '[load_WAV]' );

is( SDL::Mixer::Samples::volume_chunk( $sample_chunk, 120 ),
    128, '[volume_chunk] was at max 128 volume on start' );
is( SDL::Mixer::Samples::volume_chunk( $sample_chunk, 10 ),
    120, '[volume_chunk] is now at 120 volume' );

my $file = SDL::RWOps->new_file( 'test/data/sample.wav', 'r' );
isa_ok( $file, 'SDL::RWOps', '[new_file]' );
isa_ok( SDL::Mixer::Samples::load_WAV_RW( $file, 0 ),
    'SDL::Mixer::MixChunk', '[load_WAV_RW]' );

my $why =
    '[Percentage Completion] '
  . int( 100 * ( $#done + 1 ) / ( $#done + $#left + 2 ) )
  . "\% implementation. "
  . ( $#done + 1 ) . " / "
  . ( $#done + $#left + 2 );

TODO:
{
    local $TODO = $why;
    fail "Not Implmented SDL::Mixer::*::$_" foreach (@left);
}

print "$why\n";

pass 'Checking for segfaults';

if ($audiodriver) {
    $ENV{SDL_AUDIODRIVER} = $audiodriver;
}
else {
    delete $ENV{SDL_AUDIODRIVER};
}

done_testing();