class Bucky::Core::TestCore::TestClassGenerator

Attributes

test_classes[RW]

Public Class Methods

new(test_cond) click to toggle source
# File lib/bucky/core/test_core/test_class_generator.rb, line 43
def initialize(test_cond)
  @test_classes = TestClasses
  @test_cond = test_cond
end

Public Instance Methods

generate_test_class(data, link_status_url_log = {}) click to toggle source

Genrate test class by test suite and test case data

# File lib/bucky/core/test_core/test_class_generator.rb, line 49
def generate_test_class(data, link_status_url_log = {})
  test_cond = @test_cond
  # Common proccessing
  # e.g.) TestSampleAppPcE2e1, TestSampleAppPcHttpstatus1
  test_class_name = make_test_class_name(data)
  # Select super class by test category
  super_suite_class = eval format('Bucky::TestEquipment::TestCase::%<test_category>sTestCase', test_category: data[:test_category].capitalize)
  # Define test suite class
  test_classes.const_set(test_class_name.to_sym, Class.new(super_suite_class) do |_klass|
    extend TestClassGeneratorHelper
    include TestClassGeneratorHelper
    define_method(:suite_data, proc { data[:suite] })
    define_method(:suite_id, proc { data[:test_suite_id] })
    define_method(:simple_test_class_name) do |original_name|
      match_obj = /\Atest_(.+)\(.+::(Test.+)\)\z/.match(original_name)
      "#{match_obj[1]}(#{match_obj[2]})"
    end

    # Class structure is different for each test category
    case data[:test_category]
    when 'linkstatus' then
      data[:suite][:cases].each_with_index do |t_case, i|
        method_name = make_test_method_name(data, t_case, i)
        description(
          t_case[:case_name],
          define_method(method_name) do
            puts "\n#{simple_test_class_name(name)}"
            t_case[:urls].each do |url|
              link_status_check_args = { url: url, device: data[:suite][:device], exclude_urls: data[:suite][:exclude_urls], link_check_max_times: test_cond[:link_check_max_times], url_log: link_status_url_log }
              link_status_check(link_status_check_args)
            end
          end
        )
      end

    when 'e2e' then
      if data[:suite][:setup_each]
        def setup
          super
          puts "[setup]#{simple_test_class_name(name)}"
          add_test_procedure(suite_data[:setup_each][:procs])
        end
      end

      if data[:suite][:teardown_each]
        def teardown
          puts "[teardown]#{simple_test_class_name(name)}"
          add_test_procedure(suite_data[:teardown_each][:procs])
          super
        end
      end

      # Generate test case method
      data[:suite][:cases].each_with_index do |t_case, i|
        # e.g.) test_sample_app_pc_e2e_1_2
        method_name = make_test_method_name(data, t_case, i)
        method_obj = proc do
          puts "\n#{simple_test_class_name(name)}\n #{t_case[:desc]} ...."
          add_test_procedure(t_case[:procs])
        end
        description(t_case[:case_name], define_method(method_name, method_obj))
      end
    end
  end)
end
setup() click to toggle source
Calls superclass method
# File lib/bucky/core/test_core/test_class_generator.rb, line 86
def setup
  super
  puts "[setup]#{simple_test_class_name(name)}"
  add_test_procedure(suite_data[:setup_each][:procs])
end
teardown() click to toggle source
Calls superclass method
# File lib/bucky/core/test_core/test_class_generator.rb, line 94
def teardown
  puts "[teardown]#{simple_test_class_name(name)}"
  add_test_procedure(suite_data[:teardown_each][:procs])
  super
end

Private Instance Methods

make_test_class_name(data) click to toggle source
# File lib/bucky/core/test_core/test_class_generator.rb, line 117
def make_test_class_name(data)
  [
    'Test',
    data[:suite][:service].split(/_|-/).map(&:capitalize).join.to_s,
    data[:suite][:device].capitalize.to_s,
    data[:test_category].to_s.capitalize.to_s,
    (data[:test_class_name]).to_s
  ].join
end