robust_excel_ole 1.0 → 1.0.1

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.
@@ -47,11 +47,239 @@ describe Book do
47
47
  end
48
48
  end
49
49
 
50
+ describe "with retain_saved" do
51
+
52
+ before do
53
+ @book = Book.open(@simple_file)
54
+ end
55
+
56
+ after do
57
+ @book.close(:if_unsaved => :forget)
58
+ end
59
+
60
+ it "should keep the save state 'saved' with empty assignments" do
61
+ @book.Saved.should be_true
62
+ @book.retain_saved do
63
+ end
64
+ @book.Saved.should be_true
65
+ end
66
+
67
+ it "should keep the save state 'saved' with non-affecting assignments" do
68
+ @book.Saved.should be_true
69
+ @book.retain_saved do
70
+ sheet = @book.sheet(1)
71
+ a = sheet[1,1]
72
+ b = @book.visible
73
+ end
74
+ @book.Saved.should be_true
75
+ end
76
+
77
+ it "should keep the save state 'unsaved'" do
78
+ sheet = @book.sheet(1)
79
+ sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
80
+ @book.Saved.should be_false
81
+ @book.retain_saved do
82
+ sheet = @book.sheet(1)
83
+ a = sheet[1,1]
84
+ b = @book.visible
85
+ end
86
+ @book.Saved.should be_false
87
+ end
88
+
89
+ it "should keep the save state 'saved'" do
90
+ @book.Saved.should be_true
91
+ @book.retain_saved do
92
+ sheet = @book.sheet(1)
93
+ sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
94
+ @book.Saved.should be_false
95
+ end
96
+ @book.Saved.should be_true
97
+ end
98
+
99
+ it "should keep the save state 'unsaved' even when the workbook was saved before" do
100
+ sheet = @book.sheet(1)
101
+ sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
102
+ @book.Saved.should be_false
103
+ @book.retain_saved do
104
+ @book.save
105
+ @book.Saved.should be_true
106
+ end
107
+ @book.Saved.should be_false
108
+ end
109
+ end
110
+
111
+ describe "default-visible" do
112
+
113
+ it "should keep the visibility of the open workbook" do
114
+ book1 = Book.open(@simple_file1)
115
+ book1.excel.Visible.should be_false
116
+ book1.Windows(book1.Name).Visible.should be_true
117
+ book1.visible.should be_false
118
+ book2 = Book.open(@simple_file1, :default => {:visible => true})
119
+ book2.visible.should be_false
120
+ book2.excel.Visible.should be_false
121
+ book2.Windows(book2.Name).Visible.should be_true
122
+ book1.visible.should be_false
123
+ book2 = Book.open(@simple_file1, :default => {:visible => false})
124
+ book2.visible.should be_false
125
+ book2.excel.Visible.should be_false
126
+ book2.Windows(book2.Name).Visible.should be_true
127
+ book1.visible.should be_false
128
+ end
129
+
130
+ it "should keep the visibility of the open workbook per default" do
131
+ book1 = Book.open(@simple_file1)
132
+ book1.excel.Visible.should be_false
133
+ book1.Windows(book1.Name).Visible.should be_true
134
+ book1.visible.should be_false
135
+ book2 = Book.open(@simple_file1)
136
+ book2.visible.should be_false
137
+ book2.excel.Visible.should be_false
138
+ book2.Windows(book2.Name).Visible.should be_true
139
+ book1.visible.should be_false
140
+ end
141
+
142
+ it "should keep the found Excel instance invisible" do
143
+ book1 = Book.open(@simple_file1)
144
+ excel1 = book1.excel
145
+ excel1.Visible.should be_false
146
+ book1.close
147
+ book2 = Book.open(@simple_file1, :default => {:visible => true})
148
+ excel2 = book2.excel
149
+ excel2.should == excel1
150
+ excel2.Visible.should be_false
151
+ book2.Windows(book2.Name).Visible.should be_true
152
+ end
153
+
154
+ it "should keep the found Excel instance invisible with default invisible" do
155
+ book1 = Book.open(@simple_file1)
156
+ excel1 = book1.excel
157
+ excel1.Visible.should be_false
158
+ book1.close
159
+ book2 = Book.open(@simple_file1, :default => {:visible => false})
160
+ excel2 = book1.excel
161
+ excel2.should == excel1
162
+ excel2.Visible.should be_false
163
+ book2.Windows(book2.Name).Visible.should be_false
164
+ end
165
+
166
+ it "should keep the found Excel instance visible" do
167
+ book1 = Book.open(@simple_file1, :visible => true)
168
+ excel1 = book1.excel
169
+ book1.Windows(book1.Name).Visible.should be_true
170
+ excel1.Visible.should be_true
171
+ book1.close
172
+ book2 = Book.open(@simple_file1, :default => {:visible => false})
173
+ excel2 = book1.excel
174
+ excel2.should == excel1
175
+ excel2.Visible.should be_true
176
+ book2.Windows(book2.Name).Visible.should be_false
177
+ end
178
+
179
+ it "should keep the found Excel instance visible with default visible true" do
180
+ book1 = Book.open(@simple_file1, :visible => true)
181
+ excel1 = book1.excel
182
+ book1.Windows(book1.Name).Visible.should be_true
183
+ excel1.Visible.should be_true
184
+ book1.close
185
+ book2 = Book.open(@simple_file1, :default => {:visible => true})
186
+ excel2 = book1.excel
187
+ excel2.should == excel1
188
+ excel2.Visible.should be_true
189
+ book2.Windows(book2.Name).Visible.should be_true
190
+ end
191
+
192
+ it "should keep the found Excel instance invisible per default" do
193
+ book1 = Book.open(@simple_file1)
194
+ excel1 = book1.excel
195
+ excel1.Visible.should be_false
196
+ book1.close
197
+ book2 = Book.open(@simple_file1)
198
+ excel2 = book1.excel
199
+ excel2.should == excel1
200
+ excel2.Visible.should be_false
201
+ book2.Windows(book2.Name).Visible.should be_true
202
+ end
203
+
204
+ it "should open the workbook visible if the workbook is new" do
205
+ book1 = Book.open(@simple_file1, :default => {:visible => true})
206
+ book1.visible.should be_true
207
+ book1.excel.Visible.should be_true
208
+ book1.Windows(book1.Name).Visible.should be_true
209
+ end
210
+
211
+ it "should open the workbook invisible if the workbook is new" do
212
+ book1 = Book.open(@simple_file1, :default => {:visible => false})
213
+ book1.visible.should be_false
214
+ book1.excel.Visible.should be_false
215
+ book1.Windows(book1.Name).Visible.should be_false
216
+ end
217
+
218
+ it "should open the workbook invisible per default if the workbook is new" do
219
+ book1 = Book.open(@simple_file1)
220
+ book1.visible.should be_false
221
+ book1.excel.Visible.should be_false
222
+ book1.Windows(book1.Name).Visible.should be_true
223
+ end
224
+
225
+ it "should open the workbook visible if the old Excel is closed" do
226
+ book1 = Book.open(@simple_file1)
227
+ book1.visible.should be_false
228
+ excel1 = book1.excel
229
+ excel1.Visible.should be_false
230
+ book1.Windows(book1.Name).Visible.should be_true
231
+ book1.close
232
+ excel1.close
233
+ book2 = Book.open(@simple_file1, :default => {:visible => true})
234
+ excel2 = book2.excel
235
+ book2.visible.should be_true
236
+ excel2.Visible.should be_true
237
+ book1.Windows(book1.Name).Visible.should be_true
238
+ end
239
+
240
+ it "should open the workbook invisible if the old Excel is closed" do
241
+ book1 = Book.open(@simple_file1, :default => {:visible => true})
242
+ book1.visible.should be_true
243
+ excel1 = book1.excel
244
+ excel1.Visible.should be_true
245
+ book1.Windows(book1.Name).Visible.should be_true
246
+ book1.close
247
+ excel1.close
248
+ book2 = Book.open(@simple_file1, :default => {:visible => false})
249
+ excel2 = book2.excel
250
+ book2.visible.should be_false
251
+ excel2.Visible.should be_false
252
+ book1.Windows(book1.Name).Visible.should be_false
253
+ end
254
+
255
+ end
256
+
257
+ describe "force-visible" do
258
+
259
+ it "should change the visibility of the workbooks" do
260
+ book1 = Book.open(@simple_file)
261
+ book1.excel.Visible.should be_false
262
+ book1.Windows(book1.Name).Visible.should be_true
263
+ book1.visible.should be_false
264
+ book2 = Book.open(@simple_file, :visible => true)
265
+ book2.visible.should be_true
266
+ book2.excel.Visible.should be_true
267
+ book2.Windows(book2.Name).Visible.should be_true
268
+ book1.visible.should be_true
269
+ book2 = Book.open(@simple_file, :visible => false)
270
+ book2.visible.should be_false
271
+ book2.excel.Visible.should be_true
272
+ book2.Windows(book2.Name).Visible.should be_false
273
+ book1.visible.should be_false
274
+ book1.Windows(book2.Name).Visible.should be_false
275
+ end
276
+ end
277
+
50
278
  describe "with visible" do
