class Riddler::TestGenerator
Attributes
input_filename[R]
project_root[R]
test_case[R]
Public Class Methods
new(project_root, input_filename)
click to toggle source
# File lib/riddler/test_generator.rb, line 8 def initialize project_root, input_filename @project_root = project_root @input_filename = input_filename @test_case = YAML.safe_load File.read input_filename end
Public Instance Methods
class_name()
click to toggle source
# File lib/riddler/test_generator.rb, line 18 def class_name classify test_case_name end
definition()
click to toggle source
# File lib/riddler/test_generator.rb, line 22 def definition test_case["definition"] end
generate()
click to toggle source
# File lib/riddler/test_generator.rb, line 30 def generate folder = input_filename.dirname.basename.to_s output_filename = project_root.join *%W[ test cases #{folder} #{test_case_name}_test.rb ] puts "Generating #{output_filename.relative_path_from(project_root)}" output_filename.dirname.mkdir unless output_filename.dirname.exist? File.write output_filename, render end
test_case_name()
click to toggle source
# File lib/riddler/test_generator.rb, line 14 def test_case_name test_case["name"] end
tests()
click to toggle source
# File lib/riddler/test_generator.rb, line 26 def tests test_case["tests"] end
Private Instance Methods
classify(string)
click to toggle source
# File lib/riddler/test_generator.rb, line 44 def classify string string.split('_').collect!{ |w| w.capitalize }.join end
render()
click to toggle source
# File lib/riddler/test_generator.rb, line 40 def render ERB.new(test_class_template).result(binding) end
test_class_template()
click to toggle source
# File lib/riddler/test_generator.rb, line 48 def test_class_template <<~TEMPLATE require "test_helper" class <%= class_name %>Test < ::Minitest::Test attr_reader :definition def setup @definition = <%= definition %> end <% tests.each do |test| %> def test_<%= test["name"] %> expected_result = <% if test["result"].nil? %>nil<% else %><%= test["result"] %><% end %> context = <% if test["context"].nil? %>nil<% else %><%= test["context"] %><% end %> result = ::Riddler.render definition, context result&.transform_keys! { |k| k.to_s } assert_equal_hash expected_result, result end <% end %> end TEMPLATE end