/t/Teto-Track.t

http://github.com/motemen/Teto · Raku · 95 lines · 78 code · 14 blank · 3 comment · 2 complexity · b9e93d4bc933e2e7e313052c2c70afd2 MD5 · raw file

  1. use strict;
  2. use lib 'lib';
  3. use Test::More tests => 11;
  4. use Test::Deep;
  5. use_ok 'Teto::Track';
  6. my $track = new_ok 'Teto::Track', [ url => '' ];
  7. cmp_set [ Teto::Track->subclasses ], [
  8. qw(Teto::Track::NicoVideo::sm Teto::Track::NicoVideo::nm Teto::Track::YouTube Teto::Track::SoundCloud Teto::Track::System)
  9. ], 'subclasses';
  10. subtest nicovideo_sm => sub {
  11. my $track = Teto::Track->from_url('http://www.nicovideo.jp/watch/sm11809611');
  12. isa_ok $track, 'Teto::Track::NicoVideo::sm';
  13. };
  14. subtest nicovideo_nm => sub {
  15. my $track = Teto::Track->from_url('http://www.nicovideo.jp/watch/nm3254039');
  16. isa_ok $track, 'Teto::Track::NicoVideo::nm';
  17. };
  18. subtest soundcloud => sub {
  19. my $track = Teto::Track->from_url('http://soundcloud.com/takuma-hosokawa/darksidenadeko-electro-mix');
  20. isa_ok $track, 'Teto::Track::SoundCloud';
  21. };
  22. subtest 'none handles' => sub {
  23. my $track = Teto::Track->from_url('http://www.example.com/');
  24. ok not $track;
  25. };
  26. subtest play => sub {
  27. my $track = new_ok 't::Track', [ url => '' ];
  28. $track->play;
  29. $track->play;
  30. is $track->{play_count}, 1;
  31. };
  32. subtest track_id => sub {
  33. my $track = new_ok 't::Track', [ url => '' ];
  34. ok $track->track_id;
  35. is $track, Teto::Track->of_track_id($track->track_id);
  36. };
  37. subtest buffer_gc => sub {
  38. local $Teto::Track::BufferCache = Cache::LRU::Peekable->new(size => 2);
  39. my @tracks;
  40. for (0 .. 9) {
  41. my $track = Teto::Track->new(url => '');
  42. $track->append_buffer("track $_");
  43. is $track->buffer, "track $_";
  44. push @tracks, $track;
  45. }
  46. foreach (0 .. 7) {
  47. ok !$tracks[$_]->has_buffer;
  48. # is $tracks[$_]->buffer, '' # XXX calling $track->buffer confuses underlying LRU cache
  49. }
  50. foreach (8 .. 9) {
  51. ok $tracks[$_]->has_buffer;
  52. # is $tracks[$_]->buffer, "track $_";
  53. }
  54. };
  55. subtest buffer_gc_peek => sub {
  56. local $Teto::Track::BufferCache = Cache::LRU::Peekable->new(size => 2);
  57. my @tracks;
  58. for (0 .. 9) {
  59. my $track = Teto::Track->new(url => '');
  60. $track->append_buffer("track $_");
  61. is $track->buffer, "track $_";
  62. push @tracks, $track;
  63. }
  64. foreach (0 .. 7) {
  65. ok !$tracks[$_]->has_buffer;
  66. $tracks[$_]->peek_buffer_length;
  67. }
  68. foreach (8 .. 9) {
  69. ok $tracks[$_]->has_buffer;
  70. # is $tracks[$_]->buffer, "track $_";
  71. }
  72. };
  73. BEGIN {
  74. package t::Track;
  75. use Mouse;
  76. extends 'Teto::Track';
  77. override _play => sub {
  78. my $self = shift;
  79. $self->{play_count}++;
  80. };
  81. }