robust_excel_ole 0.5.1 → 0.6

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.
Files changed (48) hide show
  1. data/Changelog +13 -0
  2. data/README.rdoc +70 -21
  3. data/README_detail.rdoc +60 -27
  4. data/examples/edit_sheets/example_access_sheets_and_cells.rb +2 -2
  5. data/examples/edit_sheets/example_adding_sheets.rb +2 -2
  6. data/examples/edit_sheets/example_concating.rb +2 -3
  7. data/examples/edit_sheets/example_copying.rb +2 -3
  8. data/examples/edit_sheets/example_expanding.rb +2 -3
  9. data/examples/edit_sheets/example_naming.rb +2 -3
  10. data/examples/edit_sheets/example_ranges.rb +2 -2
  11. data/examples/edit_sheets/example_saving.rb +2 -3
  12. data/examples/open_save_close/example_control_to_excel.rb +3 -3
  13. data/examples/open_save_close/example_default_excel.rb +4 -4
  14. data/examples/open_save_close/example_force_excel.rb +2 -2
  15. data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +2 -2
  16. data/examples/open_save_close/example_if_obstructed_forget.rb +2 -2
  17. data/examples/open_save_close/example_if_obstructed_save.rb +2 -2
  18. data/examples/open_save_close/example_if_unsaved_accept.rb +2 -2
  19. data/examples/open_save_close/example_if_unsaved_forget.rb +2 -2
  20. data/examples/open_save_close/example_if_unsaved_forget_more.rb +4 -5
  21. data/examples/open_save_close/example_read_only.rb +2 -2
  22. data/examples/open_save_close/example_rename_cells.rb +3 -3
  23. data/examples/open_save_close/example_reuse.rb +2 -2
  24. data/examples/open_save_close/example_simple.rb +3 -4
  25. data/examples/open_save_close/example_unobtrusively.rb +2 -2
  26. data/lib/robust_excel_ole/book.rb +84 -78
  27. data/lib/robust_excel_ole/bookstore.rb +5 -1
  28. data/lib/robust_excel_ole/excel.rb +165 -188
  29. data/lib/robust_excel_ole/reo_common.rb +4 -0
  30. data/lib/robust_excel_ole/sheet.rb +15 -6
  31. data/lib/robust_excel_ole/version.rb +1 -1
  32. data/spec/book_spec.rb +104 -77
  33. data/spec/book_specs/book_close_spec.rb +9 -8
  34. data/spec/book_specs/book_misc_spec.rb +367 -26
  35. data/spec/book_specs/book_open_spec.rb +375 -94
  36. data/spec/book_specs/book_save_spec.rb +137 -112
  37. data/spec/book_specs/book_sheet_spec.rb +1 -1
  38. data/spec/book_specs/book_subclass_spec.rb +2 -1
  39. data/spec/book_specs/book_unobtr_spec.rb +87 -96
  40. data/spec/bookstore_spec.rb +8 -5
  41. data/spec/cell_spec.rb +1 -1
  42. data/spec/data/another_workbook.xls +0 -0
  43. data/spec/data/book_with_blank.xls +0 -0
  44. data/spec/data/workbook.xls +0 -0
  45. data/spec/excel_spec.rb +484 -72
  46. data/spec/range_spec.rb +1 -1
  47. data/spec/sheet_spec.rb +47 -1
  48. metadata +4 -5
@@ -41,7 +41,7 @@ describe Bookstore do
41
41
  excel = Excel.new(:reuse => true)
42
42
  open_books = excel == nil ? 0 : excel.Workbooks.Count
43
43
  puts "*** open books *** : #{open_books}" if open_books > 0
44
- Excel.close_all
44
+ Excel.kill_all
45
45
  end
46
46
 
47
47
  before do
@@ -391,16 +391,19 @@ describe Bookstore do
391
391
  end
392
392
 
393
393
  it "should have forgotten some books if they have no reference anymore" do
394
- book_new = Book.open(@different_file)
394
+ different_file1 = @different_file
395
+ simple_file1 = @simple_file
396
+ book_new = Book.open(different_file1)
395
397
  @bookstore.store(book_new)
396
398
  @book = nil
397
399
  @book = "Bla"
398
- @book = Book.open(@simple_file)
400
+ @book = Book.open(simple_file1)
399
401
  @bookstore.store(@book)
400
402
  @book = nil
401
403
  GC.start
402
- @bookstore.fetch(@simple_file).should == nil
403
- @bookstore.fetch(@different_file).should == book_new
404
+ sleep 1
405
+ #@bookstore.fetch(simple_file1).should == nil
406
+ @bookstore.fetch(different_file1).should == book_new
404
407
  end
