Add tests for stdio_in_num() and stdio_in_ascii().
[language-befunge.git] / t / 2-ops / stdio_in_ascii.t
blobe99dbbd23c4cf6ae7de8e426d02d9f4c1bd15194
1 #!perl
3 # This file is part of Language::Befunge.
4 # Copyright (c) 2001-2008 Jerome Quelin, all rights reserved.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the same terms as Perl itself.
11 use Language::Befunge::Ops;
13 use strict;
14 use warnings;
16 use Language::Befunge::Interpreter;
17 use Language::Befunge::IP;
18 use Language::Befunge::Ops;
19 use Language::Befunge::Vector;
20 use Test::More tests => 7;
21 use IO::Pipe;
22 use IO::Select;
24 my ($lbi, $ip, $v);
27 $lbi = Language::Befunge::Interpreter->new;
28 $ip  = Language::Befunge::IP->new;
29 $v   = Language::Befunge::Vector->new(1,0);
30 $ip->set_delta( $v );
31 $lbi->set_curip( $ip );
32 my $pid = fork_input("3\n");
33 Language::Befunge::Ops::stdio_in_ascii( $lbi );
34 is( $ip->get_position, '(0,0)', 'stdio_in_ascii does not move ip' );
35 is( $ip->get_delta, '(1,0)', 'stdio_in_ascii does not reflect (yet)' );
36 is( $ip->spop, ord('3'), 'stdio_in_ascii pushes value on ip' );
37 is( $ip->spop, 0, 'stdio_in_ascii only read one character' );
39 Language::Befunge::Ops::stdio_in_ascii( $lbi );
40 is( $ip->spop, ord("\n"), 'stdio_in_ascii pushes value on ip' );
41 waitpid($pid, 0);
43 Language::Befunge::Ops::stdio_in_ascii( $lbi );
44 is( $ip->spop, 0, 'stdio_in_ascii only read one character' );
45 is( $ip->get_delta, '(-1,0)', 'stdio_in_ascii reflects on eof' );
47 sub fork_input {
48     my $data = shift;
49     my $pipe = IO::Pipe->new();
50     my $pid = fork();
51     if($pid) {
52         $pipe->reader();
53         *STDIN = *$pipe;
54         return $pid;
55     }
56     alarm(5); # timeout on failure
57     $pipe->writer();
58     $pipe->print($data);
59     exit(0);