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,495 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), './spec_helper')
|
4
|
-
|
5
|
-
=begin
|
6
|
-
RSpec.configure do |config|
|
7
|
-
|
8
|
-
config.mock_with :rspec do |mocks|
|
9
|
-
mocks.syntax = :should
|
10
|
-
end
|
11
|
-
end
|
12
|
-
=end
|
13
|
-
|
14
|
-
$VERBOSE = nil
|
15
|
-
|
16
|
-
include RobustExcelOle
|
17
|
-
|
18
|
-
module RobustExcelOle
|
19
|
-
class MockBookstore # :nodoc: #
|
20
|
-
def fetch(filename, options = { })
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
def store(book)
|
24
|
-
end
|
25
|
-
def print
|
26
|
-
puts "MockBookstore is always empty"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
$mock_bookstore = MockBookstore.new
|
32
|
-
|
33
|
-
class Book
|
34
|
-
@@bookstore = $mock_bookstore
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
describe Bookstore do
|
39
|
-
|
40
|
-
before(:all) do
|
41
|
-
excel = Excel.new(:reuse => true)
|
42
|
-
open_books = excel == nil ? 0 : excel.Workbooks.Count
|
43
|
-
puts "*** open books *** : #{open_books}" if open_books > 0
|
44
|
-
Excel.kill_all
|
45
|
-
end
|
46
|
-
|
47
|
-
before do
|
48
|
-
@bookstore = Bookstore.new
|
49
|
-
@dir = create_tmpdir
|
50
|
-
@simple_file = @dir + '/workbook.xls'
|
51
|
-
@simple_save_file = @dir + '/workbook_save.xls'
|
52
|
-
@different_file = @dir + '/different_workbook.xls'
|
53
|
-
@simple_file_other_path = @dir + '/more_data/workbook.xls'
|
54
|
-
@simple_file1 = @simple_file
|
55
|
-
@different_file1 = @different_file
|
56
|
-
end
|
57
|
-
|
58
|
-
after do
|
59
|
-
begin
|
60
|
-
Excel.kill_all
|
61
|
-
rescue WeakRef::RefError => msg
|
62
|
-
puts "#{msg.message}"
|
63
|
-
Excel.kill_all
|
64
|
-
end
|
65
|
-
begin
|
66
|
-
rm_tmp(@dir) rescue nil
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "create bookstore" do
|
71
|
-
context "with standard" do
|
72
|
-
it "should create book store" do
|
73
|
-
expect {
|
74
|
-
@book_store = Bookstore.new
|
75
|
-
}.to_not raise_error
|
76
|
-
@book_store.should be_a Bookstore
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "Mock-Test" do
|
82
|
-
it "should never store any book" do
|
83
|
-
b1 = Book.open(@simple_file1)
|
84
|
-
b2 = Book.open(@simple_file1)
|
85
|
-
b2.object_id.should_not == b1.object_id
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
describe "fetch" do
|
91
|
-
|
92
|
-
context "with one open book" do
|
93
|
-
|
94
|
-
before do
|
95
|
-
@book = Book.open(@simple_file)
|
96
|
-
end
|
97
|
-
|
98
|
-
after do
|
99
|
-
@book.close rescue nil
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should do simple store and fetch" do
|
103
|
-
@bookstore.store(@book)
|
104
|
-
new_book = @bookstore.fetch(@simple_file)
|
105
|
-
new_book.should be_a Book
|
106
|
-
new_book.should be_alive
|
107
|
-
new_book.should == @book
|
108
|
-
new_book.close
|
109
|
-
end
|
110
|
-
|
111
|
-
it "should fetch one book several times" do
|
112
|
-
@bookstore.store(@book)
|
113
|
-
book1 = @bookstore.fetch(@simple_file1)
|
114
|
-
book2 = @bookstore.fetch(@simple_file1)
|
115
|
-
expect(book1).to be_a Book
|
116
|
-
book1.should be_alive
|
117
|
-
book1.should == @book
|
118
|
-
book2.should be_a Book
|
119
|
-
book2.should be_alive
|
120
|
-
book2.should == @book
|
121
|
-
book1.should == book2
|
122
|
-
book1.close
|
123
|
-
book2.close
|
124
|
-
end
|
125
|
-
|
126
|
-
it "should fetch nothing without stóring before" do
|
127
|
-
new_book = @bookstore.fetch(@simple_file)
|
128
|
-
new_book.should == nil
|
129
|
-
end
|
130
|
-
|
131
|
-
it "should fetch a closed book" do
|
132
|
-
@bookstore.store(@book)
|
133
|
-
@book.close
|
134
|
-
book1 = @bookstore.fetch(@simple_file)
|
135
|
-
book1.should be_a Book
|
136
|
-
book1.should_not be_alive
|
137
|
-
end
|
138
|
-
|
139
|
-
it "should fetch nothing when fetching a different book" do
|
140
|
-
@bookstore.store(@book)
|
141
|
-
new_book = @bookstore.fetch(@different_file)
|
142
|
-
new_book.should == nil
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should fetch nothing when fetching a non-existing book" do
|
146
|
-
@bookstore.store(@book)
|
147
|
-
new_book = @bookstore.fetch("foo")
|
148
|
-
new_book.should == nil
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
context "with several books" do
|
154
|
-
|
155
|
-
before do
|
156
|
-
@book = Book.open(@simple_file)
|
157
|
-
@bookstore.store(@book)
|
158
|
-
end
|
159
|
-
|
160
|
-
after do
|
161
|
-
@book.close
|
162
|
-
@book2.close(:if_unsaved => :forget)
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should store and open two different books" do
|
166
|
-
@book2 = Book.open(@different_file1)
|
167
|
-
@bookstore.store(@book2)
|
168
|
-
new_book = @bookstore.fetch(@simple_file)
|
169
|
-
new_book2 = @bookstore.fetch(@different_file1)
|
170
|
-
new_book.should be_a Book
|
171
|
-
new_book.should be_alive
|
172
|
-
new_book.should == @book
|
173
|
-
new_book2.should be_a Book
|
174
|
-
new_book2.should be_alive
|
175
|
-
new_book2.should == @book2
|
176
|
-
new_book.should_not == new_book2
|
177
|
-
new_book.close
|
178
|
-
new_book2.close
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should fetch the first, writable book" do
|
182
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
183
|
-
@bookstore.store(@book2)
|
184
|
-
@book.ReadOnly.should be_false
|
185
|
-
@book2.ReadOnly.should be_true
|
186
|
-
new_book = @bookstore.fetch(@simple_file1)
|
187
|
-
new_book.should == @book
|
188
|
-
new_book.should_not == @book2
|
189
|
-
new_book.close
|
190
|
-
end
|
191
|
-
|
192
|
-
it "should fetch the last book with :prefer_writeable => false" do
|
193
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
194
|
-
@bookstore.store(@book2)
|
195
|
-
@book.ReadOnly.should be_false
|
196
|
-
@book2.ReadOnly.should be_true
|
197
|
-
new_book = @bookstore.fetch(@simple_file1, :prefer_writable => false)
|
198
|
-
new_book.should_not == @book
|
199
|
-
new_book.should == @book2
|
200
|
-
new_book.close
|
201
|
-
end
|
202
|
-
|
203
|
-
it "should fetch the second, open book, if the first book is closed" do
|
204
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
205
|
-
@bookstore.store(@book2)
|
206
|
-
@book.ReadOnly.should be_false
|
207
|
-
@book2.ReadOnly.should be_true
|
208
|
-
@book.close
|
209
|
-
new_book = @bookstore.fetch(@simple_file1, :prefer_writable => false)
|
210
|
-
new_book2 = @bookstore.fetch(@simple_file1)
|
211
|
-
new_book.should_not == @book
|
212
|
-
new_book2.should_not == @book
|
213
|
-
new_book.should == @book2
|
214
|
-
new_book2.should == @book2
|
215
|
-
new_book.close
|
216
|
-
new_book2.close
|
217
|
-
end
|
218
|
-
|
219
|
-
it "should fetch the first, open book, if the second book is closed, even with :prefer_writeable => false" do
|
220
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
221
|
-
@bookstore.store(@book2)
|
222
|
-
@book.ReadOnly.should be_false
|
223
|
-
@book2.ReadOnly.should be_true
|
224
|
-
@book2.close
|
225
|
-
new_book = @bookstore.fetch(@simple_file1, :prefer_writable => false)
|
226
|
-
new_book2 = @bookstore.fetch(@simple_file1)
|
227
|
-
new_book.should_not == @book2
|
228
|
-
new_book2.should_not == @book2
|
229
|
-
new_book.should == @book
|
230
|
-
new_book2.should == @book
|
231
|
-
new_book.close
|
232
|
-
new_book2.close
|
233
|
-
end
|
234
|
-
|
235
|
-
end
|
236
|
-
|
237
|
-
context "with readonly book" do
|
238
|
-
|
239
|
-
before do
|
240
|
-
@book = Book.open(@simple_file, :read_only => true)
|
241
|
-
@bookstore.store(@book)
|
242
|
-
end
|
243
|
-
|
244
|
-
after do
|
245
|
-
@book.close
|
246
|
-
@book2.close(:if_unsaved => :forget)
|
247
|
-
end
|
248
|
-
|
249
|
-
it "should fetch the second, writable book" do
|
250
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
251
|
-
@bookstore.store(@book2)
|
252
|
-
@book.ReadOnly.should be_true
|
253
|
-
@book2.ReadOnly.should be_false
|
254
|
-
new_book = @bookstore.fetch(@simple_file1)
|
255
|
-
new_book2 = @bookstore.fetch(@simple_file1, :prefer_writable => true)
|
256
|
-
new_book3 = @bookstore.fetch(@simple_file1, :prefer_writable => false)
|
257
|
-
new_book.should == @book2
|
258
|
-
new_book2.should == @book2
|
259
|
-
new_book3.should == @book2
|
260
|
-
new_book.should_not == @book
|
261
|
-
new_book2.should_not == @book
|
262
|
-
new_book3.should_not == @book
|
263
|
-
new_book.close
|
264
|
-
new_book2.close
|
265
|
-
new_book3.close
|
266
|
-
end
|
267
|
-
|
268
|
-
it "should fetch the recent readonly book when there are only readonly books" do
|
269
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new, :read_only => true)
|
270
|
-
@bookstore.store(@book2)
|
271
|
-
@book.ReadOnly.should be_true
|
272
|
-
@book2.ReadOnly.should be_true
|
273
|
-
new_book = @bookstore.fetch(@simple_file1)
|
274
|
-
new_book.should == @book2
|
275
|
-
new_book.should_not == @book
|
276
|
-
new_book.close
|
277
|
-
end
|
278
|
-
|
279
|
-
it "should fetch the second, writable book, if a writable, a readonly and an unsaved readonly book exist" do
|
280
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
281
|
-
@book3 = Book.open(@simple_file1, :force_excel => :new)
|
282
|
-
@bookstore.store(@book2)
|
283
|
-
@bookstore.store(@book3)
|
284
|
-
sheet = @book3.sheet(1)
|
285
|
-
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
286
|
-
@book.ReadOnly.should be_true
|
287
|
-
@book2.ReadOnly.should be_false
|
288
|
-
@book3.ReadOnly.should be_true
|
289
|
-
@book3.Saved.should be_false
|
290
|
-
new_book = @bookstore.fetch(@simple_file1)
|
291
|
-
new_book2 = @bookstore.fetch(@simple_file1, :prefer_writable => false)
|
292
|
-
new_book.should == @book2
|
293
|
-
new_book2.should == @book3
|
294
|
-
new_book.should_not == @book
|
295
|
-
new_book.should_not == @book3
|
296
|
-
new_book2.should_not == @book
|
297
|
-
new_book2.should_not == @book2
|
298
|
-
new_book.close
|
299
|
-
new_book2.close
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
context "with several closed books" do
|
304
|
-
|
305
|
-
before do
|
306
|
-
@book = Book.open(@simple_file1)
|
307
|
-
@bookstore.store(@book)
|
308
|
-
@bookstore.store(@book)
|
309
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
310
|
-
@bookstore.store(@book2)
|
311
|
-
@book.close
|
312
|
-
@book2.close
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should fetch the recent closed book" do
|
316
|
-
new_book = @bookstore.fetch(@simple_file)
|
317
|
-
new_book.should == @book2
|
318
|
-
new_book.should_not == @book
|
319
|
-
end
|
320
|
-
|
321
|
-
end
|
322
|
-
|
323
|
-
context "with changing file name" do
|
324
|
-
|
325
|
-
before do
|
326
|
-
@book = Book.open(@simple_file)
|
327
|
-
@book.save_as(@simple_save_file, :if_exists => :overwrite)
|
328
|
-
@bookstore.store(@book)
|
329
|
-
#@bookstore = @book.book_store
|
330
|
-
end
|
331
|
-
|
332
|
-
after do
|
333
|
-
@book.close
|
334
|
-
end
|
335
|
-
|
336
|
-
it "should return only book with correct file name" do
|
337
|
-
book1 = @bookstore.fetch(@simple_save_file)
|
338
|
-
book1.should == @book
|
339
|
-
end
|
340
|
-
|
341
|
-
it "should return only book with correct file name" do
|
342
|
-
book1 = @bookstore.fetch(@simple_file)
|
343
|
-
book1.should == nil
|
344
|
-
end
|
345
|
-
end
|
346
|
-
|
347
|
-
context "with given excel instance and fetching readonly" do
|
348
|
-
|
349
|
-
before do
|
350
|
-
@book = Book.open(@simple_file1)
|
351
|
-
@bookstore.store(@book)
|
352
|
-
@book2 = Book.open(@simple_file1, :force_excel => :new)
|
353
|
-
@bookstore.store(@book2)
|
354
|
-
end
|
355
|
-
|
356
|
-
after do
|
357
|
-
@book.close
|
358
|
-
end
|
359
|
-
|
360
|
-
it "should fetch the book in the given excel instance" do
|
361
|
-
@book.ReadOnly.should be_false
|
362
|
-
@book2.ReadOnly.should be_true
|
363
|
-
book_new = @bookstore.fetch(@simple_file, :prefer_excel => @book2.excel)
|
364
|
-
book_new.should be_a Book
|
365
|
-
book_new.should be_alive
|
366
|
-
book_new.should == @book2
|
367
|
-
end
|
368
|
-
end
|
369
|
-
end
|
370
|
-
|
371
|
-
describe "book life cycle" do
|
372
|
-
|
373
|
-
context "with an open book" do
|
374
|
-
|
375
|
-
before do
|
376
|
-
@book = Book.open(@simple_file)
|
377
|
-
@bookstore.store(@book)
|
378
|
-
end
|
379
|
-
|
380
|
-
after do
|
381
|
-
@book.close rescue nil
|
382
|
-
end
|
383
|
-
|
384
|
-
it "should find the book if the book has astill got a reference" do
|
385
|
-
GC.start
|
386
|
-
@bookstore.fetch(@simple_file).should == @book
|
387
|
-
end
|
388
|
-
|
389
|
-
it "should have forgotten the book if there is no reference anymore" do
|
390
|
-
@book = nil
|
391
|
-
GC.start
|
392
|
-
@bookstore.fetch(@simple_file).should == nil
|
393
|
-
end
|
394
|
-
|
395
|
-
it "should have forgotten some books if they have no reference anymore" do
|
396
|
-
book_new = Book.open(@different_file1)
|
397
|
-
@bookstore.store(book_new)
|
398
|
-
@book = nil
|
399
|
-
@book = "Bla"
|
400
|
-
@book = Book.open(@simple_file1)
|
401
|
-
@bookstore.store(@book)
|
402
|
-
@book = nil
|
403
|
-
GC.start
|
404
|
-
sleep 1
|
405
|
-
#@bookstore.fetch(simple_file1).should == nil
|
406
|
-
@bookstore.fetch(@different_file1).should == book_new
|
407
|
-
end
|
408
|
-
end
|
409
|
-
end
|
410
|
-
|
411
|
-
describe "books" do
|
412
|
-
|
413
|
-
before do
|
414
|
-
@book = Book.open(@simple_file)
|
415
|
-
@bookstore.store(@book)
|
416
|
-
@book2 = Book.open(@different_file)
|
417
|
-
@bookstore.store(@book2)
|
418
|
-
end
|
419
|
-
|
420
|
-
after do
|
421
|
-
@book.close
|
422
|
-
@book2.close
|
423
|
-
end
|
424
|
-
|
425
|
-
it "should show books" do
|
426
|
-
expect{
|
427
|
-
@bookstore.books}.to_not raise_error
|
428
|
-
end
|
429
|
-
|
430
|
-
end
|
431
|
-
|
432
|
-
describe "print" do
|
433
|
-
|
434
|
-
before do
|
435
|
-
@book = Book.open(@simple_file)
|
436
|
-
@bookstore.store(@book)
|
437
|
-
@book2 = Book.open(@different_file)
|
438
|
-
@bookstore.store(@book2)
|
439
|
-
end
|
440
|
-
|
441
|
-
after do
|
442
|
-
@book.close
|
443
|
-
@book2.close
|
444
|
-
end
|
445
|
-
|
446
|
-
it "should print books" do
|
447
|
-
@bookstore.print
|
448
|
-
end
|
449
|
-
|
450
|
-
end
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
describe "hidden_excel" do
|
455
|
-
|
456
|
-
context "with some open book" do
|
457
|
-
|
458
|
-
before do
|
459
|
-
@book = Book.open(@simple_file)
|
460
|
-
end
|
461
|
-
|
462
|
-
after do
|
463
|
-
@book.close
|
464
|
-
end
|
465
|
-
|
466
|
-
it "should create and use a hidden Excel instance" do
|
467
|
-
h_excel1 = @bookstore.hidden_excel
|
468
|
-
h_excel1.should_not == @book.excel
|
469
|
-
h_excel1.Visible.should be_false
|
470
|
-
h_excel1.DisplayAlerts.should be_false
|
471
|
-
book1 = Book.open(@simple_file, :force_excel => @bookstore.hidden_excel)
|
472
|
-
book1.excel.should === h_excel1
|
473
|
-
book1.excel.should_not === @book.excel
|
474
|
-
Excel.close_all
|
475
|
-
h_excel2 = @bookstore.hidden_excel
|
476
|
-
h_excel2.should_not == @book.excel
|
477
|
-
h_excel2.should_not == book1.excel
|
478
|
-
h_excel2.Visible.should be_false
|
479
|
-
h_excel2.DisplayAlerts.should be_false
|
480
|
-
book2 = Book.open(@simple_file, :force_excel => @bookstore.hidden_excel)
|
481
|
-
book2.excel.should === h_excel2
|
482
|
-
book2.excel.should_not === @book.excel
|
483
|
-
book2.excel.should_not === book1.excel
|
484
|
-
end
|
485
|
-
|
486
|
-
it "should exclude hidden excel" do
|
487
|
-
book1 = Book.open(@simple_file, :force_excel => @bookstore.hidden_excel)
|
488
|
-
@bookstore.store(book1)
|
489
|
-
book1.close
|
490
|
-
book2 = @bookstore.fetch(@simple_file)
|
491
|
-
book2.should == nil
|
492
|
-
end
|
493
|
-
end
|
494
|
-
end
|
495
|
-
end
|