lib/atp/processors/add_ids.rb in atp-0.3.3 vs lib/atp/processors/add_ids.rb in atp-0.4.0

- old
+ new

@@ -2,22 +2,43 @@ module Processors # Assigns an ID to all test nodes that don't have one class AddIDs < Processor def run(node) @i = 0 + @existing_ids = [] + @add_ids = false + # First collect all existing IDs, this is required to make sure + # that a generated ID does not clash with an existing one process(node) + # Now run again to fill in the blanks + @add_ids = true + process(node) end def on_test(node) - @i += 1 - node = node.ensure_node_present(:id) - node.updated(nil, process_all(node)) + if @add_ids + node = node.ensure_node_present(:id) + node.updated(nil, process_all(node)) + else + if id = node.find(:id) + @existing_ids << id.value + end + process_all(node) + end end def on_id(node) - unless node.value - node.updated(nil, ["t#{@i}"]) + if @add_ids + unless node.value + node.updated(nil, [next_id]) + end end + end + + def next_id + @i += 1 + @i += 1 while @existing_ids.include?("t#{@i}") + "t#{@i}" end end end end