guard-cunit 0.0.1-x86-linux

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.
Files changed (63) hide show
  1. data/.travis.yml +11 -0
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/Guardfile +11 -0
  5. data/README.md +70 -0
  6. data/Rakefile +24 -0
  7. data/doc/Gemfile.html +110 -0
  8. data/doc/Guard/Cunit/CunitParser.html +396 -0
  9. data/doc/Guard/Cunit/Runner.html +522 -0
  10. data/doc/Guard/Cunit.html +278 -0
  11. data/doc/Guard/CunitGuard.html +156 -0
  12. data/doc/Guard/Dsl.html +338 -0
  13. data/doc/Guard.html +149 -0
  14. data/doc/Guardfile.html +116 -0
  15. data/doc/Object.html +359 -0
  16. data/doc/Rakefile.html +132 -0
  17. data/doc/TempPrjEnv.html +239 -0
  18. data/doc/TestOutput.html +235 -0
  19. data/doc/created.rid +12 -0
  20. data/doc/images/add.png +0 -0
  21. data/doc/images/brick.png +0 -0
  22. data/doc/images/brick_link.png +0 -0
  23. data/doc/images/bug.png +0 -0
  24. data/doc/images/bullet_black.png +0 -0
  25. data/doc/images/bullet_toggle_minus.png +0 -0
  26. data/doc/images/bullet_toggle_plus.png +0 -0
  27. data/doc/images/date.png +0 -0
  28. data/doc/images/delete.png +0 -0
  29. data/doc/images/find.png +0 -0
  30. data/doc/images/loadingAnimation.gif +0 -0
  31. data/doc/images/macFFBgHack.png +0 -0
  32. data/doc/images/package.png +0 -0
  33. data/doc/images/page_green.png +0 -0
  34. data/doc/images/page_white_text.png +0 -0
  35. data/doc/images/page_white_width.png +0 -0
  36. data/doc/images/plugin.png +0 -0
  37. data/doc/images/ruby.png +0 -0
  38. data/doc/images/tag_blue.png +0 -0
  39. data/doc/images/tag_green.png +0 -0
  40. data/doc/images/transparent.png +0 -0
  41. data/doc/images/wrench.png +0 -0
  42. data/doc/images/wrench_orange.png +0 -0
  43. data/doc/images/zoom.png +0 -0
  44. data/doc/index.html +102 -0
  45. data/doc/js/darkfish.js +153 -0
  46. data/doc/js/jquery.js +18 -0
  47. data/doc/js/navigation.js +142 -0
  48. data/doc/js/search.js +94 -0
  49. data/doc/js/search_index.js +1 -0
  50. data/doc/js/searcher.js +228 -0
  51. data/doc/lib/guard/cunit/templates/Guardfile.html +115 -0
  52. data/doc/rdoc.css +543 -0
  53. data/doc/table_of_contents.html +157 -0
  54. data/guard-cunit.gemspec +29 -0
  55. data/lib/guard/cunit/cunit_parser.rb +70 -0
  56. data/lib/guard/cunit/runner.rb +99 -0
  57. data/lib/guard/cunit/templates/Guardfile +12 -0
  58. data/lib/guard/cunit/version.rb +7 -0
  59. data/lib/guard/cunit.rb +69 -0
  60. data/spec/guard_cunit_parser_spec.rb +79 -0
  61. data/spec/guard_cunit_spec.rb +198 -0
  62. data/spec/spec_helper.rb +72 -0
  63. metadata +167 -0
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib/",__FILE__)
3
+
4
+ require "guard/cunit/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "guard-cunit"
8
+ s.version = Guard::CunitGuard::VERSION
9
+ s.authors = ["Tea Cup On Rocking Chair"]
10
+ s.email = ["strandjata@gmail.com"]
11
+ s.platform = Gem::Platform::CURRENT
12
+ s.homepage = "http://teacup-on-rockingchair.github.com/guard-cunit/"
13
+ s.summary = %q{Guard gem for CUnit-driven projects}
14
+ s.description = %q{Guard Cunit should automatically build your C project and run CUnit based tests}
15
+
16
+ s.rubyforge_project = "guard-cunit"
17
+
18
+ # specify any dependencies here; for example:
19
+ s.add_dependency 'guard', '>= 1.1'
20
+ s.add_development_dependency 'bundler'
21
+ s.add_development_dependency 'rspec'
22
+
23
+ s.files = `git ls-files`.split("\n").delete_if {|x| x.match(/(.).gem\b/)}
24
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
26
+ s.require_paths = ["lib"]
27
+
28
+
29
+ end
@@ -0,0 +1,70 @@
1
+ class TestOutput < String
2
+ # limit the output to given nr rows
3
+ def limit_to_rows(number_of_rows)
4
+ output = TestOutput.new("")
5
+ raws_count = 1;
6
+ self.lines.each do |current_line|
7
+ output += current_line
8
+ break if(raws_count == number_of_rows)
9
+ raws_count+=1
10
+ end
11
+ output=output+"..." if ( number_of_rows < self.lines.count )
12
+ output
13
+ end
14
+
15
+ # bang version
16
+ def limit_to_rows!(number_of_rows)
17
+ self.replace(limit_to_rows(number_of_rows))
18
+ end
19
+
20
+ end
21
+
22
+
23
+ module Guard
24
+ class Cunit
25
+ class CunitParser
26
+ @output
27
+ @summary_output
28
+ @failures
29
+
30
+ #constructor
31
+ def initialize (task_output = nil)
32
+ parse_output( task_output ) unless task_output == nil
33
+ end
34
+
35
+ #get cunit output
36
+ def parse_output( task_output )
37
+ @output = TestOutput.new(task_output.dup)
38
+ get_summary
39
+ get_failures
40
+ end
41
+
42
+ # find summary of the cunit test reprot
43
+ def get_summary
44
+ @summary_output = TestOutput.new(@output[/Run Summary:[\w\W]*/])
45
+ end
46
+
47
+ #find failures from Cunit test report
48
+ def get_failures
49
+ @failures = TestOutput.new(@output[/Suite[\w\W]*/].sub(@summary_output,"").strip)
50
+ @failures.limit_to_rows!(3)
51
+ end
52
+
53
+ #display summary of the suites/tests/asserts
54
+ def cunit_output
55
+ @summary_output
56
+ end
57
+
58
+ #copy of the cunit output
59
+ def full_output
60
+ @output
61
+ end
62
+
63
+ #display failures output
64
+ def failures_output
65
+ @failures
66
+ end
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,99 @@
1
+ require 'guard/cunit/cunit_parser'
2
+
3
+
4
+ module Guard
5
+ class Cunit
6
+ #
7
+ # the class implements running and handling of results of the tasks that made up the cunit guard
8
+ #
9
+ class Runner
10
+ @@cunit_runner=''
11
+ @@project_builder=''
12
+ @@project_cleaner=''
13
+ @@project_libdir=''
14
+
15
+
16
+ def initialize
17
+ @parser = CunitParser.new()
18
+ @current_output = String.new("")
19
+ end
20
+ # set the executable file name to run CUNIT tests
21
+ def self.set_runner(name)
22
+ @@cunit_runner=name
23
+ end
24
+
25
+ # set command to run to prepare build
26
+ def self.set_builder(name)
27
+ @@project_builder=name
28
+ end
29
+
30
+ # set cleaner script/exe/command
31
+ def self.set_cleaner(name)
32
+ @@project_cleaner=name
33
+ end
34
+
35
+
36
+ # set directory where library under test is generated
37
+ def self.set_libdir(name)
38
+ @@project_libdir=name
39
+ end
40
+
41
+ #
42
+ # run one phase of the guard via a system command/executable
43
+ #
44
+ def run_task(task_executable)
45
+ success = true
46
+ IO.popen(task_executable) do |myio|
47
+ @current_output = myio.read
48
+ end
49
+ success = false unless $?.exitstatus == 0
50
+ UI.info @current_output
51
+ success
52
+ end
53
+
54
+ # run clean before each run all start with clean
55
+ def run_clean
56
+ run_task(@@project_cleaner)
57
+ end
58
+
59
+ # run unit tests via cunit executable
60
+ def run_tests
61
+ # setup environment so it should include lib dir for ld path
62
+ ENV["LD_LIBRARY_PATH"]="#{ENV["LD_LIBRARY_PATH"]}:#{@@project_libdir}"
63
+
64
+ if( !File.exists? (@@cunit_runner) )
65
+ Notifier.notify("Pending", :title => "Test Not Defined", :image => :pending, :priority => 2)
66
+ success = false
67
+ else
68
+ success = run_task(@@cunit_runner)
69
+ @parser.parse_output(@current_output) unless (@cunit_output == nil)
70
+ if success == true
71
+ Notifier.notify("Success", :title => "Test Passed", :image => :passed, :priority => 2)
72
+ else
73
+ Notifier.notify("Failed", :title => "Test Failed", :image => :failed, :priority => 2,:message => @parser.failures_output)
74
+ end
75
+ end
76
+ success
77
+ end
78
+
79
+
80
+ # run make command to build the project
81
+ def run_make
82
+ success = run_task(@@project_builder)
83
+ Notifier.notify("Failed", :title => "Build Failed", :image => :failed, :priority => 2) unless success == true
84
+ end
85
+ # run them all
86
+ def run
87
+ UI.info "Test runner: #{@@cunit_runner}"
88
+ UI.info "Builder: #{@@project_builder}"
89
+ UI.info "Cleaner: #{@@project_cleaner}"
90
+ UI.info "Libdir: #{@@project_libdir}"
91
+
92
+ run_clean
93
+ run_make
94
+ run_tests
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,12 @@
1
+ #
2
+ # Cunit Guardfile - keep dflt builders after guard watcher's block
3
+ #
4
+ guard 'cunit' do
5
+ watch(%r{((.+)\.c$)|((.+)\.h$)|((M|m)akefile$)} )
6
+ end
7
+
8
+ set_builder "make 2>&1"
9
+ set_cleaner "make clean"
10
+ cunit_runner "#{File.basename(Dir.getwd)}_unit"
11
+ libdir "#{Dir.getwd}"
12
+
@@ -0,0 +1,7 @@
1
+ #version
2
+ module Guard
3
+ module CunitGuard
4
+ # version of the gem
5
+ VERSION="0.0.1"
6
+ end
7
+ end
@@ -0,0 +1,69 @@
1
+ require 'guard'
2
+ require 'guard/guard'
3
+
4
+
5
+ module Guard
6
+ # main child class of Guard to nherit guard's behaviour
7
+ class Cunit < Guard
8
+ autoload :Runner, 'guard/cunit/runner'
9
+ # new method that also creates the runner class
10
+ def initialize(watchers = [], options = {})
11
+ super
12
+ @options = {
13
+ :all_on_start => true,
14
+ }.update(options)
15
+ @runner = Runner.new()
16
+ end
17
+ # Called when just `enter` is pressed
18
+ # This method should be principally used for long action like running all specs/tests/...
19
+ # @raise [:task_has_failed] when run_all has failed
20
+ def run_all
21
+ passed = @runner.run
22
+ throw :task_has_failed unless passed
23
+ end
24
+ def run_on_change(paths)
25
+ UI.info("Process changes in #{paths}")
26
+ passed = run_all
27
+ end
28
+ end
29
+
30
+ #
31
+ # add more behaviour to Guard's DSL to be able to configure executors
32
+ # of all the CUnit's Guard tasks
33
+ #
34
+ class Dsl
35
+ #
36
+ # put default values to task executors
37
+ #
38
+ def initialize
39
+ super
40
+ set_cleaner("make clean")
41
+ cunit_runner("#{File.basename(Dir.getwd)}_unit")
42
+ set_builder("make 2>&1")
43
+ libdir("#{Dir.getwd}")
44
+ @runner = Cunit::Runner.new
45
+ end
46
+
47
+ # dsl call to set cunit test executable
48
+ def cunit_runner (name)
49
+ Cunit::Runner.set_runner(name)
50
+ end
51
+
52
+ # dsl call to set cunit build command/script, by default make
53
+ def set_builder (name)
54
+ Cunit::Runner.set_builder(name)
55
+ end
56
+
57
+ #dsl call to set cunit clean command/script, by default 'make clean'
58
+ def set_cleaner (name)
59
+ Cunit::Runner.set_cleaner(name)
60
+ end
61
+
62
+ # dsl call to set dir, where library under test is generated, by default current dir
63
+ def libdir(name)
64
+ Cunit::Runner.set_libdir(File.expand_path(name))
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,79 @@
1
+ require "spec_helper.rb"
2
+
3
+
4
+ describe Guard::Cunit::CunitParser do
5
+ before(:each) do
6
+
7
+ @long_fake_output = String.new(" CUnit - A unit testing framework for C - Version 2.1-2
8
+ http://cunit.sourceforge.net/
9
+
10
+ Suite Simple calc CUNIT suite, Test Addition test had failures:
11
+ 1. simplecalc_test.c:7 - CU_FAIL(\"TODO\")
12
+ 2. simplecalc_test.c:17 - CU_FAIL(\"TODO\")
13
+ 3. simplecalc_test.c:27 - CU_FAIL(\"TODO\")
14
+ 4. simplecalc_test.c:37 - CU_FAIL(\"TODO\")
15
+ 5. simplecalc_test.c:47 - CU_FAIL(\"TODO\")
16
+ 6. simplecalc_test.c:57 - CU_FAIL(\"TODO\")
17
+ 7. simplecalc_test.c:67 - CU_FAIL(\"TODO\")
18
+ 8. simplecalc_test.c:77 - CU_FAIL(\"TODO\")
19
+ 9. simplecalc_test.c:87 - CU_FAIL(\"TODO\")
20
+ 10. simplecalc_test.c:97 - CU_FAIL(\"TODO\")
21
+
22
+
23
+ Run Summary: Type Total Ran Passed Failed Inactive
24
+ suites 1 1 n/a 0 0
25
+ tests 10 10 0 10 0
26
+ asserts 10 10 0 10 n/a
27
+
28
+ Elapsed time = 0.000 seconds")
29
+
30
+
31
+ @fake_output = String.new(" CUnit - A unit testing framework for C - Version 2.1-2
32
+ http://cunit.sourceforge.net/
33
+
34
+ Suite Simple calc CUNIT suite, Test Addition test had failures:
35
+ 1. simplecalc_test.c:7 - CU_FAIL(\"TODO\")
36
+
37
+ Run Summary: Type Total Ran Passed Failed Inactive
38
+ suites 1 1 n/a 0 0
39
+ tests 1 1 0 1 0
40
+ asserts 1 1 0 1 n/a
41
+
42
+ Elapsed time = 0.000 seconds")
43
+
44
+ @fake_fail_summary = String.new("Suite Simple calc CUNIT suite, Test Addition test had failures:
45
+ 1. simplecalc_test.c:7 - CU_FAIL(\"TODO\")")
46
+
47
+ @fake_summary = String.new("Run Summary: Type Total Ran Passed Failed Inactive
48
+ suites 1 1 n/a 0 0
49
+ tests 1 1 0 1 0
50
+ asserts 1 1 0 1 n/a
51
+
52
+ Elapsed time = 0.000 seconds")
53
+
54
+ @shortened_fail_summary = String.new("Suite Simple calc CUNIT suite, Test Addition test had failures:
55
+ 1. simplecalc_test.c:7 - CU_FAIL(\"TODO\")
56
+ 2. simplecalc_test.c:17 - CU_FAIL(\"TODO\")
57
+ ...")
58
+
59
+ end
60
+
61
+
62
+ it "should generate a UI summary and full output from given text input" do
63
+ parser = Guard::Cunit::CunitParser.new(@fake_output)
64
+ parser.full_output.should == @fake_output
65
+ parser.cunit_output.should == (@fake_summary)
66
+ parser.failures_output.should == (@fake_fail_summary)
67
+ end
68
+
69
+ it "failure summary should be maximum a 3 row output" do
70
+ parser = Guard::Cunit::CunitParser.new(@long_fake_output)
71
+ parser.failures_output.should == (@shortened_fail_summary)
72
+ end
73
+
74
+ it "should be able to init with no output and later trigger process" do
75
+ parser = Guard::Cunit::CunitParser.new()
76
+ parser.parse_output @long_fake_output
77
+ parser.failures_output.should == (@shortened_fail_summary)
78
+ end
79
+ end
@@ -0,0 +1,198 @@
1
+ require "spec_helper.rb"
2
+
3
+
4
+ describe Guard::Cunit do
5
+
6
+ before (:all) do
7
+ @@first = true
8
+ end
9
+
10
+ def setup_guard
11
+ if @@first == true
12
+ Guard::setup
13
+ @@first = false
14
+ else
15
+ Guard::reload
16
+ end
17
+ end
18
+
19
+ before(:each) do
20
+ tmp_work_dir=TempPrjEnv.create_tmp_prj_dir
21
+ @work_dir = Dir.getwd
22
+ Dir.chdir(tmp_work_dir)
23
+ Guard::UI.stub(:info)
24
+ IO.stub(:popen)
25
+ end
26
+
27
+ after(:each) do
28
+ Dir.chdir(@work_dir)
29
+ TempPrjEnv.cleanup_tmp_prj_dir
30
+ end
31
+
32
+ it "should inherit Guard class" do
33
+ subject.class.ancestors.should include(Guard::Guard)
34
+ end
35
+
36
+ context "Run guard" do
37
+
38
+ it "should run build" do
39
+
40
+ guardfile_has_unit_test_exe()
41
+ popen_successfull_fake("make clean")
42
+ popen_successfull_fake("make 2>&1")
43
+ fake_test_exe("#{File.basename(Dir.getwd)}_unit",:pass)
44
+ cguard = Guard::Cunit::Runner.new
45
+ setup_guard
46
+ cguard.run
47
+
48
+ end
49
+
50
+
51
+ it "should run build on changes " do
52
+
53
+ cguard = Guard::Cunit.new
54
+ cguard.stub(:run_all).and_return(true)
55
+ Guard::UI.should_receive(:info).with("Process changes in #{File.basename(Dir.getwd)}")
56
+
57
+ cguard.run_on_change("#{File.basename(Dir.getwd)}")
58
+
59
+ end
60
+
61
+ it "should set libpath for executbles with current project directory by default" do
62
+ oldenv=ENV["LD_LIBRARY_PATH"]
63
+ guardfile_has_unit_test_exe()
64
+ cguard = Guard::Cunit::Runner.new
65
+ setup_guard
66
+ cguard.run
67
+ newenv =ENV["LD_LIBRARY_PATH"]
68
+ newenv.should match("#{oldenv}:#{Dir.getwd}")
69
+ ENV["LD_LIBRARY_PATH"]=oldenv
70
+ end
71
+
72
+
73
+ it "should set libpath to predefined lib directory when user has specified such in the Guardfile" do
74
+ oldenv=ENV["LD_LIBRARY_PATH"]
75
+ guardfile_has_unit_test_exe(:libdir=>'./lib')
76
+ cguard = Guard::Cunit::Runner.new
77
+ setup_guard
78
+ cguard.run
79
+ newenv =ENV["LD_LIBRARY_PATH"]
80
+ newenv.should match("#{oldenv}:#{Dir.getwd}/lib")
81
+ ENV["LD_LIBRARY_PATH"]=oldenv
82
+ end
83
+
84
+
85
+ it "should run cunit test define in the Guardfile" do
86
+ guardfile_has_unit_test_exe(:test_exe => "jiji")
87
+ fake_test_exe("jiji",:pass)
88
+ cguard = Guard::Cunit.new
89
+ setup_guard
90
+ cguard.run_all
91
+
92
+ guardfile_has_unit_test_exe(:test_exe =>"didi")
93
+ fake_test_exe("didi",:pass)
94
+ cguard = Guard::Cunit::Runner.new
95
+ setup_guard
96
+ cguard.run
97
+
98
+ end
99
+
100
+
101
+ it "should run predefined build command" do
102
+ guardfile_has_unit_test_exe(:test_exe =>"jiji",:builder => "./make_all.sh")
103
+ fake_test_exe("jiji",:pass)
104
+ popen_successfull_fake("./make_all.sh")
105
+ cguard = Guard::Cunit::Runner.new
106
+ setup_guard
107
+ cguard.run
108
+
109
+ end
110
+
111
+ it "should run predefined clean command" do
112
+ guardfile_has_unit_test_exe(:test_exe =>"jiji",:builder => "./make_all.sh",:cleaner=> "./clean_all.sh")
113
+ fake_test_exe("jiji",:pass)
114
+ popen_successfull_fake("./make_all.sh")
115
+ popen_successfull_fake("./clean_all.sh")
116
+ cguard = Guard::Cunit::Runner.new
117
+ setup_guard
118
+ cguard.run
119
+
120
+ end
121
+
122
+ end
123
+
124
+
125
+ context "Handle exit codes" do
126
+ it "should report failure on build failed" do
127
+ guardfile_has_unit_test_exe()
128
+ popen_successfull_fake("make clean")
129
+ popen_failing_fake("make 2>&1")
130
+ cguard = Guard::Cunit::Runner.new
131
+ setup_guard
132
+ cguard.run.should == false
133
+ end
134
+
135
+ it "should report failure on test failed" do
136
+ guardfile_has_unit_test_exe(:test_exe=>"jiji")
137
+ popen_successfull_fake("make clean")
138
+ popen_successfull_fake("make 2>&1")
139
+ fake_test_exe("jiji",:fail)
140
+ cguard = Guard::Cunit::Runner.new
141
+ setup_guard
142
+ cguard.run.should == false
143
+ end
144
+
145
+ end
146
+
147
+
148
+ context "Displaying notifications" do
149
+
150
+ it "should display failure if build fails" do
151
+ Guard::Notifier.stub(:notify)
152
+ guardfile_has_unit_test_exe()
153
+ Guard::Notifier.should_receive(:notify).with("Failed", :title => "Build Failed", :image => :failed, :priority => 2)
154
+ popen_successfull_fake("make clean")
155
+ popen_failing_fake("make 2>&1")
156
+ cguard = Guard::Cunit::Runner.new
157
+ setup_guard
158
+ cguard.run
159
+ end
160
+
161
+ it "should display failure if test fails" do
162
+ IO.stub(:popen)
163
+ Guard::Notifier.stub(:notify)
164
+ guardfile_has_unit_test_exe(:test_exe=>"jiji")
165
+ Guard::Notifier.should_receive(:notify).with("Failed", :title => "Test Failed", :image => :failed, :priority => 2, :message => anything() )
166
+ popen_successfull_fake("make clean")
167
+ popen_successfull_fake("make 2>&1")
168
+ fake_test_exe("jiji",:fail)
169
+ cguard = Guard::Cunit::Runner.new
170
+ setup_guard
171
+ cguard.run
172
+ end
173
+
174
+ it "should display pending if test is absent" do
175
+ Guard::Notifier.stub(:notify)
176
+ guardfile_has_unit_test_exe()
177
+ Guard::Notifier.should_receive(:notify).with("Pending", :title => "Test Not Defined", :image => :pending, :priority => 2)
178
+ popen_successfull_fake("make clean")
179
+ popen_successfull_fake("make 2>&1")
180
+ cguard = Guard::Cunit::Runner.new
181
+ setup_guard
182
+ cguard.run
183
+ end
184
+
185
+ it "should display success if build and test succeeded" do
186
+ Guard::Notifier.stub(:notify)
187
+ guardfile_has_unit_test_exe()
188
+ Guard::Notifier.should_receive(:notify).with("Success", :title => "Test Passed", :image => :passed, :priority => 2)
189
+ popen_successfull_fake("make clean")
190
+ popen_successfull_fake("make 2>&1")
191
+ fake_test_exe(nil,:pass)
192
+ cguard = Guard::Cunit::Runner.new
193
+ Guard.add_guard('cunit')
194
+ cguard.run
195
+ end
196
+ end
197
+
198
+ end
@@ -0,0 +1,72 @@
1
+ require 'rubygems'
2
+ require 'guard'
3
+ require 'guard/cunit'
4
+ require 'guard/cunit/runner'
5
+ require 'guard/cunit/cunit_parser'
6
+ require 'rspec'
7
+
8
+ # a class to set/cleanup environment for fake project
9
+ class TempPrjEnv
10
+
11
+ @test_tmp = "./tmp"
12
+ @test_prj_dir="./tmp/1test_prj"
13
+
14
+ # create a tmp subdir and within it fake project directory
15
+ def self.create_tmp_prj_dir
16
+ begin
17
+ Dir.mkdir(@test_tmp)
18
+ Dir.mkdir(@test_prj_dir)
19
+ rescue
20
+ end
21
+ @test_prj_dir
22
+ end
23
+
24
+ # cleanup the subdir
25
+ def self.cleanup_tmp_prj_dir
26
+ begin
27
+ FileUtils.rm_rf(@test_prj_dir)
28
+ FileUtils.rm_rf(@test_tmp)
29
+ rescue
30
+ puts "Could not remove dirs"
31
+ end
32
+ end
33
+ end
34
+
35
+ # setup stub for system command with successful exit result
36
+ def popen_successfull_fake(fakename)
37
+ IO.stub(:popen).with(fakename)
38
+ IO.should_receive(:popen).with(fakename) { `(exit 0)`}
39
+ end
40
+
41
+ # setup stub for system command with failing exit result
42
+ def popen_failing_fake(fakename)
43
+ IO.stub(:popen).with(fakename)
44
+ IO.should_receive(:popen).with(fakename) { `(exit 1)`}
45
+ end
46
+
47
+ # fake the test executable runner, its existance and result
48
+ def fake_test_exe(exe_name,successful = :fail)
49
+ exe_name="#{File.basename(Dir.getwd)}_unit" unless exe_name != nil
50
+ File.new(exe_name,"w+")
51
+ if successful == :pass
52
+ popen_successfull_fake(exe_name)
53
+ else
54
+ popen_failing_fake(exe_name)
55
+ end
56
+ end
57
+
58
+ # a generator for CUnit Guardfile
59
+ def guardfile_has_unit_test_exe(params={ :test_exe=>nil, :builder=>nil, :cleaner=>nil, :libdir=>nil})
60
+ File.open("Guardfile","w+",0644) do |file|
61
+ file.puts "guard \'cunit\' do"
62
+
63
+ file.puts " set_builder \"#{params[:builder]}\"" unless (params[:builder] == nil)
64
+ file.puts " set_cleaner \"#{params[:cleaner]}\"" unless (params[:cleaner] == nil)
65
+ file.puts " cunit_runner \"#{params[:test_exe]}\"" unless (params[:test_exe] == nil)
66
+ file.puts " libdir \"#{params[:libdir]}\"" unless (params[:libdir] == nil)
67
+
68
+ file.puts ' watch(%r{((.+)\.c$)|((.+)\.h$)|((M|m)akefile$)} ) '
69
+ file.puts 'end'
70
+ end
71
+ end
72
+