1use Test2::Bundle::Extended -target => 'Test2::Harness::Util::File::Stream'; 2use File::Temp qw/tempfile/; 3# HARNESS-DURATION-SHORT 4 5use ok $CLASS; 6 7my ($wh, $filename) = tempfile("test-$$-XXXXXXXX", TMPDIR => 1); 8print $wh ""; 9close($wh); 10 11ok(my $one = $CLASS->new(name => $filename), "New instance"); 12$one->write("line1\n"); 13$one->write("line2\n"); 14$one->write("line3\n"); 15$one->write("line"); 16 17my $fh = $one->open_file('<'); 18is( 19 [<$fh>], 20 ["line1\n", "line2\n", "line3\n", "line"], 21 "file written as expected" 22); 23 24is($one->read_line, "line1\n", "got first line"); 25 26is( 27 [$one->poll], 28 [ 29 "line2\n", 30 "line3\n", 31 ], 32 "Got unseen completed lines, but not incomplete line" 33); 34 35is($one->read_line, undef, "no new lines are ready"); 36 37is( 38 [$one->read], 39 [ 40 "line1\n", 41 "line2\n", 42 "line3\n", 43 ], 44 "Read gets lines" 45); 46 47$one->write("4\n"); 48$one->write("line5"); 49 50is( 51 [$one->read], 52 [ 53 "line1\n", 54 "line2\n", 55 "line3\n", 56 "line4\n", 57 ], 58 "Read sees the new lines" 59); 60 61is([$one->poll], ["line4\n"], "Poll sees new line after a read"); 62 63$one->write("\nline6"); 64 65is($one->read_line, "line5\n", "read_line moves to the next line"); 66 67is($one->read_line, undef, "no new lines are ready"); 68is([$one->poll], [], "no new lines are ready"); 69 70$one->set_done(1); 71 72is([$one->poll], ["line6"], "got unterminated line after 'done' was set"); 73 74$one->reset; 75is( 76 [$one->read], 77 [ 78 "line1\n", 79 "line2\n", 80 "line3\n", 81 "line4\n", 82 "line5\n", 83 ], 84 "read all lines but the last unterminated one" 85); 86 87is( 88 [$one->poll], 89 [ 90 "line1\n", 91 "line2\n", 92 "line3\n", 93 "line4\n", 94 "line5\n", 95 ], 96 "poll all lines but the last unterminated one" 97); 98 99$one->set_done(1); 100is([$one->poll], ["line6"], "got unterminated line after 'done' was set"); 101 102$one = undef; 103 104$one = $CLASS->new(name => $filename); 105$one->seek(6); 106is( 107 [$one->poll], 108 [ 109 "line2\n", 110 "line3\n", 111 "line4\n", 112 "line5\n", 113 ], 114 "Was able to seek past the first item", 115); 116 117unlink($filename); 118done_testing; 119