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.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/bin/fudge +0 -1
  3. data/lib/fudge/build.rb +0 -2
  4. data/lib/fudge/tasks.rb +1 -0
  5. data/lib/fudge/tasks/cucumber.rb +58 -0
  6. data/lib/fudge/version.rb +1 -1
  7. data/spec/lib/fudge/build_spec.rb +13 -15
  8. data/spec/lib/fudge/cli_spec.rb +29 -30
  9. data/spec/lib/fudge/description_spec.rb +37 -36
  10. data/spec/lib/fudge/exceptions_spec.rb +2 -2
  11. data/spec/lib/fudge/formatters/simple_spec.rb +31 -32
  12. data/spec/lib/fudge/output_checker_spec.rb +9 -9
  13. data/spec/lib/fudge/parser_spec.rb +2 -2
  14. data/spec/lib/fudge/runner_spec.rb +10 -10
  15. data/spec/lib/fudge/tasks/brakeman_spec.rb +2 -3
  16. data/spec/lib/fudge/tasks/bundler_spec.rb +4 -5
  17. data/spec/lib/fudge/tasks/cane_spec.rb +11 -11
  18. data/spec/lib/fudge/tasks/composite_task_spec.rb +9 -9
  19. data/spec/lib/fudge/tasks/cucumber_spec.rb +38 -0
  20. data/spec/lib/fudge/tasks/each_directory_spec.rb +9 -9
  21. data/spec/lib/fudge/tasks/flay_spec.rb +5 -6
  22. data/spec/lib/fudge/tasks/flog_spec.rb +9 -9
  23. data/spec/lib/fudge/tasks/in_directory_spec.rb +3 -3
  24. data/spec/lib/fudge/tasks/rake_spec.rb +2 -2
  25. data/spec/lib/fudge/tasks/rspec_spec.rb +12 -13
  26. data/spec/lib/fudge/tasks/shell_spec.rb +19 -22
  27. data/spec/lib/fudge/tasks/sub_process_spec.rb +20 -20
  28. data/spec/lib/fudge/tasks/task_spec.rb +20 -20
  29. data/spec/lib/fudge/tasks/yard_spec.rb +3 -3
  30. data/spec/lib/fudge/tasks_spec.rb +4 -4
  31. data/spec/lib/fudge/with_directory_spec.rb +2 -2
  32. data/spec/spec_helper.rb +1 -1
  33. data/spec/support/dummy_task.rb +1 -1
  34. metadata +120 -146
  35. data/lib/fudge/version.rb.orig +0 -8
@@ -24,7 +24,7 @@ module Fudge::Exceptions
24
24
  it { is_expected.to be_a String }
25
25
  end
26
26
 
27
- it "should take a task name as a parameter" do
27
+ it 'should take a task name as a parameter' do
28
28
  expect { described_class.new }.to raise_error ArgumentError
29
29
  end
30
30
  end
@@ -39,7 +39,7 @@ module Fudge::Exceptions
39
39
  it { is_expected.to be_a String }
40
40
  end
41
41
 
42
- it "should take a task group name as a parameter" do
42
+ it 'should take a task group name as a parameter' do
43
43
  expect { described_class.new }.to raise_error ArgumentError
44
44
  end
45
45
  end
@@ -5,64 +5,63 @@ describe Fudge::Formatters::Simple do
5
5
 
6
6
  subject { described_class.new(stdout) }
7
7
 
8
- describe "#error" do
9
- it "returns message in RED" do
10
- string = subject.error "a message"
8
+ describe '#error' do
9
+ it 'returns message in RED' do
10
+ string = subject.error 'a message'
11
11
  expect(string).to eq("\e[31ma message\e[0m")
12
12
  end
13
13
  end
14
14
 
15
- describe "#success" do
16
- it "returns message in BRIGHT GREEN" do
17
- string = subject.success "a message"
15
+ describe '#success' do
16
+ it 'returns message in BRIGHT GREEN' do
17
+ string = subject.success 'a message'
18
18
  expect(string).to eq("\e[1m\e[32ma message\e[0m")
19
19
  end
20
20
  end
21
21
 
22
- describe "#info" do
23
- it "returns message in CYAN" do
24
- string = subject.info "a message"
22
+ describe '#info' do
23
+ it 'returns message in CYAN' do
24
+ string = subject.info 'a message'
25
25
  expect(string).to eq("\e[36ma message\e[0m")
