summaryrefslogtreecommitdiff
path: root/spec/method_source/code_helpers_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/method_source/code_helpers_spec.rb')
-rw-r--r--spec/method_source/code_helpers_spec.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/spec/method_source/code_helpers_spec.rb b/spec/method_source/code_helpers_spec.rb
new file mode 100644
index 0000000..287ff89
--- /dev/null
+++ b/spec/method_source/code_helpers_spec.rb
@@ -0,0 +1,43 @@
+require 'spec_helper'
+
+describe MethodSource::CodeHelpers do
+ before do
+ @tester = Object.new.extend(MethodSource::CodeHelpers)
+ end
+
+ [
+ ["p = '", "'"],
+ ["def", "a", "(); end"],
+ ["p = <<FOO", "lots", "and", "lots of", "foo", "FOO"],
+ ["[", ":lets,", "'list',", "[/nested/", "], things ]"],
+ ["abc =~ /hello", "/"],
+ ["issue = %W/", "343/"],
+ ["pouts(<<HI, 'foo", "bar", "HI", "baz')"],
+ ["=begin", "no-one uses this syntax anymore...", "=end"],
+ ["puts 1, 2,", "3"],
+ ["puts 'hello'\\", "'world'"]
+ ].each do |lines|
+ it "should not raise an error on broken lines: #{lines.join("\\n")}" do
+ 1.upto(lines.size - 1) do |i|
+ expect(@tester.complete_expression?(lines[0...i].join("\n") + "\n")).to be_falsy
+ end
+ expect(@tester.complete_expression?(lines.join("\n"))).to be_truthy
+ end
+ end
+
+ [
+ ["end"],
+ ["puts )("],
+ ["1 1"],
+ ["puts :"]
+ ] + (RbConfig::CONFIG['ruby_install_name'] == 'rbx' ? [] : [
+ ["def", "method(1"], # in this case the syntax error is "expecting ')'".
+ ["o = Object.new.tap{ def o.render;","'MEH'", "}"] # in this case the syntax error is "expecting keyword_end".
+ ]).compact.each do |foo|
+ it "should raise an error on invalid syntax like #{foo.inspect}" do
+ expect {
+ @tester.complete_expression?(foo.join("\n"))
+ }.to raise_error(SyntaxError)
+ end
+ end
+end