Class: RubyDocTest::Statement
Instance Attribute Summary collapse
-
#actual_result ⇒ Object
readonly
Returns the value of attribute actual_result.
Instance Method Summary collapse
-
#evaluate ⇒ Object
Test.
-
#initialize(doc_lines, line_index = 0, file_name = nil) ⇒ Statement
constructor
Tests.
-
#source_code ⇒ Object
Tests.
Methods inherited from Lines
#inspect, #line_number, #lines, #range
Constructor Details
#initialize(doc_lines, line_index = 0, file_name = nil) ⇒ Statement
Tests
doctest: The FILENAME ruby constant should be replaced by the name of the file >> __FILE__
> “statement.rb”
24 25 26 27 |
# File 'lib/statement.rb', line 24 def initialize(doc_lines, line_index = 0, file_name = nil) @file_name = file_name super(doc_lines, line_index) end |
Instance Attribute Details
#actual_result ⇒ Object (readonly)
Returns the value of attribute actual_result.
17 18 19 |
# File 'lib/statement.rb', line 17 def actual_result @actual_result end |
Instance Method Details
#evaluate ⇒ Object
Test
doctest: Evaluating a multi-line statement should be ok >> s = RubyDocTest::Statement.new([“>> b = 1 +”, “ 1”, “not part of the statement”]) >> s.evaluate
> 2
doctest: Evaluating a syntax error should raise an EvaluationError >> s = RubyDocTest::Statement.new([“>> b = 1 +”]) >> begin s.evaluate; :fail; rescue RubyDocTest::EvaluationError; :ok end
> :ok
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/statement.rb', line 63 def evaluate sc = source_code.gsub("__FILE__", @file_name.inspect) if RubyDocTest.verbose puts "EVAL: #{sc}" end @actual_result = eval(sc, TOPLEVEL_BINDING, __FILE__, __LINE__) if RubyDocTest.verbose puts "RESULT: #{@actual_result}" end @actual_result rescue Exception => e if RubyDocTest.trace raise e.class, e.to_s + "\n" + e.backtrace.first else raise EvaluationError.new(self, e) end end |
#source_code ⇒ Object
Tests
doctest: A statement should parse out a ‘>>’ irb prompt >> s = RubyDocTest::Statement.new([“>> a = 1”]) >> s.source_code
> “a = 1”
doctest: More than one line should get included, if indentation so indicates >> s = RubyDocTest::Statement.new([“>> b = 1 +”, “ 1”, “not part of the statement”]) >> s.source_code
> “b = 1 +n1”
doctest: Lines indented by ?> should have the ?> removed. >> s = RubyDocTest::Statement.new([“>> b = 1 +”, “?> 1”]) >> s.source_code
> “b = 1 +n1”
45 46 47 48 49 50 |
# File 'lib/statement.rb', line 45 def source_code lines.first =~ /^#{Regexp.escape(indentation)}>>\s(.*)$/ first = [$1] remaining = (lines[1..-1] || []) (first + remaining).join("\n") end |