robust_excel_ole 1.1.5 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +6 -0
  3. data/README.rdoc +2 -2
  4. data/docs/README_excel.rdoc +2 -3
  5. data/docs/README_open.rdoc +8 -12
  6. data/docs/README_ranges.rdoc +21 -9
  7. data/docs/README_sheet.rdoc +1 -1
  8. data/lib/robust_excel_ole/book.rb +3 -23
  9. data/lib/robust_excel_ole/excel.rb +2 -15
  10. data/lib/robust_excel_ole/reo_common.rb +11 -7
  11. data/lib/robust_excel_ole/sheet.rb +36 -15
  12. data/lib/robust_excel_ole/version.rb +1 -1
  13. data/robust_excel_ole.gemspec +1 -1
  14. data/spec/book_spec.rb +1 -1
  15. data/spec/book_specs/book_close_spec.rb +3 -3
  16. data/spec/book_specs/book_misc_spec.rb +25 -1
  17. data/spec/book_specs/book_open_spec.rb +299 -5
  18. data/spec/book_specs/book_sheet_spec.rb +1 -1
  19. data/spec/book_specs/book_unobtr_spec.rb +275 -35
  20. data/spec/data/another_workbook.xls +0 -0
  21. data/spec/data/different_workbook.xls +0 -0
  22. data/spec/data/workbook.xls +0 -0
  23. data/spec/excel_spec.rb +118 -5
  24. data/spec/helpers/key_sender.rb +2 -2
  25. data/spec/reo_common_spec.rb +0 -4
  26. data/spec/sheet_spec.rb +32 -0
  27. data/spec/spec_helper.rb +3 -0
  28. metadata +3 -21
  29. data/spec/ruby1.8.6_rspec2.14/book_spec.rb +0 -1421
  30. data/spec/ruby1.8.6_rspec2.14/book_specs/book_all_spec.rb +0 -22
  31. data/spec/ruby1.8.6_rspec2.14/book_specs/book_close_spec.rb +0 -252
  32. data/spec/ruby1.8.6_rspec2.14/book_specs/book_misc_spec.rb +0 -1070
  33. data/spec/ruby1.8.6_rspec2.14/book_specs/book_open_spec.rb +0 -1855
  34. data/spec/ruby1.8.6_rspec2.14/book_specs/book_save_spec.rb +0 -514
  35. data/spec/ruby1.8.6_rspec2.14/book_specs/book_sheet_spec.rb +0 -395
  36. data/spec/ruby1.8.6_rspec2.14/book_specs/book_subclass_spec.rb +0 -51
  37. data/spec/ruby1.8.6_rspec2.14/book_specs/book_unobtr_spec.rb +0 -1737
  38. data/spec/ruby1.8.6_rspec2.14/bookstore_spec.rb +0 -495
  39. data/spec/ruby1.8.6_rspec2.14/cell_spec.rb +0 -76
  40. data/spec/ruby1.8.6_rspec2.14/cygwin_spec.rb +0 -42
  41. data/spec/ruby1.8.6_rspec2.14/excel_spec.rb +0 -1820
  42. data/spec/ruby1.8.6_rspec2.14/general_spec.rb +0 -212
  43. data/spec/ruby1.8.6_rspec2.14/range_spec.rb +0 -131
  44. data/spec/ruby1.8.6_rspec2.14/reo_common_spec.rb +0 -130
  45. data/spec/ruby1.8.6_rspec2.14/sheet_spec.rb +0 -663
  46. data/spec/ruby1.8.6_rspec2.14/spec_helper.rb +0 -35
