1use Test::More; 2 3use strict; 4use warnings; 5use File::Spec; 6use lib 't/lib'; 7$|++; 8 9use TestSupport qw(create_test_files delete_test_files move_test_files 10 modify_attrs_on_test_files $dir received_events receive_event); 11 12use AnyEvent::Filesys::Notify; 13use AnyEvent::Impl::Perl; 14 15unless ( $^O eq 'darwin' and eval { require IO::KQueue; 1; } ) { 16 plan skip_all => 'Test only on Mac with IO::KQueue'; 17} else { 18 plan tests => 11; 19} 20 21create_test_files(qw(one/1)); 22create_test_files(qw(two/1)); 23create_test_files(qw(one/sub/1)); 24## ls: one/1 one/sub/1 two/1 25 26my $n = AnyEvent::Filesys::Notify->new( 27 dirs => [ map { File::Spec->catfile( $dir, $_ ) } qw(one two) ], 28 filter => sub { shift !~ qr/ignoreme/ }, 29 cb => sub { receive_event(@_) }, 30 backend => 'KQueue', 31 ## parse_events => 0, 32); 33isa_ok( $n, 'AnyEvent::Filesys::Notify' ); 34ok( $n->does('AnyEvent::Filesys::Notify::Role::KQueue'), 35 '... with the KQueue role' ); 36 37diag "This might take a few seconds to run..."; 38 39# ls: one/1 one/sub/1 +one/sub/2 two/1 40received_events( sub { create_test_files(qw(one/sub/2)) }, 41 'create a file', qw(created) ); 42 43# ls: one/1 +one/2 one/sub/1 one/sub/2 two/1 +two/sub/2 44received_events( 45 sub { create_test_files(qw(one/2 two/sub/2)) }, 46 'create file in new subdir', 47 qw(created created created) 48); 49 50# ls: one/1 ~one/2 one/sub/1 one/sub/2 two/1 two/sub/2 51received_events( sub { create_test_files(qw(one/2)) }, 52 'modify existing file', qw(modified) ); 53 54# ls: one/1 one/2 one/sub/1 one/sub/2 two/1 two/sub -two/sub/2 55received_events( sub { delete_test_files(qw(two/sub/2)) }, 56 'deletes a file', qw(deleted) ); 57 58# ls: one/1 one/2 +one/ignoreme +one/3 one/sub/1 one/sub/2 two/1 two/sub 59received_events( sub { create_test_files(qw(one/ignoreme one/3)) }, 60 'creates two files one should be ignored', qw(created) ); 61 62# ls: one/1 one/2 one/ignoreme -one/3 +one/5 one/sub/1 one/sub/2 two/1 two/sub 63received_events( sub { move_test_files( 'one/3' => 'one/5' ) }, 64 'move files', qw(deleted created) ); 65 66SKIP: { 67 skip "skip attr mods on Win32", 1 if $^O eq 'MSWin32'; 68 69 # ls: one/1 one/2 one/ignoreme one/5 one/sub/1 one/sub/2 ~two/1 ~two/sub 70 received_events( 71 sub { modify_attrs_on_test_files(qw(two/1 two/sub)) }, 72 'modify attributes', 73 qw(modified modified) 74 ); 75} 76 77# ls: one/1 one/2 one/ignoreme +one/onlyme +one/4 one/5 one/sub/1 one/sub/2 two/1 two/sub 78$n->filter(qr/onlyme/); 79received_events( sub { create_test_files(qw(one/onlyme one/4)) }, 80 'filter test', qw(created) ); 81 82ok( 1, '... arrived' ); 83