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.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,6 +1,11 @@
1
- require 'bdd/rspec/example_group'
1
+ require 'rspec'
2
2
 
3
- RSpec::Core::ExampleGroup.send :include, Bdd::RSpec::ExampleGroup
3
+ module Bdd
4
+ module RSpec
5
+ Formatter = Class.new(::RSpec::Core::Formatters::DocumentationFormatter)
6
+ end
7
+ end
4
8
 
5
- RSpec::Core::ExampleGroup.send :extend, Bdd::RSpec::ExampleGroup::ClassMethods
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Bdd
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
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.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Pinto
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-06 00:00:00.000000000 Z
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: :runtime
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: colorize
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: :runtime
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/rspec/example_group.rb
61
- - lib/bdd/rspec/formatter.rb
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.4.8
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,2 +0,0 @@
1
- --format Bdd::RSpec::Formatter
2
- --color
@@ -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