@@ -1,1855 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require File.join(File.dirname(__FILE__), './../spec_helper')
4
-
5
-
6
- $VERBOSE = nil
7
-
8
- include RobustExcelOle
9
- include General
10
-
11
- describe Book do
12
-
13
- before(:all) do
14
- excel = Excel.new(:reuse => true)
15
- open_books = excel == nil ? 0 : excel.Workbooks.Count
16
- puts "*** open books *** : #{open_books}" if open_books > 0
17
- Excel.kill_all
18
- end
19
-
20
- before do
21
- @dir = create_tmpdir
22
- @simple_file = @dir + '/workbook.xls'
23
- @simple_save_file = @dir + '/workbook_save.xls'
24
- @different_file = @dir + '/different_workbook.xls'
25
- @simple_file_other_path = @dir + '/more_data/workbook.xls'
26
- @another_simple_file = @dir + '/another_workbook.xls'
27
- @linked_file = @dir + '/workbook_linked.xlsm'
28
- @simple_file_xlsm = @dir + '/workbook.xls'
29
- @simple_file_xlsx = @dir + '/workbook.xlsx'
30
- @simple_file1 = @simple_file
31
- @different_file1 = @different_file
32
- @simple_file_other_path1 = @simple_file_other_path
33
- end
34
-
35
- after do
36
- Excel.kill_all
37
- #rm_tmp(@dir)
38
- end
39
-
40
- describe "simple open" do
41
-
42
- it "should simply open" do
43
- book = Workbook.open(@simple_file, :v => true, :f => {:e => :new})
44
- end
45
-
46
- end
47
-
48
- describe "new" do
49
-
50
- it "should simply create a new one" do
51
- book = Workbook.new(@simple_file)
52
- book.should be_alive
53
- book.should be_a Book
54
- end
55
-
56
- it "should set options" do
57
- book = Workbook.new(@simple_file, :visible => true, :read_only => true, :force => {:excel => :new})
58
- book.should be_alive
59
- book.should be_a Book
60
- book.excel.Visible.should be_true
61
- book.Windows(book.Name).Visible.should be_true
62
- book.ReadOnly.should be_true
63
- book2 = Workbook.new(@different_file, :force => {:excel => :new}, :v => true)
64
- book2.should be_alive
65
- book2.should be_a Book
66
- book2.excel.Visible.should be_true
67
- book2.Windows(book2.Name).Visible.should be_true
68
- book2.ReadOnly.should be_false
69
- book2.excel.should_not == book.excel
70
- end
71
-
72
- end
73
-
74
- describe "open" do
75
-
76
- context "with calculation mode" do
77
-
78
- it "should set calculation mode" do
79
- book1 = Book.open(@simple_file1, :visible => true)
80
- book1.excel.calculation = :manual
81
- book1.excel.Calculation.should == -4135
82
- book1.save
83
- book1.excel.close
84
- book2 = Book.open(@simple_file1, :visible => true)
85
- book2.excel.calculation = :automatic
86
- book2.excel.Calculation.should == -4105
87
- book2.save
88
- book2.excel.close
89
- end
90
-
91
- it "should not set the default value" do
92
- book1 = Book.open(@simple_file)
93
- book1.excel.calculation.should == nil
94
- end
95
-
96
- it "should set the calculation mode to automatic" do
97
- book1 = Book.open(@simple_file)
98
- book1.excel.calculation = :automatic
99
- book1.excel.calculation.should == :automatic
100
- book1.excel.Calculation.should == -4105
101
- end
102
-
103
- it "should set the calculation mode to manual" do
104
- book1 = Book.open(@simple_file)
105
- book1.excel.calculation = :manual
106
- book1.excel.calculation.should == :manual
107
- book1.excel.Calculation.should == -4135
108
- end
109
-
110
- it "should change the calculation mode from manual to automatic" do
111
- book1 = Book.open(@simple_file, :visible => true)
112
- excel1 = Excel.current(:calculation => :automatic)
113
- book2 = Book.open(@different_file, :visible => true)
114
- book2.excel.Calculation.should == -4105
115
- book1.excel.Calculation.should == -4105
116
- end
117
- end
118
-
119
-
120
- context "with causing warning dead excel without window handle" do
121
-
122
- it "combined" do
123
- Excel.kill_all
124
- book1 = Book.open(@simple_file, :visible => true)
125
- book2 = Book.open(@different_file)
126
- Excel.kill_all
127
- #sleep 1
128
- book3 = Book.open(@another_simple_file)
129
- end
130
-
131
- end
132
-
133
- context "with class identifier 'Workbook'" do
134
-
135
- before do
136
- @book = Workbook.open(@simple_file)
137
- end
138
-
139
- after do
140
- @book.close rescue nil
141
- end
142
-
143
- it "should open in a new Excel" do
144
- book2 = Workbook.open(@simple_file, :force => {:excel => :new})
145
- book2.should be_alive
146
- book2.should be_a Book
147
- book2.excel.should_not == @book.excel
148
- book2.should_not == @book
149
- @book.Readonly.should be_false
150
- book2.Readonly.should be_true
151
- book2.close
152
- end
153
- end
154
-
155
- context "lift a workbook to a Book object" do
156
-
157
- before do
158
- @book = Book.open(@simple_file)
159
- end
160
-
161
- after do
162
- @book.close
163
- end
164
-
165
- it "should fetch the workbook" do
166
- workbook = @book.ole_workbook
167
- new_book = Book.new(workbook)
168
- new_book.should be_a Book
169
- new_book.should be_alive
170
- new_book.should == @book
171
- new_book.filename.should == @book.filename
172
- new_book.excel.should == @book.excel
173
- new_book.excel.Visible.should be_false
174
- new_book.excel.DisplayAlerts.should be_false
175
- new_book.should === @book
176
- new_book.close
177
- end
178
-
179
- it "should fetch the workbook" do
180
- workbook = @book.ole_workbook
181
- new_book = Book.new(workbook, :visible => true)
182
- new_book.should be_a Book
183
- new_book.should be_alive
184
- new_book.should == @book
185
- new_book.filename.should == @book.filename
186
- new_book.excel.should == @book.excel
187
- new_book.excel.Visible.should be_true
188
- new_book.excel.DisplayAlerts.should be_true
189
- new_book.should === @book
190
- new_book.close
191
- end
192
-
193
- it "should yield an identical Book and set visible value" do
194
- workbook = @book.ole_workbook
195
- new_book = Book.new(workbook, :visible => true)
196
- new_book.excel.displayalerts = true
197
- new_book.should be_a Book
198
- new_book.should be_alive
199
- new_book.should == @book
200
- new_book.filename.should == @book.filename
201
- new_book.excel.should == @book.excel
202
- new_book.should === @book
203
- new_book.excel.Visible.should be_true
204
- new_book.excel.DisplayAlerts.should be_true
205
- new_book.close
206
- end
207
-
208
- end
209
-
210
- context "with standard options" do
211
- before do
212
- @book = Book.open(@simple_file)
213
- end
214
-
215
- after do
216
- @book.close
217
- end
218
-
219
- it "should say that it lives" do
220
- @book.should be_alive
221
- end
222
- end
223
-
224
- context "with identity transperence" do
225
-
226
- before do
227
- @book = Book.open(@simple_file1)
228
- end
229
-
230
- after do
231
- @book.close
232
- end
233
-
234
- it "should yield identical Book objects for identical Excel books" do
235
- book2 = Book.open(@simple_file1)
236
- book2.should === @book
237
- book2.close
238
- end
239
-
240
- it "should yield different Book objects for different Excel books" do
241
- book2 = Book.open(@different_file)
242
- book2.should_not === @book
243
- book2.close
244
- end
245
-
246
- it "should yield different Book objects when opened the same file in different Excel instances" do
247
- book2 = Book.open(@simple_file, :force => {:excel => :new})
248
- book2.should_not === @book
249
- book2.close
250
- end
251
-
252
- it "should yield identical Book objects for identical Excel books when reopening" do
253
- @book.should be_alive
254
- @book.close
255
- @book.should_not be_alive
256
- book2 = Book.open(@simple_file1)
257
- book2.should === @book
258
- book2.should be_alive
259
- book2.close
260
- end
261
-
262
- it "should yield identical Book objects when reopening and the Excel is closed" do
263
- @book.should be_alive
264
- @book.close
265
- Excel.close_all
266
- book2 = Book.open(@simple_file1)
267
- book2.should be_alive
268
- book2.should === @book
269
- book2.close
270
- end
271
-
272
- it "should yield different Book objects when reopening in a new Excel" do
273
- @book.should be_alive
274
- old_excel = @book.excel
275
- @book.close
276
- @book.should_not be_alive
277
- book2 = Book.open(@simple_file1, :force => {:excel => :new})
278
- book2.should_not === @book
279
- book2.should be_alive
280
- book2.excel.should_not == old_excel
281
- book2.close
282
- end
283
-
284
- it "should yield different Book objects when reopening in a new given Excel instance" do
285
- old_excel = @book.excel
286
- new_excel = Excel.new(:reuse => false)
287
- @book.close
288
- @book.should_not be_alive
289
- book2 = Book.open(@simple_file1, :force => {:excel => new_excel})
290
- #@book.should be_alive
291
- #book2.should === @book
292
- book2.should be_alive
293
- book2.excel.should == new_excel
294
- book2.excel.should_not == old_excel
295
- book2.close
296
- @book.reopen
297
- @book.should be_alive
298
- end
299
-
300
- it "should yield identical Book objects when reopening in the old excel" do
301
- old_excel = @book.excel
302
- new_excel = Excel.new(:reuse => false)
303
- @book.close
304
- @book.should_not be_alive
305
- book2 = Book.open(@simple_file1, :force => {:excel => old_excel})
306
- book2.should === @book
307
- book2.should be_alive
308
- book2.excel.should == old_excel
309
- @book.should be_alive
310
- book2.close
311
- end
312
-
313
- end
314
-
315
- context "with abbrevations" do
316
-
317
- before do
318
- @book = Book.open(@simple_file1)
319
- end
320
-
321
- after do
322
- @book.close rescue nil
323
- end
324
-
325
- it "should work as force" do
326
- book2 = Book.open(@another_simple_file, :excel => :new)
327
- book2.excel.should_not == @book.excel
328
- book3 = Book.open(@different_file, :excel => book2.excel)
329
- book3.excel.should == book2.excel
330
- end
331
-
332
- it "should work with abbrevation of force and excel" do
333
- book2 = Book.open(@another_simple_file, :f => {:e => :new})
334
- book2.excel.should_not == @book.excel
335
- book3 = Book.open(@different_file, :f => {:e => book2.excel})
336
- book3.excel.should == book2.excel
337
- end
338
-
339
- it "should work with abbrevation of force" do
340
- book2 = Book.open(@another_simple_file, :f => {:excel => :new})
341
- book2.excel.should_not == @book.excel
342
- book3 = Book.open(@different_file, :f => {:excel => book2.excel})
343
- book3.excel.should == book2.excel
344
- end
345
-
346
- it "should work with abbrevation of force" do
347
- book2 = Book.open(@another_simple_file, :force => {:e => :new})
348
- book2.excel.should_not == @book.excel
349
- book3 = Book.open(@different_file, :force => {:e => book2.excel})
350
- book3.excel.should == book2.excel
351
- end
352
-
353
- it "should open in a given Excel provided as Excel, Book, or WIN32OLE representing an Excel or Workbook" do
354
- book2 = Book.open(@another_simple_file)
355
- book3 = Book.open(@different_file)
356
- book3 = Book.open(@simple_file1, :excel => book2.excel)
357
- book3.excel.should === book2.excel
358
- book4 = Book.open(@simple_file1, :excel => @book)
359
- book4.excel.should === @book.excel
360
- book3.close
361
- book4.close
362
- book5 = Book.open(@simple_file1, :excel => book2.ole_workbook)
363
- book5.excel.should === book2.excel
364
- win32ole_excel1 = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
365
- book6 = Book.open(@simple_file1, :excel => win32ole_excel1)
366
- book6.excel.should === @book.excel
367
- end
368
-
369
- it "should use abbreviations of default" do
370
- book2 = Book.open(@simple_file1, :d => {:excel => :current})
371
- book2.excel.should == @book.excel
372
- end
373
-
374
- it "should use abbreviations of default" do
375
- book2 = Book.open(@simple_file1, :d => {:e => :current})
376
- book2.excel.should == @book.excel
377
- end
378
-
379
- it "should use abbreviations of default" do
380
- book2 = Book.open(@simple_file1, :default => {:e => :current})
381
- book2.excel.should == @book.excel
382
- end
383
-
384
- it "should reopen the book in the Excel where it was opened most recently" do
385
- excel1 = @book.excel
386
- excel2 = Excel.new(:reuse => false)
387
- @book.close
388
- book2 = Book.open(@simple_file1, :d => {:e => :current})
389
- book2.excel.should == excel1
390
- book2.close
391
- book3 = Book.open(@simple_file1, :e => excel2)
392
- book3.close
393
- book3 = Book.open(@simple_file1, :d => {:e => :current})
394
- book3.excel.should == excel2
395
- book3.close
396
- end
397
-
398
- end
399
-
400
- context "with :force => {:excel}" do
401
-
402
- before do
403
- @book = Book.open(@simple_file1)
404
- end
405
-
406
- after do
407
- @book.close rescue nil
408
- end
409
-
410
- it "should open in a given Excel provided as Excel, Book, or WIN32OLE representing an Excel or Workbook" do
411
- book2 = Book.open(@another_simple_file)
412
- book3 = Book.open(@different_file)
413
- book3 = Book.open(@simple_file1, :force => {:excel => book2.excel})
414
- book3.excel.should === book2.excel
415
- book4 = Book.open(@simple_file1, :force => {:excel => @book})
416
- book4.excel.should === @book.excel
417
- book3.close
418
- book4.close
419
- book5 = Book.open(@simple_file1, :force => {:excel => book2.ole_workbook})
420
- book5.excel.should === book2.excel
421
- win32ole_excel1 = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
422
- book6 = Book.open(@simple_file1, :force => {:excel => win32ole_excel1})
423
- book6.excel.should === @book.excel
424
- end
425
-
426
- it "should open in a new Excel" do
427
- book2 = Book.open(@simple_file1, :force => {:excel => :new})
428
- book2.should be_alive
429
- book2.should be_a Book
430
- book2.excel.should_not == @book.excel
431
- book2.should_not == @book
432
- @book.Readonly.should be_false
433
- book2.Readonly.should be_true
434
- book2.close
435
- end
436
-
437
- it "should open in a given Excel, not provide identity transparency, because old book readonly, new book writable" do
438
- book2 = Book.open(@simple_file1, :force => {:excel => :new})
439
- book2.excel.should_not == @book.excel
440
- book3 = Book.open(@simple_file1, :force => {:excel => :new})
441
- book3.excel.should_not == book2.excel
442
- book3.excel.should_not == @book.excel
443
- book2.close
444
- book4 = Book.open(@simple_file1, :force => {:excel => book2.excel})
445
- book4.should be_alive
446
- book4.should be_a Book
447
- book4.excel.should == book2.excel
448
- #book4.Readonly.should == true
449
- book4.should_not == book2
450
- book4.close
451
- book5 = Book.open(@simple_file1, :force => {:excel => book2})
452
- book5.should be_alive
453
- book5.should be_a Book
454
- book5.excel.should == book2.excel
455
- #book5.Readonly.should == true
456
- book5.should_not == book2
457
- book5.close
458
- book3.close
459
- end
460
-
461
- it "should open in a given Excel, provide identity transparency, because book can be readonly, such that the old and the new book are readonly" do
462
- book2 = Book.open(@simple_file1, :force => {:excel => :new})
463
- book2.excel.should_not == @book.excel
464
- book3 = Book.open(@simple_file1, :force => {:excel => :new})
465
- book3.excel.should_not == book2.excel
466
- book3.excel.should_not == @book.excel
467
- book2.close
468
- book3.close
469
- @book.close
470
- book4 = Book.open(@simple_file1, :force => {:excel => book2.excel}, :read_only => true)
471
- book4.should be_alive
472
- book4.should be_a Book
473
- book4.excel.should == book2.excel
474
- book4.ReadOnly.should be_true
475
- book4.should == book2
476
- book4.close
477
- book5 = Book.open(@simple_file1, :force => {:excel => book2}, :read_only => true)
478
- book5.should be_alive
479
- book5.should be_a Book
480
- book5.excel.should == book2.excel
481
- book5.ReadOnly.should be_true
482
- book5.should == book2
483
- book5.close
484
- book3.close
485
- end
486
-
487
- it "should open in a given Excel, provide identity transparency, because book can be readonly, such that the old and the new book are readonly" do
488
- book2 = Book.open(@simple_file1, :force => {:excel => :new})
489
- book2.excel.should_not == @book.excel
490
- book2.close
491
- @book.close
492
- book4 = Book.open(@simple_file1, :force => {:excel => book2}, :read_only => true)
493
- book4.should be_alive
494
- book4.should be_a Book
495
- book4.excel.should == book2.excel
496
- book4.ReadOnly.should be_true
497
- book4.should == book2
498
- book4.close
499
- end
500
-
501
- it "should raise an error if no Excel or Book is given" do
502
- expect{
503
- Book.open(@simple_file1, :force => {:excel => :b})
504
- }.to raise_error(TypeREOError, "given object is neither an Excel, a Workbook, nor a Win32ole")
505
- end
506
-
507
- it "should do force_excel even if both force_ and default_excel is given" do
508
- book2 = Book.open(@simple_file1, :default => {:excel => @book.excel}, :force => {:excel => :new})
509
- book2.should be_alive
510
- book2.should be_a Book
511
- book2.excel.should_not == @book.excel
512
- book2.should_not == @book
513
- end
514
-
515
- it "should do default_excel if force_excel is nil" do
516
- book2 = Book.open(@another_simple_file, :force => {:excel => nil})
517
- book2.should be_alive
518
- book2.should be_a Book
519
- book2.excel.should == @book.excel
520
- end
521
-
522
- it "should force_excel with :reuse" do
523
- book2 = Book.open(@different_file, :force => {:excel => :current})
524
- book2.should be_alive
525
- book2.should be_a Book
526
- book2.excel.should == @book.excel
527
- end
528
-
529
- it "should force_excel with :reuse even if :default_excel says sth. else" do
530
- book2 = Book.open(@different_file, :force => {:excel => :current}, :default => {:excel => :new})
531
- book2.should be_alive
532
- book2.should be_a Book
533
- book2.excel.should == @book.excel
534
- end
535
-
536
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
537
- excel2 = Excel.new(:reuse => false)
538
- @book.excel.close
539
- book2 = Book.open(@simple_file1, :force => {:excel => :current}, :default => {:excel => :new})
540
- book2.should be_alive
541
- book2.should be_a Book
542
- book2.excel.should === excel2
543
- end
544
-
545
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
546
- book2 = Book.open(@different_file1, :force => {:excel => :new})
547
- book2.excel.close
548
- book3 = Book.open(@different_file1, :force => {:excel => :current}, :default => {:excel => :new})
549
- book3.should be_alive
550
- book3.should be_a Book
551
- book3.excel.should == @book.excel
552
- end
553
-
554
- end
555
-
556
-
557
- context "with :force_excel" do
558
-
559
- before do
560
- @book = Book.open(@simple_file1)
561
- end
562
-
563
- after do
564
- @book.close rescue nil
565
- end
566
-
567
- it "should open in a given Excel provided as Excel, Book, or WIN32OLE representing an Excel or Workbook" do
568
- book2 = Book.open(@another_simple_file)
569
- book3 = Book.open(@different_file)
570
- book3 = Book.open(@simple_file1, :force_excel => book2.excel)
571
- book3.excel.should === book2.excel
572
- book4 = Book.open(@simple_file1, :force_excel => @book)
573
- book4.excel.should === @book.excel
574
- book3.close
575
- book4.close
576
- book5 = Book.open(@simple_file1, :force_excel => book2.ole_workbook)
577
- book5.excel.should === book2.excel
578
- win32ole_excel1 = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
579
- book6 = Book.open(@simple_file1, :force_excel => win32ole_excel1)
580
- book6.excel.should === @book.excel
581
- end
582
-
583
-
584
- it "should open in a new Excel" do
585
- book2 = Book.open(@simple_file1, :force_excel => :new)
586
- book2.should be_alive
587
- book2.should be_a Book
588
- book2.excel.should_not == @book.excel
589
- book2.should_not == @book
590
- @book.Readonly.should be_false
591
- book2.Readonly.should be_true
592
- book2.close
593
- end
594
-
595
- it "should open in a given Excel, not provide identity transparency, because old book readonly, new book writable" do
596
- book2 = Book.open(@simple_file1, :force_excel => :new)
597
- book2.excel.should_not == @book.excel
598
- book3 = Book.open(@simple_file1, :force_excel => :new)
599
- book3.excel.should_not == book2.excel
600
- book3.excel.should_not == @book.excel
601
- book2.close
602
- book4 = Book.open(@simple_file1, :force_excel => book2.excel)
603
- book4.should be_alive
604
- book4.should be_a Book
605
- book4.excel.should == book2.excel
606
- #book4.Readonly.should == false
607
- book4.should_not == book2
608
- book4.close
609
- book5 = Book.open(@simple_file1, :force_excel => book2)
610
- book5.should be_alive
611
- book5.should be_a Book
612
- book5.excel.should == book2.excel
613
- #book5.Readonly.should == false
614
- book5.should_not == book2
615
- book5.close
616
- book3.close
617
- end
618
-
619
- it "should open in a given Excel, provide identity transparency, because book can be readonly, such that the old and the new book are readonly" do
620
- book2 = Book.open(@simple_file1, :force_excel => :new)
621
- book2.excel.should_not == @book.excel
622
- book3 = Book.open(@simple_file1, :force_excel => :new)
623
- book3.excel.should_not == book2.excel
624
- book3.excel.should_not == @book.excel
625
- book2.close
626
- book3.close
627
- @book.close
628
- book4 = Book.open(@simple_file1, :force_excel => book2.excel, :read_only => true)
629
- book4.should be_alive
630
- book4.should be_a Book
631
- book4.excel.should == book2.excel
632
- book4.ReadOnly.should be_true
633
- book4.should == book2
634
- book4.close
635
- book5 = Book.open(@simple_file1, :force_excel => book2, :read_only => true)
636
- book5.should be_alive
637
- book5.should be_a Book
638
- book5.excel.should == book2.excel
639
- book5.ReadOnly.should be_true
640
- book5.should == book2
641
- book5.close
642
- book3.close
643
- end
644
-
645
- it "should open in a given Excel, provide identity transparency, because book can be readonly, such that the old and the new book are readonly" do
646
- book2 = Book.open(@simple_file1, :force_excel => :new)
647
- book2.excel.should_not == @book.excel
648
- book2.close
649
- @book.close
650
- book4 = Book.open(@simple_file1, :force_excel => book2, :read_only => true)
651
- book4.should be_alive
652
- book4.should be_a Book
653
- book4.excel.should == book2.excel
654
- book4.ReadOnly.should be_true
655
- book4.should == book2
656
- book4.close
657
- end
658
-
659
- it "should raise an error if no Excel or Book is given" do
660
- expect{
661
- Book.open(@simple_file1, :force_excel => :b)
662
- }.to raise_error(TypeREOError, "given object is neither an Excel, a Workbook, nor a Win32ole")
663
- end
664
-
665
- it "should do force_excel even if both force_ and default_excel is given" do
666
- book2 = Book.open(@simple_file1, :default_excel => @book.excel, :force_excel => :new)
667
- book2.should be_alive
668
- book2.should be_a Book
669
- book2.excel.should_not == @book.excel
670
- book2.should_not == @book
671
- end
672
-
673
- it "should do default_excel if force_excel is nil" do
674
- book2 = Book.open(@another_simple_file, :force_excel => nil)
675
- book2.should be_alive
676
- book2.should be_a Book
677
- book2.excel.should == @book.excel
678
- end
679
-
680
- it "should force_excel with :reuse" do
681
- book2 = Book.open(@different_file, :force_excel => :current)
682
- book2.should be_alive
683
- book2.should be_a Book
684
- book2.excel.should == @book.excel
685
- end
686
-
687
- it "should force_excel with :reuse even if :default_excel says sth. else" do
688
- book2 = Book.open(@different_file, :force_excel => :current, :default_excel => :new)
689
- book2.should be_alive
690
- book2.should be_a Book
691
- book2.excel.should == @book.excel
692
- end
693
-
694
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
695
- excel2 = Excel.new(:reuse => false)
696
- @book.excel.close
697
- book2 = Book.open(@simple_file1, :force_excel => :current, :default_excel => :new)
698
- book2.should be_alive
699
- book2.should be_a Book
700
- book2.excel.should === excel2
701
- end
702
-
703
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
704
- book2 = Book.open(@different_file1, :force_excel => :new)
705
- book2.excel.close
706
- book3 = Book.open(@different_file1, :force_excel => :current, :default_excel => :new)
707
- book3.should be_alive
708
- book3.should be_a Book
709
- book3.excel.should == @book.excel
710
- end
711
-
712
- end
713
-
714
- context "with :default => {:excel}" do
715
-
716
- before do
717
- @book = Book.open(@simple_file1, :visible => true)
718
- end
719
-
720
- after do
721
- @book.close rescue nil
722
- end
723
-
724
- it "should use the open book" do
725
- book2 = Book.open(@simple_file1, :default => {:excel => :current})
726
- book2.excel.should == @book.excel
727
- book2.should be_alive
728
- book2.should be_a Book
729
- book2.should == @book
730
- book2.close
731
- end
732
-
733
- it "should reopen the book in the excel instance where it was opened before" do
734
- excel = Excel.new(:reuse => false)
735
- @book.close
736
- book2 = Book.open(@simple_file1)
737
- book2.should be_alive
738
- book2.should be_a Book
739
- book2.excel.should == @book.excel
740
- book2.excel.should_not == excel
741
- book2.filename.should == @book.filename
742
- @book.should be_alive
743
- book2.should == @book
744
- book2.close
745
- end
746
-
747
- it "should reopen a book in a new Excel if all Excel instances are closed" do
748
- excel = Excel.new(:reuse => false)
749
- excel2 = @book.excel
750
- fn = @book.filename
751
- @book.close
752
- Excel.close_all
753
- book2 = Book.open(@simple_file1, :default => {:excel => :current})
754
- book2.should be_alive
755
- book2.should be_a Book
756
- book2.filename.should == fn
757
- @book.should be_alive
758
- book2.should == @book
759
- book2.close
760
- end
761
-
762
- it "should reopen a book in the first opened Excel if the old Excel is closed" do
763
- excel = @book.excel
764
- Excel.close_all
765
- new_excel = Excel.new(:reuse => false)
766
- new_excel2 = Excel.new(:reuse => false)
767
- book2 = Book.open(@simple_file1, :default => {:excel => :current})
768
- book2.should be_alive
769
- book2.should be_a Book
770
- book2.excel.should_not == excel
771
- book2.excel.should_not == new_excel2
772
- book2.excel.should == new_excel
773
- @book.should be_alive
774
- book2.should == @book
775
- book2.close
776
- end
777
-
778
- it "should reopen a book in the first opened excel, if the book cannot be reopened" do
779
- @book.close
780
- Excel.close_all
781
- excel1 = Excel.new(:reuse => false)
782
- excel2 = Excel.new(:reuse => false)
783
- book2 = Book.open(@different_file, :default => {:excel => :current})
784
- book2.should be_alive
785
- book2.should be_a Book
786
- book2.excel.should == excel1
787
- book2.excel.should_not == excel2
788
- book2.close
789
- end
790
-
791
- it "should reopen the book in the Excel where it was opened most recently" do
792
- excel1 = @book.excel
793
- excel2 = Excel.new(:reuse => false)
794
- @book.close
795
- book2 = Book.open(@simple_file1, :default => {:excel => :current})
796
- book2.excel.should == excel1
797
- book2.close
798
- book3 = Book.open(@simple_file1, :force => {:excel => excel2})
799
- book3.close
800
- book3 = Book.open(@simple_file1, :default => {:excel => :current})
801
- book3.excel.should == excel2
802
- book3.close
803
- end
804
-
805
- it "should reopen a book in the excel instance where it was opened most recently" do
806
- book2 = Book.open(@simple_file, :force => {:excel => :new})
807
- @book.close
808
- book2.close
809
- book3 = Book.open(@simple_file1)
810
- book2.should be_alive
811
- book2.should be_a Book
812
- book3.excel.should == book2.excel
813
- book3.excel.should_not == @book.excel
814
- book3.should == book2
815
- book3.should_not == @book
816
- end
817
-
818
- it "should open the book in a new excel if the book was not opened before" do
819
- book2 = Book.open(@different_file, :default => {:excel => :current})
820
- book2.excel.should == @book.excel
821
- book3 = Book.open(@another_simple_file, :default => {:excel => :new})
822
- book3.excel.should_not == @book.excel
823
- end
824
-
825
- it "should open the book in a new excel if the book was opened before but the excel has been closed" do
826
- excel = @book.excel
827
- excel2 = Excel.new(:reuse => false)
828
- excel.close
829
- book2 = Book.open(@simple_file1, :default => {:excel => :new})
830
- book2.excel.should_not == excel2
831
- book2.close
832
- end
833
-
834
- it "should open the book in a given excel if the book was not opened before" do
835
- book2 = Book.open(@different_file, :default => {:excel => :current})
836
- book2.excel.should == @book.excel
837
- excel = Excel.new(:reuse => false)
838
- book3 = Book.open(@another_simple_file, :default => {:excel => excel})
839
- book3.excel.should == excel
840
- end
841
-
842
- it "should open the book in a given excel if the book was opened before but the excel has been closed" do
843
- excel2 = Excel.new(:reuse => false, :visible => true)
844
- @book.excel.close
845
- book2 = Book.open(@simple_file1, :default => {:excel => excel2, :visible => true})
846
- book2.excel.should == excel2
847
- end
848
-
849
- it "should open a new excel, if the book cannot be reopened" do
850
- @book.close
851
- new_excel = Excel.new(:reuse => false)
852
- book2 = Book.open(@different_file, :default => {:excel => :new})
853
- book2.should be_alive
854
- book2.should be_a Book
855
- book2.excel.should_not == new_excel
856
- book2.excel.should_not == @book.excel
857
- book2.close
858
- end
859
-
860
- it "should open a given excel, if the book cannot be reopened" do
861
- @book.close
862
- new_excel = Excel.new(:reuse => false)
863
- book2 = Book.open(@different_file, :default => {:excel => @book.excel})
864
- book2.should be_alive
865
- book2.should be_a Book
866
- book2.excel.should_not == new_excel
867
- book2.excel.should == @book.excel
868
- book2.close
869
- end
870
-
871
- it "should open a given excel, if the book cannot be reopened" do
872
- @book.close
873
- new_excel = Excel.new(:reuse => false)
874
- book2 = Book.open(@different_file, :default => {:excel => @book})
875
- book2.should be_alive
876
- book2.should be_a Book
877
- book2.excel.should_not == new_excel
878
- book2.excel.should == @book.excel
879
- book2.close
880
- end
881
-
882
- it "should reuse an open book by default" do
883
- book2 = Book.open(@simple_file1)
884
- book2.excel.should == @book.excel
885
- book2.should == @book
886
- end
887
-
888
- it "should raise an error if no Excel or Book is given" do
889
- expect{
890
- Book.open(@different_file, :default => {:excel => :a})
891
- }.to raise_error(TypeREOError, "given object is neither an Excel, a Workbook, nor a Win32ole")
892
- end
893
-
894
- end
895
-
896
- context "with :default_excel" do
897
-
898
- before do
899
- @book = Book.open(@simple_file1, :visible => true)
900
- end
901
-
902
- after do
903
- @book.close rescue nil
904
- end
905
-
906
- it "should use the open book" do
907
- book2 = Book.open(@simple_file1, :default_excel => :current)
908
- book2.excel.should == @book.excel
909
- book2.should be_alive
910
- book2.should be_a Book
911
- book2.should == @book
912
- book2.close
913
- end
914
-
915
- it "should reopen the book in the excel instance where it was opened before" do
916
- excel = Excel.new(:reuse => false)
917
- @book.close
918
- book2 = Book.open(@simple_file1)
919
- book2.should be_alive
920
- book2.should be_a Book
921
- book2.excel.should == @book.excel
922
- book2.excel.should_not == excel
923
- book2.filename.should == @book.filename
924
- @book.should be_alive
925
- book2.should == @book
926
- book2.close
927
- end
928
-
929
- it "should reopen a book in a new Excel if all Excel instances are closed" do
930
- excel = Excel.new(:reuse => false)
931
- excel2 = @book.excel
932
- fn = @book.filename
933
- @book.close
934
- Excel.close_all
935
- book2 = Book.open(@simple_file1, :default_excel => :current)
936
- book2.should be_alive
937
- book2.should be_a Book
938
- book2.filename.should == fn
939
- @book.should be_alive
940
- book2.should == @book
941
- book2.close
942
- end
943
-
944
- it "should reopen a book in the first opened Excel if the old Excel is closed" do
945
- excel = @book.excel
946
- Excel.close_all
947
- new_excel = Excel.new(:reuse => false)
948
- new_excel2 = Excel.new(:reuse => false)
949
- book2 = Book.open(@simple_file1, :default_excel => :current)
950
- book2.should be_alive
951
- book2.should be_a Book
952
- book2.excel.should_not == excel
953
- book2.excel.should_not == new_excel2
954
- book2.excel.should == new_excel
955
- @book.should be_alive
956
- book2.should == @book
957
- book2.close
958
- end
959
-
960
- it "should reopen a book in the first opened excel, if the book cannot be reopened" do
961
- @book.close
962
- Excel.close_all
963
- excel1 = Excel.new(:reuse => false)
964
- excel2 = Excel.new(:reuse => false)
965
- book2 = Book.open(@different_file, :default_excel => :current)
966
- book2.should be_alive
967
- book2.should be_a Book
968
- book2.excel.should == excel1
969
- book2.excel.should_not == excel2
970
- book2.close
971
- end
972
-
973
- it "should reopen the book in the Excel where it was opened most recently" do
974
- excel1 = @book.excel
975
- excel2 = Excel.new(:reuse => false)
976
- @book.close
977
- book2 = Book.open(@simple_file1, :default_excel => :current)
978
- book2.excel.should == excel1
979
- book2.close
980
- book3 = Book.open(@simple_file1, :force_excel => excel2)
981
- book3.close
982
- book3 = Book.open(@simple_file1, :default_excel => :current)
983
- book3.excel.should == excel2
984
- book3.close
985
- end
986
-
987
- it "should reopen a book in the excel instance where it was opened most recently" do
988
- book2 = Book.open(@simple_file, :force_excel => :new)
989
- @book.close
990
- book2.close
991
- book3 = Book.open(@simple_file1)
992
- book2.should be_alive
993
- book2.should be_a Book
994
- book3.excel.should == book2.excel
995
- book3.excel.should_not == @book.excel
996
- book3.should == book2
997
- book3.should_not == @book
998
- end
999
-
1000
- it "should open the book in a new excel if the book was not opened before" do
1001
- book2 = Book.open(@different_file, :default_excel => :current)
1002
- book2.excel.should == @book.excel
1003
- book3 = Book.open(@another_simple_file, :default_excel => :new)
1004
- book3.excel.should_not == @book.excel
1005
- end
1006
-
1007
- it "should open the book in a new excel if the book was opened before but the excel has been closed" do
1008
- excel = @book.excel
1009
- excel2 = Excel.new(:reuse => false)
1010
- excel.close
1011
- book2 = Book.open(@simple_file1, :default_excel => :new)
1012
- book2.excel.should_not == excel2
1013
- book2.close
1014
- end
1015
-
1016
- it "should open the book in a given excel if the book was not opened before" do
1017
- book2 = Book.open(@different_file, :default_excel => :current)
1018
- book2.excel.should == @book.excel
1019
- excel = Excel.new(:reuse => false)
1020
- book3 = Book.open(@another_simple_file, :default_excel => excel)
1021
- book3.excel.should == excel
1022
- end
1023
-
1024
- it "should open the book in a given excel if the book was opened before but the excel has been closed" do
1025
- excel2 = Excel.new(:reuse => false, :visible => true)
1026
- @book.excel.close
1027
- book2 = Book.open(@simple_file1, :visible => true, :default_excel => excel2)
1028
- book2.excel.should == excel2
1029
- end
1030
-
1031
- it "should open a new excel, if the book cannot be reopened" do
1032
- @book.close
1033
- new_excel = Excel.new(:reuse => false)
1034
- book2 = Book.open(@different_file, :default_excel => :new)
1035
- book2.should be_alive
1036
- book2.should be_a Book
1037
- book2.excel.should_not == new_excel
1038
- book2.excel.should_not == @book.excel
1039
- book2.close
1040
- end
1041
-
1042
- it "should open a given excel, if the book cannot be reopened" do
1043
- @book.close
1044
- new_excel = Excel.new(:reuse => false)
1045
- book2 = Book.open(@different_file, :default_excel => @book.excel)
1046
- book2.should be_alive
1047
- book2.should be_a Book
1048
- book2.excel.should_not == new_excel
1049
- book2.excel.should == @book.excel
1050
- book2.close
1051
- end
1052
-
1053
- it "should open a given excel, if the book cannot be reopened" do
1054
- @book.close
1055
- new_excel = Excel.new(:reuse => false)
1056
- book2 = Book.open(@different_file, :default_excel => @book)
1057
- book2.should be_alive
1058
- book2.should be_a Book
1059
- book2.excel.should_not == new_excel
1060
- book2.excel.should == @book.excel
1061
- book2.close
1062
- end
1063
-
1064
- it "should reuse an open book by default" do
1065
- book2 = Book.open(@simple_file1)
1066
- book2.excel.should == @book.excel
1067
- book2.should == @book
1068
- end
1069
-
1070
- it "should raise an error if no Excel or Book is given" do
1071
- expect{
1072
- Book.open(@different_file, :default_excel => :a)
1073
- }.to raise_error(TypeREOError, "given object is neither an Excel, a Workbook, nor a Win32ole")
1074
- end
1075
-
1076
- end
1077
-
1078
- context "with :active instead of :current" do
1079
-
1080
- before do
1081
- @book = Book.open(@simple_file1)
1082
- end
1083
-
1084
- after do
1085
- @book.close rescue nil
1086
- end
1087
-
1088
- it "should force_excel with :active" do
1089
- book2 = Book.open(@different_file, :force => {:excel => :active})
1090
- book2.should be_alive
1091
- book2.should be_a Book
1092
- book2.excel.should == @book.excel
1093
- end
1094
-
1095
- it "should force_excel with :reuse even if :default_excel says sth. else" do
1096
- book2 = Book.open(@different_file, :force => {:excel => :active}, :default => {:excel => :new})
1097
- book2.should be_alive
1098
- book2.should be_a Book
1099
- book2.excel.should == @book.excel
1100
- end
1101
-
1102
- it "should open force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
1103
- excel2 = Excel.new(:reuse => false)
1104
- @book.excel.close
1105
- book2 = Book.open(@simple_file1, :force => {:excel => :active}, :default => {:excel => :new})
1106
- book2.should be_alive
1107
- book2.should be_a Book
1108
- book2.excel.should === excel2
1109
- end
1110
-
1111
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
1112
- book2 = Book.open(@different_file1, :force => {:excel => :new})
1113
- book2.excel.close
1114
- book3 = Book.open(@different_file1, :force => {:excel => :active}, :default => {:excel => :new})
1115
- book3.should be_alive
1116
- book3.should be_a Book
1117
- book3.excel.should == @book.excel
1118
- end
1119
-
1120
- it "should use the open book" do
1121
- book2 = Book.open(@simple_file1, :default => {:excel => :active})
1122
- book2.excel.should == @book.excel
1123
- book2.should be_alive
1124
- book2.should be_a Book
1125
- book2.should == @book
1126
- book2.close
1127
- end
1128
-
1129
- it "should reopen a book in a new Excel if all Excel instances are closed" do
1130
- excel = Excel.new(:reuse => false)
1131
- excel2 = @book.excel
1132
- fn = @book.filename
1133
- @book.close
1134
- Excel.close_all
1135
- book2 = Book.open(@simple_file1, :default => {:excel => :active})
1136
- book2.should be_alive
1137
- book2.should be_a Book
1138
- book2.filename.should == fn
1139
- @book.should be_alive
1140
- book2.should == @book
1141
- book2.close
1142
- end
1143
-
1144
- it "should reopen a book in the first opened Excel if the old Excel is closed" do
1145
- excel = @book.excel
1146
- Excel.close_all
1147
- new_excel = Excel.new(:reuse => false)
1148
- new_excel2 = Excel.new(:reuse => false)
1149
- book2 = Book.open(@simple_file1, :default => {:excel => :active})
1150
- book2.should be_alive
1151
- book2.should be_a Book
1152
- book2.excel.should_not == excel
1153
- book2.excel.should_not == new_excel2
1154
- book2.excel.should == new_excel
1155
- @book.should be_alive
1156
- book2.should == @book
1157
- book2.close
1158
- end
1159
-
1160
- it "should reopen a book in the first opened excel, if the book cannot be reopened" do
1161
- @book.close
1162
- Excel.close_all
1163
- excel1 = Excel.new(:reuse => false)
1164
- excel2 = Excel.new(:reuse => false)
1165
- book2 = Book.open(@different_file, :default => {:excel => :active})
1166
- book2.should be_alive
1167
- book2.should be_a Book
1168
- book2.excel.should == excel1
1169
- book2.excel.should_not == excel2
1170
- book2.close
1171
- end
1172
-
1173
- it "should reopen the book in the Excel where it was opened most recently" do
1174
- excel1 = @book.excel
1175
- excel2 = Excel.new(:reuse => false)
1176
- @book.close
1177
- book2 = Book.open(@simple_file1, :default => {:excel => :active})
1178
- book2.excel.should == excel1
1179
- book2.close
1180
- book3 = Book.open(@simple_file1, :force => {:excel => excel2})
1181
- book3.close
1182
- book3 = Book.open(@simple_file1, :default => {:excel => :active})
1183
- book3.excel.should == excel2
1184
- book3.close
1185
- end
1186
-
1187
- end
1188
-
1189
- context "with :reuse instead of :current" do
1190
-
1191
- before do
1192
- @book = Book.open(@simple_file1)
1193
- end
1194
-
1195
- after do
1196
- @book.close rescue nil
1197
- end
1198
-
1199
- it "should force_excel with :reuse" do
1200
- book2 = Book.open(@different_file, :force => {:excel => :reuse})
1201
- book2.should be_alive
1202
- book2.should be_a Book
1203
- book2.excel.should == @book.excel
1204
- end
1205
-
1206
- it "should force_excel with :reuse even if :default_excel says sth. else" do
1207
- book2 = Book.open(@different_file, :force => {:excel => :reuse}, :default => {:excel => :new})
1208
- book2.should be_alive
1209
- book2.should be_a Book
1210
- book2.excel.should == @book.excel
1211
- end
1212
-
1213
- it "should open force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
1214
- excel2 = Excel.new(:reuse => false)
1215
- @book.excel.close
1216
- book2 = Book.open(@simple_file1, :force => {:excel => :reuse}, :default => {:excel => :new})
1217
- book2.should be_alive
1218
- book2.should be_a Book
1219
- book2.excel.should === excel2
1220
- end
1221
-
1222
- it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
1223
- book2 = Book.open(@different_file1, :force => {:excel => :new})
1224
- book2.excel.close
1225
- book3 = Book.open(@different_file1, :force => {:excel => :reuse}, :default => {:excel => :new})
1226
- book3.should be_alive
1227
- book3.should be_a Book
1228
- book3.excel.should == @book.excel
1229
- end
1230
-
1231
- it "should use the open book" do
1232
- book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
1233
- book2.excel.should == @book.excel
1234
- book2.should be_alive
1235
- book2.should be_a Book
1236
- book2.should == @book
1237
- book2.close
1238
- end
1239
-
1240
- it "should reopen a book in a new Excel if all Excel instances are closed" do
1241
- excel = Excel.new(:reuse => false)
1242
- excel2 = @book.excel
1243
- fn = @book.filename
1244
- @book.close
1245
- Excel.close_all
1246
- book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
1247
- book2.should be_alive
1248
- book2.should be_a Book
1249
- book2.filename.should == fn
1250
- @book.should be_alive
1251
- book2.should == @book
1252
- book2.close
1253
- end
1254
-
1255
- it "should reopen a book in the first opened Excel if the old Excel is closed" do
1256
- excel = @book.excel
1257
- Excel.close_all
1258
- new_excel = Excel.new(:reuse => false)
1259
- new_excel2 = Excel.new(:reuse => false)
1260
- book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
1261
- book2.should be_alive
1262
- book2.should be_a Book
1263
- book2.excel.should_not == excel
1264
- book2.excel.should_not == new_excel2
1265
- book2.excel.should == new_excel
1266
- @book.should be_alive
1267
- book2.should == @book
1268
- book2.close
1269
- end
1270
-
1271
- it "should reopen a book in the first opened excel, if the book cannot be reopened" do
1272
- @book.close
1273
- Excel.close_all
1274
- excel1 = Excel.new(:reuse => false)
1275
- excel2 = Excel.new(:reuse => false)
1276
- book2 = Book.open(@different_file, :default => {:excel => :reuse})
1277
- book2.should be_alive
1278
- book2.should be_a Book
1279
- book2.excel.should == excel1
1280
- book2.excel.should_not == excel2
1281
- book2.close
1282
- end
1283
-
1284
- it "should reopen the book in the Excel where it was opened most recently" do
1285
- excel1 = @book.excel
1286
- excel2 = Excel.new(:reuse => false)
1287
- @book.close
1288
- book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
1289
- book2.excel.should == excel1
1290
- book2.close
1291
- book3 = Book.open(@simple_file1, :force => {:excel => excel2})
1292
- book3.close
1293
- book3 = Book.open(@simple_file1, :default => {:excel => :reuse})
1294
- book3.excel.should == excel2
1295
- book3.close
1296
- end
1297
-
1298
- end
1299
-
1300
- it "should new_excel" do
1301
- book = Book.open(@simple_file1)
1302
- puts "book:#{book.inspect}"
1303
- book.sheet(1)[1,1].Value = "f"
1304
- book.Saved.should be_false
1305
- book2 = Book.open(@simple_file1, :if_unsaved => :new_excel)
1306
- puts "book2: #{book2.inspect}"
1307
- end
1308
-
1309
- context "with :if_unsaved" do
1310
-
1311
- before do
1312
- @book = Book.open(@simple_file1)
1313
- sheet = @book.sheet(1)
1314
- #@book.add_sheet(@sheet, :as => 'a_name')
1315
- @old_value = sheet[1,1].Value
1316
- sheet[1,1] = (sheet[1,1].value == "foo" ? "bar" : "foo")
1317
- @new_value = sheet[1,1].Value
1318
- @book.Saved.should be_false
1319
- end
1320
-
1321
- after do
1322
- @book.close(:if_unsaved => :forget)
1323
- end
1324
-
1325
- it "should open the book in a new excel instance, if :if_unsaved is :new_excel" do
1326
- new_book = Book.open(@simple_file1, :if_unsaved => :new_excel)
1327
- new_book.excel.should_not == @book.excel
1328
- @book.should be_alive
1329
- @book.Saved.should be_false
1330
- new_book.should be_alive
1331
- new_book.Saved.should be_true
1332
- new_book.sheet(1)[1,1].Value.should == @old_value
1333
- #new_book.filename.should == @book.filename
1334
- new_book.excel.should_not == @book.excel
1335
- new_book.close
1336
- end
1337
-
1338
- it "should raise an error, if :if_unsaved is :raise" do
1339
- expect {
1340
- new_book = Book.open(@simple_file1, :if_unsaved => :raise)
1341
- }.to raise_error(WorkbookNotSaved, /workbook is already open but not saved: "workbook.xls"/)
1342
- end
1343
-
1344
- it "should let the book open, if :if_unsaved is :accept" do
1345
- new_book = Book.open(@simple_file1, :if_unsaved => :accept)
1346
- @book.should be_alive
1347
- new_book.should be_alive
1348
- new_book.Saved.should be_false
1349
- @book.Saved.should be_false
1350
- new_book.sheet(1)[1,1].Value.should == @new_value
1351
- new_book.should == @book
1352
- end
1353
-
1354
- it "should open book and close old book, if :if_unsaved is :forget" do
1355
- new_book = Book.open(@simple_file1, :if_unsaved => :forget)
1356
- @book.should_not be_alive
1357
- new_book.should be_alive
1358
- new_book.Saved.should be_true
1359
- new_book.sheet(1)[1,1].Value.should == @old_value
1360
- #@new_book.filename.downcase.should == @simple_file.downcase
1361
- end
1362
-
1363
- context "with :if_unsaved => :alert" do
1364
- before do
1365
- @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Office Excel" ' , "w"
1366
- end
1367
-
1368
- after do
1369
- @key_sender.close
1370
- end
1371
-
1372
- it "should open the new book and close the unsaved book, if user answers 'yes'" do
1373
- # "Yes" is the default. --> language independent
1374
- @key_sender.puts "{enter}"
1375
- new_book = Book.open(@simple_file1, :if_unsaved => :alert)
1376
- new_book.should be_alive
1377
- #@book.should_not be_alive
1378
- #new_book.filename.downcase.should == @simple_file.downcase
1379
- new_book.Saved.should be_true
1380
- new_book.sheet(1)[1,1].Value.should == @old_value
1381
- end
1382
- end
1383
- =begin
1384
- # only for Excel2007:
1385
- it "should not open the new book and not close the unsaved book, if user answers 'no'" do
1386
- # "No" is right to "Yes" (the default). --> language independent
1387
- # strangely, in the "no" case, the question will sometimes be repeated three times
1388
- #@book.excel.Visible = true
1389
- @key_sender.puts "{right}{enter}"
1390
- @key_sender.puts "{right}{enter}"
1391
- @key_sender.puts "{right}{enter}"
1392
- expect{
1393
- Book.open(@simple_file1, :if_unsaved => :alert)
1394
- }.to raise_error(ExcelREOError, "user canceled or runtime error")
1395
- @book.should be_alive
1396
- end
1397
-
1398
- =end
1399
-
1400
- context "with :if_unsaved => :excel" do
1401
- before do
1402
- @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Office Excel" ' , "w"
1403
- end
1404
-
1405
- after do
1406
- @key_sender.close
1407
- end
1408
-
1409
- it "should open the new book and close the unsaved book, if user answers 'yes'" do
1410
- # "Yes" is the default. --> language independent
1411
- @key_sender.puts "{enter}"
1412
- new_book = Book.open(@simple_file1, :if_unsaved => :excel)
1413
- new_book.should be_alive
1414
- #@book.should_not be_alive
1415
- new_book.Saved.should be_true
1416
- new_book.sheet(1)[1,1].Value.should == @old_value
1417
- end
1418
-
1419
- =begin
1420
- it "should not open the new book and not close the unsaved book, if user answers 'no'" do
1421
- # "No" is right to "Yes" (the default). --> language independent
1422
- # strangely, in the "no" case, the question will sometimes be repeated three times
1423
- #@book.excel.Visible = true
1424
- @key_sender.puts "{right}{enter}"
1425
- @key_sender.puts "{right}{enter}"
1426
- @key_sender.puts "{right}{enter}"
1427
- expect{
1428
- Book.open(@simple_file1, :if_unsaved => :excel)
1429
- }.to raise_error(ExcelREOError, "user canceled or runtime error")
1430
- @book.should be_alive
1431
- end
1432
- =end
1433
-
1434
- end
1435
-
1436
- it "should raise an error, if :if_unsaved is default" do
1437
- expect {
1438
- new_book = Book.open(@simple_file1, :if_unsaved => :raise)
1439
- }.to raise_error(WorkbookNotSaved, /workbook is already open but not saved: "workbook.xls"/)
1440
- end
1441
-
1442
- it "should raise an error, if :if_unsaved is invalid option" do
1443
- expect {
1444
- new_book = Book.open(@simple_file1, :if_unsaved => :invalid_option)
1445
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option")
1446
- end
1447
- end
1448
-
1449
- context "with :if_obstructed" do
1450
-
1451
- for i in 1..2 do
1452
-
1453
- context "with and without reopen" do
1454
-
1455
- before do
1456
- if i == 1 then
1457
- book_before = Book.open(@simple_file1)
1458
- book_before.close
1459
- end
1460
- @book = Book.open(@simple_file_other_path1)
1461
- #@book.Windows(@book.Name).Visible = true
1462
- #@sheet_count = @book.ole_workbook.Worksheets.Count
1463
- sheet = @book.sheet(1)
1464
- #@book.add_sheet(@sheet, :as => 'a_name')
1465
- @old_value = sheet[1,1].Value
1466
- sheet[1,1] = (sheet[1,1].value == "foo" ? "bar" : "foo")
1467
- @new_value = sheet[1,1].Value
1468
- @book.Saved.should be_false
1469
- end
1470
-
1471
- after do
1472
- @book.close(:if_unsaved => :forget)
1473
- #@new_book.close rescue nil
1474
- end
1475
-
1476
- it "should raise an error, if :if_obstructed is :raise" do
1477
- expect {
1478
- new_book = Book.open(@simple_file1, :if_obstructed => :raise)
1479
- }.to raise_error(WorkbookBlocked, /blocked by a workbook with the same name in a different path/)
1480
- end
1481
-
1482
- it "should close the other book and open the new book, if :if_obstructed is :forget" do
1483
- new_book = Book.open(@simple_file1, :if_obstructed => :forget)
1484
- @book.should_not be_alive
1485
- new_book.should be_alive
1486
- new_book.filename.downcase.should == @simple_file.downcase
1487
- old_book = Book.open(@simple_file_other_path1, :if_obstructed => :forget)
1488
- old_book.sheet(1)[1,1].Value.should == @old_value
1489
- end
1490
-
1491
- it "should save the old book, close it, and open the new book, if :if_obstructed is :save" do
1492
- new_book = Book.open(@simple_file1, :if_obstructed => :save)
1493
- @book.should_not be_alive
1494
- new_book.should be_alive
1495
- new_book.filename.downcase.should == @simple_file1.downcase
1496
- old_book = Book.open(@simple_file_other_path1, :if_obstructed => :forget)
1497
- old_book.sheet(1)[1,1].Value.should == @new_value
1498
- #old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
1499
- old_book.close
1500
- end
1501
-
1502
- it "should raise an error, if the old book is unsaved, and close the old book and open the new book,
1503
- if :if_obstructed is :close_if_saved" do
1504
- expect{
1505
- new_book = Book.open(@simple_file1, :if_obstructed => :close_if_saved)
1506
- }.to raise_error(WorkbookBlocked, /workbook with the same name in a different path is unsaved/)
1507
- @book.save
1508
- new_book = Book.open(@simple_file1, :if_obstructed => :close_if_saved)
1509
- @book.should_not be_alive
1510
- new_book.should be_alive
1511
- new_book.filename.downcase.should == @simple_file1.downcase
1512
- old_book = Book.open(@simple_file_other_path1, :if_obstructed => :forget)
1513
- old_book.sheet(1)[1,1].Value.should == @new_value
1514
- #old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
1515
- old_book.close
1516
- end
1517
-
1518
- it "should close the old book and open the new book, if :if_obstructed is :close_if_saved" do
1519
- @book.close(:if_unsaved => :forget)
1520
- book = Book.open(@simple_file_other_path)
1521
- book2 = Book.open(@simple_file1, :if_obstructed => :close_if_saved)
1522
- end
1523
-
1524
- it "should open the book in a new excel instance, if :if_obstructed is :new_excel" do
1525
- new_book = Book.open(@simple_file1, :if_obstructed => :new_excel)
1526
- @book.should be_alive
1527
- @book.Saved.should be_false
1528
- @book.sheet(1)[1,1].Value.should == @new_value
1529
- new_book.should be_alive
1530
- new_book.filename.should_not == @book.filename
1531
- new_book.excel.should_not == @book.excel
1532
- new_book.sheet(1)[1,1].Value.should == @old_value
1533
- end
1534
-
1535
- it "should raise an error, if :if_obstructed is default" do
1536
- expect {
1537
- new_book = Book.open(@simple_file1)
1538
- }.to raise_error(WorkbookBlocked, /blocked by a workbook with the same name in a different path/)
1539
- end
1540
-
1541
- it "should raise an error, if :if_obstructed is invalid option" do
1542
- expect {
1543
- new_book = Book.open(@simple_file1, :if_obstructed => :invalid_option)
1544
- }.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid_option")
1545
- end
1546
- end
1547
- end
1548
- end
1549
-
1550
- context "with an already saved book" do
1551
- before do
1552
- @book = Book.open(@simple_file)
1553
- end
1554
-
1555
- after do
1556
- @book.close
1557
- end
1558
-
1559
- possible_options = [:read_only, :raise, :accept, :forget, nil]
1560
- possible_options.each do |options_value|
1561
- context "with :if_unsaved => #{options_value} and in the same and different path" do
1562
- before do
1563
- @new_book = Book.open(@simple_file1, :reuse => true, :if_unsaved => options_value)
1564
- @different_book = Book.open(@different_file, :reuse => true, :if_unsaved => options_value)
1565
- end
1566
- after do
1567
- @new_book.close
1568
- @different_book.close
1569
- end
1570
- it "should open without problems " do
1571
- @new_book.should be_a Book
1572
- @different_book.should be_a Book
1573
- end
1574
- it "should belong to the same Excel instance" do
1575
- @new_book.excel.should == @book.excel
1576
- @different_book.excel.should == @book.excel
1577
- end
1578
- end
1579
- end
1580
- end
1581
-
1582
- context "with non-existing file" do
1583
-
1584
- it "should raise error if filename is nil" do
1585
- expect{
1586
- Book.open(@nonexisting)
1587
- }.to raise_error(FileNameNotGiven, "filename is nil")
1588
- end
1589
-
1590
- it "should raise error if file is a directory" do
1591
- expect{
1592
- Book.open(@dir)
1593
- }.to raise_error(FileNotFound, "file #{General::absolute_path(@dir).gsub("/","\\").inspect} is a directory")
1594
- end
1595
-
1596
- it "should raise error if file does not exist" do
1597
- File.delete @simple_save_file rescue nil
1598
- expect {
1599
- Book.open(@simple_save_file, :if_absent => :raise)
1600
- }.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found")
1601
- end
1602
-
1603
- it "should create a workbook" do
1604
- File.delete @simple_save_file rescue nil
1605
- book = Book.open(@simple_save_file, :if_absent => :create)
1606
- book.should be_a Book
1607
- book.close
1608
- File.exist?(@simple_save_file).should be_true
1609
- end
1610
-
1611
- it "should raise an exception by default" do
1612
- File.delete @simple_save_file rescue nil
1613
- expect {
1614
- Book.open(@simple_save_file)
1615
- }.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found")
1616
- end
1617
-
1618
- end
1619
-
1620
- context "with attr_reader excel" do
1621
-
1622
- before do
1623
- @new_book = Book.open(@simple_file)
1624
- end
1625
- after do
1626
- @new_book.close
1627
- end
1628
- it "should provide the excel instance of the book" do
1629
- excel = @new_book.excel
1630
- excel.class.should == Excel
1631
- excel.should be_a Excel
1632
- end
1633
- end
1634
-
1635
- =begin
1636
- # work in progress
1637
- context "with :update_links" do
1638
-
1639
- it "should set update_links to :alert" do
1640
- book = Book.open(@simple_file, :update_links => :alert)
1641
- book.UpdateLinks.should == XlUpdateLinksUserSetting
1642
- book.Saved.should be_true
1643
- end
1644
-
1645
- it "should set update_links to :never" do
1646
- book = Book.open(@simple_file, :update_links => :never)
1647
- book.UpdateLinks.should == XlUpdateLinksNever
1648
- book = Book.open(@simple_file, :update_links => :foo)
1649
- book.UpdateLinks.should == XlUpdateLinksNever
1650
- end
1651
-
1652
- it "should set update_links to :always" do
1653
- book = Book.open(@simple_file, :update_links => :always)
1654
- book.UpdateLinks.should == XlUpdateLinksAlways
1655
- end
1656
-
1657
- it "should set update_links to :never per default" do
1658
- book = Book.open(@simple_file)
1659
- book.UpdateLinks.should == XlUpdateLinksNever
1660
- end
1661
-
1662
- end
1663
- =end
1664
-
1665
- context "with :read_only" do
1666
-
1667
- it "should reopen the book with writable (unsaved changes from readonly will not be saved)" do
1668
- book = Book.open(@simple_file1, :read_only => true)
1669
- book.ReadOnly.should be_true
1670
- book.should be_alive
1671
- sheet = book.sheet(1)
1672
- old_cell_value = sheet[1,1].value
1673
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1674
- book.Saved.should be_false
1675
- new_book = Book.open(@simple_file1, :read_only => false, :if_unsaved => :accept)
1676
- new_book.ReadOnly.should be_false
1677
- new_book.should be_alive
1678
- book.should be_alive
1679
- new_book.should == book
1680
- new_sheet = new_book.sheet(1)
1681
- new_cell_value = new_sheet[1,1].value
1682
- new_cell_value.should == old_cell_value
1683
- end
1684
-
1685
- it "should not raise an error when trying to reopen the book as read_only while the writable book had unsaved changes" do
1686
- book = Book.open(@simple_file1, :read_only => false)
1687
- book.ReadOnly.should be_false
1688
- book.should be_alive
1689
- sheet = book.sheet(1)
1690
- old_cell_value = sheet[1,1].value
1691
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1692
- book.Saved.should be_false
1693
- new_book = Book.open(@simple_file1, :read_only => true, :if_unsaved => :accept)
1694
- new_book.ReadOnly.should be_true
1695
- new_book.Saved.should be_true
1696
- new_book.should == book
1697
- end
1698
-
1699
- it "should reopen the book with writable in the same Excel instance (unsaved changes from readonly will not be saved)" do
1700
- book = Book.open(@simple_file1, :read_only => true)
1701
- book.ReadOnyl.should be_true
1702
- book.should be_alive
1703
- sheet = book.sheet(1)
1704
- old_cell_value = sheet[1,1].value
1705
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1706
- book.Saved.should be_false
1707
- new_book = Book.open(@simple_file1, :if_unsaved => :accept, :force => {:excel => book.excel}, :read_only => false)
1708
- new_book.ReadOnly.should be_false
1709
- new_book.should be_alive
1710
- book.should be_alive
1711
- new_book.should == book
1712
- new_sheet = new_book.sheet(1)
1713
- new_cell_value = new_sheet[1,1].value
1714
- new_cell_value.should == old_cell_value
1715
- end
1716
-
1717
- it "should reopen the book with readonly (unsaved changes of the writable should be saved)" do
1718
- book = Book.open(@simple_file1, :force => {:excel => :new}, :read_only => false)
1719
- book.ReadOnly.should be_false
1720
- book.should be_alive
1721
- sheet = book.sheet(1)
1722
- old_cell_value = sheet[1,1].value
1723
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1724
- book.Saved.should be_false
1725
- new_book = Book.open(@simple_file1, :force => {:excel => book.excel}, :read_only => true, :if_unsaved => :accept)
1726
- new_book.ReadOnly.should be_true
1727
- new_book.Saved.should be_true
1728
- new_book.should == book
1729
- new_sheet = new_book.sheet(1)
1730
- new_cell_value = new_sheet[1,1].value
1731
- new_cell_value.should_not == old_cell_value
1732
- end
1733
-
1734
- it "should open the second book in another Excel as writable" do
1735
- book = Book.open(@simple_file1, :read_only => true)
1736
- book.ReadOnly.should be_true
1737
- new_book = Book.open(@simple_file1, :force => {:excel => :new}, :read_only => false)
1738
- new_book.ReadOnly.should be_false
1739
- new_book.close
1740
- book.close
1741
- end
1742
-
1743
- it "should be able to save, if :read_only => false" do
1744
- book = Book.open(@simple_file1, :read_only => false)
1745
- book.should be_a Book
1746
- expect {
1747
- book.save_as(@simple_save_file, :if_exists => :overwrite)
1748
- }.to_not raise_error
1749
- book.close
1750
- end
1751
-
1752
- it "should be able to save, if :read_only is default" do
1753
- book = Book.open(@simple_file1)
1754
- book.should be_a Book
1755
- expect {
1756
- book.save_as(@simple_save_file, :if_exists => :overwrite)
1757
- }.to_not raise_error
1758
- book.close
1759
- end
1760
-
1761
- it "should raise an error, if :read_only => true" do
1762
- book = Book.open(@simple_file, :read_only => true)
1763
- book.should be_a Book
1764
- expect {
1765
- book.save_as(@simple_save_file, :if_exists => :overwrite)
1766
- }.to raise_error
1767
- book.close
1768
- end
1769
- end
1770
-
1771
- context "with various file formats" do
1772
-
1773
- it "should open linked workbook" do
1774
- book = Book.open(@linked_file, :visible => true)
1775
- book.close
1776
- end
1777
-
1778
- it "should open xlsm file" do
1779
- book = Book.open(@simple_file_xlsm, :visible => true)
1780
- book.close
1781
- end
1782
-
1783
- it "should open xlsx file" do
1784
- book = Book.open(@simple_file_xlsx, :visible => true)
1785
- book.close
1786
- end
1787
- end
1788
-
1789
-
1790
- context "with block" do
1791
- it 'block parameter should be instance of Book' do
1792
- Book.open(@simple_file) do |book|
1793
- book.should be_a Book
1794
- end
1795
- end
1796
- end
1797
-
1798
- context "with WIN32OLE#GetAbsolutePathName" do
1799
- it "'~' should be HOME directory" do
1800
- path = '~/Abrakadabra.xlsx'
1801
- expected_path = Regexp.new(File.expand_path(path).gsub(/\//, "."))
1802
- expect {
1803
- Book.open(path)
1804
- }.to raise_error(FileNotFound, "file #{General::absolute_path(path).gsub("/","\\").inspect} not found")
1805
- end
1806
- end
1807
- end
1808
-
1809
- describe "reopen" do
1810
-
1811
- context "with standard" do
1812
-
1813
- before do
1814
- @book = Book.open(@simple_file)
1815
- end
1816
-
1817
- after do
1818
- @book.close
1819
- end
1820
-
1821
- it "should reopen the closed book" do
1822
- @book.should be_alive
1823
- book1 = @book
1824
- @book.close
1825
- @book.should_not be_alive
1826
- @book.reopen
1827
- @book.should be_a Book
1828
- @book.should be_alive
1829
- @book.should === book1
1830
- end
1831
- end
1832
- end
1833
-
1834
- describe "uplifting" do
1835
-
1836
- context "with standard" do
1837
-
1838
- before do
1839
- @book = Book.open(@simple_file)
1840
- end
1841
-
1842
- after do
1843
- @book.close
1844
- end
1845
-
1846
- it "should uplift a workbook to a book with an open book" do
1847
- workbook = @book.ole_workbook
1848
- book1 = Book.new(workbook)
1849
- book1.should be_a Book
1850
- book1.should be_alive
1851
- book1.should == @book
1852
- end
1853
- end
1854
- end
1855
- end