rspec_pretty 0.0.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +38 -0
- data/Rakefile +1 -0
- data/lib/pretty/formatter.rb +94 -0
- data/lib/pretty/logger.rb +54 -0
- data/lib/rspec_pretty.rb +5 -0
- data/lib/rspec_pretty/version.rb +3 -0
- data/rspec_pretty.gemspec +24 -0
- metadata +71 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# RSPEC_PRETTY
|
|
2
|
+
|
|
3
|
+
"RSpec Pretty" contains two formatters for cleaner and prettier rspec logs
|
|
4
|
+
|
|
5
|
+
There were two inspirations for this project
|
|
6
|
+
|
|
7
|
+
### FROGGER
|
|
8
|
+
Frogger Gem for cucumber logs [https://github.com/evolve2k/frogger]
|
|
9
|
+
|
|
10
|
+
### PRETTY_TEST_
|
|
11
|
+
Pretty Test for minitest [https://github.com/bobes/pretty_test]
|
|
12
|
+
|
|
13
|
+
## SETUP
|
|
14
|
+
|
|
15
|
+
### GEMFILE
|
|
16
|
+
|
|
17
|
+
In your Gemfile:
|
|
18
|
+
|
|
19
|
+
gem 'rspec_pretty', '~> 0.0.1'
|
|
20
|
+
|
|
21
|
+
### SPEC_HELPER
|
|
22
|
+
In spec/spec_helper.rb:
|
|
23
|
+
|
|
24
|
+
config.formatters << Pretty::Logger.new
|
|
25
|
+
|
|
26
|
+
### .rspec
|
|
27
|
+
In .rspec
|
|
28
|
+
|
|
29
|
+
--format Pretty::Formatter
|
|
30
|
+
|
|
31
|
+
### Guardfile
|
|
32
|
+
|
|
33
|
+
guard 'rspec', :version => 2, :cli => '--colour --format Pretty::Formatter', ...
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
----
|
|
38
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'rspec/core/formatters/base_formatter'
|
|
2
|
+
|
|
3
|
+
module Pretty
|
|
4
|
+
class Formatter < RSpec::Core::Formatters::BaseFormatter
|
|
5
|
+
|
|
6
|
+
PENDING_FORMAT = "\e[1m\e[37m%s\n\e[33m [PENDING] %s\e[0m"
|
|
7
|
+
PENDING_FORMAT_MSG = " \e[34m%s\e[0m"
|
|
8
|
+
PENDING_FORMAT_CALLER = " \e[34m# %s\e[0m"
|
|
9
|
+
|
|
10
|
+
FAILURE_FORMAT = "\e[1m\e[37m%s\n\e[31m\e[1m[FAILURE] %s\e[0m"
|
|
11
|
+
FAILURE_FORMAT_LINE = " \e[31m%s\e[0m"
|
|
12
|
+
FAILURE_FORMAT_BACK = " \e[36m# %s\e[0m"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
STATUS_FORMAT = "\e[2K\r\e[?7l\e[1m\e[37m(%.1fs) \e[32m%d/%d tests\e[37m, \e[31m%d failures\e[37m, \e[33m%d pending \e[37m%s\e[?7h\e[0m"
|
|
16
|
+
|
|
17
|
+
def initialize(output = nil)
|
|
18
|
+
super(output)
|
|
19
|
+
@started_at = Time.now
|
|
20
|
+
@finished = 0
|
|
21
|
+
@failure = 0
|
|
22
|
+
@pending = 0
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def example_group_finished(example_group)
|
|
26
|
+
update_status("")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def example_started(example)
|
|
30
|
+
update_status(example.full_description)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def example_passed(example)
|
|
34
|
+
@finished += 1
|
|
35
|
+
update_status(example.full_description)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def example_failed(example)
|
|
39
|
+
@finished += 1
|
|
40
|
+
@failure += 1
|
|
41
|
+
print_failure example
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def example_pending(example)
|
|
45
|
+
@finished += 1
|
|
46
|
+
@pending += 1
|
|
47
|
+
print_pending example
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
protected
|
|
51
|
+
|
|
52
|
+
def print_failure(example)
|
|
53
|
+
remove_status
|
|
54
|
+
|
|
55
|
+
exception = example.execution_result[:exception]
|
|
56
|
+
description = example.full_description
|
|
57
|
+
path = RSpec::Core::Formatters::BaseFormatter::relative_path(example.location)
|
|
58
|
+
|
|
59
|
+
puts
|
|
60
|
+
puts FAILURE_FORMAT % [description, path]
|
|
61
|
+
puts FAILURE_FORMAT_LINE % [read_failed_line(exception, example).strip]
|
|
62
|
+
if exception.message
|
|
63
|
+
exception.message.split("\n").each do |line|
|
|
64
|
+
puts FAILURE_FORMAT_LINE % [line]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
format_backtrace(example.execution_result[:exception].backtrace, example)[0 .. 1].each do |backtrace_info|
|
|
68
|
+
puts FAILURE_FORMAT_BACK % [backtrace_info]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def print_pending(example)
|
|
73
|
+
remove_status
|
|
74
|
+
|
|
75
|
+
description = example.full_description
|
|
76
|
+
path = RSpec::Core::Formatters::BaseFormatter::relative_path(example.location)
|
|
77
|
+
calller = backtrace_line(example.location.to_s.split(':in `block').first)
|
|
78
|
+
|
|
79
|
+
puts
|
|
80
|
+
puts PENDING_FORMAT % [description, path]
|
|
81
|
+
puts PENDING_FORMAT_MSG % [example.execution_result[:pending_message]]
|
|
82
|
+
puts PENDING_FORMAT_CALLER % [calller]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def update_status(message = "")
|
|
87
|
+
print STATUS_FORMAT % [Time.now - @started_at, @finished, example_count, @failure, @pending, message]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def remove_status
|
|
91
|
+
print "\e[2K\r"
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rspec/core/formatters/base_formatter'
|
|
2
|
+
|
|
3
|
+
module Pretty
|
|
4
|
+
class Logger < RSpec::Core::Formatters::BaseFormatter
|
|
5
|
+
|
|
6
|
+
COLOR_START = "\e[34m" # blue
|
|
7
|
+
COLOR_FAILED = "\e[31m" # red
|
|
8
|
+
COLOR_PASSED = "\e[32m" # green
|
|
9
|
+
COLOR_PENDING = "\e[33m" # yellow
|
|
10
|
+
|
|
11
|
+
def initialize(output = nil)
|
|
12
|
+
super(output)
|
|
13
|
+
@group_level = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def example_group_started(example_group)
|
|
17
|
+
@group_level += 1
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def example_group_finished(example_group)
|
|
21
|
+
@group_level -= 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def example_started(example)
|
|
25
|
+
log(COLOR_START, "start", example)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def example_passed(example)
|
|
29
|
+
log(COLOR_PASSED, "passed", example)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def example_pending(example)
|
|
33
|
+
log(COLOR_PENDING, "pending", example)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def example_failed(example)
|
|
37
|
+
log(COLOR_FAILED, "failed", example)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
protected
|
|
41
|
+
def current_indentation
|
|
42
|
+
'**' * @group_level
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def log(color_code, action, example)
|
|
46
|
+
# for support of itslog
|
|
47
|
+
if Rails.logger.respond_to?(:namespace=)
|
|
48
|
+
Rails.logger.namespace = "pretty"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
Rails.logger.info "#{color_code}#{current_indentation} #{action} : #{example.full_description}\e[0m"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/rspec_pretty.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "rspec_pretty/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "rspec_pretty"
|
|
7
|
+
s.version = RSpecPretty::VERSION
|
|
8
|
+
s.authors = ["Chris Douglas"]
|
|
9
|
+
s.email = ["dougo.chris@gmail.com"]
|
|
10
|
+
s.homepage = ""
|
|
11
|
+
s.summary = %q{Pretty RSpec}
|
|
12
|
+
s.description = %q{Pretty Formatter and Logger Formatter for RSpec}
|
|
13
|
+
|
|
14
|
+
s.rubyforge_project = "rspec_pretty"
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split("\n")
|
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
# specify any dependencies here; for example:
|
|
22
|
+
s.add_development_dependency "rake"
|
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
|
24
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rspec_pretty
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Chris Douglas
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-02-15 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rake
|
|
16
|
+
requirement: &70281114849220 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *70281114849220
|
|
25
|
+
description: Pretty Formatter and Logger Formatter for RSpec
|
|
26
|
+
email:
|
|
27
|
+
- dougo.chris@gmail.com
|
|
28
|
+
executables: []
|
|
29
|
+
extensions: []
|
|
30
|
+
extra_rdoc_files: []
|
|
31
|
+
files:
|
|
32
|
+
- .gitignore
|
|
33
|
+
- Gemfile
|
|
34
|
+
- README.md
|
|
35
|
+
- Rakefile
|
|
36
|
+
- lib/pretty/formatter.rb
|
|
37
|
+
- lib/pretty/logger.rb
|
|
38
|
+
- lib/rspec_pretty.rb
|
|
39
|
+
- lib/rspec_pretty/version.rb
|
|
40
|
+
- rspec_pretty.gemspec
|
|
41
|
+
homepage: ''
|
|
42
|
+
licenses: []
|
|
43
|
+
post_install_message:
|
|
44
|
+
rdoc_options: []
|
|
45
|
+
require_paths:
|
|
46
|
+
- lib
|
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
|
+
none: false
|
|
49
|
+
requirements:
|
|
50
|
+
- - ! '>='
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '0'
|
|
53
|
+
segments:
|
|
54
|
+
- 0
|
|
55
|
+
hash: 3126477280433936121
|
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
segments:
|
|
63
|
+
- 0
|
|
64
|
+
hash: 3126477280433936121
|
|
65
|
+
requirements: []
|
|
66
|
+
rubyforge_project: rspec_pretty
|
|
67
|
+
rubygems_version: 1.8.10
|
|
68
|
+
signing_key:
|
|
69
|
+
specification_version: 3
|
|
70
|
+
summary: Pretty RSpec
|
|
71
|
+
test_files: []
|