class TestInvoker

Attributes

mocks[R]
sources[R]
tests[R]

Public Instance Methods

convert_libraries_to_arguments() click to toggle source

Convert libraries configuration form YAML configuration into a string that can be given to the compiler.

# File lib/ceedling/test_invoker.rb, line 29
def convert_libraries_to_arguments()
  args = ((@configurator.project_config_hash[:libraries_test] || []) + ((defined? LIBRARIES_SYSTEM) ? LIBRARIES_SYSTEM : [])).flatten
  if (defined? LIBRARIES_FLAG)
    args.map! {|v| LIBRARIES_FLAG.gsub(/\$\{1\}/, v) }
  end
  return args
end
get_library_paths_to_arguments() click to toggle source
# File lib/ceedling/test_invoker.rb, line 37
def get_library_paths_to_arguments()
  paths = (defined? PATHS_LIBRARIES) ? (PATHS_LIBRARIES || []).clone : []
  if (defined? LIBRARIES_PATH_FLAG)
    paths.map! {|v| LIBRARIES_PATH_FLAG.gsub(/\$\{1\}/, v) }
  end
  return paths
end
refresh_deep_dependencies() click to toggle source
# File lib/ceedling/test_invoker.rb, line 156
def refresh_deep_dependencies
  @file_wrapper.rm_f(
    @file_wrapper.directory_listing(
      File.join( @configurator.project_test_dependencies_path, '*' + @configurator.extension_dependencies ) ) )

  @test_invoker_helper.process_deep_dependencies(
    @configurator.collection_all_tests + @configurator.collection_all_source )
end
setup() click to toggle source
# File lib/ceedling/test_invoker.rb, line 20
def setup
  @sources = []
  @tests   = []
  @mocks   = []
end
setup_and_invoke(tests, context=TEST_SYM, options={:force_run => true, :build_only => false}) click to toggle source
# File lib/ceedling/test_invoker.rb, line 45
def setup_and_invoke(tests, context=TEST_SYM, options={:force_run => true, :build_only => false})

  @tests = tests

  @project_config_manager.process_test_config_change

  @tests.each do |test|
    # announce beginning of test run
    header = "Test '#{File.basename(test)}'"
    @streaminator.stdout_puts("\n\n#{header}\n#{'-' * header.length}")

    begin
      @plugin_manager.pre_test( test )
      test_name ="#{File.basename(test)}".chomp('.c')
      def_test_key="defines_#{test_name.downcase}"

      if @configurator.project_config_hash.has_key?(def_test_key.to_sym) || @configurator.defines_use_test_definition
        defs_bkp = Array.new(COLLECTION_DEFINES_TEST_AND_VENDOR)
        tst_defs_cfg = Array.new(defs_bkp)
        if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
          tst_defs_cfg.replace(@configurator.project_config_hash[def_test_key.to_sym])
          tst_defs_cfg .concat(COLLECTION_DEFINES_VENDOR) if COLLECTION_DEFINES_VENDOR
        end
        if @configurator.defines_use_test_definition
          tst_defs_cfg << File.basename(test, ".*").strip.upcase.sub(/@.*$/, "")
        end
        COLLECTION_DEFINES_TEST_AND_VENDOR.replace(tst_defs_cfg)
      end

      # redefine the project out path and preprocessor defines
      if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
        @streaminator.stdout_puts("Updating test definitions for #{test_name}", Verbosity::NORMAL)
        orig_path = @configurator.project_test_build_output_path
        @configurator.project_config_hash[:project_test_build_output_path] = File.join(@configurator.project_test_build_output_path, test_name)
        @file_wrapper.mkdir(@configurator.project_test_build_output_path)
      end

      # collect up test fixture pieces & parts
      runner       = @file_path_utils.form_runner_filepath_from_test( test )
      mock_list    = @preprocessinator.preprocess_test_and_invoke_test_mocks( test )
      sources      = @test_invoker_helper.extract_sources( test )
      extras       = @configurator.collection_test_fixture_extra_link_objects
      core         = [test] + mock_list + sources
      objects      = @file_path_utils.form_test_build_objects_filelist( [runner] + core + extras ).uniq
      results_pass = @file_path_utils.form_pass_results_filepath( test )
      results_fail = @file_path_utils.form_fail_results_filepath( test )

      # identify all the objects shall not be linked and then remove them from objects list.
      no_link_objects = @file_path_utils.form_test_build_objects_filelist(@preprocessinator.preprocess_shallow_source_includes( test ))
      objects = objects.uniq - no_link_objects

      @project_config_manager.process_test_defines_change(@project_config_manager.filter_internal_sources(sources))

      # clean results files so we have a missing file with which to kick off rake's dependency rules
      @test_invoker_helper.clean_results( {:pass => results_pass, :fail => results_fail}, options )

      # load up auxiliary dependencies so deep changes cause rebuilding appropriately
      @test_invoker_helper.process_deep_dependencies( core ) do |dependencies_list|
        @dependinator.load_test_object_deep_dependencies( dependencies_list )
      end

      # tell rake to create test runner if needed
      @task_invoker.invoke_test_runner( runner )

      # enhance object file dependencies to capture externalities influencing regeneration
      @dependinator.enhance_test_build_object_dependencies( objects )

      # associate object files with executable
      @dependinator.enhance_test_executable_dependencies( test, objects )

      # build test objects
      @task_invoker.invoke_test_objects( objects )

      # if the option build_only has been specified, build only the executable
      # but don't run the test
      if (options[:build_only])
        executable = @file_path_utils.form_test_executable_filepath( test )
        @task_invoker.invoke_test_executable( executable )
      else
        # 3, 2, 1... launch
        @task_invoker.invoke_test_results( results_pass )
      end
    rescue => e
      @build_invoker_utils.process_exception( e, context )
    ensure
      @plugin_manager.post_test( test )
      # restore the project test defines
      if @configurator.project_config_hash.has_key?(def_test_key.to_sym) || @configurator.defines_use_test_definition
        COLLECTION_DEFINES_TEST_AND_VENDOR.replace(defs_bkp)
        if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
          @configurator.project_config_hash[:project_test_build_output_path] = orig_path
          @streaminator.stdout_puts("Restored defines and build path to standard", Verbosity::NORMAL)
        end
      end
    end

    # store away what's been processed
    @mocks.concat( mock_list )
    @sources.concat( sources )

    @task_invoker.first_run = false
  end

  # post-process collected mock list
  @mocks.uniq!

  # post-process collected sources list
  @sources.uniq!
end