Giter Site home page Giter Site logo

throwtheswitch / ceedling Goto Github PK

View Code? Open in Web Editor NEW
558.0 558.0 237.0 7.78 MB

Ruby-based unit testing and build system for C projects

Home Page: http://throwtheswitch.org

License: Other

Ruby 97.53% C 1.22% HTML 1.23% Shell 0.01% Batchfile 0.01%
build-tool c mocking unit-testing

ceedling's People

Contributors

a-schlicht avatar art-of-dom avatar aschlicht avatar austinbes avatar barneywilliams avatar canton7 avatar carlolars avatar cezarygapinski avatar dpostorivo avatar germouse12 avatar jetm avatar jvranish avatar korigod avatar laurensmiers avatar lukzeg avatar luze-mobica avatar mchernosky avatar mkarlesky avatar mrredkite avatar mvandervoord avatar ntdv avatar pjunger avatar pmembrey avatar rmja avatar serjche avatar sw17ch avatar tbates-redarc avatar tobyjwebb avatar yanma avatar zanedp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ceedling's Issues

Ruby for Windows Does Not Include PTY

Ceedling seems to support running tests via invoking Ceedling rather than calling rake directly. However, Windows does not have an implementation for PTY included with Ruby (using V1.9.3 atm). A Google search shows that rubysl-pty (v1.0.0 for Ruby V1.9.3) may be a workaround, but Ruby informs me this gem is dependent on the Ruby Dev Kit, yet another frustrating step.

Calling rake to run tests still works, but with the changeover in documentation, this could cause issues with new users on Windows systems.

current and parent directories fail in single-line path specs in .yml

(I don't think this is the same as #55)

This works:

:paths:
  :test: 
    - .

This doesn't:

:paths:
    :test: .

Same thing with ".." or any other path containing them.

The full error is:

rake aborted!
NoMethodError: undefined method `flatten' for ".":String
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:327:in `eval_path_list'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `block in eval_paths'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `each_pair'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `eval_paths'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/setupinator.rb:28:in `do_setup'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/rakefile.rb:46:in `<top (required)>'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling.rb:66:in `load'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling.rb:66:in `load_project'
<snip>/test/ceedling/rakefile.rb:3:in `<top (required)>'
(See full trace by running task with --trace)

Ceedling chokes on bad stdout data: "ArgumentError: invalid byte sequence in UTF-8"

If the tests output bad utf8 data, the shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN line will choke.

Not sure what the proper fix is, but I think either scrubbing stdout to remove bad byte sequences, or at least a more indicative error would be helpful.

I have a patch, but I can't seem to make a change to the repo without git trying to replace the line endings of every single file. Very confused.

Anyway:

In generator_helper.rb

sanitized_output = shell_result[:output].dup
sanitized_output.scrub!

and a similar change to unity_shell_result[:output] in generator_test_results.rb

Original error:

rake aborted!
ArgumentError: invalid byte sequence in UTF-8
/src/vendor/ceedling/lib/ceedling/generator_helper.rb:21:in `=~'
/src/vendor/ceedling/lib/ceedling/generator_helper.rb:21:in `test_results_error_handler'
/src/vendor/ceedling/lib/ceedling/generator.rb:153:in `generate_test_results'
/src/vendor/ceedling/lib/ceedling/rules_tests.rake:42:in `block in <top (required)>'
/src/vendor/ceedling/lib/ceedling/task_invoker.rb:74:in `invoke_test_results'
/src/vendor/ceedling/lib/ceedling/test_invoker.rb:68:in `block in setup_and_invoke'
/src/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `each'
/src/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `setup_and_invoke'
/src/vendor/ceedling/lib/ceedling/rules_tests.rake:57:in `block (2 levels) in <top (required)>'

YAML alias usage is brittle

I don't know if this is Ceedling's or the YAML library's problem.

YAML allows usage of aliases: define something at one point, and then refer to it later in the same file:

:flags:
  :test:
    :common: &common_flags
      - -g      
    :compile:
      :*:
        - *common_flags
        - -Wall 
    :link:
      :*:
        - *common_flags
        - -L/opt/local/lib/

This works, and I think is quite useful. But:

  • if the :common: section happens to be empty, the rest of sections (:compile: and :link : ) seem to get ignored.
    This can be mitigated by adding an empty item:
:flags:
  :test:
    :common: &common_flags
      -
    :compile:
      ...
  • However, if an empty item appears at any position in the :common: list, all of the :common: items get ignored

So, both problems together mean that every time you change an item in the list you should check that the list stays either with ONLY an empty item, OR with some item and NO empty items. Which is prone to error if you tend to selectively comment out things in an existing long list of flags.

If this is some bug in Ceedling's handling of the output of the YAML parser, then it would be nice to have it fixed.
However, if this is rather a bug in the YAML parser, then sorry for the noise :)

XML Report Tags

The xml_test_report.rb plugin had a change in commit c14904f on May 7, 2011. This changed the failed tests output so that the open and close tags for each test no longer match.

Was this intentional? Is there a parser that makes sense of this? I saw no comment in that commit as to why it was changed.

Defines should be hash instead of array

