Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a new frog to enhance rSpec logs #5

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ doc
# jeweler generated
pkg

Guardfile

# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
#
# * Create a file at ~/.gitignore
Expand All @@ -27,7 +29,7 @@ pkg
#
# For MacOS:
#
#.DS_Store
.DS_Store
#
# For TextMate
#*.tmproj
Expand All @@ -39,4 +41,4 @@ pkg
#.\#*
#
# For vim:
#*.swp
*.swp
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@ group :development, :test do
gem 'bundler', '~> 1.0.0'
gem 'jeweler', '~> 1.5.2'
gem 'rspec', '2.6.0'
gem 'guard', '1.0.1'
gem 'guard-cucumber', '0.7.5'
gem 'guard-rspec', '0.6.0'
end
13 changes: 13 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,18 @@ GEM
json (>= 1.4.6)
term-ansicolor (>= 1.0.6)
diff-lcs (1.1.3)
ffi (1.0.11)
gherkin (2.5.1)
json (>= 1.4.6)
git (1.2.5)
guard (1.0.1)
ffi (>= 0.5.0)
thor (~> 0.14.6)
guard-cucumber (0.7.5)
cucumber (>= 0.10)
guard (>= 0.8.3)
guard-rspec (0.6.0)
guard (>= 0.10.0)
jeweler (1.5.2)
bundler (~> 1.0.0)
git (>= 1.2.5)
Expand All @@ -28,6 +37,7 @@ GEM
diff-lcs (~> 1.1.2)
rspec-mocks (2.6.0)
term-ansicolor (1.0.6)
thor (0.14.6)

PLATFORMS
ruby
Expand All @@ -36,5 +46,8 @@ DEPENDENCIES
bundler (~> 1.0.0)
colored (>= 1.2)
cucumber (>= 0.10.0)
guard (= 1.0.1)
guard-cucumber (= 0.7.5)
guard-rspec (= 0.6.0)
jeweler (~> 1.5.2)
rspec (= 2.6.0)
2 changes: 1 addition & 1 deletion features/enhanced_logger.feature
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ Scenario: Step information is written to the rails log
| STEP INFORMATION IS WRITTEN TO THE RAILS LOG | black_on_green |
| Given a cucumber feature is executing against my rails application | black_on_yellow |
| When I examine the rails log | black_on_yellow |
| And I do some crazy Inception like test on myself | black_on_yellow |
| And I do some crazy Inception like test on myself | black_on_yellow |
4 changes: 2 additions & 2 deletions features/examples_support.feature
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Feature: A developer can happily run cucumber scenarios/examples an everything works fine
Feature: A developer can happily run cucumber scenarios/examples and everything works fine
As a developer
In order to derive joy and happiness when checking my cucumber logs
I want to see rainbows and unicorns when my log files run
Expand All @@ -19,4 +19,4 @@ Feature: A developer can happily run cucumber scenarios/examples an everything w
Examples:
| country | price |
| Australia | 2.99 |
| Japan | 2.69 |
| Japan | 2.69 |
18 changes: 18 additions & 0 deletions features/rspec_examples_support.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Feature: A developer can happily run rspec examples and everything works fine
As a developer
In order to save time looking through log files
I want my rspec test names to be highlighted

Scenario: rSpec Example Support
Given an rSpec test file is being executed
When I examine the rails log
And I do some crazy Inception like test on myself
And the features references different countries being "<country>"
And the feature includes a reference to the price of eggs being "<price>"
Then I see the following log entries:
| Message | Colour |
| STEP INFORMATION IS WRITTEN TO THE RAILS LOG | black_on_green |
| Given a cucumber feature is executing against my rails application | black_on_yellow |
| When I examine the rails log | black_on_yellow |
| And I do some crazy Inception like test on myself | black_on_yellow |

10 changes: 8 additions & 2 deletions features/step_definitions/enhanced_logging_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,20 @@ def self.logger
end
end

Given /^an rSpec test file is being executed$/ do
pending
end

