Fix for Ruby 1.8.6 compatibility
[merb_global.git] / spec / date_providers_spec.rb
blobca1e36034f97514372dfcd3e28560a0019008131
1 require 'spec_helper'
3 class TestDateProvider
4   include Merb::Global::DateProviders::Base
5 end
7 module Merb::Global::DateProviders
8   def self.clear
9     @@provider = nil
10     @@providers = {}
11     @@providers_classes = {}
12   end
13   def self.provider= provider
14     @@provider = provider
15   end
16 end
18 describe Merb::Global::DateProviders do
19   before do
20     Merb::Global::DateProviders.clear
21   end
22   describe '.provider' do
23     it 'should return fork as default' do
24       provider = mock
25       Merb::Global.expects(:config).with(:date_provider, 'fork').
26                    returns('fork')
27       Merb::Global::DateProviders.expects(:[]).with('fork').returns(provider)
28       Merb::Global::DateProviders.provider.should == provider
29     end
31     it 'should return the name of the provider in config' do
32       provider = mock
33       Merb::Global.expects(:config).with(:date_provider, 'fork').
34                    returns('name')
35       Merb::Global::DateProviders.expects(:[]).with('name').
36                                      returns(provider)
37       Merb::Global::DateProviders.provider.should == provider
38     end
40     it 'should return cached provider' do
41       provider = mock
42       Merb::Global::DateProviders.provider = provider
43       Merb::Global::DateProviders.provider.should == provider
44     end
45   end
46 end
48 describe Merb::Global::DateProviders::Base do
49   before do
50     @provider = TestDateProvider.new
51   end
53   describe '.localize' do
54     it 'should raise NoMethodError' do
55       lambda do
56         @provider.localize 'en', Date.new, '%A'
57       end.should raise_error(NoMethodError)
58     end
59   end
60 end
62 describe 'Merb::Global.DateProvider' do
63   it 'should create a module' do
64     mod = Module.new
65     Module.expects(:new).returns(mod)
66     Merb::Global.DateProvider(:test).should == mod
67   end
68   
69   it 'should include base only' do
70     Module.any_instance.expects(:include).
71                         with(Merb::Global::DateProviders::Base)
72     Merb::Global.DateProvider(:test1)
73   end
75   it 'should register when include' do
76     klass = Class.new
77     Merb::Global::DateProviders.expects(:register).with(:test2, klass)
78     klass.instance_eval do
79       include Merb::Global.DateProvider(:test2)
80     end
81   end
82 end