51
279
 
52
280
  it "should adapt its default value at the visible value of the Excel" do
53
281
  excel1 = Excel.create
54
- excel1.Visible = true
282
+ excel1.visible = true
55
283
  book1 = Book.open(@simple_file)
56
284
  excel1.Visible.should be_true
57
285
  excel1.visible.should be_true
@@ -68,7 +296,7 @@ describe Book do
68
296
  it "should set :visible to false" do
69
297
  book1 = Book.open(@simple_file, :visible => false)
70
298
  book1.excel.Visible.should be_false
71
- book1.Windows(book1.Name).Visible.should be_true
299
+ book1.Windows(book1.Name).Visible.should be_false
72
300
  book1.visible.should be_false
73
301
  end
74
302
 
@@ -87,11 +315,20 @@ describe Book do
87
315
  book1.visible.should be_true
88
316
  end
89
317
 
318
+ it "should preserve :visible" do
319
+ excel1 = Excel.create
320
+ book1 = Book.open(@simple_file)
321
+ book1.excel.Visible.should be_false
322
+ book1.Windows(book1.Name).Visible.should be_true
323
+ book1.visible.should be_false
324
+ end
325
+
326
+
90
327
  it "should preserve :visible if it is set to false" do
91
328
  excel1 = Excel.create
92
329
  book1 = Book.open(@simple_file, :visible => false)
93
330
  book1.excel.Visible.should be_false
94
- book1.Windows(book1.Name).Visible.should be_true
331
+ book1.Windows(book1.Name).Visible.should be_false
95
332
  book1.visible.should be_false
96
333
  end
97
334
 
@@ -142,7 +379,7 @@ describe Book do
142
379
  book1 = Book.open(@simple_file)
143
380
  book2 = Book.open(@different_file, :default_excel => :new, :visible => false)
144
381
  book2.excel.Visible.should be_false
145
- book2.Windows(book2.Name).Visible.should be_true
382
+ book2.Windows(book2.Name).Visible.should be_false
146
383
  book2.visible.should be_false
147
384
  end
148
385
 
