Author: particle
Date: Fri Feb  2 12:37:17 2007
New Revision: 16869

Modified:
   trunk/t/pmc/parrotio.t

Log:
[PDD22]: add TODO tests for not yet implemented ParrotIO object

Modified: trunk/t/pmc/parrotio.t
==============================================================================
--- trunk/t/pmc/parrotio.t      (original)
+++ trunk/t/pmc/parrotio.t      Fri Feb  2 12:37:17 2007
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 1;
+use Parrot::Test tests => 6;
 
 =head1 NAME
 
@@ -22,14 +22,276 @@
 
 =cut
 
+
+# L<PDD22/I\/O PMC API/=item new>
 pir_output_is( <<'CODE', <<'OUT', 'new' );
 .sub 'test' :main
     new P0, .ParrotIO
-    print "ok 1\n"
+    say 'ok 1 - $P0 = new .ParrotIO'
+.end
+CODE
+ok 1 - $P0 = new .ParrotIO
+OUT
+
+
+# L<PDD22/I\/O PMC API/=item open.*=item close>
+pir_output_is( <<'CODE', <<'OUT', 'open and close - synchronous', todo => 'not 
yet implemented' );
+.sub 'test' :main
+    $P0 = new .ParrotIO
+    $P0.open('README')
+    say 'ok 1 - $P0.open($S1)'
+
+    $P0.close()
+    say 'ok 2 - $P0.close()'
+
+    $P0.open('README', 'rw')
+    say 'ok 3 - $P0.open($S1, $S2) # rw mode'
+
+    $P0.close()
+    $P0.open()
+    say 'ok 4 - $P0.open()'
+
+    push_eh eh_bad_file_1
+    $P0.open('bad_file')
+    clear_eh
+
+  test_5:
+    push_eh eh_bad_file_2
+    $P0.open('bad_file', 'r')
+    clear_eh
+
+  test_6:
+    $P0.open('new_file', 'w')
+    say 'ok 6 - $P0.open($S1, $S2) # new file, write mode succeeds'
+
+    goto end
+
+  bad_file_1:
+    say 'ok 5 - $P0.open($S1)      # with bad file'
+    goto test_5
+  end:
+.end
+CODE
+ok 1 - $P0.open($S1)
+ok 2 - $P0.close()
+ok 3 - $P0.open($S1, $S2) # rw mode
+ok 4 - $P0.open()
+ok 5 - $P0.open($S1)      # with bad file
+ok 6 - $P0.open($S1, $S2) # new file, write mode succeeds
+OUT
+
+
+# TODO test open file, close file, delete file, reopen previously opened stream
+
+
+# TODO cleanup 'new_file'
+
+
+SKIP: {
+    skip 'no asynch calls yet' => 1;
+
+pir_output_is( <<'CODE', <<'OUT', 'open and close - asynchronous' );
+.sub 'test' :main
+    $P1 = # TODO create a callback here
+    $P0 = new .ParrotIO
+
+    $P0.open('README')
+    say 'ok 1 - $P0.open($S1)'
+
+    $P0.close()
+    say 'ok 2 - $P0.close($P1)'
+
+    $P0.open('README', 'rw')
+    say 'ok 3 - $P0.open($S1, $S2)'
+
+    $P0.close()
+    $P0.open()
+    say 'ok 4 - $P0.open()'
+
+  cleanup:
+    $P0.close()
 .end
 CODE
-ok 1
+ok 1 - $P0.open($S1)
+ok 2 - $P0.close()
+ok 3 - $P0.open($S1, $S2)
+ok 4 - $P0.open()
 OUT
+}
+
+
+# L<PDD22/I\/O PMC API/=item print.*=item readline>
+pir_output_is( <<'CODE', <<'OUT', 'print, read, and readline - synchronous', 
todo => 'not yet implemented' );
+.sub 'test' :main
+    load_bytecode 'String/Utils.pbc'
+    .local pmc chomp
+               chomp = get_global ['String';'Utils'], 'chomp'
+
+    $P0 = new .ParrotIO
+    $P0.open('README')
+
+    $S0 = $P0.read(14) # bytes
+    if $S0 == 'This is Parrot' goto ok_1
+    print 'not '
+  ok_1:
+    say 'ok 1 - $S0 = $P1.read($I2)'
+
+    $S0 = $P0.read(9)  # bytes
+    if $S0 == ', version' goto ok_2
+    print 'not '
+  ok_2:
+    say 'ok 2 - $S0 = $P1.read($I2)     # again on same stream'
+
+    $P0.print(123)
+    $P0.print(456.789)
+    $P0.print("squawk\n")
+    $P1 = new .Integer
+    $P1 = 42
+    $P0.print($P1)
+    say 'ok 3 - $P0.print(${I,N,S,P}1)'
+
+    $S0 = $P0.readline()
+    $S0 = chomp( $S0 )
+    if $S0 == '123456.789000squawk' goto ok_4
+    print 'not '
+  ok_4:
+    say 'ok 4 - $S0 = $P1.readline($I2)'
+
+    $S0 = $P0.readline()
+    $S0 = chomp( $S0 )
+    if $S0 == '42' goto ok_5
+    print 'not '
+  ok_5:
+    say 'ok 5 - $S0 = $P1.readline($I2) # again on same stream'
+.end
+CODE
+ok 1 - $S0 = $P1.read($I2)
+ok 2 - $S0 = $P1.read($I2)     # again on same stream
+ok 3 - $P0.print(${I,N,S,P}1)
+ok 4 - $S0 = $P1.readline($I2)
+ok 5 - $S0 = $P1.readline($I2) # again on same stream
+OUT
+
+
+# TODO test reading/writing code points once supported
+
+
+# TODO test reading long chunks, eof, and across newlines
+
+
+# TODO pir_output_is( <<'CODE', <<'OUT', 'print, read, and readline - 
asynchronous', todo => 'not yet implemented' );
+
+
+# L<PDD22/I\/O PMC API/=item record_separator>
+pir_output_is( <<'CODE', <<'OUT', 'record_separator', todo => 'not yet 
implemented' );
+.sub 'test' :main
+    $P0 = new .ParrotIO
+
+    $S0 = $P0.record_separator()
+    if $S0 == "\n" goto ok_1
+    print 'not '
+  ok_1:
+    say 'ok 1 - $S0 = $P1.record_separator() # default'
+
+    $S99 = 'abc'
+    $P0.record_separator($S99)
+    $S0 = $P0.record_separator()
+    if $S0 == $S99 goto ok_2
+    print 'not '
+  ok_2:
+    say 'ok 2 - $P0.record_separator($S1)'
+
+    $P0.print(123)
+    $S0 = $P0.record_separator()
+    $P0.print($S0)
+    $P0.print(456)
+
+    $S0 = $P0.readline()
+    if $S0 == '123abc' goto ok_3
+    print 'not '
+  ok_3:
+    say 'ok 3 - $P0.record_separator() # .readline works as expected'
+.end
+CODE
+ok 1 - $S0 = $P1.record_separator() # default
+ok 2 - $P0.record_separator($S1)
+ok 3 - $P0.record_separator() # .readline works as expected
+OUT
+
+
+# L<PDD22/I\/O PMC API/=item buffer_type>
+pir_output_is( <<'CODE', <<'OUT', 'buffer_type', todo => 'not yet implemented' 
);
+.sub 'test' :main
+    .include 'io_buffer_types.pasm'
+
+    $P0 = new .ParrotIO
+
+    $P0.buffer_type('unbuffered')
+    $I0 = $P0.buffer_type()
+    if $I0 == PIO_NONBUF goto ok_1
+    print 'not '
+  ok_1:
+    say 'ok 1 - $I0 = $P1.buffer_type() # PIO_NONBUF'
+
+    $P0.buffer_type(PIO_NONBUF)
+    $S0 = $P0.buffer_type()
+    if $S0 == 'unbuffered' goto ok_2
+    print 'not '
+  ok_2:
+    say 'ok 2 - $S0 = $P1.buffer_type() # PIO_NONBUF'
+
+    $P0.buffer_type('line-buffered')
+    $I0 = $P0.buffer_type()
+    if $I0 == PIO_LINEBUF goto ok_3
+    print 'not '
+  ok_3:
+    say 'ok 3 - $I0 = $P1.buffer_type() # PIO_LINEBUF'
+
+    $P0.buffer_type(PIO_LINEBUF)
+    $S0 = $P0.buffer_type()
+    if $S0 == 'line-buffered' goto ok_4
+    print 'not '
+  ok_4:
+    say 'ok 4 - $S0 = $P1.buffer_type() # PIO_LINEBUF'
+
+    $P0.buffer_type('full-buffered')
+    $I0 = $P0.buffer_type()
+    if $I0 == PIO_FULLBUF goto ok_5
+    print 'not '
+  ok_5:
+    say 'ok 5 - $I0 = $P1.buffer_type() # PIO_FULLBUF'
+
+    $P0.buffer_type(PIO_FULLBUF)
+    $S0 = $P0.buffer_type()
+    if $S0 == 'full-buffered' goto ok_6
+    print 'not '
+  ok_6:
+    say 'ok 6 - $S0 = $P1.buffer_type() # PIO_FULLBUF'
+.end
+CODE
+ok 1 - $I0 = $P1.buffer_type() # PIO_NONBUF
+ok 2 - $S0 = $P1.buffer_type() # PIO_NONBUF
+ok 3 - $I0 = $P1.buffer_type() # PIO_LINEBUF
+ok 4 - $S0 = $P1.buffer_type() # PIO_LINEBUF
+ok 5 - $I0 = $P1.buffer_type() # PIO_FULLBUF
+ok 6 - $S0 = $P1.buffer_type() # PIO_FULLBUF
+OUT
+
+
+# TODO test effects of buffer_type, not just set/get
+
+
+# TODO
+# L<PDD22/I\/O PMC API/=item buffer_size>
+# NOTES: try setting positive, zero, negative int
+# perform print and read ops
+# change buffer size while it contains data
+# try with all 'buffer_type' modes
+
+
+# L<PDD22/I\/O PMC API/=item get_fd>
+# NOTES: this is going to be platform dependent
+
 
 # Local Variables:
 #   mode: cperl

Reply via email to