Revision: 1265 http://trac.macosforge.org/projects/ruby/changeset/1265 Author: pthomson@apple.com Date: 2009-03-30 09:33:45 -0700 (Mon, 30 Mar 2009) Log Message: ----------- Enabled one core/io test. Modified Paths: -------------- MacRuby/branches/experimental/include/ruby/ruby.h MacRuby/branches/experimental/io.c MacRuby/branches/experimental/rakelib/spec.rake MacRuby/branches/experimental/spec/frozen/core/io/shared/pos.rb Modified: MacRuby/branches/experimental/include/ruby/ruby.h =================================================================== --- MacRuby/branches/experimental/include/ruby/ruby.h 2009-03-30 12:56:11 UTC (rev 1264) +++ MacRuby/branches/experimental/include/ruby/ruby.h 2009-03-30 16:33:45 UTC (rev 1265) @@ -1108,7 +1108,7 @@ } #define NATIVE(obj) (rb_is_native((VALUE)obj)) -#define CONDITION_TO_BOOLEAN(c) (c ? Qtrue : Qfalse) +#define CONDITION_TO_BOOLEAN(c) ((c) ? Qtrue : Qfalse) VALUE rb_box_fixnum(VALUE); Modified: MacRuby/branches/experimental/io.c =================================================================== --- MacRuby/branches/experimental/io.c 2009-03-30 12:56:11 UTC (rev 1264) +++ MacRuby/branches/experimental/io.c 2009-03-30 16:33:45 UTC (rev 1265) @@ -372,6 +372,22 @@ || CFWriteStreamGetStatus(io_struct->writeStream) == kCFStreamStatusOpen); } +static bool +rb_io_is_closed_for_reading(rb_io_t *io_struct) +{ + if (io_struct->readStream == NULL) return true; + CFStreamStatus s = CFReadStreamGetStatus(io_struct->readStream); + return ((s == kCFStreamStatusNotOpen) || (s == kCFStreamStatusClosed)); +} + +static bool +rb_io_is_closed_for_writing(rb_io_t *io_struct) +{ + if (io_struct->writeStream == NULL) return true; + CFStreamStatus s = CFWriteStreamGetStatus(io_struct->writeStream); + return ((s == kCFStreamStatusNotOpen) || (s == kCFStreamStatusClosed)); +} + /* * call-seq: * IO.try_convert(obj) -> io or nil @@ -1760,7 +1776,8 @@ static VALUE rb_io_closed(VALUE io, SEL sel) { - rb_notimplement(); + rb_io_t *ios = ExtractIOStruct(io); + return CONDITION_TO_BOOLEAN(rb_io_is_closed_for_writing(ios) && rb_io_is_closed_for_reading(ios)); } /* @@ -2191,7 +2208,13 @@ rb_f_open(VALUE klass, SEL sel, int argc, VALUE *argv) { VALUE io = rb_class_new_instance(argc, argv, rb_cFile); - return rb_file_open(io, argc, argv); + io = rb_file_open(io, argc, argv); + if (rb_block_given_p()) { + VALUE ret = rb_vm_yield(1, &io); + rb_io_close_m(io, 0); + return ret; + } + return io; } /* Modified: MacRuby/branches/experimental/rakelib/spec.rake =================================================================== --- MacRuby/branches/experimental/rakelib/spec.rake 2009-03-30 12:56:11 UTC (rev 1264) +++ MacRuby/branches/experimental/rakelib/spec.rake 2009-03-30 16:33:45 UTC (rev 1265) @@ -27,6 +27,11 @@ while } + KNOWN_GOOD_CORE_IO = %w{ + closed + tell + } + desc "Run all language known good spec files which should be fully green (does not use tags)" task :green do files = FileList["spec/frozen/language/{#{KNOWN_GOOD.join(',')}}_spec.rb"] @@ -44,6 +49,18 @@ sh "./mspec/bin/mspec ci -B ./spec/frozen/macruby.mspec spec/frozen/language" end + desc "Try to run IO tests" + task :gdbio do + files = FileList["spec/frozen/core/io/{#{KNOWN_GOOD_CORE_IO.join(',')}}_spec.rb"] + sh "gdb --args ./miniruby -v -I./mspec/lib -I./lib ./mspec/bin/mspec-run #{files.join(' ')}" + end + + desc "Try to run IO tests" + task :io do + files = FileList["spec/frozen/core/io/{#{KNOWN_GOOD_CORE_IO.join(',')}}_spec.rb"] + sh "./miniruby -v -I./mspec/lib -I./lib ./mspec/bin/mspec-run #{files.join(' ')}" + end + desc "Run language examples that are known to fail" task :fails do sh "./mspec/bin/mspec run -g fails -B ./spec/frozen/macruby.mspec spec/frozen/language" Modified: MacRuby/branches/experimental/spec/frozen/core/io/shared/pos.rb =================================================================== --- MacRuby/branches/experimental/spec/frozen/core/io/shared/pos.rb 2009-03-30 12:56:11 UTC (rev 1264) +++ MacRuby/branches/experimental/spec/frozen/core/io/shared/pos.rb 2009-03-30 16:33:45 UTC (rev 1265) @@ -1,4 +1,4 @@ -describe :io_pos, :shared => true do +describe(:io_pos, {:shared => true}) do before :each do @fname = 'test.txt' File.open @fname, 'w' do |f| f.write "123" end