@@ -560,7 +797,7 @@ describe Book do
560
797
  excel1 = Excel.new(:reuse => false, :visible => false)
561
798
  book1 = Book.open(@simple_file, :visible => false)
562
799
  excel1.Visible.should be_false
563
- book1.Windows(book1.Name).Visible.should be_true
800
+ book1.Windows(book1.Name).Visible.should be_false
564
801
  book1.visible.should be_false
565
802
  end
566
803
 
@@ -629,7 +866,7 @@ describe Book do
629
866
  excel1 = Excel.new(:reuse => false, :visible => false)
630
867
  book1 = Book.open(@simple_file, :visible => false)
631
868
  excel1.Visible.should be_false
632
- book1.Windows(book1.Name).Visible.should be_true
869
+ book1.Windows(book1.Name).Visible.should be_false
633
870
  book1.visible.should be_false
634
871
  excel1.visible = true
635
872
  book2 = Book.open(@different_file)
@@ -679,7 +916,7 @@ describe Book do
679
916
  @book2.visible = false
680
917
  @book2.Saved.should be_true
681
918
  @book2.excel.Visible.should be_false
682
- @book2.Windows(@book2.Name).Visible.should be_true
919
+ @book2.Windows(@book2.Name).Visible.should be_false
683
920
  @book2.visible.should be_false
684
921
  end
685
922
 
@@ -38,6 +38,103 @@ describe Book do
38
38
 
39
39
  describe "open" do
40
40
 
41
+ context "with calculation mode" do
42
+
43
+ it "should set calculation mode" do
44
+ book1 = Book.open(@simple_file, :visible => true, :calculation => :manual)
45
+ book1.excel.Calculation.should == -4135
46
+ book1.excel.calculation.should == :manual
47
+ book1.save
48
+ book1.excel.close
49
+ book2 = Book.open(@simple_file, :visible => true, :calculation => :automatic)
50
+ book2.excel.Calculation.should == -4105
51
+ book2.excel.calculation.should == :automatic
52
+ book2.save
53
+ book2.excel.close
54
+ end
55
+
56
+ it "should set calculation mode and overwrite Excel calculation mode" do
57
+ excel1 = Excel.new(:calculation => :automatic)
58
+ book1 = Book.open(@simple_file, :visible => true, :calculation => :manual)
59
+ book1.excel.Calculation.should == -4135
60
+ book1.excel.calculation.should == :manual
61
+ book1.save
62
+ book1.excel.close
63
+ excel2 = Excel.new(:calculation => :manual)
64
+ book2 = Book.open(@simple_file, :visible => true, :calculation => :automatic)
65
+ book2.excel.Calculation.should == -4105
66
+ book2.excel.calculation.should == :automatic
67
+ book2.save
68
+ book2.excel.close
69
+ end
70
+
71
+ it "should set calculation mode" do
72
+ excel1 = Excel.new(:calculation => :automatic)
73
+ book1 = Book.open(@simple_file, :visible => true)
74
+ book1.excel.Calculation.should == -4105
75
+ book1.excel.calculation.should == :automatic
76
+ book1.save
77
+ book1.close
78
+ book2 = Book.open(@simple_file, :visible => true, :calculation => :manual)
79
+ book2.excel.Calculation.should == -4135
80
+ book2.excel.calculation.should == :manual
81
+ book2.save
82
+ book2.excel.close
83
+ end
84
+
85
+ it "should not set the default value" do
86
+ book1 = Book.open(@simple_file)
87
+ book1.excel.calculation.should == nil
88
+ end
89
+
90
+ it "should set the default value" do
91
+ book1 = Book.open(@simple_file)
92
+ book1.excel.calculation.should == nil
93
+ end
94
+
95
+ it "should set the calculation mode to automatic" do
96
+ excel = Excel.create(:calculation => :automatic)
97
+ excel.calculation.should == :automatic
98
+ book1 = Book.open(@simple_file)
99
+ book1.excel.Calculation.should == -4105
100
+ end
101
+
102
+ it "should set the calculation mode to manual" do
103
+ excel = Excel.create(:calculation => :manual)
104
+ excel.calculation.should == :manual
105
+ book1 = Book.open(@simple_file)
106
+ excel.calculation.should == :manual
107
+ book1.excel.Calculation.should == -4135
108
+ end
109
+
110
+ it "should set the calculation mode to automatic" do
111
+ excel = Excel.create(:calculation => :automatic)
112
+ excel.calculation.should == :automatic
113
+ book1 = Book.open(@simple_file)
114
+ book1.excel.Calculation.should == -4105
115
+ end
116
+
117
+ it "should change the calculation mode from manual to automatic" do
118
+ book1 = Book.open(@simple_file, :visible => true)
119
+ excel1 = Excel.current(:calculation => :automatic)
120
+ book2 = Book.open(@different_file, :visible => true)
121
+ book2.excel.Calculation.should == -4105
122
+ book1.excel.Calculation.should == -4105
123
+ end
124
+
125
+ it "should change the calculation mode from automatic to manual" do
126
+ excel = Excel.create(:calculation => :automatic)
127
+ book1 = Book.open(@simple_file)
128
+ book1.excel.Calculation.should == -4105
129
+ excel2 = Excel.new(:reuse => false, :calculation => :manual)
130
+ book2 = Book.open(@different_file, :force => {:excel => excel2})
131
+ book2.excel.Calculation.should == -4135
132
+ book1.excel.Calculation.should == -4105
133
+ end
134
+
135
+ end
136
+
137
+
41
138
  context "with causing warning dead excel without window handle" do
42
139
 
43
140
  it "combined" do
@@ -62,7 +159,7 @@ describe Book do
62
159
  end
