robust_excel_ole 0.3.8 → 0.3.9
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.
- data/.yardopts +1 -0
- data/examples/edit_sheets/example_access_sheets_and_cells.rb +1 -1
- data/examples/edit_sheets/example_adding_sheets.rb +1 -1
- data/examples/edit_sheets/example_concating.rb +2 -2
- data/examples/edit_sheets/example_copying.rb +2 -2
- data/examples/edit_sheets/example_expanding.rb +2 -2
- data/examples/edit_sheets/example_naming.rb +2 -2
- data/examples/edit_sheets/example_ranges.rb +1 -1
- data/examples/edit_sheets/example_saving.rb +2 -2
- data/examples/open_save_close/example_control_to_excel.rb +1 -1
- data/examples/open_save_close/example_default_excel.rb +1 -1
- data/examples/open_save_close/example_force_excel.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_forget.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_save.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +1 -1
- data/examples/open_save_close/example_read_only.rb +1 -1
- data/examples/open_save_close/example_rename_cells.rb +2 -2
- data/examples/open_save_close/example_reuse.rb +1 -1
- data/examples/open_save_close/example_simple.rb +1 -1
- data/examples/open_save_close/example_unobtrusively.rb +1 -1
- data/lib/reo_console.rb +2 -2
- data/lib/robust_excel_ole.rb +1 -174
- data/lib/robust_excel_ole/book.rb +47 -63
- data/lib/robust_excel_ole/bookstore.rb +4 -4
- data/lib/robust_excel_ole/excel.rb +12 -18
- data/lib/robust_excel_ole/general.rb +188 -0
- data/lib/robust_excel_ole/sheet.rb +1 -1
- data/lib/robust_excel_ole/utilities.rb +1 -1
- data/lib/robust_excel_ole/version.rb +1 -1
- data/spec/{book_specs/book_spec.rb → book_spec.rb} +26 -24
- data/spec/book_specs/book_all_spec.rb +1 -1
- data/spec/book_specs/book_close_spec.rb +16 -15
- data/spec/book_specs/book_misc_spec.rb +4 -3
- data/spec/book_specs/book_open_spec.rb +10 -9
- data/spec/book_specs/book_save_spec.rb +4 -3
- data/spec/book_specs/book_sheet_spec.rb +7 -6
- data/spec/book_specs/book_unobtr_spec.rb +2 -1
- data/spec/data/different_workbook.xls +0 -0
- data/spec/data/workbook.xls +0 -0
- data/spec/excel_spec.rb +9 -11
- data/spec/general_spec.rb +193 -0
- data/spec/range_spec.rb +3 -2
- data/spec/sheet_spec.rb +27 -19
- metadata +8 -6
- data/spec/robust_excel_ole_spec.rb +0 -113
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -51,7 +52,7 @@ describe Book do
|
|
51
52
|
context "with unsaved read_only book" do
|
52
53
|
before do
|
53
54
|
@book = Book.open(@simple_file, :read_only => true)
|
54
|
-
@sheet_count = @book.
|
55
|
+
@sheet_count = @book.ole_workbook.Worksheets.Count
|
55
56
|
@book.add_sheet(@sheet, :as => 'a_name')
|
56
57
|
end
|
57
58
|
|
@@ -60,7 +61,7 @@ describe Book do
|
|
60
61
|
@book.close
|
61
62
|
}.to_not raise_error
|
62
63
|
new_book = Book.open(@simple_file)
|
63
|
-
new_book.
|
64
|
+
new_book.ole_workbook.Worksheets.Count.should == @sheet_count
|
64
65
|
new_book.close
|
65
66
|
end
|
66
67
|
end
|
@@ -68,7 +69,7 @@ describe Book do
|
|
68
69
|
context "with unsaved book" do
|
69
70
|
before do
|
70
71
|
@book = Book.open(@simple_file)
|
71
|
-
@sheet_count = @book.
|
72
|
+
@sheet_count = @book.ole_workbook.Worksheets.Count
|
72
73
|
@book.add_sheet(@sheet, :as => 'a_name')
|
73
74
|
@sheet = @book[0]
|
74
75
|
end
|
@@ -90,7 +91,7 @@ describe Book do
|
|
90
91
|
end
|
91
92
|
|
92
93
|
it "should keep the book open" do
|
93
|
-
ole_workbook = @book.
|
94
|
+
ole_workbook = @book.ole_workbook
|
94
95
|
excel = @book.excel
|
95
96
|
excel.Workbooks.Count.should == 1
|
96
97
|
@book.close(:if_unsaved => :keep_open)
|
@@ -99,18 +100,18 @@ describe Book do
|
|
99
100
|
end
|
100
101
|
|
101
102
|
it "should close the book and leave its file untouched with option :forget" do
|
102
|
-
ole_workbook = @book.
|
103
|
+
ole_workbook = @book.ole_workbook
|
103
104
|
excel = @book.excel
|
104
105
|
excel.Workbooks.Count.should == 1
|
105
106
|
@book.close(:if_unsaved => :forget)
|
106
107
|
excel.Workbooks.Count.should == 0
|
107
|
-
@book.
|
108
|
+
@book.ole_workbook.should == nil
|
108
109
|
@book.should_not be_alive
|
109
110
|
expect{
|
110
111
|
ole_workbook.Name}.to raise_error(WIN32OLERuntimeError)
|
111
112
|
new_book = Book.open(@simple_file)
|
112
113
|
begin
|
113
|
-
new_book.
|
114
|
+
new_book.ole_workbook.Worksheets.Count.should == @sheet_count
|
114
115
|
ensure
|
115
116
|
new_book.close
|
116
117
|
end
|
@@ -124,18 +125,18 @@ describe Book do
|
|
124
125
|
|
125
126
|
|
126
127
|
it "should save the book before close with option :save" do
|
127
|
-
ole_workbook = @book.
|
128
|
+
ole_workbook = @book.ole_workbook
|
128
129
|
excel = @book.excel
|
129
130
|
excel.Workbooks.Count.should == 1
|
130
131
|
@book.close(:if_unsaved => :save)
|
131
132
|
excel.Workbooks.Count.should == 0
|
132
|
-
@book.
|
133
|
+
@book.ole_workbook.should == nil
|
133
134
|
@book.should_not be_alive
|
134
135
|
expect{
|
135
136
|
ole_workbook.Name}.to raise_error(WIN32OLERuntimeError)
|
136
137
|
new_book = Book.open(@simple_file)
|
137
138
|
begin
|
138
|
-
new_book.
|
139
|
+
new_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
|
139
140
|
ensure
|
140
141
|
new_book.close
|
141
142
|
end
|
@@ -155,27 +156,27 @@ describe Book do
|
|
155
156
|
it "should" + (answer == :yes ? "" : " not") + " the unsaved book and" + (answer == :cancel ? " not" : "") + " close it" + "if user answers '#{answer}'" do
|
156
157
|
# "Yes" is the default. "No" is right of "Yes", "Cancel" is right of "No" --> language independent
|
157
158
|
@key_sender.puts "{right}" * position + "{enter}"
|
158
|
-
ole_workbook = @book.
|
159
|
+
ole_workbook = @book.ole_workbook
|
159
160
|
excel = @book.excel
|
160
161
|
displayalert_value = @book.excel.DisplayAlerts
|
161
162
|
if answer == :cancel then
|
162
163
|
expect {
|
163
164
|
@book.close(:if_unsaved => :alert)
|
164
165
|
}.to raise_error(ExcelUserCanceled, "close: canceled by user")
|
165
|
-
@book.
|
166
|
-
@book.
|
166
|
+
@book.ole_workbook.Saved.should be_false
|
167
|
+
@book.ole_workbook.should_not == nil
|
167
168
|
@book.should be_alive
|
168
169
|
else
|
169
170
|
@book.excel.Workbooks.Count.should == 1
|
170
171
|
@book.close(:if_unsaved => :alert)
|
171
172
|
@book.excel.Workbooks.Count.should == 0
|
172
|
-
@book.
|
173
|
+
@book.ole_workbook.should == nil
|
173
174
|
@book.should_not be_alive
|
174
175
|
expect{ole_workbook.Name}.to raise_error(WIN32OLERuntimeError)
|
175
176
|
end
|
176
177
|
new_book = Book.open(@simple_file, :if_unsaved => :forget)
|
177
178
|
begin
|
178
|
-
new_book.
|
179
|
+
new_book.ole_workbook.Worksheets.Count.should == @sheet_count + (answer==:yes ? 1 : 0)
|
179
180
|
new_book.excel.DisplayAlerts.should == displayalert_value
|
180
181
|
ensure
|
181
182
|
new_book.close
|
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -323,15 +324,15 @@ describe Book do
|
|
323
324
|
@book.excel.visible = true
|
324
325
|
@book.excel.visible.should be_true
|
325
326
|
@book.visible.should be_true
|
326
|
-
@book.excel.Windows(@book.
|
327
|
+
@book.excel.Windows(@book.ole_workbook.Name).Visible.should be_true
|
327
328
|
@book.visible = false
|
328
329
|
@book.excel.visible.should be_true
|
329
330
|
@book.visible.should be_false
|
330
|
-
@book.excel.Windows(@book.
|
331
|
+
@book.excel.Windows(@book.ole_workbook.Name).Visible.should be_false
|
331
332
|
@book.visible = true
|
332
333
|
@book.excel.visible.should be_true
|
333
334
|
@book.visible.should be_true
|
334
|
-
@book.excel.Windows(@book.
|
335
|
+
@book.excel.Windows(@book.ole_workbook.Name).Visible.should be_true
|
335
336
|
end
|
336
337
|
|
337
338
|
end
|
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -68,7 +69,7 @@ describe Book do
|
|
68
69
|
end
|
69
70
|
|
70
71
|
it "should fetch the workbook" do
|
71
|
-
workbook = @book.
|
72
|
+
workbook = @book.ole_workbook
|
72
73
|
new_book = Book.new(workbook)
|
73
74
|
new_book.should be_a Book
|
74
75
|
new_book.should be_alive
|
@@ -82,7 +83,7 @@ describe Book do
|
|
82
83
|
end
|
83
84
|
|
84
85
|
it "should fetch the workbook" do
|
85
|
-
workbook = @book.
|
86
|
+
workbook = @book.ole_workbook
|
86
87
|
new_book = Book.new(workbook, :visible => true)
|
87
88
|
new_book.should be_a Book
|
88
89
|
new_book.should be_alive
|
@@ -96,7 +97,7 @@ describe Book do
|
|
96
97
|
end
|
97
98
|
|
98
99
|
it "should yield an identical Book and set visible and displayalerts values" do
|
99
|
-
workbook = @book.
|
100
|
+
workbook = @book.ole_workbook
|
100
101
|
new_book = Book.new(workbook, :visible => true, :displayalerts => true)
|
101
102
|
new_book.should be_a Book
|
102
103
|
new_book.should be_alive
|
@@ -232,9 +233,9 @@ describe Book do
|
|
232
233
|
book4.excel.should === @book.excel
|
233
234
|
book3.close
|
234
235
|
book4.close
|
235
|
-
book5 = Book.open(@simple_file, :force_excel => book2.
|
236
|
+
book5 = Book.open(@simple_file, :force_excel => book2.ole_workbook)
|
236
237
|
book5.excel.should === book2.excel
|
237
|
-
win32ole_excel1 = WIN32OLE.connect(@book.
|
238
|
+
win32ole_excel1 = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
|
238
239
|
book6 = Book.open(@simple_file, :force_excel => win32ole_excel1)
|
239
240
|
book6.excel.should === @book.excel
|
240
241
|
end
|
@@ -570,7 +571,7 @@ describe Book do
|
|
570
571
|
book_before.close
|
571
572
|
end
|
572
573
|
@book = Book.open(@simple_file_other_path)
|
573
|
-
@sheet_count = @book.
|
574
|
+
@sheet_count = @book.ole_workbook.Worksheets.Count
|
574
575
|
@sheet = @book[0]
|
575
576
|
@book.add_sheet(@sheet, :as => 'a_name')
|
576
577
|
end
|
@@ -599,7 +600,7 @@ describe Book do
|
|
599
600
|
@new_book.should be_alive
|
600
601
|
@new_book.filename.downcase.should == @simple_file.downcase
|
601
602
|
old_book = Book.open(@simple_file_other_path, :if_obstructed => :forget)
|
602
|
-
old_book.
|
603
|
+
old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
|
603
604
|
old_book.close
|
604
605
|
end
|
605
606
|
|
@@ -614,7 +615,7 @@ describe Book do
|
|
614
615
|
@new_book.should be_alive
|
615
616
|
@new_book.filename.downcase.should == @simple_file.downcase
|
616
617
|
old_book = Book.open(@simple_file_other_path, :if_obstructed => :forget)
|
617
|
-
old_book.
|
618
|
+
old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
|
618
619
|
old_book.close
|
619
620
|
end
|
620
621
|
|
@@ -893,7 +894,7 @@ describe Book do
|
|
893
894
|
end
|
894
895
|
|
895
896
|
it "should uplift a workbook to a book with an open book" do
|
896
|
-
workbook = @book.
|
897
|
+
workbook = @book.ole_workbook
|
897
898
|
book1 = Book.new(workbook)
|
898
899
|
book1.should be_a Book
|
899
900
|
book1.should be_alive
|
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -40,11 +41,11 @@ describe Book do
|
|
40
41
|
it "should save for a file opened without :read_only" do
|
41
42
|
@book = Book.open(@simple_file)
|
42
43
|
@book.add_sheet(@sheet, :as => 'a_name')
|
43
|
-
@new_sheet_count = @book.
|
44
|
+
@new_sheet_count = @book.ole_workbook.Worksheets.Count
|
44
45
|
expect {
|
45
46
|
@book.save
|
46
47
|
}.to_not raise_error
|
47
|
-
@book.
|
48
|
+
@book.ole_workbook.Worksheets.Count.should == @new_sheet_count
|
48
49
|
@book.close
|
49
50
|
end
|
50
51
|
|
@@ -378,7 +379,7 @@ describe Book do
|
|
378
379
|
|
379
380
|
it "should report save errors and leave DisplayAlerts unchanged" do
|
380
381
|
#@key_sender.puts "{left}{enter}" #, :initial_wait => 0.2, :if_target_missing=>"Excel window not found")
|
381
|
-
@book.
|
382
|
+
@book.ole_workbook.Close
|
382
383
|
expect{
|
383
384
|
@book.save_as(@simple_save_file, :if_exists => :alert)
|
384
385
|
}.to raise_error(ExcelErrorSave, "Workbook is not alive")
|
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -45,14 +46,14 @@ describe Book do
|
|
45
46
|
|
46
47
|
context "only first argument" do
|
47
48
|
it "should add worksheet" do
|
48
|
-
@book.
|
49
|
+
@book.ole_workbook.Worksheets.Count == 3
|
49
50
|
@book.add_sheet @sheet
|
50
|
-
@book.
|
51
|
+
@book.ole_workbook.Worksheets.Count == 4
|
51
52
|
end
|
52
53
|
|
53
54
|
it "should return copyed sheet" do
|
54
55
|
sheet = @book.add_sheet @sheet
|
55
|
-
copyed_sheet = @book.
|
56
|
+
copyed_sheet = @book.ole_workbook.Worksheets.Item(@book.ole_workbook.Worksheets.Count)
|
56
57
|
sheet.name.should eq copyed_sheet.name
|
57
58
|
end
|
58
59
|
end
|
@@ -106,14 +107,14 @@ describe Book do
|
|
106
107
|
|
107
108
|
context "without argument" do
|
108
109
|
it "should add empty sheet" do
|
109
|
-
@book.
|
110
|
+
@book.ole_workbook.Worksheets.Count.should == 3
|
110
111
|
@book.add_sheet
|
111
|
-
@book.
|
112
|
+
@book.ole_workbook.Worksheets.Count.should == 4
|
112
113
|
end
|
113
114
|
|
114
115
|
it "should return copyed sheet" do
|
115
116
|
sheet = @book.add_sheet
|
116
|
-
copyed_sheet = @book.
|
117
|
+
copyed_sheet = @book.ole_workbook.Worksheets.Item(@book.ole_workbook.Worksheets.Count)
|
117
118
|
sheet.name.should eq copyed_sheet.name
|
118
119
|
end
|
119
120
|
end
|
@@ -6,6 +6,7 @@ require File.join(File.dirname(__FILE__), './../spec_helper')
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
8
|
include RobustExcelOle
|
9
|
+
include General
|
9
10
|
|
10
11
|
describe Book do
|
11
12
|
|
@@ -301,7 +302,7 @@ describe Book do
|
|
301
302
|
old_cell_value = sheet[1,1].value
|
302
303
|
@book.close
|
303
304
|
@book.should_not be_alive
|
304
|
-
Excel.
|
305
|
+
Excel.kill_all
|
305
306
|
Book.unobtrusively(@simple_file, :keep_open => true) do |book|
|
306
307
|
book.should be_a Book
|
307
308
|
book.excel.should == @book.excel
|
Binary file
|
data/spec/data/workbook.xls
CHANGED
Binary file
|
data/spec/excel_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require File.join(File.dirname(__FILE__), './spec_helper')
|
|
4
4
|
|
5
5
|
$VERBOSE = nil
|
6
6
|
|
7
|
-
include
|
7
|
+
include General
|
8
8
|
|
9
9
|
module RobustExcelOle
|
10
10
|
|
@@ -16,7 +16,6 @@ module RobustExcelOle
|
|
16
16
|
|
17
17
|
before do
|
18
18
|
@dir = create_tmpdir
|
19
|
-
#print "tmpdir: "; p @dir
|
20
19
|
@simple_file = @dir + '/workbook.xls'
|
21
20
|
@another_simple_file = @dir + '/another_workbook.xls'
|
22
21
|
@different_file = @dir + '/different_workbook.xls'
|
@@ -81,7 +80,7 @@ module RobustExcelOle
|
|
81
80
|
end
|
82
81
|
|
83
82
|
it "lifts an Excel instance given as WIN32Ole object" do
|
84
|
-
win32ole_excel = WIN32OLE.connect(@book.
|
83
|
+
win32ole_excel = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
|
85
84
|
excel = Excel.new(win32ole_excel)
|
86
85
|
excel.should be_a Excel
|
87
86
|
excel.should be_alive
|
@@ -91,7 +90,7 @@ module RobustExcelOle
|
|
91
90
|
it "lifts an Excel instance given as WIN32Ole object with options" do
|
92
91
|
@excel.Visible = true
|
93
92
|
@excel.DisplayAlerts = true
|
94
|
-
win32ole_excel = WIN32OLE.connect(@book.
|
93
|
+
win32ole_excel = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
|
95
94
|
excel = Excel.new(win32ole_excel)
|
96
95
|
excel.should be_a Excel
|
97
96
|
excel.should be_alive
|
@@ -403,7 +402,6 @@ module RobustExcelOle
|
|
403
402
|
@key_sender.close
|
404
403
|
end
|
405
404
|
|
406
|
-
|
407
405
|
it "should save if user answers 'yes'" do
|
408
406
|
@key_sender.puts "{enter}"
|
409
407
|
Excel.close_all(:if_unsaved => :alert)
|
@@ -807,7 +805,7 @@ module RobustExcelOle
|
|
807
805
|
# unsaved_workbooks yields different WIN32OLE objects than book.workbook
|
808
806
|
uw_names = []
|
809
807
|
excel.unsaved_workbooks.each {|uw| uw_names << uw.Name}
|
810
|
-
uw_names.should == [@book.
|
808
|
+
uw_names.should == [@book.ole_workbook.Name]
|
811
809
|
end
|
812
810
|
|
813
811
|
it "should list all unsaved workbooks" do
|
@@ -817,8 +815,8 @@ module RobustExcelOle
|
|
817
815
|
unsaved_workbooks.each {|uw| uw_names << uw.Name}
|
818
816
|
result << uw_names
|
819
817
|
end
|
820
|
-
result.include?([@book.
|
821
|
-
result.include?([@book2.
|
818
|
+
result.include?([@book.ole_workbook.Name]).should be_true
|
819
|
+
result.include?([@book2.ole_workbook.Name]).should be_true
|
822
820
|
end
|
823
821
|
|
824
822
|
end
|
@@ -837,7 +835,7 @@ module RobustExcelOle
|
|
837
835
|
workbook = @excel1.generate_workbook(@file_name)
|
838
836
|
workbook.should be_a WIN32OLE
|
839
837
|
workbook.Name.should == File.basename(@file_name)
|
840
|
-
workbook.FullName.should ==
|
838
|
+
workbook.FullName.should == General::absolute_path(@file_name)
|
841
839
|
workbook.Saved.should be_true
|
842
840
|
workbook.ReadOnly.should be_false
|
843
841
|
workbook.Sheets.Count.should == 3
|
@@ -849,7 +847,7 @@ module RobustExcelOle
|
|
849
847
|
workbook = @excel1.generate_workbook(@file_name)
|
850
848
|
workbook.should be_a WIN32OLE
|
851
849
|
workbook.Name.should == File.basename(@file_name)
|
852
|
-
workbook.FullName.should ==
|
850
|
+
workbook.FullName.should == General::absolute_path(@file_name)
|
853
851
|
workbook.Saved.should be_true
|
854
852
|
workbook.ReadOnly.should be_false
|
855
853
|
workbook.Sheets.Count.should == 3
|
@@ -866,7 +864,7 @@ module RobustExcelOle
|
|
866
864
|
workbook = @excel1.generate_workbook(@file_name)
|
867
865
|
workbook.should be_a WIN32OLE
|
868
866
|
workbook.Name.should == File.basename(@file_name)
|
869
|
-
workbook.FullName.should ==
|
867
|
+
workbook.FullName.should == General::absolute_path(@file_name)
|
870
868
|
workbook.Saved.should be_true
|
871
869
|
workbook.ReadOnly.should be_false
|
872
870
|
workbook.Sheets.Count.should == 3
|
@@ -0,0 +1,193 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), './spec_helper')
|
4
|
+
|
5
|
+
$VERBOSE = nil
|
6
|
+
|
7
|
+
include General
|
8
|
+
include RobustExcelOle
|
9
|
+
|
10
|
+
module RobustExcelOle
|
11
|
+
|
12
|
+
describe General do
|
13
|
+
|
14
|
+
before(:all) do
|
15
|
+
excel = Excel.new(:reuse => true)
|
16
|
+
open_books = excel == nil ? 0 : excel.Workbooks.Count
|
17
|
+
puts "*** open books *** : #{open_books}" if open_books > 0
|
18
|
+
Excel.kill_all
|
19
|
+
end
|
20
|
+
|
21
|
+
before do
|
22
|
+
@dir = create_tmpdir
|
23
|
+
@simple_file = @dir + '/workbook.xls'
|
24
|
+
@simple_save_file = @dir + '/workbook_save.xls'
|
25
|
+
@different_file = @dir + '/different_workbook.xls'
|
26
|
+
@simple_file_other_path = @dir + '/more_data/workbook.xls'
|
27
|
+
@another_simple_file = @dir + '/another_workbook.xls'
|
28
|
+
@linked_file = @dir + '/workbook_linked.xlsm'
|
29
|
+
@simple_file_xlsm = @dir + '/workbook.xls'
|
30
|
+
@simple_file_xlsx = @dir + '/workbook.xlsx'
|
31
|
+
end
|
32
|
+
|
33
|
+
after do
|
34
|
+
Excel.kill_all
|
35
|
+
rm_tmp(@dir)
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "methods, own_methods, respond_to?" do
|
39
|
+
|
40
|
+
before do
|
41
|
+
@book1 = Book.open(@simple_file)
|
42
|
+
@ole_workbook_methods =
|
43
|
+
["Activate", "ActiveSheet", "Application", "Close", "FullName", "HasPassword", "Name", "Names",
|
44
|
+
"Password", "Protect", "ProtectSharing", "ProtectStructure", "Protect", "ReadOnly", "Save",
|
45
|
+
"SaveAs", "Saved", "Sheets", "Unprotect"]
|
46
|
+
@book_methods = ["activate", "add_sheet", "alive?", "close", "filename", "nvalue", "ole_object",
|
47
|
+
"ole_workbook", "reopen", "save", "save_as", "saved", "set_nvalue"]
|
48
|
+
@ole_excel_methods =
|
49
|
+
["ActiveCell", "ActiveSheet", "ActiveWorkbook", "Application", "Calculate", "Cells", "Columns",
|
50
|
+
"DisplayAlerts", "Evaluate", "Hwnd", "Name", "Names", "Quit", "Range", "Ready", "Save",
|
51
|
+
"Sheets", "UserName", "Value", "Visible", "Workbooks", "Worksheets"]
|
52
|
+
@excel_methods = ["alive?", "book_class", "close", "displayalerts", "recreate", "visible", "with_displayalerts"]
|
53
|
+
end
|
54
|
+
|
55
|
+
after do
|
56
|
+
@book1.close
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should do methods for book" do
|
60
|
+
((@ole_workbook_methods + @book_methods) - @book1.methods).should be_empty
|
61
|
+
(Object.instance_methods.select{|m| m =~ /^(?!\_)/} - @book1.methods).should be_empty
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should do own_methods with popular ole_workbook and workbook methods" do
|
65
|
+
((@ole_workbook_methods + @book_methods) - @book1.own_methods).should be_empty
|
66
|
+
(Object.instance_methods - @book1.own_methods).should == Object.instance_methods
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should respond to popular workbook methods" do
|
70
|
+
@book_methods.each{|m| @book1.respond_to?(m).should be_true}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should do methods for excel" do
|
74
|
+
((@ole_excel_methods + @excel_methods) - @book1.excel.methods).should be_empty
|
75
|
+
(Object.instance_methods.select{|m| m =~ /^(?!\_)/} - @book1.excel.methods).sort.should be_empty
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should do own_methods with popular ole_excel and excel methods" do
|
79
|
+
((@ole_excel_methods + @excel_methods) - @book1.excel.own_methods).should be_empty
|
80
|
+
(Object.instance_methods - @book1.excel.own_methods).should == Object.instance_methods
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should respond to popular excel methods" do
|
84
|
+
@excel_methods.each{|m| @book1.excel.respond_to?(m).should be_true}
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#absolute_path" do
|
90
|
+
|
91
|
+
context "with standard" do
|
92
|
+
|
93
|
+
before do
|
94
|
+
@previous_dir = Dir.getwd
|
95
|
+
end
|
96
|
+
|
97
|
+
after do
|
98
|
+
Dir.chdir @previous_dir
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should return the right absolute paths" do
|
102
|
+
absolute_path("C:/abc").should == "C:\\abc"
|
103
|
+
absolute_path("C:\\abc").should == "C:\\abc"
|
104
|
+
Dir.chdir "C:/windows"
|
105
|
+
absolute_path("C:abc").downcase.should == Dir.pwd.gsub("/","\\").downcase + "\\abc"
|
106
|
+
absolute_path("C:abc").upcase.should == File.expand_path("abc").gsub("/","\\").upcase
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should return right absolute path name" do
|
110
|
+
filename = 'C:/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/spec/book_spec.rb'
|
111
|
+
absolute_path(filename).gsub("\\","/").should == filename
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "canonize" do
|
117
|
+
|
118
|
+
context "with standard" do
|
119
|
+
|
120
|
+
it "should reduce slash at the end" do
|
121
|
+
normalize("hallo/").should == "hallo"
|
122
|
+
normalize("/this/is/the/Path/").should == "/this/is/the/Path"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should save capital letters" do
|
126
|
+
normalize("HALLO/").should == "HALLO"
|
127
|
+
normalize("/This/IS/tHe/patH/").should == "/This/IS/tHe/patH"
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should reduce multiple shlashes" do
|
131
|
+
normalize("/this/is//the/path").should == "/this/is/the/path"
|
132
|
+
normalize("///this/////////is//the/path/////").should == "/this/is/the/path"
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should reduce dots in the paths" do
|
136
|
+
canonize("/this/is/./the/path").should == "/this/is/the/path"
|
137
|
+
canonize("this/.is/./the/pa.th/").should == "this/.is/the/pa.th"
|
138
|
+
canonize("this//.///.//.is/the/pa.th/").should == "this/.is/the/pa.th"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should change to the upper directory with two dots" do
|
142
|
+
canonize("/this/is/../the/path").should == "/this/the/path"
|
143
|
+
canonize("this../.i.s/.../..the/..../pa.th/").should == "this../.i.s/.../..the/..../pa.th"
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should downcase" do
|
147
|
+
canonize("/This/IS/tHe/path").should == "/this/is/the/path"
|
148
|
+
canonize("///THIS/.///./////iS//the/../PatH/////").should == "/this/is/path"
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should raise an error for no strings" do
|
152
|
+
expect{
|
153
|
+
canonize(1)
|
154
|
+
}.to raise_error(ExcelError, "No string given to canonize, but 1")
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "Object methods" do
|
161
|
+
|
162
|
+
before do
|
163
|
+
@book = Book.open(@simple_file)
|
164
|
+
@sheet = @book[0]
|
165
|
+
end
|
166
|
+
|
167
|
+
before do
|
168
|
+
@book.close
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should raise an error when asking excel of a sheet" do
|
172
|
+
expect{
|
173
|
+
@sheet.excel
|
174
|
+
}.to raise_error(ExcelError, "receiver instance is neither an Excel nor a Book")
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "trace" do
|
180
|
+
|
181
|
+
it "should put some number" do
|
182
|
+
a = 4
|
183
|
+
trace "some text #{a}"
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should put another text" do
|
187
|
+
a = 5
|
188
|
+
trace "another text #{a}"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
end
|