ceedling 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/bin/ceedling CHANGED
@@ -12,9 +12,15 @@ class CeedlingTasks < Thor
12
12
  end
13
13
 
14
14
  desc "new PROJECT_NAME", "create a new ceedling project"
15
+ method_option :nodocs, :type => :boolean, :default => false, :desc => "No docs in vendor directory"
15
16
  def new(name)
16
17
  directory Ceedling::NEW_PROJECT_DIR, name
17
- puts "Execute 'rake test:delta' to run your tests"
18
+ remove_dir "#{name}/vendor/ceedling/docs" if options[:nodocs]
19
+ puts "\n"
20
+ puts "Project '#{name}' created!"
21
+ puts " - Tool documentation is located in vendor/ceedling/docs" if not options[:nodocs]
22
+ puts " - Execute 'rake -T' to view available test & build tasks"
23
+ puts ''
18
24
  end
19
25
 
20
26
  desc "update DIRECTORY", "update the vendor/ceedling directory under the given project root"
@@ -45,8 +51,10 @@ class CeedlingTasks < Thor
45
51
  remove_file "#{dest}/rakefile.rb"
46
52
  directory "examples/#{proj_name}", dest
47
53
  puts "\n"
48
- puts "Example project creation successful"
49
- puts "Execute 'rake test:delta' to run your tests"
54
+ puts "Example project '#{proj_name}' created!"
55
+ puts " - Tool documentation is located in vendor/ceedling/docs"
56
+ puts " - Execute 'rake -T' to view available test & build tasks"
57
+ puts ''
50
58
  end
51
59
 
52
60
  desc "version", "print all ceedling gem and library versions"
@@ -2,10 +2,10 @@
2
2
  module Ceedling
3
3
  module Version
4
4
  # @private
5
- GEM = "0.0.13"
5
+ GEM = "0.0.14"
6
6
 
7
7
  # @private
8
- CEEDLING = "0.9.196"
8
+ CEEDLING = "0.9.200"
9
9
  # @private
10
10
  CEXCEPTION = "1.2.17"
11
11
  # @private
@@ -2,7 +2,7 @@
2
2
  module Ceedling
3
3
  module Version
4
4
  # @private
5
- GEM = "0.0.13"
5
+ GEM = "0.0.14"
6
6
 
7
7
  # @private
8
8
  CEEDLING = "<%= versions["CEEDLING"] %>"
@@ -188,8 +188,8 @@ class ConfiguratorBuilder
188
188
 
189
189
  return {
190
190
  # tempted to make a helper method in file_path_utils? stop right there, pal. you'll introduce a cyclical dependency
191
- :project_release_build_target => File.join(in_hash[:project_release_artifacts_path], release_target_file),
192
- :project_release_build_map => File.join(in_hash[:project_release_artifacts_path], release_map_file)
191
+ :project_release_build_target => File.join(in_hash[:project_build_release_root], release_target_file),
192
+ :project_release_build_map => File.join(in_hash[:project_build_release_root], release_map_file)
193
193
  }
194
194
  end
195
195
 
@@ -32,9 +32,13 @@ class Generator
32
32
  arg_hash = {:header_file => header_filepath, :context => context}
33
33
  @plugin_manager.pre_mock_execute(arg_hash)
34
34
 
35
- @cmock_builder.cmock.setup_mocks( arg_hash[:header_file] )
36
-
37
- @plugin_manager.post_mock_execute(arg_hash)
35
+ begin
36
+ @cmock_builder.cmock.setup_mocks( arg_hash[:header_file] )
37
+ rescue
38
+ raise
39
+ ensure
40
+ @plugin_manager.post_mock_execute(arg_hash)
41
+ end
38
42
  end
39
43
 
40
44
  # test_filepath may be either preprocessed test file or original test file
@@ -50,21 +54,32 @@ class Generator
50
54
  @streaminator.stdout_puts("Generating runner for #{module_name}...", Verbosity::NORMAL)
51
55
 
52
56
  # build runner file
53
- @generator_test_runner.generate(module_name, runner_filepath, test_cases, mock_list)
54
-
55
- @plugin_manager.post_runner_execute(arg_hash)
57
+ begin
58
+ @generator_test_runner.generate(module_name, runner_filepath, test_cases, mock_list)
59
+ rescue
60
+ raise
61
+ ensure
62
+ @plugin_manager.post_runner_execute(arg_hash)
63
+ end
56
64
  end
57
65
 
58
66
  def generate_object_file(tool, context, source, object, list='')
67
+ shell_result = {}
59
68
  arg_hash = {:tool => tool, :context => context, :source => source, :object => object, :list => list}
60
69
  @plugin_manager.pre_compile_execute(arg_hash)
61
70
 
62
71
  @streaminator.stdout_puts("Compiling #{File.basename(arg_hash[:source])}...", Verbosity::NORMAL)
63
- command = @tool_executor.build_command_line(arg_hash[:tool], arg_hash[:source], arg_hash[:object], arg_hash[:list])
64
- shell_result = @tool_executor.exec( command[:line], command[:options] )
72
+ command = @tool_executor.build_command_line(arg_hash[:tool], arg_hash[:source], arg_hash[:object], arg_hash[:list])
65
73
 