63
160
 
64
161
  it "should open in a new Excel" do
65
- book2 = Workbook.open(@simple_file, :force_excel => :new)
162
+ book2 = Workbook.open(@simple_file, :force => {:excel => :new})
66
163
  book2.should be_alive
67
164
  book2.should be_a Book
68
165
  book2.excel.should_not == @book.excel
@@ -165,7 +262,7 @@ describe Book do
165
262
  end
166
263
 
167
264
  it "should yield different Book objects when opened the same file in different Excel instances" do
168
- book2 = Book.open(@simple_file, :force_excel => :new)
265
+ book2 = Book.open(@simple_file, :force => {:excel => :new})
169
266
  book2.should_not === @book
170
267
  book2.close
171
268
  end
@@ -195,7 +292,7 @@ describe Book do
195
292
  old_excel = @book.excel
196
293
  @book.close
197
294
  @book.should_not be_alive
198
- book2 = Book.open(@simple_file1, :force_excel => :new)
295
+ book2 = Book.open(@simple_file1, :force => {:excel => :new})
199
296
  book2.should_not === @book
200
297
  book2.should be_alive
201
298
  book2.excel.should_not == old_excel
@@ -207,7 +304,7 @@ describe Book do
207
304
  new_excel = Excel.new(:reuse => false)
208
305
  @book.close
209
306
  @book.should_not be_alive
210
- book2 = Book.open(@simple_file1, :force_excel => new_excel)
307
+ book2 = Book.open(@simple_file1, :force => {:excel => new_excel})
211
308
  book2.should_not === @book
212
309
  book2.should be_alive
213
310
  book2.excel.should == new_excel
@@ -220,7 +317,7 @@ describe Book do
220
317
  new_excel = Excel.new(:reuse => false)
221
318
  @book.close
222
319
  @book.should_not be_alive
223
- book2 = Book.open(@simple_file1, :force_excel => old_excel)
320
+ book2 = Book.open(@simple_file1, :force => {:excel => old_excel})
224
321
  book2.should === @book
225
322
  book2.should be_alive
226
323
  book2.excel.should == old_excel
@@ -230,6 +327,164 @@ describe Book do
230
327
 
231
328
  end
232
329
 
330
+ context "with :force => {:excel}" do
331
+
332
+ before do
333
+ @book = Book.open(@simple_file1)
334
+ end
335
+
336
+ after do
337
+ @book.close rescue nil
338
+ end
339
+
340
+ it "should open in a given Excel provided as Excel, Book, or WIN32OLE representing an Excel or Workbook" do
341
+ book2 = Book.open(@another_simple_file)
342
+ book3 = Book.open(@different_file)
343
+ book3 = Book.open(@simple_file1, :force => {:excel => book2.excel})
344
+ book3.excel.should === book2.excel
345
+ book4 = Book.open(@simple_file1, :force => {:excel => @book})
346
+ book4.excel.should === @book.excel
347
+ book3.close
348
+ book4.close
349
+ book5 = Book.open(@simple_file1, :force => {:excel => book2.ole_workbook})
350
+ book5.excel.should === book2.excel
351
+ win32ole_excel1 = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
352
+ book6 = Book.open(@simple_file1, :force => {:excel => win32ole_excel1})
353
+ book6.excel.should === @book.excel
354
+ end
355
+
356
+
357
+ it "should open in a new Excel" do
358
+ book2 = Book.open(@simple_file1, :force => {:excel => :new})
359
+ book2.should be_alive
360
+ book2.should be_a Book
361
+ book2.excel.should_not == @book.excel
362
+ book2.should_not == @book
363
+ @book.Readonly.should be_false
364
+ book2.Readonly.should be_true
365
+ book2.close
366
+ end
367
+
368
+ it "should open in a given Excel, not provide identity transparency, because old book readonly, new book writable" do
369
+ book2 = Book.open(@simple_file1, :force => {:excel => :new})
370
+ book2.excel.should_not == @book.excel
371
+ book3 = Book.open(@simple_file1, :force => {:excel => :new})
372
+ book3.excel.should_not == book2.excel
373
+ book3.excel.should_not == @book.excel
374
+ book2.close
375
+ book4 = Book.open(@simple_file1, :force => {:excel => book2.excel})
376
+ book4.should be_alive
377
+ book4.should be_a Book
378
+ book4.excel.should == book2.excel
379
+ book4.Readonly.should == true
380
+ book4.should_not == book2
381
+ book4.close
382
+ book5 = Book.open(@simple_file1, :force => {:excel => book2})
383
+ book5.should be_alive
384
+ book5.should be_a Book
385
+ book5.excel.should == book2.excel
386
+ book5.Readonly.should == true
387
+ book5.should_not == book2
388
+ book5.close
389
+ book3.close
390
+ end
391
+
392
+ 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
393
+ book2 = Book.open(@simple_file1, :force => {:excel => :new})
394
+ book2.excel.should_not == @book.excel
395
+ book3 = Book.open(@simple_file1, :force => {:excel => :new})
396
+ book3.excel.should_not == book2.excel
397
+ book3.excel.should_not == @book.excel
398
+ book2.close
399
+ book3.close
400
+ @book.close
401
+ book4 = Book.open(@simple_file1, :force => {:excel => book2.excel}, :read_only => true)
402
+ book4.should be_alive
403
+ book4.should be_a Book
404
+ book4.excel.should == book2.excel
405
+ book4.ReadOnly.should be_true
406
+ book4.should == book2
407
+ book4.close
408
+ book5 = Book.open(@simple_file1, :force => {:excel => book2}, :read_only => true)
409
+ book5.should be_alive
410
+ book5.should be_a Book
411
+ book5.excel.should == book2.excel
412
+ book5.ReadOnly.should be_true
413
+ book5.should == book2
414
+ book5.close
415
+ book3.close
416
+ end
417
+
418
+ 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
419
+ book2 = Book.open(@simple_file1, :force => {:excel => :new})
420
+ book2.excel.should_not == @book.excel
421
+ book2.close
422
+ @book.close
423
+ book4 = Book.open(@simple_file1, :force => {:excel => book2}, :read_only => true)
424
+ book4.should be_alive
425
+ book4.should be_a Book
426
+ book4.excel.should == book2.excel
427
+ book4.ReadOnly.should be_true
428
+ book4.should == book2
429
+ book4.close
430
+ end
431
+
432
+ it "should raise an error if no Excel or Book is given" do
433
+ expect{
434
+ Book.open(@simple_file1, :force => {:excel => :b})
435
+ }.to raise_error(TypeErrorREO, "given object is neither an Excel, a Workbook, nor a Win32ole")
436
+ end
437
+
438
+ it "should do force_excel even if both force_ and default_excel is given" do
439
+ book2 = Book.open(@simple_file1, :default => {:excel => @book.excel}, :force => {:excel => :new})
440
+ book2.should be_alive
441
+ book2.should be_a Book
442
+ book2.excel.should_not == @book.excel
443
+ book2.should_not == @book
444
+ end
445
+
446
+ it "should do default_excel if force_excel is nil" do
447
+ book2 = Book.open(@another_simple_file, :force => {:excel => nil})
448
+ book2.should be_alive
449
+ book2.should be_a Book
450
+ book2.excel.should == @book.excel
451
+ end
452
+
453
+ it "should force_excel with :reuse" do
454
+ book2 = Book.open(@different_file, :force => {:excel => :current})
455
+ book2.should be_alive
456
+ book2.should be_a Book
457
+ book2.excel.should == @book.excel
458
+ end
459
+
460
+ it "should force_excel with :reuse even if :default_excel says sth. else" do
461
+ book2 = Book.open(@different_file, :force => {:excel => :current}, :default => {:excel => :new})
462
+ book2.should be_alive
463
+ book2.should be_a Book
464
+ book2.excel.should == @book.excel
465
+ end
466
+
467
+ it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
468
+ excel2 = Excel.new(:reuse => false)
469
+ @book.excel.close
470
+ book2 = Book.open(@simple_file1, :force => {:excel => :current}, :default => {:excel => :new})
471
+ book2.should be_alive
472
+ book2.should be_a Book
473
+ book2.excel.should === excel2
474
+ end
475
+
476
+ it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
477
+ book2 = Book.open(@different_file1, :force => {:excel => :new})
478
+ book2.excel.close
479
+ book3 = Book.open(@different_file1, :force => {:excel => :current}, :default => {:excel => :new})
480
+ book3.should be_alive
481
+ book3.should be_a Book
482
+ book3.excel.should == @book.excel
483
+ end
484
+
485
+ end
486
+
487
+
233
488
  context "with :force_excel" do
