[macruby-changes] [4740] DietRB/trunk

source_changes at macosforge.org source_changes at macosforge.org
Fri Oct 8 04:08:08 PDT 2010


Revision: 4740
          http://trac.macosforge.org/projects/ruby/changeset/4740
Author:   eloy.de.enige at gmail.com
Date:     2010-10-08 04:08:07 -0700 (Fri, 08 Oct 2010)
Log Message:
-----------
Make all specs green again.

From: Eloy Duran <eloy.de.enige at gmail.com>

Modified Paths:
--------------
    DietRB/trunk/lib/irb/driver/tty.rb
    DietRB/trunk/spec/context_spec.rb
    DietRB/trunk/spec/driver/readline_spec.rb
    DietRB/trunk/spec/driver/tty_spec.rb
    DietRB/trunk/spec/driver_spec.rb
    DietRB/trunk/spec/ext/completion_spec.rb
    DietRB/trunk/spec/ext/history_spec.rb
    DietRB/trunk/spec/spec_helper.rb

Removed Paths:
-------------
    DietRB/trunk/spec/io/readline_spec.rb

Modified: DietRB/trunk/lib/irb/driver/tty.rb
===================================================================
--- DietRB/trunk/lib/irb/driver/tty.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/lib/irb/driver/tty.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -3,7 +3,7 @@
 module IRB
   module Driver
     class TTY
-      attr_reader :input, :output
+      attr_reader :input, :output, :context_stack
       
       def initialize(input = $stdin, output = $stdout)
         @input  = input

Modified: DietRB/trunk/spec/context_spec.rb
===================================================================
--- DietRB/trunk/spec/context_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/context_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -12,7 +12,7 @@
 describe "IRB::Context" do
   before do
     @context = IRB::Context.new(main)
-    @context.io = @io = CaptureIO.new
+    @context.extend(OutputStubMixin)
   end
   
   it "initializes with an object and stores a copy of its binding" do
@@ -35,36 +35,15 @@
     @context.source.to_s.should == ""
   end
   
-  it "initializes with an instance of each processor" do
-    before = IRB::Context.processors.dup
-    begin
-      IRB::Context.processors << TestProcessor
-      @context = IRB::Context.new(main)
-      @context.processors.last.class.should == TestProcessor
-    ensure
-      IRB::Context.processors.replace(before)
-    end
-  end
-  
   it "does not use the same binding copy of the top level object" do
     lambda { eval("x", @context.binding) }.should raise_error(NameError)
   end
-  
-  it "makes itself the current running context during the runloop and resigns once it's done" do
-    IRB::Context.current.should == nil
-    
-    @io.stub_input("current_during_run = IRB::Context.current")
-    @context.run
-    eval('current_during_run', @context.binding).should == @context
-    
-    IRB::Context.current.should == nil
-  end
 end
 
 describe "IRB::Context, when evaluating source" do
   before do
     @context = IRB::Context.new(main)
-    @context.io = @io = CaptureIO.new
+    @context.extend(OutputStubMixin)
     IRB.formatter = IRB::Formatter.new
   end
   
@@ -74,7 +53,7 @@
   
   it "prints the result" do
     @context.evaluate("Hash[:foo, :foo]")
-    @io.printed.should == "=> {:foo=>:foo}\n"
+    @context.printed.should == "=> {:foo=>:foo}\n"
   end
   
   it "assigns the result to the local variable `_'" do
@@ -105,67 +84,42 @@
   
   it "prints the exception that occurs" do
     @context.evaluate("DoesNotExist")
-    @io.printed.should =~ /^NameError:.+DoesNotExist/
+    @context.printed.should =~ /^NameError:.+DoesNotExist/
   end
   
   it "uses the line number of the *first* line in the buffer, for the line parameter of eval" do
     @context.process_line("DoesNotExist")
-    @io.printed.should =~ /\(irb\):1:in/
+    @context.printed.should =~ /\(irb\):1:in/
     @context.process_line("class A")
     @context.process_line("DoesNotExist")
     @context.process_line("end")
-    @io.printed.should =~ /\(irb\):3:in.+\(irb\):2:in/m
+    @context.printed.should =~ /\(irb\):3:in.+\(irb\):2:in/m
   end
   
