Skip to content

Commit

Permalink
Some more tests around the abstract base rule
Browse files Browse the repository at this point in the history
  • Loading branch information
nevir committed Feb 5, 2014
1 parent 1857049 commit 99a1022
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 14 deletions.
11 changes: 11 additions & 0 deletions spec/common/rule_class_helpers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
shared_context 'rule class helpers' do
def new_rule_class(name)
scope = Module.new
scope.module_eval <<-end_module, __FILE__, __LINE__
class #{name} < #{described_class}; end
end_module

scope.const_get(name)
end

end
27 changes: 27 additions & 0 deletions spec/unit/dotum/abstract_rules/base/class_methods/exec_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
describe Dotum::AbstractRules::Base, '.exec' do
include_context 'rule class helpers'

subject do
new_rule_class(:SomeRuleClass).tap do |klass|
klass.class_eval do
def initialize(context, *args, &block)
@context = context
@args = args
@block = block
end

def exec
[@context, @args, @block]
end
end
end
end

it 'should pass through all arguments to initialize' do
context = Dotum::Context.new
expect(subject.exec(context, 1, 2, &:asdf)).to eq([
context, [1, 2], :asdf.to_proc
])
end

end
20 changes: 6 additions & 14 deletions spec/unit/dotum/abstract_rules/base/class_methods/pretty_spec.rb
Original file line number Diff line number Diff line change
@@ -1,32 +1,24 @@
describe Dotum::AbstractRules::Base, '.pretty' do

def new_class(name)
scope = Module.new
scope.module_eval <<-end_module, __FILE__, __LINE__
class #{name} < #{described_class}; end
end_module

scope.const_get(name)
end
include_context 'rule class helpers'

it 'should lowercase single words in the class base name' do
expect(new_class(:Pretty).pretty).to eq('pretty')
expect(new_rule_class(:Pretty).pretty).to eq('pretty')
end

it 'should snake_case MultiWordNames' do
expect(new_class(:CamelCaps).pretty).to eq('camel_caps')
expect(new_rule_class(:CamelCaps).pretty).to eq('camel_caps')
end

it 'should not split ACRONYMS' do
expect(new_class(:ABCD).pretty).to eq('abcd')
expect(new_rule_class(:ABCD).pretty).to eq('abcd')
end

it 'should split on acronym boundaries' do
expect(new_class(:ABCOneTwoThree).pretty).to eq('abc_one_two_three')
expect(new_rule_class(:ABCOneTwoThree).pretty).to eq('abc_one_two_three')
end

it 'should memoize' do
klass = new_class(:CamelCaps)
klass = new_rule_class(:CamelCaps)
klass.pretty

# https://github.com/mbj/mutant/issues/150
Expand Down
14 changes: 14 additions & 0 deletions spec/unit/dotum/abstract_rules/base/execute_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
describe Dotum::AbstractRules::Base, '#execute' do
include_context 'rule class helpers'

subject do
new_rule_class(:SomeRule).new(Dotum::Context.new)
end

it 'should be abstract' do
expect { subject.exec }.to raise_error(
NotImplementedError, /execute/
)
end

end
14 changes: 14 additions & 0 deletions spec/unit/dotum/abstract_rules/base/pretty_subject_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
describe Dotum::AbstractRules::Base, '#pretty_subject' do
include_context 'rule class helpers'

subject do
new_rule_class(:SomeRule).new(Dotum::Context.new)
end

it 'should be abstract' do
expect { subject.pretty_subject }.to raise_error(
NotImplementedError, /pretty_subject/
)
end

end

0 comments on commit 99a1022

Please sign in to comment.