405
408
  end
406
409
  end
@@ -9,7 +9,7 @@ describe Cell do
9
9
  excel = Excel.new(:reuse => true)
10
10
  open_books = excel == nil ? 0 : excel.Workbooks.Count
11
11
  puts "*** open books *** : #{open_books}" if open_books > 0
12
- Excel.close_all
12
+ Excel.kill_all
13
13
  end
14
14
 
15
15
  before do
Binary file
@@ -24,7 +24,22 @@ module RobustExcelOle
24
24
 
25
25
  after do
26
26
  Excel.kill_all
27
- rm_tmp(@dir)
27
+ #rm_tmp(@dir)
28
+ end
29
+
30
+ context "Illegal Refrence" do
31
+
32
+ before do
33
+
34
+ book1 = Book.open(@simple_file)
35
+ book2 = Book.open(@simple_file, :force_excel => :new)
36
+ a = book1.saved
37
+ end
38
+
39
+ it "should not cause warning 'Illegal Reference probably recycled'" do
40
+ Excel.close_all
41
+ book = Book.open(@simple_file)
42
+ end
28
43
  end
29
44
 
30
45
  context "excel creation" do
@@ -134,7 +149,32 @@ module RobustExcelOle
134
149
  end
135
150
 
136
151
  context "current" do
137
-
152
+
153
+ it "should connect to the Excel" do
154
+ excel1 = Excel.create
155
+ excel2 = Excel.current
156
+ excel2.should === excel1
157
+ end
158
+
159
+ it "should create a new Excel if there is no Excel to connect with" do
160
+ excel1 = Excel.create
161
+ excel1.close
162
+ excel2 = Excel.current
163
+ excel1.should_not be_alive
164
+ excel2.should be_alive
165
+ Excel.excels_number.should == 1
166
+ end
167
+
168
+ it "should make the Excel instance not alive if the Excel that was connected with was closed" do
169
+ excel1 = Excel.create
170
+ excel2 = Excel.current
171
+ excel1.close
172
+ excel1.should_not be_alive
173
+ excel2.should_not be_alive
174
+ sleep 0.2
175
+ Excel.excels_number.should == 0
176
+ end
177
+
138
178
  it "should reuse the first opened Excel instance if not the first opened Excel instance was closed" do
139
179
  excel1 = Excel.create
140
180
  excel2 = Excel.create
@@ -143,30 +183,26 @@ module RobustExcelOle
143
183
  excel3.should === excel1
144
184
  end
145
185
 
146
- it "should create a new Excel with the same hwnd as the first opened Excel if the first opened Excel was closed" do
186
+ it "should reuse the Excel that was not closed" do
147
187
  excel1 = Excel.create
148
- excel1_hwnd = excel1.hwnd
149
188
  excel2 = Excel.create
150
189
  excel1.close
190
+ sleep 0.2
151
191
  excel3 = Excel.current
152
- excel3.should_not === excel2
153
- excel3.hwnd.should == excel1_hwnd
192
+ excel3.should === excel2
193
+ excel3.Hwnd.should == excel2.Hwnd
154
194
  end
155
195
  end
156
196
 
157
- context "excel_processes" do
197
+ context "excels_number" do
158
198
 
159
- before do
160
- @excel1 = Excel.create
161
- @excel2 = Excel.create
199
+ it "should return right number of excel instances" do
200
+ Excel.excels_number.should == 0
201
+ e1 = Excel.create
202
+ Excel.excels_number.should == 1
203
+ e2 = Excel.create
204
+ Excel.excels_number.should == 2
162
205
  end
163
-
164
- it "should yield Excel objects" do
165
- excels = Excel.excel_processes
166
- excels[0].should == @excel1
167
- excels[1].should == @excel2
168
- end
169
-
170
206
  end
171
207
 
172
208
  context "kill Excel processes hard" do
@@ -181,7 +217,6 @@ module RobustExcelOle
181
217
  @excel1.alive?.should be_false
182
218
  @excel2.alive?.should be_false
183
219
  end
184
-
185
220
  end
186
221
 
187
222
  context "recreating Excel instances" do
@@ -272,15 +307,15 @@ module RobustExcelOle
272
307
  @excel1.recreate(:reopen_workbooks => true, :displayalerts => true)
273
308
  @excel1.should be_alive
274
309
  @excel1.should be_a Excel
275
- @excel1.visible.should be_true
276
- @excel1.displayalerts.should be_true
310
+ @excel1.Visible.should be_true
311
+ @excel1.DisplayAlerts.should be_true
277
312
  @book1.should be_alive