-  it "inputs a line to be processed, skipping readline" do
-    expected = "#{@context.formatter.prompt(@context)}2 * 21\n=> 42\n"
-    @context.input_line("2 * 21")
-    @io.printed.should == expected
+  it "ignores the result if it's IRB::Context::IGNORE_RESULT" do
+    @context.evaluate(":bananas")
+    @context.evaluate("IRB::Context::IGNORE_RESULT").should == nil
+    @context.printed.should == "=> :bananas\n"
+    @context.evaluate("_").should == :bananas
   end
 end
 
 describe "IRB::Context, when receiving input" do
   before do
     @context = IRB::Context.new(main)
-    @context.io = @io = CaptureIO.new
+    @context.extend(InputStubMixin)
+    @context.extend(OutputStubMixin)
   end
   
-  it "prints the prompt and reads a line" do
-    @io.stub_input("def foo")
-    @context.readline_from_io.should == "def foo"
-    @io.printed.should == "irb(main):001:0> "
-  end
-  
-  it "passes the input to all processors, which may return a new value" do
-    @context.processors << TestProcessor.new
-    @io.stub_input("foo")
-    @context.readline_from_io.should == "foofoo"
-  end
-  
-  it "processes the output" do
-    @io.stub_input("def foo")
-    def @context.process_line(line); @received = line; false; end
-    @context.run
-    @context.instance_variable_get(:@received).should == "def foo"
-  end
-  
   it "adds the received code to the source buffer" do
     @context.process_line("def foo")
     @context.process_line("p :ok")
     @context.source.to_s.should == "def foo\np :ok"
   end
   
-  it "clears the source buffer when an Interrupt signal is received" do
+  it "clears the source buffer" do
     @context.process_line("def foo")
-    
-    def @io.readline(prompt)
-      unless @raised
-        @raised = true
-        raise Interrupt
-      end
-    end
-    
-    lambda { @context.run }.should_not raise_error(Interrupt)
+    @context.clear_buffer
     @context.source.to_s.should == ""
   end
   
@@ -193,7 +147,7 @@
     @context.process_line("  };")
     
     @context.source.to_s.should == "def foo"
-    @io.printed.should == "SyntaxError: compile error\n(irb):2: syntax error, unexpected '}'\n"
+    @context.printed.should == "SyntaxError: compile error\n(irb):2: syntax error, unexpected '}'\n"
   end
   
   it "returns whether or not the runloop should continue, but only if the level is 0" do
@@ -204,20 +158,9 @@
     @context.process_line("quit").should == false
   end
   
-  it "exits the runloop if the user wishes so" do
-    @io.stub_input("quit", "def foo")
-    def @context.process_line(line); @received = line; super; end
-    @context.run
-    @context.instance_variable_get(:@received).should_not == "def foo"
+  it "inputs a line to be processed" do
+    expected = "#{@context.formatter.prompt(@context)}2 * 21\n=> 42\n"
+    @context.input_line("2 * 21")
+    @context.printed.should == expected
   end
 end
-
-describe "Kernel::irb" do
-  it "creates a new context for the given object and runs it" do
-    IRB.io = CaptureIO.new
-    IRB.io.stub_input("::IRBRan = self")
-    o = Object.new
-    irb(o)
-    IRBRan.should == o
-  end
-end

Modified: DietRB/trunk/spec/driver/readline_spec.rb
===================================================================
--- DietRB/trunk/spec/driver/readline_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/driver/readline_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -40,6 +40,7 @@
   before do
     @driver = IRB::Driver::Readline.new(InputStub.new, OutputStub.new)
     @context = IRB::Context.new(Object.new)
+    @driver.context_stack << @context
   end
 
   it "is a subclass of IRB::Driver::TTY" do
@@ -57,19 +58,13 @@
 
   it "reads a line through the Readline module" do
     Readline.stub_input "nom nom nom"
-    @driver.readline(@context).should == "nom nom nom"
+    @driver.readline.should == "nom nom nom"
   end
 
-  it "assigns the context as the current context to the completion object" do
-    Readline.stub_input "nom nom nom"
-    @driver.readline(@context)
-    Readline.completion_proc.context.should == @context
-  end
-
   it "tells the Readline module to use the history" do
     Readline.use_history = false
     Readline.stub_input "nom nom nom"
-    @driver.readline(@context)
+    @driver.readline
     Readline.use_history.should == true
   end
 end

Modified: DietRB/trunk/spec/driver/tty_spec.rb
===================================================================
--- DietRB/trunk/spec/driver/tty_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/driver/tty_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -5,34 +5,51 @@
   before do
     @driver = IRB::Driver::TTY.new(InputStub.new, OutputStub.new)
     @context = IRB::Context.new(Object.new)
