/vendor/bundle/jruby/2.1/gems/rspec-core-2.14.8/spec/rspec/core/shared_example_group_spec.rb
https://github.com/delowong/logstash · Ruby · 120 lines · 111 code · 9 blank · 0 comment · 0 complexity · 742318b98a5e722b5ddcdf753b2c9265 MD5 · raw file
- require 'spec_helper'
- module RandomTopLevelModule
- def self.setup!
- shared_examples_for("top level in module") {}
- end
- end
- module RSpec::Core
- describe SharedExampleGroup do
- ExampleModule = Module.new
- ExampleClass = Class.new
- it 'does not add a bunch of private methods to Module' do
- seg_methods = RSpec::Core::SharedExampleGroup.private_instance_methods
- expect(Module.private_methods & seg_methods).to eq([])
- end
- module SharedExampleGroup
- describe Registry do
- it "can safely be reset when there aren't any shared groups" do
- expect { Registry.new.clear }.to_not raise_error
- end
- end
- end
- before(:all) do
- # this is a work around as SharedExampleGroup is not world safe
- RandomTopLevelModule.setup!
- end
- %w[share_examples_for shared_examples_for shared_examples shared_context].each do |shared_method_name|
- describe shared_method_name do
- it "is exposed to the global namespace" do
- expect(Kernel).to respond_to(shared_method_name)
- end
- it "displays a warning when adding a second shared example group with the same name" do
- group = ExampleGroup.describe('example group')
- group.send(shared_method_name, 'some shared group') {}
- original_declaration = [__FILE__, __LINE__ - 1].join(':')
- warning = nil
- Kernel.stub(:warn) { |msg| warning = msg }
- group.send(shared_method_name, 'some shared group') {}
- second_declaration = [__FILE__, __LINE__ - 1].join(':')
- expect(warning).to include('some shared group', original_declaration, second_declaration)
- end
- it 'works with top level defined examples in modules' do
- expect(RSpec::configuration.reporter).to_not receive(:deprecation)
- group = ExampleGroup.describe('example group') { include_context 'top level in module' }
- end
- ["name", :name, ExampleModule, ExampleClass].each do |object|
- type = object.class.name.downcase
- context "given a #{type}" do
- it "captures the given #{type} and block in the collection of shared example groups" do
- implementation = lambda {}
- send(shared_method_name, object, &implementation)
- expect(SharedExampleGroup.registry.shared_example_groups[self][object]).to eq implementation
- end
- end
- end
- context "given a hash" do
- it "delegates extend on configuration" do
- implementation = Proc.new { def bar; 'bar'; end }
- send(shared_method_name, :foo => :bar, &implementation)
- a = RSpec.configuration.include_or_extend_modules.first
- expect(a[0]).to eq(:extend)
- expect(Class.new.extend(a[1]).new.bar).to eq('bar')
- expect(a[2]).to eq(:foo => :bar)
- end
- end
- context "given a string and a hash" do
- it "captures the given string and block in the World's collection of shared example groups" do
- implementation = lambda {}
- send(shared_method_name, "name", :foo => :bar, &implementation)
- expect(SharedExampleGroup.registry.shared_example_groups[self]["name"]).to eq implementation
- end
- it "delegates extend on configuration" do
- implementation = Proc.new { def bar; 'bar'; end }
- send(shared_method_name, "name", :foo => :bar, &implementation)
- a = RSpec.configuration.include_or_extend_modules.first
- expect(a[0]).to eq(:extend)
- expect(Class.new.extend(a[1]).new.bar).to eq('bar')
- expect(a[2]).to eq(:foo => :bar)
- end
- end
- end
- end
- describe "#share_as" do
- before { allow(RSpec).to receive(:deprecate) }
- it "is exposed to the global namespace" do
- expect(Kernel).to respond_to("share_as")
- end
- it "adds examples to current example_group using include", :compat => 'rspec-1.2' do
- share_as('Cornucopia') do
- it "is plentiful" do
- expect(5).to eq(4)
- end
- end
- group = ExampleGroup.describe('group') { include Cornucopia }
- phantom_group = group.children.first
- expect(phantom_group.description).to eql("")
- expect(phantom_group.metadata[:shared_group_name]).to eql('Cornucopia')
- expect(phantom_group.examples.length).to eq(1)
- expect(phantom_group.examples.first.metadata[:description]).to eq("is plentiful")
- end
- end
- end
- end