26
26
  end
27
27
  end
28
28
 
29
- describe "#notice" do
30
- it "returns message in YELLOW" do
31
- string = subject.notice "a message"
29
+ describe '#notice' do
30
+ it 'returns message in YELLOW' do
31
+ string = subject.notice 'a message'
32
32
  expect(string).to eq("\e[33ma message\e[0m")
33
33
  end
34
34
  end
35
35
 
36
- describe "#normal" do
37
- it "returns unchanged message" do
38
- string = subject.normal "a message"
39
- expect(string).to eq("a message")
36
+ describe '#normal' do
37
+ it 'returns unchanged message' do
38
+ string = subject.normal 'a message'
39
+ expect(string).to eq('a message')
40
40
  end
41
41
  end
42
42
 
43
- describe "#puts" do
44
- it "outputs message on stdout" do
45
- subject.puts "a message"
46
- expect(stdout.string).to eq("a message" + "\n")
43
+ describe '#puts' do
44
+ it 'outputs message on stdout' do
45
+ subject.puts 'a message'
46
+ expect(stdout.string).to eq('a message' + "\n")
47
47
  end
48
48
  end
49
49
 
50
- describe "#write" do
51
- it "supports chaining types to stdout" do
50
+ describe '#write' do
51
+ it 'supports chaining types to stdout' do
52
52
  subject.write do |w|
53
- w.normal('normal').
54
- notice('notice').
55
- info('info').
56
- success('success').
57
- error('error')
53
+ w.normal('normal')
54
+ .notice('notice')
55
+ .info('info')
56
+ .success('success')
57
+ .error('error')
58
58
  end
59
59
 
