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