nickel 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/compare.rb DELETED
@@ -1,109 +0,0 @@
1
- module Compare
2
-
3
- # Use this to compare two objects, it will check their classes, instance vars, methods and instance var values
4
- # to make sure the objects are "the same", they DO NOT have to share the same object_id, that's the point.
5
- # NOTE: This won't work on any base classes (e.g. String, Fixnum, Array)
6
- # I could put in a quick fix, it would check for base class and then just use "==" operator
7
- class Objects
8
-
9
- def initialize(object1, object2)
10
- @o1, @o2 = object1, object2
11
- end
12
-
13
- # class level access
14
- class << self
15
- def same?(object1, object2)
16
- new(object1, object2).same?
17
- end
18
- end
19
-
20
- def same?
21
- same_class? && same_content?
22
- end
23
-
24
- def same_class?
25
- @o1.class.name == @o2.class.name
26
- end
27
-
28
- def same_content?
29
- if @o1.class.name =~ /Array|Fixnum|Hash|String/
30
- @o1 == @o2
31
- else
32
- same_methods? && same_instance_variables? && same_instance_variable_values?
33
- end
34
- end
35
-
36
- def same_methods?
37
- # @o1.methods == @o2.methods WOW! that was a bug, [1,2] is not the same as [2,1] <-- I find it hard to believe I didn't know this!
38
- @o1.methods.sort == @o2.methods.sort
39
- end
40
-
41
- def same_instance_variables?
42
- # @o1.instance_variables == @o2.instance_variables # BAD BAD BAD
43
- @o1.instance_variables.sort == @o2.instance_variables.sort
44
- end
45
-
46
- def same_instance_variable_values?
47
- same = true
48
- @o1.instance_variables.each do |ivar|
49
- o1_var_val = @o1.instance_variable_get(ivar)
50
- o2_var_val = @o2.instance_variable_get(ivar)
51
- if o1_var_val == o2_var_val # if they are the same by "==" operator, we are fine, note that Z::Time now has == so it won't go through recursion, meaning we may miss @firm setting
52
- elsif o1_var_val.class.name !~ /Array|Fixnum|Hash|String/ && Objects.same?(o1_var_val, o2_var_val) # instance vars are objects other than base class! Recursion!
53
- else
54
- same = false # no match by "==" or by compare objects
55
- end
56
- end
57
- return same
58
- end
59
- end
60
-
61
- # Use this to compare an array of objects, e.g. [object1, object2] and [object3, object4]
62
- # note order is not important, both of these cases would return true:
63
- # object1 same as object3
64
- # object2 same as object4
65
- # OR
66
- # object1 same as object4
67
- # object2 same as object3
68
- class ArrayofObjects
69
-
70
- def initialize(array1, array2)
71
- @a1, @a2 = array1.dup, array2.dup
72
- end
73
-
74
- class << self
75
- def same?(array1, array2)
76
- new(array1, array2).same?
77
- end
78
- end
79
-
80
- def same?
81
- equal_size? && equal_objects?
82
- end
83
-
84
- def equal_size?
85
- @a1.size == @a2.size
86
- end
87
-
88
- def equal_objects?
89
- same = true
90
- @a1.size.times do
91
- unless first_element_in_a1_has_match_in_a2 then same = false end
92
- end
93
- same
94
- end
95
-
96
- def first_element_in_a1_has_match_in_a2
97
- has_match = false
98
- @a2.size.times do |i|
99
- if Objects.same?(@a1[0], @a2[i])
100
- has_match = true
101
- @a1.shift # we are removing the matching elements from @a1 and @a2 so they don't match anything else in next iterations
102
- @a2.delete_at(i)
103
- break
104
- end
105
- end
106
- has_match
107
- end
108
- end
109
- end
data/test/nlp_test.rb DELETED
@@ -1,813 +0,0 @@
1
- require 'test/unit'
2
-
3
- path = File.expand_path(File.dirname(__FILE__))
4
- require File.join(path, '..', 'lib', 'nickel.rb')
5
- require File.join(path, 'nlp_tests_helper.rb')
6
- include Nickel
7
-
8
- # note that ZTime now has the '==' operator, so it won't go through Compare::Objects recursion, meaning we will miss @firm setting, but that is not very important as long as the outcome is correct
9
-
10
- class TestDates < Test::Unit::TestCase
11
- include NLPTestsHelper
12
-
13
- def test__today
14
- today = Time.local(2008, 8, 25)
15
- assert_message NLP.new("do something today", today), "do something"
16
- assert_nlp NLP.new("do something today", today),
17
- [Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"))]
18
- end
19
-
20
- def test__today_at_noon
21
- today = Time.local(2008, 8, 25)
22
- assert_message NLP.new("there is a movie today at noon", today), "there is a movie"
23
- assert_nlp NLP.new("there is a movie today at noon", today),
24
- [Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"), :start_time => ZTime.new("120000"))]
25
- end
26
-
27
- def test__today_and_tomorrow
28
- today = Time.local(2008, 8, 25)
29
- assert_message NLP.new("go to work today and tomorrow", today), "go to work"
30
- assert_nlp NLP.new("go to work today and tomorrow", today),
31
- [
32
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080825")),
33
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080826"))
34
- ]
35
- end
36
-
37
- def test__oct_5_and_oct_23
38
- today = Time.local(2008, 8, 25)
39
- assert_message NLP.new("Appointments with dentist are on oct 5 and oct 23rd", today), "Appointments with dentist"
40
- assert_nlp NLP.new("Appointments with dentist are on oct 5 and oct 23rd", today),
41
- [
42
- Occurrence.new(:type => :single, :start_date => ZDate.new("20081005")),
43
- Occurrence.new(:type => :single, :start_date => ZDate.new("20081023"))
44
- ]
45
- end
46
-
47
- def test__today_at_noon_and_tomorrow_at_545am
48
- today = Time.local(2008, 8, 25)
49
- assert_message NLP.new("today at noon and tomorrow at 5:45 am there is an office meeting", today), "there is an office meeting"
50
- assert_message NLP.new("office meeting today at noon and tomorrow at 5:45 am", today), "office meeting"
51
- assert_nlp NLP.new("office meeting today at noon and tomorrow at 5:45 am", today),
52
- [
53
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"), :start_time => ZTime.new("120000")),
54
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080826"), :start_time => ZTime.new("054500",:am))
55
- ]
56
- end
57
-
58
- def test__noon_today_and_545am_tomorrow
59
- today = Time.local(2008, 8, 25)
60
- assert_message NLP.new("some shit to do at noon today and 545am tomorrow", today), "some shit to do"
61
- assert_nlp NLP.new("some shit to do at noon today and 545am tomorrow", today),
62
- [
63
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"), :start_time => ZTime.new("120000")),
64
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080826"), :start_time => ZTime.new("054500",:am))
65
- ]
66
- end
67
-
68
- def test__tomorrow_and_thursday
69
- now = Time.local(2008, 2, 29, 12, 34, 56)
70
- assert_message NLP.new("go to the park tomorrow and thursday with the dog", now), "go to the park with the dog"
71
- assert_nlp NLP.new("go to the park tomorrow and thursday with the dog", now),
72
- [
73
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080301")),
74
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080306"))
75
- ]
76
- end
77
-
78
- def test__tomorrow_at_1am_and_from_2am_to_5pm_and_thursday_at_1pm
79
- now = Time.local(2008, 2, 29)
80
- assert_message NLP.new("how fucking awesome tomorrow at 1am and from 2am to 5pm and thursday at 1pm is this", now), "how fucking awesome is this"
81
- assert_nlp NLP.new("how fucking awesome tomorrow at 1am and from 2am to 5pm and thursday at 1pm is this", now),
82
- [
83
- Occurrence.new(:type => :single,
84
- :start_date => ZDate.new("20080301"),
85
- :start_time => ZTime.new("010000",:am)),
86
-
87
- Occurrence.new(:type => :single,
88
- :start_date => ZDate.new("20080301"),
89
- :start_time => ZTime.new("020000",:am),
90
- :end_time => ZTime.new("050000", :pm)),
91
-
92
- Occurrence.new(:type => :single,
93
- :start_date => ZDate.new("20080306"),
94
- :start_time => ZTime.new("010000", :pm))
95
- ]
96
- end
97
-
98
- def test__monday_tuesday_and_wednesday
99
- now = Time.local(2008, 9, 10)
100
- assert_message NLP.new("soccer practice monday tuesday and wednesday with susan", now), "soccer practice with susan"
101
- assert_nlp NLP.new("soccer practice monday tuesday and wednesday with susan", now),
102
- [
103
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080915")),
104
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080916")),
105
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080917"))
106
- ]
107
- end
108
-
109
- def test__monday_and_wednesday_at_4pm
110
- now = Time.local(2008, 9, 10)
111
- assert_message NLP.new("monday and wednesday at 4pm I have guitar lessons", now), "I have guitar lessons"
112
- assert_nlp NLP.new("monday and wednesday at 4pm I have guitar lessons", now),
113
- [
114
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080915"), :start_time => ZTime.new("4", :pm)),
115
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080917"), :start_time => ZTime.new("4", :pm))
116
- ]
117
- end
118
-
119
- def test__4pm_on_monday_and_wednesday
120
- now = Time.local(2008, 9, 10)
121
- assert_message NLP.new("meet with so and so 4pm on monday and wednesday", now), "meet with so and so"
122
- assert_nlp NLP.new("meet with so and so 4pm on monday and wednesday", now),
123
- [
124
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080915"), :start_time => ZTime.new("4", :pm)),
125
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080917"), :start_time => ZTime.new("4", :pm))
126
- ]
127
- end
128
-
129
- def test__this_sunday
130
- now = Time.local(2008, 8, 25)
131
- assert_message NLP.new("flight this sunday on American", now), "flight on American"
132
- assert_nlp NLP.new("flight this sunday on American", now),
133
- [Occurrence.new(:type => :single, :start_date => ZDate.new("20080831"))]
134
- end
135
-
136
- def test__this_sunday_9_dash_5am
137
- now = Time.local(2007, 11, 25)
138
- assert_message NLP.new("Flight to Miami this sunday 9-5am on Jet Blue", now), "Flight to Miami on Jet Blue"
139
- assert_nlp NLP.new("Flight to Miami this sunday 9-5am on Jet Blue", now),
140
- [
141
- Occurrence.new(:type => :single,
142
- :start_date => ZDate.new("20071125"),
143
- :start_time => ZTime.new("210000"),
144
- :end_time => ZTime.new("05", :am))
145
- ]
146
- end
147
-
148
- def test__this_sunday_9_dash_5
149
- now = Time.local(2007, 11, 25)
150
- assert_message NLP.new("Go to the park this sunday 9-5", now), "Go to the park"
151
- assert_nlp NLP.new("Go to the park this sunday 9-5", now),
152
- [
153
- Occurrence.new(:type => :single,
154
- :start_date => ZDate.new("20071125"),
155
- :start_time => ZTime.new("090000"),
156
- :end_time => ZTime.new("170000"))
157
- ]
158
- end
159
-
160
- def test__today_at_10_11_12_and_1_to_5
161
- now = Time.local(2008, 9, 10)
162
- assert_message NLP.new("movie showings are today at 10, 11, 12, and 1 to 5", now), "movie showings"
163
- assert_nlp NLP.new("movie showings are today at 10, 11, 12, and 1 to 5", now),
164
- [
165
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("100000")),
166
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("110000")),
167
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("120000")),
168
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("130000"), :end_time => ZTime.new("170000"))
169
- ]
170
- end
171
-
172
- def test__today_at_10_11_12_1
173
- now = Time.local(2008, 9, 10)
174
- assert_message NLP.new("Games today at 10, 11, 12, 1", now), "Games"
175
- assert_nlp NLP.new("Games today at 10, 11, 12, 1", now),
176
- [
177
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("100000")),
178
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("110000")),
179
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("120000")),
180
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("130000"))
181
- ]
182
- end
183
-
184
- def test__today_from_8_to_4_and_9_to_5
185
- assert_nlp NLP.new("today from 8 to 4 and 9 to 5", Time.local(2008, 9, 10)),
186
- [
187
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("080000"), :end_time => ZTime.new("160000")),
188
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("090000"), :end_time => ZTime.new("17"))
189
- ]
190
- end
191
-
192
- def test__today_from_9_to_5pm_and_8am_to_4
193
- assert_nlp NLP.new("today from 9 to 5pm and 8am to 4", Time.local(2008, 9, 10)),
194
- [
195
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("080000"), :end_time => ZTime.new("160000")),
196
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("090000"), :end_time => ZTime.new("17"))
197
- ]
198
- end
199
-
200
- def test__today_at_11am_2_and_3_and_tomorrow_from_2_to_6pm
201
- assert_nlp NLP.new("today at 11am, 2 and 3, and tomorrow from 2 to 6pm", Time.local(2008, 9, 10)),
202
- [
203
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("11", :am)),
204
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("2", :pm)),
205
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080910"), :start_time => ZTime.new("3", :pm)),
206
- Occurrence.new(:type => :single, :start_date => ZDate.new("20080911"), :start_time => ZTime.new("2", :pm), :end_time => ZTime.new("6", :pm))
207
- ]
208
- end
209
-
210
- def test__next_monday
211
- assert_nlp NLP.new("next monday", Time.local(2008, 10, 27)), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081103"))]
212
- end
213
-
214
- def test__a_week_from_today
215
- now = Time.local(2009, 01, 01)
216
- assert_message NLP.new("Flight is a week from today", now), "Flight"
217
- assert_nlp NLP.new("Flight is a week from today", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090108"))]
218
- end
219
-
220
- def test__two_weeks_from_tomorrow
221
- now = Time.local(2008, 12, 24)
222
- assert_message NLP.new("Bill is due two weeks from tomorrow", now), "Bill is due"
223
- assert_nlp NLP.new("Bill is due two weeks from tomorrow", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090108"))]
224
- end
225
-
226
- def test__two_months_from_now
227
- now = Time.local(2008, 12, 24)
228
- assert_message NLP.new("Tryouts are two months from now", now), "Tryouts"
229
- assert_nlp NLP.new("Tryouts are two months from now", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090224"))]
230
- end
231
-
232
- def test__october_2nd
233
- now = Time.local(2008, 1, 30)
234
- assert_message NLP.new("baseball game is on october second", now), "baseball game"
235
- assert_message NLP.new("baseball game is on 10/2", now), "baseball game"
236
- assert_message NLP.new("baseball game is on 10/2/08", now), "baseball game"
237
- assert_message NLP.new("baseball game is on 10/2/2008", now), "baseball game"
238
- assert_message NLP.new("baseball game is on october 2nd 08", now), "baseball game"
239
- assert_message NLP.new("baseball game is on october 2nd 2008", now), "baseball game"
240
- assert_nlp NLP.new("baseball game is on october second", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
241
- assert_nlp NLP.new("baseball game is on 10/2", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
242
- assert_nlp NLP.new("baseball game is on 10/2/08", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
243
- assert_nlp NLP.new("baseball game is on 10/2/2008", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
244
- assert_nlp NLP.new("baseball game is on october 2nd 08", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
245
- assert_nlp NLP.new("baseball game is on october 2nd 2008", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081002"))]
246
- end
247
-
248
- def test__last_monday_this_month
249
- now = Time.local(2008, 8, 25)
250
- assert_nlp NLP.new("last monday this month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"))]
251
- assert_nlp NLP.new("the last monday of this month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20080825"))]
252
- end
253
-
254
- def test__third_monday_next_month
255
- now = Time.local(2008, 8, 25)
256
- assert_nlp NLP.new("third monday next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20080915"))]
257
- assert_nlp NLP.new("the third monday next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20080915"))]
258
- end
259
-
260
- def test__the_28th
261
- now = Time.local(2010, 03, 20)
262
- assert_message NLP.new("baseball game is on the twentyeighth", now), "baseball game"
263
- assert_message NLP.new("baseball game is on the 28th of this month", now), "baseball game"
264
- assert_nlp NLP.new("the twentyeigth", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
265
- assert_nlp NLP.new("28th", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
266
- assert_nlp NLP.new("28", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
267
- assert_nlp NLP.new("the 28th of this month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
268
- assert_nlp NLP.new("28th of this month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
269
- assert_nlp NLP.new("the 28th this month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20100328"))]
270
- end
271
-
272
- def test__the_28th_next_month
273
- now = Time.local(2008, 12, 31, 23, 05, 59)
274
- assert_nlp NLP.new("next month 28th", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090128"))]
275
- assert_nlp NLP.new("28th next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090128"))]
276
- assert_nlp NLP.new("the 28th next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090128"))]
277
- assert_nlp NLP.new("28th of next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090128"))]
278
- assert_nlp NLP.new("the 28th of next month", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090128"))]
279
- end
280
-
281
- def test__in_5_days_weeks_months
282
- now = Time.local(2008, 9, 11)
283
- assert_nlp NLP.new("5 days from now", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20080916"))]
284
- assert_nlp NLP.new("in 5 days", Time.local(2008, 9, 30)), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081005"))]
285
- assert_nlp NLP.new("5 weeks from now", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081016"))]
286
- assert_nlp NLP.new("in 5 weeks", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081016"))]
287
- assert_nlp NLP.new("5 months from now", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090211"))]
288
- assert_nlp NLP.new("in 5 months", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090211"))]
289
- end
290
-
291
- def test__in_5_minutes_hours
292
- now = Time.local(2008, 9, 11)
293
-
294
- assert_nlp NLP.new("5 minutes from now", now), [Occurrence.new(:type => :single,
295
- :start_date => ZDate.new("20080911"),
296
- :start_time => ZTime.new("000500"))]
297
-
298
- assert_nlp NLP.new("5 hours from now", now), [Occurrence.new(:type => :single,
299
- :start_date => ZDate.new("20080911"),
300
- :start_time => ZTime.new("050000"))]
301
-
302
- assert_nlp NLP.new("24 hours from now", now), [Occurrence.new(:type => :single,
303
- :start_date => ZDate.new("20080912"),
304
- :start_time => ZTime.new("000000"))]
305
-
306
- assert_nlp NLP.new("in 5 minutes", now), [Occurrence.new(:type => :single,
307
- :start_date => ZDate.new("20080911"),
308
- :start_time => ZTime.new("000500"))]
309
-
310
- assert_nlp NLP.new("in 5 hours", now), [Occurrence.new(:type => :single,
311
- :start_date => ZDate.new("20080911"),
312
- :start_time => ZTime.new("050000"))]
313
- end
314
-
315
- def test__tomorrow_through_sunday
316
- assert_nlp NLP.new("tomorrow through sunday", Time.local(2008, 9, 18)), [Occurrence.new(:type => :daily,
317
- :start_date => ZDate.new("20080919"),
318
- :end_date => ZDate.new("20080921"),
319
- :interval => 1)]
320
- end
321
-
322
- def test__tomorrow_through_sunday_from_9_to_5
323
- assert_nlp NLP.new("tomorrow through sunday from 9 to 5", Time.local(2008, 9, 18)),
324
- [
325
- Occurrence.new(:type => :daily,
326
- :start_date => ZDate.new("20080919"),
327
- :end_date => ZDate.new("20080921"),
328
- :start_time => ZTime.new("09"),
329
- :end_time => ZTime.new("17"),
330
- :interval => 1)
331
- ]
332
- end
333
-
334
- def test__9_to_5_tomorrow_through_sunday
335
- assert_nlp NLP.new("9 to 5 tomorrow through sunday", Time.local(2008, 9, 18)),
336
- [
337
- Occurrence.new(:type => :daily,
338
- :start_date => ZDate.new("20080919"),
339
- :end_date => ZDate.new("20080921"),
340
- :start_time => ZTime.new("09"),
341
- :end_time => ZTime.new("17"),
342
- :interval => 1)
343
- ]
344
- end
345
-
346
- def test__october_2nd_through_5th
347
- now = Time.local(2008, 9, 18)
348
-
349
- assert_nlp NLP.new("october 2nd through 5th", now), [ Occurrence.new(:type => :daily,
350
- :start_date => ZDate.new("20081002"),
351
- :end_date => ZDate.new("20081005"),
352
- :interval => 1) ]
353
-
354
- assert_nlp NLP.new("october 2nd through october 5th", now), [ Occurrence.new(:type => :daily,
355
- :start_date => ZDate.new("20081002"),
356
- :end_date => ZDate.new("20081005"),
357
- :interval => 1) ]
358
-
359
- assert_nlp NLP.new("10/2 to 10/5", now), [ Occurrence.new(:type => :daily,
360
- :start_date => ZDate.new("20081002"),
361
- :end_date => ZDate.new("20081005"),
362
- :interval => 1) ]
363
-
364
- assert_nlp NLP.new("oct 2 until 5", now), [ Occurrence.new(:type => :daily,
365
- :start_date => ZDate.new("20081002"),
366
- :end_date => ZDate.new("20081005"),
367
- :interval => 1) ]
368
-
369
- assert_nlp NLP.new("oct 2 until oct 5", now), [ Occurrence.new(:type => :daily,
370
- :start_date => ZDate.new("20081002"),
371
- :end_date => ZDate.new("20081005"),
372
- :interval => 1) ]
373
-
374
- assert_nlp NLP.new("oct 2-oct 5", now), [ Occurrence.new(:type => :daily,
375
- :start_date => ZDate.new("20081002"),
376
- :end_date => ZDate.new("20081005"),
377
- :interval => 1) ]
378
-
379
- assert_nlp NLP.new("october 2-5", now), [ Occurrence.new(:type => :daily,
380
- :start_date => ZDate.new("20081002"),
381
- :end_date => ZDate.new("20081005"),
382
- :interval => 1) ]
383
-
384
- assert_nlp NLP.new("october 2nd-5th", now), [ Occurrence.new(:type => :daily,
385
- :start_date => ZDate.new("20081002"),
386
- :end_date => ZDate.new("20081005"),
387
- :interval => 1) ]
388
-
389
- assert_nlp NLP.new("october 2nd-5th from 9 to 5am", now), [ Occurrence.new(:type => :daily,
390
- :start_date => ZDate.new("20081002"),
391
- :end_date => ZDate.new("20081005"),
392
- :interval => 1,
393
- :start_time => ZTime.new("21"),
394
- :end_time => ZTime.new("05")) ]
395
-
396
- assert_nlp NLP.new("october 2nd-5th every day from 9 to 5am", now), [ Occurrence.new(:type => :daily,
397
- :start_date => ZDate.new("20081002"),
398
- :end_date => ZDate.new("20081005"),
399
- :interval => 1,
400
- :start_time => ZTime.new("21"),
401
- :end_time => ZTime.new("05")) ]
402
- end
403
-
404
- def test__every_monday
405
- assert_nlp NLP.new("every monday", Time.local(2008, 9, 18)), [Occurrence.new(:type => :weekly,
406
- :day_of_week => 0,
407
- :interval => 1,
408
- :start_date => ZDate.new("20080922"))]
409
- end
410
-
411
- def test__every_monday_and_wednesday
412
- assert_nlp NLP.new("every monday and wednesday", Time.local(2008, 9, 18)),
413
- [
414
- Occurrence.new(:type => :weekly, :day_of_week => 0, :interval => 1, :start_date => ZDate.new("20080922")),
415
- Occurrence.new(:type => :weekly, :day_of_week => 2, :interval => 1, :start_date => ZDate.new("20080924"))
416
- ]
417
- end
418
-
419
- def test__every_other_monday_and_wednesday
420
- assert_nlp NLP.new("every other monday and wednesday", Time.local(2008, 9, 18)),
421
- [
422
- Occurrence.new(:type => :weekly, :day_of_week => 0, :interval => 2, :start_date => ZDate.new("20080922")),
423
- Occurrence.new(:type => :weekly, :day_of_week => 2, :interval => 2, :start_date => ZDate.new("20080924"))
424
- ]
425
- end
426
-
427
- # Fail here!
428
- # def test__every_monday_at_2pm_and_wednesday_at_4pm
429
- # assert_nlp NLP.new("every monday at 2pm and wednesday at 4pm", Time.local(2008, 9, 18)),
430
- # [
431
- # Occurrence.new(:type => :weekly, :day_of_week => 0, :interval => 1, :start_date => ZDate.new("20080922"), :start_time => ZTime.new("2", :pm)),
432
- # Occurrence.new(:type => :weekly, :day_of_week => 2, :interval => 1, :start_date => ZDate.new("20080924"), :start_time => ZTime.new("4", :pm))
433
- # ]
434
- # end
435
-
436
- def test__every_monday_at_2pm_and_every_wednesday_at_4pm
437
- assert_nlp NLP.new("every monday at 2pm and every wednesday at 4pm", Time.local(2008, 9, 18)),
438
- [
439
- Occurrence.new(:type => :weekly, :day_of_week => 0, :interval => 1, :start_time => ZTime.new("2", :pm), :start_date => ZDate.new("20080922")),
440
- Occurrence.new(:type => :weekly, :day_of_week => 2, :interval => 1, :start_time => ZTime.new("4", :pm), :start_date => ZDate.new("20080924"))
441
- ]
442
- end
443
-
444
- def test__every_monday_every_wednesday
445
- assert_nlp NLP.new("every monday every wednesday", Time.local(2008, 9, 18)),
446
- [
447
- Occurrence.new(:type => :weekly, :day_of_week => 0, :interval => 1, :start_date => ZDate.new("20080922")),
448
- Occurrence.new(:type => :weekly, :day_of_week => 2, :interval => 1, :start_date => ZDate.new("20080924"))
449
- ]
450
- end
451
-
452
- def test__the_22nd_of_every_month
453
- assert_nlp NLP.new("the 22nd of every month", Time.local(2008, 9, 18)),
454
- [
455
- Occurrence.new(:type => :datemonthly, :date_of_month => 22, :interval => 1, :start_date => ZDate.new("20080922"))
456
- ]
457
- end
458
-
459
- def test__the_first_friday_of_every_month
460
- assert_nlp NLP.new("the first friday of every month", Time.local(2008, 9, 18)),
461
- [
462
- Occurrence.new(:type => :daymonthly, :week_of_month => 1, :day_of_week => 4, :interval => 1, :start_date => ZDate.new("20081003"))
463
- ]
464
- end
465
-
466
- def test__the_second_tuesday_of_every_month_at_5pm
467
- assert_nlp NLP.new("the second tuesday of every month at 5pm", Time.local(2008, 9, 24)),
468
- [
469
- Occurrence.new(:type => :daymonthly,
470
- :week_of_month => 2,
471
- :day_of_week => 1,
472
- :interval => 1,
473
- :start_date => ZDate.new("20081014"),
474
- :start_time => ZTime.new("5", :pm))
475
- ]
476
- end
477
-
478
- def test__the_first_tuesday_of_every_month_at_4pm_and_5pm_and_the_second_tuesday_of_every_month_at_5pm
479
- now = Time.local(2008, 9, 24)
480
- assert_nlp NLP.new("the first tuesday of every month at 4pm and 5pm, the second tuesday of every month at 5pm", now),
481
- [
482
- Occurrence.new(:type => :daymonthly,
483
- :week_of_month => 1,
484
- :day_of_week => 1,
485
- :interval => 1,
486
- :start_date => ZDate.new("20081007"),
487
- :start_time => ZTime.new("4", :pm)),
488
-
489
- Occurrence.new(:type => :daymonthly,
490
- :week_of_month => 1,
491
- :day_of_week => 1,
492
- :interval => 1,
493
- :start_date => ZDate.new("20081007"),
494
- :start_time => ZTime.new("5", :pm)),
495
-
496
- Occurrence.new(:type => :daymonthly,
497
- :week_of_month => 2,
498
- :day_of_week => 1,
499
- :interval => 1,
500
- :start_date => ZDate.new("20081014"),
501
- :start_time => ZTime.new("5", :pm))
502
- ]
503
- end
504
-
505
- def test_every_sunday_in_december
506
- assert_nlp NLP.new("every sunday in december", Time.local(2008, 9, 24)),
507
- [
508
- Occurrence.new(:type => :weekly,
509
- :day_of_week => 6,
510
- :interval => 1,
511
- :start_date => ZDate.new("20081207"),
512
- :end_date => ZDate.new("20081228"))
513
- ]
514
- end
515
-
516
- def test_every_monday_until_december
517
- assert_nlp NLP.new("every monday until december", Time.local(2008, 9, 24)),
518
- [
519
- Occurrence.new(:type => :weekly,
520
- :day_of_week => 0,
521
- :interval => 1,
522
- :start_date => ZDate.new("20080929"),
523
- :end_date => ZDate.new("20081124"))
524
- ]
525
- end
526
-
527
- def test_every_monday_next_month
528
- assert_nlp NLP.new("every monday next month", Time.local(2008, 9, 24)),
529
- [
530
- Occurrence.new(:type => :weekly,
531
- :day_of_week => 0,
532
- :interval => 1,
533
- :start_date => ZDate.new("20081006"),
534
- :end_date => ZDate.new("20081027"))
535
- ]
536
- end
537
-
538
- def test_everyday_next_month
539
- assert_nlp NLP.new("everyday next month", Time.local(2008, 12, 24)),
540
- [
541
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20090101"), :end_date => ZDate.new("20090131"))
542
- ]
543
- end
544
-
545
- def test_in_the_next_two_days
546
- assert_nlp NLP.new("in the next two days", Time.local(2007, 12, 29)),
547
- [
548
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20071229"), :end_date => ZDate.new("20071231"))
549
- ]
550
- end
551
-
552
- def test_for_three_days
553
- assert_nlp NLP.new("for three days", Time.local(2007, 12, 29)),
554
- [
555
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20071229"), :end_date => ZDate.new("20080101"))
556
- ]
557
-
558
- assert_nlp NLP.new("for the next three days", Time.local(2007, 12, 29)),
559
- [
560
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20071229"), :end_date => ZDate.new("20080101"))
561
- ]
562
- end
563
-
564
- def test_for_the_next_1_day
565
- now = Time.local(2007, 12, 29)
566
- assert_message NLP.new("blah for the next 1 day", now), "blah"
567
- assert_nlp NLP.new("blah for the next 1 day", now),
568
- [
569
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20071229"), :end_date => ZDate.new("20071230"))
570
- ]
571
- end
572
-
573
- def test_this_week
574
- now = Time.local(2008, 9, 25)
575
- assert_nlp NLP.new("this week", now),
576
- [
577
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20080925"), :end_date => ZDate.new("20081002"))
578
- ]
579
-
580
- assert_nlp NLP.new("every day this week", now),
581
- [
582
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20080925"), :end_date => ZDate.new("20081002"))
583
- ]
584
- end
585
-
586
- def test_next_week
587
- now = Time.local(2008, 9, 25)
588
- assert_nlp NLP.new("next week", now),
589
- [
590
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20081002"), :end_date => ZDate.new("20081009"))
591
- ]
592
-
593
- assert_nlp NLP.new("every day next week", now),
594
- [
595
- Occurrence.new(:type => :daily, :interval => 1, :start_date => ZDate.new("20081002"), :end_date => ZDate.new("20081009"))
596
- ]
597
- end
598
-
599
- def test_go_to_the_park_tomorrow_and_also_on_thursday_with_the_dog
600
- now = Time.local(2008, 10, 28)
601
-
602
- assert_message NLP.new("go to the park tomorrow and also on thursday with the dog", now), "go to the park with the dog"
603
- assert_message NLP.new("go to the park tomorrow and thursday with the dog", now), "go to the park with the dog"
604
- assert_message NLP.new("go to the park tomorrow and also thursday with the dog", now), "go to the park with the dog"
605
- assert_message NLP.new("go to the park tomorrow and on thursday with the dog", now), "go to the park with the dog"
606
- assert_message NLP.new("go to the park tomorrow, thursday with the dog", now), "go to the park with the dog"
607
-
608
- assert_nlp NLP.new("go to the park tomorrow and also on thursday with the dog", now),
609
- [
610
- Occurrence.new(:type => :single, :start_date => ZDate.new("20081029")),
611
- Occurrence.new(:type => :single, :start_date => ZDate.new("20081030"))
612
- ]
613
- end
614
-
615
- def test_pick_up_groceries_tomorrow_and_also_the_kids
616
- now = Time.local(2008, 10, 28)
617
- assert_message NLP.new("pick up groceries tomorrow and also the kids", now), "pick up groceries and also the kids"
618
- assert_message NLP.new("pick up groceries tomorrow and the kids", now), "pick up groceries and the kids"
619
- assert_nlp NLP.new("pick up groceries tomorrow and also the kids", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081029"))]
620
- end
621
-
622
- def test_all_month
623
- NLP::use_date_correction = false
624
-
625
- assert_nlp NLP.new("all month", Time.local(2008, 10, 05)),
626
- [
627
- Occurrence.new(:type => :daily,
628
- :start_date => ZDate.new("20081001"),
629
- :end_date => ZDate.new("20081031"),
630
- :interval => 1)
631
- ]
632
-
633
- NLP::use_date_correction = true
634
- end
635
-
636
- def test_all_month_date_corrected
637
- NLP::use_date_correction = true
638
- assert_nlp NLP.new("all month", Time.local(2008, 10, 05)),
639
- [
640
- Occurrence.new(:type => :daily,
641
- :start_date => ZDate.new("20081005"),
642
- :end_date => ZDate.new("20081031"),
643
- :interval => 1)
644
- ]
645
- end
646
-
647
- def test_week_of_jan_2nd
648
- assert_nlp NLP.new("the week of jan 2nd", Time.local(2008, 12, 21)),
649
- [
650
- Occurrence.new(:type => :daily,
651
- :start_date => ZDate.new("20090102"),
652
- :end_date => ZDate.new("20090109"),
653
- :interval => 1)
654
- ]
655
- end
656
-
657
- def test_week_ending_jan_2nd
658
- assert_nlp NLP.new("the week ending jan 2nd", Time.local(2008, 12, 21)),
659
- [
660
- Occurrence.new(:type => :daily,
661
- :start_date => ZDate.new("20081226"),
662
- :end_date => ZDate.new("20090102"),
663
- :interval => 1)
664
- ]
665
- end
666
-
667
- def test_week_of_the_22nd
668
- assert_nlp NLP.new("the week of the 22nd", Time.local(2008, 12, 21)),
669
- [
670
- Occurrence.new(:type => :daily,
671
- :start_date => ZDate.new("20081222"),
672
- :end_date => ZDate.new("20081229"),
673
- :interval => 1)
674
- ]
675
- end
676
-
677
- # ------------------------------------------------ Tests using date correction start here ------------------------------------------------------
678
- # -------------------------------------------- THESE WILL FAIL IF 'NLPv2.use_date_correction' IS OFF -------------------------------------------------
679
- def test_dates_across_a_year_boundary
680
- now = Time.local(2008, 11, 30)
681
- NLP::use_date_correction = true
682
- assert_message NLP.new("do something on january first", now), "do something"
683
- assert_nlp NLP.new("do something on january first", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20090101"))]
684
- end
685
-
686
- def test_the_first_of_the_month
687
- now = Time.local(2008, 11, 30)
688
- NLP::use_date_correction = true
689
- assert_nlp NLP.new("on the first of the month, go to the museum", now), [Occurrence.new(:type => :single, :start_date => ZDate.new("20081201"))]
690
- end
691
- # ------------------------------------------------ Tests using date correction end here --------------------------------------------------------
692
-
693
- # tests to write
694
- # this monday wed fri sat
695
- # next monday wed fri sat
696
- # monday wed fri sat
697
-
698
- # --------------------------------------------------- NLPv1 tests start here -------------------------------------------------------------
699
- def test__october_2nd_2009
700
- assert_nlp NLP.new("october 2nd, 2009", Time.local(2008, 1, 01)), [Occurrence.new(:type => :single, :start_date => ZDate.new("20091002"))]
701
- end
702
-
703
- def test__the_first_of_each_month
704
- assert_nlp NLP.new("the first of each month", Time.local(2008, 1, 01)),
705
- [
706
- Occurrence.new(:type => :datemonthly,
707
- :start_date => ZDate.new("20080101"),
708
- :interval => 1,
709
- :date_of_month => 1)
710
- ]
711
-
712
- assert_nlp NLP.new("the first of each month", Time.local(2009, 02, 15)),
713
- [
714
- Occurrence.new(:type => :datemonthly,
715
- :start_date => ZDate.new("20090301"),
716
- :interval => 1,
717
- :date_of_month => 1)
718
- ]
719
- end
720
-
721
- def test__every_sunday
722
- assert_nlp NLP.new("every sunday", Time.local(2008, 12, 30)),
723
- [
724
- Occurrence.new(:type => :weekly,
725
- :start_date => ZDate.new("20090104"),
726
- :interval => 1,
727
- :day_of_week => 6)
728
- ]
729
- end
730
-
731
- def test__every_month_on_the_22nd_at_2pm
732
- assert_nlp NLP.new("every month on the 22nd at 2pm", Time.local(2008, 12, 30)),
733
- [
734
- Occurrence.new(:type => :datemonthly,
735
- :start_date => ZDate.new("20090122"),
736
- :interval => 1,
737
- :date_of_month => 22,
738
- :start_time => ZTime.new("2", :pm))
739
- ]
740
- end
741
-
742
- def test_every_other_saturday_at_noon
743
- assert_nlp NLP.new("every other saturday at noon", Time.local(2008, 12, 30)),
744
- [
745
- Occurrence.new(:type => :weekly,
746
- :start_date => ZDate.new("20090103"),
747
- :interval => 2,
748
- :day_of_week => 5,
749
- :start_time => ZTime.new("12", :pm))
750
- ]
751
- end
752
-
753
- def test_every_day_at_midnight
754
- assert_nlp NLP.new("every day at midnight", Time.local(2008, 12, 30)),
755
- [
756
- Occurrence.new(:type => :daily,
757
- :start_date => ZDate.new("20081230"),
758
- :interval => 1,
759
- :start_time => ZTime.new("12", :am))
760
- ]
761
- end
762
-
763
- def test_daily_from_noon_to_midnight
764
- assert_nlp NLP.new("daily from noon to midnight", Time.local(2008, 12, 30)),
765
- [
766
- Occurrence.new(:type => :daily,
767
- :start_date => ZDate.new("20081230"),
768
- :interval => 1,
769
- :start_time => ZTime.new("12", :pm),
770
- :end_time => ZTime.new("12", :am))
771
- ]
772
- end
773
-
774
- def test_the_last_tuesday_of_every_month
775
- assert_nlp NLP.new("the last tuesday of every month, starts at 9am", Time.local(2008, 12, 30)),
776
- [
777
- Occurrence.new(:type => :daymonthly,
778
- :start_date => ZDate.new("20081230"),
779
- :start_time => ZTime.new("9", :am),
780
- :interval => 1,
781
- :week_of_month => -1,
782
- :day_of_week => 1)
783
- ]
784
- end
785
-
786
- def test_one_week_from_today
787
- assert_nlp NLP.new("one week from today", Time.local(2008, 12, 30)),
788
- [
789
- Occurrence.new(:type => :single, :start_date => ZDate.new("20090106"))
790
- ]
791
- end
792
-
793
- def test_every_other_day_at_245am
794
- assert_nlp NLP.new("every other day at 2:45am", Time.local(2008, 12, 30)),
795
- [
796
- Occurrence.new(:type => :daily,
797
- :start_date => ZDate.new("20081230"),
798
- :start_time => ZTime.new("0245", :am),
799
- :interval => 2)
800
- ]
801
- end
802
-
803
- def test_every_other_day_at_245am_starting_tomorrow
804
- assert_nlp NLP.new("every other day at 2:45am starting tomorrow", Time.local(2008, 12, 30)),
805
- [
806
- Occurrence.new(:type => :daily,
807
- :start_date => ZDate.new("20081231"),
808
- :start_time => ZTime.new("0245", :am),
809
- :interval => 2)
810
- ]
811
- end
812
- end
813
-