win32-taskscheduler 0.3.1 → 0.3.2

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.
@@ -1,42 +1,45 @@
1
- require 'ffi'
2
-
3
- module Windows
4
- module Helper
5
- extend FFI::Library
6
-
7
- FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
8
- FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
9
- FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF
10
-
11
- ffi_lib :kernel32
12
-
13
- attach_function :FormatMessage, :FormatMessageA,
14
- [:ulong, :pointer, :ulong, :ulong, :pointer, :ulong, :pointer], :ulong
15
-
16
- def win_error(function, err=FFI.errno)
17
- buf = FFI::MemoryPointer.new(:char, 1024)
18
-
19
- flags = FORMAT_MESSAGE_IGNORE_INSERTS |
20
- FORMAT_MESSAGE_FROM_SYSTEM |
21
- FORMAT_MESSAGE_MAX_WIDTH_MASK
22
-
23
- # 0x0409 == MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
24
- # We use English for errors because Ruby uses English for errors.
25
- len = FormatMessage(flags, nil, err , 0x0409, buf, buf.size, nil)
26
-
27
- function + ': ' + buf.read_string(len).strip
28
- end
29
-
30
- def ole_error(function, err)
31
- regex = /OLE error code:(.*?)\sin/
32
- match = regex.match(err.to_s)
33
-
34
- if match
35
- error = match.captures.first.hex
36
- win_error(function, error)
37
- else
38
- msg
39
- end
40
- end
41
- end
42
- end
1
+ require 'ffi'
2
+
3
+ module Windows
4
+ module TaskSchedulerHelper
5
+ extend FFI::Library
6
+
7
+ FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
8
+ FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
9
+ FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF
10
+
11
+ ffi_lib :kernel32
12
+
13
+ attach_function :FormatMessage, :FormatMessageA,
14
+ [:ulong, :pointer, :ulong, :ulong, :pointer, :ulong, :pointer], :ulong
15
+
16
+ def win_error(function, err=FFI.errno)
17
+ err_msg = ''
18
+ flags = FORMAT_MESSAGE_IGNORE_INSERTS |
19
+ FORMAT_MESSAGE_FROM_SYSTEM |
20
+ FORMAT_MESSAGE_MAX_WIDTH_MASK
21
+
22
+ # 0x0409 == MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
23
+ # We use English for errors because Ruby uses English for errors.
24
+
25
+ FFI::MemoryPointer.new(:char, 1024) do |buf|
26
+ len = FormatMessage(flags, nil, err , 0x0409, buf, buf.size, nil)
27
+ err_msg = function + ': ' + buf.read_string(len).strip
28
+ end
29
+
30
+ err_msg
31
+ end
32
+
33
+ def ole_error(function, err)
34
+ regex = /OLE error code:(.*?)\sin/
35
+ match = regex.match(err.to_s)
36
+
37
+ if match
38
+ error = match.captures.first.hex
39
+ win_error(function, error)
40
+ else
41
+ "#{function}: #{err.to_s}"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,689 +1,690 @@
1
- ##########################################################################
2
- # test_taskscheduler.rb
3
- #
4
- # Test suite for the win32-taskscheduler package. You should run this
5
- # via the 'rake test' task.
6
- ##########################################################################
7
- require 'win32/taskscheduler'
8
- require 'win32/security'
9
- require 'socket'
10
- require 'test-unit'
11
- require 'etc'
12
- include Win32
13
-
14
- class TC_TaskScheduler < Test::Unit::TestCase
15
- def self.startup
16
- @@host = Socket.gethostname
17
- @@user = Etc.getlogin
18
- @@elevated = Win32::Security.elevated_security?
19
- end
20
-
21
- def setup
22
- @task = 'foo'
23
-
24
- @trigger = {
25
- :start_year => 2015,
26
- :start_month => 4,
27
- :start_day => 11,
28
- :start_hour => 7,
29
- :start_minute => 14,
30
- :trigger_type => TaskScheduler::DAILY,
31
- :type => { :days_interval => 1 }
32
- }
33
-
34
- @ts = TaskScheduler.new
35
- end
36
-
37
- # Helper method
38
- def setup_task
39
- @ts.new_work_item(@task, @trigger)
40
- @ts.activate(@task)
41
- end
42
-
43
- test "version constant is set to expected value" do
44
- assert_equal('0.3.1', TaskScheduler::VERSION)
45
- end
46
-
47
- test "account_information method basic functionality" do
48
- assert_respond_to(@ts, :account_information)
49
- end
50
-
51
- test "account_information returns the task owner" do
52
- setup_task
53
- assert_equal("#{@@host}\\#{@@user}", @ts.account_information)
54
- end
55
-
56
- test "account_information returns nil if no task has been activated" do
57
- assert_nil(@ts.account_information)
58
- end
59
-
60
- test "account_information does not accept any arguments" do
61
- assert_raise(ArgumentError){ @ts.account_information('foo') }
62
- end
63
-
64
- test "set_account_information basic functionality" do
65
- assert_respond_to(@ts, :set_account_information)
66
- end
67
-
68
- test "set_account_information works as expected" do
69
- setup_task
70
- #assert_nothing_raised{ @ts.set_account_information(@@user, 'XXXX') }
71
- #assert_equal('test', @ts.account_information)
72
- end
73
-
74
- test "set_account_information requires two arguments" do
75
- setup_task
76
- assert_raise(ArgumentError){ @ts.set_account_information }
77
- assert_raise(ArgumentError){ @ts.set_account_information('x') }
78
- assert_raise(ArgumentError){ @ts.set_account_information('x', 'y', 'z') }
79
- end
80
-
81
- test "arguments to set_account_information must be strings" do
82
- setup_task
83
- assert_raise(TypeError){ @ts.set_account_information(1, 'XXX') }
84
- assert_raise(TypeError){ @ts.set_account_information('x', 1) }
85
- end
86
-
87
- test "activate method basic functionality" do
88
- assert_respond_to(@ts, :activate)
89
- end
90
-
91
- test "activate behaves as expected" do
92
- @ts.new_work_item(@task, @trigger)
93
- assert_nothing_raised{ @ts.activate(@task) }
94
- end
95
-
96
- test "calling activate on the same object multiple times has no effect" do
97
- @ts.new_work_item(@task, @trigger)
98
- assert_nothing_raised{ @ts.activate(@task) }
99
- assert_nothing_raised{ @ts.activate(@task) }
100
- end
101
-
102
- test "activate requires a single argument" do
103
- assert_raise(ArgumentError){ @ts.activate }
104
- assert_raise(ArgumentError){ @ts.activate('foo', 'bar') }
105
- end
106
-
107
- test "activate requires a string argument" do
108
- assert_raise(TypeError){ @ts.activate(1) }
109
- end
110
-
111
- test "attempting to activate a bad task results in an error" do
112
- assert_raise(TaskScheduler::Error){ @ts.activate('bogus') }
113
- end
114
-
115
- test "application_name basic functionality" do
116
- assert_respond_to(@ts, :application_name)
117
- end
118
-
119
- test "application_name returns a string or nil" do
120
- setup_task
121
- assert_nothing_raised{ @ts.application_name }
122
- assert_kind_of([String, NilClass], @ts.application_name)
123
- end
124
-
125
- test "application_name does not accept any arguments" do
126
- assert_raises(ArgumentError){ @ts.application_name('bogus') }
127
- end
128
-
129
- test "application_name= basic functionality" do
130
- assert_respond_to(@ts, :application_name=)
131
- end
132
-
133
- test "application_name= works as expected" do
134
- setup_task
135
- assert_nothing_raised{ @ts.application_name = "notepad.exe" }
136
- assert_equal("notepad.exe", @ts.application_name)
137
- end
138
-
139
- test "application_name= requires a string argument" do
140
- assert_raise(TypeError){ @ts.application_name = 1 }
141
- end
142
-
143
- test "comment method basic functionality" do
144
- assert_respond_to(@ts, :comment)
145
- end
146
-
147
- test "comment method returns a string" do
148
- setup_task
149
- assert_nothing_raised{ @ts.comment }
150
- assert_kind_of(String, @ts.comment)
151
- end
152
-
153
- test "comment method does not accept any arguments" do
154
- assert_raise(ArgumentError){ @ts.comment('test') }
155
- end
156
-
157
- test "comment= method basic functionality" do
158
- assert_respond_to(@ts, :comment=)
159
- end
160
-
161
- test "comment= works as expected" do
162
- setup_task
163
- assert_nothing_raised{ @ts.comment = "test" }
164
- assert_equal("test", @ts.comment)
165
- end
166
-
167
- test "comment= method requires a string argument" do
168
- assert_raise(TypeError){ @ts.comment = 1 }
169
- end
170
-
171
- test "creator method basic functionality" do
172
- setup_task
173
- assert_respond_to(@ts, :creator)
174
- assert_nothing_raised{ @ts.creator }
175
- assert_kind_of(String, @ts.creator)
176
- end
177
-
178
- test "creator method returns expected value" do
179
- setup_task
180
- assert_equal('', @ts.creator)
181
- end
182
-
183
- test "creator method does not accept any arguments" do
184
- assert_raise(ArgumentError){ @ts.creator('foo') }
185
- end
186
-
187
- test "creator= method basic functionality" do
188
- assert_respond_to(@ts, :creator=)
189
- end
190
-
191
- test "creator= method works as expected" do
192
- setup_task
193
- assert_nothing_raised{ @ts.creator = "Test Creator" }
194
- assert_equal("Test Creator", @ts.creator)
195
- end
196
-
197
- test "creator= method requires a string argument" do
198
- assert_raise(TypeError){ @ts.creator = 1 }
199
- end
200
-
201
- test "delete method basic functionality" do
202
- assert_respond_to(@ts, :delete)
203
- end
204
-
205
- test "delete method works as expected" do
206
- setup_task
207
- assert_nothing_raised{ @ts.delete(@task) }
208
- assert_false(@ts.exists?(@task))
209
- end
210
-
211
- test "delete method requires a single argument" do
212
- assert_raise(ArgumentError){ @ts.delete }
213
- end
214
-
215
- test "delete method raises an error if the task does not exist" do
216
- assert_raise(TaskScheduler::Error){ @ts.delete("foofoo") }
217
- end
218
-
219
- test "enum basic functionality" do
220
- assert_respond_to(@ts, :enum)
221
- assert_nothing_raised{ @ts.enum }
222
- end
223
-
224
- test "enum method returns an array of strings" do
225
- assert_kind_of(Array, @ts.enum)
226
- assert_kind_of(String, @ts.enum.first)
227
- end
228
-
229
- test "tasks is an alias for enum" do
230
- assert_respond_to(@ts, :tasks)
231
- assert_alias_method(@ts, :tasks, :enum)
232
- end
233
-
234
- test "enum method does not accept any arguments" do
235
- assert_raise(ArgumentError){ @ts.enum(1) }
236
- end
237
-
238
- test "exists? basic functionality" do
239
- assert_respond_to(@ts, :exists?)
240
- assert_boolean(@ts.exists?(@task))
241
- end
242
-
243
- test "exists? returns expected value" do
244
- setup_task
245
- assert_true(@ts.exists?(@task))
246
- assert_false(@ts.exists?('bogusXYZ'))
247
- end
248
-
249
- test "exists? method requires a single argument" do
250
- assert_raise(ArgumentError){ @ts.exists? }
251
- assert_raise(ArgumentError){ @ts.exists?('foo', 'bar') }
252
- end
253
-
254
- test "exit_code basic functionality" do
255
- setup_task
256
- assert_respond_to(@ts, :exit_code)
257
- assert_nothing_raised{ @ts.exit_code }
258
- assert_kind_of(Fixnum, @ts.exit_code)
259
- end
260
-
261
- test "exit_code takes no arguments" do
262
- assert_raise(ArgumentError){ @ts.exit_code(true) }
263
- assert_raise(NoMethodError){ @ts.exit_code = 1 }
264
- end
265
-
266
- test "machine= basic functionality" do
267
- assert_respond_to(@ts, :machine=)
268
- end
269
-
270
- test "machine= works as expected" do
271
- omit_unless(@@elevated)
272
- setup_task
273
- assert_nothing_raised{ @ts.machine = @@host }
274
- assert_equal(@@host, @ts.machine)
275
- end
276
-
277
- test "host= is an alias for machine=" do
278
- assert_alias_method(@ts, :machine=, :host=)
279
- end
280
-
281
- test "set_machine basic functionality" do
282
- assert_respond_to(@ts, :set_machine)
283
- end
284
-
285
- test "set_host is an alias for set_machine" do
286
- assert_alias_method(@ts, :set_machine, :set_host)
287
- end
288
-
289
- test "max_run_time basic functionality" do
290
- assert_respond_to(@ts, :max_run_time)
291
- end
292
-
293
- test "max_run_time works as expected" do
294
- setup_task
295
- assert_nothing_raised{ @ts.max_run_time }
296
- assert_kind_of(Fixnum, @ts.max_run_time)
297
- end
298
-
299
- test "max_run_time accepts no arguments" do
300
- assert_raise(ArgumentError){ @ts.max_run_time(true) }
301
- end
302
-
303
- test "max_run_time= basic functionality" do
304
- assert_respond_to(@ts, :max_run_time=)
305
- end
306
-
307
- test "max_run_time= works as expected" do
308
- setup_task
309
- assert_nothing_raised{ @ts.max_run_time = 20000 }
310
- assert_equal(20000, @ts.max_run_time)
311
- end
312
-
313
- test "max_run_time= requires a numeric argument" do
314
- assert_raise(TypeError){ @ts.max_run_time = true }
315
- end
316
-
317
- test "most_recent_run_time basic functionality" do
318
- setup_task
319
- assert_respond_to(@ts, :most_recent_run_time)
320
- assert_nothing_raised{ @ts.most_recent_run_time }
321
- end
322
-
323
- test "most_recent_run_time is nil if task hasn't run" do
324
- setup_task
325
- assert_nil(@ts.most_recent_run_time)
326
- end
327
-
328
- test "most_recent_run_time does not accept any arguments" do
329
- assert_raise(ArgumentError){ @ts.most_recent_run_time(true) }
330
- assert_raise(NoMethodError){ @ts.most_recent_run_time = Time.now }
331
- end
332
-
333
- test "new_work_item basic functionality" do
334
- assert_respond_to(@ts, :new_work_item)
335
- end
336
-
337
- test "new_work_item accepts a trigger/hash" do
338
- assert_nothing_raised{ @ts.new_work_item('bar', @trigger) }
339
- end
340
-
341
- test "new_work_item fails if a bogus trigger key is present" do
342
- assert_raise(ArgumentError){ @ts.new_work_item('test', {:bogus => 1}) }
343
- end
344
-
345
- test "new_task is an alias for new_work_item" do
346
- assert_respond_to(@ts, :new_task)
347
- assert_alias_method(@ts, :new_task, :new_work_item)
348
- end
349
-
350
- test "new_work_item requires a task name and a trigger" do
351
- assert_raise(ArgumentError){ @ts.new_work_item }
352
- assert_raise(ArgumentError){ @ts.new_work_item('bar') }
353
- end
354
-
355
- test "new_work_item expects a string for the first argument" do
356
- assert_raise(TypeError){ @ts.new_work_item(1, @trigger) }
357
- end
358
-
359
- test "new_work_item expects a hash for the second argument" do
360
- assert_raise(TypeError){ @ts.new_work_item(@task, 1) }
361
- end
362
-
363
- test "next_run_time basic functionality" do
364
- assert_respond_to(@ts, :next_run_time)
365
- end
366
-
367
- test "next_run_time returns a Time object" do
368
- setup_task
369
- assert_nothing_raised{ @ts.next_run_time }
370
- assert_kind_of(Time, @ts.next_run_time)
371
- end
372
-
373
- test "next_run_time does not take any arguments" do
374
- assert_raise(ArgumentError){ @ts.next_run_time(true) }
375
- assert_raise(NoMethodError){ @ts.next_run_time = Time.now }
376
- end
377
-
378
- test "parameters basic functionality" do
379
- setup_task
380
- assert_respond_to(@ts, :parameters)
381
- assert_nothing_raised{ @ts.parameters }
382
- end
383
-
384
- test "parameters method does not take any arguments" do
385
- assert_raise(ArgumentError){ @ts.parameters('test') }
386
- end
387
-
388
- test "parameters= basic functionality" do
389
- assert_respond_to(@ts, :parameters=)
390
- end
391
-
392
- test "parameters= works as expected" do
393
- setup_task
394
- assert_nothing_raised{ @ts.parameters = "somefile.txt" }
395
- assert_equal("somefile.txt", @ts.parameters)
396
- end
397
-
398
- test "parameters= requires a string argument" do
399
- assert_raise(ArgumentError){ @ts.send(:parameters=) }
400
- assert_raise(TypeError){ @ts.parameters = 1 }
401
- end
402
-
403
- test "priority basic functionality" do
404
- assert_respond_to(@ts, :priority)
405
- end
406
-
407
- test "priority returns the expected value" do
408
- setup_task
409
- assert_nothing_raised{ @ts.priority }
410
- assert_kind_of(String, @ts.priority)
411
- end
412
-
413
- test "priority method does not accept any arguments" do
414
- assert_raise(ArgumentError){ @ts.priority(true) }
415
- end
416
-
417
- test "priority= basic functionality" do
418
- assert_respond_to(@ts, :priority=)
419
- end
420
-
421
- test "priority= works as expected" do
422
- setup_task
423
- assert_nothing_raised{ @ts.priority = TaskScheduler::NORMAL }
424
- assert_equal('normal', @ts.priority)
425
- end
426
-
427
- test "priority= requires a numeric argument" do
428
- assert_raise(TypeError){ @ts.priority = 'alpha' }
429
- end
430
-
431
- # TODO: Find a harmless way to test this.
432
- test "run basic functionality" do
433
- assert_respond_to(@ts, :run)
434
- end
435
-
436
- test "run does not accept any arguments" do
437
- assert_raise(ArgumentError){ @ts.run(true) }
438
- assert_raise(NoMethodError){ @ts.run = true }
439
- end
440
-
441
- test "save basic functionality" do
442
- assert_respond_to(@ts, :save)
443
- end
444
-
445
- test "status basic functionality" do
446
- setup_task
447
- assert_respond_to(@ts, :status)
448
- assert_nothing_raised{ @ts.status }
449
- assert_kind_of(String, @ts.status)
450
- end
451
-
452
- test "status returns the expected value" do
453
- setup_task
454
- assert_equal('ready', @ts.status)
455
- end
456
-
457
- test "status does not accept any arguments" do
458
- assert_raise(ArgumentError){ @ts.status(true) }
459
- end
460
-
461
- test "terminate basic functionality" do
462
- assert_respond_to(@ts, :terminate)
463
- end
464
-
465
- test "terminate does not accept any arguments" do
466
- assert_raise(ArgumentError){ @ts.terminate(true) }
467
- assert_raise(NoMethodError){ @ts.terminate = true }
468
- end
469
-
470
- test "calling terminate on a task that isn't running raises an error" do
471
- assert_raise(TaskScheduler::Error){ @ts.terminate }
472
- end
473
-
474
- test "trigger basic functionality" do
475
- setup_task
476
- assert_respond_to(@ts, :trigger)
477
- assert_nothing_raised{ @ts.trigger(0) }
478
- end
479
-
480
- test "trigger returns a hash object" do
481
- setup_task
482
- assert_kind_of(Hash, @ts.trigger(0))
483
- end
484
-
485
- test "trigger requires an index" do
486
- assert_raises(ArgumentError){ @ts.trigger }
487
- end
488
-
489
- test "trigger raises an error if the index is invalid" do
490
- assert_raises(TaskScheduler::Error){ @ts.trigger(9999) }
491
- end
492
-
493
- test "trigger= basic functionality" do
494
- assert_respond_to(@ts, :trigger=)
495
- end
496
-
497
- test "trigger= works as expected" do
498
- setup_task
499
- assert_nothing_raised{ @ts.trigger = @trigger }
500
- end
501
-
502
- test "trigger= requires a hash argument" do
503
- assert_raises(TypeError){ @ts.trigger = 'blah' }
504
- end
505
-
506
- test "add_trigger basic functionality" do
507
- assert_respond_to(@ts, :add_trigger)
508
- end
509
-
510
- test "add_trigger works as expected" do
511
- setup_task
512
- assert_nothing_raised{ @ts.add_trigger(0, @trigger) }
513
- end
514
-
515
- test "add_trigger requires two arguments" do
516
- assert_raises(ArgumentError){ @ts.add_trigger }
517
- assert_raises(ArgumentError){ @ts.add_trigger(0) }
518
- end
519
-
520
- test "add_trigger reqiuires an integer for the first argument" do
521
- assert_raises(TypeError){ @ts.add_trigger('foo', @trigger) }
522
- end
523
-
524
- test "add_trigger reqiuires a hash for the second argument" do
525
- assert_raises(TypeError){ @ts.add_trigger(0, 'foo') }
526
- end
527
-
528
- test "trigger_count basic functionality" do
529
- setup_task
530
- assert_respond_to(@ts, :trigger_count)
531
- assert_nothing_raised{ @ts.trigger_count }
532
- assert_kind_of(Fixnum, @ts.trigger_count)
533
- end
534
-
535
- test "trigger_count returns the expected value" do
536
- setup_task
537
- assert_equal(1, @ts.trigger_count)
538
- end
539
-
540
- test "trigger_count does not accept any arguments" do
541
- assert_raise(ArgumentError){ @ts.trigger_count(true) }
542
- assert_raise(NoMethodError){ @ts.trigger_count = 1 }
543
- end
544
-
545
- test "delete_trigger basic functionality" do
546
- assert_respond_to(@ts, :delete_trigger)
547
- end
548
-
549
- test "delete_trigger works as expected" do
550
- setup_task
551
- assert_nothing_raised{ @ts.delete_trigger(0) }
552
- assert_equal(0, @ts.trigger_count)
553
- end
554
-
555
- test "passing a bad index to delete_trigger will raise an error" do
556
- assert_raise(TaskScheduler::Error){ @ts.delete_trigger(9999) }
557
- end
558
-
559
- test "delete_trigger requires at least one argument" do
560
- assert_raise(ArgumentError){ @ts.delete_trigger }
561
- end
562
-
563
- test "trigger_string basic functionality" do
564
- setup_task
565
- assert_respond_to(@ts, :trigger_string)
566
- assert_nothing_raised{ @ts.trigger_string(0) }
567
- end
568
-
569
- test "trigger_string returns the expected value" do
570
- setup_task
571
- assert_equal('Starting 2015-04-11T07:14:00', @ts.trigger_string(0))
572
- end
573
-
574
- test "trigger_string requires a single argument" do
575
- assert_raise(ArgumentError){ @ts.trigger_string }
576
- assert_raise(ArgumentError){ @ts.trigger_string(0, 0) }
577
- end
578
-
579
- test "trigger_string requires a numeric argument" do
580
- assert_raise(TypeError){ @ts.trigger_string('alpha') }
581
- end
582
-
583
- test "trigger_string raises an error if the index is invalid" do
584
- assert_raise(TaskScheduler::Error){ @ts.trigger_string(9999) }
585
- end
586
-
587
- test "working_directory basic functionality" do
588
- setup_task
589
- assert_respond_to(@ts, :working_directory)
590
- assert_nothing_raised{ @ts.working_directory }
591
- assert_kind_of(String, @ts.working_directory)
592
- end
593
-
594
- test "working_directory takes no arguments" do
595
- assert_raise(ArgumentError){ @ts.working_directory(true) }
596
- end
597
-
598
- test "working_directory= basic functionality" do
599
- assert_respond_to(@ts, :working_directory=)
600
- end
601
-
602
- test "working_directory= works as expected" do
603
- setup_task
604
- assert_nothing_raised{ @ts.working_directory = "C:\\" }
605
- end
606
-
607
- test "working_directory= requires a string argument" do
608
- setup_task
609
- assert_raise(TypeError){ @ts.working_directory = 1 }
610
- end
611
-
612
- test "expected day constants are defined" do
613
- assert_not_nil(TaskScheduler::MONDAY)
614
- assert_not_nil(TaskScheduler::TUESDAY)
615
- assert_not_nil(TaskScheduler::WEDNESDAY)
616
- assert_not_nil(TaskScheduler::THURSDAY)
617
- assert_not_nil(TaskScheduler::FRIDAY)
618
- assert_not_nil(TaskScheduler::SATURDAY)
619
- assert_not_nil(TaskScheduler::SUNDAY)
620
- end
621
-
622
- test "expected month constants are defined" do
623
- assert_not_nil(TaskScheduler::JANUARY)
624
- assert_not_nil(TaskScheduler::FEBRUARY)
625
- assert_not_nil(TaskScheduler::MARCH)
626
- assert_not_nil(TaskScheduler::APRIL)
627
- assert_not_nil(TaskScheduler::MAY)
628
- assert_not_nil(TaskScheduler::JUNE)
629
- assert_not_nil(TaskScheduler::JULY)
630
- assert_not_nil(TaskScheduler::AUGUST)
631
- assert_not_nil(TaskScheduler::SEPTEMBER)
632
- assert_not_nil(TaskScheduler::OCTOBER)
633
- assert_not_nil(TaskScheduler::NOVEMBER)
634
- assert_not_nil(TaskScheduler::DECEMBER)
635
- end
636
-
637
- test "expected repeat constants are defined" do
638
- assert_not_nil(TaskScheduler::ONCE)
639
- assert_not_nil(TaskScheduler::DAILY)
640
- assert_not_nil(TaskScheduler::WEEKLY)
641
- assert_not_nil(TaskScheduler::MONTHLYDATE)
642
- assert_not_nil(TaskScheduler::MONTHLYDOW)
643
- end
644
-
645
- test "expected start constants are defined" do
646
- assert_not_nil(TaskScheduler::ON_IDLE)
647
- assert_not_nil(TaskScheduler::AT_SYSTEMSTART)
648
- assert_not_nil(TaskScheduler::AT_LOGON)
649
- end
650
-
651
- test "expected flag constants are defined" do
652
- assert_not_nil(TaskScheduler::INTERACTIVE)
653
- assert_not_nil(TaskScheduler::DELETE_WHEN_DONE)
654
- assert_not_nil(TaskScheduler::DISABLED)
655
- assert_not_nil(TaskScheduler::START_ONLY_IF_IDLE)
656
- assert_not_nil(TaskScheduler::KILL_ON_IDLE_END)
657
- assert_not_nil(TaskScheduler::DONT_START_IF_ON_BATTERIES)
658
- assert_not_nil(TaskScheduler::KILL_IF_GOING_ON_BATTERIES)
659
- assert_not_nil(TaskScheduler::HIDDEN)
660
- assert_not_nil(TaskScheduler::RESTART_ON_IDLE_RESUME)
661
- assert_not_nil(TaskScheduler::SYSTEM_REQUIRED)
662
- assert_not_nil(TaskScheduler::FLAG_HAS_END_DATE)
663
- assert_not_nil(TaskScheduler::FLAG_KILL_AT_DURATION_END)
664
- assert_not_nil(TaskScheduler::FLAG_DISABLED)
665
- assert_not_nil(TaskScheduler::MAX_RUN_TIMES)
666
- end
667
-
668
- test "expected priority constants are defined" do
669
- assert_not_nil(TaskScheduler::IDLE)
670
- assert_not_nil(TaskScheduler::NORMAL)
671
- assert_not_nil(TaskScheduler::HIGH)
672
- assert_not_nil(TaskScheduler::REALTIME)
673
- assert_not_nil(TaskScheduler::ABOVE_NORMAL)
674
- assert_not_nil(TaskScheduler::BELOW_NORMAL)
675
- end
676
-
677
- def teardown
678
- @ts.delete(@task) if @ts.exists?(@task)
679
- @ts = nil
680
- @task = nil
681
- @trigger = nil
682
- end
683
-
684
- def self.shutdown
685
- @@host = nil
686
- @@user = nil
687
- @@elevated = nil
688
- end
689
- end
1
+ ##########################################################################
2
+ # test_taskscheduler.rb
3
+ #
4
+ # Test suite for the win32-taskscheduler package. You should run this
5
+ # via the 'rake test' task.
6
+ ##########################################################################
7
+ require 'win32/taskscheduler'
8
+ require 'win32/security'
9
+ require 'socket'
10
+ require 'test-unit'
11
+ require 'etc'
12
+ include Win32
13
+
14
+ class TC_TaskScheduler < Test::Unit::TestCase
15
+ def self.startup
16
+ @@host = Socket.gethostname
17
+ @@user = Etc.getlogin
18
+ @@elevated = Win32::Security.elevated_security?
19
+ end
20
+
21
+ def setup
22
+ @task = 'foo'
23
+
24
+ @trigger = {
25
+ :start_year => 2015,
26
+ :start_month => 4,
27
+ :start_day => 11,
28
+ :start_hour => 7,
29
+ :start_minute => 14,
30
+ :trigger_type => TaskScheduler::DAILY,
31
+ :type => { :days_interval => 1 }
32
+ }
33
+
34
+ @ts = TaskScheduler.new
35
+ end
36
+
37
+ # Helper method
38
+ def setup_task
39
+ @ts.new_work_item(@task, @trigger)
40
+ @ts.activate(@task)
41
+ end
42
+
43
+ test "version constant is set to expected value" do
44
+ assert_equal('0.3.2', TaskScheduler::VERSION)
45
+ end
46
+
47
+ test "account_information method basic functionality" do
48
+ assert_respond_to(@ts, :account_information)
49
+ end
50
+
51
+ test "account_information returns the task owner" do
52
+ setup_task
53
+ assert_equal("#{@@host}\\#{@@user}", @ts.account_information)
54
+ end
55
+
56
+ test "account_information returns nil if no task has been activated" do
57
+ assert_nil(@ts.account_information)
58
+ end
59
+
60
+ test "account_information does not accept any arguments" do
61
+ assert_raise(ArgumentError){ @ts.account_information('foo') }
62
+ end
63
+
64
+ test "set_account_information basic functionality" do
65
+ assert_respond_to(@ts, :set_account_information)
66
+ end
67
+
68
+ test "set_account_information works as expected" do
69
+ setup_task
70
+ #assert_nothing_raised{ @ts.set_account_information(@@user, 'XXXX') }
71
+ #assert_equal('test', @ts.account_information)
72
+ end
73
+
74
+ test "set_account_information requires two arguments" do
75
+ setup_task
76
+ assert_raise(ArgumentError){ @ts.set_account_information }
77
+ assert_raise(ArgumentError){ @ts.set_account_information('x') }
78
+ assert_raise(ArgumentError){ @ts.set_account_information('x', 'y', 'z') }
79
+ end
80
+
81
+ test "arguments to set_account_information must be strings" do
82
+ setup_task
83
+ assert_raise(TypeError){ @ts.set_account_information(1, 'XXX') }
84
+ assert_raise(TypeError){ @ts.set_account_information('x', 1) }
85
+ end
86
+
87
+ test "activate method basic functionality" do
88
+ assert_respond_to(@ts, :activate)
89
+ end
90
+
91
+ test "activate behaves as expected" do
92
+ @ts.new_work_item(@task, @trigger)
93
+ assert_nothing_raised{ @ts.activate(@task) }
94
+ end
95
+
96
+ test "calling activate on the same object multiple times has no effect" do
97
+ @ts.new_work_item(@task, @trigger)
98
+ assert_nothing_raised{ @ts.activate(@task) }
99
+ assert_nothing_raised{ @ts.activate(@task) }
100
+ end
101
+
102
+ test "activate requires a single argument" do
103
+ assert_raise(ArgumentError){ @ts.activate }
104
+ assert_raise(ArgumentError){ @ts.activate('foo', 'bar') }
105
+ end
106
+
107
+ test "activate requires a string argument" do
108
+ assert_raise(TypeError){ @ts.activate(1) }
109
+ end
110
+
111
+ test "attempting to activate a bad task results in an error" do
112
+ assert_raise(TaskScheduler::Error){ @ts.activate('bogus') }
113
+ end
114
+
115
+ test "application_name basic functionality" do
116
+ assert_respond_to(@ts, :application_name)
117
+ end
118
+
119
+ test "application_name returns a string or nil" do
120
+ setup_task
121
+ assert_nothing_raised{ @ts.application_name }
122
+ assert_kind_of([String, NilClass], @ts.application_name)
123
+ end
124
+
125
+ test "application_name does not accept any arguments" do
126
+ assert_raises(ArgumentError){ @ts.application_name('bogus') }
127
+ end
128
+
129
+ test "application_name= basic functionality" do
130
+ assert_respond_to(@ts, :application_name=)
131
+ end
132
+
133
+ test "application_name= works as expected" do
134
+ setup_task
135
+ assert_nothing_raised{ @ts.application_name = "notepad.exe" }
136
+ assert_equal("notepad.exe", @ts.application_name)
137
+ end
138
+
139
+ test "application_name= requires a string argument" do
140
+ assert_raise(TypeError){ @ts.application_name = 1 }
141
+ end
142
+
143
+ test "comment method basic functionality" do
144
+ assert_respond_to(@ts, :comment)
145
+ end
146
+
147
+ test "comment method returns a string" do
148
+ setup_task
149
+ assert_nothing_raised{ @ts.comment }
150
+ assert_kind_of(String, @ts.comment)
151
+ end
152
+
153
+ test "comment method does not accept any arguments" do
154
+ assert_raise(ArgumentError){ @ts.comment('test') }
155
+ end
156
+
157
+ test "comment= method basic functionality" do
158
+ assert_respond_to(@ts, :comment=)
159
+ end
160
+
161
+ test "comment= works as expected" do
162
+ setup_task
163
+ assert_nothing_raised{ @ts.comment = "test" }
164
+ assert_equal("test", @ts.comment)
165
+ end
166
+
167
+ test "comment= method requires a string argument" do
168
+ assert_raise(TypeError){ @ts.comment = 1 }
169
+ end
170
+
171
+ test "creator method basic functionality" do
172
+ setup_task
173
+ assert_respond_to(@ts, :creator)
174
+ assert_nothing_raised{ @ts.creator }
175
+ assert_kind_of(String, @ts.creator)
176
+ end
177
+
178
+ test "creator method returns expected value" do
179
+ setup_task
180
+ assert_equal('', @ts.creator)
181
+ end
182
+
183
+ test "creator method does not accept any arguments" do
184
+ assert_raise(ArgumentError){ @ts.creator('foo') }
185
+ end
186
+
187
+ test "creator= method basic functionality" do
188
+ assert_respond_to(@ts, :creator=)
189
+ end
190
+
191
+ test "creator= method works as expected" do
192
+ setup_task
193
+ assert_nothing_raised{ @ts.creator = "Test Creator" }
194
+ assert_equal("Test Creator", @ts.creator)
195
+ end
196
+
197
+ test "creator= method requires a string argument" do
198
+ assert_raise(TypeError){ @ts.creator = 1 }
199
+ end
200
+
201
+ test "delete method basic functionality" do
202
+ assert_respond_to(@ts, :delete)
203
+ end
204
+
205
+ test "delete method works as expected" do
206
+ setup_task
207
+ assert_nothing_raised{ @ts.delete(@task) }
208
+ assert_false(@ts.exists?(@task))
209
+ end
210
+
211
+ test "delete method requires a single argument" do
212
+ assert_raise(ArgumentError){ @ts.delete }
213
+ end
214
+
215
+ test "delete method raises an error if the task does not exist" do
216
+ assert_raise(TaskScheduler::Error){ @ts.delete("foofoo") }
217
+ end
218
+
219
+ test "enum basic functionality" do
220
+ assert_respond_to(@ts, :enum)
221
+ assert_nothing_raised{ @ts.enum }
222
+ end
223
+
224
+ test "enum method returns an array of strings" do
225
+ assert_kind_of(Array, @ts.enum)
226
+ assert_kind_of(String, @ts.enum.first)
227
+ end
228
+
229
+ test "tasks is an alias for enum" do
230
+ assert_respond_to(@ts, :tasks)
231
+ assert_alias_method(@ts, :tasks, :enum)
232
+ end
233
+
234
+ test "enum method does not accept any arguments" do
235
+ assert_raise(ArgumentError){ @ts.enum(1) }
236
+ end
237
+
238
+ test "exists? basic functionality" do
239
+ assert_respond_to(@ts, :exists?)
240
+ assert_boolean(@ts.exists?(@task))
241
+ end
242
+
243
+ test "exists? returns expected value" do
244
+ setup_task
245
+ assert_true(@ts.exists?(@task))
246
+ assert_false(@ts.exists?('bogusXYZ'))
247
+ end
248
+
249
+ test "exists? method requires a single argument" do
250
+ assert_raise(ArgumentError){ @ts.exists? }
251
+ assert_raise(ArgumentError){ @ts.exists?('foo', 'bar') }
252
+ end
253
+
254
+ test "exit_code basic functionality" do
255
+ setup_task
256
+ assert_respond_to(@ts, :exit_code)
257
+ assert_nothing_raised{ @ts.exit_code }
258
+ assert_kind_of(Fixnum, @ts.exit_code)
259
+ end
260
+
261
+ test "exit_code takes no arguments" do
262
+ assert_raise(ArgumentError){ @ts.exit_code(true) }
263
+ assert_raise(NoMethodError){ @ts.exit_code = 1 }
264
+ end
265
+
266
+ test "machine= basic functionality" do
267
+ assert_respond_to(@ts, :machine=)
268
+ end
269
+
270
+ test "machine= works as expected" do
271
+ omit_unless(@@elevated)
272
+ setup_task
273
+ assert_nothing_raised{ @ts.machine = @@host }
274
+ assert_equal(@@host, @ts.machine)
275
+ end
276
+
277
+ test "host= is an alias for machine=" do
278
+ assert_alias_method(@ts, :machine=, :host=)
279
+ end
280
+
281
+ test "set_machine basic functionality" do
282
+ assert_respond_to(@ts, :set_machine)
283
+ end
284
+
285
+ test "set_host is an alias for set_machine" do
286
+ assert_alias_method(@ts, :set_machine, :set_host)
287
+ end
288
+
289
+ test "max_run_time basic functionality" do
290
+ assert_respond_to(@ts, :max_run_time)
291
+ end
292
+
293
+ test "max_run_time works as expected" do
294
+ setup_task
295
+ assert_nothing_raised{ @ts.max_run_time }
296
+ assert_kind_of(Fixnum, @ts.max_run_time)
297
+ end
298
+
299
+ test "max_run_time accepts no arguments" do
300
+ assert_raise(ArgumentError){ @ts.max_run_time(true) }
301
+ end
302
+
303
+ test "max_run_time= basic functionality" do
304
+ assert_respond_to(@ts, :max_run_time=)
305
+ end
306
+
307
+ test "max_run_time= works as expected" do
308
+ setup_task
309
+ assert_nothing_raised{ @ts.max_run_time = 20000 }
310
+ assert_equal(20000, @ts.max_run_time)
311
+ end
312
+
313
+ test "max_run_time= requires a numeric argument" do
314
+ assert_raise(TypeError){ @ts.max_run_time = true }
315
+ end
316
+
317
+ test "most_recent_run_time basic functionality" do
318
+ setup_task
319
+ assert_respond_to(@ts, :most_recent_run_time)
320
+ assert_nothing_raised{ @ts.most_recent_run_time }
321
+ end
322
+
323
+ test "most_recent_run_time is nil if task hasn't run" do
324
+ setup_task
325
+ assert_nil(@ts.most_recent_run_time)
326
+ end
327
+
328
+ test "most_recent_run_time does not accept any arguments" do
329
+ assert_raise(ArgumentError){ @ts.most_recent_run_time(true) }
330
+ assert_raise(NoMethodError){ @ts.most_recent_run_time = Time.now }
331
+ end
332
+
333
+ test "new_work_item basic functionality" do
334
+ assert_respond_to(@ts, :new_work_item)
335
+ end
336
+
337
+ test "new_work_item accepts a trigger/hash" do
338
+ assert_nothing_raised{ @ts.new_work_item('bar', @trigger) }
339
+ end
340
+
341
+ test "new_work_item fails if a bogus trigger key is present" do
342
+ assert_raise(ArgumentError){ @ts.new_work_item('test', {:bogus => 1}) }
343
+ end
344
+
345
+ test "new_task is an alias for new_work_item" do
346
+ assert_respond_to(@ts, :new_task)
347
+ assert_alias_method(@ts, :new_task, :new_work_item)
348
+ end
349
+
350
+ test "new_work_item requires a task name and a trigger" do
351
+ assert_raise(ArgumentError){ @ts.new_work_item }
352
+ assert_raise(ArgumentError){ @ts.new_work_item('bar') }
353
+ end
354
+
355
+ test "new_work_item expects a string for the first argument" do
356
+ assert_raise(TypeError){ @ts.new_work_item(1, @trigger) }
357
+ end
358
+
359
+ test "new_work_item expects a hash for the second argument" do
360
+ assert_raise(TypeError){ @ts.new_work_item(@task, 1) }
361
+ end
362
+
363
+ test "next_run_time basic functionality" do
364
+ assert_respond_to(@ts, :next_run_time)
365
+ end
366
+
367
+ test "next_run_time returns a Time object" do
368
+ setup_task
369
+ assert_nothing_raised{ @ts.next_run_time }
370
+ assert_kind_of(Time, @ts.next_run_time)
371
+ end
372
+
373
+ test "next_run_time does not take any arguments" do
374
+ assert_raise(ArgumentError){ @ts.next_run_time(true) }
375
+ assert_raise(NoMethodError){ @ts.next_run_time = Time.now }
376
+ end
377
+
378
+ test "parameters basic functionality" do
379
+ setup_task
380
+ assert_respond_to(@ts, :parameters)
381
+ assert_nothing_raised{ @ts.parameters }
382
+ end
383
+
384
+ test "parameters method does not take any arguments" do
385
+ assert_raise(ArgumentError){ @ts.parameters('test') }
386
+ end
387
+
388
+ test "parameters= basic functionality" do
389
+ assert_respond_to(@ts, :parameters=)
390
+ end
391
+
392
+ test "parameters= works as expected" do
393
+ setup_task
394
+ assert_nothing_raised{ @ts.parameters = "somefile.txt" }
395
+ assert_equal("somefile.txt", @ts.parameters)
396
+ end
397
+
398
+ test "parameters= requires a string argument" do
399
+ assert_raise(ArgumentError){ @ts.send(:parameters=) }
400
+ assert_raise(TypeError){ @ts.parameters = 1 }
401
+ end
402
+
403
+ test "priority basic functionality" do
404
+ assert_respond_to(@ts, :priority)
405
+ end
406
+
407
+ test "priority returns the expected value" do
408
+ setup_task
409
+ assert_nothing_raised{ @ts.priority }
410
+ assert_kind_of(String, @ts.priority)
411
+ end
412
+
413
+ test "priority method does not accept any arguments" do
414
+ assert_raise(ArgumentError){ @ts.priority(true) }
415
+ end
416
+
417
+ test "priority= basic functionality" do
418
+ assert_respond_to(@ts, :priority=)
419
+ end
420
+
421
+ test "priority= works as expected" do
422
+ setup_task
423
+ assert_nothing_raised{ @ts.priority = TaskScheduler::NORMAL }
424
+ assert_equal('normal', @ts.priority)
425
+ end
426
+
427
+ test "priority= requires a numeric argument" do
428
+ assert_raise(TypeError){ @ts.priority = 'alpha' }
429
+ end
430
+
431
+ # TODO: Find a harmless way to test this.
432
+ test "run basic functionality" do
433
+ assert_respond_to(@ts, :run)
434
+ end
435
+
436
+ test "run does not accept any arguments" do
437
+ assert_raise(ArgumentError){ @ts.run(true) }
438
+ assert_raise(NoMethodError){ @ts.run = true }
439
+ end
440
+
441
+ test "save basic functionality" do
442
+ assert_respond_to(@ts, :save)
443
+ end
444
+
445
+ test "status basic functionality" do
446
+ setup_task
447
+ assert_respond_to(@ts, :status)
448
+ assert_nothing_raised{ @ts.status }
449
+ assert_kind_of(String, @ts.status)
450
+ end
451
+
452
+ test "status returns the expected value" do
453
+ setup_task
454
+ assert_equal('ready', @ts.status)
455
+ end
456
+
457
+ test "status does not accept any arguments" do
458
+ assert_raise(ArgumentError){ @ts.status(true) }
459
+ end
460
+
461
+ test "terminate basic functionality" do
462
+ assert_respond_to(@ts, :terminate)
463
+ end
464
+
465
+ test "terminate does not accept any arguments" do
466
+ assert_raise(ArgumentError){ @ts.terminate(true) }
467
+ assert_raise(NoMethodError){ @ts.terminate = true }
468
+ end
469
+
470
+ test "calling terminate on a task that isn't running raises an error" do
471
+ assert_raise(TaskScheduler::Error){ @ts.terminate }
472
+ end
473
+
474
+ test "trigger basic functionality" do
475
+ setup_task
476
+ assert_respond_to(@ts, :trigger)
477
+ assert_nothing_raised{ @ts.trigger(0) }
478
+ end
479
+
480
+ test "trigger returns a hash object" do
481
+ setup_task
482
+ assert_kind_of(Hash, @ts.trigger(0))
483
+ end
484
+
485
+ test "trigger requires an index" do
486
+ assert_raises(ArgumentError){ @ts.trigger }
487
+ end
488
+
489
+ test "trigger raises an error if the index is invalid" do
490
+ assert_raises(TaskScheduler::Error){ @ts.trigger(9999) }
491
+ end
492
+
493
+ test "trigger= basic functionality" do
494
+ assert_respond_to(@ts, :trigger=)
495
+ end
496
+
497
+ test "trigger= works as expected" do
498
+ setup_task
499
+ assert_nothing_raised{ @ts.trigger = @trigger }
500
+ end
501
+
502
+ test "trigger= requires a hash argument" do
503
+ assert_raises(TypeError){ @ts.trigger = 'blah' }
504
+ end
505
+
506
+ test "add_trigger basic functionality" do
507
+ assert_respond_to(@ts, :add_trigger)
508
+ end
509
+
510
+ test "add_trigger works as expected" do
511
+ setup_task
512
+ assert_nothing_raised{ @ts.add_trigger(0, @trigger) }
513
+ end
514
+
515
+ test "add_trigger requires two arguments" do
516
+ assert_raises(ArgumentError){ @ts.add_trigger }
517
+ assert_raises(ArgumentError){ @ts.add_trigger(0) }
518
+ end
519
+
520
+ test "add_trigger reqiuires an integer for the first argument" do
521
+ assert_raises(TypeError){ @ts.add_trigger('foo', @trigger) }
522
+ end
523
+
524
+ test "add_trigger reqiuires a hash for the second argument" do
525
+ assert_raises(TypeError){ @ts.add_trigger(0, 'foo') }
526
+ end
527
+
528
+ test "trigger_count basic functionality" do
529
+ setup_task
530
+ assert_respond_to(@ts, :trigger_count)
531
+ assert_nothing_raised{ @ts.trigger_count }
532
+ assert_kind_of(Fixnum, @ts.trigger_count)
533
+ end
534
+
535
+ test "trigger_count returns the expected value" do
536
+ setup_task
537
+ assert_equal(1, @ts.trigger_count)
538
+ end
539
+
540
+ test "trigger_count does not accept any arguments" do
541
+ assert_raise(ArgumentError){ @ts.trigger_count(true) }
542
+ assert_raise(NoMethodError){ @ts.trigger_count = 1 }
543
+ end
544
+
545
+ test "delete_trigger basic functionality" do
546
+ assert_respond_to(@ts, :delete_trigger)
547
+ end
548
+
549
+ test "delete_trigger works as expected" do
550
+ setup_task
551
+ assert_nothing_raised{ @ts.delete_trigger(0) }
552
+ assert_equal(0, @ts.trigger_count)
553
+ end
554
+
555
+ test "passing a bad index to delete_trigger will raise an error" do
556
+ assert_raise(TaskScheduler::Error){ @ts.delete_trigger(9999) }
557
+ end
558
+
559
+ test "delete_trigger requires at least one argument" do
560
+ assert_raise(ArgumentError){ @ts.delete_trigger }
561
+ end
562
+
563
+ test "trigger_string basic functionality" do
564
+ setup_task
565
+ assert_respond_to(@ts, :trigger_string)
566
+ assert_nothing_raised{ @ts.trigger_string(0) }
567
+ end
568
+
569
+ test "trigger_string returns the expected value" do
570
+ setup_task
571
+ assert_equal('Starting 2015-04-11T07:14:00', @ts.trigger_string(0))
572
+ end
573
+
574
+ test "trigger_string requires a single argument" do
575
+ assert_raise(ArgumentError){ @ts.trigger_string }
576
+ assert_raise(ArgumentError){ @ts.trigger_string(0, 0) }
577
+ end
578
+
579
+ test "trigger_string requires a numeric argument" do
580
+ assert_raise(TypeError){ @ts.trigger_string('alpha') }
581
+ end
582
+
583
+ test "trigger_string raises an error if the index is invalid" do
584
+ assert_raise(TaskScheduler::Error){ @ts.trigger_string(9999) }
585
+ end
586
+
587
+ test "working_directory basic functionality" do
588
+ setup_task
589
+ assert_respond_to(@ts, :working_directory)
590
+ assert_nothing_raised{ @ts.working_directory }
591
+ assert_kind_of(String, @ts.working_directory)
592
+ end
593
+
594
+ test "working_directory takes no arguments" do
595
+ assert_raise(ArgumentError){ @ts.working_directory(true) }
596
+ end
597
+
598
+ test "working_directory= basic functionality" do
599
+ assert_respond_to(@ts, :working_directory=)
600
+ end
601
+
602
+ test "working_directory= works as expected" do
603
+ setup_task
604
+ assert_nothing_raised{ @ts.working_directory = "C:\\" }
605
+ end
606
+
607
+ test "working_directory= requires a string argument" do
608
+ setup_task
609
+ assert_raise(TypeError){ @ts.working_directory = 1 }
610
+ end
611
+
612
+ test "expected day constants are defined" do
613
+ assert_not_nil(TaskScheduler::MONDAY)
614
+ assert_not_nil(TaskScheduler::TUESDAY)
615
+ assert_not_nil(TaskScheduler::WEDNESDAY)
616
+ assert_not_nil(TaskScheduler::THURSDAY)
617
+ assert_not_nil(TaskScheduler::FRIDAY)
618
+ assert_not_nil(TaskScheduler::SATURDAY)
619
+ assert_not_nil(TaskScheduler::SUNDAY)
620
+ end
621
+
622
+ test "expected month constants are defined" do
623
+ assert_not_nil(TaskScheduler::JANUARY)
624
+ assert_not_nil(TaskScheduler::FEBRUARY)
625
+ assert_not_nil(TaskScheduler::MARCH)
626
+ assert_not_nil(TaskScheduler::APRIL)
627
+ assert_not_nil(TaskScheduler::MAY)
628
+ assert_not_nil(TaskScheduler::JUNE)
629
+ assert_not_nil(TaskScheduler::JULY)
630
+ assert_not_nil(TaskScheduler::AUGUST)
631
+ assert_not_nil(TaskScheduler::SEPTEMBER)
632
+ assert_not_nil(TaskScheduler::OCTOBER)
633
+ assert_not_nil(TaskScheduler::NOVEMBER)
634
+ assert_not_nil(TaskScheduler::DECEMBER)
635
+ end
636
+
637
+ test "expected repeat constants are defined" do
638
+ assert_not_nil(TaskScheduler::ONCE)
639
+ assert_not_nil(TaskScheduler::DAILY)
640
+ assert_not_nil(TaskScheduler::WEEKLY)
641
+ assert_not_nil(TaskScheduler::MONTHLYDATE)
642
+ assert_not_nil(TaskScheduler::MONTHLYDOW)
643
+ end
644
+
645
+ test "expected start constants are defined" do
646
+ assert_not_nil(TaskScheduler::ON_IDLE)
647
+ assert_not_nil(TaskScheduler::AT_SYSTEMSTART)
648
+ assert_not_nil(TaskScheduler::AT_LOGON)
649
+ end
650
+
651
+ test "expected flag constants are defined" do
652
+ assert_not_nil(TaskScheduler::INTERACTIVE)
653
+ assert_not_nil(TaskScheduler::DELETE_WHEN_DONE)
654
+ assert_not_nil(TaskScheduler::DISABLED)
655
+ assert_not_nil(TaskScheduler::START_ONLY_IF_IDLE)
656
+ assert_not_nil(TaskScheduler::KILL_ON_IDLE_END)
657
+ assert_not_nil(TaskScheduler::DONT_START_IF_ON_BATTERIES)
658
+ assert_not_nil(TaskScheduler::KILL_IF_GOING_ON_BATTERIES)
659
+ assert_not_nil(TaskScheduler::HIDDEN)
660
+ assert_not_nil(TaskScheduler::RESTART_ON_IDLE_RESUME)
661
+ assert_not_nil(TaskScheduler::SYSTEM_REQUIRED)
662
+ assert_not_nil(TaskScheduler::FLAG_HAS_END_DATE)
663
+ assert_not_nil(TaskScheduler::FLAG_KILL_AT_DURATION_END)
664
+ assert_not_nil(TaskScheduler::FLAG_DISABLED)
665
+ assert_not_nil(TaskScheduler::MAX_RUN_TIMES)
666
+ end
667
+
668
+ test "expected priority constants are defined" do
669
+ assert_not_nil(TaskScheduler::IDLE)
670
+ assert_not_nil(TaskScheduler::NORMAL)
671
+ assert_not_nil(TaskScheduler::HIGH)
672
+ assert_not_nil(TaskScheduler::REALTIME)
673
+ assert_not_nil(TaskScheduler::ABOVE_NORMAL)
674
+ assert_not_nil(TaskScheduler::BELOW_NORMAL)
675
+ end
676
+
677
+ def teardown
678
+ @ts.delete(@task) if @ts.exists?(@task)
679
+ @ts.delete('bar') if @ts.exists?('bar')
680
+ @ts = nil
681
+ @task = nil
682
+ @trigger = nil
683
+ end
684
+
685
+ def self.shutdown
686
+ @@host = nil
687
+ @@user = nil
688
+ @@elevated = nil
689
+ end
690
+ end