test_notifier 0.3.0 → 0.3.1

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.
data/lib/test_notifier.rb CHANGED
@@ -16,7 +16,8 @@ module TestNotifier
16
16
 
17
17
  TITLES = {
18
18
  :fail => "Failed!",
19
- :success => "Passed!"
19
+ :success => "Passed!",
20
+ :error => "Error!"
20
21
  }
21
22
 
22
23
  def notify(options)
@@ -39,6 +40,7 @@ module TestNotifier
39
40
  end
40
41
  end
41
42
 
42
- autoload :Notifier, "test_notifier/notifier"
43
- autoload :Runner, "test_notifier/runner"
43
+ autoload :Notifier, "test_notifier/notifier"
44
+ autoload :Runner, "test_notifier/runner"
45
+ autoload :Stats, "test_notifier/stats"
44
46
  end
@@ -9,7 +9,8 @@ module TestNotifier
9
9
  ALIGN = "center"
10
10
  COLORS = {
11
11
  :fail => "orange",
12
- :success => "green"
12
+ :success => "green",
13
+ :error => "red"
13
14
  }
14
15
 
15
16
  def supported?
@@ -16,7 +16,14 @@ Autotest.add_hook :ran_command do |at|
16
16
  elsif test_unit_matches
17
17
  _, tests, assertions, failures, errors = *test_unit_matches
18
18
 
19
- status = failures.to_i > 0 ? :fail : :success
19
+ if errors.to_i.nonzero?
20
+ status = :error
21
+ elsif failures.to_i.nonzero?
22
+ status = :fail
23
+ else
24
+ status = :success
25
+ end
26
+
20
27
  message = "#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors"
21
28
  TestNotifier.notify(:status => status, :message => message) unless tests.to_i.zero?
22
29
  end
@@ -4,15 +4,18 @@ require "rspec/core/formatters/base_text_formatter"
4
4
  class RSpec::Core::Formatters::BaseTextFormatter
5
5
  alias dump_summary_original dump_summary
6
6
 
7
- def dump_summary(duration, examples, failed, pending)
8
- dump_summary_original(duration, examples, failed, pending)
7
+ def dump_summary(duration, example_count, failure_count, pending_count)
8
+ dump_summary_original(duration, example_count, failure_count, pending_count)
9
9
 
10
- begin
11
- return if examples == 0
12
- status = failed > 0 ? :fail : :success
13
- message = "#{examples} examples, #{failed} failed, #{pending} pending"
14
- TestNotifier.notify(:status => status, :message => message)
15
- rescue
16
- end
10
+ return if example_count.zero?
11
+
12
+ stats = TestNotifier::Stats.new(:rspec, {
13
+ :total => example_count,
14
+ :fail => failure_count,
15
+ :pending => pending_count,
16
+ :error => examples.reject {|e| e.instance_variable_get("@exception").nil?}.count
17
+ })
18
+
19
+ TestNotifier.notify(:status => stats.status, :message => stats.message)
17
20
  end
18
21
  end
@@ -4,15 +4,18 @@ require "spec/runner/formatter/base_text_formatter"
4
4
  class Spec::Runner::Formatter::BaseTextFormatter
5
5
  alias dump_summary_original dump_summary
6
6
 
7
- def dump_summary(duration, examples, failed, pending)
8
- dump_summary_original(duration, examples, failed, pending)
7
+ def dump_summary(duration, example_count, failure_count, pending_count)
8
+ dump_summary_original(duration, example_count, failure_count, pending_count)
9
9
 
10
- begin
11
- return if examples == 0
12
- status = failed > 0 ? :fail : :success
13
- message = "#{examples} examples, #{failed} failed, #{pending} pending"
14
- TestNotifier.notify(:status => status, :message => message)
15
- rescue
16
- end
10
+ return if example_count.zero?
11
+
12
+ stats = TestNotifier::Stats.new(:spec, {
13
+ :total => example_count,
14
+ :fail => failure_count,
15
+ :pending => pending_count,
16
+ :error => nil
17
+ })
18
+
19
+ TestNotifier.notify(:status => stats.status, :message => stats.message) if example_count > 0
17
20
  end
18
21
  end
