fudge 0.6.1 → 0.6.3
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.
- checksums.yaml +7 -0
- data/bin/fudge +0 -1
- data/lib/fudge/build.rb +0 -2
- data/lib/fudge/tasks.rb +1 -0
- data/lib/fudge/tasks/cucumber.rb +58 -0
- data/lib/fudge/version.rb +1 -1
- data/spec/lib/fudge/build_spec.rb +13 -15
- data/spec/lib/fudge/cli_spec.rb +29 -30
- data/spec/lib/fudge/description_spec.rb +37 -36
- data/spec/lib/fudge/exceptions_spec.rb +2 -2
- data/spec/lib/fudge/formatters/simple_spec.rb +31 -32
- data/spec/lib/fudge/output_checker_spec.rb +9 -9
- data/spec/lib/fudge/parser_spec.rb +2 -2
- data/spec/lib/fudge/runner_spec.rb +10 -10
- data/spec/lib/fudge/tasks/brakeman_spec.rb +2 -3
- data/spec/lib/fudge/tasks/bundler_spec.rb +4 -5
- data/spec/lib/fudge/tasks/cane_spec.rb +11 -11
- data/spec/lib/fudge/tasks/composite_task_spec.rb +9 -9
- data/spec/lib/fudge/tasks/cucumber_spec.rb +38 -0
- data/spec/lib/fudge/tasks/each_directory_spec.rb +9 -9
- data/spec/lib/fudge/tasks/flay_spec.rb +5 -6
- data/spec/lib/fudge/tasks/flog_spec.rb +9 -9
- data/spec/lib/fudge/tasks/in_directory_spec.rb +3 -3
- data/spec/lib/fudge/tasks/rake_spec.rb +2 -2
- data/spec/lib/fudge/tasks/rspec_spec.rb +12 -13
- data/spec/lib/fudge/tasks/shell_spec.rb +19 -22
- data/spec/lib/fudge/tasks/sub_process_spec.rb +20 -20
- data/spec/lib/fudge/tasks/task_spec.rb +20 -20
- data/spec/lib/fudge/tasks/yard_spec.rb +3 -3
- data/spec/lib/fudge/tasks_spec.rb +4 -4
- data/spec/lib/fudge/with_directory_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/dummy_task.rb +1 -1
- metadata +120 -146
- data/lib/fudge/version.rb.orig +0 -8
@@ -5,7 +5,6 @@ describe Fudge::Tasks::Flay do
|
|
5
5
|
|
6
6
|
it_should_behave_like 'bundle aware'
|
7
7
|
|
8
|
-
|
9
8
|
let(:output_good) do
|
10
9
|
<<-EOF
|
11
10
|
Total score (lower is better) = 0
|
@@ -19,15 +18,15 @@ EOF
|
|
19
18
|
end
|
20
19
|
|
21
20
|
describe '#run' do
|
22
|
-
it
|
21
|
+
it 'runs flay on the codebase' do
|
23
22
|
expect(subject).to run_command "flay --diff `find . | grep --color=never -e '\\.rb$'`"
|
24
23
|
end
|
25
24
|
|
26
25
|
context 'with :exclude => pattern' do
|
27
|
-
subject {described_class.new :
|
26
|
+
subject { described_class.new exclude: 'spec/' }
|
28
27
|
|
29
28
|
# Test doesn't check result :(
|
30
|
-
it
|
29
|
+
it 'filters out the pattern' do
|
31
30
|
cmd = "flay --diff `find . | grep --color=never -e '\\.rb$' | grep --color=never -v -E 'spec/'`"
|
32
31
|
expect(subject).to run_command cmd
|
33
32
|
end
|
@@ -38,10 +37,10 @@ EOF
|
|
38
37
|
|
39
38
|
context 'when :max score is supplied' do
|
40
39
|
it 'fails when score is higher than max' do
|
41
|
-
task = described_class.new :
|
40
|
+
task = described_class.new max: 99
|
42
41
|
expect(task).not_to succeed_with_output output_bad
|
43
42
|
|
44
|
-
task = described_class.new :
|
43
|
+
task = described_class.new max: 100
|
45
44
|
expect(task).to succeed_with_output output_bad
|
46
45
|
end
|
47
46
|
end
|
@@ -46,24 +46,24 @@ EOF
|
|
46
46
|
end
|
47
47
|
|
48
48
|
describe '#run' do
|
49
|
-
it
|
49
|
+
it 'runs flog on the codebase' do
|
50
50
|
expect(subject).to run_command "flog `find . | grep --color=never -e '\\.rb$'`"
|
51
51
|
end
|
52
52
|
|
53
53
|
context 'with :exclude => pattern' do
|
54
|
-
subject {described_class.new :
|
54
|
+
subject { described_class.new exclude: 'spec/' }
|
55
55
|
|
56
56
|
# Test doesn't check result :(
|
57
|
-
it
|
57
|
+
it 'filters out the pattern' do
|
58
58
|
with_pattern = "flog `find . | grep --color=never -e '\\.rb$' | grep --color=never -v -E 'spec/'`"
|
59
59
|
expect(subject).to run_command with_pattern
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'with :methods => true' do
|
64
|
-
subject {described_class.new :
|
64
|
+
subject { described_class.new methods: true }
|
65
65
|
|
66
|
-
it
|
66
|
+
it 'runs with methods only flag' do
|
67
67
|
with_pattern = "flog -m `find . | grep --color=never -e '\\.rb$'`"
|
68
68
|
expect(subject).to run_command with_pattern
|
69
69
|
end
|
@@ -76,20 +76,20 @@ EOF
|
|
76
76
|
|
77
77
|
context 'when :max score is supplied' do
|
78
78
|
it 'fails when score is higher than max' do
|
79
|
-
task = described_class.new :
|
79
|
+
task = described_class.new max: 9.9
|
80
80
|
expect(task).not_to succeed_with_output output_good
|
81
81
|
|
82
|
-
task = described_class.new :
|
82
|
+
task = described_class.new max: 10.0
|
83
83
|
expect(task).to succeed_with_output output_good
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
context 'when :average score is supplied' do
|
88
88
|
it 'fails when average is higher than :average' do
|
89
|
-
task = described_class.new :
|
89
|
+
task = described_class.new average: 4.9
|
90
90
|
expect(task).not_to succeed_with_output output_good
|
91
91
|
|
92
|
-
task = described_class.new :
|
92
|
+
task = described_class.new average: 5.0
|
93
93
|
expect(task).to succeed_with_output output_good
|
94
94
|
end
|
95
95
|
end
|
@@ -6,7 +6,7 @@ class TestInDirectoryTask
|
|
6
6
|
:test_in_directory
|
7
7
|
end
|
8
8
|
|
9
|
-
def run(
|
9
|
+
def run(_options = {})
|
10
10
|
self.pwd = FileUtils.pwd
|
11
11
|
end
|
12
12
|
end
|
@@ -17,7 +17,7 @@ describe Fudge::Tasks::InDirectory do
|
|
17
17
|
it { is_expected.to be_registered_as :in_directory }
|
18
18
|
|
19
19
|
describe '#initialize' do
|
20
|
-
it
|
20
|
+
it 'should take a directory as first argument' do
|
21
21
|
expect { described_class.new }.to raise_error ArgumentError
|
22
22
|
end
|
23
23
|
end
|
@@ -30,7 +30,7 @@ describe Fudge::Tasks::InDirectory do
|
|
30
30
|
subject.tasks << task
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
33
|
+
it 'should change to the given directory and run child tasks' do
|
34
34
|
subject.run
|
35
35
|
|
36
36
|
expect(task.pwd).to eq(path)
|
@@ -5,13 +5,13 @@ describe Fudge::Tasks::Rake do
|
|
5
5
|
it { is_expected.to be_a Fudge::Tasks::Shell }
|
6
6
|
|
7
7
|
describe '#run' do
|
8
|
-
it
|
8
|
+
it 'should be rake by default' do
|
9
9
|
expect(subject).to run_command 'rake '
|
10
10
|
end
|
11
11
|
|
12
12
|
it_should_behave_like 'bundle aware'
|
13
13
|
|
14
|
-
it
|
14
|
+
it 'should add any arguments given' do
|
15
15
|
expect(described_class.new('db:migrate')).to run_command 'rake db:migrate'
|
16
16
|
end
|
17
17
|
end
|
@@ -4,38 +4,37 @@ describe Fudge::Tasks::Rspec do
|
|
4
4
|
it { is_expected.to be_registered_as :rspec }
|
5
5
|
|
6
6
|
describe '#run' do
|
7
|
-
it
|
7
|
+
it 'should turn on color if not specified' do
|
8
8
|
expect(subject).to run_command /--tty/
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
12
|
-
expect(described_class.new(:
|
11
|
+
it 'should turn off color if specified' do
|
12
|
+
expect(described_class.new(color: false)).not_to run_command /--tty/
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
16
|
-
task = described_class.new('foobar', :
|
15
|
+
it 'should append any arguments passed in' do
|
16
|
+
task = described_class.new('foobar', color: false)
|
17
17
|
expect(task).to run_command 'rspec foobar'
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
expect(described_class.new(:
|
20
|
+
it 'should default the arguments to spec/' do
|
21
|
+
expect(described_class.new(color: false)).to run_command 'rspec spec/'
|
22
22
|
end
|
23
|
-
|
24
23
|
end
|
25
24
|
|
26
25
|
it_should_behave_like 'bundle aware'
|
27
26
|
|
28
27
|
describe '#coverage' do
|
29
|
-
subject { described_class.new :
|
28
|
+
subject { described_class.new coverage: 99 }
|
30
29
|
|
31
30
|
it { is_expected.not_to succeed_with_output 'some dummy output with no coverage' }
|
32
31
|
it { is_expected.not_to succeed_with_output '98.99999%) covered' }
|
33
32
|
it { is_expected.not_to succeed_with_output '0.00%) covered' }
|
34
33
|
it { is_expected.to succeed_with_output '99.99999%) covered' }
|
35
34
|
it { is_expected.to succeed_with_output '100.0%) covered' }
|
36
|
-
it { is_expected.to succeed_with_output "\n0 examples, 0 failures"}
|
37
|
-
it { is_expected.to succeed_with_output "No examples found.\n\n\nFinished in 0.00006 seconds\n\e[32m0 examples, 0 failures\e[0m\n"}
|
38
|
-
it { is_expected.to succeed_with_output "Finished in 0.1 seconds\n70 examples, 0 failures\n700 / 700 LOC (100.0%) covered."}
|
39
|
-
it { is_expected.not_to succeed_with_output "Finished in 0.6 seconds\n70 examples, 0 failures\n384 / 700 LOC (54.86%) covered."}
|
35
|
+
it { is_expected.to succeed_with_output "\n0 examples, 0 failures" }
|
36
|
+
it { is_expected.to succeed_with_output "No examples found.\n\n\nFinished in 0.00006 seconds\n\e[32m0 examples, 0 failures\e[0m\n" }
|
37
|
+
it { is_expected.to succeed_with_output "Finished in 0.1 seconds\n70 examples, 0 failures\n700 / 700 LOC (100.0%) covered." }
|
38
|
+
it { is_expected.not_to succeed_with_output "Finished in 0.6 seconds\n70 examples, 0 failures\n384 / 700 LOC (54.86%) covered." }
|
40
39
|
end
|
41
40
|
end
|
@@ -2,63 +2,60 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Fudge::Tasks::Shell do
|
4
4
|
describe '#run' do
|
5
|
-
it
|
5
|
+
it 'should take a command and run it' do
|
6
6
|
expect(described_class.new(:ls)).to run_command 'ls'
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
9
|
+
it 'should add any arguments given' do
|
10
10
|
expect(described_class.new(:ls, '-l', '-a')).to run_command 'ls -l -a'
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'should return false for an unsuccessful command' do
|
14
14
|
expect(described_class.new(:ls, '--newnre').run).to be_falsey
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it 'should return true for a successful command' do
|
18
18
|
expect(described_class.new(:ls).run).to be_truthy
|
19
19
|
end
|
20
20
|
|
21
|
-
context
|
22
|
-
|
21
|
+
context 'when there is an formatter passed to run' do
|
23
22
|
let(:output) { StringIO.new }
|
24
23
|
let(:formatter) { Fudge::Formatters::Simple.new(output) }
|
25
24
|
subject { described_class.new('echo foo') }
|
26
25
|
|
27
|
-
it
|
28
|
-
|
29
|
-
subject.run :formatter => formatter
|
26
|
+
it 'prints messages to the formatter instead of default' do
|
27
|
+
subject.run formatter: formatter
|
30
28
|
|
31
29
|
expect(output.string).not_to be_empty
|
32
|
-
expect(output.string).to include
|
30
|
+
expect(output.string).to include 'foo'
|
33
31
|
end
|
34
32
|
|
35
33
|
it 'uses the formatter when reporting checks on build result' do
|
36
34
|
checker = double.as_null_object
|
37
35
|
expect(Fudge::OutputChecker).to receive(:new).with(anything, formatter) { checker }
|
38
|
-
subject.run :
|
36
|
+
subject.run formatter: formatter
|
39
37
|
end
|
40
|
-
|
41
38
|
end
|
42
39
|
end
|
43
40
|
|
44
41
|
describe '#check_for' do
|
45
|
-
context
|
46
|
-
subject { described_class.new(:ls, :
|
42
|
+
context 'with no callable to check the matches' do
|
43
|
+
subject { described_class.new(:ls, check_for: /4 files found/) }
|
47
44
|
|
48
|
-
it { is_expected.to succeed_with_output
|
49
|
-
it { is_expected.not_to succeed_with_output
|
45
|
+
it { is_expected.to succeed_with_output 'Hello there were 4 files found.' }
|
46
|
+
it { is_expected.not_to succeed_with_output 'Hellow there were 5 files found.' }
|
50
47
|
end
|
51
48
|
|
52
|
-
context
|
53
|
-
let(:file_count_matcher) {
|
49
|
+
context 'with a callable to check the matches' do
|
50
|
+
let(:file_count_matcher) { ->(matches) { matches[1].to_i >= 4 } }
|
54
51
|
subject do
|
55
52
|
described_class.new :ls,
|
56
|
-
|
53
|
+
check_for: [/(\d+) files found/, file_count_matcher]
|
57
54
|
end
|
58
55
|
|
59
|
-
it { is_expected.not_to succeed_with_output
|
60
|
-
it { is_expected.to succeed_with_output
|
61
|
-
it { is_expected.to succeed_with_output
|
56
|
+
it { is_expected.not_to succeed_with_output 'Hello there were 3 files found.' }
|
57
|
+
it { is_expected.to succeed_with_output 'Hello there were 4 files found.' }
|
58
|
+
it { is_expected.to succeed_with_output 'Hellow there were 5 files found.' }
|
62
59
|
end
|
63
60
|
end
|
64
61
|
end
|
@@ -6,25 +6,25 @@ describe Fudge::Tasks::SubProcess do
|
|
6
6
|
let(:formatter) { Fudge::Formatters::Simple.new(output) }
|
7
7
|
|
8
8
|
describe '#run' do
|
9
|
-
it
|
9
|
+
it 'takes a command and runs it' do
|
10
10
|
expect(described_class.new(:ls)).to run_command [{}, 'ls', {}]
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'adds any arguments given' do
|
14
14
|
expect(described_class.new(:ls, '-l', '-a')).to run_command [{}, 'ls', '-l', '-a', {}]
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it 'returns false for an unsuccessful command' do
|
18
18
|
expect(described_class.new(:ls, '--newnre').run).to be_falsey
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'returns true for a successful command' do
|
22
22
|
expect(described_class.new(:ls).run).to be_truthy
|
23
23
|
end
|
24
24
|
|
25
|
-
context
|
26
|
-
context
|
27
|
-
it
|
25
|
+
context 'when given environment variables' do
|
26
|
+
context 'when the task is created' do
|
27
|
+
it 'passes the variables to the sub-process' do
|
28
28
|
process = described_class.new(%(ruby -e "puts ENV['PATH'];puts ENV['FOO']"), environment: { 'FOO' => 'bar' })
|
29
29
|
|
30
30
|
process.run(formatter: formatter)
|
@@ -33,8 +33,8 @@ describe Fudge::Tasks::SubProcess do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
context
|
37
|
-
it
|
36
|
+
context 'when the task is run' do
|
37
|
+
it 'passes the variables to the sub-process' do
|
38
38
|
process = described_class.new(%(ruby -e "puts ENV['PATH'];puts ENV['FOO']"))
|
39
39
|
|
40
40
|
process.run(formatter: formatter, environment: { 'FOO' => 'bar' })
|
@@ -43,8 +43,8 @@ describe Fudge::Tasks::SubProcess do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
context
|
47
|
-
it
|
46
|
+
context 'when the task is created and when it is run' do
|
47
|
+
it 'gives priority to the variables passed in on run' do
|
48
48
|
process = described_class.new(%(ruby -e "puts ENV['FOO'];puts ENV['BAZ']"),
|
49
49
|
environment: { 'FOO' => 'bar', 'BAZ' => 'quux' })
|
50
50
|
|
@@ -55,8 +55,8 @@ describe Fudge::Tasks::SubProcess do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
context
|
59
|
-
it
|
58
|
+
context 'when not given an environment variable' do
|
59
|
+
it 'does not make that variable available to the sub-process' do
|
60
60
|
process = described_class.new(%(ruby -e "puts ENV['FOO']"))
|
61
61
|
|
62
62
|
process.run(formatter: formatter)
|
@@ -65,9 +65,9 @@ describe Fudge::Tasks::SubProcess do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
context
|
69
|
-
context
|
70
|
-
it
|
68
|
+
context 'when given spawn options' do
|
69
|
+
context 'when the task is created' do
|
70
|
+
it 'applies those options to the sub-process' do
|
71
71
|
process = described_class.new(%(ruby -e "puts ENV['PATH'];puts ENV['FOO']"),
|
72
72
|
environment: { 'FOO' => 'bar' },
|
73
73
|
spawn_options: { unsetenv_others: true }) # Should clear environment variables
|
@@ -78,8 +78,8 @@ describe Fudge::Tasks::SubProcess do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
context
|
82
|
-
it
|
81
|
+
context 'when the task is run' do
|
82
|
+
it 'applies those options to the sub-process' do
|
83
83
|
process = described_class.new(%(ruby -e "puts ENV['PATH'];puts ENV['FOO']"),
|
84
84
|
environment: { 'FOO' => 'bar' })
|
85
85
|
|
@@ -89,8 +89,8 @@ describe Fudge::Tasks::SubProcess do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
context
|
93
|
-
it
|
92
|
+
context 'when the task is created and when it is run' do
|
93
|
+
it 'gives priority to the options passed in on run' do
|
94
94
|
process = described_class.new(%(ruby -e "puts ENV['PATH'];puts ENV['FOO']"),
|
95
95
|
environment: { 'FOO' => 'bar' },
|
96
96
|
spawn_options: { unsetenv_others: true }) # Clear environment variables
|
@@ -4,7 +4,7 @@ class MyTask < Fudge::Tasks::Task
|
|
4
4
|
attr_accessor :cod
|
5
5
|
|
6
6
|
attr_accessor :_methods_missing
|
7
|
-
def method_missing(method, *
|
7
|
+
def method_missing(method, *_args)
|
8
8
|
(@_methods_missing ||= []).push(method)
|
9
9
|
end
|
10
10
|
end
|
@@ -16,56 +16,56 @@ end
|
|
16
16
|
|
17
17
|
describe Fudge::Tasks::Task do
|
18
18
|
describe :initialize do
|
19
|
-
context
|
20
|
-
it
|
19
|
+
context 'given arguments' do
|
20
|
+
it 'accepts and stores the arguments' do
|
21
21
|
task = MyTask.new :foo, :bar, :baz
|
22
22
|
expect(task.args).to match_array [:foo, :bar, :baz]
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
context
|
27
|
-
let
|
26
|
+
context 'given options' do
|
27
|
+
let(:task) { MyTask.new cod: 'fanglers' }
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'accepts and sets the options' do
|
30
30
|
expect(task.cod).to eq 'fanglers'
|
31
31
|
end
|
32
32
|
|
33
|
-
it
|
34
|
-
expect(task.options).to eq(
|
33
|
+
it 'accepts and stores the options' do
|
34
|
+
expect(task.options).to eq(cod: 'fanglers')
|
35
35
|
end
|
36
36
|
|
37
|
-
context
|
38
|
-
let
|
37
|
+
context 'including an option that is not supported' do
|
38
|
+
let(:task) { MyTask.new cod: 'fanglers', foo: 'bar' }
|
39
39
|
|
40
|
-
it
|
40
|
+
it 'ignores the unsupported options' do
|
41
41
|
expect(task._methods_missing).to be_nil
|
42
42
|
end
|
43
43
|
|
44
|
-
it
|
45
|
-
expect(task.options).to eq(
|
44
|
+
it 'stores all provided options' do
|
45
|
+
expect(task.options).to eq(cod: 'fanglers', foo: 'bar')
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
context
|
51
|
-
let
|
50
|
+
context 'given arguments and options' do
|
51
|
+
let(:task) { MyTask.new :foo, :bar, cod: 'fanglers' }
|
52
52
|
|
53
|
-
it
|
53
|
+
it 'stores the arguments separately from the options' do
|
54
54
|
expect(task.args).to match_array [:foo, :bar]
|
55
55
|
end
|
56
56
|
|
57
|
-
it
|
57
|
+
it 'applies the options' do
|
58
58
|
expect(task.cod).to eq 'fanglers'
|
59
59
|
end
|
60
60
|
|
61
|
-
it
|
62
|
-
expect(task.options).to eq(
|
61
|
+
it 'stores the options separately from the arguments' do
|
62
|
+
expect(task.options).to eq(cod: 'fanglers')
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
describe :name do
|
68
|
-
it
|
68
|
+
it 'should default to implied name from class name' do
|
69
69
|
expect(TestNamespace::SomeTask.name).to eq(:some_task)
|
70
70
|
end
|
71
71
|
end
|