234
489
 
235
490
  before do
@@ -387,6 +642,188 @@ describe Book do
387
642
 
388
643
  end
389
644
 
645
+ context "with :default => {:excel}" do
646
+
647
+ before do
648
+ @book = Book.open(@simple_file1, :visible => true)
649
+ end
650
+
651
+ after do
652
+ @book.close rescue nil
653
+ end
654
+
655
+ it "should use the open book" do
656
+ book2 = Book.open(@simple_file1, :default => {:excel => :current})
657
+ book2.excel.should == @book.excel
658
+ book2.should be_alive
659
+ book2.should be_a Book
660
+ book2.should == @book
661
+ book2.close
662
+ end
663
+
664
+ it "should reopen the book in the excel instance where it was opened before" do
665
+ excel = Excel.new(:reuse => false)
666
+ @book.close
667
+ book2 = Book.open(@simple_file1)
668
+ book2.should be_alive
669
+ book2.should be_a Book
670
+ book2.excel.should == @book.excel
671
+ book2.excel.should_not == excel
672
+ book2.filename.should == @book.filename
673
+ @book.should be_alive
674
+ book2.should == @book
675
+ book2.close
676
+ end
677
+
678
+ it "should reopen a book in a new Excel if all Excel instances are closed" do
679
+ excel = Excel.new(:reuse => false)
680
+ excel2 = @book.excel
681
+ fn = @book.filename
682
+ @book.close
683
+ Excel.close_all
684
+ book2 = Book.open(@simple_file1, :default => {:excel => :current})
685
+ book2.should be_alive
686
+ book2.should be_a Book
687
+ book2.filename.should == fn
688
+ @book.should be_alive
689
+ book2.should == @book
690
+ book2.close
691
+ end
692
+
693
+ it "should reopen a book in the first opened Excel if the old Excel is closed" do
694
+ excel = @book.excel
695
+ Excel.close_all
696
+ new_excel = Excel.new(:reuse => false)
697
+ new_excel2 = Excel.new(:reuse => false)
698
+ book2 = Book.open(@simple_file1, :default => {:excel => :current})
699
+ book2.should be_alive
700
+ book2.should be_a Book
701
+ book2.excel.should_not == excel
702
+ book2.excel.should_not == new_excel2
703
+ book2.excel.should == new_excel
704
+ @book.should be_alive
705
+ book2.should == @book
706
+ book2.close
707
+ end
708
+
709
+ it "should reopen a book in the first opened excel, if the book cannot be reopened" do
710
+ @book.close
711
+ Excel.close_all
712
+ excel1 = Excel.new(:reuse => false)
713
+ excel2 = Excel.new(:reuse => false)
714
+ book2 = Book.open(@different_file, :default => {:excel => :current})
715
+ book2.should be_alive
716
+ book2.should be_a Book
717
+ book2.excel.should == excel1
718
+ book2.excel.should_not == excel2
719
+ book2.close
720
+ end
721
+
722
+ it "should reopen the book in the Excel where it was opened most recently" do
723
+ excel1 = @book.excel
724
+ excel2 = Excel.new(:reuse => false)
725
+ @book.close
726
+ book2 = Book.open(@simple_file1, :default => {:excel => :current})
727
+ book2.excel.should == excel1
728
+ book2.close
729
+ book3 = Book.open(@simple_file1, :force => {:excel => excel2})
730
+ book3.close
731
+ book3 = Book.open(@simple_file1, :default => {:excel => :current})
732
+ book3.excel.should == excel2
733
+ book3.close
734
+ end
735
+
736
+ it "should reopen a book in the excel instance where it was opened most recently" do
737
+ book2 = Book.open(@simple_file, :force => {:excel => :new})
738
+ @book.close
739
+ book2.close
740
+ book3 = Book.open(@simple_file1)
741
+ book2.should be_alive
742
+ book2.should be_a Book
743
+ book3.excel.should == book2.excel
744
+ book3.excel.should_not == @book.excel
745
+ book3.should == book2
746
+ book3.should_not == @book
747
+ end
748
+
749
+ it "should open the book in a new excel if the book was not opened before" do
750
+ book2 = Book.open(@different_file, :default => {:excel => :current})
751
+ book2.excel.should == @book.excel
752
+ book3 = Book.open(@another_simple_file, :default => {:excel => :new})
753
+ book3.excel.should_not == @book.excel
754
+ end
755
+
756
+ it "should open the book in a new excel if the book was opened before but the excel has been closed" do
757
+ excel = @book.excel
758
+ excel2 = Excel.new(:reuse => false)
759
+ excel.close
760
+ book2 = Book.open(@simple_file1, :default => {:excel => :new})
761
+ book2.excel.should_not == excel2
762
+ book2.close
763
+ end
764
+
765
+ it "should open the book in a given excel if the book was not opened before" do
766
+ book2 = Book.open(@different_file, :default => {:excel => :current})
767
+ book2.excel.should == @book.excel
768
+ excel = Excel.new(:reuse => false)
769
+ book3 = Book.open(@another_simple_file, :default => {:excel => excel})
770
+ book3.excel.should == excel
771
+ end
772
+
773
+ it "should open the book in a given excel if the book was opened before but the excel has been closed" do
774
+ excel2 = Excel.new(:reuse => false, :visible => true)
775
+ @book.excel.close
776
+ book2 = Book.open(@simple_file1, :default => {:excel => excel2, :visible => true})
777
+ book2.excel.should == excel2
778
+ end
779
+
780
+ it "should open a new excel, if the book cannot be reopened" do
781
+ @book.close
782
+ new_excel = Excel.new(:reuse => false)
783
+ book2 = Book.open(@different_file, :default => {:excel => :new})
784
+ book2.should be_alive
785
+ book2.should be_a Book
786
+ book2.excel.should_not == new_excel
787
+ book2.excel.should_not == @book.excel
788
+ book2.close
789
+ end
790
+
791
+ it "should open a given excel, if the book cannot be reopened" do
792
+ @book.close
793
+ new_excel = Excel.new(:reuse => false)
794
+ book2 = Book.open(@different_file, :default => {:excel => @book.excel})
795
+ book2.should be_alive
796
+ book2.should be_a Book
797
+ book2.excel.should_not == new_excel
798
+ book2.excel.should == @book.excel
799
+ book2.close
800
+ end
801
+
802
+ it "should open a given excel, if the book cannot be reopened" do
803
+ @book.close
804
+ new_excel = Excel.new(:reuse => false)
805
+ book2 = Book.open(@different_file, :default => {:excel => @book})
806
+ book2.should be_alive
807
+ book2.should be_a Book
808
+ book2.excel.should_not == new_excel
809
+ book2.excel.should == @book.excel
810
+ book2.close
811
+ end
812
+
813
+ it "should reuse an open book by default" do
814
+ book2 = Book.open(@simple_file1)
815
+ book2.excel.should == @book.excel
816
+ book2.should == @book
817
+ end
818
+
819
+ it "should raise an error if no Excel or Book is given" do
820
+ expect{
821
+ Book.open(@different_file, :default => {:excel => :a})
822
+ }.to raise_error(TypeErrorREO, "given object is neither an Excel, a Workbook, nor a Win32ole")
823
+ end
824
+
825
+ end
826
+
390
827
  context "with :default_excel" do
