test_notifier 0.2.1 → 0.3.0

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/README.rdoc CHANGED
@@ -40,11 +40,17 @@ Then, install the gem with <tt>sudo gem install test_notifier</tt>
40
40
 
41
41
  If you're using Test::Unit you should add <tt>require "test_notifier/runner/test_unit"</tt> to your <tt>test_helper.rb</tt> file.
42
42
 
43
- If you're using RSpec you should add <tt>require "test_notifier/runner/spec"</tt> to your <tt>spec_helper.rb</tt> file. If you're using Rails 2, you need to add <tt>require "test_notifier/runner/rspec"</tt> instead.
43
+ If you're using RSpec you should add <tt>require "test_notifier/runner/spec"</tt> to your <tt>spec_helper.rb</tt> file. If you're using RSpec 2, you need to add <tt>require "test_notifier/runner/rspec"</tt> instead.
44
44
 
45
45
  If you're using Autotest you should add <tt>require test_notifier/runner/autotest"</tt> to
46
46
  the file <tt>~/.autotest</tt>
47
47
 
48
+ You can define your notifier.
49
+
50
+ TestNotifier.default_notifier = :growl
51
+
52
+ The available notifiers are <tt>:growl</tt>, <tt>:kdialog</tt>, <tt>:knotify</tt>, <tt>:notify_send</tt>, <tt>:osd_cat</tt> and <tt>:snarl</tt>.
53
+
48
54
  == Maintainer
49
55
 
50
56
  * Nando Vieira - http://simplesideias.com.br
data/lib/test_notifier.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  module TestNotifier
2
2
  class << self
3
- attr_accessor :__notifier
3
+ attr_accessor :__notifier__
4
+ attr_accessor :default_notifier
4
5
  end
5
6
 
7
+ extend self
8
+
9
+ class UnsupportedNotifierError < StandardError; end
10
+
6
11
  IMAGES = {
7
12
  :fail => File.dirname(__FILE__) + "/../resources/fail.png",
8
13
  :error => File.dirname(__FILE__) + "/../resources/error.png",
@@ -14,7 +19,7 @@ module TestNotifier
14
19
  :success => "Passed!"
15
20
  }
16
21
 