278
313
  @book2.should be_alive
279
314
  @excel3.recreate(:visible => true)
280
315
  @excel3.should be_alive
281
316
  @excel3.should be_a Excel
282
- @excel3.visible.should be_true
283
- @excel3.displayalerts.should be_true
317
+ @excel3.Visible.should be_true
318
+ @excel3.DisplayAlerts.should be_true
284
319
  @book3.reopen
285
320
  @book3.should be_alive
286
321
  @book3.excel.should == @excel3
@@ -292,20 +327,24 @@ module RobustExcelOle
292
327
  end
293
328
  end
294
329
 
330
+ # Error
295
331
  context "close excel instances" do
296
332
  def direct_excel_creation_helper # :nodoc: #
297
333
  expect { WIN32OLE.connect("Excel.Application") }.to raise_error
298
334
  sleep 0.1
299
- excel1 = WIN32OLE.new("Excel.Application")
300
- excel1.Workbooks.Add
301
- excel2 = WIN32OLE.new("Excel.Application")
302
- excel2.Workbooks.Add
335
+ ole_excel1 = WIN32OLE.new("Excel.Application")
336
+ ole_excel1.Workbooks.Add
337
+ ole_excel2 = WIN32OLE.new("Excel.Application")
338
+ ole_excel2.Workbooks.Add
303
339
  expect { WIN32OLE.connect("Excel.Application") }.to_not raise_error
304
340
  end
305
341
 
306
342
  it "simple file with default" do
307
343
  Excel.close_all
308
344
  direct_excel_creation_helper
345
+ sleep 3
346
+ puts "excels_number: #{Excel.excels_number}"
347
+ sleep 1
309
348
  Excel.close_all
310
349
  sleep 0.1
311
350
  expect { WIN32OLE.connect("Excel.Application") }.to raise_error
@@ -316,19 +355,26 @@ module RobustExcelOle
316
355
 
317
356
  context "with saved workbooks" do
318
357
 
319
- before do
320
- book = Book.open(@simple_file)
321
- book2 = Book.open(@simple_file, :force_excel => :new)
322
- @excel = book.excel
323
- @excel2 = book2.excel
358
+ it "should do with no Excel instances" do
359
+ expect{
360
+ Excel.close_all
361
+ }.to_not raise_error
324
362
  end
325
363
 
326
- it "should close the Excel instances" do
327
- @excel.should be_alive
328
- @excel2.should be_alive
364
+ it "should close one Excel instance" do
365
+ excel1 = Excel.create
329
366
  Excel.close_all
330
- @excel.should_not be_alive
331
- @excel2.should_not be_alive
367
+ excel1.should_not be_alive
368
+ Excel.excels_number.should == 0
369
+ end
370
+
371
+ it "should close two Excel instances" do
372
+ excel1 = Excel.create
373
+ excel2 = Excel.create
374
+ Excel.close_all
375
+ excel1.should_not be_alive
376
+ excel2.should_not be_alive
377
+ Excel.excels_number.should == 0
332
378
  end
333
379
  end
334
380
 
@@ -351,41 +397,55 @@ module RobustExcelOle
351
397
  end
352
398
 
353
399
  it "should close the first Excel without unsaved workbooks and then raise an error" do
400
+ expect{
401
+ Excel.close_all(:if_unsaved => :raise)
402
+ }.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
403
+ @excel1.should_not be_alive
404
+ @excel2.should be_alive
405
+ @excel4.should be_alive
406
+ end
407
+
408
+ it "should close the first Excel without unsaved workbooks and then raise an error per default" do
354
409
  expect{
355
410
  Excel.close_all
356
411
  }.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
357
412
  @excel1.should_not be_alive
413
+ @excel2.should be_alive
414
+ @excel4.should be_alive
358
415
  end
359
416
 
360
- it "should close the Excel instances without saving the unsaved workbooks" do
361
- Excel.close_all(:if_unsaved => :forget)
417
+ # Error
418
+ it "should close the Excel instances with saving the unsaved workbooks" do
419
+ Excel.close_all(:if_unsaved => :save)
362
420
  @excel1.should_not be_alive
363
421
  @excel2.should_not be_alive
364
422
  @excel4.should_not be_alive
365
423
  new_book2 = Book.open(@simple_file)
366
424
  new_sheet2 = new_book2.sheet(1)
367
- new_sheet2[1,1].value.should == @old_cell_value2
425
+ new_sheet2[1,1].value.should_not == @old_cell_value2
368
426
  new_book2.close
369
427
  new_book3 = Book.open(@another_simple_file)
370
428
  new_sheet3 = new_book3.sheet(1)