391
828
 
392
829
  before do
@@ -580,14 +1017,14 @@ describe Book do
580
1017
  end
581
1018
 
582
1019
  it "should force_excel with :active" do
583
- book2 = Book.open(@different_file, :force_excel => :active)
1020
+ book2 = Book.open(@different_file, :force => {:excel => :active})
584
1021
  book2.should be_alive
585
1022
  book2.should be_a Book
586
1023
  book2.excel.should == @book.excel
587
1024
  end
588
1025
 
589
1026
  it "should force_excel with :reuse even if :default_excel says sth. else" do
590
- book2 = Book.open(@different_file, :force_excel => :active, :default_excel => :new)
1027
+ book2 = Book.open(@different_file, :force => {:excel => :active}, :default => {:excel => :new})
591
1028
  book2.should be_alive
592
1029
  book2.should be_a Book
593
1030
  book2.excel.should == @book.excel
@@ -596,23 +1033,23 @@ describe Book do
596
1033
  it "should open force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
597
1034
  excel2 = Excel.new(:reuse => false)
598
1035
  @book.excel.close
599
- book2 = Book.open(@simple_file1, :force_excel => :active, :default_excel => :new)
1036
+ book2 = Book.open(@simple_file1, :force => {:excel => :active}, :default => {:excel => :new})
600
1037
  book2.should be_alive