17
- def self.notify(options)
22
+ def notify(options)
18
23
  options.merge!({
19
24
  :title => TITLES[options[:status]],
20
25
  :image => IMAGES[options[:status]]
@@ -23,14 +28,14 @@ module TestNotifier
23
28
  notifier.notify(options)
24
29
  end
25
30
 
26
- def self.notifier
27
- self.__notifier ||= begin
28
- TestNotifier::Notifier.constants.sort.collect do |const|
29
- self.__notifier = TestNotifier::Notifier.const_get(const)
30
- break if self.__notifier.supported?
31
- end
31
+ def notifier
32
+ self.__notifier__ ||= begin
33
+ notifier = nil
34
+ notifier = TestNotifier::Notifier.supported_notifier_from_name(default_notifier) if default_notifier
35
+ notifier = TestNotifier::Notifier.supported_notifiers.first unless notifier
32
36
 
33
- self.__notifier
37
+ raise UnsupportedNotifierError, "You have no supported notifiers installed. Please read documentation." unless notifier
38
+ notifier
34
39
  end
35
40
  end
36
41
 
@@ -6,5 +6,33 @@ module TestNotifier
6
6
  autoload :Knotify, "test_notifier/notifier/knotify"
7
7
  autoload :Kdialog, "test_notifier/notifier/kdialog"
8
8
  autoload :NotifySend, "test_notifier/notifier/notify_send"
9
+
10
+ extend self
11
+
12
+ def notifiers
13
+ constants.collect do |name|
14
+ const_get(name)
15
+ end
16
+ end
17
+
18
+ def supported_notifiers
19
+ notifiers.select {|notifier| notifier.supported?}
20
+ end
21
+
22
+ def from_name(name)
23
+ notifier = const_get(classify(name.to_s))
24
+ rescue NameError
25
+ nil
26
+ end
27
+
28
+ def supported_notifier_from_name(name)
29
+ notifier = from_name(name)
30
+ notifier && notifier.supported? ? notifier : nil
31
+ end
32
+
33
+ private
34
+ def classify(string)
35
+ string.gsub(/_(.)/sm) { "#{$1.upcase}" }.gsub(/^(.)/) { "#{$1.upcase}" }
36
+ end
9
37
  end
10
38
  end
@@ -1,8 +1,8 @@
1
1
  module TestNotifier
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 2
5
- PATCH = 1
4
+ MINOR = 3
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -0,0 +1,39 @@
1
+ require "test_helper"
2
+
3
+ class TestNotifier::NotifierTest < Test::Unit::TestCase
4
+ def setup
5
+ unsupport_all_notifiers
6
+ end
7
+
8
+ test "retrieve list of supported notifiers" do
9
+ TestNotifier::Notifier::Snarl.expects(:supported?).returns(true)
10
+ TestNotifier::Notifier::Knotify.expects(:supported?).returns(true)
11
+
12
+ assert_equal 2, TestNotifier::Notifier.supported_notifiers.size
13
+ end
14
+
15
+ test "retrieve list of all notifiers" do
16
+ assert_equal 6, TestNotifier::Notifier.notifiers.size
17
+ end
18
+
19
+ test "return notifier by its name" do
20
+ assert_equal TestNotifier::Notifier::OsdCat, TestNotifier::Notifier.from_name(:osd_cat)
21
+ assert_equal TestNotifier::Notifier::NotifySend, TestNotifier::Notifier.from_name(:notify_send)
22
+ assert_equal TestNotifier::Notifier::Growl, TestNotifier::Notifier.from_name(:growl)
23
+ end
24
+
25
+ test "return notifier by its name when supported" do
26
+ TestNotifier::Notifier::Snarl.expects(:supported?).returns(true)
27
+
28
+ assert_equal TestNotifier::Notifier::Snarl, TestNotifier::Notifier.supported_notifier_from_name(:snarl)
29
+ end
30
+
31
+ test "return nil when have supported notifiers" do
32
+ assert_nil TestNotifier::Notifier.supported_notifier_from_name(:snarl)
33
+ end
34
+
35
+ test "return nil when an invalid notifier name is provided" do
36
+ assert_nil TestNotifier::Notifier.from_name(:invalid)
37
+ assert_nil TestNotifier::Notifier.supported_notifier_from_name(:invalid)
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ gem "test-unit"
2
+ require "test/unit"
3
+ require "mocha"
4
+
5
+ require "test_notifier"
6
+
7
+ class Test::Unit::TestCase
8
+ private
9
+ def unsupport_all_notifiers
10
+ TestNotifier::Notifier.constants.each do |name|
11
+ notifier = TestNotifier::Notifier.const_get(name)
12
+ notifier.stubs(:supported?).returns(false)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,40 @@
1
+ require "test_helper"
2
+
3
+ class TestNotifierTest < Test::Unit::TestCase
4
+ def setup
5
+ TestNotifier.__notifier__ = nil
6
+ unsupport_all_notifiers
7
+ end
8
+
9
+ test "return default notifier when is set" do
10
+ TestNotifier.default_notifier = :osd_cat
11
+ TestNotifier::Notifier::OsdCat.expects(:supported?).returns(true)
12
+
13
+ assert_equal TestNotifier::Notifier::OsdCat, TestNotifier.notifier
14
+ end
15
+
16
+ test "return next available notifier when default notifier is not supported" do
17
+ TestNotifier.default_notifier = :osd_cat
18
+ TestNotifier::Notifier::Snarl.expects(:supported?).returns(true)
19
+
20
+ assert_equal TestNotifier::Notifier::Snarl, TestNotifier.notifier
21
+ end
22
+
23
+ test "raise error when there's no supported notifier" do
24
+ assert_raise TestNotifier::UnsupportedNotifierError do
25
+ TestNotifier.notifier
26
+ end
27
+ end
28
+
29
+ test "send notification to supported notifier" do
30
+ TestNotifier::Notifier::Snarl.expects(:supported?).returns(true)
31
+ TestNotifier::Notifier::Snarl.expects(:notify).with({
32
+ :status => :fail,
33
+ :message => "You have failed!",
34
+ :title => TestNotifier::TITLES[:fail],
35
+ :image => TestNotifier::IMAGES[:fail]
36
+ })
37
+
38
+ TestNotifier.notify :status => :fail, :message => "You have failed!"
39
+ end
40
+ 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: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nando Vieira
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-22 00:00:00 -03:00
18
+ date: 2010-08-27 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -53,6 +53,9 @@ files:
53
53
  - resources/fail.png
54
54
  - resources/register-growl.scpt
55
55
  - resources/success.png
56
+ - test/notifier_test.rb
57
+ - test/test_helper.rb
58
+ - test/test_notifier_test.rb
56
59
  has_rdoc: true
57
60
  homepage: http://github.com/fnando/test_notifier
58
61
  licenses: []
@@ -87,5 +90,7 @@ rubygems_version: 1.3.7
87
90
  signing_key:
88
91
  specification_version: 3
89
92
  summary: Display system notifications (dbus, growl and snarl) after running tests.
90
- test_files: []
91
-
93
+ test_files:
94
+ - test/notifier_test.rb
95
+ - test/test_helper.rb
96
+ - test/test_notifier_test.rb