bdd 0.0.7 → 0.0.8
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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -5
- data/README.md +72 -224
- data/bdd.gemspec +6 -12
- data/examples/README.md +244 -0
- data/examples/minitest/abc_test.rb +58 -0
- data/examples/rspec/abc_spec.rb +58 -0
- data/examples/rspec/examples_with_shared_code/README.txt +1 -0
- data/examples/rspec/examples_with_shared_code/basic_spec.rb +42 -0
- data/examples/rspec/examples_with_shared_code/shared_1_spec.rb +40 -0
- data/examples/rspec/examples_with_shared_code/shared_2_spec.rb +40 -0
- data/examples/rspec/zombie_example_spec.rb +59 -0
- data/lib/bdd.rb +10 -13
- data/lib/bdd/adapters.rb +7 -0
- data/lib/bdd/adapters/base.rb +47 -0
- data/lib/bdd/adapters/minitest_adapter.rb +56 -0
- data/lib/bdd/adapters/rspec_adapter.rb +75 -0
- data/lib/bdd/check.rb +50 -0
- data/lib/bdd/class_methods.rb +22 -0
- data/lib/bdd/colors.rb +34 -0
- data/lib/bdd/minitest.rb +13 -0
- data/lib/bdd/rspec.rb +8 -3
- data/lib/bdd/string_builder.rb +22 -0
- data/lib/bdd/title.rb +22 -0
- data/lib/bdd/version.rb +1 -1
- metadata +42 -12
- data/.rspec +0 -2
- data/lib/bdd/rspec/example_group.rb +0 -107
- data/lib/bdd/rspec/formatter.rb +0 -73
@@ -0,0 +1,75 @@
|
|
1
|
+
module Bdd
|
2
|
+
module Adapters
|
3
|
+
class RSpecAdapter < Base
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@example_module = ExampleGroup
|
7
|
+
@formatter_module = Formatter
|
8
|
+
@formatter_class = Bdd::RSpec::Formatter
|
9
|
+
@framework_example_class = ::RSpec::Core::ExampleGroup
|
10
|
+
end
|
11
|
+
|
12
|
+
module Formatter
|
13
|
+
def self.included(base)
|
14
|
+
::RSpec::Core::Formatters.register base
|
15
|
+
end
|
16
|
+
|
17
|
+
def example_passed(passed)
|
18
|
+
super
|
19
|
+
bdd_puts(passed.example)
|
20
|
+
end
|
21
|
+
|
22
|
+
def example_pending(pending)
|
23
|
+
super
|
24
|
+
bdd_puts(pending.example)
|
25
|
+
end
|
26
|
+
|
27
|
+
def example_failed(failure)
|
28
|
+
super
|
29
|
+
bdd_puts(failure.example)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def bdd_puts(example)
|
35
|
+
bdd_container = Bdd.get_container(example)
|
36
|
+
next_indentation = ' ' * (@group_level+1)
|
37
|
+
output.puts bdd_container.map { |message| "#{next_indentation}#{message}" }
|
38
|
+
bdd_container.clear
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module ExampleGroup
|
43
|
+
def bdd_step(title, string, &block)
|
44
|
+
@bdd_nesting ||= 0
|
45
|
+
@bdd_nesting += 1
|
46
|
+
sb = StringBuilder.new(title)
|
47
|
+
|
48
|
+
if block_given?
|
49
|
+
yield
|
50
|
+
sb.append_success(string)
|
51
|
+
else
|
52
|
+
skip
|
53
|
+
end
|
54
|
+
|
55
|
+
rescue ::RSpec::Core::Pending::SkipDeclaredInExample
|
56
|
+
sb.append_pending(string)
|
57
|
+
raise
|
58
|
+
rescue ::RSpec::Expectations::ExpectationNotMetError
|
59
|
+
sb.append_failure(string)
|
60
|
+
raise
|
61
|
+
ensure
|
62
|
+
@bdd_nesting -= 1
|
63
|
+
if @bdd_nesting.zero?
|
64
|
+
bdd_container << sb.string
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def bdd_container
|
69
|
+
Bdd.get_container(::RSpec.current_example)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/bdd/check.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
module Bdd
|
2
|
+
class Check
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
if not $SKIP_BDD_CHECK === true
|
6
|
+
if not has_loaded_with_a_test_framework?
|
7
|
+
print_out
|
8
|
+
fail SyntaxError, "Update your Gemfile"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def has_loaded_with_a_test_framework?
|
16
|
+
rspec? || minitest?
|
17
|
+
end
|
18
|
+
|
19
|
+
def rspec?
|
20
|
+
defined? Bdd::RSpec
|
21
|
+
end
|
22
|
+
|
23
|
+
def minitest?
|
24
|
+
defined? Bdd::Minitest
|
25
|
+
end
|
26
|
+
|
27
|
+
def print_out
|
28
|
+
5.times { puts }
|
29
|
+
|
30
|
+
print Colors.add("Please edit your ", :red)
|
31
|
+
print Colors.add("Gemfile ", :yellow)
|
32
|
+
puts Colors.add("to", :red)
|
33
|
+
puts
|
34
|
+
if rspec?
|
35
|
+
puts Colors.add("gem 'bdd', require: 'bdd/rspec' ", :light_white)
|
36
|
+
elsif minitest?
|
37
|
+
puts Colors.add("gem 'bdd', require: 'bdd/minitest' ", :light_white)
|
38
|
+
else
|
39
|
+
fail "This was not supposed to happen"
|
40
|
+
end
|
41
|
+
puts
|
42
|
+
|
43
|
+
print Colors.add("LEARN MORE AT ", :red)
|
44
|
+
puts Colors.add("https://github.com/thejamespinto/bdd", :light_green)
|
45
|
+
|
46
|
+
5.times { puts }
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Bdd
|
2
|
+
class << self
|
3
|
+
def adapters
|
4
|
+
@adapters ||= []
|
5
|
+
end
|
6
|
+
|
7
|
+
def define(pre_conditions, post_conditions, conjunctions)
|
8
|
+
conjunctions += pre_conditions + post_conditions
|
9
|
+
x = conjunctions.map(&:length).max
|
10
|
+
Title.length = x
|
11
|
+
|
12
|
+
adapters.each do |a|
|
13
|
+
a.define(pre_conditions, post_conditions, conjunctions)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_container(example)
|
18
|
+
@containers ||= {}
|
19
|
+
@containers[example] ||= []
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/bdd/colors.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Bdd
|
2
|
+
module Colors
|
3
|
+
SHELL_COLORS_DEFINITION =
|
4
|
+
{
|
5
|
+
:black => 30, :light_black => 90,
|
6
|
+
:red => 31, :light_red => 91,
|
7
|
+
:green => 32, :light_green => 92,
|
8
|
+
:yellow => 33, :light_yellow => 93,
|
9
|
+
:blue => 34, :light_blue => 94,
|
10
|
+
:magenta => 35, :light_magenta => 95,
|
11
|
+
:cyan => 36, :light_cyan => 96,
|
12
|
+
:white => 37, :light_white => 97,
|
13
|
+
:default => 39
|
14
|
+
}
|
15
|
+
|
16
|
+
SHELL_MODES_DEFINITION =
|
17
|
+
{
|
18
|
+
:default => 0, # Turn off all attributes
|
19
|
+
:bold => 1, # Set bold mode
|
20
|
+
:underline => 4, # Set underline mode
|
21
|
+
:blink => 5, # Set blink mode
|
22
|
+
:swap => 7, # Exchange foreground and background colors
|
23
|
+
:hide => 8 # Hide text (foreground color would be the same as background)
|
24
|
+
}
|
25
|
+
|
26
|
+
def self.add(text, color, mode = :default)
|
27
|
+
"\033[#{SHELL_MODES_DEFINITION[mode]};#{SHELL_COLORS_DEFINITION[color]}m#{text}\033[0m"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.clear(text)
|
31
|
+
text.gsub(/\033\[[0-9;]+m/m, "")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/bdd/minitest.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest'
|
2
|
+
require 'minitest/reporters'
|
3
|
+
require 'minitest/spec' # I don't understand why this does not load automatically
|
4
|
+
|
5
|
+
module Bdd
|
6
|
+
module Minitest
|
7
|
+
Reporter = Class.new(::Minitest::Reporters::SpecReporter)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'bdd' # must load after Bdd::Minitest
|
12
|
+
|
13
|
+
Bdd::Adapters::MinitestAdapter.register
|
data/lib/bdd/rspec.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspec'
|
2
2
|
|
3
|
-
|
3
|
+
module Bdd
|
4
|
+
module RSpec
|
5
|
+
Formatter = Class.new(::RSpec::Core::Formatters::DocumentationFormatter)
|
6
|
+
end
|
7
|
+
end
|
4
8
|
|
5
|
-
|
9
|
+
require 'bdd' # must load after Bdd::RSpec
|
6
10
|
|
11
|
+
Bdd::Adapters::RSpecAdapter.register
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Bdd
|
2
|
+
class StringBuilder
|
3
|
+
attr_reader :string
|
4
|
+
|
5
|
+
def initialize(string)
|
6
|
+
@string = Colors.add(Title.adjust(string), :white, :bold)
|
7
|
+
end
|
8
|
+
|
9
|
+
def append_success(string)
|
10
|
+
@string << Colors.add(string, :green)
|
11
|
+
end
|
12
|
+
|
13
|
+
def append_pending(string)
|
14
|
+
@string << Colors.add(string, :yellow)
|
15
|
+
end
|
16
|
+
|
17
|
+
def append_failure(string)
|
18
|
+
@string << Colors.add(string, :red)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/bdd/title.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Bdd
|
2
|
+
module Title
|
3
|
+
class << self
|
4
|
+
def adjust(title)
|
5
|
+
if @last_title == title
|
6
|
+
title = ''
|
7
|
+
else
|
8
|
+
@last_title = title
|
9
|
+
end
|
10
|
+
"#{title.rjust(length)} "
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :length
|
14
|
+
|
15
|
+
def length=(v)
|
16
|
+
@length ||= 0
|
17
|
+
@length = v if @length < v
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/bdd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bdd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Pinto
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -17,7 +17,7 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,28 +25,43 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest-reporters
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.9
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.9
|
41
55
|
description: Cucumber style in your RSpec tests
|
42
56
|
email:
|
43
57
|
- thejamespinto@gmail.com
|
44
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- console
|
60
|
+
- setup
|
45
61
|
extensions: []
|
46
62
|
extra_rdoc_files: []
|
47
63
|
files:
|
48
64
|
- ".gitignore"
|
49
|
-
- ".rspec"
|
50
65
|
- ".travis.yml"
|
51
66
|
- CHANGELOG.md
|
52
67
|
- Gemfile
|
@@ -55,10 +70,26 @@ files:
|
|
55
70
|
- bdd.gemspec
|
56
71
|
- bin/console
|
57
72
|
- bin/setup
|
73
|
+
- examples/README.md
|
74
|
+
- examples/minitest/abc_test.rb
|
75
|
+
- examples/rspec/abc_spec.rb
|
76
|
+
- examples/rspec/examples_with_shared_code/README.txt
|
77
|
+
- examples/rspec/examples_with_shared_code/basic_spec.rb
|
78
|
+
- examples/rspec/examples_with_shared_code/shared_1_spec.rb
|
79
|
+
- examples/rspec/examples_with_shared_code/shared_2_spec.rb
|
80
|
+
- examples/rspec/zombie_example_spec.rb
|
58
81
|
- lib/bdd.rb
|
82
|
+
- lib/bdd/adapters.rb
|
83
|
+
- lib/bdd/adapters/base.rb
|
84
|
+
- lib/bdd/adapters/minitest_adapter.rb
|
85
|
+
- lib/bdd/adapters/rspec_adapter.rb
|
86
|
+
- lib/bdd/check.rb
|
87
|
+
- lib/bdd/class_methods.rb
|
88
|
+
- lib/bdd/colors.rb
|
89
|
+
- lib/bdd/minitest.rb
|
59
90
|
- lib/bdd/rspec.rb
|
60
|
-
- lib/bdd/
|
61
|
-
- lib/bdd/
|
91
|
+
- lib/bdd/string_builder.rb
|
92
|
+
- lib/bdd/title.rb
|
62
93
|
- lib/bdd/version.rb
|
63
94
|
homepage: https://github.com/thejamespinto/bdd
|
64
95
|
licenses: []
|
@@ -79,9 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
110
|
version: '0'
|
80
111
|
requirements: []
|
81
112
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
113
|
+
rubygems_version: 2.5.1
|
83
114
|
signing_key:
|
84
115
|
specification_version: 4
|
85
116
|
summary: Cucumber style in your RSpec tests
|
86
117
|
test_files: []
|
87
|
-
has_rdoc:
|
data/.rspec
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
module Bdd
|
2
|
-
module RSpec
|
3
|
-
module ExampleGroup
|
4
|
-
|
5
|
-
def step(array, &block)
|
6
|
-
unless using_bdd_formatter?
|
7
|
-
yield if block_given?
|
8
|
-
return
|
9
|
-
end
|
10
|
-
|
11
|
-
if block_given?
|
12
|
-
if @is_during_rspec_step
|
13
|
-
yield
|
14
|
-
else
|
15
|
-
step_messages << hash = {msg: array}
|
16
|
-
@is_during_rspec_step = true
|
17
|
-
yield
|
18
|
-
# apply green color if example passes
|
19
|
-
hash[:color] = :green
|
20
|
-
@is_during_rspec_step = false
|
21
|
-
end
|
22
|
-
|
23
|
-
elsif array.last == :bdd
|
24
|
-
a = step_messages.last[:msg]
|
25
|
-
a[0] = array[0]
|
26
|
-
else
|
27
|
-
step_messages << {msg: "SKIPPED #{array}"}
|
28
|
-
end
|
29
|
-
return :bdd
|
30
|
-
end
|
31
|
-
|
32
|
-
def Given(msg, &block)
|
33
|
-
step(["Given", msg], &block)
|
34
|
-
end
|
35
|
-
|
36
|
-
def When(msg, &block)
|
37
|
-
step([" When", msg], &block)
|
38
|
-
end
|
39
|
-
|
40
|
-
def Then(msg, &block)
|
41
|
-
step([" Then", msg], &block)
|
42
|
-
end
|
43
|
-
|
44
|
-
def And(msg, &block)
|
45
|
-
step([" And", msg], &block)
|
46
|
-
end
|
47
|
-
|
48
|
-
def But(msg, &block)
|
49
|
-
step([" But", msg], &block)
|
50
|
-
end
|
51
|
-
|
52
|
-
# def AndGiven(msg, &block)
|
53
|
-
# step("And Given #{msg}", &block)
|
54
|
-
# end
|
55
|
-
|
56
|
-
# def AndWhen(msg, &block)
|
57
|
-
# step(" And When #{msg}", &block)
|
58
|
-
# end
|
59
|
-
|
60
|
-
# def AndThen(msg, &block)
|
61
|
-
# step(" And Then #{msg}", &block)
|
62
|
-
# end
|
63
|
-
|
64
|
-
# def ButGiven(msg, &block)
|
65
|
-
# step("But Given #{msg}", &block)
|
66
|
-
# end
|
67
|
-
|
68
|
-
# def ButWhen(msg, &block)
|
69
|
-
# step(" But When #{msg}", &block)
|
70
|
-
# end
|
71
|
-
|
72
|
-
# def ButThen(msg, &block)
|
73
|
-
# step(" But Then #{msg}", &block)
|
74
|
-
# end
|
75
|
-
|
76
|
-
module ClassMethods
|
77
|
-
def Given(msg, &block)
|
78
|
-
before(:each) do
|
79
|
-
Given(msg) { instance_eval(&block) }
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def When(msg, &block)
|
84
|
-
after(:each) do
|
85
|
-
When(msg) { instance_eval(&block) }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def Then(msg, &block)
|
90
|
-
after(:each) do
|
91
|
-
Then(msg) { instance_eval(&block) }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
def step_messages
|
99
|
-
::RSpec.current_example.metadata[:step_messages]
|
100
|
-
end
|
101
|
-
|
102
|
-
def using_bdd_formatter?
|
103
|
-
!step_messages.nil?
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|