+    @driver.context_stack << @context
   end
   
   it "prints the prompt and reads a line of input" do
     @driver.input.stub_input "calzone"
-    @driver.readline(@context).should == "calzone"
+    @driver.readline.should == "calzone"
     @driver.output.printed.should == @context.prompt
   end
   
   it "consumes input" do
     @driver.input.stub_input "calzone"
-    @driver.consume(@context).should == "calzone"
+    @driver.consume.should == "calzone"
   end
   
   it "clears the context buffer if an Interrupt signal is received while consuming input" do
     @context.process_line("class A")
-    def @driver.readline(_); raise Interrupt; end
-    @driver.consume(@context).should == ""
+    def @driver.readline; raise Interrupt; end
+    @driver.consume.should == ""
     @context.source.to_s.should == ""
   end
+end
 
+describe "IRB::Driver::TTY, when starting the runloop" do
+  before do
+    @driver = IRB::Driver::TTY.new(InputStub.new, OutputStub.new)
+    IRB::Driver.current = @driver
+    @context = IRB::Context.new(Object.new)
+  end
+  
+  it "makes the given context the current one, for this driver, for the duration of the runloop" do
+    $from_context = nil
+    @driver.input.stub_input "$from_context = IRB::Driver.current.context"
+    @driver.run(@context)
+    $from_context.should == @context
+    IRB::Driver.current.context.should == nil
+  end
+  
   it "feeds input into a given context" do
     $from_context = false
     @driver.input.stub_input "$from_context = true", "exit"
     @driver.run(@context)
     $from_context.should == true
   end
-
-  it "makes sure there's one global output redirector while running a context" do
+  
+  it "makes sure there's a global output redirector while running a context" do
     before = $stdout
     $from_context = nil
     @driver.input.stub_input "$from_context = $stdout", "exit"
@@ -41,3 +58,13 @@
     $stdout.should == before
   end
 end
+
+# describe "Kernel::irb" do
+#   it "creates a new context for the given object and runs it" do
+#     IRB.io = CaptureIO.new
+#     IRB.io.stub_input("::IRBRan = self")
+#     o = Object.new
+#     irb(o)
+#     IRBRan.should == o
+#   end
+# end
\ No newline at end of file

Modified: DietRB/trunk/spec/driver_spec.rb
===================================================================
--- DietRB/trunk/spec/driver_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/driver_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -1,14 +1,6 @@
 require File.expand_path('../spec_helper', __FILE__)
 require 'irb/driver'
 
-class StubDriver
-  attr_writer :output
-  
-  def output
-    @output || $stdout
-  end
-end
-
 describe "IRB::Driver" do
   before :all do
     @driver = StubDriver.new

Modified: DietRB/trunk/spec/ext/completion_spec.rb
===================================================================
--- DietRB/trunk/spec/ext/completion_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/ext/completion_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -1,9 +1,11 @@
 require File.expand_path('../../spec_helper', __FILE__)
+require 'irb/driver'
 require 'irb/ext/completion'
 
 module CompletionHelper
   def complete(str)
-    IRB::Completion.new(@context, str).results
+    # IRB::Completion.new(@context, str).results
+    @completion.call(str)
   end
   
   def imethods(klass, receiver = nil)
@@ -35,12 +37,14 @@
 describe "IRB::Completion" do
   extend CompletionHelper
   
-  before do
+  before :all do
+    @completion = IRB::Completion.new
     @context = IRB::Context.new(Playground.new)
+    IRB::Driver.current = StubDriver.new(@context)
   end
   
   it "quacks like a Proc" do
-    IRB::Completion.call('//.').should == imethods(Regexp, '//')
+    @completion.call('//.').should == imethods(Regexp, '//')
   end
   
   describe "when doing a method call on an explicit receiver," do

Modified: DietRB/trunk/spec/ext/history_spec.rb
===================================================================
--- DietRB/trunk/spec/ext/history_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/ext/history_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -1,6 +1,10 @@
 require File.expand_path('../../spec_helper', __FILE__)
+require 'readline'
 require "tempfile"
 
+require 'irb/ext/history'
+require 'irb/driver'
+
 describe "IRB::History, by default," do
   it "stores the history in ~/.irb_history" do
     IRB::History.file.should == File.expand_path("~/.irb_history")
@@ -11,7 +15,7 @@
   before do
     @file = Tempfile.new("irb_history.txt")
     IRB::History.file = @file.path
-    @history = IRB::History.new(nil)
+    @history = IRB::History
   end
   
   after do
