Sha256: 7c8ff4e07eae575c444278993d491eca7aa0557841fff46dc8ea5c55529f832b

Contents?: true

Size: 1.9 KB

Versions: 41

Compression:

Stored size: 1.9 KB

Contents

module OrigenTesters::ATP
  module Validators
    class MissingIDs < Validator
      def setup
        @referenced_ids = {}
        @present_ids ||= {}.with_indifferent_access
        @referenced_early = {}.with_indifferent_access
      end

      def on_completion
        failed = false
        @referenced_ids.each do |id, nodes|
          unless @present_ids[id]
            error "Test ID #{id} is referenced in flow #{flow.name} in the following lines, but it is never defined:"
            nodes.each do |node|
              error "  #{node.source}"
            end
            failed = true
            @referenced_early.delete(id)
          end
        end
        @referenced_early.each do |id, nodes|
          error "Test ID #{id} is referenced in flow #{flow.name} in the following line(s):"
          nodes.each do |node|
            error "  #{node.source}"
          end
          error 'but it was not defined until later:'
          error "  #{@present_ids[id].first.source}"
          failed = true
        end
        failed
      end

      def on_id(node)
        id = node.value
        @present_ids[id] ||= []
        @present_ids[id] << node
      end

      def on_if_failed(node)
        ids = node.to_a[0]
        [ids].flatten.each do |id|
          unless id =~ /^extern/
            @referenced_ids[id] ||= []
            @referenced_ids[id] << node
            unless @present_ids[id]
              @referenced_early[id] ||= []
              @referenced_early[id] << node
            end
          end
        end
        process_all(node)
      end
      alias_method :on_if_any_failed, :on_if_failed
      alias_method :on_if_all_failed, :on_if_failed
      alias_method :on_if_passed, :on_if_failed
      alias_method :on_if_any_passed, :on_if_failed
      alias_method :on_if_all_passed, :on_if_failed
      alias_method :on_if_ran, :on_if_failed
      alias_method :on_unless_ran, :on_if_failed
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
origen_testers-0.52.9 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.8 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.7 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.6 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.5 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.4 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.3 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.1 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.52.0 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.5 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.4 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.3 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.2 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.1 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.51.0 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.50.0 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.49.4 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.49.3 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.49.2 lib/origen_testers/atp/validators/missing_ids.rb
origen_testers-0.49.1 lib/origen_testers/atp/validators/missing_ids.rb