class Hiptest::NodeModifiers::ParameterTypeAdder
Attributes
call_types[R]
Public Class Methods
add(project)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 9 def self.add(project) self.new.process(project) end
new()
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 13 def initialize @call_types = CallTypes.new end
Public Instance Methods
add_arguments_from(node, context = nil)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 66 def add_arguments_from(node, context = nil) node.each_sub_nodes(Hiptest::Nodes::Argument) do |argument| @call_types.add_argument_type(argument.children[:name], get_type(argument.children[:value], context)) end end
gather_actionwords_default_parameters_types(project)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 40 def gather_actionwords_default_parameters_types(project) project.children[:actionwords].children[:actionwords].each do |actionword| @call_types.add_callable_item(actionword.children[:name], Hiptest::Nodes::Actionword) actionword.each_sub_nodes(Hiptest::Nodes::Parameter) do |parameter| default = parameter.children[:default] next if default.nil? @call_types.add_argument_type(parameter.children[:name], get_type(default)) end end end
gather_call_argument_types(node)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 51 def gather_call_argument_types(node) node.each_sub_nodes(Hiptest::Nodes::Call) do |call| actionword_name = call.children[:actionword] @call_types.add_callable_item(actionword_name, Hiptest::Nodes::Actionword) add_arguments_from(call, node) end end
gather_scenarios_argument_types(project)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 33 def gather_scenarios_argument_types(project) project.children[:scenarios].children[:scenarios].each do |scenario| @call_types.add_callable_item(scenario.children[:name], Hiptest::Nodes::Scenario) add_arguments_from(scenario.children[:datatable]) end end
process(project)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 17 def process(project) gather_scenarios_argument_types(project) gather_actionwords_default_parameters_types(project) # To have the most accurate type, the closest calls must be computed # first, and deepest calls must be computed last (because they depend # on previous calls types). distances_index = Hiptest::ProjectGrapher.distances_index(project) distances_index.each_value do |items| # distances_index items are sorted by distance, from closest to deepest items.each do |item| write_parameter_types_to_item(item) gather_call_argument_types(item) end end end
write_parameter_types_to_item(callable_item)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 60 def write_parameter_types_to_item(callable_item) callable_item.each_sub_nodes(Hiptest::Nodes::Parameter) do |parameter| parameter.children[:type] = @call_types.type_of(callable_item.children[:name], parameter.children[:name], callable_item.class) end end
Private Instance Methods
get_type(value, context = nil)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 74 def get_type(value, context = nil) case value when Hiptest::Nodes::StringLiteral, Hiptest::Nodes::Template then :String when Hiptest::Nodes::NumericLiteral then value.children[:value].to_s.include?(".") ? :float : :int when Hiptest::Nodes::BooleanLiteral then :bool when Hiptest::Nodes::Variable then get_var_value(value.children[:name], context) else :null end end
get_var_value(name, context)
click to toggle source
# File lib/hiptest-publisher/node_modifiers/parameter_type_adder.rb, line 84 def get_var_value(name, context) return :null if context.nil? || context.children[:parameters].nil? context.children[:parameters].each do |param| if param.children[:name] == name return param.children[:type] || :null end end return :null end