@@ -54,8 +58,8 @@
     @history.input "puts :ok"
     @history.input "foo(x)"
     
-    IRB::History.new(nil)
-    IRB::History.new(nil)
+    IRB::History.initialize
+    IRB::History.initialize
     
     Readline::HISTORY.to_a.should == ["puts :ok", "foo(x)"]
   end
@@ -70,14 +74,16 @@
   end
 end
 
-class IRB::History
-  def clear!
-    @cleared = true
+module IRB::History
+  class << self
+    def clear!
+      @cleared = true
+    end
+    
+    def cleared?
+      @cleared
+    end
   end
-  
-  def cleared?
-    @cleared
-  end
 end
 
 describe "IRB::History, concerning the user api, by default," do
@@ -104,25 +110,22 @@
     
     IRB::History.max_entries_in_overview = 5
     
+    IRB::History.extend(OutputStubMixin)
+    IRB::History.clear_printed!
+    
     @context = IRB::Context.new(Object.new)
-    @context.io = @io = CaptureIO.new
-    IRB::Context.current = @context
-    
-    @history = @context.processors.find { |p| p.is_a?(IRB::History) }
+    @context.extend(OutputStubMixin)
+    IRB::Driver.current = StubDriver.new(@context)
   end
   
-  after do
-    IRB::Context.current = nil
-  end
-  
   it "returns nil so that IRB doesn't cache some arbitrary line number" do
-    history.should == nil
+    history.should == IRB::Context::IGNORE_RESULT
   end
   
   it "prints a formatted list with IRB::History.max_entries_in_overview number of history entries" do
     history
     
-    @io.printed.should == %{
+    IRB::History.printed.should == %{
 2: class AAA
 3:   def bar
 4:     :ok
@@ -134,7 +137,7 @@
   it "prints a formatted list of N most recent history entries" do
     history(7)
     
-    @io.printed.should == %{
+    IRB::History.printed.should == %{
 0: puts :ok
 1: x = foo(x)
 2: class AAA
@@ -148,7 +151,7 @@
   it "prints a formatted list of all history entries if the request number of entries is more than there is" do
     history(777)
 
-    @io.printed.should == %{
+    IRB::History.printed.should == %{
 0: puts :ok
 1: x = foo(x)
 2: class AAA
@@ -172,6 +175,6 @@
   
   it "clears the history and history file" do
     clear_history!
-    @history.cleared?.should == true
+    IRB::History.cleared?.should == true
   end
 end
\ No newline at end of file

Deleted: DietRB/trunk/spec/io/readline_spec.rb
===================================================================
--- DietRB/trunk/spec/io/readline_spec.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/io/readline_spec.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -1,31 +0,0 @@
-require File.expand_path('../../spec_helper', __FILE__)
-require 'tempfile'
-
-describe "IRB::IO::Readline" do
-  before do
-    @output = File.new("/tmp/dietrb-output-#{Time.now.to_i}", 'w+')
-    @io = IRB::IO::Readline.new($stdin, @output)
-  end
-  
-  after do
-    @output.close
-    File.unlink(@output.path)
-  end
-  
-  it "returns the input and output objects" do
-    @io.input.should == $stdin
-    @io.output.should == @output
-  end
-  
-  it "receives a prompt and should save the history" do
-    def Readline.readline(prompt, save_history); @received = [prompt, save_history]; end
-    @io.readline('PROMPT')
-    Readline.instance_variable_get(:@received).should == ['PROMPT', true]
-  end
-  
-  it "forwards #puts to the output object" do
-    @io.puts("chunky banana")
-    @output.rewind
-    @output.read.should == "chunky banana\n"
-  end
-end
\ No newline at end of file

Modified: DietRB/trunk/spec/spec_helper.rb
===================================================================
--- DietRB/trunk/spec/spec_helper.rb	2010-10-08 11:07:52 UTC (rev 4739)
+++ DietRB/trunk/spec/spec_helper.rb	2010-10-08 11:08:07 UTC (rev 4740)
@@ -51,8 +51,25 @@
   def puts(*args)
     print "#{args.join("\n")}\n"
   end
+  
+  def clear_printed!
+    @printed = ''
+  end
 end
 
 class OutputStub
   include OutputStubMixin
 end
+
+class StubDriver
+  attr_reader :context
+  attr_writer :output
+  
+  def initialize(context = nil)
+    @context = context
+  end
+  
+  def output
+    @output || $stdout
+  end
+end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20101008/7b231ab0/attachment-0001.html>


More information about the macruby-changes mailing list