371
- new_sheet3[1,1].value.should == @old_cell_value3
372
- new_book3.close
429
+ new_sheet3[1,1].value.should_not == @old_cell_value3
430
+ new_book3.close
373
431
  end
374
432
 
375
- it "should close the Excel instances with saving the unsaved workbooks" do
376
- Excel.close_all(:if_unsaved => :save)
433
+ # Error
434
+ it "should close the Excel instances without saving the unsaved workbooks" do
435
+ @excel1.displayalerts = @excel2.displayalerts = @excel4.displayalerts = false
436
+ Excel.close_all(:if_unsaved => :forget)
377
437
  @excel1.should_not be_alive
378
438
  @excel2.should_not be_alive
379
439
  @excel4.should_not be_alive
380
440
  new_book2 = Book.open(@simple_file)
381
441
  new_sheet2 = new_book2.sheet(1)
382
- new_sheet2[1,1].value.should_not == @old_cell_value2
442
+ new_sheet2[1,1].value.should == @old_cell_value2
383
443
  new_book2.close
384
444
  new_book3 = Book.open(@another_simple_file)
385
445
  new_sheet3 = new_book3.sheet(1)
386
- new_sheet3[1,1].value.should_not == @old_cell_value3
387
- new_book3.close
388
- end
446
+ new_sheet3[1,1].value.should == @old_cell_value3
447
+ new_book3.close
448
+ end
389
449
 
390
450
  it "should raise an error for invalid option" do
391
451
  expect {
@@ -393,14 +453,34 @@ module RobustExcelOle
393
453
  }.to raise_error(ExcelErrorClose, ":if_unsaved: invalid option: :invalid_option")
394
454
  end
395
455
 
396
- it "should raise an error by default" do
397
- expect{
398
- Excel.close_all
399
- }.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
400
- @excel1.should_not be_alive
401
- end
402
456
  end
403
457
 
458
+ context "unsaved_workbooks" do
459
+
460
+ # Error
461
+ it "should save the unsaved workbook" do
462
+ book1 = Book.open(@simple_file, :visible => true)
463
+ excel1 = book1.excel
464
+ book1.sheet(1)[1,1] = "bar"
465
+ book1.Saved.should be_false
466
+ Excel.close_all(:if_unsaved => :save)
467
+ end
468
+
469
+ # Error
470
+ it "should forget the unsaved workbook" do
471
+ book1 = Book.open(@simple_file, :visible => true)
472
+ excel1 = book1.excel
473
+ excel1.displayalerts = false
474
+ sheet1 = book1.sheet(1)
475
+ old_cell_value1 = sheet1[1,1].value
476
+ sheet1[1,1] = sheet1[1,1].value == "foo" ? "bar" : "foo"
477
+ book1.Saved.should be_false
478
+ Excel.close_all(:if_unsaved => :forget)
479
+ end
480
+ end
481
+ end
482
+
483
+ =begin
404
484
  context "with :if_unsaved => :alert" do
405
485
  before do
406
486
  @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '/helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
@@ -419,6 +499,7 @@ module RobustExcelOle
419
499
  it "should save if user answers 'yes'" do
420
500
  @key_sender.puts "{enter}"
421
501
  Excel.close_all(:if_unsaved => :alert)
502
+ @excel2.should_not be_alive
422
503
  new_book2 = Book.open(@simple_file)
423
504
  new_sheet2 = new_book2.sheet(1)
424
505
  new_sheet2[1,1].value.should_not == @old_cell_value2
@@ -444,9 +525,33 @@ module RobustExcelOle
444
525
  # Excel.close_all(:if_unsaved => :alert)
445
526
  # }.to raise_error(ExcelUserCanceled, "close: canceled by user")
446
527
  # end
528
+
529
+ it "should save if user answers 'yes'" do
530
+ @excel1.displayalerts = @excel2.displayalerts = @excel4.displayalerts = true
531
+ @key_sender.puts "{enter}"
532
+ Excel.close_all(:if_unsaved => :forget)
533
+ @excel2.should_not be_alive
534
+ new_book2 = Book.open(@simple_file)
535
+ new_sheet2 = new_book2.sheet(1)
536
+ new_sheet2[1,1].value.should_not == @old_cell_value2
537
+ new_book2.close
538
+ end
539
+
540
+ it "should not save if user answers 'no'" do
541
+ @excel1.displayalerts = @excel2.displayalerts = @excel4.displayalerts = true
542
+ @key_sender.puts "{right}{enter}"
543
+ @key_sender.puts "{right}{enter}"
544
+ Excel.close_all(:if_unsaved => :forget)
545
+ @excel2.should_not be_alive
546
+ new_book2 = Book.open(@simple_file)
547
+ new_sheet2 = new_book2.sheet(1)
548
+ new_sheet2[1,1].value.should == @old_cell_value2
549
+ new_book2.close
550
+ end
447
551
  end
