lib/cucumber/jbehave.rb in aslakhellesoy-cucumber-0.1.99.14 vs lib/cucumber/jbehave.rb in aslakhellesoy-cucumber-0.1.99.15

- old
+ new

@@ -1,104 +1,102 @@ -require 'java' +if defined?(JRUBY_VERSION) + require 'java' -$:.unshift(ENV['HOME'] + '/.m2/repository/org/hamcrest/hamcrest-all/1.1') -$:.unshift(ENV['HOME'] + '/.m2/repository/junit/junit/4.4') -$:.unshift(ENV['HOME'] + '/.m2/repository/org/jbehave/jbehave-core/2.1') + Exception::CUCUMBER_FILTER_PATTERNS.unshift(/^org\/jruby|^org\/jbehave|^org\/junit|^java\/|^sun\/|^\$_dot_dot_/) -require 'hamcrest-all-1.1.jar' -require 'junit-4.4.jar' -require 'jbehave-core-2.1.jar' - -Exception::CUCUMBER_FILTER_PATTERNS.unshift(/^org\/jruby|^org\/jbehave|^org\/junit|^java\/|^sun\/|^\$_dot_dot_/) - -module Cucumber - module JBehave - # Register an instance of org.jbehave.scenario.steps.Steps - def JBehave(jbehave_steps) - jbehave_steps.getSteps.each do |jbehave_candidate_step| - step_definitions << JBehaveStepDefinition.new(jbehave_steps, jbehave_candidate_step) + module Cucumber + module JBehave + # Register an instance of org.jbehave.scenario.steps.Steps + def JBehave(jbehave_steps) + jbehave_steps.getSteps.each do |jbehave_candidate_step| + step_definitions << JBehaveStepDefinition.new(jbehave_steps, jbehave_candidate_step) + end end - end - # Open up so we can get the pattern.... - JBehaveCandidateStep = org.jbehave.scenario.steps.CandidateStep - class JBehaveCandidateStep - field_reader :pattern - end - - # Adapter for JBehave org.jbehave.scenario.steps.CandidateStep - class JBehaveStepDefinition - def initialize(jbehave_steps, jbehave_candidate_step) - @jbehave_steps = jbehave_steps - @jbehave_candidate_step = jbehave_candidate_step + # Open up so we can get the pattern.... + JBehaveCandidateStep = org.jbehave.scenario.steps.CandidateStep + class JBehaveCandidateStep + field_reader :pattern end + + # Adapter for JBehave org.jbehave.scenario.steps.CandidateStep + class JBehaveStepDefinition + def initialize(jbehave_steps, jbehave_candidate_step) + @jbehave_steps = jbehave_steps + @jbehave_candidate_step = jbehave_candidate_step + end - def match(step_name) - full_text = "Given #{step_name}" # JBehave doesn't distinguish GWT internally :-) - @jbehave_candidate_step.matches(full_text) - end + def match(step_name) + full_text = "Given #{step_name}" # JBehave doesn't distinguish GWT internally :-) + @jbehave_candidate_step.matches(full_text) + end - def file_colon_line - @jbehave_steps.java_class.name - end + def file_colon_line + @jbehave_steps.java_class.name + end - def format_args(step_name, format) - java_pattern = @jbehave_candidate_step.pattern.pattern - regexp = Regexp.new(java_pattern) - step_name.gzub(regexp, format) - end + def format_args(step_name, format) + java_pattern = @jbehave_candidate_step.pattern.pattern + regexp = Regexp.new(java_pattern) + step_name.gzub(regexp, format) + end - def matched_args(step_name) - java_pattern = @jbehave_candidate_step.pattern.pattern - regexp = Regexp.new(java_pattern) - step_name.match(regexp).captures - end + def matched_args(step_name) + java_pattern = @jbehave_candidate_step.pattern.pattern + regexp = Regexp.new(java_pattern) + step_name.match(regexp).captures + end - def execute(step_name, world, *args) - step = @jbehave_candidate_step.createFrom("Given #{step_name}") - result = step.perform - result.describeTo(JBehave::REPORTER) + def execute(step_name, world, *args) + step = @jbehave_candidate_step.createFrom("Given #{step_name}") + result = step.perform + result.describeTo(JBehave::REPORTER) + end end - end - class JBehaveException < Exception - end - - # Implements the org.jbehave.scenario.reporters.ScenarioReporter methods - class Reporter - def successful(step_text) - # noop + class JBehaveException < Exception end - def failed(step, java_exception) - raise java_exception_to_ruby_exception(java_exception) - end + # Implements the org.jbehave.scenario.reporters.ScenarioReporter methods + class Reporter + def successful(step_text) + # noop + end - private + def failed(step, java_exception) + raise java_exception_to_ruby_exception(java_exception) + end + + private - def java_exception_to_ruby_exception(java_exception) - # OK, this is a little funky - JRuby weirdness - ruby_exception = org.jruby.NativeException.new(JRuby.runtime, JBehaveException, java_exception) - ruby_exception.set_backtrace([]) # work around backtrace bug in jruby + def java_exception_to_ruby_exception(java_exception) + # OK, this is a little funky - JRuby weirdness + ruby_exception = org.jruby.NativeException.new(JRuby.runtime, JBehaveException, java_exception) + ruby_exception.set_backtrace([]) # work around backtrace bug in jruby - exception = JBehaveException.new(java_exception.getMessage) - bt = ruby_exception.backtrace - Exception.cucumber_strip_backtrace!(bt, nil, nil) - exception.set_backtrace(bt) - exception + exception = JBehaveException.new(java_exception.getMessage) + bt = ruby_exception.backtrace + Exception.cucumber_strip_backtrace!(bt, nil, nil) + exception.set_backtrace(bt) + exception + end end - end - REPORTER = Reporter.new + REPORTER = Reporter.new - def self.snippet_text(step_keyword, step_name) - camel = step_name.gsub(/(\s.)/) {$1.upcase.strip} - method = camel[0..0].downcase + camel[1..-1] - snippet = %{ @#{step_keyword}("#{step_name}") + def self.snippet_text(step_keyword, step_name) + camel = step_name.gsub(/(\s.)/) {$1.upcase.strip} + method = camel[0..0].downcase + camel[1..-1] + snippet = %{ @#{step_keyword}("#{step_name}") public void #{method}() { + throw new RuntimeException("pending"); }} + end end end -end -self.extend(Cucumber::JBehave) -self.snippet_generator = Cucumber::JBehave + self.extend(Cucumber::JBehave) + self.snippet_generator = Cucumber::JBehave +else + STDERR.puts "ERROR: cucumber/jbehave only works with JRuby" + Kernel.exit(1) +end \ No newline at end of file