/t/Teto-Queue.t

http://github.com/motemen/Teto · Raku · 47 lines · 35 code · 12 blank · 0 comment · 3 complexity · a9f58a2e8e3c7c46d583f0ddb2114d11 MD5 · raw file

  1. use strict;
  2. use lib 'lib';
  3. use Test::More tests => 3;
  4. use Test::Deep;
  5. use Teto::Track;
  6. use Coro;
  7. use_ok 'Teto::Queue';
  8. subtest basic => sub {
  9. my $queue = new_ok 'Teto::Queue', [ track_fh => do { my $s = ''; open my $fh, '>', \$s; $fh } ];
  10. cmp_deeply $queue->tracks, [];
  11. $queue->add_track(Teto::Track->from_url('http://www.nicovideo.jp/watch/sm12441199'));
  12. cmp_deeply $queue->tracks, [ isa('Teto::Track') & methods(video_id => 'sm12441199') ];
  13. async {
  14. my $track = $queue->wait_for_track;
  15. isa_ok $track, 'Teto::Track';
  16. };
  17. cede;
  18. };
  19. subtest signal => sub {
  20. my $queue = Teto::Queue->new(track_fh => do { my $s = ''; open my $fh, '>', \$s; $fh });
  21. my @coros;
  22. my ($waiting, $track);
  23. push @coros, async {
  24. $waiting++;
  25. $track = $queue->wait_for_track;
  26. cmp_deeply $track, isa('Teto::Track') & methods(video_id => 'sm9'), 'got added track';
  27. };
  28. cede;
  29. ok !$track, 'track not got';
  30. push @coros, async {
  31. $queue->add_track(Teto::Track->from_url('http://www.nicovideo.jp/watch/sm9'));
  32. };
  33. $_->join for @coros;
  34. done_testing(2);
  35. };