60
- expect(stdout.string).to eq('normal' + ' ' +
61
- "\e[33mnotice\e[0m" + ' ' +
62
- "\e[36minfo\e[0m" + ' ' +
63
- "\e[1m\e[32msuccess\e[0m" + ' ' +
60
+ expect(stdout.string).to eq('normal' + ' ' \
61
+ "\e[33mnotice\e[0m" + ' ' \
62
+ "\e[36minfo\e[0m" + ' ' \
63
+ "\e[1m\e[32msuccess\e[0m" + ' ' \
64
64
  "\e[31merror\e[0m" + "\n")
65
-
66
65
  end
67
66
  end
68
67
  end
@@ -4,19 +4,19 @@ describe Fudge::OutputChecker do
4
4
  let(:output_io) { StringIO.new }
5
5
  let(:formatter) { Fudge::Formatters::Simple.new(output_io) }
6
6
 
7
- describe "#check" do
7
+ describe '#check' do
8
8
  subject { described_class.new(/foo/, formatter) }
9
9
 
10
- context "when the output does not match the check" do
11
- it 'send a mismatch message to the output io' do
12
- subject.check('bar')
13
- expect(output_io.string).to include "Output didn't match (?-mix:foo)."
14
- end
10
+ context 'when the output does not match the check' do
11
+ it 'send a mismatch message to the output io' do
12
+ subject.check('bar')
13
+ expect(output_io.string).to include "Output didn't match (?-mix:foo)."
14
+ end
15
15
  end
16
16
 
17
- context "with a block for checking" do
17
+ context 'with a block for checking' do
18
18
  let(:callable) do
19
- Proc.new do
19
+ proc do
20
20
  false
21
21
  end
22
22
  end
@@ -25,7 +25,7 @@ describe Fudge::OutputChecker do
25
25
  it 'sends error mesage to the output io' do
26
26
  subject.check('foo')
27
27
 
28
- expect(output_io.string).to include "Output matched (?-mix:foo) but condition failed."
28
+ expect(output_io.string).to include 'Output matched (?-mix:foo) but condition failed.'
29
29
  end
30
30
  end
31
31
  end
@@ -12,11 +12,11 @@ describe Fudge::Parser do
12
12
  end
13
13
  end
14
14
 
15
- it "should read a file and evaluate it" do
15
+ it 'should read a file and evaluate it' do
16
16
  expect(subject.parse(@path)).to be_a Fudge::Description
17
17
  end
18
18
 
19
- it "should pass the contents to the new description" do
19
+ it 'should pass the contents to the new description' do
20
20
  expect(subject.parse(@path).instance_variable_get(:@foo)).to eq(:bar)
21
21
  end
22
22
  end
@@ -10,35 +10,35 @@ describe Fudge::Runner do
10
10
  subject { described_class.new(description) }
11
11
 
12
12
  describe '#run_build' do
13
- it "should run the default task in the description" do
13
+ it 'should run the default task in the description' do
14
14
  subject.run_build
15
15
 
16
16
  expect(DummyTask.ran).to be_truthy
17
17
  end
18
18
 
19
- it "should raise an exception if the build fails" do
19
+ it 'should raise an exception if the build fails' do
20
20
  allow_any_instance_of(Fudge::Build).to receive(:run).and_return(false)
21
21
 
22
22
  expect { subject.run_build }.to raise_error Fudge::Exceptions::BuildFailed
23
23
  end
24
24
 
25
- context "when an formatter is provided" do
25
+ context 'when an formatter is provided' do
26
26
  let(:stdout) { StringIO.new }
27
27
  let(:formatter) { Fudge::Formatters::Simple.new(stdout) }
28
28
 
29
29
  before :each do
30
- subject.run_build 'default', :formatter => formatter
30
+ subject.run_build 'default', formatter: formatter
31
31
  end
32
32
 
33
- it "puts all output to given formatter instead stdout" do
33
+ it 'puts all output to given formatter instead stdout' do
34
34
  expect(stdout.string).not_to be_empty
35
- expect(stdout.string).to include "Running build"
36
- expect(stdout.string).to include "default"
37
- expect(stdout.string).to include "Build SUCCEEDED!"
35
+ expect(stdout.string).to include 'Running build'
36
+ expect(stdout.string).to include 'default'
37
+ expect(stdout.string).to include 'Build SUCCEEDED!'
38
38
  end
39
39
 
40
- it "runs the task passing the formatter down" do
41
- expect(DummyTask.run_options).to eq({:formatter => formatter})
40
+ it 'runs the task passing the formatter down' do
41
+ expect(DummyTask.run_options).to eq(formatter: formatter)
42
42
  end
43
43
  end
44
44
  end
@@ -5,7 +5,6 @@ describe Fudge::Tasks::Brakeman 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
  | Errors | 0 |
@@ -50,10 +49,10 @@ EOF
50
49
 
51
50
  context 'when :max score is supplied' do
52
51
  it 'fails when score is higher than max' do
53
- task = described_class.new :max => 0
52
+ task = described_class.new max: 0
54
53
  expect(task).not_to succeed_with_output output_bad
55
54
 
56
- task = described_class.new :max => 1
55
+ task = described_class.new max: 1
57
56
  expect(task).to succeed_with_output output_bad
58
57
  end
59
58
  end
@@ -11,12 +11,11 @@ class TestBundlerAwareTask
11
11
  end
12
12
 
13
13
  class TestNonBundlerAwareTask
14
-
15
14
  def self.name
16
15
  :test_non_bundle_aware
17
16
  end
18
17
 
19
- def run(options={})
18
+ def run(_options = {})
20
19
  true
21
20
  end
22
21
  end
@@ -28,15 +27,15 @@ describe Fudge::Tasks::CleanBundlerEnv do
28
27
  let(:bundle_aware_task) { TestBundlerAwareTask.new }
29
28
  let(:non_bundle_aware_task) { TestNonBundlerAwareTask.new }
30
29
 
31
- context "with a bundle aware task" do
32
- it "should run the bundle dependent tasks successfully" do
30
+ context 'with a bundle aware task' do
31
+ it 'should run the bundle dependent tasks successfully' do
33
32
  subject.tasks << bundle_aware_task
34
33
  subject.tasks << non_bundle_aware_task
35
34
 
36
35
  expect(subject.run).to be_truthy
37
36
  end
38
37
 
39
- it "runs each task with a clean bundle env" do
38
+ it 'runs each task with a clean bundle env' do
40
39
  expect(Bundler).to receive(:with_clean_env).and_call_original
41
40
 
42
41
  subject.tasks << bundle_aware_task
@@ -6,31 +6,31 @@ describe Fudge::Tasks::Cane do
6
6
  it_should_behave_like 'bundle aware'
7
7
 
8
8
  describe '#run' do
9
- it "runs cane on the codebase" do
10
- expect(subject).to run_command "cane"
9
+ it 'runs cane on the codebase' do
10
+ expect(subject).to run_command 'cane'
11
11
  end
12
12
 
13
13
  context 'with :doc => false' do
14
- subject {described_class.new :doc => false }
14
+ subject { described_class.new doc: false }
15
15
 
16
- it "runs with --no-doc" do
17
- expect(subject).to run_command "cane --no-doc"
16
+ it 'runs with --no-doc' do
17
+ expect(subject).to run_command 'cane --no-doc'
18
18
  end
19
19
  end
20
20
 
21
21
  context 'with :style => false' do
22
- subject {described_class.new :style => false }
22
+ subject { described_class.new style: false }
23
23
 
24
- it "runs with --no-style" do
25
- expect(subject).to run_command "cane --no-style"
24
+ it 'runs with --no-style' do
25
+ expect(subject).to run_command 'cane --no-style'
26
26
  end
27
27
  end
28
28
 
29
29
  context 'with :max_width => 100' do
30
- subject {described_class.new :max_width => 100 }
30
+ subject { described_class.new max_width: 100 }
31
31
 
32
- it "runs with --style-measure 100" do
33
- expect(subject).to run_command "cane --style-measure 100"
32
+ it 'runs with --style-measure 100' do
33
+ expect(subject).to run_command 'cane --style-measure 100'
34
34
  end
35
35
  end
36
36
 
@@ -8,7 +8,7 @@ end
8
8
  Fudge::Tasks.register(DummyTask2)
9
9
 
10
10
  describe Fudge::Tasks::CompositeTask do
11
- subject { described_class.new do; end }
11
+ subject { described_class.new { ; } }
12
12
 
13
13
  describe '#run' do
14
14
  before :each do
@@ -19,20 +19,20 @@ describe Fudge::Tasks::CompositeTask do
19
19
  allow_any_instance_of(DummyTask2).to receive(:run) { |*_| @task_two_run = true }
20
20
  end
21
21
 
22
- it "should run all tasks defined and return true if they all succeed" do
22
+ it 'should run all tasks defined and return true if they all succeed' do
23
23
  expect_any_instance_of(DummyTask).to receive(:run).and_return(true)
24
24
  expect(subject.run).to be_truthy
25
25
  expect(@task_two_run).to be_truthy
26
26
  end
27
27
 
28
- it "should return false if any of the tasks fail" do
28
+ it 'should return false if any of the tasks fail' do
29
29
  expect_any_instance_of(DummyTask).to receive(:run).and_return(false)
30
30
  expect(subject.run).to be_falsey
31
31
  expect(@task_two_run).to be_falsey
32
32
  end
33
33
  end
34
34
 
35
- describe "Using TaskDSL" do
35
+ describe 'Using TaskDSL' do
36
36
  describe '#task' do
37
37
  class AnotherCompositeTask < Fudge::Tasks::CompositeTask
38
38
  include Fudge::TaskDSL
@@ -49,15 +49,15 @@ describe Fudge::Tasks::CompositeTask do
49
49
 
50
50
  subject { AnotherCompositeTask.new }
51
51
 
52
- it "should define a task for each new instance of the composite task" do
52
+ it 'should define a task for each new instance of the composite task' do
53
53
  expect(subject).to run_command 'foo bar'
54
54
  end
55
55
 
56
- it "should support defining composite tasks" do
56
+ it 'should support defining composite tasks' do
57
57
  expect(subject.tasks[1].tasks.first).to be_a DummyTask
58
58
  end
59
59
 
60
- context "when provided an output" do
60
+ context 'when provided an output' do
61
61
  let(:output) { StringIO.new }
62
62
  let(:formatter) { Fudge::Formatters::Simple.new(output) }
63
63
 
@@ -65,8 +65,8 @@ describe Fudge::Tasks::CompositeTask do
65
65
  allow_any_instance_of(Fudge::Tasks::Shell).to receive(:run)
66
66
  end
67
67
 
68
- it "prints messages to the output instead of stdout" do
69
- subject.run :formatter => formatter
68
+ it 'prints messages to the output instead of stdout' do
69
+ subject.run formatter: formatter
70
70
 
71
71
  expect(output.string).not_to be_empty
72
72
  expect(output.string).to match /Running task.*shell.*foo, bar/
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fudge::Tasks::Cucumber do
4
+ it { is_expected.to be_registered_as :cucumber }
5
+
6
+ describe '#run' do
7
+ it 'turns on color if not specified' do
8
+ expect(subject).to run_command /--color/
9
+ end
10
+
11
+ it 'turns off color if specified' do
12
+ expect(described_class.new(color: false)).not_to run_command /--color/
13
+ end
14
+
15
+ it 'appends any arguments passed in' do
16
+ task = described_class.new('foobar', color: false)
17
+ expect(task).to run_command 'cucumber foobar'
18
+ end
19
+
20
+ it 'should default the arguments to spec/' do
21
+ expect(described_class.new(color: false)).to run_command 'cucumber features/'
22
+ end
23
+ end
24
+
25
+ it_should_behave_like 'bundle aware'
26
+
27
+ describe '#coverage' do
28
+ subject { described_class.new coverage: 99 }
29
+
30
+ it { is_expected.not_to succeed_with_output 'some dummy output with no coverage' }
31
+ it { is_expected.not_to succeed_with_output '98.99999%) covered' }
32
+ it { is_expected.not_to succeed_with_output '0.00%) covered' }
33
+ it { is_expected.to succeed_with_output '99.99999%) covered' }
34
+ it { is_expected.to succeed_with_output '100.0%) covered' }
35
+ it { is_expected.to succeed_with_output "Finished in 0.1 seconds\n70 examples, 0 failures\n700 / 700 LOC (100.0%) covered." }
36
+ it { is_expected.not_to succeed_with_output "Finished in 0.6 seconds\n70 examples, 0 failures\n384 / 700 LOC (54.86%) covered." }
37
+ end
38
+ end
@@ -6,7 +6,7 @@ class TestEachDirectoryTask
6
6
  :test_each_directory
7
7
  end
8
8
 
9
- def run(options={})
9
+ def run(_options = {})
10
10
  (self.pwds ||= []) << FileUtils.pwd
11
11
  end
12
12
  end
@@ -17,7 +17,7 @@ describe Fudge::Tasks::EachDirectory do
17
17
  it { is_expected.to be_registered_as :each_directory }
18
18
 
19
19
  describe '#initialize' do
20
- it "should take a directory pattern as first argument" do
20
+ it 'should take a directory pattern as first argument' do
21
21
  expect { described_class.new }.to raise_error ArgumentError
22
22
  end
23
23
  end
@@ -33,35 +33,35 @@ describe Fudge::Tasks::EachDirectory do
33
33
  subject.tasks << task
34
34
  end
35
35
 
36
- it "should change to the given directories and run child tasks" do
36
+ it 'should change to the given directories and run child tasks' do
37
37
  subject.run
38
38
 
39
39
  expect(task.pwds).to eq(dirs)
40
40
  end
41
41
 
42
- it "should allow explicit specification of directories through an array" do
43
- ed2 = described_class.new ["spec/lib","spec/support"]
42
+ it 'should allow explicit specification of directories through an array' do
43
+ ed2 = described_class.new ['spec/lib', 'spec/support']
44
44
  ed2.tasks << task
45
45
  ed2.run
46
46
  expect(task.pwds).to eq(dirs.sort)
47
47
  end
48
48
 
49
- it "should respect the order of the directories as specified" do
50
- ed2 = described_class.new ["spec/support","spec/lib"]
49
+ it 'should respect the order of the directories as specified' do
50
+ ed2 = described_class.new ['spec/support', 'spec/lib']
51
51
  ed2.tasks << task
52
52
  ed2.run
53
53
  expect(task.pwds).not_to eq(dirs.sort)
54
54
  expect(task.pwds.sort).to eq(dirs.sort)
55
55
  end
56
56
 
57
- it "should load fudge_settings.yml in the right directory" do
57
+ it 'should load fudge_settings.yml in the right directory' do
58
58
  ed2 = described_class.new ['spec/lib']
59
59
  ed2.tasks << Fudge::Tasks::Shell.new('pwd')
60
60
  ed2.run
61
61
  expect(ed2.tasks.first.options[:test]).to eq('coverage')
62
62
  end
63
63
 
64
- it "should not load fudge_settings.yml in the wrong directory" do
64
+ it 'should not load fudge_settings.yml in the wrong directory' do
65
65
  ed2 = described_class.new ['spec/support']
66
66
  ed2.tasks << Fudge::Tasks::Shell.new('pwd')
67
67
  ed2.run