guard-cunit 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +8 -6
- data/CHANGELOG.md +25 -1
- data/Gemfile +3 -0
- data/README.md +9 -7
- data/Rakefile +3 -2
- data/guard-cunit.gemspec +1 -0
- data/lib/guard/cunit.rb +35 -34
- data/lib/guard/cunit/cunit_parser.rb +58 -59
- data/lib/guard/cunit/runner.rb +136 -122
- data/lib/guard/cunit/templates/Guardfile +1 -1
- data/lib/guard/cunit/version.rb +2 -3
- data/spec/guard_cunit_parser_spec.rb +6 -6
- data/spec/guard_cunit_spec.rb +28 -28
- data/spec/spec_helper.rb +5 -3
- metadata +82 -76
data/.travis.yml
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
+
before_install:
|
2
|
+
- gem update bundle
|
3
|
+
- gem --version
|
4
|
+
- bundle --version
|
1
5
|
language: ruby
|
2
6
|
rvm:
|
3
|
-
- "
|
4
|
-
- "1.9.2"
|
5
|
-
- "1.9.3"
|
6
|
-
- jruby-18mode # JRuby in 1.8 mode
|
7
|
+
- "2.0.0-p247"
|
7
8
|
- jruby-19mode # JRuby in 1.9 mode
|
8
|
-
-
|
9
|
+
- jruby-20mode # JRuby in 2.0 mode
|
9
10
|
- rbx-19mode
|
11
|
+
- rbx-20mode
|
10
12
|
# uncomment this line if your project needs to run something other than `rake`:
|
11
|
-
script: bundle exec rspec
|
13
|
+
script: bundle exec rspec
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,28 @@
|
|
1
|
-
# Chagelog
|
1
|
+
# Chagelog
|
2
|
+
|
3
|
+
## version 0.0.2
|
4
|
+
### more bugfixes
|
5
|
+
commit fc72fdc5b23ea146d37554151eb7681bb0f615ee
|
6
|
+
Date: Sun Dec 2 20:25:26 2012 +0200
|
7
|
+
|
8
|
+
add fixes for running rspec in cleaner environment and increased version
|
9
|
+
where platform indpendant gem should be used
|
10
|
+
|
11
|
+
commit a24dc9f1458a7e200b825c62c9ecd96836fa378e
|
12
|
+
Date: Sun Dec 2 17:08:17 2012 +0200
|
13
|
+
|
14
|
+
reworked popen usage for legacy runy versions and win/mac
|
15
|
+
incompatabilities
|
16
|
+
|
17
|
+
commit f4c578a2974b19e594e6180ca2ad5a27e4edc5ba
|
18
|
+
Date: Thu Nov 29 17:07:27 2012 +0200
|
19
|
+
|
20
|
+
fix problem with pipes on windows
|
21
|
+
|
22
|
+
commit 94d611475656105b72680dca8aebac6ca7ab3344
|
23
|
+
Date: Wed Nov 28 10:46:16 2012 +0200
|
24
|
+
|
25
|
+
rework adding library to search path for win and mac
|
2
26
|
|
3
27
|
### Bug fix
|
4
28
|
commit fd83634f375f76fb7ef5af72516f6afe6f07946c
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
|
1
2
|
# Guard CUnit [![Build Status](https://secure.travis-ci.org/teacup-on-rockingchair/guard-cunit.png?branch=master)](http://travis-ci.org/teacup-on-rockingchair/guard-cunit)
|
2
3
|
|
3
4
|
CUnit Guard allows you to run/watch Unit test for C modules, or anything other that works with Makefile
|
4
5
|
|
5
|
-
|
6
|
+
Has basic parser for CUnit tests. Current TODO is to add also for CppUtest and Unity
|
6
7
|
|
7
8
|
## Install
|
8
9
|
|
@@ -10,10 +11,10 @@ Need to have guard and also some of the notifiers that guard uses
|
|
10
11
|
|
11
12
|
otherwise, get the gemfile and install it:
|
12
13
|
```
|
13
|
-
$ gem install
|
14
|
+
$ gem install guard-cunit
|
14
15
|
```
|
15
16
|
|
16
|
-
|
17
|
+
Already can be found on http://rubygems.org/
|
17
18
|
|
18
19
|
# Guardfile
|
19
20
|
|
@@ -36,9 +37,9 @@ guard 'cunit' do
|
|
36
37
|
watch(%r{((.+)\.c$)|((.+)\.h$)|((M|m)akefile$)} )
|
37
38
|
end
|
38
39
|
|
39
|
-
set_builder "make
|
40
|
+
set_builder "make"
|
40
41
|
set_cleaner "make clean"
|
41
|
-
cunit_runner "
|
42
|
+
cunit_runner "./#{File.basename(Dir.getwd)}_unit"
|
42
43
|
libdir "#{Dir.getwd}"
|
43
44
|
|
44
45
|
```
|
@@ -60,11 +61,12 @@ Run rspec in top directory of the project or guard-rspec
|
|
60
61
|
Todo
|
61
62
|
-----------
|
62
63
|
- fix all bugs :)
|
63
|
-
- add parser for
|
64
|
+
- add parser for more Unit tests frameworks
|
64
65
|
- add hook for coverage
|
66
|
+
- something about automatic mock generation ???
|
65
67
|
- ... whatever wind blows ...
|
66
68
|
|
67
69
|
Author
|
68
70
|
----------
|
69
|
-
[A tea cup on a rocking chair](https://github.com/
|
71
|
+
[A tea cup on a rocking chair](https://github.com/teacup-on-rockingchair)
|
70
72
|
|
data/Rakefile
CHANGED
@@ -8,13 +8,14 @@ task :default => [ :spec, :doc, :gem]
|
|
8
8
|
|
9
9
|
desc "Run RSpec"
|
10
10
|
RSpec::Core::RakeTask.new do |t|
|
11
|
-
t.rcov = ENV['RCOV']
|
12
|
-
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
11
|
+
# t.rcov = ENV['RCOV']
|
12
|
+
# t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
13
13
|
t.verbose = true
|
14
14
|
end
|
15
15
|
|
16
16
|
|
17
17
|
task :doc do
|
18
|
+
system 'rm -fr doc'
|
18
19
|
system 'rdoc -a -U'
|
19
20
|
end
|
20
21
|
|
data/guard-cunit.gemspec
CHANGED
data/lib/guard/cunit.rb
CHANGED
@@ -1,69 +1,70 @@
|
|
1
1
|
require 'guard'
|
2
|
-
require 'guard/
|
3
|
-
|
2
|
+
require 'guard/compat/plugin'
|
3
|
+
require_relative 'cunit/runner'
|
4
4
|
|
5
5
|
module Guard
|
6
|
-
# main child class of Guard to nherit guard's behaviour
|
7
|
-
class Cunit <
|
8
|
-
|
9
|
-
|
10
|
-
def initialize(watchers = [], options = {})
|
6
|
+
# main child class of Guard to nherit guard's behaviour
|
7
|
+
class Cunit < Plugin
|
8
|
+
# new method that also creates the runner class
|
9
|
+
def initialize(options = {})
|
11
10
|
super
|
12
11
|
@options = {
|
13
|
-
:
|
12
|
+
all_on_start: true
|
14
13
|
}.update(options)
|
15
|
-
@runner
|
14
|
+
@runner = Runner.new
|
16
15
|
end
|
16
|
+
|
17
17
|
# Called when just `enter` is pressed
|
18
|
-
# This method should be principally used for long action
|
18
|
+
# This method should be principally used for long action
|
19
|
+
# like running all specs/tests/...
|
19
20
|
# @raise [:task_has_failed] when run_all has failed
|
20
21
|
def run_all
|
21
22
|
passed = @runner.run
|
22
23
|
throw :task_has_failed unless passed
|
23
24
|
end
|
25
|
+
|
24
26
|
def run_on_change(paths)
|
25
27
|
UI.info("Process changes in #{paths}")
|
26
|
-
|
28
|
+
run_all
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
#
|
31
|
-
# add more behaviour to Guard's DSL to be able to configure executors
|
32
|
-
# of all the CUnit's Guard tasks
|
33
|
-
#
|
32
|
+
#
|
33
|
+
# add more behaviour to Guard's DSL to be able to configure executors
|
34
|
+
# of all the CUnit's Guard tasks
|
35
|
+
#
|
34
36
|
class Dsl
|
35
|
-
#
|
36
|
-
# put default values to task executors
|
37
|
-
#
|
37
|
+
#
|
38
|
+
# put default values to task executors
|
39
|
+
#
|
38
40
|
def initialize
|
39
41
|
super
|
40
|
-
set_cleaner(
|
42
|
+
set_cleaner('make clean')
|
41
43
|
cunit_runner("./#{File.basename(Dir.getwd)}_unit")
|
42
|
-
set_builder(
|
44
|
+
set_builder('make 2>&1')
|
43
45
|
libdir("#{Dir.getwd}")
|
44
46
|
@runner = Cunit::Runner.new
|
45
47
|
end
|
46
48
|
|
47
49
|
# dsl call to set cunit test executable
|
48
|
-
def cunit_runner
|
49
|
-
Cunit::Runner.
|
50
|
+
def cunit_runner(name)
|
51
|
+
Cunit::Runner.cfg_runner(name)
|
50
52
|
end
|
51
|
-
|
53
|
+
|
52
54
|
# dsl call to set cunit build command/script, by default make
|
53
|
-
def set_builder
|
54
|
-
Cunit::Runner.
|
55
|
+
def set_builder(name)
|
56
|
+
Cunit::Runner.cfg_builder(name)
|
55
57
|
end
|
56
|
-
|
57
|
-
#dsl call to set cunit clean command/script, by default 'make clean'
|
58
|
-
def set_cleaner
|
59
|
-
Cunit::Runner.
|
58
|
+
|
59
|
+
# dsl call to set cunit clean command/script, by default 'make clean'
|
60
|
+
def set_cleaner(name)
|
61
|
+
Cunit::Runner.cfg_cleaner(name)
|
60
62
|
end
|
61
|
-
|
62
|
-
# dsl call to set dir, where library under test is generated,
|
63
|
+
|
64
|
+
# dsl call to set dir, where library under test is generated,
|
65
|
+
# by default current dir
|
63
66
|
def libdir(name)
|
64
|
-
Cunit::Runner.
|
67
|
+
Cunit::Runner.cfg_libdir(File.expand_path(name))
|
65
68
|
end
|
66
|
-
|
67
69
|
end
|
68
|
-
|
69
70
|
end
|
@@ -1,79 +1,78 @@
|
|
1
|
+
# couple of methods I need for String objects
|
1
2
|
class TestOutput < String
|
2
3
|
# limit the output to given nr rows
|
3
4
|
def limit_to_rows(number_of_rows)
|
4
|
-
output = TestOutput.new(
|
5
|
-
raws_count = 1
|
6
|
-
|
5
|
+
output = TestOutput.new('')
|
6
|
+
raws_count = 1
|
7
|
+
lines.each do |current_line|
|
7
8
|
output += current_line
|
8
|
-
break if
|
9
|
-
raws_count+=1
|
9
|
+
break if raws_count == number_of_rows
|
10
|
+
raws_count += 1
|
10
11
|
end
|
11
|
-
output
|
12
|
+
output += '...' if number_of_rows < lines.count
|
12
13
|
output
|
13
14
|
end
|
14
|
-
|
15
|
+
|
15
16
|
# bang version
|
16
17
|
def limit_to_rows!(number_of_rows)
|
17
|
-
|
18
|
+
replace(limit_to_rows(number_of_rows))
|
18
19
|
end
|
19
|
-
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
22
|
module Guard
|
24
|
-
class Cunit
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
class Cunit < Plugin
|
24
|
+
# Parse CUNIT test harness output
|
25
|
+
class CunitParser
|
26
|
+
# constructor
|
27
|
+
def initialize(task_output = nil)
|
28
|
+
parse_output(task_output) unless task_output.nil?
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
task_output = "" unless task_output != nil
|
38
|
-
@output = TestOutput.new(task_output.dup)
|
39
|
-
get_summary
|
40
|
-
get_failures
|
41
|
-
end
|
42
|
-
|
43
|
-
# find summary of the cunit test reprot
|
44
|
-
def get_summary
|
45
|
-
begin
|
46
|
-
@summary_output = TestOutput.new(@output[/Run Summary:[\w\W]*/])
|
47
|
-
rescue
|
48
|
-
@summary_output = TestOutput.new("")
|
49
|
-
end
|
50
|
-
end
|
31
|
+
# get cunit output
|
32
|
+
def parse_output(task_output)
|
33
|
+
task_output = '' if task_output.nil?
|
34
|
+
@output = TestOutput.new(task_output.dup)
|
35
|
+
read_summary
|
36
|
+
read_failures
|
37
|
+
end
|
51
38
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
39
|
+
# find summary of the cunit test reprot
|
40
|
+
def read_summary
|
41
|
+
summary_txt = ''
|
42
|
+
begin
|
43
|
+
summary_txt = @output[/Run Summary:[\w\W]*/] || ''
|
44
|
+
rescue
|
45
|
+
summary_txt = ''
|
46
|
+
end
|
47
|
+
@summary_output = TestOutput.new(summary_txt)
|
48
|
+
end
|
61
49
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
50
|
+
# find failures from Cunit test report
|
51
|
+
def read_failures
|
52
|
+
begin
|
53
|
+
failures_rex = /[\r\n]*[ \t\f]*1. [\w\W]*:[\d]* [\w\W]*/
|
54
|
+
outp = @output[failures_rex].sub(@summary_output, '').strip
|
55
|
+
@failures = TestOutput.new(outp)
|
56
|
+
rescue
|
57
|
+
@failures = TestOutput.new('Failed')
|
58
|
+
end
|
59
|
+
@failures.limit_to_rows!(3)
|
60
|
+
end
|
66
61
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
62
|
+
# display summary of the suites/tests/asserts
|
63
|
+
def cunit_output
|
64
|
+
@summary_output
|
65
|
+
end
|
71
66
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
67
|
+
# copy of the cunit output
|
68
|
+
def full_output
|
69
|
+
@output
|
70
|
+
end
|
76
71
|
|
77
|
-
|
78
|
-
|
72
|
+
# display failures output
|
73
|
+
def failures_output
|
74
|
+
@failures
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
79
78
|
end
|
data/lib/guard/cunit/runner.rb
CHANGED
@@ -1,128 +1,142 @@
|
|
1
1
|
require 'guard/cunit/cunit_parser'
|
2
2
|
|
3
|
-
|
4
3
|
module Guard
|
5
|
-
class Cunit
|
6
|
-
#
|
7
|
-
#
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
4
|
+
class Cunit < Plugin
|
5
|
+
# the class implements running and handling results
|
6
|
+
# of the tasks that made up the cunit guard
|
7
|
+
class Runner
|
8
|
+
@@cunit_runner = ''
|
9
|
+
@@project_builder = ''
|
10
|
+
@@project_cleaner = ''
|
11
|
+
@@project_libdir = ''
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@parser = CunitParser.new
|
15
|
+
@current_output = String.new('')
|
16
|
+
end
|
17
|
+
|
18
|
+
# set the executable file name to run CUNIT tests
|
19
|
+
def self.cfg_runner(name)
|
20
|
+
@@cunit_runner = name
|
21
|
+
end
|
22
|
+
|
23
|
+
# set command to run to prepare build
|
24
|
+
def self.cfg_builder(name)
|
25
|
+
@@project_builder = name
|
26
|
+
end
|
27
|
+
|
30
28
|
# set cleaner script/exe/command
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
def self.cfg_cleaner(name)
|
30
|
+
@@project_cleaner = name
|
31
|
+
end
|
32
|
+
|
36
33
|
# set directory where library under test is generated
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
34
|
+
def self.cfg_libdir(name)
|
35
|
+
@@project_libdir = name
|
36
|
+
end
|
37
|
+
|
38
|
+
# make wrapper for piping so we can use different
|
39
|
+
# approaches on win and *nix
|
40
|
+
def piper(exe)
|
41
|
+
if RUBY_PLATFORM.match(/mingw/) || \
|
42
|
+
RUBY_PLATFORM.match(/mswin/) || RUBY_VERSION.match('1.8')
|
43
|
+
IO.popen(exe) do |io|
|
44
|
+
yield io
|
45
|
+
end
|
46
|
+
else
|
47
|
+
IO.popen(exe.split << { err: [:child, :out] }) do |io|
|
48
|
+
yield io
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# run one phase of the guard via a system command/executable
|
54
|
+
def run_task(task_executable)
|
55
|
+
success = true
|
56
|
+
piper(task_executable) do |myio|
|
57
|
+
@current_output = myio.read
|
58
|
+
end
|
59
|
+
success = false unless $CHILD_STATUS.exitstatus == 0
|
60
|
+
UI.info @current_output
|
61
|
+
success
|
62
|
+
end
|
63
|
+
|
64
|
+
# run clean before each run all start with clean
|
65
|
+
def run_clean
|
66
|
+
fail 'Clean failed' unless run_task(@@project_cleaner) == true
|
67
|
+
end
|
68
|
+
|
69
|
+
def export_libdir(libdir)
|
70
|
+
case RUBY_PLATFORM
|
71
|
+
when /mingw/, /mswin/
|
72
|
+
ENV['PATH'] = "#{ENV['PATH']};#{libdir}"
|
73
|
+
when /darwin/
|
74
|
+
ENV['DYLD_LIBRARY_PATH'] = "#{ENV['DYLD_LIBRARY_PATH']}:#{libdir}"
|
75
|
+
else
|
76
|
+
ENV['LD_LIBRARY_PATH'] = "#{ENV['LD_LIBRARY_PATH']}:#{libdir}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def parse_test_output(result)
|
81
|
+
@parser.parse_output(@current_output)
|
82
|
+
if result == true
|
83
|
+
Guard::Compat::UI.notify('Success', title: 'Test Passed',
|
84
|
+
image: :success, priority: 2)
|
85
|
+
else
|
86
|
+
Guard::Compat::UI.notify(@parser.failures_output, title: 'Test Failed',
|
87
|
+
image: :failed, priority: 2)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def run_cunit
|
92
|
+
if !File.exist?(@@cunit_runner)
|
93
|
+
Guard::Compat::UI.notify('Pending', title: 'Test Not Defined',
|
94
|
+
image: :pending, priority: 2)
|
95
|
+
return false
|
96
|
+
else
|
97
|
+
success = run_task(@@cunit_runner)
|
98
|
+
parse_test_output(success)
|
99
|
+
return success
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# run unit tests via cunit executable
|
104
|
+
def run_tests
|
105
|
+
# setup environment so it should include lib dir for ld path
|
106
|
+
export_libdir(@@project_libdir)
|
107
|
+
success = run_cunit
|
108
|
+
fail 'Test failed' unless success == true
|
109
|
+
end
|
110
|
+
|
111
|
+
# run make command to build the project
|
112
|
+
def run_make
|
113
|
+
success = run_task(@@project_builder)
|
114
|
+
unless success == true
|
115
|
+
Guard::Compat::UI.notify('Failed', title: 'Build Failed',
|
116
|
+
image: :failed, priority: 2)
|
117
|
+
end
|
118
|
+
fail 'Build failed' unless success == true
|
119
|
+
end
|
120
|
+
|
121
|
+
def print_test_info
|
122
|
+
UI.info "Test runner: #{@@cunit_runner}"
|
123
|
+
UI.info "Builder: #{@@project_builder}"
|
124
|
+
UI.info "Cleaner: #{@@project_cleaner}"
|
125
|
+
UI.info "Libdir: #{@@project_libdir}"
|
126
|
+
end
|
127
|
+
|
128
|
+
# run them all
|
129
|
+
def run
|
130
|
+
print_test_info
|
131
|
+
begin
|
132
|
+
run_clean
|
133
|
+
run_make
|
134
|
+
run_tests
|
135
|
+
rescue
|
136
|
+
return false
|
137
|
+
end
|
138
|
+
true
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
128
142
|
end
|
data/lib/guard/cunit/version.rb
CHANGED
@@ -60,24 +60,24 @@ Elapsed time = 0.000 seconds")
|
|
60
60
|
|
61
61
|
it "should generate a UI summary and full output from given text input" do
|
62
62
|
parser = Guard::Cunit::CunitParser.new(@fake_output)
|
63
|
-
parser.full_output.
|
64
|
-
parser.cunit_output.
|
65
|
-
parser.failures_output.
|
63
|
+
expect(parser.full_output).to eq @fake_output
|
64
|
+
expect(parser.cunit_output).to eq (@fake_summary)
|
65
|
+
expect(parser.failures_output).to eq (@fake_fail_summary)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "failure summary should be maximum a 3 row output" do
|
69
69
|
parser = Guard::Cunit::CunitParser.new(@long_fake_output)
|
70
|
-
parser.failures_output.
|
70
|
+
expect(parser.failures_output).to eq (@shortened_fail_summary)
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should be able to init with no output and later trigger process" do
|
74
74
|
parser = Guard::Cunit::CunitParser.new()
|
75
75
|
parser.parse_output(@long_fake_output)
|
76
|
-
parser.failures_output.
|
76
|
+
expect(parser.failures_output).to eq (@shortened_fail_summary)
|
77
77
|
end
|
78
78
|
it "should be able to handle test exe with no output and put just failed as failure message" do
|
79
79
|
parser = Guard::Cunit::CunitParser.new()
|
80
80
|
parser.parse_output(nil)
|
81
|
-
parser.failures_output.
|
81
|
+
expect(parser.failures_output).to eq ("Failed")
|
82
82
|
end
|
83
83
|
end
|
data/spec/guard_cunit_spec.rb
CHANGED
@@ -25,7 +25,9 @@ describe Guard::Cunit do
|
|
25
25
|
Guard::setup({:no_interactions => true})
|
26
26
|
@@first = false
|
27
27
|
else
|
28
|
-
Guard
|
28
|
+
options = ::Guard.state.session.evaluator_options
|
29
|
+
evaluator = ::Guard::Guardfile::Evaluator.new(options)
|
30
|
+
evaluator.evaluate
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -33,8 +35,8 @@ describe Guard::Cunit do
|
|
33
35
|
Dir.chdir(@work_dir)
|
34
36
|
tmp_work_dir=@tmp_env.create_tmp_prj_dir
|
35
37
|
Dir.chdir((tmp_work_dir))
|
36
|
-
Guard::UI.
|
37
|
-
IO.
|
38
|
+
allow(Guard::UI).to receive(:info)
|
39
|
+
allow(IO).to receive(:popen)
|
38
40
|
end
|
39
41
|
|
40
42
|
after(:each) do
|
@@ -43,7 +45,7 @@ describe Guard::Cunit do
|
|
43
45
|
end
|
44
46
|
|
45
47
|
it "should inherit Guard class" do
|
46
|
-
|
48
|
+
expect(Guard::Cunit.ancestors).to include(Guard::Plugin)
|
47
49
|
end
|
48
50
|
|
49
51
|
context "Run guard" do
|
@@ -64,9 +66,8 @@ describe Guard::Cunit do
|
|
64
66
|
it "should run build on changes " do
|
65
67
|
|
66
68
|
cguard = Guard::Cunit.new
|
67
|
-
cguard.
|
68
|
-
Guard::UI.
|
69
|
-
|
69
|
+
expect(cguard).to receive(:run_all).and_return(true)
|
70
|
+
expect(Guard::UI).to receive(:info).with("Process changes in #{File.basename(Dir.getwd)}")
|
70
71
|
cguard.run_on_change("#{File.basename(Dir.getwd)}")
|
71
72
|
|
72
73
|
end
|
@@ -78,13 +79,12 @@ describe Guard::Cunit do
|
|
78
79
|
popen_successfull_fake("make clean")
|
79
80
|
popen_successfull_fake("make 2>&1")
|
80
81
|
fake_test_exe("./jiji",:pass)
|
81
|
-
|
82
82
|
cguard = Guard::Cunit::Runner.new
|
83
83
|
setup_guard
|
84
84
|
cguard.run
|
85
85
|
newenv =get_ld_path
|
86
|
-
newenv.
|
87
|
-
|
86
|
+
expect(newenv).to include("#{oldenv}")
|
87
|
+
expect(newenv).to include("#{Dir.getwd}")
|
88
88
|
get_ld_path=oldenv
|
89
89
|
end
|
90
90
|
|
@@ -101,8 +101,8 @@ describe Guard::Cunit do
|
|
101
101
|
setup_guard
|
102
102
|
cguard.run
|
103
103
|
newenv =get_ld_path
|
104
|
-
newenv.
|
105
|
-
|
104
|
+
expect(newenv).to include("#{oldenv}")
|
105
|
+
expect(newenv).to include("#{File.join(Dir.getwd,"lib")}")
|
106
106
|
get_ld_path=oldenv
|
107
107
|
end
|
108
108
|
|
@@ -141,7 +141,7 @@ describe Guard::Cunit do
|
|
141
141
|
popen_successfull_fake("./make_all.sh")
|
142
142
|
popen_successfull_fake("./clean_all.sh")
|
143
143
|
cguard = Guard::Cunit::Runner.new
|
144
|
-
|
144
|
+
setup_guard
|
145
145
|
cguard.run
|
146
146
|
|
147
147
|
end
|
@@ -156,7 +156,7 @@ describe Guard::Cunit do
|
|
156
156
|
popen_failing_fake("make 2>&1")
|
157
157
|
cguard = Guard::Cunit::Runner.new
|
158
158
|
setup_guard
|
159
|
-
cguard.run.
|
159
|
+
expect(cguard.run).to eq false
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should block further tasks on build failed" do
|
@@ -165,11 +165,11 @@ describe Guard::Cunit do
|
|
165
165
|
popen_failing_fake("make 2>&1")
|
166
166
|
f = File.new("./jiji", "w+", 0666)
|
167
167
|
f.close
|
168
|
-
IO.
|
169
|
-
IO.
|
168
|
+
allow(IO).to receive(:popen).with("jiji".split << {:err=>[:child, :out]})
|
169
|
+
expect(IO).not_to receive(:popen).with("jiji".split << {:err=>[:child, :out]})
|
170
170
|
cguard = Guard::Cunit::Runner.new
|
171
171
|
setup_guard
|
172
|
-
cguard.run.
|
172
|
+
expect(cguard.run).to eq false
|
173
173
|
end
|
174
174
|
|
175
175
|
|
@@ -180,7 +180,7 @@ describe Guard::Cunit do
|
|
180
180
|
fake_test_exe("./jiji",:fail)
|
181
181
|
cguard = Guard::Cunit::Runner.new
|
182
182
|
setup_guard
|
183
|
-
cguard.run.
|
183
|
+
expect(cguard.run).to eq false
|
184
184
|
end
|
185
185
|
|
186
186
|
end
|
@@ -189,9 +189,9 @@ describe Guard::Cunit do
|
|
189
189
|
context "Displaying notifications" do
|
190
190
|
|
191
191
|
it "should display failure if build fails" do
|
192
|
-
Guard::Notifier.
|
192
|
+
allow(Guard::Notifier).to receive(:notify)
|
193
193
|
guardfile_has_unit_test_exe()
|
194
|
-
Guard::Notifier.
|
194
|
+
allow(Guard::Notifier).to receive(:notify).with("Failed", :title => "Build Failed", :image => :failed, :priority => 2)
|
195
195
|
popen_successfull_fake("make clean")
|
196
196
|
popen_failing_fake("make 2>&1")
|
197
197
|
cguard = Guard::Cunit::Runner.new
|
@@ -200,10 +200,10 @@ describe Guard::Cunit do
|
|
200
200
|
end
|
201
201
|
|
202
202
|
it "should display failure if test fails" do
|
203
|
-
IO.
|
204
|
-
Guard::Notifier.
|
203
|
+
allow(IO).to receive(:popen)
|
204
|
+
allow(Guard::Notifier).to receive(:notify)
|
205
205
|
guardfile_has_unit_test_exe(:test_exe=>"jiji")
|
206
|
-
Guard::Notifier.
|
206
|
+
allow(Guard::Notifier).to receive(:notify).with( anything(), :title => "Test Failed", :image => :failed, :priority => 2 )
|
207
207
|
popen_successfull_fake("make clean")
|
208
208
|
popen_successfull_fake("make 2>&1")
|
209
209
|
fake_test_exe("./jiji",:fail)
|
@@ -213,9 +213,9 @@ describe Guard::Cunit do
|
|
213
213
|
end
|
214
214
|
|
215
215
|
it "should display pending if test is absent" do
|
216
|
-
Guard::Notifier.
|
216
|
+
allow(Guard::Notifier).to receive(:notify)
|
217
217
|
guardfile_has_unit_test_exe()
|
218
|
-
Guard::Notifier.
|
218
|
+
allow(Guard::Notifier).to receive(:notify).with("Pending", :title => "Test Not Defined", :image => :pending, :priority => 2)
|
219
219
|
popen_successfull_fake("make clean")
|
220
220
|
popen_successfull_fake("make 2>&1")
|
221
221
|
cguard = Guard::Cunit::Runner.new
|
@@ -224,14 +224,14 @@ describe Guard::Cunit do
|
|
224
224
|
end
|
225
225
|
|
226
226
|
it "should display success if build and test succeeded" do
|
227
|
-
Guard::Notifier.
|
227
|
+
allow(Guard::Notifier).to receive(:notify)
|
228
228
|
guardfile_has_unit_test_exe()
|
229
|
-
Guard::Notifier.
|
229
|
+
allow(Guard::Notifier).to receive(:notify).with("Success", :title => "Test Passed", :image => :success, :priority => 2)
|
230
230
|
popen_successfull_fake("make clean")
|
231
231
|
popen_successfull_fake("make 2>&1")
|
232
232
|
fake_test_exe(nil,:pass)
|
233
233
|
cguard = Guard::Cunit::Runner.new
|
234
|
-
Guard.
|
234
|
+
Guard.state.session.plugins.add('cunit', Hash.new)
|
235
235
|
cguard.run
|
236
236
|
end
|
237
237
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,10 +2,12 @@ require 'rubygems'
|
|
2
2
|
require 'fileutils'
|
3
3
|
require 'pathname'
|
4
4
|
require 'guard'
|
5
|
+
require 'guard/commander'
|
5
6
|
require 'guard/cunit'
|
6
7
|
require 'guard/cunit/runner'
|
7
8
|
require 'guard/cunit/cunit_parser'
|
8
9
|
require 'rspec'
|
10
|
+
require 'pry_debug'
|
9
11
|
|
10
12
|
# a class to set/cleanup environment for fake project
|
11
13
|
class TempPrjEnv
|
@@ -59,11 +61,11 @@ def popen_fake(fakename,exp_result)
|
|
59
61
|
pipe_args = fakename.split << {:err=>[:child, :out]}
|
60
62
|
end
|
61
63
|
|
62
|
-
IO.
|
64
|
+
allow(IO).to receive(:popen).with(pipe_args)
|
63
65
|
if exp_result == false
|
64
|
-
IO.
|
66
|
+
expect(IO).to receive(:popen).with(pipe_args) { fake_script(1) }
|
65
67
|
else
|
66
|
-
IO.
|
68
|
+
expect(IO).to receive(:popen).with(pipe_args) { fake_script(0) }
|
67
69
|
end
|
68
70
|
end
|
69
71
|
|
metadata
CHANGED
@@ -1,75 +1,88 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-cunit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Tea Cup On Rocking Chair
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: guard
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
23
17
|
none: false
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
|
29
|
-
- 1
|
30
|
-
- 1
|
31
|
-
version: "1.1"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.1'
|
22
|
+
type: :runtime
|
32
23
|
prerelease: false
|
33
|
-
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
type: :development
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
25
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.1'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: guard-compat
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.1'
|
38
|
+
type: :runtime
|
46
39
|
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.1'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
47
|
name: bundler
|
48
|
-
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
type: :development
|
51
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
52
49
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
58
|
-
- 0
|
59
|
-
version: "0"
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
60
55
|
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
61
63
|
name: rspec
|
62
|
-
|
63
|
-
|
64
|
-
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Guard Cunit should automatically build your C project and run CUnit based
|
79
|
+
tests
|
80
|
+
email:
|
65
81
|
- strandjata@gmail.com
|
66
82
|
executables: []
|
67
|
-
|
68
83
|
extensions: []
|
69
|
-
|
70
84
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
85
|
+
files:
|
73
86
|
- .travis.yml
|
74
87
|
- CHANGELOG.md
|
75
88
|
- Gemfile
|
@@ -87,36 +100,29 @@ files:
|
|
87
100
|
- spec/spec_helper.rb
|
88
101
|
homepage: http://teacup-on-rockingchair.github.com/guard-cunit/
|
89
102
|
licenses: []
|
90
|
-
|
91
103
|
post_install_message:
|
92
104
|
rdoc_options: []
|
93
|
-
|
94
|
-
require_paths:
|
105
|
+
require_paths:
|
95
106
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
108
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
|
103
|
-
- 0
|
104
|
-
version: "0"
|
105
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
114
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
111
|
-
segments:
|
112
|
-
- 0
|
113
|
-
version: "0"
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
114
119
|
requirements: []
|
115
|
-
|
116
120
|
rubyforge_project: guard-cunit
|
117
|
-
rubygems_version: 1.8.
|
121
|
+
rubygems_version: 1.8.23
|
118
122
|
signing_key:
|
119
123
|
specification_version: 3
|
120
124
|
summary: Guard gem for CUnit-driven projects
|
121
|
-
test_files:
|
122
|
-
|
125
|
+
test_files:
|
126
|
+
- spec/guard_cunit_parser_spec.rb
|
127
|
+
- spec/guard_cunit_spec.rb
|
128
|
+
- spec/spec_helper.rb
|