smart_month 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README +33 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/lib/month.rb +26 -0
- data/lib/smart_month.rb +11 -0
- data/lib/smart_month/calculations.rb +87 -0
- data/lib/smart_month/collection.rb +51 -0
- data/lib/smart_month/extensions/date.rb +19 -0
- data/lib/smart_month/magic.rb +71 -0
- data/lib/smart_month/math.rb +41 -0
- data/lib/smart_month/rulesets.rb +151 -0
- data/lib/smart_month/util.rb +37 -0
- data/pkg/smart_month-1.0.0.gem +0 -0
- data/rdoc/classes/Date.html +209 -0
- data/rdoc/classes/Month.html +189 -0
- data/rdoc/classes/SmartMonth.html +136 -0
- data/rdoc/classes/SmartMonth/Calculations.html +383 -0
- data/rdoc/classes/SmartMonth/Collection.html +306 -0
- data/rdoc/classes/SmartMonth/Magic.html +214 -0
- data/rdoc/classes/SmartMonth/Magic/MonthFactory.html +178 -0
- data/rdoc/classes/SmartMonth/Math.html +311 -0
- data/rdoc/classes/SmartMonth/Rulesets.html +419 -0
- data/rdoc/classes/SmartMonth/Util.html +302 -0
- data/rdoc/classes/Time.html +152 -0
- data/rdoc/created.rid +1 -0
- data/rdoc/files/README.html +170 -0
- data/rdoc/files/lib/month_rb.html +113 -0
- data/rdoc/files/lib/smart_month/calculations_rb.html +101 -0
- data/rdoc/files/lib/smart_month/collection_rb.html +101 -0
- data/rdoc/files/lib/smart_month/extensions/date_rb.html +108 -0
- data/rdoc/files/lib/smart_month/magic_rb.html +101 -0
- data/rdoc/files/lib/smart_month/math_rb.html +101 -0
- data/rdoc/files/lib/smart_month/rulesets_rb.html +108 -0
- data/rdoc/files/lib/smart_month/util_rb.html +101 -0
- data/rdoc/files/lib/smart_month_rb.html +108 -0
- data/rdoc/fr_class_index.html +37 -0
- data/rdoc/fr_file_index.html +36 -0
- data/rdoc/fr_method_index.html +74 -0
- data/rdoc/index.html +24 -0
- data/rdoc/rdoc-style.css +208 -0
- data/smart_month.gemspec +179 -0
- data/test/spec/date/accessor_spec.rb +91 -0
- data/test/spec/date/add_month_spec.rb +24 -0
- data/test/spec/date/add_spec.rb +23 -0
- data/test/spec/date/boat_spec.rb +20 -0
- data/test/spec/date/civil_spec.rb +28 -0
- data/test/spec/date/commercial_spec.rb +29 -0
- data/test/spec/date/constants_spec.rb +41 -0
- data/test/spec/date/conversions_spec.rb +153 -0
- data/test/spec/date/downto_spec.rb +18 -0
- data/test/spec/date/eql_spec.rb +10 -0
- data/test/spec/date/gregorian_spec.rb +28 -0
- data/test/spec/date/hash_spec.rb +14 -0
- data/test/spec/date/infinity_spec.rb +77 -0
- data/test/spec/date/julian_spec.rb +52 -0
- data/test/spec/date/minus_month_spec.rb +23 -0
- data/test/spec/date/minus_spec.rb +30 -0
- data/test/spec/date/new_spec.rb +9 -0
- data/test/spec/date/neww_spec.rb +9 -0
- data/test/spec/date/ordinal_spec.rb +29 -0
- data/test/spec/date/parse_spec.rb +149 -0
- data/test/spec/date/relationship_spec.rb +20 -0
- data/test/spec/date/shared/civil.rb +66 -0
- data/test/spec/date/shared/commercial.rb +39 -0
- data/test/spec/date/shared/parse.rb +54 -0
- data/test/spec/date/shared/parse_eu.rb +30 -0
- data/test/spec/date/shared/parse_us.rb +29 -0
- data/test/spec/date/step_spec.rb +56 -0
- data/test/spec/date/strftime_spec.rb +205 -0
- data/test/spec/date/strptime_spec.rb +143 -0
- data/test/spec/date/upto_spec.rb +18 -0
- data/test/spec/parsedate/parsedate.rb +95 -0
- data/test/spec/time/httpdate_spec.rb +21 -0
- data/test/spec/time/iso8601_spec.rb +7 -0
- data/test/spec/time/rfc2822_spec.rb +7 -0
- data/test/spec/time/rfc822_spec.rb +7 -0
- data/test/spec/time/shared/rfc2822.rb +65 -0
- data/test/spec/time/shared/xmlschema.rb +53 -0
- data/test/spec/time/xmlschema_spec.rb +7 -0
- data/test/spec_helper.rb +56 -0
- data/test/test_helper.rb +4 -0
- data/test/unit/calculations_test.rb +82 -0
- data/test/unit/collection_test.rb +42 -0
- data/test/unit/magic_test.rb +37 -0
- data/test/unit/math_test.rb +30 -0
- data/test/unit/rulesets_test.rb +94 -0
- data/test/unit/samples/test_ruleset.yml +6 -0
- data/test/unit/util_test.rb +29 -0
- metadata +196 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#strftime" do
|
5
|
+
|
6
|
+
it "should be able to parse without arguments" do
|
7
|
+
Date.strptime.should == Date.civil(-4712, 1, 1)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to parse the default date format" do
|
11
|
+
Date.strptime("2000-04-06").should == Date.civil(2000, 4, 6)
|
12
|
+
Date.civil(2000, 4, 6).strftime.should == Date.civil(2000, 4, 6).to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be able to parse the full day name" do
|
16
|
+
d = Date.today
|
17
|
+
# strptime assumed week that start on sunday, not monday
|
18
|
+
week = d.cweek
|
19
|
+
week += 1 if d.cwday == 7
|
20
|
+
Date.strptime("Thursday", "%A").should == Date.commercial(d.cwyear, week, 4)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be able to parse the short day name" do
|
24
|
+
d = Date.today
|
25
|
+
# strptime assumed week that start on sunday, not monday
|
26
|
+
week = d.cweek
|
27
|
+
week += 1 if d.cwday == 7
|
28
|
+
Date.strptime("Thu", "%a").should == Date.commercial(d.cwyear, week, 4)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to parse the full month name" do
|
32
|
+
d = Date.today
|
33
|
+
Date.strptime("April", "%B").should == Date.civil(d.year, 4, 1)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be able to parse the short month name" do
|
37
|
+
d = Date.today
|
38
|
+
Date.strptime("Apr", "%b").should == Date.civil(d.year, 4, 1)
|
39
|
+
Date.strptime("Apr", "%h").should == Date.civil(d.year, 4, 1)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be able to parse the century" do
|
43
|
+
Date.strptime("06 20", "%y %C").should == Date.civil(2006, 1, 1)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should be able to parse the month day with leading zeroes" do
|
47
|
+
d = Date.today
|
48
|
+
Date.strptime("06", "%d").should == Date.civil(d.year, d.month, 6)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be able to parse the month day with leading spaces" do
|
52
|
+
d = Date.today
|
53
|
+
Date.strptime(" 6", "%e").should == Date.civil(d.year, d.month, 6)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should be able to parse the commercial year with leading zeroes" do
|
57
|
+
Date.strptime("2000", "%G").should == Date.civil(2000, 1, 3)
|
58
|
+
Date.strptime("2002", "%G").should == Date.civil(2001, 12, 31)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be able to parse the commercial year with only two digits" do
|
62
|
+
Date.strptime("68", "%g").should == Date.civil(2068, 1, 2)
|
63
|
+
Date.strptime("69", "%g").should == Date.civil(1968, 12, 30)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be able to parse the year day with leading zeroes" do
|
67
|
+
d = Date.today
|
68
|
+
if Date.gregorian_leap?(Date.today.year)
|
69
|
+
Date.strptime("097", "%j").should == Date.civil(d.year, 4, 6)
|
70
|
+
else
|
71
|
+
Date.strptime("097", "%j").should == Date.civil(d.year, 4, 7)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be able to parse the month with leading zeroes" do
|
76
|
+
d = Date.today
|
77
|
+
Date.strptime("04", "%m").should == Date.civil(d.year, 4, 1)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should be able to show the week number with the week starting on sunday and monday" do
|
81
|
+
d = Date.today
|
82
|
+
Date.strptime("14", "%U").should == Date.commercial(d.cwyear, 14, 7)
|
83
|
+
Date.strptime("14", "%W").should == Date.commercial(d.cwyear, 15, 7)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should be able to show the commercial week day" do
|
87
|
+
Date.strptime("2008 1", "%G %u").should == Date.civil(2007, 12, 31)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should be able to show the commercial week" do
|
91
|
+
d = Date.commercial(Date.today.year,1,1)
|
92
|
+
Date.strptime("1", "%V").should == d
|
93
|
+
Date.strptime("15", "%V").should == Date.commercial(d.cwyear, 15, 1)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be able to show the week day" do
|
97
|
+
d = Date.today
|
98
|
+
Date.strptime("2007 4", "%Y %w").should == Date.civil(2007, 1, 4)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should be able to show the year in YYYY format" do
|
102
|
+
Date.strptime("2007", "%Y").should == Date.civil(2007, 1, 1)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should be able to show the year in YY format" do
|
106
|
+
Date.strptime("00", "%y").should == Date.civil(2000, 1, 1)
|
107
|
+
end
|
108
|
+
|
109
|
+
############################
|
110
|
+
# Specs that combine stuff #
|
111
|
+
############################
|
112
|
+
|
113
|
+
it "should be able to parse the date in full" do
|
114
|
+
Date.strptime("Thu Apr 6 00:00:00 2000", "%c").should == Date.civil(2000, 4, 6)
|
115
|
+
Date.strptime("Thu Apr 6 00:00:00 2000", "%a %b %e %H:%M:%S %Y").should == Date.civil(2000, 4, 6)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should be able to parse the date with slashes" do
|
119
|
+
Date.strptime("04/06/00", "%D").should == Date.civil(2000, 4, 6)
|
120
|
+
Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should be able to parse the date as YYYY-MM-DD" do
|
124
|
+
Date.strptime("2000-04-06", "%F").should == Date.civil(2000, 4, 6)
|
125
|
+
Date.strptime("2000-04-06", "%Y-%m-%d").should == Date.civil(2000, 4, 6)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should be able to show the commercial week" do
|
129
|
+
Date.strptime(" 9-Apr-2000", "%v").should == Date.civil(2000, 4, 9)
|
130
|
+
Date.strptime(" 9-Apr-2000", "%e-%b-%Y").should == Date.civil(2000, 4, 9)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should be able to show MM/DD/YY" do
|
134
|
+
Date.strptime("04/06/00", "%x").should == Date.civil(2000, 4, 6)
|
135
|
+
Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should be able to show a full notation" do
|
139
|
+
Date.strptime("Sun Apr 9 00:00:00 +00:00 2000", "%+").should == Date.civil(2000, 4, 9)
|
140
|
+
Date.strptime("Sun Apr 9 00:00:00 +00:00 2000", "%a %b %e %H:%M:%S %Z %Y").should == Date.civil(2000, 4, 9)
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'date'
|
2
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
+
|
4
|
+
describe "Date#upto" do
|
5
|
+
|
6
|
+
it "should be able to step forward in time" do
|
7
|
+
ds = Date.civil(2008, 10, 11)
|
8
|
+
de = Date.civil(2008, 9, 29)
|
9
|
+
count = 0
|
10
|
+
de.upto(ds) do |d|
|
11
|
+
d.should <= ds
|
12
|
+
d.should >= de
|
13
|
+
count += 1
|
14
|
+
end
|
15
|
+
count.should == 13
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../../spec_helper"
|
2
|
+
require "parsedate"
|
3
|
+
|
4
|
+
describe "ParseDate.parsedate" do
|
5
|
+
it "returns Array of 8 nils given an empty String" do
|
6
|
+
ParseDate.parsedate("").should == [nil] * 8
|
7
|
+
end
|
8
|
+
|
9
|
+
it "raises TypeError given nil" do
|
10
|
+
lambda { ParseDate.parsedate(nil) }.should raise_error(TypeError)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "raises NoMethodError given Time" do
|
14
|
+
lambda { ParseDate.parsedate(Time.now) }.should raise_error(NoMethodError)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns Array with weekday number, given a full day name" do
|
18
|
+
ParseDate.parsedate("Sunday").should == [nil] * 7 + [0]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns Array with weekday number, given a 3 letter day name" do
|
22
|
+
ParseDate.parsedate("mon").should == [nil] * 7 + [1]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns Array with weekday number, given a String containing a word starting with day" do
|
26
|
+
ParseDate.parsedate("ignore friday monday ignore").should == [nil] * 7 + [5]
|
27
|
+
ParseDate.parsedate("ignorefriday").should == [nil] * 8
|
28
|
+
ParseDate.parsedate("fridayignore").should == [nil] * 7 + [5]
|
29
|
+
# friday, not monday!
|
30
|
+
ParseDate.parsedate("friends on monday").should == [nil] * 7 + [5]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns Array of 8 nils, given a single digit String" do
|
34
|
+
ParseDate.parsedate("8").should == [nil] * 8
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns Array with day set, given a String of 2 digits" do
|
38
|
+
ParseDate.parsedate("08").should == [nil, nil] + [8] + [nil] * 5
|
39
|
+
ParseDate.parsedate("99").should == [nil, nil] + [99] + [nil] * 5
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns Array of 8 nils, given a String of 3 digits" do
|
43
|
+
ParseDate.parsedate("100").should == [nil] * 8
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns Array with month and day set, given a String of 4 digits" do
|
47
|
+
ParseDate.parsedate("1050").should == [nil] + [10,50] + [nil] * 5
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns Array with year set, given a String of 5 digits" do
|
51
|
+
ParseDate.parsedate("10500").should == [10] + [nil] * 7
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns Array with date fields set, given a String of 6 digits" do
|
55
|
+
ParseDate.parsedate("105070").should == [10, 50, 70] + [nil] * 5
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns Array with 4-digit year set, given a String of 7 digits" do
|
59
|
+
ParseDate.parsedate("1050701").should == [1050] + [nil] * 7
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns Array with date fields set, given a String of 8 digits" do
|
63
|
+
ParseDate.parsedate("10507011").should == [1050, 70, 11] + [nil] * 5
|
64
|
+
end
|
65
|
+
|
66
|
+
it "returns Array of 8 nils, given a odd-sized String of 9 or more digits" do
|
67
|
+
ParseDate.parsedate("123456789").should == [nil] * 8
|
68
|
+
ParseDate.parsedate("12345678901").should == [nil] * 8
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns Array with date & hour fields set, given a String of 10 digits" do
|
72
|
+
ParseDate.parsedate("1234567890").should == [1234, 56, 78, 90] + [nil] * 4
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns Array with date, hour & minute fields set, given a String of 12 digits" do
|
76
|
+
ParseDate.parsedate("123456789012").should == [1234, 56, 78, 90, 12] + [nil] * 3
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns Array with date & time fields set, given a String of 14 digits" do
|
80
|
+
ParseDate.parsedate("12345678901234").should == [1234, 56, 78, 90, 12, 34, nil, nil]
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns Array with year and month set, given a String like nn-nn" do
|
84
|
+
ParseDate.parsedate("08-09").should == [8,9] + [nil] * 6
|
85
|
+
ParseDate.parsedate("08-09",true).should == [2008,9] + [nil] * 6
|
86
|
+
end
|
87
|
+
|
88
|
+
it "returns Array with day and hour set, given a String like n-nn" do
|
89
|
+
ParseDate.parsedate("8-09").should == [nil,nil] + [9,8] + [nil] * 4
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns Array with day and timezone set, given a String like nn-n" do
|
93
|
+
ParseDate.parsedate("08-9").should == [nil,nil,8,nil,nil,nil,"-9",nil]
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
describe "Time.httpdate" do
|
5
|
+
it "parses RFC-2616 strings" do
|
6
|
+
t = Time.utc(1994, 11, 6, 8, 49, 37)
|
7
|
+
t.should == Time.httpdate("Sun, 06 Nov 1994 08:49:37 GMT")
|
8
|
+
|
9
|
+
# relies on Time.parse (not yet implemented)
|
10
|
+
# t.should == Time.httpdate("Sunday, 06-Nov-94 08:49:37 GMT")
|
11
|
+
|
12
|
+
t.should == Time.httpdate("Sun Nov 6 08:49:37 1994")
|
13
|
+
Time.utc(1995, 11, 15, 6, 25, 24).should == Time.httpdate("Wed, 15 Nov 1995 06:25:24 GMT")
|
14
|
+
Time.utc(1995, 11, 15, 4, 58, 8).should == Time.httpdate("Wed, 15 Nov 1995 04:58:08 GMT")
|
15
|
+
Time.utc(1994, 11, 15, 8, 12, 31).should == Time.httpdate("Tue, 15 Nov 1994 08:12:31 GMT")
|
16
|
+
Time.utc(1994, 12, 1, 16, 0, 0).should == Time.httpdate("Thu, 01 Dec 1994 16:00:00 GMT")
|
17
|
+
Time.utc(1994, 10, 29, 19, 43, 31).should == Time.httpdate("Sat, 29 Oct 1994 19:43:31 GMT")
|
18
|
+
Time.utc(1994, 11, 15, 12, 45, 26).should == Time.httpdate("Tue, 15 Nov 1994 12:45:26 GMT")
|
19
|
+
Time.utc(1999, 12, 31, 23, 59, 59).should == Time.httpdate("Fri, 31 Dec 1999 23:59:59 GMT")
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
describe :time_rfc2822, :shared => true do
|
2
|
+
it "parses RFC-822 strings" do
|
3
|
+
t1 = (Time.utc(1976, 8, 26, 14, 30) + 4 * 3600)
|
4
|
+
t2 = Time.rfc2822("26 Aug 76 14:30 EDT")
|
5
|
+
t1.should == t2
|
6
|
+
|
7
|
+
t3 = Time.utc(1976, 8, 27, 9, 32) + 7 * 3600
|
8
|
+
t4 = Time.rfc2822("27 Aug 76 09:32 PDT")
|
9
|
+
t3.should == t4
|
10
|
+
end
|
11
|
+
|
12
|
+
it "parses RFC-2822 strings" do
|
13
|
+
t1 = Time.utc(1997, 11, 21, 9, 55, 6) + 6 * 3600
|
14
|
+
t2 = Time.rfc2822("Fri, 21 Nov 1997 09:55:06 -0600")
|
15
|
+
t1.should == t2
|
16
|
+
|
17
|
+
t3 = Time.utc(2003, 7, 1, 10, 52, 37) - 2 * 3600
|
18
|
+
t4 = Time.rfc2822("Tue, 1 Jul 2003 10:52:37 +0200")
|
19
|
+
t3.should == t4
|
20
|
+
|
21
|
+
t5 = Time.utc(1997, 11, 21, 10, 1, 10) + 6 * 3600
|
22
|
+
t6 = Time.rfc2822("Fri, 21 Nov 1997 10:01:10 -0600")
|
23
|
+
t5.should == t6
|
24
|
+
|
25
|
+
t7 = Time.utc(1997, 11, 21, 11, 0, 0) + 6 * 3600
|
26
|
+
t8 = Time.rfc2822("Fri, 21 Nov 1997 11:00:00 -0600")
|
27
|
+
t7.should == t8
|
28
|
+
|
29
|
+
t9 = Time.utc(1997, 11, 24, 14, 22, 1) + 8 * 3600
|
30
|
+
t10 = Time.rfc2822("Mon, 24 Nov 1997 14:22:01 -0800")
|
31
|
+
t9.should == t10
|
32
|
+
|
33
|
+
begin
|
34
|
+
Time.at(-1)
|
35
|
+
rescue ArgumentError
|
36
|
+
# ignore
|
37
|
+
else
|
38
|
+
t11 = Time.utc(1969, 2, 13, 23, 32, 54) + 3 * 3600 + 30 * 60
|
39
|
+
t12 = Time.rfc2822("Thu, 13 Feb 1969 23:32:54 -0330")
|
40
|
+
t11.should == t12
|
41
|
+
|
42
|
+
t13 = Time.utc(1969, 2, 13, 23, 32, 0) + 3 * 3600 + 30 * 60
|
43
|
+
t14 = Time.rfc2822(" Thu,
|
44
|
+
13
|
45
|
+
Feb
|
46
|
+
1969
|
47
|
+
23:32
|
48
|
+
-0330 (Newfoundland Time)")
|
49
|
+
t13.should == t14
|
50
|
+
end
|
51
|
+
|
52
|
+
t15 = Time.utc(1997, 11, 21, 9, 55, 6)
|
53
|
+
t16 = Time.rfc2822("21 Nov 97 09:55:06 GMT")
|
54
|
+
t15.should == t16
|
55
|
+
|
56
|
+
t17 = Time.utc(1997, 11, 21, 9, 55, 6) + 6 * 3600
|
57
|
+
t18 = Time.rfc2822("Fri, 21 Nov 1997 09 : 55 : 06 -0600")
|
58
|
+
t17.should == t18
|
59
|
+
|
60
|
+
lambda {
|
61
|
+
# inner comment is not supported.
|
62
|
+
Time.rfc2822("Fri, 21 Nov 1997 09(comment): 55 : 06 -0600")
|
63
|
+
}.should raise_error(ArgumentError)
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
describe :time_xmlschema, :shared => true do
|
2
|
+
it "parses ISO-8601 strings" do
|
3
|
+
t = Time.utc(1985, 4, 12, 23, 20, 50, 520000)
|
4
|
+
s = "1985-04-12T23:20:50.52Z"
|
5
|
+
t.should == Time.xmlschema(s)
|
6
|
+
#s.should == t.xmlschema(2)
|
7
|
+
|
8
|
+
t = Time.utc(1996, 12, 20, 0, 39, 57)
|
9
|
+
s = "1996-12-19T16:39:57-08:00"
|
10
|
+
t.should == Time.xmlschema(s)
|
11
|
+
# There is no way to generate time string with arbitrary timezone.
|
12
|
+
s = "1996-12-20T00:39:57Z"
|
13
|
+
t.should == Time.xmlschema(s)
|
14
|
+
#assert_equal(s, t.xmlschema)
|
15
|
+
|
16
|
+
t = Time.utc(1990, 12, 31, 23, 59, 60)
|
17
|
+
s = "1990-12-31T23:59:60Z"
|
18
|
+
t.should == Time.xmlschema(s)
|
19
|
+
# leap second is representable only if timezone file has it.
|
20
|
+
s = "1990-12-31T15:59:60-08:00"
|
21
|
+
t.should == Time.xmlschema(s)
|
22
|
+
|
23
|
+
begin
|
24
|
+
Time.at(-1)
|
25
|
+
rescue ArgumentError
|
26
|
+
# ignore
|
27
|
+
else
|
28
|
+
t = Time.utc(1937, 1, 1, 11, 40, 27, 870000)
|
29
|
+
s = "1937-01-01T12:00:27.87+00:20"
|
30
|
+
t.should == Time.xmlschema(s)
|
31
|
+
end
|
32
|
+
|
33
|
+
# more
|
34
|
+
|
35
|
+
# (Time.utc(1999, 5, 31, 13, 20, 0) + 5 * 3600).should == Time.xmlschema("1999-05-31T13:20:00-05:00")
|
36
|
+
# (Time.local(2000, 1, 20, 12, 0, 0)).should == Time.xmlschema("2000-01-20T12:00:00")
|
37
|
+
# (Time.utc(2000, 1, 20, 12, 0, 0)).should == Time.xmlschema("2000-01-20T12:00:00Z")
|
38
|
+
# (Time.utc(2000, 1, 20, 12, 0, 0) - 12 * 3600).should == Time.xmlschema("2000-01-20T12:00:00+12:00")
|
39
|
+
# (Time.utc(2000, 1, 20, 12, 0, 0) + 13 * 3600).should == Time.xmlschema("2000-01-20T12:00:00-13:00")
|
40
|
+
# (Time.utc(2000, 3, 4, 23, 0, 0) - 3 * 3600).should == Time.xmlschema("2000-03-04T23:00:00+03:00")
|
41
|
+
# (Time.utc(2000, 3, 4, 20, 0, 0)).should == Time.xmlschema("2000-03-04T20:00:00Z")
|
42
|
+
# (Time.local(2000, 1, 15, 0, 0, 0)).should == Time.xmlschema("2000-01-15T00:00:00")
|
43
|
+
# (Time.local(2000, 2, 15, 0, 0, 0)).should == Time.xmlschema("2000-02-15T00:00:00")
|
44
|
+
# (Time.local(2000, 1, 15, 12, 0, 0)).should == Time.xmlschema("2000-01-15T12:00:00")
|
45
|
+
# (Time.utc(2000, 1, 16, 12, 0, 0)).should == Time.xmlschema("2000-01-16T12:00:00Z")
|
46
|
+
# (Time.local(2000, 1, 1, 12, 0, 0)).should == Time.xmlschema("2000-01-01T12:00:00")
|
47
|
+
# (Time.utc(1999, 12, 31, 23, 0, 0)).should == Time.xmlschema("1999-12-31T23:00:00Z")
|
48
|
+
# (Time.local(2000, 1, 16, 12, 0, 0)).should == Time.xmlschema("2000-01-16T12:00:00")
|
49
|
+
# (Time.local(2000, 1, 16, 0, 0, 0)).should == Time.xmlschema("2000-01-16T00:00:00")
|
50
|
+
# (Time.utc(2000, 1, 12, 12, 13, 14)).should == Time.xmlschema("2000-01-12T12:13:14Z")
|
51
|
+
# (Time.utc(2001, 4, 17, 19, 23, 17, 300000)).should == Time.xmlschema("2001-04-17T19:23:17.3Z")
|
52
|
+
end
|
53
|
+
end
|
data/test/spec_helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# quickly load smart month into the test spec
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + '/../'
|
3
|
+
require 'lib/smart_month'
|
4
|
+
|
5
|
+
unless ENV['MSPEC_RUNNER']
|
6
|
+
begin
|
7
|
+
require "pp"
|
8
|
+
require 'mspec/version'
|
9
|
+
require 'mspec/helpers'
|
10
|
+
require 'mspec/guards'
|
11
|
+
require 'mspec/runner/shared'
|
12
|
+
require 'mspec/matchers/be_ancestor_of'
|
13
|
+
require 'mspec/matchers/output'
|
14
|
+
require 'mspec/matchers/output_to_fd'
|
15
|
+
require 'mspec/matchers/complain'
|
16
|
+
require 'mspec/matchers/equal_element'
|
17
|
+
require 'mspec/matchers/equal_utf16'
|
18
|
+
require 'mspec/matchers/match_yaml'
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
# Code to setup HOME directory correctly on Windows
|
23
|
+
# This duplicates Ruby 1.9 semantics for defining HOME
|
24
|
+
platform_is :windows do
|
25
|
+
if ENV['HOME']
|
26
|
+
ENV['HOME'] = ENV['HOME'].tr '\\', '/'
|
27
|
+
elsif ENV['HOMEDIR'] && ENV['HOMEDRIVE']
|
28
|
+
ENV['HOME'] = File.join(ENV['HOMEDRIVE'], ENV['HOMEDIR'])
|
29
|
+
elsif ENV['HOMEDIR']
|
30
|
+
ENV['HOME'] = ENV['HOMEDIR']
|
31
|
+
elsif ENV['HOMEDRIVE']
|
32
|
+
ENV['HOME'] = ENV['HOMEDRIVE']
|
33
|
+
elsif ENV['USERPROFILE']
|
34
|
+
ENV['HOME'] = ENV['USERPROFILE']
|
35
|
+
else
|
36
|
+
puts "No suitable HOME environment found. This means that all of"
|
37
|
+
puts "HOME, HOMEDIR, HOMEDRIVE, and USERPROFILE are not set"
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
TOLERANCE = 0.00003 unless Object.const_defined?(:TOLERANCE)
|
43
|
+
rescue LoadError
|
44
|
+
puts "Please install the MSpec gem to run the specs."
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
minimum_version = "1.5.9"
|
50
|
+
unless MSpec::VERSION >= minimum_version
|
51
|
+
puts "Please install MSpec version >= #{minimum_version} to run the specs"
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
|
55
|
+
$VERBOSE = nil unless ENV['OUTPUT_WARNINGS']
|
56
|
+
|