Given /^a cucumber feature is executing against my rails application$/ do
#Rails.logger.reset
pending
end

When /^I examine the rails log$/ do
pending
end

When /^I do some crazy Inception like test on myself$/ do
pending
end

Then /^I see the following log entries:$/ do |ast|
Expand All @@ -53,4 +59,4 @@ def self.logger
log.first.chomp.strip == message && log[1] == colour
end
end
end
end
4 changes: 3 additions & 1 deletion features/step_definitions/scenario_outline_steps.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
When /^the features references different countries being "([^"]*)"$/ do |country|
pending
end

When /^the feature includes a reference to the price of eggs being "([^"]*)"$/ do |price|
end
pending
end
36 changes: 22 additions & 14 deletions frogger.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
# -*- encoding: utf-8 -*-

Gem::Specification.new do |s|
s.name = %q{frogger}
s.name = "frogger"
s.version = "0.3.0"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = [%q{Richie Khoo}]
s.date = %q{2011-09-29}
s.description = %q{Navigating noise in your log files can be like trying to cross a busy road and avoid the cars. Frogger makes your log files more fun by adding some good ol' 8 bit color and a bit of formatting.}
s.email = %q{[email protected]}
s.authors = ["Richie Khoo"]
s.date = "2012-03-17"
s.description = "Navigating noise in your log files can be like trying to cross a busy road and avoid the cars. Frogger makes your log files more fun by adding some good ol' 8 bit color and a bit of formatting."
s.email = "[email protected]"
s.extra_rdoc_files = [
"LICENSE.txt",
"README.textile"
Expand All @@ -27,23 +27,22 @@ Gem::Specification.new do |s|
"VERSION",
"features/enhanced_logger.feature",
"features/examples_support.feature",
"features/rspec_examples_support.feature",
"features/step_definitions/enhanced_logging_steps.rb",
"features/step_definitions/scenario_outline_steps.rb",
"features/support/env.rb",
"frogger.gemspec",
"lib/frogger.rb",
"lib/frogger/cucumber.rb",
"lib/frogger/frog.rb",
"spec/frogger/frog_spec.rb",
"spec/spec_helper.rb"
]
s.homepage = %q{http://github.com/evolve2k/frogger}
s.licenses = [%q{MIT}]
s.require_paths = [%q{lib}]
s.rubygems_version = %q{1.8.7}
s.summary = %q{Frogger makes logs easier to navigate.}
s.homepage = "http://github.com/evolve2k/frogger"
s.licenses = ["MIT"]
s.require_paths = ["lib"]
s.rubygems_version = "1.8.10"
s.summary = "Frogger makes logs easier to navigate."
s.test_files = [
"spec/frogger/frog_spec.rb",
"spec/frogger/cucumber/frog_spec.rb",
"spec/frogger/rspec/frog_spec.rb",
"spec/spec_helper.rb"
]

Expand All @@ -56,19 +55,28 @@ Gem::Specification.new do |s|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
s.add_development_dependency(%q<guard>, ["= 1.0.1"])
s.add_development_dependency(%q<guard-cucumber>, ["= 0.7.5"])
s.add_development_dependency(%q<guard-rspec>, ["= 0.6.0"])
else
s.add_dependency(%q<colored>, [">= 1.2"])
s.add_dependency(%q<cucumber>, [">= 0.10.0"])
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
s.add_dependency(%q<rspec>, ["= 2.6.0"])
s.add_dependency(%q<guard>, ["= 1.0.1"])
s.add_dependency(%q<guard-cucumber>, ["= 0.7.5"])
s.add_dependency(%q<guard-rspec>, ["= 0.6.0"])
end
else
s.add_dependency(%q<colored>, [">= 1.2"])
s.add_dependency(%q<cucumber>, [">= 0.10.0"])
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
s.add_dependency(%q<rspec>, ["= 2.6.0"])
s.add_dependency(%q<guard>, ["= 1.0.1"])
s.add_dependency(%q<guard-cucumber>, ["= 0.7.5"])
s.add_dependency(%q<guard-rspec>, ["= 0.6.0"])
end
end

15 changes: 13 additions & 2 deletions lib/frogger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,16 @@
module Frogger
end

require 'frogger/frog'
require 'frogger/cucumber' if defined?(Cucumber)
if defined?(Cucumber)
module Frogger::Cucumber
end
require 'frogger/cucumber/frog'
require 'frogger/cucumber/init'
end

if defined?(RSpec)
module Frogger::RSpec
end
require 'frogger/rspec/frog'
require 'frogger/rspec/init'
end
4 changes: 2 additions & 2 deletions lib/frogger/frog.rb → lib/frogger/cucumber/frog.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class Frogger::Frog
class Frogger::Cucumber::Frog
attr_reader :scenario, :logger
attr_accessor :step_index

Expand All @@ -25,7 +25,7 @@ def log_step

self.step_index += 1
end

def scenario_outline?
scenario.class == Cucumber::Ast::OutlineTable::ExampleRow
end
Expand Down
2 changes: 1 addition & 1 deletion lib/frogger/cucumber.rb → lib/frogger/cucumber/init.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Before do |scenario|
@frog = Frogger::Frog.new scenario
@frog = Frogger::Cucumber::Frog.new scenario
@frog.log_scenario
@frog.log_step
end if respond_to?(:Before)
Expand Down
22 changes: 22 additions & 0 deletions lib/frogger/rspec/frog.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class Frogger::RSpec::Frog
attr_reader :example, :logger

def initialize(example, logger = default_logger)
@example = example
@logger = logger
end

def log_example
group_descriptions = example.example_group.ancestors.map(&:description)
spec_name = [*group_descriptions.reverse, example.description].join(" ")
if logger.respond_to?(:debug)
logger.debug "\n #{ spec_name }".black_on_yellow
end
end

private

def default_logger
Rails.logger
end
end
8 changes: 8 additions & 0 deletions lib/frogger/rspec/init.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
if RSpec.respond_to?(:configure)
RSpec.configure do |config|
config.before(:each) do
@frog = Frogger::RSpec::Frog.new self.example
@frog.log_example
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ def self.logger
end
end

describe Frogger::Frog do
let(:frog) { Frogger::Frog.new(scenario, custom_logger) }
describe Frogger::Cucumber::Frog do
let(:frog) { Frogger::Cucumber::Frog.new(scenario, custom_logger) }
let(:scenario) { double('Scenario', :raw_steps => [step], :name => 'Foo') }
let(:custom_logger) { double('Custom Logger', :debug => true) }
let(:step) { double('Step', :keyword => 'When', :name => ' something happens') }
Expand All @@ -18,12 +18,12 @@ def self.logger

describe '#logger' do
it "is the logger passed in when initialised" do
frog = Frogger::Frog.new(scenario, custom_logger)
frog = Frogger::Cucumber::Frog.new(scenario, custom_logger)
frog.logger.should == custom_logger
end

it "defaults to the Rails logger" do
frog = Frogger::Frog.new(scenario)
frog = Frogger::Cucumber::Frog.new(scenario)
frog.logger.should == Rails.logger
end
end
Expand Down
28 changes: 28 additions & 0 deletions spec/frogger/rspec/frog_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
require 'spec_helper'

module Rails
def self.logger
:rails_logger
end
end

describe Frogger::RSpec::Frog do
let(:frog) { Frogger::RSpec::Frog.new(example, custom_logger) }
let(:custom_logger) { double('Custom Logger', :debug => true) }
let(:example) do
double('Rspec example',
:description => 'example name',
:example_group => example_group)
end
let(:example_group) { double('Example group', :ancestors => ancestors) }
let(:ancestors) do
[stub(:description => 'ancestor 1'), stub(:description => 'ancestor 2')]
end

describe '#log_example' do
it 'prints the example name in black and green' do
custom_logger.should_receive(:debug).with("\n ancestor 2 ancestor 1 example name".black_on_yellow)
frog.log_example
end
end
end