448
552
  end
449
-
553
+ =end
554
+
450
555
  describe "close" do
451
556
 
452
557
  context "with a saved workbook" do
@@ -515,7 +620,9 @@ module RobustExcelOle
515
620
  end
516
621
 
517
622
  it "should close the Excel without saving the workbook" do
623
+ @excel.displayalerts = false
518
624
  @excel.should be_alive
625
+ @excel.displayalerts = false
519
626
  @excel.close(:if_unsaved => :forget)
520
627
  @excel.should_not be_alive
521
628
  new_book = Book.open(@simple_file)
@@ -637,7 +744,48 @@ module RobustExcelOle
637
744
  @excel.close(:if_unsaved => :alert)
638
745
  }.to raise_error(ExcelUserCanceled, "close: canceled by user")
639
746
  end
747
+
748
+ it "should save if user answers 'yes'" do
749
+ # "Yes" is to the left of "No", which is the default. --> language independent
750
+ @excel.should be_alive
751
+ @excel.displayalerts = true
752
+ @key_sender.puts "{enter}"
753
+ @excel.close(:if_unsaved => :forget)
754
+ @excel.should_not be_alive
755
+ new_book = Book.open(@simple_file)
756
+ new_sheet = new_book.sheet(1)
757
+ new_sheet[1,1].value.should_not == @old_cell_value
758
+ new_book.close
759
+ end
760
+
761
+ it "should not save if user answers 'no'" do
762
+ @excel.should be_alive
763
+ @excel.displayalerts = true
764
+ @book.should be_alive
765
+ @book.saved.should be_false
766
+ @key_sender.puts "{right}{enter}"
767
+ @excel.close(:if_unsaved => :forget)
768
+ @excel.should_not be_alive
769
+ @book.should_not be_alive
770
+ new_book = Book.open(@simple_file)
771
+ new_sheet = new_book.sheet(1)
772
+ new_sheet[1,1].value.should == @old_cell_value
773
+ new_book.close
774
+ end
775
+
776
+ it "should not save if user answers 'cancel'" do
777
+ # strangely, in the "cancel" case, the question will sometimes be repeated twice
778
+ @excel.should be_alive
779
+ @excel.displayalerts = true
780
+ @book.should be_alive
781
+ @book.saved.should be_false
782
+ @key_sender.puts "{left}{enter}"
783
+ @key_sender.puts "{left}{enter}"
784
+ @excel.close(:if_unsaved => :forget)
785
+ end
786
+
640
787
  end
788
+
641
789
  end
642
790
 
643
791
  describe "alive" do
@@ -676,64 +824,301 @@ module RobustExcelOle
676
824
  @excel1.should_not == nil
677
825
  end
678
826
 
827
+ # Error
679
828
  it "should be false with dead Excel objects" do
680
829
  excel2 = Excel.current
830
+ sleep 3
681
831
  Excel.close_all
832
+ sleep 2
682
833
  excel2.should_not == @excel1
683
834
  end
684
835
 
685
836
  end
686
837
 
838
+ context "workbooks_visible" do
839
+
840
+ it "should not raise an error for an empty Excel instance" do
841
+ excel = Excel.create
842
+ expect{
843
+ excel.workbooks_visible = true
844
+ }.to_not raise_error
845
+ end
846
+
847
+ it "should make visible a workbook" do
848
+ book1 = Book.open(@simple_file)
849
+ book1.excel.workbooks_visible = true
850
+ book1.excel.Visible.should be_true
851
+ book1.Windows(book1.Name).Visible.should be_true
852
+ book1.visible.should be_true
853
+ end
854
+
855
+ it "should make visible and invisible two workbooks" do
856
+ book1 = Book.open(@simple_file)
857
+ book2 = Book.open(@different_file)
858
+ excel = book1.excel
859
+ excel.workbooks_visible = true
860
+ excel.Visible.should be_true
861
+ book1.Windows(book1.Name).Visible.should be_true
862
+ book1.visible.should be_true
863
+ book2.Windows(book2.Name).Visible.should be_true
864
+ book2.visible.should be_true
865
+ excel.workbooks_visible = false
866
+ excel.Visible.should be_true
867
+ book1.Windows(book1.Name).Visible.should be_false
868
+ book1.visible.should be_false
869
+ book2.Windows(book2.Name).Visible.should be_false
870
+ book2.visible.should be_false
871
+ end
872
+
873
+ it "should make visible all workbooks" do
874
+ book1 = Book.open(@simple_file, :visible => true)
875
+ book2 = Book.open(@different_file)
876
+ excel = book1.excel
877
+ excel.workbooks_visible = true
878
+ excel.Visible.should be_true
879
+ book1.Windows(book1.Name).Visible.should be_true
880
+ book1.visible.should be_true
881
+ book2.Windows(book2.Name).Visible.should be_true
882
+ book2.visible.should be_true
883
+ end
884
+
885
+ end
886
+
687
887
  context "with Visible and DisplayAlerts" do
