spec/timeliness/parser_spec.rb in timeliness-0.3.6 vs spec/timeliness/parser_spec.rb in timeliness-0.3.7

- old
+ new

@@ -18,11 +18,11 @@ parse(nil).should be_nil end it "should return return same value if value not a string" do value = Time.now - parse(value).should == value + parse(value).should eq value end it "should return time object for valid date string" do parse("2000-01-01").should be_kind_of(Time) end @@ -37,10 +37,14 @@ it "should return nil for invalid date string where month is '00'" do should_not_parse("00/01/2000") end + it "should return nil for invalid date month string" do + should_not_parse("1 Foo 2000") + end + it "should return time object for valid time string" do parse("12:13:14").should be_kind_of(Time) end it "should return nil for invalid time string" do @@ -57,18 +61,18 @@ context "string with zone offset value" do context "when current timezone is earler than string zone" do it 'should return value shifted by positive offset in default timezone' do value = parse("2000-06-01T12:00:00+02:00") - value.should == Time.local(2000,6,1,20,0,0) - value.utc_offset.should == 10.hours + value.should eq Time.local(2000,6,1,20,0,0) + value.utc_offset.should eq 10.hours end it 'should return value shifted by negative offset in default timezone' do value = parse("2000-06-01T12:00:00-01:00") - value.should == Time.local(2000,6,1,23,0,0) - value.utc_offset.should == 10.hours + value.should eq Time.local(2000,6,1,23,0,0) + value.utc_offset.should eq 10.hours end end context "when current timezone is later than string zone" do before(:all) do @@ -76,18 +80,18 @@ Time.zone = 'America/Phoenix' end it 'should return value shifted by positive offset in default timezone' do value = parse("2000-06-01T12:00:00+02:00") - value.should == Time.zone.local(2000,6,1,3,0,0) - value.utc_offset.should == -7.hours + value.should eq Time.zone.local(2000,6,1,3,0,0) + value.utc_offset.should eq -7.hours end it 'should return value shifted by negative offset in default timezone' do value = parse("2000-06-01T12:00:00-01:00") - value.should == Time.zone.local(2000,6,1,6,0,0) - value.utc_offset.should == -7.hours + value.should eq Time.zone.local(2000,6,1,6,0,0) + value.utc_offset.should eq -7.hours end after(:all) do Time.zone = nil Timeliness.default_timezone = :local @@ -101,102 +105,102 @@ end it 'should return value using string zone adjusted to default :local timezone' do Timeliness.default_timezone = :local value = parse("Thu, 01 Jun 2000 03:00:00 MST") - value.should == Time.local(2000,6,1,20,0,0) - value.utc_offset.should == 10.hours + value.should eq Time.local(2000,6,1,20,0,0) + value.utc_offset.should eq 10.hours end it 'should return value using string zone adjusted to default :current timezone' do Timeliness.default_timezone = :current Time.zone = 'Adelaide' value = parse("Thu, 01 Jun 2000 03:00:00 MST") - value.should == Time.zone.local(2000,6,1,19,30,0) - value.utc_offset.should == 9.5.hours + value.should eq Time.zone.local(2000,6,1,19,30,0) + value.utc_offset.should eq 9.5.hours end it 'should return value using string zone adjusted to :zone option string timezone' do Timeliness.default_timezone = :local value = parse("Thu, 01 Jun 2000 03:00:00 MST", :zone => 'Perth') - value.should == Time.use_zone('Perth') { Time.zone.local(2000,6,1,18,0,0) } - value.utc_offset.should == 8.hours + value.should eq Time.use_zone('Perth') { Time.zone.local(2000,6,1,18,0,0) } + value.utc_offset.should eq 8.hours end after do Time.zone = nil end end context "with :datetime type" do it "should return time object for valid datetime string" do - parse("2000-01-01 12:13:14", :datetime).should == Time.local(2000,1,1,12,13,14) + parse("2000-01-01 12:13:14", :datetime).should eq Time.local(2000,1,1,12,13,14) end it "should return nil for invalid date string" do parse("0/01/2000", :datetime).should be_nil end end context "with :date type" do it "should return time object for valid date string" do - parse("2000-01-01", :date).should == Time.local(2000,1,1) + parse("2000-01-01", :date).should eq Time.local(2000,1,1) end it "should ignore time in datetime string" do - parse('2000-02-01 12:13', :date).should == Time.local(2000,2,1) + parse('2000-02-01 12:13', :date).should eq Time.local(2000,2,1) end it "should return nil for invalid date string" do parse("0/01/2000", :date).should be_nil end end context "with :time type" do it "should return time object with a dummy date values" do - parse('12:13', :time).should == Time.local(2010,1,1,12,13) + parse('12:13', :time).should eq Time.local(2010,1,1,12,13) end it "should ignore date in datetime string" do - parse('2010-02-01 12:13', :time).should == Time.local(2010,1,1,12,13) + parse('2010-02-01 12:13', :time).should eq Time.local(2010,1,1,12,13) end it "should raise error if time hour is out of range for AM meridian" do parse('13:14 am', :time).should be_nil end end context "with :now option" do it 'should use date parts if string does not specify' do time = parse("12:13:14", :now => Time.local(2010,1,1)) - time.should == Time.local(2010,1,1,12,13,14) + time.should eq Time.local(2010,1,1,12,13,14) end end context "with time value argument" do it 'should use argument as :now option value' do time = parse("12:13:14", Time.local(2010,1,1)) - time.should == Time.local(2010,1,1,12,13,14) + time.should eq Time.local(2010,1,1,12,13,14) end end context "with :zone option" do context ":utc" do it "should return time object in utc timezone" do time = parse("2000-06-01 12:13:14", :datetime, :zone => :utc) - time.utc_offset.should == 0 + time.utc_offset.should eq 0 end it 'should return nil for partial invalid time component' do parse("2000-06-01 12:60", :datetime, :zone => :utc).should be_nil end end context ":local" do it "should return time object in local system timezone" do time = parse("2000-06-01 12:13:14", :datetime, :zone => :local) - time.utc_offset.should == 10.hours + time.utc_offset.should eq 10.hours end it 'should return nil for partial invalid time component' do parse("2000-06-01 12:60", :datetime, :zone => :local).should be_nil end @@ -204,22 +208,22 @@ context ":current" do it "should return time object in current timezone" do Time.zone = 'Adelaide' time = parse("2000-06-01 12:13:14", :datetime, :zone => :current) - time.utc_offset.should == 9.5.hours + time.utc_offset.should eq 9.5.hours end it 'should return nil for partial invalid time component' do parse("2000-06-01 12:60", :datetime, :zone => :current).should be_nil end end context "named zone" do it "should return time object in the timezone" do time = parse("2000-06-01 12:13:14", :datetime, :zone => 'London') - time.utc_offset.should == 1.hour + time.utc_offset.should eq 1.hour end it 'should return nil for partial invalid time component' do parse("2000-06-01 12:60", :datetime, :zone => 'London').should be_nil end @@ -228,21 +232,21 @@ context "without ActiveSupport loaded" do it 'should output message' do expect { Time.should_receive(:zone).and_raise(NoMethodError.new("undefined method `zone' for Time:Class")) parse("2000-06-01 12:13:14", :zone => :current) - }.should raise_error(Timeliness::Parser::MissingTimezoneSupport) + }.to raise_error(Timeliness::Parser::MissingTimezoneSupport) expect { Time.should_receive(:current).and_raise(NoMethodError.new("undefined method `current' for Time:Class")) parse("12:13:14", :zone => :current) - }.should raise_error(Timeliness::Parser::MissingTimezoneSupport) + }.to raise_error(Timeliness::Parser::MissingTimezoneSupport) expect { Time.should_receive(:use_zone).and_raise(NoMethodError.new("undefined method `use_zone' for Time:Class")) parse("2000-06-01 12:13:14", :zone => 'London') - }.should raise_error(Timeliness::Parser::MissingTimezoneSupport) + }.to raise_error(Timeliness::Parser::MissingTimezoneSupport) end end end context "for time type" do @@ -251,93 +255,93 @@ @original = Timeliness.date_for_time_type end it 'should return date array' do Timeliness.date_for_time_type = [2010,1,1] - parse('12:13:14', :time).should == Time.local(2010,1,1,12,13,14) + parse('12:13:14', :time).should eq Time.local(2010,1,1,12,13,14) end it 'should return date array evaluated lambda' do Timeliness.date_for_time_type = lambda { Time.local(2010,2,1) } - parse('12:13:14', :time).should == Time.local(2010,2,1,12,13,14) + parse('12:13:14', :time).should eq Time.local(2010,2,1,12,13,14) end after do Timeliness.date_for_time_type = @original end end context "with :now option" do it 'should use date from :now' do - parse('12:13:14', :time, :now => Time.local(2010, 6, 1)).should == Time.local(2010,6,1,12,13,14) + parse('12:13:14', :time, :now => Time.local(2010, 6, 1)).should eq Time.local(2010,6,1,12,13,14) end end context "with :zone option" do it "should use date from the specified zone" do time = parse("12:13:14", :time, :zone => :utc) - time.year.should == 2009 - time.month.should == 12 - time.day.should == 31 + time.year.should eq 2009 + time.month.should eq 12 + time.day.should eq 31 end end end end describe "_parse" do context "with no type" do it "should return date array from date string" do time_array = parser._parse('2000-02-01') - time_array.should == [2000,2,1,nil,nil,nil,nil,nil] + time_array.should eq [2000,2,1,nil,nil,nil,nil,nil] end it "should return time array from time string" do time_array = parser._parse('12:13:14', :time) - time_array.should == [nil,nil,nil,12,13,14,nil,nil] + time_array.should eq [nil,nil,nil,12,13,14,nil,nil] end it "should return datetime array from datetime string" do time_array = parser._parse('2000-02-01 12:13:14') - time_array.should == [2000,2,1,12,13,14,nil,nil] + time_array.should eq [2000,2,1,12,13,14,nil,nil] end end context "with type" do it "should return date array from date string" do time_array = parser._parse('2000-02-01', :date) - time_array.should == [2000,2,1,nil,nil,nil,nil,nil] + time_array.should eq [2000,2,1,nil,nil,nil,nil,nil] end it "should not return time array from time string for :date type" do time_array = parser._parse('12:13:14', :date) - time_array.should == nil + time_array.should eq nil end it "should return time array from time string" do time_array = parser._parse('12:13:14', :time) - time_array.should == [nil,nil,nil,12,13,14,nil,nil] + time_array.should eq [nil,nil,nil,12,13,14,nil,nil] end it "should not return date array from date string for :time type" do time_array = parser._parse('2000-02-01', :time) - time_array.should == nil + time_array.should eq nil end it "should return datetime array from datetime string when type is date" do time_array = parser._parse('2000-02-01 12:13:14', :date) - time_array.should == [2000,2,1,12,13,14,nil,nil] + time_array.should eq [2000,2,1,12,13,14,nil,nil] end it "should return date array from date string when type is datetime" do time_array = parser._parse('2000-02-01', :datetime) - time_array.should == [2000,2,1,nil,nil,nil,nil,nil] + time_array.should eq [2000,2,1,nil,nil,nil,nil,nil] end it "should not return time array from time string when type is datetime" do time_array = parser._parse('12:13:14', :datetime) - time_array.should == nil + time_array.should eq nil end end context "with :strict => true" do it "should return nil from date string when type is datetime" do @@ -377,11 +381,11 @@ end context "with :format option" do it "should return values if string matches specified format" do time_array = parser._parse('2000-02-01 12:13:14', :datetime, :format => 'yyyy-mm-dd hh:nn:ss') - time_array.should == [2000,2,1,12,13,14,nil,nil] + time_array.should eq [2000,2,1,12,13,14,nil,nil] end it "should return nil if string does not match specified format" do time_array = parser._parse('2000-02-01 12:13', :datetime, :format => 'yyyy-mm-dd hh:nn:ss') time_array.should be_nil @@ -389,34 +393,34 @@ end context "date with ambiguous year" do it "should return year in current century if year below threshold" do time_array = parser._parse('01-02-29', :date) - time_array.should == [2029,2,1,nil,nil,nil,nil,nil] + time_array.should eq [2029,2,1,nil,nil,nil,nil,nil] end it "should return year in last century if year at or above threshold" do time_array = parser._parse('01-02-30', :date) - time_array.should == [1930,2,1,nil,nil,nil,nil,nil] + time_array.should eq [1930,2,1,nil,nil,nil,nil,nil] end it "should allow custom threshold" do default = Timeliness.ambiguous_year_threshold Timeliness.ambiguous_year_threshold = 40 time_array = parser._parse('01-02-39', :date) - time_array.should == [2039,2,1,nil,nil,nil,nil,nil] + time_array.should eq [2039,2,1,nil,nil,nil,nil,nil] time_array = parser._parse('01-02-40', :date) - time_array.should == [1940,2,1,nil,nil,nil,nil,nil] + time_array.should eq [1940,2,1,nil,nil,nil,nil,nil] Timeliness.ambiguous_year_threshold = default end end end describe "make_time" do it "should return time object for valid time array" do time = parser.make_time([2010,9,8,12,13,14]) - time.should == Time.local(2010,9,8,12,13,14) + time.should eq Time.local(2010,9,8,12,13,14) end it "should return nil for invalid date in array" do time = parser.make_time([2010,13,8,12,13,14]) time.should be_nil @@ -433,11 +437,11 @@ end it "should be used if no zone value" do Timeliness.default_timezone = :utc time = parser.make_time([2000,6,1,12,0,0]) - time.utc_offset.should == 0 + time.utc_offset.should eq 0 end after do Timeliness.default_timezone = @default_timezone end @@ -445,77 +449,78 @@ context "with zone value" do context ":utc" do it "should return time object in utc timezone" do time = parser.make_time([2000,6,1,12,0,0], :utc) - time.utc_offset.should == 0 + time.utc_offset.should eq 0 end end context ":local" do it "should return time object in local system timezone" do time = parser.make_time([2000,6,1,12,0,0], :local) - time.utc_offset.should == 10.hours + time.utc_offset.should eq 10.hours end end context ":current" do it "should return time object in current timezone" do Time.zone = 'Adelaide' time = parser.make_time([2000,6,1,12,0,0], :current) - time.utc_offset.should == 9.5.hours + time.utc_offset.should eq 9.5.hours end end context "named zone" do it "should return time object in the timezone" do time = parser.make_time([2000,6,1,12,0,0], 'London') - time.utc_offset.should == 1.hour + time.utc_offset.should eq 1.hour end end end end describe "current_date" do context "with no options" do it 'should return date_for_time_type values with no options' do - current_date.should == Timeliness.date_for_time_type + dummy_date = Timeliness.date_for_time_type.call + current_date.should eq [ dummy_date.year, dummy_date.month, dummy_date.day ] end end context "with :now option" do it 'should return date array from Time value' do time = Time.now date_array = [time.year, time.month, time.day] - current_date(:now => time).should == date_array + current_date(:now => time).should eq date_array end end context "with :zone option" do it 'should return date array for utc zone' do time = Time.now.getutc date_array = [time.year, time.month, time.day] - current_date(:zone => :utc).should == date_array + current_date(:zone => :utc).should eq date_array end it 'should return date array for local zone' do time = Time.now date_array = [time.year, time.month, time.day] - current_date(:zone => :local).should == date_array + current_date(:zone => :local).should eq date_array end it 'should return date array for current zone' do Time.zone = 'London' time = Time.current date_array = [time.year, time.month, time.day] - current_date(:zone => :current).should == date_array + current_date(:zone => :current).should eq date_array end it 'should return date array for named zone' do time = Time.use_zone('London') { Time.current } date_array = [time.year, time.month, time.day] - current_date(:zone => 'London').should == date_array + current_date(:zone => 'London').should eq date_array end end end after(:all) do