Hi, I've poked around in the sourcecode to see how easy it would be to change defines from an array to a hash.

Reason to do this is:

  • Yaml has a <<: merge option with hashes, instead og the array in arrays it is now (if you try to make a common list)
  • Defines should be unique, you can easily (by accident) merge to arrays, where the same define has to values. If we changed to hash, it would be easy to update a define.
:defines:
  :common: &common_defines
    :DEBUG:
    :HZ: 20
    :COMP: "( A > B )"
    :FILE: '\"hed.h\"'
  :release:
    <<: *common_defines

-DDEBUG -DHZ=20 -DCOMP="( A > B)" -DFILE=\"hed.h\"

I would love to do the work, but I would also love to have some feedback, before i commit to much time to it.

Paths config doesn't handle "./"

:paths:
  :test:
    - +:test/**
    - -:esp/test/support
  :source:
    - +:./

Complains with "ERROR: Config path [:paths][:source][''] does not exist on disk."

I moved project.yml into my main source directory (to keep everything in source control). It seems like the file path standardization doesn't handle "./" very well.

FilePathUtils.standardize seems to be the culprit

ceedling command throws LoadError on Windows

This was addressed in #76 but still doesn't work. On Windows we get the following:

$ ceedling
c:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:120:in `require': cannot load such file
 -- pty (LoadError)
        from c:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:120:in `require'
        from c:/Ruby22/lib/ruby/gems/2.2.0/gems/ceedling-0.20.3/bin/ceedling:151:in `<top (required)>'
        from c:/Ruby22/bin/ceedling:22:in `load'
        from c:/Ruby22/bin/ceedling:22:in `<main>'

This is because the rescue is looking for a StandardError. When I change lines 167 and 183 to this:

  rescue LoadError

Then the rescue statements work, but even with popen4 (0.1.2) installed, the following error still occurs:

$ ceedling
c:/Ruby22/lib/ruby/gems/2.2.0/gems/ceedling-0.20.3/bin/ceedling:184:in `rescue in rescue in <top (required)>':
 Could Not Find PTY or POPEN4 gem. Install one or both like 'gem install pty' (RuntimeError)
        from c:/Ruby22/lib/ruby/gems/2.2.0/gems/ceedling-0.20.3/bin/ceedling:169:in `rescue in <top (required)
>'
        from c:/Ruby22/lib/ruby/gems/2.2.0/gems/ceedling-0.20.3/bin/ceedling:150:in `<top (required)>'
        from c:/Ruby22/bin/ceedling:22:in `load'
        from c:/Ruby22/bin/ceedling:22:in `<main>'

A "to-do" list for new Ceedling developers

I have a couple of ideas about what I would like to improve in Ceedling, but I don't know whether those are things that would be accepted by the official developers, or whether I could scratch my particular itch while also indirectly advancing some larger goal.
So some "to-do" list could be a great synchronization tool.

Parameterized tests with Ceedling

Hi,

I have started using Ceedling for a few weeks and I found in the Unity documentation that it was possible to use parametrized tests which I think is an awesome feature. However, I have had a hard time making it work!

According my analysis of the ruby scripts the generator.rb will call the generate_test_runner method which calls two methods from Ceedling generator_test_runner.rb: find_test_cases and then generate. The generate method will create a UnityTestRunnerGenerator instance and then call the generate method of the UnityTestRunnerGenerator module. The problem is that this generate method takes as argument the output of the generator_test_runner.rb find_test_cases method which is pretty different from the UnityTestRunnerGenerator find_tests method which is thus never called and is the one dealing with the TEST_CASE macro parsing. Therefore parametrized tests are impossible to run with Ceedling as far as I understand, which is a shame as it is a cool feature.

What I don't understand is why the Ceedling generator_test_runner.rb find_test_cases method and the UnityTestRunnerGenerator find_tests method are so different.
I did a small modification that made it work and perhaps you might be interested in it:
In Ceedling generator_test_runner.rb:
def find_test_cases(test_file)
require 'generate_test_runner.rb'
@test_runner_generator ||= UnityTestRunnerGenerator.new( @configurator.get_runner_config )
return @test_runner_generator.find_tests(@file_wrapper.read(test_file))
end

I am quite new to Ruby, so I hope this can be an input for enabling this feature on Ceedling :) (or it is already possible to make it work in an easier way and I have missed something :( ).

Best regards,
Matthieu Tardivon

Does the gcov plugin need a maintainer?

I'm opening this here since there's not a lot of action on the ceedling-gcov repo -- hopefully this isn't beating a dead horse too much.

In any case, the gcov plugin has been broken for a while, and in general has seen very little maintenance. I've been using it for a while (with a local patch for the current issue), and I have a vested interested in seeing it maintained -- code coverage is pretty important for my testing workflow.

I'd be willing to take on its maintenance, and to add a couple of features that I'd like to use (namely, the generation of output files so one can see which lines aren't getting coverage in a file).

Full disclosure, I'm primarily a C developer, and have only recently started learning Ruby in earnest. With that said, I'm very keen to get involved in the Ceedling project, since I've found it about the best embedded-C unit-testing project out there.

generator_test_result.rb not working properly in linux

Hi,

I set up here ceedling + unity to use with microchip on linux. The issue is due the function (line 30)

raw_unity_lines = output_string.split(/\n|\r\n/)

doesn't work properly (I'm not sure, but I think we should search for \r (linux) or \r\n (windows). I changed it for

raw_unity_lines = output_string.split(/\r|\r\n/)

I now it's working.

Thank you

A test function dying causes the loss of previous results

...
Linking test_TBuffer.out...
Running test_TBuffer.out...
sh: line 1: 58227 Segmentation fault: 11  ../../../build/test/out/test_TBuffer.out 2>&1

ERROR: Test executable "test_TBuffer.out" failed.
> Produced no output to $stdout.
> And exited with status: [139] (count of failed tests).
> This is often a symptom of a bad memory access in source or test code.

rake aborted!

/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/generator_helper.rb:36:in `test_results_error_handler'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/generator.rb:153:in `generate_test_results'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/rules_tests.rake:42:in `block in <top (required)>'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/task_invoker.rb:74:in `invoke_test_results'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/test_invoker.rb:68:in `block in setup_and_invoke'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/test_invoker.rb:32:in `setup_and_invoke'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/tasks_tests.rake:8:in `block (2 levels) in <top (required)>'
Tasks: TOP => ../../../build/test/results/test_TBuffer.pass
(See full trace by running task with --trace)

--------------------
OVERALL TEST SUMMARY
--------------------

No tests executed.

At the point of failure, 5 tests had already run (I know because the test function failing is the last one I added). No results are gathered, and no hint appears on what test function has failed.
Furthermore, the Test Summary is wrong.

printf in 2nd+ tests causes failure of test count sanity check

Make a new project with ceedling new, then create a new test module containing more than one test routine. In any routine other than the first, put a printf either in the test fixture or the code under test. Sanity check will fail because the test count will not match.

Example test code:

#include <stdio.h>
#include "unity.h"


void setUp(void)
{

}

void tearDown(void)
{

}

void test_a(void)
{

}

// Move this before test_a or remove the printf and ceedling doesn't fail its sanity check.
void test_b(void)
{
   printf("hello\n");
}

Error message:

Test 'test_ceedling_error.c'
----------------------------
Generating runner for test_ceedling_error.c...
Compiling test_ceedling_error_runner.c...
Compiling test_ceedling_error.c...
Compiling unity.c...
Compiling cmock.c...
Linking test_ceedling_error.out...
Running test_ceedling_error.out...

ERROR: Internal sanity check for test fixture 'test_ceedling_error.out' finds that Unity's final test count (2) does not match Ceedling's summation of all test cases (1).
  Possible causes:
    1. Your test + source dereferenced a null pointer.
    2. Your test + source indexed past the end of a buffer.
    3. Your test + source committed a memory access violation.
    4. Your test fixture produced an exit code of 0 despite execution ending prematurely.
  Sanity check failures of test results are usually a symptom of interrupted test execution.

rake aborted!

.../ceedling_error/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb:60:in `sanity_check_warning'
.../ceedling_error/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb:41:in `verify'
.../ceedling_error/vendor/ceedling/lib/ceedling/generator_test_results.rb:49:in `process_and_write_results'
.../ceedling_error/vendor/ceedling/lib/ceedling/generator.rb:153:in `generate_test_results'
.../ceedling_error/vendor/ceedling/lib/ceedling/rules_tests.rake:41:in `block in <top (required)>'

.../ceedling_error/vendor/ceedling/lib/ceedling/task_invoker.rb:74:in `invoke_test_results'
.../ceedling_error/vendor/ceedling/lib/ceedling/test_invoker.rb:68:in `block in setup_and_invoke' .../ceedling_error/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `setup_and_invoke'
.../Code/ceedling_error/vendor/ceedling/lib/ceedling/tasks_tests.rake:8:in `block (2 levels) in <top (required)>'
Tasks: TOP => build/test/results/test_ceedling_error.pass
(See full trace by running task with --trace)

--------------------
OVERALL TEST SUMMARY
--------------------

No tests executed.

It looks like the stdout from the 2nd test's output is getting squished up next to the "PASS" string from Unity when ceedling is trying to interpret result in generator.rb::Generator.generate_test_results, as seen below when I inspect shell_result:

shell result => {:output=>"\ntest_printf.c:15:test_a:PASShello\n\ntest_printf.c:21:test_b:PASS\n-----------------------\n2 Tests 0 Failures 0 Ignored\nOK\n", :exit_code=>0}

I've seen the same behavior on Mac OS X and mingw32. Here's my mingw32 version info:

$ gem list

*** LOCAL GEMS ***

bigdecimal (1.1.0)
ceedling (0.15.5, 0.15.4)
io-console (0.3)
json (1.5.5)
minitest (2.5.1)
rake (10.3.2)
rdoc (3.9.5)
thor (0.19.1)

$ ruby --version
ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

Conditionally set tools depending on host OS

Is there a way to conditionally set up the tools block so that when, for example, I'm on Windows, the tools are set up like below, and when on Linux OS, it just uses the defaults?

:tools:
  :test_compiler:
    :executable: /MinGW/bin/gcc.exe
  :test_linker:
    :executable:  /MinGW/bin/gcc.exe
  :test_file_preprocessor:
    :executable:  /MinGW/bin/gcc.exe
  :test_includes_preprocessor:
    :executable:  /MinGW/bin/cpp.exe
  :test_dependencies_generator:
    :executable:  /MinGW/bin/gcc.exe

Mock rule matches headers with mock prefix in filepath

With a project.yml including:

:cmock:
  :mock_prefix: mock_

and a header file residing in src/mock_something/foo.h

Ceedling will choke because the rake pattern for mock headers (/#{CMOCK_MOCK_PREFIX}.+#{'\\'+EXTENSION_SOURCE}$/, in lib/ceedling/rules_cmock.rb) matches the full file path.

This is admittedly something of a corner case, but one which Ceedling probably ought still to handle.

Would be nice if Ceedling said where it is having problems digesting the .yml

In the error

rake aborted!
NoMethodError: undefined method `flatten' for ".":String
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:327:in `eval_path_list'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `block in eval_paths'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `each_pair'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/configurator.rb:217:in `eval_paths'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/setupinator.rb:28:in `do_setup'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling/rakefile.rb:46:in `<top (required)>'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling.rb:66:in `load'
/Users/mija/.gem/ruby/2.0.0/gems/ceedling-0.20.3/lib/ceedling.rb:66:in `load_project'
<snip>/test/ceedling/rakefile.rb:3:in `<top (required)>'
(See full trace by running task with --trace)

It would be good if Ceedling said that the problem was found while parsing such-and-such variable, or the line in the yml file if possible.
Note that --trace doesn't help.

Parsing Ceedling Errors in Eclipse

Hello guys!

I'm trying to run my unit test directly from Eclipse.
I succesfully followed the following tutorial: http://throwtheswitch.squarespace.com/white-papers/using-eclipse-ide.html

It's great. I just need to double click on the target to run the tests and I can see the results on the Eclipse console.

What I'm trying to achive now is for Eclipse to understand the errors and warnings output by Ceedling/Unit and display them accordingly in the "Problems" tab.

I tried enabling the stdout_ide_tests_report plugin on my project.yml, but that didn't help.

Anyone knows how to perform this? I hope to keep using the default Eclipse error parser, cause I use this same project to run Lint.

Thank you.

:project:build_root ignores ..

This is accepted in the .yml:

:project:
  :build_root: 
    - ../../../../build

However, ceedling only looks for build in the current directory.

Git tags matching gem version numbers

Would be nice to have tags in the git repository matching the version numbers of the Ceedling gem - to know when/why to update, how in sync is the documentation, etc.

Ceedling can't find .c file if #include in test suite contains path

This is a bit of an odd problem, and took a little tracking down.

If I have a test which begins like this (where "utils/source/library.c" exists, and the include path contains "utils/", "utils/source" and "utils/headers":

#include "unity.h"
#include "file_being_tested.h"
#include "utils/headers/library.h"

Ceedling will find and include "utils/library.h", but will not attempt to compile "utils/source/library.c". This will cause linking to fail.

If, however, the test begins like this:

#include "unity.h"
#include "file_being_tested.h"
#include "library.h"

Ceedling compiles "utils/source/library.c" as expected.

Do you have any idea why this might be? I had a quick dig through the code, and got the impression that Ceedling wasn't even attempting to find "library.c", but didn't get any further than that.

"bundle execute rake" in README.md doesn't work

The README says to run this command:

bundle execute rake # Run all CMock library tests

However, I get this error message when I do it on my system:

Could not find command "execute".

I don't know what the command should be instead.

It may also be useful to mention that Ruby should be in your PATH and the bundle gem installed.

Add support for running only a subset of tests in a test file

Might require some work with ThrowTheSwitch/Unity as well.

We should add some support for disabling tests (such as 'xit' from rspec) or selecting only a specific subset to run (like rspec's ability to run tests found on a specific line).

Suggested syntax for command line:

rake test:test_foo.c[80] # run the test on line 80
rake test:test_foo.c[80,200] # run test found from line 80 to line 200

rake test:test_foo.c[*somePattern*] # run all tests with names matching pattern

Suggested syntax for tests:

// Don't run tests that have a 'disable_' or 'x_' prefix in the name.
// Examples:
//   void disable_[prefix]_testName(void);
//   void x_[prefix]_testName(void);

// This test would run
void test_someName(void)
{
   // ...
}

// This test would not run
void x_test_someOtherName(void)
{
  // ...
}

// Neither would this one
void disable_test_someOtherName(void)
{
  // ...
}

:flags: seem to not be passed correctly

I am using Ceedling with MingGW GCC and I would like to tell GCC to use c99. Since gcc is already the default, I did not add any :tools: section. So according to the documentation I added a :flags: section in my project.yml:

:flags:
  :test:
    :compile:
      :*:
        - -std=c99

But I still get the GCC errors telling me I am not using c99 and running rake test:all --trace reveals that the flags are not being appended to the commandline.

Build tests with rake without running the test_fixture

Hi,
We are currently using Ceedling with unity tests on real hardware. When running the test with rake test:all it works fine, we got the test running and collecting the tests by writing a wrapper and calling that wrapper from the :test_fixture: part of project.yml. The wrapper uploads the firmware to the hardware and collects the text output from the tests.

Is there a way to run the build of collected tests without running the :test_fixture: part of the project.yml?

When debugging tests in the debugger with single stepping and so on, I would like to build the .out-files automatically, but manually loading the into the target with our debugger software. How could I do that without making a custom :test_fixture: for this usecase?

Is there a way to select different :test_fixture: section in the project.yml-file based on environment variables or rake switches?

Ceedling is broken after updating OSX to Mavricks

Installed the temp_sensor example.
Run rake release
FAIL.

I think it has to do with an update to LLVM. It kinda seems like it's trying to use the systems std include dirs even though we're passing the argument '-nostdinc' to the compiler. Haven't found a solution yet. Any ideas?

Here is the output:

DrSheldon:temp_sensor_new jordanschaenzle$ rake test:all

Test 'TestAdcConductor.c'

In file included from build/temp/_TestAdcConductor.c:5:
In file included from src/Types.h:4:
In file included from /usr/include/math.h:31:
In file included from /usr/include/Availability.h:148:
/usr/include/AvailabilityInternal.h:4098:10: error: #else without #if
#else
^
/usr/include/AvailabilityInternal.h:4158:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6
^
/usr/include/AvailabilityInternal.h:4131:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5
^
/usr/include/AvailabilityInternal.h:4108:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4
^
4 errors generated.
ERROR: Shell command failed.

Shell executed command:
'cpp -MM -MG -I"test" -I"test/support" -I"src" -DTEST -DTEST -DGNU_PREPROCESSOR -w -nostdinc "build/temp/_TestAdcConductor.c"'
Produced output:
_TestAdcConductor.o: build/temp/_TestAdcConductor.c unity.h @@@@unity.h
test/support/UnityHelper.h @@@@UnityHelper.h src/Types.h @@@@Types.h
src/AdcConductor.h @@@@AdcConductor.h MockAdcModel.h
@@@@MockAdcModel.h MockAdcHardware.h @@@@MockAdcHardware.h
And exited with status: [1].

rake aborted!
ShellExecutionException
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/tool_executor.rb:71:in exec' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_includes_handler.rb:28:inform_shallow_dependencies_rule'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:31:in preprocess_shallow_includes' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:11:inblock in setup'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_helper.rb:11:in call' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_helper.rb:11:inpreprocess_includes'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:17:in preprocess_test_and_invoke_test_mocks' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/test_invoker.rb:42:inblock in setup_and_invoke'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/test_invoker.rb:32:in setup_and_invoke' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/tasks_tests.rake:8:inblock (2 levels) in <top (required)>'
Tasks: TOP => test:all
(See full trace by running task with --trace)

generator_test_results.rb fails with undefined method `join' for nil:NilClass

I get this error message when parsing a specific test output:

test_logger.c:27:test_logger_set_level_trace:PASS
test_logger.c:35:test_logger_write_trace:PASS
test_logger.c:40:test_logger_write_error:PASS
test_logger.c:68:test_logger_log:FAIL: Expected 'main.c' Was 'test/logger/test_logger.c'. Function 'term_put_text' called with unexpected value for argument 'text'.
-----------------------
4 Tests 1 Failures 0 Ignored
FAIL

The complete trace is:

** Invoke test:logger (first_time)
** Invoke test/logger/test_logger.c (first_time, not_needed)
** Execute test:logger
** Invoke directories (first_time)
** Invoke build/test/mocks (first_time, not_needed)
** Invoke build/artifacts (first_time, not_needed)
** Invoke build/test (first_time, not_needed)
** Invoke build/release (first_time, not_needed)
** Invoke build/artifacts/test (first_time, not_needed)
** Invoke build/test/runners (first_time, not_needed)
** Invoke build/test/results (first_time, not_needed)
** Invoke build/test/out (first_time, not_needed)
** Invoke build/test/cache (first_time, not_needed)
** Invoke build/test/dependencies (first_time, not_needed)
** Invoke build/artifacts/release (first_time, not_needed)
** Invoke build/release/cache (first_time, not_needed)
** Invoke build/release/out (first_time, not_needed)
** Invoke build/release/out/asm (first_time, not_needed)
** Invoke build/release/out/c (first_time, not_needed)
** Invoke build/release/dependencies (first_time, not_needed)
** Invoke build/logs (first_time, not_needed)
** Invoke build/temp (first_time, not_needed)
** Invoke build/test/preprocess/includes (first_time, not_needed)
** Invoke build/test/preprocess/files (first_time, not_needed)
** Execute directories


Test 'test_logger.c'
--------------------
** Invoke build/test/preprocess/includes/tmr.h (first_time, not_needed)
** Invoke src/misc/tmr.h (first_time, not_needed)
** Invoke build/test/preprocess/includes/terminal.h (first_time, not_needed)
** Invoke src/terminal/terminal.h (first_time, not_needed)
** Invoke build/test/mocks/mock_tmr.c (first_time, not_needed)
** Invoke build/test/cache/tmr.h (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/cmock/release/build.info (first_time, not_needed)
** Invoke build/test/mocks/mock_terminal.c (first_time, not_needed)
** Invoke build/test/cache/terminal.h (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/cmock/release/build.info (not_needed)
** Invoke build/test/preprocess/includes/test_logger.c (first_time, not_needed)
** Invoke test/logger/test_logger.c (not_needed)
** Invoke build/test/runners/test_logger_runner.c (first_time, not_needed)
** Invoke build/test/cache/test_logger.c (first_time, not_needed)
** Invoke build/test/results/test_logger.pass (first_time)
** Invoke build/test/out/test_logger.out (first_time)
** Invoke build/test/out/test_logger_runner.o (first_time, not_needed)
** Invoke build/test/runners/test_logger_runner.c (not_needed)
** Invoke build/test/out/test_logger.o (first_time, not_needed)
** Invoke test/logger/test_logger.c (not_needed)
** Invoke build/test/out/mock_tmr.o (first_time, not_needed)
** Invoke build/test/mocks/mock_tmr.c (not_needed)
** Invoke build/test/out/mock_terminal.o (first_time, not_needed)
** Invoke build/test/mocks/mock_terminal.c (not_needed)
** Invoke build/test/out/unity.o (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/unity/src/unity.c (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/unity/src/unity.h (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/unity/src/unity_internals.h (first_time, not_needed)
** Invoke build/test/out/logger.o (first_time, not_needed)
** Invoke src/logger/logger.c (first_time, not_needed)
** Invoke build/test/out/cmock.o (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/cmock/src/cmock.c (first_time, not_needed)
** Invoke /Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/vendor/cmock/src/cmock.h (first_time, not_needed)
** Execute build/test/out/test_logger.out
Linking test_logger.out...
** Execute build/test/results/test_logger.pass
Running test_logger.out...
Picked up JAVA_TOOL_OPTIONS: -Djava.awt.headless=true
rake aborted!
undefined method `join' for nil:NilClass
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/generator_test_results.rb:83:in `extract_line_elements'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/generator_test_results.rb:41:in `block in process_and_write_results'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/generator_test_results.rb:29:in `lines'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/generator_test_results.rb:29:in `process_and_write_results'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/generator.rb:154:in `generate_test_results'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/rules_tests.rake:41:in `block in <top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:226:in `call'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:226:in `block in execute'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:223:in `each'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:223:in `execute'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:166:in `block in invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:159:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:152:in `invoke'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/task_invoker.rb:74:in `invoke_test_results'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/test_invoker.rb:68:in `block in setup_and_invoke'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `each'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `setup_and_invoke'
/Users/willem/Dropbox/Development/stage/smartline/vendor/ceedling/lib/ceedling/rules_tests.rake:56:in `block (2 levels) in <top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:226:in `call'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:226:in `block in execute'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:223:in `each'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:223:in `execute'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:166:in `block in invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:159:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/task.rb:152:in `invoke'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:143:in `invoke_task'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:101:in `block (2 levels) in top_level'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:101:in `each'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:101:in `block in top_level'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:110:in `run_with_threads'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:95:in `top_level'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:73:in `block in run'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:160:in `standard_exception_handling'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/application.rb:70:in `run'
/usr/bin/rake:37:in `<main>'
Tasks: TOP => build/test/results/test_logger.pass

--------------------
OVERALL TEST SUMMARY
--------------------

No tests executed.

Ceedling 0.15.6 Fails When Path Contains Space(s)

I updated from version 0.13.0, which was working fine, to 0.15.6. I am using Mingw32 under Windows. I did the following in a path containing a space (c:/Project Xtreme/):

> ceedling new PcControl
> cd PcControl
> rake module:create[Dummy]
> rake test:all

The last command dumped the following error:

Test 'test_Dummy.c'
-------------------
gcc.exe: error: Xtreme/PcControl/vendor/ceedling/vendor/unity/src: No such file
or directory
gcc.exe: error: Xtreme/PcControl/vendor/ceedling/vendor/cmock/src: No such file
or directory
ERROR: Shell command failed.
> Shell executed command:
'gcc.exe -E -MM -MG -Itest -Itest/support -Isrc -Ic:/Project Xtreme/PcControl/ve
ndor/ceedling/vendor/unity/src -Ic:/Project Xtreme/PcControl/vendor/ceedling/ven
dor/cmock/src -Ibuild/test/mocks -DTEST -DTEST -DGNU_COMPILER -w "build/temp/_te
st_Dummy.c"'
> And exited with status: [1].

rake aborted!
ShellExecutionException
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/tool_executor.rb:74:in
`exec'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator_includ
es_handler.rb:39:in `form_shallow_dependencies_rule'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator.rb:31:
in `preprocess_shallow_includes'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator.rb:11:
in `block in setup'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator_helper
.rb:11:in `call'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator_helper
.rb:11:in `preprocess_includes'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/preprocessinator.rb:17:
in `preprocess_test_and_invoke_test_mocks'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/test_invoker.rb:42:in `
block in setup_and_invoke'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/test_invoker.rb:32:in `
setup_and_invoke'
c:/Project Xtreme/PcControl/vendor/ceedling/lib/ceedling/tasks_tests.rake:8:in `
block (2 levels) in <top (required)>'
Tasks: TOP => test:all
(See full trace by running task with --trace)

--------------------
OVERALL TEST SUMMARY
--------------------

No tests executed.

I works fine with path without space, though.

Problem with Bullseye plugin

I enabled Ceedling's Bullseye plugin and I ran:

rake bullseye:all

It emits a warning:

WARNING: Depreciated plugin style used in bullseye. Use new directory structure!

and an error:

ERROR: Tool 'bullseye_linker' cannot expand nonexistent value 'PLUGINS_BULLSEYE_LIB_PATH' for substitution string '-L$'.
rake aborted!

I grepped through the source and found that the only reference to PLUGINS_BULLSEYE_LIB_PATH is in plugins/bullseye/defaults.yml. How is the constant supposed to get defined?

From reading the forums, it looked like ThrowTheSwitch was using Bullseye for code coverage analysis. Have you generated any documentation on how to use Bullseye with Ceedling? The Ceedling documentation says to look at the readme.txt file in the Bullseye directory but it is empty.

BTW, note that your warning message has deprecated incorrectly spelled.

rake module:destroy doesn't work

There is a small bug in the module creation framework, the message that the module is deleted is shown on stdout but the file isn't removed. The command File.delete(file[:path]) after line 67 in the file module_generator.rb solves this issue.

When building a release artifact, is it possible to replicate source tree below release/out?

When building a release, Ceedling puts all of my object files into a single folder, regardless of where they came from under my source folder. I'd like the object files to be in a tree that matches the source folder tree.

I think I could do this if I could manipulate the ${1} parameter when defining [:tools:][:release_compiler:][:arguments:], and use it to generate the object file path to match the source file path.

I haven't quite figured out how use ${1} as an argument in some Ruby-ish text manipulation. Is this possible?

Preprocessor issue for target hardware build

Hi,
I am trying to get Ceedling/Unity tests to work on Cortex M4 hardware. The “use_test_preprocessor” was set to True in project.yml file. I got the following error without adding “test_includes_preprocessor” and “test_file_preprocessor” to the project.yml file. It looks like IAR predefined macros such as IAR_SYSTEM_ICC are not defined using gcc for preprocessing (gcc by default if “test_file_preprocessor” is not configured). “test_compiler” and “test_linker” were configured to IAR compiler/linker (iccarm/ilinkarm)

image

Do I have to configure “test_includes_preprocessor” and “test_file_preprocessor” for target build?

I got a different error of ‘cannot open source file “@@@@unity.h”’ if “test_includes_preprocessor” and “test_file_preprocessor” were configured. The unity.h is included in the test file and is located on one of the searched path. Why was the file name changed to @@@@unity.h? Is this a temporary file of unity.h?

image

It could be I didn’t configure “test_includes_preprocessor” and “test_file_preprocessor” correctly as follows:
:test_includes_preprocessor:
:executable: iccarm
:arguments:
- -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
- -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE
- -D$: COLLECTION_DEFINES_TEST_AND_VENDOR
- -D$: DEFINES_TEST_PREPROCESS
- -DUNITY_EXCLUDE_STDINT_H
- '"${1}"'
:test_file_preprocessor:
:executable: iccarm
:arguments:
- -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
- -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE
- -D$: COLLECTION_DEFINES_TEST_AND_VENDOR
- -D$: DEFINES_TEST_PREPROCESS
- -DUNITY_EXCLUDE_STDINT_H
- '"${1}"'
- -o "${2}"

I hope someone can point me to the right direction. Any input is greatly appreciated!

use_deep_dependencies should generate dependencies on change

I found a bug when using use_deep_dependencies.

  1. tools.c includes tool.h
  2. compile (generates and compiles)
  3. change tool.h to include deep.h
  4. compile (compiles due to change in tool.h, but does not generate new dependency for deep.h)
  5. change whatever in deep.h
  6. compile (noting happens, as tool.c does not depend on deep.h in the old tools.d file)

Wrong order of dependencies generator arguments

Hi Guys,

the documentation says:

release_dependencies_generator:
Discovers deep dependencies of source files (for incremental builds)
${1}: input source file
${2}: compiled object filepath
${3}: output dependencies file

But during linking with my custom tools configuration, my linker said unknown format.
I checked generator.rb @ line 31:

  def generate_dependencies_file(tool, context, source, object, dependencies)
    @streaminator.stdout_puts("Generating dependencies for #{File.basename(source)}...", Verbosity::NORMAL)

    command = 
      @tool_executor.build_command_line(
        tool,
        source,
        dependencies,
        object)

    @tool_executor.exec( command[:line], command[:options] )
  end

Seems like ${2} is the dependencies file and ${3} object file.
I tried it that way, and it worked.

Greetings,
Edgar

Ceedling is broken after updating OSX to Mavricks

Installed the temp_sensor example.
Run rake release
FAIL.

I think it has to do with an update to LLVM. It kinda seems like it's trying to use the systems std include dirs even though we're passing the argument '-nostdinc' to the compiler. Haven't found a solution yet. Any ideas?

Here is the output:

DrSheldon:temp_sensor_new jordanschaenzle$ rake test:all

Test 'TestAdcConductor.c'

In file included from build/temp/_TestAdcConductor.c:5:
In file included from src/Types.h:4:
In file included from /usr/include/math.h:31:
In file included from /usr/include/Availability.h:148:
/usr/include/AvailabilityInternal.h:4098:10: error: #else without #if
#else
^
/usr/include/AvailabilityInternal.h:4158:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6
^
/usr/include/AvailabilityInternal.h:4131:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5
^
/usr/include/AvailabilityInternal.h:4108:10: error: unterminated conditional directive
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4
^
4 errors generated.
ERROR: Shell command failed.

Shell executed command:
'cpp -MM -MG -I"test" -I"test/support" -I"src" -DTEST -DTEST -DGNU_PREPROCESSOR -w -nostdinc "build/temp/_TestAdcConductor.c"'
Produced output:
_TestAdcConductor.o: build/temp/_TestAdcConductor.c unity.h @@@@unity.h
test/support/UnityHelper.h @@@@UnityHelper.h src/Types.h @@@@Types.h
src/AdcConductor.h @@@@AdcConductor.h MockAdcModel.h
@@@@MockAdcModel.h MockAdcHardware.h @@@@MockAdcHardware.h
And exited with status: [1].

rake aborted!
ShellExecutionException
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/tool_executor.rb:71:in exec' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_includes_handler.rb:28:inform_shallow_dependencies_rule'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:31:in preprocess_shallow_includes' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:11:inblock in setup'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_helper.rb:11:in call' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator_helper.rb:11:inpreprocess_includes'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/preprocessinator.rb:17:in preprocess_test_and_invoke_test_mocks' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/test_invoker.rb:42:inblock in setup_and_invoke'
/Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/test_invoker.rb:32:in setup_and_invoke' /Users/jordanschaenzle/Dropbox/Projects/DemoProjects/temp_sensor_new/vendor/ceedling/lib/tasks_tests.rake:8:inblock (2 levels) in <top (required)>'
Tasks: TOP => test:all
(See full trace by running task with --trace)

Sharing code between tests

By design, Ceedling only processes files included directly from within a test_...c file. These files are annotated with @@@@ by a preprocessor rule and then included.

However, this makes sharing code between tests impossible. In my case for example, I would like to include a custom mock in multiple tests.
A solution to this would be to preprocess and include any file residing in

:paths:
  :test:
    - test/test/**

, and apply the rule mentioned above to files in :source:.

Any ideas on how to achieve this?

I've modified preprocessinator_includes_handler.rb::extract_shallow_includes(make_rule) to include headers both annotated with @@@@ and beginning with mock_, but this doesn't cut the mustard.

Running All tests (twice) gives different set of results

I am running 'all' tests within a folder using the following command: rake test:path[object_properties_default]

When tests are completed, the 'Overall Unit Test Summary' displays:
Tested: 328
Passed: 285
Failed: 7
Ignored: 36

But if I rerun the tests the summary is:
Tested: 129
Passed: 105
Failed: 7
Ignored: 17

I need to run rake clean in order to run all the tests again. Why is this? I would expect every test to be repeatable without necessitating a clean.

Any help appreciated.
Regards,
Paul

Failed compilation runs outdated test runner

Once you go through a full Ceedling run (compilation + test run), if a test subsequently fails to compile, Ceedling will still run the now-outdated test binary - and so will report test results as if nothing had happened.

So, to be sure that the tests that get run are actually the existing tests, clobber is pretty much mandatory.

I'd suggest that if an error is detected on compilation, at the very least some noise should be made, and maybe trigger a clobber if it is not possible to specificaly remove the now-outdated test.

How to add CWD as source path?

How does one go about adding all paths under the CWD as a source path? It's not that there are source files in the CWD, but rather that #include paths are specified relative to the CWD.

I've tried:

:path:
  :source:
    - ./**
    - **
    - . # -I"." gets specified, but no paths under the CWD

Thanks!

Ruby string substitution does not occur for project.yml

The docs claim that Ceedling will evaluate and substitute #{...} in values in project.yml. However, no such substitution appears to be occurring.

In lib/configurator.rb, the method eval_environment_variables is declared. This appears to do roughly what is needed, EXCEPT for the fact that it applies only to :environment, and not to any other keys (I need substitution in :tools).

Is this something which should be fixed? I'm happy to supply a patch.

Thanks

Test-specific definition

Hello. Ceedling is awesome project and we use this system everyday.
I appreciate all of your hard effort :)

By the way, we did a customize to specify test-specific definition to compile the test.
Though it was tentatively realized by following pull-request but I think it is a kind of dirty hack.

TE-HiroakiYamazoe#2

I also wrote what we want to do in the comment of the pull-request.
Does anyone have an idea to make it possible properly?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.