66
- arg_hash[:shell_result] = shell_result
67
- @plugin_manager.post_compile_execute(arg_hash)
74
+ begin
75
+ shell_result = @tool_executor.exec( command[:line], command[:options] )
76
+ rescue ShellExecutionException => ex
77
+ shell_result = ex.shell_result
78
+ raise ''
79
+ ensure
80
+ arg_hash[:shell_result] = shell_result
81
+ @plugin_manager.post_compile_execute(arg_hash)
82
+ end
68
83
  end
69
84
 
70
85
  def generate_executable_file(tool, context, objects, executable, map='')
@@ -73,11 +88,11 @@ class Generator
73
88
  @plugin_manager.pre_link_execute(arg_hash)
74
89
 
75
90
  @streaminator.stdout_puts("Linking #{File.basename(arg_hash[:executable])}...", Verbosity::NORMAL)
91
+ command = @tool_executor.build_command_line(arg_hash[:tool], arg_hash[:objects], arg_hash[:executable], arg_hash[:map])
76
92
 
77
93
  begin
78
- command = @tool_executor.build_command_line(arg_hash[:tool], arg_hash[:objects], arg_hash[:executable], arg_hash[:map])
79
94
  shell_result = @tool_executor.exec( command[:line], command[:options] )
80
- rescue
95
+ rescue ShellExecutionException => ex
81
96
  notice = "\n" +
82
97
  "NOTICE: If the linker reports missing symbols, the following may be to blame:\n" +
83
98
  " 1. Test lacks #include statements corresponding to needed source files.\n" +
@@ -88,13 +103,14 @@ class Generator
88
103
  else
89
104
  notice += "\n"
90
105
  end
91
-
106
+
92
107
  @streaminator.stderr_puts(notice, Verbosity::COMPLAIN)
93
- raise
108
+ shell_result = ex.shell_result
109
+ raise ''
110
+ ensure
111
+ arg_hash[:shell_result] = shell_result
112
+ @plugin_manager.post_link_execute(arg_hash)
94
113
  end
95
-
96
- arg_hash[:shell_result] = shell_result
97
- @plugin_manager.post_link_execute(arg_hash)
98
114
  end
99
115
 
100
116
  def generate_test_results(tool, context, executable, result)
@@ -6,7 +6,7 @@ class ReleaseInvoker
6
6
  constructor :configurator, :release_invoker_helper, :build_invoker_helper, :dependinator, :task_invoker, :file_path_utils, :file_wrapper
7
7
 
8
8
 
9
- def setup_and_invoke_c_objects(c_files)
9
+ def setup_and_invoke_c_objects( c_files )
10
10
  objects = @file_path_utils.form_release_build_c_objects_filelist( c_files )
11
11
 
12
12
  begin
@@ -22,7 +22,7 @@ class ReleaseInvoker
22
22
  end
23
23
 
24
24
 
25
- def setup_and_invoke_asm_objects(asm_files)
25
+ def setup_and_invoke_asm_objects( asm_files )
26
26
  objects = @file_path_utils.form_release_build_asm_objects_filelist( asm_files )
27
27
 
28
28
  begin
@@ -48,4 +48,11 @@ class ReleaseInvoker
48
48
  @configurator.collection_all_source ) )
49
49
  end
50
50
 
51
+
52
+ def artifactinate( *files )
53
+ files.each do |file|
54
+ @file_wrapper.cp( file, @configurator.project_release_artifacts_path ) if @file_wrapper.exist?( file)
55
+ end
56
+ end
57
+
51
58
  end
@@ -33,12 +33,14 @@ end
33
33
 
34
34
 
35
35
  rule(/#{PROJECT_RELEASE_BUILD_TARGET}/) do |bin_file|
36
+ map_file = @ceedling[:configurator].project_release_build_map
36
37
  @ceedling[:generator].generate_executable_file(
37
38
  TOOLS_RELEASE_LINKER,
38
39
  RELEASE_SYM,
39
40
  bin_file.prerequisites,
40
41
  bin_file.name,
41
- @ceedling[:configurator].project_release_build_map)
42
+ map_file )
43
+ @ceedling[:release_invoker].artifactinate( bin_file.name, map_file )
42
44
  end
43
45
 
44
46
 
