diff options
Diffstat (limited to 'spec/ruby/library/datetime')
38 files changed, 770 insertions, 0 deletions
diff --git a/spec/ruby/library/datetime/_strptime_spec.rb b/spec/ruby/library/datetime/_strptime_spec.rb new file mode 100644 index 0000000000..abec26ff9f --- /dev/null +++ b/spec/ruby/library/datetime/_strptime_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime._strptime" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/add_spec.rb b/spec/ruby/library/datetime/add_spec.rb new file mode 100644 index 0000000000..20288e2105 --- /dev/null +++ b/spec/ruby/library/datetime/add_spec.rb @@ -0,0 +1,9 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#+" do + it "is able to add sub-millisecond precision values" do + datetime = DateTime.new(2017) + (datetime + 0.00001001).to_time.usec.should == 864864 + end +end diff --git a/spec/ruby/library/datetime/civil_spec.rb b/spec/ruby/library/datetime/civil_spec.rb new file mode 100644 index 0000000000..fb6f67f16d --- /dev/null +++ b/spec/ruby/library/datetime/civil_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.civil" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/commercial_spec.rb b/spec/ruby/library/datetime/commercial_spec.rb new file mode 100644 index 0000000000..ad97b2a80e --- /dev/null +++ b/spec/ruby/library/datetime/commercial_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.commercial" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/deconstruct_keys_spec.rb b/spec/ruby/library/datetime/deconstruct_keys_spec.rb new file mode 100644 index 0000000000..154c024a23 --- /dev/null +++ b/spec/ruby/library/datetime/deconstruct_keys_spec.rb @@ -0,0 +1,44 @@ +require_relative '../../spec_helper' +require 'date' +date_version = defined?(Date::VERSION) ? Date::VERSION : '3.1.0' + +describe "DateTime#deconstruct_keys" do + it "returns whole hash for nil as an argument" do + d = DateTime.new(2022, 10, 5, 13, 30) + res = { year: 2022, month: 10, day: 5, yday: 278, wday: 3, hour: 13, + min: 30, sec: 0, sec_fraction: (0/1), zone: "+00:00" } + d.deconstruct_keys(nil).should == res + end + + it "returns only specified keys" do + d = DateTime.new(2022, 10, 5, 13, 39) + d.deconstruct_keys([:zone, :hour]).should == { zone: "+00:00", hour: 13 } + end + + it "requires one argument" do + -> { + DateTime.new(2022, 10, 5, 13, 30).deconstruct_keys + }.should raise_error(ArgumentError) + end + + it "it raises error when argument is neither nil nor array" do + d = DateTime.new(2022, 10, 5, 13, 30) + + -> { d.deconstruct_keys(1) }.should raise_error(TypeError, "wrong argument type Integer (expected Array or nil)") + -> { d.deconstruct_keys("asd") }.should raise_error(TypeError, "wrong argument type String (expected Array or nil)") + -> { d.deconstruct_keys(:x) }.should raise_error(TypeError, "wrong argument type Symbol (expected Array or nil)") + -> { d.deconstruct_keys({}) }.should raise_error(TypeError, "wrong argument type Hash (expected Array or nil)") + end + + it "returns {} when passed []" do + DateTime.new(2022, 10, 5, 13, 30).deconstruct_keys([]).should == {} + end + + it "ignores non-Symbol keys" do + DateTime.new(2022, 10, 5, 13, 30).deconstruct_keys(['year', []]).should == {} + end + + it "ignores not existing Symbol keys" do + DateTime.new(2022, 10, 5, 13, 30).deconstruct_keys([:year, :a]).should == { year: 2022 } + end +end diff --git a/spec/ruby/library/datetime/hour_spec.rb b/spec/ruby/library/datetime/hour_spec.rb new file mode 100644 index 0000000000..8efd5f92f0 --- /dev/null +++ b/spec/ruby/library/datetime/hour_spec.rb @@ -0,0 +1,47 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#hour" do + it "returns 0 if no argument is passed" do + DateTime.new.hour.should == 0 + end + + it "returns the hour given as argument" do + new_datetime(hour: 5).hour.should == 5 + end + + it "adds 24 to negative hours" do + new_datetime(hour: -10).hour.should == 14 + end + + it "raises an error for Rational" do + -> { new_datetime(hour: 1 + Rational(1,2)) }.should raise_error(ArgumentError) + end + + it "raises an error for Float" do + -> { new_datetime(hour: 1.5).hour }.should raise_error(ArgumentError) + end + + it "raises an error for Rational" do + -> { new_datetime(day: 1 + Rational(1,2)) }.should raise_error(ArgumentError) + end + + it "raises an error, when the hour is smaller than -24" do + -> { new_datetime(hour: -25) }.should raise_error(ArgumentError) + end + + it "raises an error, when the hour is larger than 24" do + -> { new_datetime(hour: 25) }.should raise_error(ArgumentError) + end + + it "raises an error for hour fractions smaller than -24" do + -> { new_datetime(hour: -24 - Rational(1,2)) }.should( + raise_error(ArgumentError)) + end + + it "adds 1 to day, when 24 hours given" do + d = new_datetime day: 1, hour: 24 + d.hour.should == 0 + d.day.should == 2 + end +end diff --git a/spec/ruby/library/datetime/httpdate_spec.rb b/spec/ruby/library/datetime/httpdate_spec.rb new file mode 100644 index 0000000000..68e45cbff0 --- /dev/null +++ b/spec/ruby/library/datetime/httpdate_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.httpdate" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/iso8601_spec.rb b/spec/ruby/library/datetime/iso8601_spec.rb new file mode 100644 index 0000000000..457881277a --- /dev/null +++ b/spec/ruby/library/datetime/iso8601_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.iso8601" do + it "needs to be reviewed for spec completeness" +end + +describe "DateTime#iso8601" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/jd_spec.rb b/spec/ruby/library/datetime/jd_spec.rb new file mode 100644 index 0000000000..1e783f5af4 --- /dev/null +++ b/spec/ruby/library/datetime/jd_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.jd" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/jisx0301_spec.rb b/spec/ruby/library/datetime/jisx0301_spec.rb new file mode 100644 index 0000000000..ab26aa2d73 --- /dev/null +++ b/spec/ruby/library/datetime/jisx0301_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.jisx0301" do + it "needs to be reviewed for spec completeness" +end + +describe "DateTime#jisx0301" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/min_spec.rb b/spec/ruby/library/datetime/min_spec.rb new file mode 100644 index 0000000000..a1eaa214cb --- /dev/null +++ b/spec/ruby/library/datetime/min_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/min' + +describe "DateTime.min" do + it_behaves_like :datetime_min, :min +end diff --git a/spec/ruby/library/datetime/minute_spec.rb b/spec/ruby/library/datetime/minute_spec.rb new file mode 100644 index 0000000000..acdfeda345 --- /dev/null +++ b/spec/ruby/library/datetime/minute_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/min' + +describe "DateTime.minute" do + it_behaves_like :datetime_min, :minute +end diff --git a/spec/ruby/library/datetime/new_offset_spec.rb b/spec/ruby/library/datetime/new_offset_spec.rb new file mode 100644 index 0000000000..bc0988f32d --- /dev/null +++ b/spec/ruby/library/datetime/new_offset_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#new_offset" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/new_spec.rb b/spec/ruby/library/datetime/new_spec.rb new file mode 100644 index 0000000000..6a4dced384 --- /dev/null +++ b/spec/ruby/library/datetime/new_spec.rb @@ -0,0 +1,52 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.new" do + it "sets all values to default if passed no arguments" do + d = DateTime.new + d.year.should == -4712 + d.month.should == 1 + d.day.should == 1 + d.hour.should == 0 + d.min.should == 0 + d.sec.should == 0 + d.sec_fraction.should == 0 + d.offset.should == 0 + end + + it "takes the first argument as year" do + DateTime.new(2011).year.should == 2011 + end + + it "takes the second argument as month" do + DateTime.new(2011, 2).month.should == 2 + end + + it "takes the third argument as day" do + DateTime.new(2011, 2, 3).day.should == 3 + end + + it "takes the forth argument as hour" do + DateTime.new(2011, 2, 3, 4).hour.should == 4 + end + + it "takes the fifth argument as minute" do + DateTime.new(1, 2, 3, 4, 5).min.should == 5 + end + + it "takes the sixth argument as second" do + DateTime.new(1, 2, 3, 4, 5, 6).sec.should == 6 + end + + it "takes the seventh argument as an offset" do + DateTime.new(1, 2, 3, 4, 5, 6, 0.7).offset.should == 0.7 + end + + it "takes the eighth argument as the date of calendar reform" do + DateTime.new(1, 2, 3, 4, 5, 6, 0.7, Date::ITALY).start().should == Date::ITALY + end + + it "raises an error on invalid arguments" do + -> { new_datetime(minute: 999) }.should raise_error(ArgumentError) + end +end diff --git a/spec/ruby/library/datetime/now_spec.rb b/spec/ruby/library/datetime/now_spec.rb new file mode 100644 index 0000000000..9f22153c15 --- /dev/null +++ b/spec/ruby/library/datetime/now_spec.rb @@ -0,0 +1,25 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.now" do + it "creates an instance of DateTime" do + DateTime.now.should be_an_instance_of(DateTime) + end + + it "sets the current date" do + (DateTime.now - Date.today).to_f.should be_close(0.0, TIME_TOLERANCE) + end + + it "sets the current time" do + dt = DateTime.now + now = Time.now + (dt.to_time - now).should be_close(0.0, TIME_TOLERANCE) + end + + it "grabs the local timezone" do + with_timezone("PDT", -8) do + dt = DateTime.now + dt.zone.should == "-08:00" + end + end +end diff --git a/spec/ruby/library/datetime/offset_spec.rb b/spec/ruby/library/datetime/offset_spec.rb new file mode 100644 index 0000000000..e25e7a0f35 --- /dev/null +++ b/spec/ruby/library/datetime/offset_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#offset" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/ordinal_spec.rb b/spec/ruby/library/datetime/ordinal_spec.rb new file mode 100644 index 0000000000..64b154ee9b --- /dev/null +++ b/spec/ruby/library/datetime/ordinal_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.ordinal" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/parse_spec.rb b/spec/ruby/library/datetime/parse_spec.rb new file mode 100644 index 0000000000..e9bf4e2ed1 --- /dev/null +++ b/spec/ruby/library/datetime/parse_spec.rb @@ -0,0 +1,127 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.parse" do + + it "parses a day name into a DateTime object" do + d = DateTime.parse("friday") + d.should == DateTime.commercial(d.cwyear, d.cweek, 5) + end + + it "parses a month name into a DateTime object" do + d = DateTime.parse("october") + d.should == DateTime.civil(Date.today.year, 10) + end + + it "parses a month day into a DateTime object" do + d = DateTime.parse("5th") + d.should == DateTime.civil(Date.today.year, Date.today.month, 5) + end + + # Specs using numbers + it "throws an argument error for a single digit" do + ->{ DateTime.parse("1") }.should raise_error(ArgumentError) + end + + it "parses DD as month day number" do + d = DateTime.parse("10") + d.should == DateTime.civil(Date.today.year, Date.today.month, 10) + end + + it "parses DDD as year day number" do + d = DateTime.parse("100") + if DateTime.gregorian_leap?(Date.today.year) + d.should == DateTime.civil(Date.today.year, 4, 9) + else + d.should == DateTime.civil(Date.today.year, 4, 10) + end + end + + it "parses MMDD as month and day" do + d = DateTime.parse("1108") + d.should == DateTime.civil(Date.today.year, 11, 8) + end + + it "parses YYYYMMDD as year, month and day" do + d = DateTime.parse("20121108") + d.should == DateTime.civil(2012, 11, 8) + end + + describe "YYYY-MM-DDTHH:MM:SS format" do + it "parses YYYY-MM-DDTHH:MM:SS into a DateTime object" do + d = DateTime.parse("2012-11-08T15:43:59") + d.should == DateTime.civil(2012, 11, 8, 15, 43, 59) + end + + it "throws an argument error for invalid month values" do + ->{DateTime.parse("2012-13-08T15:43:59")}.should raise_error(ArgumentError) + end + + it "throws an argument error for invalid day values" do + ->{DateTime.parse("2012-12-32T15:43:59")}.should raise_error(ArgumentError) + end + + it "throws an argument error for invalid hour values" do + ->{DateTime.parse("2012-12-31T25:43:59")}.should raise_error(ArgumentError) + end + + it "throws an argument error for invalid minute values" do + ->{DateTime.parse("2012-12-31T25:43:59")}.should raise_error(ArgumentError) + end + + it "throws an argument error for invalid second values" do + ->{DateTime.parse("2012-11-08T15:43:61")}.should raise_error(ArgumentError) + end + + end + + it "parses YYDDD as year and day number in 1969--2068" do + d = DateTime.parse("10100") + d.should == DateTime.civil(2010, 4, 10) + end + + it "parses YYMMDD as year, month and day in 1969--2068" do + d = DateTime.parse("201023") + d.should == DateTime.civil(2020, 10, 23) + end + + it "parses YYYYDDD as year and day number" do + d = DateTime.parse("1910100") + d.should == DateTime.civil(1910, 4, 10) + end + + it "parses YYYYMMDD as year, month and day number" do + d = DateTime.parse("19101101") + d.should == DateTime.civil(1910, 11, 1) + end +end + +describe "DateTime.parse(.)" do + it "parses YYYY.MM.DD into a DateTime object" do + d = DateTime.parse("2007.10.01") + d.year.should == 2007 + d.month.should == 10 + d.day.should == 1 + end + + it "parses DD.MM.YYYY into a DateTime object" do + d = DateTime.parse("10.01.2007") + d.year.should == 2007 + d.month.should == 1 + d.day.should == 10 + end + + it "parses YY.MM.DD into a DateTime object using the year 20YY" do + d = DateTime.parse("10.01.07") + d.year.should == 2010 + d.month.should == 1 + d.day.should == 7 + end + + it "parses YY.MM.DD using the year digits as 20YY when given true as additional argument" do + d = DateTime.parse("10.01.07", true) + d.year.should == 2010 + d.month.should == 1 + d.day.should == 7 + end +end diff --git a/spec/ruby/library/datetime/rfc2822_spec.rb b/spec/ruby/library/datetime/rfc2822_spec.rb new file mode 100644 index 0000000000..83f7fa8d5b --- /dev/null +++ b/spec/ruby/library/datetime/rfc2822_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.rfc2822" do + it "needs to be reviewed for spec completeness" + + it "raises DateError if passed nil" do + -> { DateTime.rfc2822(nil) }.should raise_error(Date::Error, "invalid date") + end +end diff --git a/spec/ruby/library/datetime/rfc3339_spec.rb b/spec/ruby/library/datetime/rfc3339_spec.rb new file mode 100644 index 0000000000..f870a5f63b --- /dev/null +++ b/spec/ruby/library/datetime/rfc3339_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.rfc3339" do + it "needs to be reviewed for spec completeness" +end + +describe "DateTime#rfc3339" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/rfc822_spec.rb b/spec/ruby/library/datetime/rfc822_spec.rb new file mode 100644 index 0000000000..0cd0aacc19 --- /dev/null +++ b/spec/ruby/library/datetime/rfc822_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.rfc822" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/sec_fraction_spec.rb b/spec/ruby/library/datetime/sec_fraction_spec.rb new file mode 100644 index 0000000000..40383a8ca4 --- /dev/null +++ b/spec/ruby/library/datetime/sec_fraction_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#sec_fraction" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/sec_spec.rb b/spec/ruby/library/datetime/sec_spec.rb new file mode 100644 index 0000000000..f681283c8e --- /dev/null +++ b/spec/ruby/library/datetime/sec_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/sec' + +describe "DateTime.sec" do + it_behaves_like :datetime_sec, :sec +end diff --git a/spec/ruby/library/datetime/second_fraction_spec.rb b/spec/ruby/library/datetime/second_fraction_spec.rb new file mode 100644 index 0000000000..d5393149ba --- /dev/null +++ b/spec/ruby/library/datetime/second_fraction_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#second_fraction" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/second_spec.rb b/spec/ruby/library/datetime/second_spec.rb new file mode 100644 index 0000000000..545c3f9109 --- /dev/null +++ b/spec/ruby/library/datetime/second_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/sec' + +describe "DateTime#second" do + it_behaves_like :datetime_sec, :second +end diff --git a/spec/ruby/library/datetime/shared/min.rb b/spec/ruby/library/datetime/shared/min.rb new file mode 100644 index 0000000000..a35b839281 --- /dev/null +++ b/spec/ruby/library/datetime/shared/min.rb @@ -0,0 +1,40 @@ +require 'date' + +describe :datetime_min, shared: true do + it "returns 0 if no argument is passed" do + DateTime.new.send(@method).should == 0 + end + + it "returns the minute passed as argument" do + new_datetime(minute: 5).send(@method).should == 5 + end + + it "adds 60 to negative minutes" do + new_datetime(minute: -20).send(@method).should == 40 + end + + it "raises an error for Rational" do + -> { new_datetime minute: 5 + Rational(1,2) }.should raise_error(ArgumentError) + end + + it "raises an error for Float" do + -> { new_datetime minute: 5.5 }.should raise_error(ArgumentError) + end + + it "raises an error for Rational" do + -> { new_datetime(hour: 2 + Rational(1,2)) }.should raise_error(ArgumentError) + end + + it "raises an error, when the minute is smaller than -60" do + -> { new_datetime(minute: -61) }.should raise_error(ArgumentError) + end + + it "raises an error, when the minute is greater or equal than 60" do + -> { new_datetime(minute: 60) }.should raise_error(ArgumentError) + end + + it "raises an error for minute fractions smaller than -60" do + -> { new_datetime(minute: -60 - Rational(1,2))}.should( + raise_error(ArgumentError)) + end +end diff --git a/spec/ruby/library/datetime/shared/sec.rb b/spec/ruby/library/datetime/shared/sec.rb new file mode 100644 index 0000000000..60009213aa --- /dev/null +++ b/spec/ruby/library/datetime/shared/sec.rb @@ -0,0 +1,45 @@ +require 'date' + +describe :datetime_sec, shared: true do + it "returns 0 seconds if passed no arguments" do + d = DateTime.new + d.send(@method).should == 0 + end + + it "returns the seconds passed in the arguments" do + new_datetime(second: 5).send(@method).should == 5 + end + + it "adds 60 to negative values" do + new_datetime(second: -20).send(@method).should == 40 + end + + it "returns the absolute value of a Rational" do + new_datetime(second: 5 + Rational(1,2)).send(@method).should == 5 + end + + it "returns the absolute value of a float" do + new_datetime(second: 5.5).send(@method).should == 5 + end + + it "raises an error when minute is given as a rational" do + -> { new_datetime(minute: 5 + Rational(1,2)) }.should raise_error(ArgumentError) + end + + it "raises an error, when the second is smaller than -60" do + -> { new_datetime(second: -61) }.should raise_error(ArgumentError) + end + + it "raises an error, when the second is greater or equal than 60" do + -> { new_datetime(second: 60) }.should raise_error(ArgumentError) + end + + it "raises an error for second fractions smaller than -60" do + -> { new_datetime(second: -60 - Rational(1,2))}.should( + raise_error(ArgumentError)) + end + + it "takes a second fraction near 60" do + new_datetime(second: 59 + Rational(1,2)).send(@method).should == 59 + end +end diff --git a/spec/ruby/library/datetime/strftime_spec.rb b/spec/ruby/library/datetime/strftime_spec.rb new file mode 100644 index 0000000000..a07cc9c1aa --- /dev/null +++ b/spec/ruby/library/datetime/strftime_spec.rb @@ -0,0 +1,52 @@ +require_relative '../../spec_helper' +require 'date' +require_relative '../../shared/time/strftime_for_date' +require_relative '../../shared/time/strftime_for_time' +date_version = defined?(Date::VERSION) ? Date::VERSION : '3.1.0' + +describe "DateTime#strftime" do + before :all do + @new_date = -> y, m, d { DateTime.civil(y,m,d) } + @new_time = -> *args { DateTime.civil(*args) } + @new_time_in_zone = -> zone, offset, *args { + y, m, d, h, min, s = args + DateTime.new(y, m||1, d||1, h||0, min||0, s||0, Rational(offset, 24)) + } + @new_time_with_offset = -> y, m, d, h, min, s, offset { + DateTime.new(y,m,d,h,min,s, Rational(offset, 86_400)) + } + + @time = DateTime.civil(2001, 2, 3, 4, 5, 6) + end + + it_behaves_like :strftime_date, :strftime + it_behaves_like :strftime_time, :strftime + + # Differences with Time + it "should be able to print the datetime with no argument" do + @time.strftime.should == "2001-02-03T04:05:06+00:00" + @time.strftime.should == @time.to_s + end + + # %Z is %:z for Date/DateTime + it "should be able to show the timezone with a : separator" do + @time.strftime("%Z").should == "+00:00" + end + + it "should be able to show the commercial week" do + @time.strftime("%v").should == " 3-FEB-2001" + @time.strftime("%v").should != @time.strftime('%e-%b-%Y') + end + + # additional conversion specifiers only in Date/DateTime + it 'shows the number of milliseconds since epoch' do + DateTime.new(1970, 1, 1, 0, 0, 0).strftime("%Q").should == "0" + @time.strftime("%Q").should == "981173106000" + DateTime.civil(2001, 2, 3, 4, 5, Rational(6123, 1000)).strftime("%Q").should == "981173106123" + end + + it "should be able to show a full notation" do + @time.strftime("%+").should == "Sat Feb 3 04:05:06 +00:00 2001" + @time.strftime("%+").should == @time.strftime('%a %b %e %H:%M:%S %Z %Y') + end +end diff --git a/spec/ruby/library/datetime/strptime_spec.rb b/spec/ruby/library/datetime/strptime_spec.rb new file mode 100644 index 0000000000..d1e83550e4 --- /dev/null +++ b/spec/ruby/library/datetime/strptime_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.strptime" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/subtract_spec.rb b/spec/ruby/library/datetime/subtract_spec.rb new file mode 100644 index 0000000000..ba01f4eff6 --- /dev/null +++ b/spec/ruby/library/datetime/subtract_spec.rb @@ -0,0 +1,19 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#-" do + it "is able to subtract sub-millisecond precision values" do + date = DateTime.new(2017) + diff = Rational(123456789, 24*60*60*1000*1000) + ((date + diff) - date).should == diff + (date - (date + diff)).should == -diff + (date - (date - diff)).should == diff + ((date - diff) - date).should == -diff + end + + it "correctly calculates sub-millisecond time differences" do #5493 + dt1 = DateTime.new(2018, 1, 1, 0, 0, 30) + dt2 = DateTime.new(2018, 1, 1, 0, 1, 29.000001) + ((dt2 - dt1) * 24 * 60 * 60).should == 59.000001 + end +end diff --git a/spec/ruby/library/datetime/time/to_datetime_spec.rb b/spec/ruby/library/datetime/time/to_datetime_spec.rb new file mode 100644 index 0000000000..5589725238 --- /dev/null +++ b/spec/ruby/library/datetime/time/to_datetime_spec.rb @@ -0,0 +1,40 @@ +require_relative '../../../spec_helper' +require 'time' +require 'date' +date_version = defined?(Date::VERSION) ? Date::VERSION : '3.1.0' + +describe "Time#to_datetime" do + it "returns a DateTime representing the same instant" do + time = Time.utc(2012, 12, 31, 23, 58, 59) + datetime = time.to_datetime + datetime.year.should == 2012 + datetime.month.should == 12 + datetime.day.should == 31 + datetime.hour.should == 23 + datetime.min.should == 58 + datetime.sec.should == 59 + end + + it "returns a DateTime representing the same instant before Gregorian" do + time = Time.utc(1582, 10, 14, 23, 58, 59) + datetime = time.to_datetime + datetime.year.should == 1582 + datetime.month.should == 10 + datetime.day.should == 4 + datetime.hour.should == 23 + datetime.min.should == 58 + datetime.sec.should == 59 + end + + it "roundtrips" do + time = Time.utc(3, 12, 31, 23, 58, 59) + datetime = time.to_datetime + datetime.to_time.utc.should == time + end + + it "yields a DateTime with the default Calendar reform day" do + Time.utc(1582, 10, 4, 1, 2, 3).to_datetime.start.should == Date::ITALY + Time.utc(1582, 10, 14, 1, 2, 3).to_datetime.start.should == Date::ITALY + Time.utc(1582, 10, 15, 1, 2, 3).to_datetime.start.should == Date::ITALY + end +end diff --git a/spec/ruby/library/datetime/to_date_spec.rb b/spec/ruby/library/datetime/to_date_spec.rb new file mode 100644 index 0000000000..48c05e7fed --- /dev/null +++ b/spec/ruby/library/datetime/to_date_spec.rb @@ -0,0 +1,37 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#to_date" do + it "returns an instance of Date" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_date.should be_kind_of(Date) + end + + it "maintains the same year" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_date.year.should == dt.year + end + + it "maintains the same month" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_date.mon.should == dt.mon + end + + it "maintains the same day" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_date.day.should == dt.day + end + + it "maintains the same mday" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_date.mday.should == dt.mday + end + + it "maintains the same julian day regardless of local time or zone" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + + with_timezone("Pacific/Pago_Pago", -11) do + dt.to_date.jd.should == dt.jd + end + end +end diff --git a/spec/ruby/library/datetime/to_datetime_spec.rb b/spec/ruby/library/datetime/to_datetime_spec.rb new file mode 100644 index 0000000000..95ee29268f --- /dev/null +++ b/spec/ruby/library/datetime/to_datetime_spec.rb @@ -0,0 +1,9 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#to_datetime" do + it "returns itself" do + dt = DateTime.new(2012, 12, 24, 12, 23, 00, '+05:00') + dt.to_datetime.should == dt + end +end diff --git a/spec/ruby/library/datetime/to_s_spec.rb b/spec/ruby/library/datetime/to_s_spec.rb new file mode 100644 index 0000000000..175fb807f4 --- /dev/null +++ b/spec/ruby/library/datetime/to_s_spec.rb @@ -0,0 +1,17 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#to_s" do + it "returns a new String object" do + dt = DateTime.new(2012, 12, 24, 1, 2, 3, "+03:00") + dt.to_s.should be_kind_of(String) + end + + it "maintains timezone regardless of local time" do + dt = DateTime.new(2012, 12, 24, 1, 2, 3, "+03:00") + + with_timezone("Pacific/Pago_Pago", -11) do + dt.to_s.should == "2012-12-24T01:02:03+03:00" + end + end +end diff --git a/spec/ruby/library/datetime/to_time_spec.rb b/spec/ruby/library/datetime/to_time_spec.rb new file mode 100644 index 0000000000..58bb363653 --- /dev/null +++ b/spec/ruby/library/datetime/to_time_spec.rb @@ -0,0 +1,48 @@ +require_relative '../../spec_helper' +require 'date' +date_version = defined?(Date::VERSION) ? Date::VERSION : '3.1.0' + +describe "DateTime#to_time" do + it "yields a new Time object" do + DateTime.now.to_time.should be_kind_of(Time) + end + + it "returns a Time representing the same instant" do + datetime = DateTime.civil(2012, 12, 31, 23, 58, 59) + time = datetime.to_time.utc + + time.year.should == 2012 + time.month.should == 12 + time.day.should == 31 + time.hour.should == 23 + time.min.should == 58 + time.sec.should == 59 + end + + it "returns a Time representing the same instant before Gregorian" do + datetime = DateTime.civil(1582, 10, 4, 23, 58, 59) + time = datetime.to_time.utc + time.year.should == 1582 + time.month.should == 10 + time.day.should == 14 + time.hour.should == 23 + time.min.should == 58 + time.sec.should == 59 + end + + it "preserves the same time regardless of local time or zone" do + date = DateTime.new(2012, 12, 24, 12, 23, 00, '+03:00') + + with_timezone("Pacific/Pago_Pago", -11) do + time = date.to_time + + time.utc_offset.should == 3 * 3600 + time.year.should == date.year + time.mon.should == date.mon + time.day.should == date.day + time.hour.should == date.hour + time.min.should == date.min + time.sec.should == date.sec + end + end +end diff --git a/spec/ruby/library/datetime/xmlschema_spec.rb b/spec/ruby/library/datetime/xmlschema_spec.rb new file mode 100644 index 0000000000..42832631ed --- /dev/null +++ b/spec/ruby/library/datetime/xmlschema_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime.xmlschema" do + it "needs to be reviewed for spec completeness" +end + +describe "DateTime#xmlschema" do + it "needs to be reviewed for spec completeness" +end diff --git a/spec/ruby/library/datetime/yday_spec.rb b/spec/ruby/library/datetime/yday_spec.rb new file mode 100644 index 0000000000..08a72c6480 --- /dev/null +++ b/spec/ruby/library/datetime/yday_spec.rb @@ -0,0 +1,7 @@ +require_relative '../../spec_helper' +require_relative '../../shared/time/yday' +require 'date' + +describe "DateTime#yday" do + it_behaves_like :time_yday, -> year, month, day { DateTime.new(year, month, day).yday } +end diff --git a/spec/ruby/library/datetime/zone_spec.rb b/spec/ruby/library/datetime/zone_spec.rb new file mode 100644 index 0000000000..b2c10b4b3b --- /dev/null +++ b/spec/ruby/library/datetime/zone_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require 'date' + +describe "DateTime#zone" do + it "needs to be reviewed for spec completeness" +end |
