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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +6 -0
  3. data/README.rdoc +2 -2
  4. data/docs/README_excel.rdoc +2 -3
  5. data/docs/README_open.rdoc +8 -12
  6. data/docs/README_ranges.rdoc +21 -9
  7. data/docs/README_sheet.rdoc +1 -1
  8. data/lib/robust_excel_ole/book.rb +3 -23
  9. data/lib/robust_excel_ole/excel.rb +2 -15
  10. data/lib/robust_excel_ole/reo_common.rb +11 -7
  11. data/lib/robust_excel_ole/sheet.rb +36 -15
  12. data/lib/robust_excel_ole/version.rb +1 -1
  13. data/robust_excel_ole.gemspec +1 -1
  14. data/spec/book_spec.rb +1 -1
  15. data/spec/book_specs/book_close_spec.rb +3 -3
  16. data/spec/book_specs/book_misc_spec.rb +25 -1
  17. data/spec/book_specs/book_open_spec.rb +299 -5
  18. data/spec/book_specs/book_sheet_spec.rb +1 -1
  19. data/spec/book_specs/book_unobtr_spec.rb +275 -35
  20. data/spec/data/another_workbook.xls +0 -0
  21. data/spec/data/different_workbook.xls +0 -0
  22. data/spec/data/workbook.xls +0 -0
  23. data/spec/excel_spec.rb +118 -5
  24. data/spec/helpers/key_sender.rb +2 -2
  25. data/spec/reo_common_spec.rb +0 -4
  26. data/spec/sheet_spec.rb +32 -0
  27. data/spec/spec_helper.rb +3 -0
  28. metadata +3 -21
  29. data/spec/ruby1.8.6_rspec2.14/book_spec.rb +0 -1421
  30. data/spec/ruby1.8.6_rspec2.14/book_specs/book_all_spec.rb +0 -22
  31. data/spec/ruby1.8.6_rspec2.14/book_specs/book_close_spec.rb +0 -252
  32. data/spec/ruby1.8.6_rspec2.14/book_specs/book_misc_spec.rb +0 -1070
  33. data/spec/ruby1.8.6_rspec2.14/book_specs/book_open_spec.rb +0 -1855
  34. data/spec/ruby1.8.6_rspec2.14/book_specs/book_save_spec.rb +0 -514
  35. data/spec/ruby1.8.6_rspec2.14/book_specs/book_sheet_spec.rb +0 -395
  36. data/spec/ruby1.8.6_rspec2.14/book_specs/book_subclass_spec.rb +0 -51
  37. data/spec/ruby1.8.6_rspec2.14/book_specs/book_unobtr_spec.rb +0 -1737
  38. data/spec/ruby1.8.6_rspec2.14/bookstore_spec.rb +0 -495
  39. data/spec/ruby1.8.6_rspec2.14/cell_spec.rb +0 -76
  40. data/spec/ruby1.8.6_rspec2.14/cygwin_spec.rb +0 -42
  41. data/spec/ruby1.8.6_rspec2.14/excel_spec.rb +0 -1820
  42. data/spec/ruby1.8.6_rspec2.14/general_spec.rb +0 -212
  43. data/spec/ruby1.8.6_rspec2.14/range_spec.rb +0 -131
  44. data/spec/ruby1.8.6_rspec2.14/reo_common_spec.rb +0 -130
  45. data/spec/ruby1.8.6_rspec2.14/sheet_spec.rb +0 -663
  46. data/spec/ruby1.8.6_rspec2.14/spec_helper.rb +0 -35
@@ -1,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
-