/t/core_cd.t

http://github.com/PerlGameDev/SDL · Perl · 124 lines · 109 code · 14 blank · 1 comment · 9 complexity · 66e8255a2ef985700dbd8d15db3ccb86 MD5 · raw file

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use SDL;
  5. BEGIN {
  6. use Test::More;
  7. use lib 't/lib';
  8. use SDL::TestTool;
  9. use Config;
  10. plan( skip_all => 'GNU Hurd <= 0.3 not supported' )
  11. if $^O eq 'gnu' && $Config{osvers} <= 0.3;
  12. plan( skip_all => 'Failed to init cdrom' )
  13. unless SDL::TestTool->init(SDL_INIT_CDROM);
  14. }
  15. use SDL::CD;
  16. use SDL::CDROM;
  17. use SDL::CDTrack;
  18. is( CD_ERROR, -1, 'CD_ERROR should be imported' );
  19. is( CD_ERROR(), -1, 'CD_ERROR() should also be available' );
  20. is( CD_PAUSED, 3, 'CD_PAUSED should be imported' );
  21. is( CD_PAUSED(), 3, 'CD_PAUSED() should also be available' );
  22. is( CD_PLAYING, 2, 'CD_PLAYING should be imported' );
  23. is( CD_PLAYING(), 2, 'CD_PLAYING() should also be available' );
  24. is( CD_STOPPED, 1, 'CD_STOPPED should be imported' );
  25. is( CD_STOPPED(), 1, 'CD_STOPPED() should also be available' );
  26. is( CD_TRAYEMPTY, 0, 'CD_TRAYEMPTY should be imported' );
  27. is( CD_TRAYEMPTY(), 0, 'CD_TRAYEMPTY() should also be available' );
  28. is( SDL_AUDIO_TRACK, 0, 'SDL_AUDIO_TRACK should be imported' );
  29. is( SDL_AUDIO_TRACK(), 0, 'SDL_AUDIO_TRACK() should also be available' );
  30. is( SDL_DATA_TRACK, 4, 'SDL_DATA_TRACK should be imported' );
  31. is( SDL_DATA_TRACK(), 4, 'SDL_DATA_TRACK() should also be available' );
  32. my $num_drives = SDL::CDROM::num_drives();
  33. ok( $num_drives >= 0, "[SDL::CDROM::num_drives] is $num_drives" );
  34. SKIP:
  35. {
  36. skip( "no drives available or SDL_RELEASE_TESTING not set", 17 )
  37. if $num_drives <= 0 || !$ENV{SDL_RELEASE_TESTING};
  38. for ( 0 .. $num_drives - 1 ) {
  39. my $name = SDL::CDROM::name($_);
  40. ok( $name, "[SDL::CDROM::name] for drive $_ is $name" );
  41. }
  42. my $cd = SDL::CD->new(0);
  43. isa_ok( $cd, 'SDL::CD', "[SDL::CD->new]" );
  44. my $status = $cd->status();
  45. my %states = (
  46. -1 => 'CD_ERROR',
  47. 0 => 'CD_TRAYEMPTY',
  48. 1 => 'CD_STOPPED',
  49. 2 => 'CD_PLAYING',
  50. 3 => 'CD_PAUSED'
  51. );
  52. my %types = (
  53. 0 => 'SDL_AUDIO_TRACK',
  54. 1 => 'SDL_DATA_TRACK'
  55. );
  56. ok( defined $states{$status},
  57. "[SDL::CD->status] is " . ( defined $states{$status} ? $states{$status} : 'undefined' )
  58. );
  59. SKIP:
  60. {
  61. skip( "CD should be in CD_STOPPED state", 14 )
  62. unless $status == CD_STOPPED;
  63. my $track = $cd->track(3);
  64. isa_ok( $track, 'SDL::CDTrack', "[SDL::CD->track]" );
  65. my $id = $cd->id();
  66. ok( $id >= 0, "[SDL::CD->id] is $id" );
  67. my $num_tracks = $cd->num_tracks();
  68. ok( $num_tracks >= 0, "[SDL::CD->num_tracks] is $num_tracks" );
  69. is( $cd->play_tracks( 4, 0, 5, 0 ),
  70. 0, "[SDL::CD->play_tracks] playing track 4"
  71. );
  72. SDL::delay(2000);
  73. is( $cd->pause(), 0, "[SDL::CD->pause] succeeded" );
  74. SDL::delay(2000);
  75. SKIP:
  76. {
  77. skip( "I have no idea why cur_track and cur_frame are 0.", 2 );
  78. is( $cd->cur_track(), 4, "[SDL::CD->cur_track] is 4" );
  79. my $frame = $cd->cur_frame();
  80. ok( $frame, "[SDL::CD->cur_frame] is $frame" );
  81. }
  82. my $t_id = $track->id();
  83. ok( $t_id, "[SDL::CDTrack->id] is $t_id" );
  84. my $t_type = $track->type();
  85. ok( defined $types{$t_type},
  86. "[SDL::CDTrack->type] is " . ( defined $types{$t_type} ? $types{$t_type} : 'undefined' )
  87. );
  88. my $t_length = $track->length();
  89. ok( $t_length > 0, "[SDL::CDTrack->length] is $t_length" );
  90. my $t_offset = $track->offset();
  91. ok( $t_offset > 0, "[SDL::CDTrack->offset] is $t_offset" );
  92. is( $cd->resume(), 0, "[SDL::CD->resume] succeeded" );
  93. SDL::delay(2000);
  94. is( $cd->stop(), 0, "[SDL::CD->stop] succeeded" );
  95. SDL::delay(2000);
  96. is( $cd->play( CD_FPS * 30, CD_FPS * 2 ),
  97. 0, "[SDL::CD->play] succeeded"
  98. );
  99. SDL::delay(2000);
  100. }
  101. SKIP:
  102. {
  103. skip( "CD should be in CD_STOPPED or CD_TRAYEMPTY state", 1 )
  104. unless $status == CD_STOPPED || $status == CD_TRAYEMPTY;
  105. is( $cd->eject(), 0, "[SDL::CD->eject] succeeded" )
  106. unless SDL::delay(2000);
  107. }
  108. }
  109. done_testing;
  110. sleep(1);