test-unit-context 0.2.0 → 0.3.0

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/README.md CHANGED
@@ -94,6 +94,27 @@ end
94
94
 
95
95
  ```
96
96
 
97
+ ### Spec Mode
98
+
99
+ ```ruby
100
+ require 'test/unit/context/spec'
101
+
102
+ describe ChuckNorris, '#fart' do
103
+
104
+ setup do
105
+ @subject = ChuckNorris.new
106
+ @subject.fart
107
+ end
108
+
109
+ it "creates a parallel universe" do
110
+ assert Object.const_defined?(:Universe)
111
+ assert_equal @subject, Universe.instance
112
+ assert_empty ObjectSpace.each_object(Universe).to_a
113
+ end
114
+
115
+ end
116
+ ```
117
+
97
118
  ## Copyright
98
119
 
99
120
  Copyright (c) 2012 [Karol Bucek](https://github.com/kares).
@@ -23,4 +23,7 @@ end
23
23
  require 'test/unit/context/context'
24
24
  Test::Unit::TestCase.extend Test::Unit::Context::Context
25
25
  require 'test/unit/context/shared'
26
- Test::Unit::TestCase.extend Test::Unit::Context::Shared
26
+ Test::Unit::TestCase.extend Test::Unit::Context::Shared
27
+
28
+ # NOTE: this pollutes it's left to the user to load it :
29
+ # require 'test/unit/context/spec'
@@ -1,12 +1,13 @@
1
- require 'time'
2
-
3
1
  module Test::Unit::Context
4
2
  module Context
5
3
 
4
+ PREFIX = 'Context'.freeze # :nodoc:
5
+ SUFFIX = nil # :nodoc:
6
+
6
7
  # Add a context to a set of tests.
7
8
  #
8
9
  # context "A new account" do
9
- # test "does not have users"
10
+ # test "does not have users" do
10
11
  # assert Account.new.users.empty?
11
12
  # end
12
13
  # end
@@ -35,7 +36,7 @@ module Test::Unit::Context
35
36
  def context(name = nil, &block)
36
37
  name ||= Helpers.generate_uuid
37
38
  # context "created with defaults" ... 'ContextCreatedWithDefaults'
38
- class_name = Helpers.to_const_name(name.to_s, 'Context')
39
+ class_name = Helpers.to_const_name(name.to_s, PREFIX, SUFFIX)
39
40
  if const_defined?(class_name)
40
41
  klass = const_get(class_name)
41
42
  if ( klass.superclass == self rescue nil )
@@ -1,14 +1,18 @@
1
+ require 'time'
2
+
1
3
  module Test::Unit::Context
2
4
  module Helpers
3
5
 
4
6
  module_function
5
7
 
6
- def to_const_name(str, prefix = nil)
7
- name = prefix ? str.dup : str.lstrip
8
+ def to_const_name(str, prefix = nil, suffix = nil)
9
+ name = str.dup
10
+ name.lstrip! if prefix
11
+ name.rstrip! if suffix
8
12
  name.gsub!(/[\s:',\.~;!#=\(\)&]+/, '_')
9
13
  name.gsub!(/\/(.?)/) { $1.upcase }
10
14
  name.gsub!(/(?:^|_)(.)/) { $1.upcase }
11
- prefix ? "#{prefix}#{name}" : name
15
+ "#{prefix}#{name}#{suffix}"
12
16
  end
13
17
 
14
18
  def generate_uuid
@@ -3,7 +3,7 @@ module Test::Unit::Context
3
3
 
4
4
  # Share behavior among different contexts.
5
5
  # This creates a module (actually, a Module subclass) that is included
6
- # using the +use+ method (or one of its aliases) provided by context (or
6
+ # using the +like+ method (or one of its aliases) provided by context (or
7
7
  # +include+ if you know the module's constant name).
8
8
  #
9
9
  # ==== Examples
@@ -0,0 +1,59 @@
1
+ module Test::Unit::Context
2
+ module Spec
3
+
4
+ PREFIX = nil # :nodoc:
5
+ SUFFIX = 'Test'.freeze # :nodoc:
6
+
7
+ # Spec style Test::Unit::TestCase (sub-classes) :
8
+ #
9
+ # describe User do
10
+ # it "creates a new instance" do
11
+ # assert_nothing_raised { User.new }
12
+ # end
13
+ # end
14
+ #
15
+ # You need to `require 'test/unit/context/spec'` ( e.g. in test_helper.rb).
16
+ #
17
+ # The generated Test::Unit::TestCase sub-class follows the "Test" suffix
18
+ # naming convention e.g. `describe User` ends up as `UserTest < TestCase`.
19
+ #
20
+ def describe(*args, &block)
21
+ name = args.map { |arg| arg.is_a?(Class) ? arg.name : arg }.join
22
+ class_name = Helpers.to_const_name(name.freeze, PREFIX, SUFFIX)
23
+ self_klass = self.is_a?(Class) ? self : self.class # nested describes
24
+ if self_klass.const_defined?(class_name)
25
+ klass = self_klass.const_get(class_name)
26
+ if klass <= Test::Unit::TestCase
27
+ warn "duplicate test-case describe with args #{args.inspect} " <<
28
+ "found at #{caller.first} it is going to be merged with " <<
29
+ "the previous TestCase definition"
30
+ else
31
+ raise "could not create a test-case with args #{args.inspect} " <<
32
+ "as a constant #{class_name} is already defined and is not " <<
33
+ "another TestCase definition"
34
+ end
35
+ else
36
+ # NOTE: context inherits from nesting case but describe should not :
37
+ #is_test_case = ( self_klass <= Test::Unit::TestCase )
38
+ #klass = Class.new is_test_case ? self_klass : Test::Unit::TestCase
39
+ klass = Class.new(Test::Unit::TestCase)
40
+ klass.send(:define_method, :name) { name }
41
+ klass.extend Methods
42
+ self_klass.const_set(class_name, klass)
43
+ end
44
+ klass.class_eval(&block)
45
+ klass
46
+ end
47
+
48
+ module Methods
49
+
50
+ # It is an alias for Test::Unit's test method.
51
+ # @see Test::Unit::TestCase#test
52
+ def it(*args, &block); test(*args, &block); end
53
+
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+ Object.send :include, Test::Unit::Context::Spec
@@ -1,7 +1,7 @@
1
1
  module Test
2
2
  module Unit
3
3
  module Context
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,46 @@
1
+ # #see spec_test.rb
2
+
3
+ class User42; end
4
+
5
+ describe User42 do
6
+
7
+ it 'can create a new instance' do
8
+ assert_nothing_raised do
9
+ User42.new
10
+ end
11
+ end
12
+
13
+ describe 'nested' do
14
+
15
+ it 'sets SPEC_SAMPLE constant' do
16
+ User42.const_set(:SPEC_SAMPLE, true)
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ describe User42, '#new' do
24
+
25
+ setup do
26
+ @user = User42.new
27
+ end
28
+
29
+ test 'setup a new instance' do
30
+ assert_not_nil @user
31
+ assert_instance_of User42, @user
32
+ end
33
+
34
+ end
35
+
36
+ class Foo
37
+ def bar; :baz; end
38
+ end
39
+
40
+ describe Foo, 'bar', :baz do
41
+
42
+ it 'works' do
43
+ assert_equal :'baz', Foo.new.bar
44
+ end
45
+
46
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path('../../../test_helper', File.dirname(__FILE__))
2
+
3
+ module Test::Unit::Context
4
+ class SpecTest < Test::Unit::TestCase
5
+
6
+ require 'test/unit/context/spec'
7
+ require 'test/unit/context/spec_spec'
8
+
9
+ def test_sets_up_describe
10
+ assert self.class.respond_to?(:describe)
11
+ assert ::Object.respond_to?(:describe)
12
+ end
13
+
14
+ #def test_sets_up_it_alias
15
+ #assert self.class.respond_to? :it
16
+ #end
17
+
18
+ test "set-up spec_spec TestCase constants" do
19
+ # describe User42
20
+ assert Object.const_defined?(:User42Test)
21
+ user_42_test = Object.const_get(:User42Test)
22
+ assert_equal Test::Unit::TestCase, user_42_test.superclass
23
+ #assert_equal 'User42', user_42_test.name
24
+
25
+ # describe 'nested'
26
+ assert user_42_test.const_defined?(:NestedTest)
27
+ user_42_nested_test = user_42_test.const_get(:NestedTest)
28
+ #assert_equal user_42_test, user_42_nested_test.superclass
29
+ assert_equal Test::Unit::TestCase, user_42_nested_test.superclass
30
+ #assert_equal 'nested', user_42_nested_test.name
31
+
32
+ # describe User42, '#new'
33
+ assert Object.const_defined?(:User42NewTest)
34
+ user_42_new_test = Object.const_get(:User42NewTest)
35
+ assert_equal Test::Unit::TestCase, user_42_new_test.superclass
36
+ #assert_equal 'User42#new', user_42_new_test.name
37
+
38
+ # describe Foo, 'bar', :baz
39
+ assert Object.const_defined?(:FoobarbazTest)
40
+ end
41
+
42
+ test "run spec_spec 'it' tests" do
43
+ at_exit { assert ::User42::SPEC_SAMPLE }
44
+ end
45
+
46
+ end
47
+ end
@@ -145,7 +145,6 @@ module Test::Unit
145
145
  @@warns = nil
146
146
  def self.warn(message)
147
147
  ( @@warns ||= [] ) << message
148
- super
149
148
  end
150
149
  def self.warns; @@warns; end
151
150
  def self.reset_warns; @@warns = nil; end
metadata CHANGED
@@ -1,98 +1,105 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: test-unit-context
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.3.0
6
6
  platform: ruby
7
- authors:
8
- - kares
7
+ authors:
8
+ - kares
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-16 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: test-unit
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 2.4.0
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 2.4.0
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- description: ! "Makes Test::Unit::TestCases 'contextable' and thus much\neasier to
47
- read and write. If you've seen RSpec than it's the very same 'context \ndo ... end'
48
- re-invendet for Test::Unit. Inspired by gem 'context' that does the\nsame for the
49
- 'old' Test::Unit 1.2.3 bundled with Ruby 1.8.x standard libraries."
50
- email:
51
- - self@kares.org
12
+
13
+ date: 2013-02-11 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: test-unit
17
+ version_requirements: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.4.0
23
+ requirement: *id001
24
+ prerelease: false
25
+ type: :runtime
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ version_requirements: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ requirement: *id002
35
+ prerelease: false
36
+ type: :development
37
+ description: |-
38
+ Makes Test::Unit::TestCases 'contextable' and thus much
39
+ easier to read and write. If you've seen RSpec than it's the very same 'context
40
+ do ... end' re-invendet for Test::Unit. Inspired by gem 'context' that does the
41
+ same for the 'old' Test::Unit 1.2.3 bundled with Ruby 1.8.x standard libraries.
42
+ email:
43
+ - self@kares.org
52
44
  executables: []
45
+
53
46
  extensions: []
54
- extra_rdoc_files:
55
- - README.md
56
- - LICENSE
57
- files:
58
- - .gitignore
59
- - .travis.yml
60
- - Gemfile
61
- - LICENSE
62
- - README.md
63
- - Rakefile
64
- - lib/test/unit/context.rb
65
- - lib/test/unit/context/context.rb
66
- - lib/test/unit/context/helpers.rb
67
- - lib/test/unit/context/shared.rb
68
- - lib/test/unit/context/version.rb
69
- - test-unit-context.gemspec
70
- - test/test/unit/context/hooks_test.rb
71
- - test/test/unit/context/shared_test.rb
72
- - test/test/unit/context_test.rb
73
- - test/test_helper.rb
47
+
48
+ extra_rdoc_files:
49
+ - README.md
50
+ - LICENSE
51
+ files:
52
+ - .gitignore
53
+ - .travis.yml
54
+ - Gemfile
55
+ - LICENSE
56
+ - README.md
57
+ - Rakefile
58
+ - lib/test/unit/context.rb
59
+ - lib/test/unit/context/context.rb
60
+ - lib/test/unit/context/helpers.rb
61
+ - lib/test/unit/context/shared.rb
62
+ - lib/test/unit/context/spec.rb
63
+ - lib/test/unit/context/version.rb
64
+ - test-unit-context.gemspec
65
+ - test/test/unit/context/hooks_test.rb
66
+ - test/test/unit/context/shared_test.rb
67
+ - test/test/unit/context/spec_spec.rb
68
+ - test/test/unit/context/spec_test.rb
69
+ - test/test/unit/context_test.rb
70
+ - test/test_helper.rb
74
71
  homepage: http://github.com/kares/test-unit-context
75
72
  licenses: []
73
+
76
74
  post_install_message:
77
75
  rdoc_options: []
78
- require_paths:
79
- - lib
80
- required_ruby_version: !ruby/object:Gem::Requirement
76
+
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
81
80
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 2
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
89
  none: false
88
- requirements:
89
- - - ! '>='
90
- - !ruby/object:Gem::Version
91
- version: '0'
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 2
94
+ segments:
95
+ - 0
96
+ version: "0"
92
97
  requirements: []
98
+
93
99
  rubyforge_project:
94
100
  rubygems_version: 1.8.24
95
101
  signing_key:
96
102
  specification_version: 3
97
103
  summary: Context for Test::Unit (2.x)
98
104
  test_files: []
105
+