forrest 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown ADDED
@@ -0,0 +1,56 @@
1
+ Forrest the stories's runner
2
+ ============================
3
+
4
+ Forrest is a runner for stories framework, you can run one story
5
+ inside of a file that have many stories, can run one scenario
6
+ or print the list of stories inside a file.
7
+
8
+ Print the stories/scenarios list
9
+ --------------------------------
10
+
11
+ forrest test/forrest_stories_test.rb
12
+
13
+ + ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheBenchmarkForEachScenario
14
+ |__ ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheBenchmarkForEachScenario#test_A_user_run_forrest_with_a_StoryName_as_a_param
15
+
16
+ + ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat
17
+ |__ ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat#test_A_user_run_forrest_with_a_StoryName_as_a_param
18
+ |__ ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat#test_A_user_run_forrest_with_a_filepath_as_a_param
19
+ Loaded suite
20
+
21
+ Run a particular story
22
+ ----------------------
23
+
24
+ ==> Runing story...
25
+
26
+ Loaded suite ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat
27
+ Started
28
+
29
+ - As a stories user I want to see the stories report in a very nice format
30
+
31
+ A user run forrest with a filepath as a param
32
+ A user run forrest with a StoryName as a param
33
+
34
+ Finished in 0.001404 seconds.
35
+
36
+ 2 tests, 0 assertions, 0 failures, 0 errors
37
+ 1 story, 2 scenarios
38
+
39
+ Run a particular scenario
40
+ -------------------------
41
+
42
+ forrest ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat#test_A_user_run_forrest_with_a_filepath_as_a_param
43
+
44
+ ==> Runing scenario...
45
+
46
+ test/forrest_stories_test
47
+ Loaded suite test_A_user_run_forrest_with_a_filepath_as_a_param(ForrestStoriesTest::TestAsAStoriesUserIWantToSeeTheStoriesReportInAVeryNiceFormat)
48
+ Started
49
+ .
50
+ Finished in 0.000997 seconds.
51
+
52
+ 1 tests, 0 assertions, 0 failures, 0 errors
53
+
54
+
55
+
56
+ **and have fun!**
data/bin/forrest ADDED
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env ruby
2
+ require 'ftools'
3
+ require 'rubygems'
4
+ require 'test/unit/ui/console/testrunner'
5
+
6
+ require File.join(File.dirname(__FILE__), '../lib/object')
7
+ require File.join(File.dirname(__FILE__), '../lib/forrest/unix_console_styler')
8
+ require File.join(File.dirname(__FILE__), '../lib/forrest/runner')
9
+
10
+ FILE_S = "%%--"
11
+
12
+ # --------------------------------------------------------------------------
13
+
14
+ def file_s
15
+ colorize(FILE_S, :bold)
16
+ end
17
+
18
+ def print_test_cases(test_cases)
19
+ test_cases.each{|tc|
20
+ tests = tc.suite.tests
21
+ puts "\n+ #{colorize(tc, :bold)}#{file_s}#{@test_file}"
22
+ tests.each{|t|
23
+ puts "|__ #{colorize(tc, :cyan)}##{colorize(t.method_name, :yellow)}" +
24
+ "#{file_s}#{@test_file}\n\n"
25
+ }
26
+ }
27
+ end
28
+
29
+ def require_rails_env?
30
+ begin
31
+ require File.join(@test_dir, "../config/environment")
32
+ return true
33
+ rescue LoadError
34
+ begin
35
+ require File.join(@test_dir, "../../config/environment")
36
+ return true
37
+ rescue LoadError
38
+ return false
39
+ end
40
+ end
41
+ end
42
+
43
+ def require_active_support_or_rails_env
44
+ unless require_rails_env?
45
+ require 'active_support/core_ext/string/inflections'
46
+ require 'active_support/core_ext/string'
47
+ end
48
+ end
49
+
50
+ def show
51
+ @test_file = ARGV[0]
52
+ require @test_file
53
+ require_active_support_or_rails_env
54
+ @test_cases = test_class.subclasses
55
+ print_test_cases(@test_cases)
56
+ begin
57
+ Test::Unit::UI::Console::TestRunner.run(nil)
58
+ rescue NoMethodError
59
+ end
60
+ end
61
+
62
+ def run_story
63
+ require_test_file
64
+ Stories::ForrestRunner.run(@test_class.constantize)
65
+ end
66
+
67
+ def run_scenario
68
+ puts test_file
69
+ require_test_file
70
+ test = @test_class.constantize.suite.tests.find{|t|
71
+ t.method_name == @test_name
72
+ }
73
+
74
+ Test::Unit::UI::Console::TestRunner.run(test)
75
+ end
76
+
77
+ def require_test_file
78
+ begin
79
+ require "test/#{test_file}"
80
+ rescue LoadError
81
+ require "test/stories/#{test_file}"
82
+ end
83
+ end
84
+
85
+ def test_class
86
+ @test_class = File.basename(@test_file, ".rb").camelize.constantize
87
+ end
88
+
89
+ def test_file
90
+ @test_file = "#{@test_class.split("::")[0].underscore}"
91
+ end
92
+
93
+ def colorize(text, color)
94
+ "#{UnixConsoleStyler::STYLE[color]}#{text}\e[0m"
95
+ end
96
+
97
+ if File.file? ARGV[0]
98
+ puts "==> Printing all stories/scenarios...\n\n"
99
+ @test_dir = File.dirname(ARGV[0])
100
+ show
101
+ else
102
+ @test_dir = File.join(File.dirname(ARGV[0].split("#{FILE_S}")[1]))
103
+
104
+ if ARGV[0].include? "#"
105
+ puts "==> Runing scenario...\n\n"
106
+ @test_class = ARGV[0].split("#")[0]
107
+ @test_name = ARGV[0].split("#")[1].split("#{FILE_S}")[0]
108
+ require_active_support_or_rails_env
109
+ run_scenario
110
+ else
111
+ puts "==> Runing story...\n\n"
112
+ @test_class = ARGV[0].split("#{FILE_S}")[0]
113
+
114
+ require_active_support_or_rails_env
115
+ run_story
116
+ end
117
+ end
118
+
119
+
data/forrest.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ require 'date'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{forrest}
5
+ s.version = "0.1.0"
6
+ s.date = Date.today.to_s
7
+ s.summary = %q{Forrest is a runner for stories framework, you can run one story inside of a file that have many stories, can run one scenario or print the list of stories inside a file.}
8
+ s.description =<<DESCRIPTION
9
+ Forrest is a runner for stories framework, you can run one story
10
+ inside of a file that have many stories, can run one scenario
11
+ or print the list of stories inside a file.
12
+ DESCRIPTION
13
+
14
+ s.author = %q{Gaston Ramos}
15
+ s.email = %q{ramos.gaston@gmail.com}
16
+ s.homepage = %q{http://github.com/gramos/forrest}
17
+ s.bindir = 'bin'
18
+ s.executables = ['forrest']
19
+ s.default_executable = %q{forrest}
20
+ s.require_paths = %w{lib bin .}
21
+ s.autorequire = 'forrest'
22
+ s.rubyforge_project = %q{forrest}
23
+ s.has_rdoc = true
24
+ s.required_ruby_version = '>= 1.8'
25
+
26
+ # s.add_dependency("rmagick", ">= 1.15.7")
27
+ # s.add_dependency("OptionParser", ">= 0.5.1")
28
+
29
+ s.files = Dir.glob("**/*").delete_if { |item| item.include?(".git") }
30
+
31
+ # s.signing_key = '/home/gramos/src/ruby/ruby-sign/gem-private_key.pem'
32
+ # s.cert_chain = ['/home/gramos/src/ruby/ruby-sign/gem-public_cert.pem']
33
+
34
+ end
@@ -0,0 +1,54 @@
1
+ module Stories
2
+
3
+ class ForrestRunner < Test::Unit::UI::Console::TestRunner
4
+ def test_finished(name)
5
+ set_story
6
+ end
7
+
8
+ def add_fault(fault)
9
+ @faults << fault
10
+ end
11
+
12
+ def set_story
13
+ s ||= Story.new @suite.name
14
+ @story ||= Stories.all[s.name.constantize]
15
+ end
16
+
17
+ def print_scenario(scenario)
18
+ scenario.steps.each do |step|
19
+ puts " #{step}"
20
+ end
21
+
22
+ scenario.assertions.each do |assertion|
23
+ puts " #{assertion}"
24
+ end
25
+
26
+ puts
27
+ end
28
+
29
+ def print_story
30
+ puts "- #{colorize(@story.name, :bold)} \n\n"
31
+
32
+ @story.scenarios.each do |scenario|
33
+ puts " #{scenario.name}"
34
+
35
+ unless scenario.steps.empty? && scenario.assertions.empty?
36
+ print_scenario scenario
37
+ end
38
+ end
39
+ end
40
+
41
+ def finished(elapsed_time)
42
+ puts
43
+ print_story
44
+ super
45
+ stories_count = 1
46
+ scenarios_count = @story.scenarios.size
47
+
48
+ puts colorize("#{stories_count} story, ", :bold) +
49
+ colorize(" #{scenarios_count} scenarios", :bold)
50
+
51
+ end
52
+ end
53
+
54
+ end
File without changes
@@ -0,0 +1,40 @@
1
+ module UnixConsoleStyler
2
+ class StyleNotFoundException < Exception; end
3
+
4
+ # Availables Styles
5
+ STYLE = {
6
+ :default => "\033[0m",
7
+ # styles
8
+ :bold => "\033[1m",
9
+ :underline => "\033[4m",
10
+ :blink => "\033[5m",
11
+ :reverse => "\033[7m",
12
+ :concealed => "\033[8m",
13
+ # font colors
14
+ :black => "\033[30m",
15
+ :red => "\033[31m",
16
+ :green => "\033[32m",
17
+ :yellow => "\033[33m",
18
+ :blue => "\033[34m",
19
+ :magenta => "\033[35m",
20
+ :cyan => "\033[36m",
21
+ :white => "\033[37m",
22
+ # background colors
23
+ :on_black => "\033[40m",
24
+ :on_red => "\033[41m",
25
+ :on_green => "\033[42m",
26
+ :on_yellow => "\033[43m",
27
+ :on_blue => "\033[44m",
28
+ :on_magenta => "\033[45m",
29
+ :on_cyan => "\033[46m",
30
+ :on_white => "\033[47m" }
31
+
32
+ # Methods to use if you want to apply a style
33
+ def UnixConsoleStyler::apply_style(style)
34
+ if STYLE.has_key? style
35
+ STYLE[style]
36
+ else
37
+ raise StyleNotFoundException, "Style #{style} not found"
38
+ end
39
+ end
40
+ end
data/lib/object.rb ADDED
@@ -0,0 +1,17 @@
1
+ class Object
2
+ def self.subclasses(direct = false)
3
+ classes = []
4
+ if direct
5
+ ObjectSpace.each_object(Class) do |c|
6
+ next unless c.superclass == self
7
+ classes << c
8
+ end
9
+ else
10
+ ObjectSpace.each_object(Class) do |c|
11
+ next unless c.ancestors.include?(self) and (c != self)
12
+ classes << c
13
+ end
14
+ end
15
+ classes
16
+ end
17
+ end
data/lib/object.rb~ ADDED
File without changes
data/pri ADDED
@@ -0,0 +1,3 @@
1
+ gem build forrest.gemspec
2
+ sudo gem uninstall forrest
3
+ sudo gem install forrest-0.1.0.gem
File without changes
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'action_controller'
3
+ require 'stories'
4
+ require 'stories/runner'
5
+
6
+ class ForrestStoriesTest < ActionController::IntegrationTest
7
+ story "As a stories user I want to see the stories report " +
8
+ "in a very nice format" do
9
+
10
+ scenario "A user run forrest with a filepath as a param" do
11
+ end
12
+
13
+ scenario "A user run forrest with a StoryName as a param" do
14
+ end
15
+
16
+ end
17
+
18
+ story "As a stories user I want to see the benchmark for each scenario" do
19
+
20
+ scenario "A user run forrest with a StoryName as a param" do
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ class ForrestStoriesTest < ActionController::IntegrationTest
2
+ story "As a stories user I want to see the stories report " +
3
+ "in a very nice format" do
4
+
5
+ def setup
6
+
7
+ end
8
+
9
+ scenario "A master account tries to forbid an account" do
10
+
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: forrest
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Gaston Ramos
13
+ autorequire: forrest
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-14 00:00:00 -03:00
18
+ default_executable: forrest
19
+ dependencies: []
20
+
21
+ description: |
22
+ Forrest is a runner for stories framework, you can run one story
23
+ inside of a file that have many stories, can run one scenario
24
+ or print the list of stories inside a file.
25
+
26
+ email: ramos.gaston@gmail.com
27
+ executables:
28
+ - forrest
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - test/forrest_stories_test.rb~
35
+ - test/forest_stories_test.rb~
36
+ - test/forrest_stories_test.rb
37
+ - README.markdown
38
+ - forrest.gemspec
39
+ - bin/forrest
40
+ - pri
41
+ - forrest-0.1.0.gem
42
+ - lib/forrest/runner.rb
43
+ - lib/forrest/unix_console_styler.rb
44
+ - lib/forrest/runner.rb~
45
+ - lib/object.rb
46
+ - lib/object.rb~
47
+ has_rdoc: true
48
+ homepage: http://github.com/gramos/forrest
49
+ licenses: []
50
+
51
+ post_install_message:
52
+ rdoc_options: []
53
+
54
+ require_paths:
55
+ - lib
56
+ - bin
57
+ - .
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 1
64
+ - 8
65
+ version: "1.8"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ requirements: []
74
+
75
+ rubyforge_project: forrest
76
+ rubygems_version: 1.3.6
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Forrest is a runner for stories framework, you can run one story inside of a file that have many stories, can run one scenario or print the list of stories inside a file.
80
+ test_files: []
81
+