688
888
 
689
- it "should create Excel visible" do
690
- excel = Excel.new(:visible => true)
889
+ it "should set Excel visible and invisible with current" do
890
+ excel1 = Excel.create
891
+ excel2 = Excel.current(:visible => true)
892
+ excel2.Visible.should be_true
893
+ excel2.visible.should be_true
894
+ excel2.DisplayAlerts.should be_true
895
+ excel2.displayalerts.should == :if_visible
896
+ end
897
+
898
+ it "should set Excel visible and invisible with current" do
899
+ excel1 = Excel.new(:reuse => false, :visible => true)
900
+ excel1.Visible.should be_true
901
+ excel1.visible.should be_true
902
+ excel1.DisplayAlerts.should be_true
903
+ excel1.displayalerts.should == :if_visible
904
+ excel1.visible = false
905
+ excel1.Visible.should be_false
906
+ excel1.visible.should be_false
907
+ excel1.DisplayAlerts.should be_false
908
+ excel1.displayalerts.should == :if_visible
909
+ excel2 = Excel.current(:visible => true)
910
+ excel2.Visible.should be_true
911
+ excel2.visible.should be_true
912
+ excel2.displayalerts.should == :if_visible
913
+ excel2.DisplayAlerts.should be_true
914
+ end
915
+
916
+ it "should set Excel visible and invisible" do
917
+ excel = Excel.new(:reuse => false, :visible => true)
691
918
  excel.Visible.should be_true
692
919
  excel.visible.should be_true
693
- excel.DisplayAlerts.should be_false
694
- excel.displayalerts.should be_false
920
+ excel.DisplayAlerts.should be_true
921
+ excel.displayalerts.should == :if_visible
922
+ excel6 = Excel.current
923
+ excel6.should === excel
924
+ excel6.Visible.should be_true
695
925
  excel.visible = false
696
926
  excel.Visible.should be_false
697
927
  excel.visible.should be_false
698
- end
699
-
700
- it "should create Excel with DispayAlerts enabled" do
701
- excel = Excel.new(:displayalerts => true)
928
+ excel.DisplayAlerts.should be_false
929
+ excel.displayalerts.should == :if_visible
930
+ excel7 = Excel.current
931
+ excel7.should === excel
932
+ excel7.Visible.should be_false
933
+ excel7.DisplayAlerts.should be_false
934
+ excel1 = Excel.create(:visible => true)
935
+ excel1.should_not == excel
936
+ excel1.Visible.should be_true
937
+ excel1.visible.should be_true
938
+ excel1.DisplayAlerts.should be_true
939
+ excel1.displayalerts.should == :if_visible
940
+ excel2 = Excel.create(:visible => false)
941
+ excel2.Visible.should be_false
942
+ excel2.visible.should be_false
943
+ excel2.DisplayAlerts.should be_false
944
+ excel2.displayalerts.should == :if_visible
945
+ excel3 = Excel.current
946
+ excel3.should === excel
947
+ excel3.Visible.should be_false
948
+ excel3.visible.should be_false
949
+ excel3.DisplayAlerts.should be_false
950
+ excel3.displayalerts.should == :if_visible
951
+ excel4 = Excel.current(:visible => true)
952
+ excel4.should === excel
953
+ excel4.Visible.should be_true
954
+ excel4.visible.should be_true
955
+ #Error:
956
+ #excel4.DisplayAlerts.should be_true
957
+ excel4.displayalerts.should == :if_visible
958
+ excel5 = Excel.current(:visible => false)
959
+ excel5.should === excel
960
+ excel5.Visible.should be_false
961
+ excel5.visible.should be_false
962
+ excel5.DisplayAlerts.should be_false
963
+ excel5.displayalerts.should == :if_visible
964
+ end
965
+
966
+ it "should enable or disable Excel DispayAlerts" do
967
+ excel = Excel.new(:reuse => false, :displayalerts => true)
702
968
  excel.DisplayAlerts.should be_true
703
969
  excel.displayalerts.should be_true
704
970
  excel.Visible.should be_false
