autotest-snarl 0.0.2
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/Rakefile +27 -0
- data/img/failed.png +0 -0
- data/img/passed.png +0 -0
- data/img/pending.png +0 -0
- data/lib/autotest/results_parser.rb +62 -0
- data/lib/autotest/snarl.rb +62 -0
- metadata +85 -0
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems/package_task'
|
2
|
+
|
3
|
+
# gemspec
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
|
+
s.name = 'autotest-snarl'
|
6
|
+
s.summary = 'Clean and stolen easy integration of Net::Snarl and autotest'
|
7
|
+
s.version = '0.0.2'
|
8
|
+
s.author = 'Luis Lavena'
|
9
|
+
s.email = 'luislavena@gmail.com'
|
10
|
+
s.description = <<-EOT
|
11
|
+
This makes more easy to see autotest messages using Net::Snarl
|
12
|
+
EOT
|
13
|
+
s.homepage = 'http://github.com/luislavena/autotest-snarl'
|
14
|
+
|
15
|
+
s.require_path = 'lib'
|
16
|
+
s.files = FileList[
|
17
|
+
'Rakefile', 'lib/**/*.rb', 'img/*.png'
|
18
|
+
]
|
19
|
+
|
20
|
+
s.add_dependency 'net-snarl', '~> 0.0.1'
|
21
|
+
end
|
22
|
+
|
23
|
+
# packaging
|
24
|
+
Gem::PackageTask.new(spec) do |pkg|
|
25
|
+
pkg.need_zip = false
|
26
|
+
pkg.need_tar = false
|
27
|
+
end
|
data/img/failed.png
ADDED
Binary file
|
data/img/passed.png
ADDED
Binary file
|
data/img/pending.png
ADDED
Binary file
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# stolen from autotest-growl
|
2
|
+
# http://github.com/svoop/autotest-growl
|
3
|
+
|
4
|
+
class Autotest
|
5
|
+
class ResultsParser
|
6
|
+
|
7
|
+
##
|
8
|
+
# Analyze test result lines and return the numbers in a hash.
|
9
|
+
def initialize(autotest)
|
10
|
+
@numbers = {}
|
11
|
+
lines = autotest.results.map {|s| s.gsub(/(\e.*?m|\n)/, '') } # remove escape sequences
|
12
|
+
lines.reject! {|line| !line.match(/\d+\s+(example|test|scenario|step)s?/) } # isolate result numbers
|
13
|
+
lines.each do |line|
|
14
|
+
prefix = nil
|
15
|
+
line.scan(/([1-9]\d*)\s(\w+)/) do |number, kind|
|
16
|
+
kind.sub!(/s$/, '') # singularize
|
17
|
+
kind.sub!(/failure/, 'failed') # homogenize
|
18
|
+
if prefix
|
19
|
+
@numbers["#{prefix}-#{kind}"] = number.to_i
|
20
|
+
else
|
21
|
+
@numbers[kind] = number.to_i
|
22
|
+
prefix = kind
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Determine the testing framework used.
|
30
|
+
def framework
|
31
|
+
case
|
32
|
+
when @numbers['test'] then 'test-unit'
|
33
|
+
when @numbers['example'] then 'rspec'
|
34
|
+
when @numbers['scenario'] then 'cucumber'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Determine whether a result exists at all.
|
40
|
+
def exists?
|
41
|
+
!@numbers.empty?
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Check whether a specific result is present.
|
46
|
+
def has?(kind)
|
47
|
+
@numbers.has_key?(kind)
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Get a plain result number.
|
52
|
+
def [](kind)
|
53
|
+
@numbers[kind]
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Get a labelled result number. The prefix is removed and the label pluralized if necessary.
|
58
|
+
def get(kind)
|
59
|
+
"#{@numbers[kind]} #{kind.sub(/^.*-/, '')}#{'s' if @numbers[kind] != 1 && !kind.match(/(ed|ing)$/)}" if @numbers[kind]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'net/snarl'
|
2
|
+
require 'autotest/results_parser'
|
3
|
+
|
4
|
+
class Autotest
|
5
|
+
module Snarl
|
6
|
+
IMG_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..' , '..', 'img'))
|
7
|
+
|
8
|
+
Autotest.add_hook :run_command do
|
9
|
+
@project = File.basename(Dir.pwd)
|
10
|
+
end
|
11
|
+
|
12
|
+
Autotest.add_hook :ran_command do |autotest|
|
13
|
+
unless @ran_tests
|
14
|
+
results = Autotest::ResultsParser.new(autotest)
|
15
|
+
if results.exists?
|
16
|
+
case results.framework
|
17
|
+
when 'rspec'
|
18
|
+
if results.has?('example-failed')
|
19
|
+
notify "#{@project}: some examples failed.",
|
20
|
+
"#{results['example-failed']} of #{results.get('example')} failed",
|
21
|
+
'failed'
|
22
|
+
elsif results.has?('example-pending')
|
23
|
+
notify "#{@project}: some examples are pending.",
|
24
|
+
"#{results['example-pending']} of #{results.get('example')} pending",
|
25
|
+
'pending'
|
26
|
+
else
|
27
|
+
notify "#{@project}: all examples passed.",
|
28
|
+
"#{results.get('example')}",
|
29
|
+
'passed'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
else
|
33
|
+
notify "#{@project}: Could not run tests.", '', 'error', true
|
34
|
+
end
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.notify(title, text, klass, sticky = false)
|
40
|
+
snarl.notify(
|
41
|
+
:app => 'autotest',
|
42
|
+
:title => title,
|
43
|
+
:text => text,
|
44
|
+
:class => klass,
|
45
|
+
:timeout => sticky ? 0 : 5,
|
46
|
+
:icon => File.join(IMG_PATH, "#{klass}.png")
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.snarl
|
51
|
+
return @@snarl if defined?(@@snarl)
|
52
|
+
|
53
|
+
@@snarl = Net::Snarl.new
|
54
|
+
@@snarl.register('autotest')
|
55
|
+
@@snarl.add_class('autotest', 'passed')
|
56
|
+
@@snarl.add_class('autotest', 'failed')
|
57
|
+
@@snarl.add_class('autotest', 'pending')
|
58
|
+
@@snarl.add_class('autotest', 'error')
|
59
|
+
@@snarl
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: autotest-snarl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Luis Lavena
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-10-28 00:00:00 -02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: net-snarl
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 0
|
31
|
+
- 1
|
32
|
+
version: 0.0.1
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: |
|
36
|
+
This makes more easy to see autotest messages using Net::Snarl
|
37
|
+
|
38
|
+
email: luislavena@gmail.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- Rakefile
|
47
|
+
- lib/autotest/results_parser.rb
|
48
|
+
- lib/autotest/snarl.rb
|
49
|
+
- img/failed.png
|
50
|
+
- img/passed.png
|
51
|
+
- img/pending.png
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: http://github.com/luislavena/autotest-snarl
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.3.7
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Clean and stolen easy integration of Net::Snarl and autotest
|
84
|
+
test_files: []
|
85
|
+
|