@@ -10,12 +10,11 @@ class Test::Unit::UI::Console::TestRunner
10
10
  begin
11
11
  re = /(\d+) tests, (\d+) assertions, (\d+) failures, (\d+) errors/
12
12
  _, tests, assertions, failures, errors = *@result.to_s.match(re)
13
+ return if tests.to_i.zero?
13
14
 
14
- return if tests.to_i == 0
15
15
 
16
- status = (failures.to_i + errors.to_i) > 0 ? :fail : :success
17
- message = "#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors"
18
- TestNotifier.notify(:status => status, :message => message)
16
+ stats = TestNotifier::Stats.new(:test_unit, :total => tests, :assertions => assertions, :fail => failures, :error => errors)
17
+ TestNotifier.notify(:status => stats.status, :message => stats.message)
19
18
  rescue
20
19
  end
21
20
  end
@@ -0,0 +1,89 @@
1
+ module TestNotifier
2
+ class Stats
3
+ attr_accessor :adapter, :options
4
+
5
+ def initialize(adapter, options = {})
6
+ @adapter = adapter
7
+ @options = normalize(options)
8
+ end
9
+
10
+ def status
11
+ @options = normalize(options)
12
+ send("status_for_#{adapter}")
13
+ end
14
+
15
+ def message
16
+ @options = normalize(options)
17
+ send("message_for_#{adapter}")
18
+ end
19
+
20
+ private
21
+ def normalize(options)
22
+ [:total, :success, :fail, :pending, :error, :assertions].inject({}) do |buffer, key|
23
+ buffer[key] = options[key].to_i
24
+ buffer
25
+ end
26
+ end
27
+
28
+ def status_for_test_unit
29
+ if options[:error].nonzero?
30
+ :error
31
+ elsif options[:fail].nonzero?
32
+ :fail
33
+ else
34
+ :success
35
+ end
36
+ end
37
+
38
+ def status_for_rspec
39
+ if options[:error].nonzero?
40
+ :error
41
+ elsif options[:fail].nonzero?
42
+ :fail
43
+ else
44
+ :success
45
+ end
46
+ end
47
+
48
+ def status_for_spec
49
+ if options[:fail].nonzero?
50
+ :fail
51
+ else
52
+ :success
53
+ end
54
+ end
55
+
56
+ def message_for_rspec
57
+ options[:success] = options[:total] - options[:fail]
58
+ options[:fail] = options[:fail] - options[:error]
59
+
60
+ text = []
61
+ text << "#{options[:total]} " + pluralize(options[:total], "example")
62
+ text << "#{options[:fail]} failed" unless options[:fail].zero?
63
+ text << "#{options[:pending]} pending" unless options[:pending].zero?
64
+ text << "#{options[:error]} " + pluralize(options[:error], "error") unless options[:error].zero?
65
+ text.join(", ")
66
+ end
67
+
68
+ def message_for_spec
69
+ text = []
70
+ text << "#{options[:total]} " + pluralize(options[:total], "example")
71
+ text << "#{options[:fail]} failed" unless options[:fail].zero?
72
+ text << "#{options[:pending]} pending" unless options[:pending].zero?
73
+ text.join(", ")
74
+ end
75
+
76
+ def message_for_test_unit
77
+ text = []
78
+ text << "#{options[:total]} " + pluralize(options[:total], "test")
79
+ text << "#{options[:assertions]} " + pluralize(options[:assertions], "assertion")
80
+ text << "#{options[:fail]} failed" unless options[:fail].zero?
81
+ text << "#{options[:error]} " + pluralize(options[:error], "error") unless options[:error].zero?
82
+ text.join(", ")
83
+ end
84
+
85
+ def pluralize(count, text)
86
+ count > 1 ? "#{text}s" : text
87
+ end
88
+ end
89
+ end
@@ -2,7 +2,7 @@ module TestNotifier
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- PATCH = 0
5
+ PATCH = 1
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
Binary file
@@ -0,0 +1,84 @@
1
+ require "test_helper"
2
+
3
+ class TestNotifier::Stats::RSpecTest < Test::Unit::TestCase
4
+ def setup
5
+ @stats = TestNotifier::Stats.new(:rspec)
6
+ end
7
+
8
+ test "success message" do
9
+ @stats.options = { :total => 10 }
10
+ assert_equal "10 examples", @stats.message
11
+ end
12
+
13
+ test "message with failing examples" do
14
+ @stats.options = { :total => 10, :fail => 5 }
15
+ assert_equal "10 examples, 5 failed", @stats.message
16
+ end
17
+
18
+ test "message with pending examples" do
19
+ @stats.options = { :total => 10, :pending => 5 }
20
+ assert_equal "10 examples, 5 pending", @stats.message
21
+ end
22
+
23
+ test "message with error examples" do
24
+ @stats.options = { :total => 10, :fail => 5, :error => 5 }
25
+ assert_equal "10 examples, 5 errors", @stats.message
26
+ end
27
+
28
+ test "message with all types" do
29
+ @stats.options = { :total => 6, :fail => 3, :error => 2, :pending => 3 }
30
+ assert_equal "6 examples, 1 failed, 3 pending, 2 errors", @stats.message
31
+ end
32
+ end
33
+
34
+ class TestNotifier::Stats::SpecTest < Test::Unit::TestCase
35
+ def setup
36
+ @stats = TestNotifier::Stats.new(:spec)
37
+ end
38
+
39
+ test "success message" do
40
+ @stats.options = { :total => 10 }
41
+ assert_equal "10 examples", @stats.message
42
+ end
43
+
44
+ test "message with failing examples" do
45
+ @stats.options = { :total => 10, :fail => 5 }
46
+ assert_equal "10 examples, 5 failed", @stats.message
47
+ end
48
+
49
+ test "message with pending examples" do
50
+ @stats.options = { :total => 10, :pending => 5 }
51
+ assert_equal "10 examples, 5 pending", @stats.message
52
+ end
53
+
54
+ test "message with all types" do
55
+ @stats.options = { :total => 6, :fail => 2, :pending => 3 }
56
+ assert_equal "6 examples, 2 failed, 3 pending", @stats.message
57
+ end
58
+ end
59
+
60
+ class TestNotifier::Stats::TestUnitTest < Test::Unit::TestCase
61
+ def setup
62
+ @stats = TestNotifier::Stats.new(:test_unit)
63
+ end
64
+
65
+ test "success message" do
66
+ @stats.options = { :total => 10, :assertions => 20 }
67
+ assert_equal "10 tests, 20 assertions", @stats.message
68
+ end
69
+
70
+ test "message with failing examples" do
71
+ @stats.options = { :total => 10, :assertions => 20, :fail => 5 }
72
+ assert_equal "10 tests, 20 assertions, 5 failed", @stats.message
73
+ end
74
+
75
+ test "message with error examples" do
76
+ @stats.options = { :total => 10, :assertions => 20, :error => 5 }
77
+ assert_equal "10 tests, 20 assertions, 5 errors", @stats.message
78
+ end
79
+
80
+ test "message with all types" do
81
+ @stats.options = { :total => 6, :fail => 2, :error => 3, :assertions => 20 }
82
+ assert_equal "6 tests, 20 assertions, 2 failed, 3 errors", @stats.message
83
+ end
84
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_notifier
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nando Vieira
@@ -48,12 +48,15 @@ files:
48
48
  - lib/test_notifier/runner/rspec.rb
49
49
  - lib/test_notifier/runner/spec.rb
50
50
  - lib/test_notifier/runner/test_unit.rb
51
+ - lib/test_notifier/stats.rb
51
52
  - lib/test_notifier/test_unit.rb
52
53
  - lib/test_notifier/version.rb
54
+ - resources/error.png
53
55
  - resources/fail.png
54
56
  - resources/register-growl.scpt
55
57
  - resources/success.png
56
58
  - test/notifier_test.rb
59
+ - test/stats_test.rb
57
60
  - test/test_helper.rb
58
61
  - test/test_notifier_test.rb
59
62
  has_rdoc: true
@@ -92,5 +95,6 @@ specification_version: 3
92
95
  summary: Display system notifications (dbus, growl and snarl) after running tests.
93
96
  test_files:
94
97
  - test/notifier_test.rb
98
+ - test/stats_test.rb
95
99
  - test/test_helper.rb
96
100
  - test/test_notifier_test.rb