601
1038
  book2.should be_a Book
602
1039
  book2.excel.should === excel2
603
1040
  end
604
1041
 
605
1042
  it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
606
- book2 = Book.open(@different_file1, :force_excel => :new)
1043
+ book2 = Book.open(@different_file1, :force => {:excel => :new})
607
1044
  book2.excel.close
608
- book3 = Book.open(@different_file1, :force_excel => :active, :default_excel => :new)
1045
+ book3 = Book.open(@different_file1, :force => {:excel => :active}, :default => {:excel => :new})
609
1046
  book3.should be_alive
610
1047
  book3.should be_a Book
611
1048
  book3.excel.should == @book.excel
612
1049
  end
613
1050
 
614
1051
  it "should use the open book" do
615
- book2 = Book.open(@simple_file1, :default_excel => :active)
1052
+ book2 = Book.open(@simple_file1, :default => {:excel => :active})
616
1053
  book2.excel.should == @book.excel
617
1054
  book2.should be_alive
618
1055
  book2.should be_a Book
@@ -626,7 +1063,7 @@ describe Book do
626
1063
  fn = @book.filename
627
1064
  @book.close
628
1065
  Excel.close_all
629
- book2 = Book.open(@simple_file1, :default_excel => :active)
1066
+ book2 = Book.open(@simple_file1, :default => {:excel => :active})
630
1067
  book2.should be_alive
631
1068
  book2.should be_a Book
632
1069
  book2.filename.should == fn
@@ -640,7 +1077,7 @@ describe Book do
640
1077
  Excel.close_all
641
1078
  new_excel = Excel.new(:reuse => false)
642
1079
  new_excel2 = Excel.new(:reuse => false)
643
- book2 = Book.open(@simple_file1, :default_excel => :active)
1080
+ book2 = Book.open(@simple_file1, :default => {:excel => :active})
644
1081
  book2.should be_alive
645
1082
  book2.should be_a Book
646
1083
  book2.excel.should_not == excel
@@ -656,7 +1093,7 @@ describe Book do
656
1093
  Excel.close_all
657
1094
  excel1 = Excel.new(:reuse => false)
658
1095
  excel2 = Excel.new(:reuse => false)
659
- book2 = Book.open(@different_file, :default_excel => :active)
1096
+ book2 = Book.open(@different_file, :default => {:excel => :active})
660
1097
  book2.should be_alive
661
1098
  book2.should be_a Book
662
1099
  book2.excel.should == excel1
@@ -668,12 +1105,12 @@ describe Book do
668
1105
  excel1 = @book.excel
669
1106
  excel2 = Excel.new(:reuse => false)
670
1107
  @book.close
671
- book2 = Book.open(@simple_file1, :default_excel => :active)
1108
+ book2 = Book.open(@simple_file1, :default => {:excel => :active})
672
1109
  book2.excel.should == excel1
673
1110
  book2.close
674
- book3 = Book.open(@simple_file1, :force_excel => excel2)
1111
+ book3 = Book.open(@simple_file1, :force => {:excel => excel2})
675
1112
  book3.close
676
- book3 = Book.open(@simple_file1, :default_excel => :active)
1113
+ book3 = Book.open(@simple_file1, :default => {:excel => :active})
677
1114
  book3.excel.should == excel2
678
1115
  book3.close
679
1116
  end
@@ -691,14 +1128,14 @@ describe Book do
691
1128
  end
692
1129
 
693
1130
  it "should force_excel with :reuse" do
694
- book2 = Book.open(@different_file, :force_excel => :reuse)
1131
+ book2 = Book.open(@different_file, :force => {:excel => :reuse})
695
1132
  book2.should be_alive
696
1133
  book2.should be_a Book
697
1134
  book2.excel.should == @book.excel
698
1135
  end
699
1136
 
700
1137
  it "should force_excel with :reuse even if :default_excel says sth. else" do
701
- book2 = Book.open(@different_file, :force_excel => :reuse, :default_excel => :new)
1138
+ book2 = Book.open(@different_file, :force => {:excel => :reuse}, :default => {:excel => :new})
702
1139
  book2.should be_alive
703
1140
  book2.should be_a Book
704
1141
  book2.excel.should == @book.excel
@@ -707,23 +1144,23 @@ describe Book do
707
1144
  it "should open force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
708
1145
  excel2 = Excel.new(:reuse => false)
709
1146
  @book.excel.close
710
- book2 = Book.open(@simple_file1, :force_excel => :reuse, :default_excel => :new)
1147
+ book2 = Book.open(@simple_file1, :force => {:excel => :reuse}, :default => {:excel => :new})
711
1148
  book2.should be_alive
712
1149
  book2.should be_a Book
713
1150
  book2.excel.should === excel2
714
1151
  end
715
1152
 
716
1153
  it "should force_excel with :reuse when reopening and the Excel is not alive even if :default_excel says sth. else" do
717
- book2 = Book.open(@different_file1, :force_excel => :new)
1154
+ book2 = Book.open(@different_file1, :force => {:excel => :new})
718
1155
  book2.excel.close
719
- book3 = Book.open(@different_file1, :force_excel => :reuse, :default_excel => :new)
1156
+ book3 = Book.open(@different_file1, :force => {:excel => :reuse}, :default => {:excel => :new})
720
1157
  book3.should be_alive
