rake-tester 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ # 0.0.1 #
2
+
3
+ * Initial release
4
+ * Automatic compilation and execution
5
+ * Valgind support
6
+ * GDB support
7
+
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2009 Fabian Streitel
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
@@ -0,0 +1,91 @@
1
+ # rake-tester #
2
+
3
+ <http://www.github.com/karottenreibe/rake-tester>
4
+
5
+ An extension of the [rake-compiler][rakecompiler] that allows
6
+ for automatic compilation of C test suites, e.g. using
7
+ [cmockery].
8
+
9
+
10
+ ## Features/Limitations ##
11
+
12
+ * Automatically compiles and executes test suites of
13
+ arbitrary C testing frameworks
14
+ * Can batch-execute all suites or selectively run a single suite
15
+ * Can only compile the tests for your current platform
16
+ * Thus, no cross compilation of the tests
17
+ * Support for running the tests with valgrind or gdb
18
+
19
+
20
+ ## Installation ##
21
+
22
+ gem install rake-tester
23
+
24
+
25
+ ## Usage ##
26
+
27
+ In the Rakefile:
28
+
29
+ require 'rake/extensiontask'
30
+ require 'rake/extensiontesttask'
31
+
32
+ Rake::ExtensionTask.new(...) do |ext|
33
+ # ... confgure as normal
34
+
35
+ ext.test_files = FileList['test/c/*']
36
+ ext.test_includes << '/usr/include/frood_stuff'
37
+ ext.test_libraries << 'zaphods_heads'
38
+ ext.test_lib_folders << '/usr/lib/floopy'
39
+ end
40
+
41
+ Write your tests.
42
+
43
+ To test everything:
44
+
45
+ $ rake test:c
46
+
47
+ To test one extension:
48
+
49
+ $ rake test:c:extension
50
+
51
+ To execute one test suite:
52
+
53
+ $ rake test:c:extension[test_feature]
54
+
55
+ To use valgrind:
56
+
57
+ $ rake test:valgrind:extension[test_feature]
58
+
59
+ To use gdb:
60
+
61
+ $ rake test:gdb:extension[test_feature]
62
+
63
+
64
+ ## License ##
65
+
66
+ Copyright (c) 2009 Fabian Streitel
67
+
68
+ Permission is hereby granted, free of charge, to any person
69
+ obtaining a copy of this software and associated documentation
70
+ files (the "Software"), to deal in the Software without
71
+ restriction, including without limitation the rights to use,
72
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
73
+ copies of the Software, and to permit persons to whom the
74
+ Software is furnished to do so, subject to the following
75
+ conditions:
76
+
77
+ The above copyright notice and this permission notice shall be
78
+ included in all copies or substantial portions of the Software.
79
+
80
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
81
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
82
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
83
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
84
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
85
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
86
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
87
+ OTHER DEALINGS IN THE SOFTWARE.
88
+
89
+ [rakecompiler]: http://github.com/luislavena/rake-compiler "The rake-compile project"
90
+ [cmockery]: http://code.google.com/p/cmockery/ "The cmockery C testing framework"
91
+
@@ -0,0 +1,30 @@
1
+
2
+ task :release do
3
+ sh "vim HISTORY.markdown"
4
+ sh "vim README.markdown"
5
+ sh "git commit -a -m 'prerelease adjustments'; true"
6
+ end
7
+
8
+ require 'jeweler'
9
+ jeweler_tasks = Jeweler::Tasks.new do |gem|
10
+ gem.name = 'rake-tester'
11
+ gem.summary = 'rake-tester is an extension to the rake-compiler that maintains C test suites'
12
+ gem.description = gem.summary
13
+ gem.email = 'karottenreibe@gmail.com'
14
+ gem.homepage = 'http://github.com/karottenreibe/rake-tester'
15
+ gem.authors = ['Fabian Streitel']
16
+ gem.rubyforge_project = 'k-gems'
17
+ end
18
+
19
+ Jeweler::RubyforgeTasks.new
20
+ Jeweler::GemcutterTasks.new
21
+
22
+
23
+ require 'rake/rdoctask'
24
+ Rake::RDocTask.new do |rdoc|
25
+ rdoc.rdoc_dir = 'rdoc'
26
+ rdoc.title = 'Joker'
27
+ rdoc.rdoc_files.include('lib/**/*.rb')
28
+ rdoc.rdoc_files.include('ext/**/*.rb')
29
+ end
30
+
@@ -0,0 +1,114 @@
1
+ require 'rake/clean'
2
+ require 'rake/extensiontask'
3
+
4
+ module Rake
5
+
6
+ class ExtensionTask
7
+
8
+ #
9
+ # The C files to compile.
10
+ #
11
+ attr_accessor :test_files
12
+
13
+ #
14
+ # The folders where includes for the test files are.
15
+ #
16
+ # Default: %w{/usr/include /usr/include/google}
17
+ #
18
+ attr_accessor :test_includes
19
+
20
+ #
21
+ # The libraries to link against.
22
+ #
23
+ # Default: %w{cmockery}
24
+ #
25
+ attr_accessor :test_libraries
26
+
27
+ #
28
+ # The folders where the libraries are
29
+ #
30
+ # Default: %w{/usr/lib}
31
+ #
32
+ attr_accessor :test_lib_folders
33
+
34
+ alias_method :initialize_old, :initialize
35
+
36
+ def initialize( *args, &block )
37
+ @test_files = Array.new
38
+ @test_includes = %w{/usr/include /usr/include/google}
39
+ @test_libraries = %w{cmockery}
40
+ @test_lib_folders = %w{/usr/lib}
41
+
42
+ initialize_old(*args, &block)
43
+ init_test_tasks()
44
+ end
45
+
46
+ private
47
+
48
+ def init_test_tasks
49
+ # some stuff we need often later on
50
+ compile_dir = "#{@tmp_dir}/test"
51
+ compile_task = "compile:#{@name}:test"
52
+ test_task = "test:c:#{@name}"
53
+ valgrind_task = "test:valgrind:#{@name}"
54
+ gdb_task = "test:gdb:#{@name}"
55
+
56
+ directory compile_dir
57
+
58
+ desc "Compile #{@name} tests"
59
+ task compile_task => ["compile:#{@name}", compile_dir] do
60
+ # copy the test files into the compilation folder
61
+ @test_files.each { |file| cp file, compile_dir }
62
+
63
+ # start compilation
64
+ chdir(compile_dir) do
65
+ includes = (@test_includes + [
66
+ ".",
67
+ "../../#{@ext_dir}",
68
+ "/usr/include/ruby-#{RUBY_VERSION}",
69
+ "/usr/include/ruby-#{RUBY_VERSION}/#{RUBY_PLATFORM}",
70
+ ]).map { |l| '-I' + l }.join(' ')
71
+
72
+ # compile the test sources
73
+ FileList['*.c'].each do |cfile|
74
+ sh "gcc -g #{includes} -c #{cfile}"
75
+ end
76
+
77
+ source_objects = FileList["../#{RUBY_PLATFORM}/#{@name}/#{RUBY_VERSION}/*.o"]
78
+ libraries = (@test_libraries + %w{ruby pthread crypto}).map { |l| '-l' + l }.join(' ')
79
+ lib_folders = (@test_lib_folders + %w{/usr/lib .}).map { |l| '-L' + l }.join(' ')
80
+
81
+ # link the executables
82
+ FileList['*.o'].each do |ofile|
83
+ sh "gcc -g #{lib_folders} #{libraries} #{source_objects} #{ofile} -o #{ofile.ext}"
84
+ end
85
+ end
86
+ end
87
+
88
+ desc "Execute valgrind for a #{@name} test"
89
+ task valgrind_task, :test, :needs => [compile_task] do |t,args|
90
+ sh "valgrind --num-callers=50 --error-limit=no --partial-loads-ok=yes --undef-value-errors=no --leak-check=full #{compile_dir}/#{args.test}"
91
+ end
92
+
93
+ desc "Execute gdb for a #{@name} test"
94
+ task gdb_task, :test, :needs => [compile_task] do |t,args|
95
+ sh "gdb #{compile_dir}/#{args.test}"
96
+ end
97
+
98
+ desc "Test #{@name}"
99
+ task test_task, :test, :needs => [compile_task] do |t,args|
100
+ if args.test
101
+ sh "#{compile_dir}/#{args.test}"
102
+ else
103
+ FileList["#{compile_dir}/*.o"].each do |ofile|
104
+ sh "#{ofile.ext}"
105
+ end
106
+ end
107
+ end
108
+
109
+ desc "Test all C extensions"
110
+ task 'test:c' => [test_task]
111
+ end
112
+ end
113
+ end
114
+
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-tester
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Fabian Streitel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-15 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: rake-tester is an extension to the rake-compiler that maintains C test suites
17
+ email: karottenreibe@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - LICENSE.txt
24
+ - README.markdown
25
+ files:
26
+ - HISTORY.markdown
27
+ - LICENSE.txt
28
+ - README.markdown
29
+ - Rakefile
30
+ - lib/rake/extensiontesttask.rb
31
+ has_rdoc: true
32
+ homepage: http://github.com/karottenreibe/rake-tester
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options:
37
+ - --charset=UTF-8
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ requirements: []
53
+
54
+ rubyforge_project: k-gems
55
+ rubygems_version: 1.3.5
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: rake-tester is an extension to the rake-compiler that maintains C test suites
59
+ test_files: []
60
+