Updated to latest version of Unity.

Removed -Wno-duplicate-decl-specifier flag from all YAML files, since unsupported in some versions of gcc. Reimplemented ignore in specific files and generated code using a pragmas instead, which are setup to ignore undefined pragma values.
Added initial .travis.yml file for TravisCI builds.
This commit is contained in:
Greg Williams
2014-07-25 15:13:29 -04:00
parent f597ba92a9
commit be7be41580
16 changed files with 266 additions and 99 deletions
+2
View File
@@ -2,3 +2,5 @@ test/system/build
test/system/generated test/system/generated
*.sublime-project *.sublime-project
Gemfile.lock Gemfile.lock
.rake_t_cache
.DS_Store
+4 -2
View File
@@ -1,6 +1,8 @@
[submodule "vendor/unity"] [submodule "vendor/unity"]
path = vendor/unity path = vendor/unity
url = git://github.com/ThrowTheSwitch/Unity.git url = https://github.com/throwtheswitch/unity.git
branch = master
[submodule "vendor/c_exception"] [submodule "vendor/c_exception"]
path = vendor/c_exception path = vendor/c_exception
url = git://github.com/ThrowTheSwitch/CException.git url = https://github.com/throwtheswitch/cexception.git
branch = master
+8
View File
@@ -0,0 +1,8 @@
language: ruby
rvm:
- "1.9.3"
- "2.0.0"
install:
- bundle install
script:
- bundle exec ci
+20 -5
View File
@@ -1,10 +1,25 @@
Welcome to CMock. Welcome to CMock!
![](http://travis-ci.org/atomicobject/kinetic-c.png?branch=master)
[CMock build status](http://travis-ci.org/throwtheswitch/kinetic-c) is provided via [Travis CI](http://travis-ci.org)
Getting Started
================
> git clone --recursive https://github.com/throwtheswitch/cmock.git
> cd cmock
> bundle install # Ensures you have all RubyGems needed
> bundle execute rake # Run all CMock library tests
API Documentation
=================
* Not sure what you're doing? * Not sure what you're doing?
** The docs are in /docs ** [View docs/CMock_Summary.md](docs/CMock_Summary.md)
* Interested in our MIT-style license? * Interested in our MIT-style license?
** That's in /docs too ** [View docs/license.txt](docs/license.txt)
* Are there examples? * Are there examples?
** Try /examples ** They are all in [/examples](examples/)
* Any other resources to check out? * Any other resources to check out?
** Sure. How about ThrowTheSwitch.org ** Definitely! Check out our developer portal on [ThrowTheSwitch.org](http://throwtheswitch.org)
+112
View File
@@ -0,0 +1,112 @@
# ==============================================================================
# CMock Project - Automatic Mock Generation for C
# Copyright (c) 2007-2014 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details]
# ==============================================================================
require './config/test_environment'
require 'rake'
require 'rake/clean'
require 'rake/testtask'
require './rakefile_helper'
require 'rspec/core/rake_task'
include RakefileHelpers
DEFAULT_CONFIG_FILE = 'gcc.yml'
CMOCK_ROOT = File.expand_path(File.dirname(__FILE__))
SYSTEM_TEST_SUPPORT_DIRS = [
File.join(CMOCK_ROOT, 'test/system/generated'),
File.join(CMOCK_ROOT, 'test/system/build')
]
SYSTEM_TEST_SUPPORT_DIRS.each do |dir|
p dir
directory(dir)
CLOBBER.include(dir)
end
task :prep_system_tests => SYSTEM_TEST_SUPPORT_DIRS
configure_clean
configure_toolchain(DEFAULT_CONFIG_FILE)
task :default => ['test:all']
task :ci => [:no_color, :default]
task :cruise => :ci
desc "Load configuration"
task :config, :config_file do |t, args|
args = {:config_file => DEFAULT_CONFIG_FILE} if args[:config_file].nil?
args = {:config_file => args[:config_file] + '.yml'} unless args[:config_file] =~ /\.yml$/i
configure_toolchain(args[:config_file])
end
namespace :test do
desc "Run all unit and system tests"
task :all => [:clobber, :prep_system_tests, 'test:units', 'test:c', 'test:system']
desc "Run Unit Tests"
Rake::TestTask.new('units') do |t|
t.pattern = 'test/unit/*_test.rb'
t.verbose = true
end
#individual unit tests
FileList['test/unit/*_test.rb'].each do |test|
Rake::TestTask.new(File.basename(test,'.*')) do |t|
t.pattern = test
t.verbose = true
end
end
desc "Run C Unit Tests"
task :c => [:prep_system_tests] do
build_and_test_c_files
end
desc "Run System Tests"
task :system => [:clobber, :prep_system_tests] do
#get a list of all system tests, removing unsupported tests for this compiler
sys_unsupported = $cfg['unsupported'].map {|a| 'test/system/test_interactions/'+a+'.yml'}
sys_tests_to_run = FileList['test/system/test_interactions/*.yml'] - sys_unsupported
compile_unsupported = $cfg['unsupported'].map {|a| SYSTEST_COMPILE_MOCKABLES_PATH+a+'.h'}
compile_tests_to_run = FileList[SYSTEST_COMPILE_MOCKABLES_PATH + '*.h'] - compile_unsupported
unless (sys_unsupported.empty? and compile_unsupported.empty?)
report "\nIgnoring these system tests..."
sys_unsupported.each {|a| report a}
compile_unsupported.each {|a| report a}
end
report "\nRunning system tests..."
tests_failed = run_system_test_interactions(sys_tests_to_run)
raise "System tests failed." if (tests_failed > 0)
run_system_test_compilations(compile_tests_to_run)
end
#individual system tests
FileList['test/system/test_interactions/*.yml'].each do |test|
desc "Run system test #{File.basename(test,'.*')}"
task "test:#{File.basename(test,'.*')}" do
run_system_test_interactions([test])
end
end
desc "Profile Mock Generation"
task :profile => [:clobber, :prep_system_tests] do
run_system_test_profiles(FileList[SYSTEST_COMPILE_MOCKABLES_PATH + '*.h'])
end
end
task :no_color do
$colour_output = false
end
RSpec::Core::RakeTask.new(:spec) do |t|
spec_path = File.join(CMOCK_ROOT, 'test/spec')
t.pattern = spec_path + '/*_spec.rb'
end
+4
View File
@@ -74,6 +74,10 @@ class CMockGenerator
plugin_includes = @plugins.run(:include_files) plugin_includes = @plugins.run(:include_files)
file << plugin_includes if (!plugin_includes.empty?) file << plugin_includes if (!plugin_includes.empty?)
file << "\n" file << "\n"
file << "/* Ignore the following warnings, since we are copying code */\n"
file << "#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n"
file << "#pragma GCC diagnostic ignored \"-Wduplicate-decl-specifier\"\n"
file << "\n"
end end
def create_typedefs(file, typedefs) def create_typedefs(file, typedefs)
+3 -4
View File
@@ -1,8 +1,8 @@
# ========================================== # ==============================================================================
# CMock Project - Automatic Mock Generation for C # CMock Project - Automatic Mock Generation for C
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams # Copyright (c) 2007-2014 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details] # [Released under MIT License. Please refer to license.txt for details]
# ========================================== # ==============================================================================
require './config/test_environment' require './config/test_environment'
require 'rake' require 'rake'
@@ -23,7 +23,6 @@ SYSTEM_TEST_SUPPORT_DIRS = [
] ]
SYSTEM_TEST_SUPPORT_DIRS.each do |dir| SYSTEM_TEST_SUPPORT_DIRS.each do |dir|
p dir
directory(dir) directory(dir)
CLOBBER.include(dir) CLOBBER.include(dir)
end end
-1
View File
@@ -36,7 +36,6 @@ compiler:
- '-Wwrite-strings' - '-Wwrite-strings'
- '-Wbad-function-cast' - '-Wbad-function-cast'
- '-Wno-missing-prototypes' #we've been lazy about things like setUp and tearDown - '-Wno-missing-prototypes' #we've been lazy about things like setUp and tearDown
- '-Wno-duplicate-decl-specifier' #allows us to test things like "const char const *""
- '-fms-extensions' - '-fms-extensions'
- '-fno-omit-frame-pointer' - '-fno-omit-frame-pointer'
- '-ffloat-store' - '-ffloat-store'
-1
View File
@@ -10,7 +10,6 @@ compiler:
- '-Wall' - '-Wall'
- '-Wextra' - '-Wextra'
- '-Wunused-parameter' - '-Wunused-parameter'
- '-Wno-duplicate-decl-specifier'
- '-Wno-address' - '-Wno-address'
- '-std=c99' - '-std=c99'
- '-pedantic' - '-pedantic'
-1
View File
@@ -10,7 +10,6 @@ compiler:
- '-m64' - '-m64'
- '-Wall' - '-Wall'
- '-Wunused-parameter' - '-Wunused-parameter'
- '-Wno-duplicate-decl-specifier'
- '-Wno-address' - '-Wno-address'
- '-std=c99' - '-std=c99'
- '-pedantic' - '-pedantic'
+6
View File
@@ -151,6 +151,9 @@ class SystemTestGenerator
out.puts("#include \"#{include}\"") out.puts("#include \"#{include}\"")
end end
out.puts('') out.puts('')
out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"')
out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"')
out.puts('')
yield(out) yield(out)
out.puts('') out.puts('')
out.puts("#endif // _#{upcase_name}") out.puts("#endif // _#{upcase_name}")
@@ -164,6 +167,9 @@ class SystemTestGenerator
out.puts("#include \"#{include}\"") out.puts("#include \"#{include}\"")
end end
out.puts('') out.puts('')
out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"')
out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"')
out.puts('')
yield(out) yield(out)
out.puts('') out.puts('')
end end
+3 -1
View File
@@ -4,6 +4,9 @@
[Released under MIT License. Please refer to license.txt for details] [Released under MIT License. Please refer to license.txt for details]
========================================== */ ========================================== */
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"
struct _DUMMY_T { unsigned int a; float b; }; struct _DUMMY_T { unsigned int a; float b; };
void const_variants1( const char* a, int const, unsigned short const * c ); void const_variants1( const char* a, int const, unsigned short const * c );
@@ -12,4 +15,3 @@ void const_variants2(
struct _DUMMY_T const * const param1, struct _DUMMY_T const * const param1,
const unsigned long int const * const param2, const unsigned long int const * const param2,
const struct _DUMMY_T const * param3 ); const struct _DUMMY_T const * param3 );
+55 -35
View File
@@ -85,15 +85,20 @@ class CMockGeneratorTest < Test::Unit::TestCase
define_name = "MOCKPOUTPOUTFISH_H" define_name = "MOCKPOUTPOUTFISH_H"
mock_name = "MockPoutPoutFish" mock_name = "MockPoutPoutFish"
output = [] output = []
expected = [ "/* AUTOGENERATED FILE. DO NOT EDIT. */\n", expected = [
"#ifndef _#{define_name}\n", "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
"#define _#{define_name}\n\n", "#ifndef _#{define_name}\n",
"#include \"ConfigRequiredHeader1.h\"\n", "#define _#{define_name}\n\n",
"#include \"ConfigRequiredHeader2.h\"\n", "#include \"ConfigRequiredHeader1.h\"\n",
"#include \"#{orig_filename}\"\n", "#include \"ConfigRequiredHeader2.h\"\n",
"#include \"PluginRequiredHeader.h\"\n", "#include \"#{orig_filename}\"\n",
"\n" "#include \"PluginRequiredHeader.h\"\n",
] "\n",
"/* Ignore the following warnings, since we are copying code */\n",
"#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n",
"#pragma GCC diagnostic ignored \"-Wduplicate-decl-specifier\"\n",
"\n",
]
@plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n") @plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n")
@@ -121,15 +126,20 @@ class CMockGeneratorTest < Test::Unit::TestCase
define_name = "MOCKPOUT_POUT_FISH_H" define_name = "MOCKPOUT_POUT_FISH_H"
mock_name = "MockPout_Pout_Fish" mock_name = "MockPout_Pout_Fish"
output = [] output = []
expected = [ "/* AUTOGENERATED FILE. DO NOT EDIT. */\n", expected = [
"#ifndef _#{define_name}\n", "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
"#define _#{define_name}\n\n", "#ifndef _#{define_name}\n",
"#include \"ConfigRequiredHeader1.h\"\n", "#define _#{define_name}\n\n",
"#include \"ConfigRequiredHeader2.h\"\n", "#include \"ConfigRequiredHeader1.h\"\n",
"#include \"#{orig_filename}\"\n", "#include \"ConfigRequiredHeader2.h\"\n",
"#include \"PluginRequiredHeader.h\"\n", "#include \"#{orig_filename}\"\n",
"\n" "#include \"PluginRequiredHeader.h\"\n",
] "\n",
"/* Ignore the following warnings, since we are copying code */\n",
"#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n",
"#pragma GCC diagnostic ignored \"-Wduplicate-decl-specifier\"\n",
"\n",
]
@plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n") @plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n")
@@ -144,14 +154,19 @@ class CMockGeneratorTest < Test::Unit::TestCase
define_name = "MOCKPOUTPOUTFISH_H" define_name = "MOCKPOUTPOUTFISH_H"
mock_name = "MockPoutPoutFish" mock_name = "MockPoutPoutFish"
output = [] output = []
expected = [ "/* AUTOGENERATED FILE. DO NOT EDIT. */\n", expected = [
"#ifndef _#{define_name}\n", "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
"#define _#{define_name}\n\n", "#ifndef _#{define_name}\n",
"#include \"ConfigRequiredHeader1.h\"\n", "#define _#{define_name}\n\n",
"#include \"ConfigRequiredHeader2.h\"\n", "#include \"ConfigRequiredHeader1.h\"\n",
"#include \"#{orig_filename}\"\n", "#include \"ConfigRequiredHeader2.h\"\n",
"\n" "#include \"#{orig_filename}\"\n",
] "\n",
"/* Ignore the following warnings, since we are copying code */\n",
"#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n",
"#pragma GCC diagnostic ignored \"-Wduplicate-decl-specifier\"\n",
"\n",
]
@plugins.expect.run(:include_files).returns('') @plugins.expect.run(:include_files).returns('')
@@ -166,15 +181,20 @@ class CMockGeneratorTest < Test::Unit::TestCase
define_name = "MOCKPOUTPOUTFISH_H" define_name = "MOCKPOUTPOUTFISH_H"
mock_name = "MockPoutPoutFish" mock_name = "MockPoutPoutFish"
output = [] output = []
expected = [ "/* AUTOGENERATED FILE. DO NOT EDIT. */\n", expected = [
"#ifndef _#{define_name}\n", "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
"#define _#{define_name}\n\n", "#ifndef _#{define_name}\n",
"#include \"ConfigRequiredHeader1.h\"\n", "#define _#{define_name}\n\n",
"#include \"ConfigRequiredHeader2.h\"\n", "#include \"ConfigRequiredHeader1.h\"\n",
"#include \"#{orig_filename}\"\n", "#include \"ConfigRequiredHeader2.h\"\n",
"#include \"PluginRequiredHeader.h\"\n", "#include \"#{orig_filename}\"\n",
"\n" "#include \"PluginRequiredHeader.h\"\n",
] "\n",
"/* Ignore the following warnings, since we are copying code */\n",
"#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n",
"#pragma GCC diagnostic ignored \"-Wduplicate-decl-specifier\"\n",
"\n",
]
@plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n") @plugins.expect.run(:include_files).returns("#include \"PluginRequiredHeader.h\"\n")
+1 -1