721
1158
  book3.should be_a Book
722
1159
  book3.excel.should == @book.excel
723
1160
  end
724
1161
 
725
1162
  it "should use the open book" do
726
- book2 = Book.open(@simple_file1, :default_excel => :reuse)
1163
+ book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
727
1164
  book2.excel.should == @book.excel
728
1165
  book2.should be_alive
729
1166
  book2.should be_a Book
@@ -737,7 +1174,7 @@ describe Book do
737
1174
  fn = @book.filename
738
1175
  @book.close
739
1176
  Excel.close_all
740
- book2 = Book.open(@simple_file1, :default_excel => :reuse)
1177
+ book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
741
1178
  book2.should be_alive
742
1179
  book2.should be_a Book
743
1180
  book2.filename.should == fn
@@ -751,7 +1188,7 @@ describe Book do
751
1188
  Excel.close_all
752
1189
  new_excel = Excel.new(:reuse => false)
753
1190
  new_excel2 = Excel.new(:reuse => false)
754
- book2 = Book.open(@simple_file1, :default_excel => :reuse)
1191
+ book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
755
1192
  book2.should be_alive
756
1193
  book2.should be_a Book
757
1194
  book2.excel.should_not == excel
@@ -767,7 +1204,7 @@ describe Book do
767
1204
  Excel.close_all
768
1205
  excel1 = Excel.new(:reuse => false)
769
1206
  excel2 = Excel.new(:reuse => false)
770
- book2 = Book.open(@different_file, :default_excel => :reuse)
1207
+ book2 = Book.open(@different_file, :default => {:excel => :reuse})
771
1208
  book2.should be_alive
772
1209
  book2.should be_a Book
773
1210
  book2.excel.should == excel1
@@ -779,12 +1216,12 @@ describe Book do
779
1216
  excel1 = @book.excel
780
1217
  excel2 = Excel.new(:reuse => false)
781
1218
  @book.close
782
- book2 = Book.open(@simple_file1, :default_excel => :reuse)
1219
+ book2 = Book.open(@simple_file1, :default => {:excel => :reuse})
783
1220
  book2.excel.should == excel1
784
1221
  book2.close
785
- book3 = Book.open(@simple_file1, :force_excel => excel2)
1222
+ book3 = Book.open(@simple_file1, :force => {:excel => excel2})
786
1223
  book3.close
787
- book3 = Book.open(@simple_file1, :default_excel => :reuse)
1224
+ book3 = Book.open(@simple_file1, :default => {:excel => :reuse})
788
1225
  book3.excel.should == excel2
789
1226
  book3.close
790
1227
  end
@@ -795,6 +1232,7 @@ describe Book do
795
1232
 
796
1233
  before do
797
1234
  @book = Book.open(@simple_file1)
1235
+ #@book.Windows(@book.Name).Visible = true
798
1236
  @sheet = @book.sheet(1)
799
1237
  @book.add_sheet(@sheet, :as => 'a_name')
800
1238
  end
@@ -924,6 +1362,7 @@ describe Book do
924
1362
  book_before.close
925
1363
  end
926
1364
  @book = Book.open(@simple_file_other_path)
1365
+ #@book.Windows(@book.Name).Visible = true
927
1366
  @sheet_count = @book.ole_workbook.Worksheets.Count
928
1367
  @sheet = @book.sheet(1)
929
1368
  @book.add_sheet(@sheet, :as => 'a_name')
@@ -1146,7 +1585,7 @@ describe Book do
1146
1585
  old_cell_value = sheet[1,1].value
1147
1586
  sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1148
1587
  book.Saved.should be_false
1149
- new_book = Book.open(@simple_file1, :if_unsaved => :accept, :force_excel => book.excel, :read_only => false)
1588
+ new_book = Book.open(@simple_file1, :if_unsaved => :accept, :force => {:excel => book.excel}, :read_only => false)
1150
1589
  new_book.ReadOnly.should be_false
1151
1590
  new_book.should be_alive
1152
1591
  book.should be_alive
@@ -1157,14 +1596,14 @@ describe Book do
1157
1596
  end
1158
1597
 
1159
1598
  it "should reopen the book with readonly (unsaved changes of the writable should be saved)" do
1160
- book = Book.open(@simple_file1, :force_excel => :new, :read_only => false)
1599
+ book = Book.open(@simple_file1, :force => {:excel => :new}, :read_only => false)
1161
1600
  book.ReadOnly.should be_false
1162
1601
  book.should be_alive
1163
1602
  sheet = book.sheet(1)
1164
1603
  old_cell_value = sheet[1,1].value
1165
1604
  sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
1166
1605
  book.Saved.should be_false
1167
- new_book = Book.open(@simple_file1, :force_excel => book.excel, :read_only => true, :if_unsaved => :accept)
1606
+ new_book = Book.open(@simple_file1, :force => {:excel => book.excel}, :read_only => true, :if_unsaved => :accept)
1168
1607
  new_book.ReadOnly.should be_false
1169
1608
  new_book.Saved.should be_false
1170
1609
  new_book.should == book
@@ -1173,7 +1612,7 @@ describe Book do
1173
1612
  it "should open the second book in another Excel as writable" do
1174
1613
  book = Book.open(@simple_file1, :read_only => true)
1175
1614
  book.ReadOnly.should be_true
1176
- new_book = Book.open(@simple_file1, :force_excel => :new, :read_only => false)
1615
+ new_book = Book.open(@simple_file1, :force => {:excel => :new}, :read_only => false)
1177
1616
  new_book.ReadOnly.should be_false
1178
1617
  new_book.close
1179
1618
  book.close