lib/atp/runner.rb in atp-0.8.0 vs lib/atp/runner.rb in atp-1.0.0

- old
+ new

@@ -4,12 +4,12 @@ # A subset of the input AST will be returned containing only the nodes that would # be hit when the flow is executed under the given conditions. class Runner < Processor def run(node, options = {}) options = { - evaluate_flow_flags: true, - evaluate_run_flags: true, + evaluate_enables: true, + evaluate_flags: true, evaluate_set_result: true }.merge(options) @options = options @completed = false @groups = [] @@ -29,57 +29,65 @@ def on_name(node) container << node end - def on_flow_flag(node) - if @options[:evaluate_flow_flags] - flag, enabled, *nodes = *node + def on_if_flag(node) + if @options[:evaluate_flags] + flag, *nodes = *node flag = [flag].flatten - active = flag.any? { |f| flow_flags.include?(f) } + enabled = node.type == :if_flag + active = flag.any? { |f| set_flags.include?(f) } if (enabled && active) || (!enabled && !active) process_all(nodes) end else c = open_container do process_all(node.children) end - container << node.updated(nil, node.children.take(2) + c) + container << node.updated(nil, node.children.take(1) + c) end end + alias_method :on_unless_flag, :on_if_flag - def on_run_flag(node) - if @options[:evaluate_run_flags] - flag, enabled, *nodes = *node + def on_if_enabled(node) + if @options[:evaluate_enables] + flag, *nodes = *node flag = [flag].flatten - active = flag.any? { |f| run_flags.include?(f) } + enabled = node.type == :if_enabled + active = flag.any? { |f| set_enables.include?(f) } if (enabled && active) || (!enabled && !active) process_all(nodes) end else c = open_container do process_all(node.children) end - container << node.updated(nil, node.children.take(2) + c) + container << node.updated(nil, node.children.take(1) + c) end end + alias_method :on_unless_enabled, :on_if_enabled - # Not sure why this method is here, all test_result nodes should have been - # converted to run_flag nodes by now - def on_test_result(node) - id, passed, *nodes = *node - if (passed && !failed_test_ids.include?(id)) || - (!passed && failed_test_ids.include?(id)) + def on_if_failed(node) + id, *nodes = *node + if failed_test_ids.include?(id) process_all(nodes) end end + def on_if_passed(node) + id, *nodes = *node + unless failed_test_ids.include?(id) + process_all(nodes) + end + end + def on_test(node) if id = node.find(:id) id = id.to_a[0] if failed_test_ids.include?(id) - node = node.add(n0(:failed)) + node = node.add(node.updated(:failed, [])) failed = true if n_on_fail = node.find(:on_fail) node = node.remove(n_on_fail) end end @@ -153,39 +161,41 @@ container << node unless completed? @completed = true if @options[:evaluate_set_result] end end - def on_set_run_flag(node) - run_flags << node.to_a[0] + def on_set_flag(node) + set_flags << node.to_a[0] end - def on_enable_flow_flag(node) - flow_flags << node.value unless flow_flags.include?(node.value) + def on_enable(node) + set_enables << node.value unless set_enables.include?(node.value) end - def on_disable_flow_flag(node) - flow_flags.delete(node.value) + def on_disable(node) + set_enables.delete(node.value) end def on_log(node) container << node unless completed? end alias_method :on_render, :on_log - def on_job(node) - jobs, state, *nodes = *node + def on_if_job(node) + jobs, *nodes = *node jobs = clean_job(jobs) + state = node.type == :if_job unless job fail 'Flow contains JOB-based conditions and no current JOB has been given!' end if state process_all(node) if jobs.include?(job) else process_all(node) unless jobs.include?(job) end end + alias_method :on_unless_job, :on_if_job def clean_job(job) [job].flatten.map { |j| j.to_s.upcase } end @@ -195,16 +205,16 @@ def failed_test_ids @failed_test_ids ||= [@options[:failed_test_id] || @options[:failed_test_ids]].flatten.compact end - def run_flags - @run_flags ||= [] + def set_flags + @set_flags ||= [] end # Returns an array of enabled flow flags - def flow_flags - @flow_flags ||= [@options[:flow_flag] || @options[:flow_flags]].flatten.compact + def set_enables + @set_enables ||= [@options[:enable] || @options[:enables]].flatten.compact end def completed? @completed end