@@ -8,6 +8,7 @@ CLEAN.clear_exclude.exclude { |fn| fn.pathmap("%f") == 'core' && File.directory?
8
8
  CLEAN.include(File.join(PROJECT_TEST_BUILD_OUTPUT_PATH, '*'))
9
9
  CLEAN.include(File.join(PROJECT_TEST_RESULTS_PATH, '*'))
10
10
  CLEAN.include(File.join(PROJECT_TEST_DEPENDENCIES_PATH, '*'))
11
+ CLEAN.include(File.join(PROJECT_BUILD_RELEASE_ROOT, '*.*'))
11
12
  CLEAN.include(File.join(PROJECT_RELEASE_BUILD_OUTPUT_PATH, '*'))
12
13
  CLEAN.include(File.join(PROJECT_RELEASE_DEPENDENCIES_PATH, '*'))
13
14
 
@@ -1,5 +1,11 @@
1
1
  require 'constants'
2
2
 
3
+ class ShellExecutionException < RuntimeError
4
+ attr_reader :shell_result
5
+ def initialize(shell_result)
6
+ @shell_result = shell_result
7
+ end
8
+ end
3
9
 
4
10
  class ToolExecutor
5
11
 
@@ -62,7 +68,7 @@ class ToolExecutor
62
68
  @tool_executor_helper.print_error_results( command_line, shell_result, options[:boom] )
63
69
 
64
70
  # go boom if exit code isn't 0 (but in some cases we don't want a non-0 exit code to raise)
65
- raise if ((shell_result[:exit_code] != 0) and options[:boom])
71
+ raise ShellExecutionException.new(shell_result) if ((shell_result[:exit_code] != 0) and options[:boom])
66
72
 
67
73
  return shell_result
68
74
  end
@@ -78,6 +78,7 @@ class Bullseye < Plugin
78
78
  end
79
79
 
80
80
  # coverage results
81
+ return if (verify_coverage_file() == false)
81
82
  if (@ceedling[:task_invoker].invoked?(/^#{BULLSEYE_TASK_ROOT}(all|delta)/))
82
83
  command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVSRC)
83
84
  shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options])
@@ -88,6 +89,7 @@ class Bullseye < Plugin
88
89
  end
89
90
 
90
91
  def summary
92
+ return if (verify_coverage_file() == false)
91
93
  result_list = @ceedling[:file_path_utils].form_pass_results_filelist( BULLSEYE_RESULTS_PATH, COLLECTION_ALL_TESTS )
92
94
 
93
95
  # test results
@@ -149,8 +151,20 @@ class Bullseye < Plugin
149
151
  end
150
152
  end
151
153
 
154
+ def verify_coverage_file
155
+ exist = @ceedling[:file_wrapper].exist?( ENVIRONMENT_COVFILE )
156
+
157
+ if (!exist)
158
+ banner = @ceedling[:plugin_reportinator].generate_banner "#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY"
159
+ @ceedling[:streaminator].stdout_puts "\n" + banner + "\nNo coverage file.\n\n"
160
+ end
161
+
162
+ return exist
163
+ end
164
+
152
165
  end
153
166
 
167
+
154
168
  # end blocks always executed following rake run
155
169
  END {
156
170
  # cache our input configurations to use in comparison upon next execution
@@ -1,7 +1,7 @@
1
1
  % function_string = hash[:coverage][:functions].to_s
2
2
  % branch_string = hash[:coverage][:branches].to_s
3
3
  % format_string = "%#{[function_string.length, branch_string.length].max}i"
4
- <%=@ceedling[:plugin_reportinator].generate_banner("#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY")%>
4
+ <%=@ceedling[:plugin_reportinator].generate_banner("#{hash[:header]}: CODE COVERAGE SUMMARY")%>
5
5
  % if (!hash[:coverage][:functions].nil?)
6
6
  FUNCTIONS: <%=sprintf(format_string, hash[:coverage][:functions])%>%
7
7
  % else
@@ -4,24 +4,28 @@ require 'constants'
4
4
  class XmlTestsReport < Plugin
5
5
 
6
6
  def setup
7
- @file_path = File.join( PROJECT_TEST_ARTIFACTS_PATH, 'report.xml' )
8
- @results_list = []
9
- @test_counter = 1
7
+ @results_list = {}
8
+ @test_counter = 0
10
9
  end
11
10
 
12
11
  def post_test_execute(arg_hash)
13
- return if not (arg_hash[:context] == TEST_SYM)
12
+ context = arg_hash[:context]
14
13
 
15
- @results_list << arg_hash[:result_file]
14
+ @results_list[context] = [] if (@results_list[context].nil?)
15
+
16
+ @results_list[context] << arg_hash[:result_file]
16
17
  end
17
18
 
18
19
  def post_build
19
- return if (not @ceedling[:task_invoker].test_invoked?)
20
-
21
- results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list)
20
+ @results_list.each_key do |context|
21
+ results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list[context])
22
+
23
+ file_path = File.join( PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s, 'report.xml' )
22
24
 
23
- @ceedling[:file_wrapper].open( @file_path, 'w' ) do |f|
24
- write_results( results, f )
25
+ @ceedling[:file_wrapper].open( file_path, 'w' ) do |f|
26
+ @test_counter = 1
27
+ write_results( results, f )
28
+ end
25
29
  end
26
30
  end
27
31
 
@@ -1 +1 @@
1
- 196
1
+ 200
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ceedling
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 13
10
- version: 0.0.13
9
+ - 14
10
+ version: 0.0.14
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mike Karlesky, Mark VanderVoord
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-05-15 00:00:00 -04:00
20
+ date: 2011-05-28 00:00:00 -04:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency