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