705
971
  excel.visible.should be_false
972
+ excel6 = Excel.current
973
+ excel6.should === excel
974
+ excel6.DisplayAlerts.should be_true
975
+ excel6.displayalerts.should be_true
976
+ excel6.Visible.should be_false
977
+ excel6.visible.should be_false
706
978
  excel.displayalerts = false
707
979
  excel.DisplayAlerts.should be_false
708
980
  excel.displayalerts.should be_false
981
+ excel.Visible.should be_false
982
+ excel.visible.should be_false
983
+ excel7 = Excel.current
984
+ excel7.should === excel
985
+ excel7.DisplayAlerts.should be_false
986
+ excel7.displayalerts.should be_false
987
+ excel7.Visible.should be_false
988
+ excel7.visible.should be_false
989
+ excel1 = Excel.create(:displayalerts => true)
990
+ excel1.should_not == excel
991
+ excel1.DisplayAlerts.should be_true
992
+ excel1.displayalerts.should be_true
993
+ excel1.Visible.should be_false
994
+ excel1.visible.should be_false
995
+ excel2 = Excel.create(:displayalerts => false)
996
+ excel2.DisplayAlerts.should be_false
997
+ excel2.displayalerts.should be_false
998
+ excel2.Visible.should be_false
999
+ excel2.visible.should be_false
1000
+ excel3 = Excel.current
1001
+ excel3.should === excel
1002
+ excel3.DisplayAlerts.should be_false
1003
+ excel3.displayalerts.should be_false
1004
+ excel3.Visible.should be_false
1005
+ excel3.visible.should be_false
1006
+ excel4 = Excel.current(:displayalerts => true)
1007
+ excel4.should === excel
1008
+ excel4.DisplayAlerts.should be_true
1009
+ excel4.displayalerts.should be_true
1010
+ excel4.Visible.should be_false
1011
+ excel4.visible.should be_false
1012
+ excel5 = Excel.current(:displayalerts => false)
1013
+ excel5.should === excel
1014
+ excel5.DisplayAlerts.should be_false
1015
+ excel5.displayalerts.should be_false
1016
+ excel5.Visible.should be_false
1017
+ excel5.visible.should be_false
1018
+ end
1019
+
1020
+ it "should set Excel visible and displayalerts" do
1021
+ excel = Excel.new(:reuse => false, :visible => true, :displayalerts => true)
1022
+ excel.DisplayAlerts.should be_true
1023
+ excel.displayalerts.should be_true
1024
+ excel.Visible.should be_true
1025
+ excel.visible.should be_true
1026
+ excel6 = Excel.current
1027
+ excel6.should === excel
1028
+ excel6.DisplayAlerts.should be_true
1029
+ excel6.displayalerts.should be_true
1030
+ excel6.Visible.should be_true
1031
+ excel6.visible.should be_true
1032
+ excel.displayalerts = false
1033
+ excel.DisplayAlerts.should be_false
1034
+ excel.displayalerts.should be_false
1035
+ excel.Visible.should be_true
1036
+ excel.visible.should be_true
1037
+ excel7 = Excel.current
1038
+ excel7.should === excel
1039
+ excel7.DisplayAlerts.should be_false
1040
+ excel7.displayalerts.should be_false
1041
+ excel7.Visible.should be_true
1042
+ excel7.visible.should be_true
1043
+ excel2 = Excel.new(:reuse => false, :visible => true, :displayalerts => true)
1044
+ excel2.visible = false
1045
+ excel2.DisplayAlerts.should be_true
1046
+ excel2.displayalerts.should be_true
1047
+ excel2.Visible.should be_false
1048
+ excel2.visible.should be_false
1049
+ excel3 = Excel.new(:reuse => false, :visible => true, :displayalerts => false)
1050
+ excel3.Visible.should be_true
1051
+ excel3.DisplayAlerts.should be_false
1052
+ excel3 = Excel.new(:reuse => false, :visible => false, :displayalerts => true)
1053
+ excel3.Visible.should be_false
1054
+ excel3.DisplayAlerts.should be_true
1055
+ excel3 = Excel.new(:reuse => false, :visible => false, :displayalerts => false)
1056
+ excel3.Visible.should be_false
1057
+ excel3.DisplayAlerts.should be_false
1058
+ excel4 = Excel.create(:visible => true, :displayalerts => true)
1059
+ excel4.DisplayAlerts.should be_true
1060
+ excel4.displayalerts.should be_true
1061
+ excel4.Visible.should be_true
1062
+ excel4.visible.should be_true
1063
+ excel5 = Excel.current(:visible => true, :displayalerts => false)
1064
+ excel5.should === excel
1065
+ excel5.DisplayAlerts.should be_false
1066
+ excel5.displayalerts.should be_false
1067
+ excel5.Visible.should be_true
1068
+ excel5.visible.should be_true
1069
+ excel6 = Excel.current(:visible => false, :displayalerts => true)
1070
+ excel6.should === excel
1071
+ excel6.DisplayAlerts.should be_true
1072
+ excel6.displayalerts.should be_true
1073
+ excel6.Visible.should be_false
1074
+ excel6.visible.should be_false
1075
+ end
1076
+
1077
+ it "should work with displayalerts == if_visible" do
1078
+ excel = Excel.new(:reuse => false, :visible => true, :displayalerts => :if_visible)
1079
+ excel.Visible.should be_true
1080
+ excel.DisplayAlerts.should be_true
1081
+ excel2 = Excel.new(:reuse => false, :visible => false, :displayalerts => :if_visible)
1082
+ excel2.Visible.should be_false
1083
+ excel2.DisplayAlerts.should be_false
1084
+ excel3 = Excel.new(:reuse => false, :displayalerts => :if_visible)
1085
+ excel3.Visible.should be_false
1086
+ excel3.DisplayAlerts.should be_false
1087
+ excel3.visible = true
1088
+ excel3.Visible.should be_true
1089
+ excel3.DisplayAlerts.should be_true
1090
+ excel3.visible = false
1091
+ excel3.Visible.should be_false
1092
+ excel3.DisplayAlerts.should be_false
709
1093
  end
