ceedling 0.29.0 → 0.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/assets/project_as_gem.yml +2 -5
- data/assets/project_with_guts.yml +2 -5
- data/assets/project_with_guts_gcov.yml +2 -5
- data/bin/ceedling +14 -12
- data/ceedling.sublime-project +26 -23
- data/docs/CeedlingPacket.md +17 -2
- data/docs/CeedlingUpgrade.md +83 -0
- data/lib/ceedling/build_invoker_utils.rb +1 -1
- data/lib/ceedling/cacheinator_helper.rb +2 -2
- data/lib/ceedling/dependinator.rb +2 -2
- data/lib/ceedling/generator_test_results.rb +13 -2
- data/lib/ceedling/tasks_base.rake +17 -23
- data/lib/ceedling/tasks_filesystem.rake +12 -3
- data/lib/ceedling/tasks_tests.rake +1 -1
- data/lib/ceedling/test_invoker.rb +1 -1
- data/lib/ceedling/version.rb +28 -14
- data/plugins/gcov/gcov.rake +3 -3
- data/plugins/junit_tests_report/lib/junit_tests_report.rb +4 -3
- data/spec/spec_system_helper.rb +42 -2
- data/spec/support/test_example.fail +2 -0
- data/spec/support/test_example.pass +2 -0
- data/spec/support/test_example_ignore.pass +2 -0
- data/spec/support/test_example_mangled.pass +1 -0
- data/spec/support/test_example_with_time.pass +2 -0
- data/spec/system/deployment_spec.rb +6 -0
- data/vendor/cmock/docs/CMock_Summary.md +8 -1
- data/vendor/cmock/lib/cmock_config.rb +11 -1
- data/vendor/cmock/lib/cmock_generator.rb +7 -0
- data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +2 -2
- data/vendor/cmock/lib/cmock_header_parser.rb +123 -13
- data/vendor/cmock/src/cmock.h +1 -1
- data/vendor/cmock/test/system/test_compilation/config.yml +1 -0
- data/vendor/cmock/test/system/test_compilation/inline.h +23 -0
- data/vendor/cmock/test/system/test_interactions/all_plugins_coexist.yml +1 -0
- data/vendor/cmock/test/unit/cmock_config_test.rb +3 -0
- data/vendor/cmock/test/unit/cmock_config_test.yml +2 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +3 -0
- data/vendor/cmock/test/unit/cmock_generator_plugin_callback_test.rb +4 -4
- data/vendor/cmock/test/unit/cmock_header_parser_test.rb +272 -0
- metadata +4 -3
- data/out.fail +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57518fcd5eccaf61d4bf5b6953233e73bd09043d749c0c17e14bde86a448908c
|
4
|
+
data.tar.gz: ebb08f8cb40fc19ac1808fb5d5670e6323beaf8415681a97c9e0dc0ab37265b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fc75ecfbd7c086f807fade3847511fc4208102a14ed4d3dd5a7be3302388bf6ac1be38eedcb87ff6c74654979bb9c30750c442a6ee20969209c156b6faabb7c
|
7
|
+
data.tar.gz: c00944a53e45f50e1cf7daca6400f428dce69456c7db3d29092e3641ff577c3aaefc23c347ad5174f88d2766276d3599d11494424c6fe491cd87a72971668e4c
|
data/assets/project_as_gem.yml
CHANGED
data/bin/ceedling
CHANGED
@@ -49,16 +49,16 @@ unless (project_found)
|
|
49
49
|
end
|
50
50
|
|
51
51
|
desc "upgrade PROJECT_NAME", "upgrade ceedling for a project (not req'd if gem used)"
|
52
|
-
method_option :docs, :type => :boolean, :default => false, :desc => "Add docs in project vendor directory"
|
53
|
-
method_option :local, :type => :boolean, :default => false, :desc => "Create a copy of Ceedling in the project vendor directory"
|
54
|
-
method_option :no_configs, :type => :boolean, :default => false, :desc => "Don't install starter configuration files"
|
55
|
-
method_option :noconfigs, :type => :boolean, :default => false
|
56
|
-
|
57
|
-
#deprecated:
|
58
|
-
method_option :no_docs, :type => :boolean, :default => false
|
59
|
-
method_option :nodocs, :type => :boolean, :default => false
|
60
52
|
def upgrade(name, silent = false)
|
61
|
-
|
53
|
+
as_local = true
|
54
|
+
begin
|
55
|
+
require "yaml"
|
56
|
+
as_local = (YAML.load_file(File.join(name, "project.yml"))[:project][:which_ceedling] != 'gem')
|
57
|
+
rescue
|
58
|
+
raise "ERROR: Could not find valid project file '#{yaml_path}'"
|
59
|
+
end
|
60
|
+
found_docs = File.exists?( File.join(name, "docs", "CeedlingPacket.md") )
|
61
|
+
copy_assets_and_create_structure(name, silent, true, {:upgrade => true, :no_configs => true, :local => as_local, :docs => found_docs})
|
62
62
|
end
|
63
63
|
|
64
64
|
no_commands do
|
@@ -207,9 +207,9 @@ unless (project_found)
|
|
207
207
|
desc "version", "return the version of the tools installed"
|
208
208
|
def version()
|
209
209
|
require 'ceedling/version.rb'
|
210
|
-
puts "
|
211
|
-
puts "
|
212
|
-
puts "
|
210
|
+
puts " Ceedling:: #{Ceedling::Version::CEEDLING}"
|
211
|
+
puts " CMock:: #{Ceedling::Version::CMOCK}"
|
212
|
+
puts " Unity:: #{Ceedling::Version::UNITY}"
|
213
213
|
puts " CException:: #{Ceedling::Version::CEXCEPTION}"
|
214
214
|
end
|
215
215
|
end
|
@@ -287,6 +287,8 @@ else
|
|
287
287
|
options[:list_tasks] = true
|
288
288
|
when /^-T$/
|
289
289
|
options[:list_tasks] = true
|
290
|
+
when /^--tasks$/
|
291
|
+
options[:list_tasks] = true
|
290
292
|
when /^project:(\w+)/
|
291
293
|
ENV['CEEDLING_USER_PROJECT_FILE'] = "#{$1}.yml"
|
292
294
|
else
|
data/ceedling.sublime-project
CHANGED
@@ -1,25 +1,28 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
2
|
+
"folders":
|
3
|
+
[
|
4
|
+
{
|
5
|
+
"file_exclude_patterns":
|
6
|
+
[
|
7
|
+
".*",
|
8
|
+
"*.sublime*"
|
9
|
+
],
|
10
|
+
"folder_exclude_patterns":
|
11
|
+
[
|
12
|
+
"backup",
|
13
|
+
"build"
|
14
|
+
],
|
15
|
+
"path": "C:\\projects"
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"path": "C:\\Ruby25-x64\\lib\\ruby\\gems\\2.5.0\\gems\\ceedling-0.29.0"
|
19
|
+
}
|
20
|
+
],
|
21
|
+
"settings":
|
22
|
+
{
|
23
|
+
"tab_size": 4,
|
24
|
+
"translate_tabs_to_spaces": true,
|
25
|
+
"use_tab_stops": false,
|
26
|
+
"word_wrap": false
|
27
|
+
}
|
25
28
|
}
|
data/docs/CeedlingPacket.md
CHANGED
@@ -259,7 +259,7 @@ Ceedling (more on this later).
|
|
259
259
|
* `ceedling environment`:
|
260
260
|
|
261
261
|
List all configured environment variable names and string values. This
|
262
|
-
task is helpful in verifying the
|
262
|
+
task is helpful in verifying the evaluation of any Ruby expressions in
|
263
263
|
the [:environment] section of your config file.`: Note: Ceedling may
|
264
264
|
set some convenience environment variables by default.
|
265
265
|
|
@@ -1414,6 +1414,21 @@ Example [:flags] YAML blurb
|
|
1414
1414
|
- --baz
|
1415
1415
|
```
|
1416
1416
|
|
1417
|
+
**import**: allow to load other config files
|
1418
|
+
|
1419
|
+
In some cases it is nice to have config files (project.yml, options files) which can
|
1420
|
+
load other config files, for commonly re-used definitions (target processor,
|
1421
|
+
common code modules, etc).
|
1422
|
+
These can be recursively nested, the included files can include other files.
|
1423
|
+
|
1424
|
+
Example [:import] YAML blurb
|
1425
|
+
|
1426
|
+
```yaml
|
1427
|
+
:import:
|
1428
|
+
- path/to/config.yml
|
1429
|
+
- path/to/another/config.yml
|
1430
|
+
```
|
1431
|
+
|
1417
1432
|
Ceedling sets values for a subset of CMock settings. All CMock
|
1418
1433
|
options are available to be set, but only those options set by
|
1419
1434
|
Ceedling in an automated fashion are documented below. See CMock
|
@@ -1876,7 +1891,7 @@ Notes:
|
|
1876
1891
|
* `COLLECTION_DEFINES_RELEASE_AND_VENDOR`:
|
1877
1892
|
|
1878
1893
|
All symbols specified in [:defines][:release] plus symbols defined by
|
1879
|
-
[:cexception][:defines] if exceptions are
|
1894
|
+
[:cexception][:defines] if exceptions are enabled
|
1880
1895
|
|
1881
1896
|
|
1882
1897
|
Notes:
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Upgrading Ceedling
|
2
|
+
|
3
|
+
You'd like to stay in sync with the latest Ceedling... and who wouldn't? Depending on
|
4
|
+
how you've made use of Ceedling, that may vary slightly. No matter what, though, our first
|
5
|
+
step is to update Ceedling itself.
|
6
|
+
|
7
|
+
## Step 1: Update Ceedling Itself
|
8
|
+
|
9
|
+
```
|
10
|
+
gem update ceedling
|
11
|
+
```
|
12
|
+
|
13
|
+
That should do it... unless you don't have a valid connection to the internet. In that case,
|
14
|
+
you might have to download the gem from rubygems.org and then install it manually:
|
15
|
+
|
16
|
+
```
|
17
|
+
gem update ceedling --local=ceedling-filename.zip
|
18
|
+
```
|
19
|
+
|
20
|
+
## Step 2: Udpate Projects Using Ceedling
|
21
|
+
|
22
|
+
When you set up your project(s), it was either configured to use the gem directly, or it was
|
23
|
+
configured to install itself locally (often into a vendor directory).
|
24
|
+
|
25
|
+
For projects that are of the first type, congratulations, you're finished. The project will
|
26
|
+
automatically use the new ceedling. There MAY be things that need to be tweaked if features have
|
27
|
+
moved significantly. (And we apologize if that's your situation... as we get to version 1, we're
|
28
|
+
going to have a stronger focus on backwards compatibility). If your project isn't working perfectly,
|
29
|
+
skip down to Step 3.
|
30
|
+
|
31
|
+
If the project was installed to have a copy of ceedling locally, you have a choice. You may
|
32
|
+
choose to continue to run THIS project on the old version of Ceedling. Often this is the
|
33
|
+
preferred method for legacy projects which only get occasional focus. Why go through the effort
|
34
|
+
of updating for new tools if it's serving its purpose and you're unlikely to actually use the new
|
35
|
+
features?
|
36
|
+
|
37
|
+
The other choice, of course, is to update it. To do so, we open a command prompt and address ceedling
|
38
|
+
from *outside* the project. For example, let's say we have the following structure:
|
39
|
+
|
40
|
+
- projects
|
41
|
+
- myproject
|
42
|
+
- project.yml
|
43
|
+
- src
|
44
|
+
- tgt
|
45
|
+
- vendor
|
46
|
+
|
47
|
+
In this case, we'd want to be in the `projects` directory. At that point, we can ask Ceedling to
|
48
|
+
update our project.
|
49
|
+
|
50
|
+
```
|
51
|
+
ceedling upgrade myproject
|
52
|
+
```
|
53
|
+
|
54
|
+
Ceedling will automatically look for your project yaml file and do its best to determine what needs
|
55
|
+
to be updated. If installed locally, this will mean copying the latest copy of Unity, CMock, and
|
56
|
+
Ceedling. It will also involve copying documentation, if you had that installed.
|
57
|
+
|
58
|
+
## Step 3: Solving Problems
|
59
|
+
|
60
|
+
We wish every project would update seamlessly... unfortunately there is a lot of customization that
|
61
|
+
goes into each project, and Ceedling often isn't aware of all of these. To make matter worse, Ceedling
|
62
|
+
has been in pre-release for awhile, meaning it occasionally has significant changes that may break
|
63
|
+
current installations. We've tried to capture the common ones here:
|
64
|
+
|
65
|
+
### rakefile
|
66
|
+
|
67
|
+
Ceedling is built in a utility called Rake. In the past, rake was the method that the user actually
|
68
|
+
interacted with Ceedling. That's no longer the case. Using a modern version of Ceedling means that
|
69
|
+
you issue commands like `ceedling test:all` instead of `rake test:all`. If you have a continuous
|
70
|
+
integration server or other calling service, it may need to be updated to comply.
|
71
|
+
|
72
|
+
Similarly, older versions of Ceedling actually placed a rakefile in the project directory, allowing
|
73
|
+
the project to customize its own flow. For the most part this went unused and better ways were later
|
74
|
+
introduced. At this point, the `rakefile` is more trouble than its worth and often should just be
|
75
|
+
removed.
|
76
|
+
|
77
|
+
### plugins
|
78
|
+
|
79
|
+
If you have custom plugins installed to your project, the plugin architecture has gone through some
|
80
|
+
revisions and it may or may not be compatible at this time. Again, this is a problem which should
|
81
|
+
not exist soon.
|
82
|
+
|
83
|
+
|
@@ -9,7 +9,7 @@ class BuildInvokerUtils
|
|
9
9
|
##
|
10
10
|
# Processes exceptions and tries to display a useful message for the user.
|
11
11
|
#
|
12
|
-
# ====
|
12
|
+
# ==== Attributes
|
13
13
|
#
|
14
14
|
# * _exception_: The exception given by a rescue statement.
|
15
15
|
# * _context_: A symbol representing where in the build the exception
|
@@ -4,8 +4,8 @@ class CacheinatorHelper
|
|
4
4
|
constructor :file_wrapper, :yaml_wrapper
|
5
5
|
|
6
6
|
def diff_cached_config?(cached_filepath, hash)
|
7
|
-
return
|
8
|
-
return true if (
|
7
|
+
return false if ( not @file_wrapper.exist?(cached_filepath) )
|
8
|
+
return true if (@yaml_wrapper.load(cached_filepath) != hash)
|
9
9
|
return false
|
10
10
|
end
|
11
11
|
|
@@ -91,8 +91,8 @@ class Dependinator
|
|
91
91
|
end
|
92
92
|
|
93
93
|
|
94
|
-
def
|
95
|
-
@rake_wrapper
|
94
|
+
def enhance_test_executable_dependencies(test, objects)
|
95
|
+
@rake_wrapper[ @file_path_utils.form_test_executable_filepath(test) ].enhance( objects )
|
96
96
|
end
|
97
97
|
|
98
98
|
end
|
@@ -37,6 +37,10 @@ class GeneratorTestResults
|
|
37
37
|
elements = extract_line_elements(line, results[:source][:file])
|
38
38
|
results[:successes] << elements[0]
|
39
39
|
results[:stdout] << elements[1] if (!elements[1].nil?)
|
40
|
+
when /(:PASS \(.* ms\)$)/
|
41
|
+
elements = extract_line_elements(line, results[:source][:file])
|
42
|
+
results[:successes] << elements[0]
|
43
|
+
results[:stdout] << elements[1] if (!elements[1].nil?)
|
40
44
|
when /(:FAIL)/
|
41
45
|
elements = extract_line_elements(line, results[:source][:file])
|
42
46
|
results[:failures] << elements[0]
|
@@ -73,6 +77,7 @@ class GeneratorTestResults
|
|
73
77
|
# handle anything preceding filename in line as extra output to be collected
|
74
78
|
stdout = nil
|
75
79
|
stdout_regex = /(.+)#{Regexp.escape(filename)}.+/i
|
80
|
+
unity_test_time = 0
|
76
81
|
|
77
82
|
if (line =~ stdout_regex)
|
78
83
|
stdout = $1.clone
|
@@ -82,8 +87,14 @@ class GeneratorTestResults
|
|
82
87
|
# collect up test results minus and extra output
|
83
88
|
elements = (line.strip.split(':'))[1..-1]
|
84
89
|
|
85
|
-
|
86
|
-
|
90
|
+
# find timestamp if available
|
91
|
+
if (elements[2] =~ / \((.*) ms\)/)
|
92
|
+
unity_test_time = $1.to_f / 1000
|
93
|
+
elements[2].sub!(/ \((.*) ms\)/, '')
|
94
|
+
end
|
95
|
+
|
96
|
+
return {:test => elements[1], :line => elements[0].to_i, :message => (elements[3..-1].join(':')).strip, :unity_test_time => unity_test_time}, stdout if elements.size >= 3
|
97
|
+
return {:test => '???', :line => -1, :message => nil, :unity_test_time => unity_test_time} #fallback safe option. TODO better handling
|
87
98
|
end
|
88
99
|
|
89
100
|
end
|
@@ -4,28 +4,10 @@ require 'ceedling/version'
|
|
4
4
|
|
5
5
|
desc "Display build environment version info."
|
6
6
|
task :version do
|
7
|
-
puts "
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
[' CMock', File.join( CEEDLING_VENDOR, CMOCK_ROOT_PATH)],
|
12
|
-
[' Unity', File.join( CEEDLING_VENDOR, UNITY_ROOT_PATH)],
|
13
|
-
].each do |tool|
|
14
|
-
name = tool[0]
|
15
|
-
base_path = tool[1]
|
16
|
-
|
17
|
-
version_string = begin
|
18
|
-
@ceedling[:file_wrapper].read( File.join(base_path, 'release', 'version.info') ).strip
|
19
|
-
rescue
|
20
|
-
"UNKNOWN"
|
21
|
-
end
|
22
|
-
build_string = begin
|
23
|
-
@ceedling[:file_wrapper].read( File.join(base_path, 'release', 'build.info') ).strip
|
24
|
-
rescue
|
25
|
-
"UNKNOWN"
|
26
|
-
end
|
27
|
-
puts "#{name}:: #{version_string.empty? ? '#.#.' : (version_string + '.')}#{build_string.empty? ? '?' : build_string}"
|
28
|
-
end
|
7
|
+
puts " Ceedling:: #{Ceedling::Version::CEEDLING}"
|
8
|
+
puts " Unity:: #{Ceedling::Version::UNITY}"
|
9
|
+
puts " CMock:: #{Ceedling::Version::CMOCK}"
|
10
|
+
puts " CException:: #{Ceedling::Version::CEXCEPTION}"
|
29
11
|
end
|
30
12
|
|
31
13
|
desc "Set verbose output (silent:[#{Verbosity::SILENT}] - obnoxious:[#{Verbosity::OBNOXIOUS}])."
|
@@ -65,6 +47,12 @@ task :sanity_checks, :level do |t, args|
|
|
65
47
|
@ceedling[:configurator].sanity_checks = check_level
|
66
48
|
end
|
67
49
|
|
50
|
+
# non advertised catch for calling upgrade in the wrong place
|
51
|
+
task :upgrade do
|
52
|
+
puts "WARNING: You're currently IN your project directory. Take a step out and try"
|
53
|
+
puts "again if you'd like to perform an upgrade."
|
54
|
+
end
|
55
|
+
|
68
56
|
# list expanded environment variables
|
69
57
|
if (not ENVIRONMENT.empty?)
|
70
58
|
desc "List all configured environment variables."
|
@@ -88,7 +76,7 @@ namespace :options do
|
|
88
76
|
option = File.basename(option_path, '.yml')
|
89
77
|
|
90
78
|
desc "Merge #{option} project options."
|
91
|
-
task option.
|
79
|
+
task option.to_sym do
|
92
80
|
hash = @ceedling[:project_config_manager].merge_options( @ceedling[:setupinator].config_hash, option_path )
|
93
81
|
@ceedling[:setupinator].do_setup( hash )
|
94
82
|
if @ceedling[:configurator].project_release_build
|
@@ -97,6 +85,12 @@ namespace :options do
|
|
97
85
|
end
|
98
86
|
end
|
99
87
|
|
88
|
+
# This is to give nice errors when typing options
|
89
|
+
rule /^options:.*/ do |t, args|
|
90
|
+
filename = t.to_s.split(':')[-1] + '.yml'
|
91
|
+
filelist = COLLECTION_PROJECT_OPTIONS.map{|s| File.basename(s) }
|
92
|
+
@ceedling[:file_finder].find_file_from_list(filename, filelist, :error)
|
93
|
+
end
|
100
94
|
end
|
101
95
|
|
102
96
|
|
@@ -45,16 +45,25 @@ task(:clobber => [:clean]) do
|
|
45
45
|
@ceedling[:streaminator].stdout_puts("\nClobbering all generated files...\n(For large projects, this task may take a long time to complete)\n\n")
|
46
46
|
begin
|
47
47
|
CLOBBER.each { |fn| REMOVE_FILE_PROC.call(fn) }
|
48
|
+
@ceedling[:rake_wrapper][:directories].invoke
|
49
|
+
@ceedling[:dependinator].touch_force_rebuild_files
|
48
50
|
rescue
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
52
|
-
|
54
|
+
# create a directory task for each of the paths, so we know how to build them
|
53
55
|
PROJECT_BUILD_PATHS.each { |path| directory(path) }
|
54
56
|
|
55
|
-
# create
|
56
|
-
task
|
57
|
+
# create a single directory task which verifies all the others get built
|
58
|
+
task :directories => PROJECT_BUILD_PATHS
|
57
59
|
|
60
|
+
# when the force file doesn't exist, it probably means we clobbered or are on a fresh
|
61
|
+
# install. In either case, stuff was deleted, so assume we want to rebuild it all
|
62
|
+
file @ceedling[:configurator].project_test_force_rebuild_filepath do
|
63
|
+
unless File.exists?(@ceedling[:configurator].project_test_force_rebuild_filepath)
|
64
|
+
@ceedling[:dependinator].touch_force_rebuild_files
|
65
|
+
end
|
66
|
+
end
|
58
67
|
|
59
68
|
# list paths discovered at load time
|
60
69
|
namespace :paths do
|
@@ -8,7 +8,7 @@ namespace TEST_SYM do
|
|
8
8
|
|
9
9
|
desc "Run all unit tests (also just 'test' works)."
|
10
10
|
task :all => [:directories] do
|
11
|
-
@ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS)
|
11
|
+
@ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, TEST_SYM, {:force_run => false})
|
12
12
|
end
|
13
13
|
|
14
14
|
desc "Run single test ([*] real test or source file name, no path)."
|