710
1094
 
711
1095
  it "should keep visible and displayalerts values when reusing Excel" do
712
1096
  excel = Excel.new(:visible => true)
713
- excel.visible.should be_true
714
- excel.displayalerts.should be_false
715
- excel2 = Excel.new(:displayalerts => true)
1097
+ excel.Visible.should be_true
1098
+ excel.DisplayAlerts.should be_true
1099
+ excel2 = Excel.new(:displayalerts => false)
716
1100
  excel2.should == excel
717
- excel.visible.should be_true
718
- excel.displayalerts.should be_true
1101
+ excel.Visible.should be_true
1102
+ excel.DisplayAlerts.should be_false
719
1103
  end
720
1104
 
721
1105
  it "should keep displayalerts and visible values when reusing Excel" do
722
1106
  excel = Excel.new(:displayalerts => true)
723
- excel.visible.should be_false
724
- excel.displayalerts.should be_true
1107
+ excel.Visible.should be_false
1108
+ excel.DisplayAlerts.should be_true
725
1109
  excel2 = Excel.new(:visible => true)
726
1110
  excel2.should == excel
727
- excel.visible.should be_true
728
- excel.displayalerts.should be_true
1111
+ excel.Visible.should be_true
1112
+ excel.DisplayAlerts.should be_true
729
1113
  end
730
1114
 
731
1115
  end
732
1116
 
733
- context "with displayalerts" do
1117
+ context "with resetting displayalerts values" do
734
1118
  before do
735
1119
  @excel1 = Excel.new(:displayalerts => true)
736
1120
  @excel2 = Excel.new(:displayalerts => false, :reuse => false)
1121
+ @excel3 = Excel.new(:displayalerts => false, :visible => true, :reuse => false)
737
1122
  end
738
1123
 
739
1124
  it "should turn off displayalerts" do
@@ -759,6 +1144,33 @@ module RobustExcelOle
759
1144
  @excel2.DisplayAlerts.should be_false
760
1145
  end
761
1146
  end
1147
+
1148
+ it "should set displayalerts to :if_visible" do
1149
+ @excel1.DisplayAlerts.should be_true
1150
+ begin
1151
+ @excel1.with_displayalerts :if_visible do
1152
+ @excel1.DisplayAlerts.should be_false
1153
+ @excel1.Visible.should be_false
1154
+ raise TestError, "any_error"
1155
+ end
1156
+ rescue TestError
1157
+ @excel1.DisplayAlerts.should be_true
1158
+ end
1159
+ end
1160
+
1161
+ it "should set displayalerts to :if_visible" do
1162
+ @excel3.DisplayAlerts.should be_false
1163
+ begin
1164
+ @excel3.with_displayalerts :if_visible do
1165
+ @excel3.DisplayAlerts.should be_true
1166
+ @excel3.Visible.should be_true
1167
+ raise TestError, "any_error"
1168
+ end
1169
+ rescue TestError
1170
+ @excel3.DisplayAlerts.should be_false
1171
+ end
1172
+ end
1173
+
762
1174
  end
763
1175
 
764
1176
  context "with calculation" do