robust_excel_ole 1.35 → 1.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,6 +47,253 @@ describe Workbook do
47
47
  end
48
48
  end
49
49
 
50
+ describe "writable=" do
51
+
52
+ it "should change from writable to readonly back to writable" do
53
+ book = Workbook.open(@simple_file1)
54
+ book.ReadOnly.should be false
55
+ book.writable = true
56
+ book.ReadOnly.should be false
57
+ book.writable = false
58
+ book.ReadOnly.should be true
59
+ book.writable = true
60
+ book.ReadOnly.should be false
61
+ end
62
+
63
+ it "should change from readonly to writable back to readonly" do
64
+ book = Workbook.open(@simple_file1, read_only: true)
65
+ book.ReadOnly.should be true
66
+ book.writable = false
67
+ book.ReadOnly.should be true
68
+ book.writable = true
69
+ book.ReadOnly.should be false
70
+ book.writable = false
71
+ book.ReadOnly.should be true
72
+ end
73
+
74
+ it "should change read-only to writable mode for an unsaved workbook" do
75
+ book = Workbook.open(@simple_file1, read_only: true)
76
+ book.ReadOnly.should be true
77
+ sheet = book.sheet(1)
78
+ old_value = sheet[1,1]
79
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
80
+ new_value = sheet[1,1]
81
+ book.writable = false
82
+ book.ReadOnly.should be true
83
+ book.writable = true
84
+ book.ReadOnly.should be false
85
+ book.Saved.should be false
86
+ sheet[1,1].should == new_value
87
+ end
88
+
89
+ it "should save changes and change from read-only to writable with option :save" do
90
+ book = Workbook.open(@simple_file1, read_only: true)
91
+ book.ReadOnly.should be true
92
+ sheet = book.sheet(1)
93
+ old_value = sheet[1,1]
94
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
95
+ new_value = sheet[1,1]
96
+ book.writable = true, {if_unsaved: :save}
97
+ book.ReadOnly.should be false
98
+ book.Saved.should be true
99
+ sheet[1,1].should_not == old_value
100
+ sheet[1,1].should == new_value
101
+ end
102
+
103
+ it "should discard changes and change from read-only to writable with option :forget" do
104
+ book = Workbook.open(@simple_file1, read_only: true)
105
+ book.ReadOnly.should be true
106
+ sheet = book.sheet(1)
107
+ old_value = sheet[1,1]
108
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
109
+ new_value = sheet[1,1]
110
+ book.writable = true, {if_unsaved: :forget}
111
+ book.ReadOnly.should be false
112
+ book.close
113
+ book2 = Workbook.open(@simple_file1)
114
+ sheet2 = book2.sheet(1)
115
+ sheet2[1,1].should == old_value
116
+ sheet2[1,1].should_not == new_value
117
+ end
118
+
119
+ it "should raise error when tying to change writable to read-only mode for an unsaved workbook with option :raise" do
120
+ book = Workbook.open(@simple_file1, read_only: false)
121
+ book.ReadOnly.should be false
122
+ sheet = book.sheet(1)
123
+ old_value = sheet[1,1]
124
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
125
+ new_value = sheet[1,1]
126
+ book.writable = true
127
+ book.ReadOnly.should be false
128
+ expect{
129
+ book.writable = false, {if_unsaved: :raise}
130
+ }.to raise_error(WorkbookNotSaved)
131
+ end
132
+
133
+ it "should save changes and change from writable to read-only with option :save" do
134
+ book = Workbook.open(@simple_file1, read_only: false)
135
+ book.ReadOnly.should be false
136
+ sheet = book.sheet(1)
137
+ old_value = sheet[1,1]
138
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
139
+ new_value = sheet[1,1]
140
+ book.writable = false, {if_unsaved: :save}
141
+ book.ReadOnly.should be true
142
+ sheet[1,1].should_not == old_value
143
+ sheet[1,1].should == new_value
144
+ end
145
+
146
+ it "should discard changes and change from writable to read-only with option :forget" do
147
+ book = Workbook.open(@simple_file1, read_only: false)
148
+ book.ReadOnly.should be false
149
+ sheet = book.sheet(1)
150
+ old_value = sheet[1,1]
151
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
152
+ new_value = sheet[1,1]
153
+ book.writable = false, {if_unsaved: :forget}
154
+ book.ReadOnly.should be true
155
+ book.close
156
+ book2 = Workbook.open(@simple_file1)
157
+ sheet2 = book2.sheet(1)
158
+ sheet2[1,1].should == old_value
159
+ sheet2[1,1].should_not == new_value
160
+ end
161
+
162
+ context "with :if_unsaved => :excel or :alert and from read-only to read-write" do
163
+
164
+ before do
165
+ @book = Workbook.open(@simple_file1, v: true, readonly: true)
166
+ @book.ReadOnly.should be false
167
+ @sheet = @book.sheet(1)
168
+ @old_value = @sheet[1,1]
169
+ @sheet[1,1] = (@sheet[1,1] == "foo" ? "bar" : "foo")
170
+ @new_value = @sheet[1,1]
171
+ @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
172
+ end
173
+
174
+ after do
175
+ @key_sender.close
176
+ end
177
+
178
+ # question to the user, whether the workbook shall be reopened and discard any changes
179
+
180
+ it "should discard changes and reopen the workbook, if user answers 'yes'" do
181
+ @key_sender.puts "{enter}"
182
+ @book.writable = true, {if_unsaved: :excel}
183
+ @book.ReadOnly.should be false
184
+ @book.Saved.should be false
185
+ @sheet[1,1].should == @new_value
186
+ @book.close(if_unsaved: :forget)
187
+ book1 = Workbook.open(@simple_file1)
188
+ sheet = book1.sheet(1)
189
+ sheet[1,1].should == @old_value
190
+ end
191
+
192
+ it "should not discard changes and reopen the workbook, if user answers 'no'" do
193
+ # "No" is right to "Yes" (the default). --> language independent
194
+ # strangely, in the "no" case, the question will sometimes be repeated three times
195
+ #@book.excel.Visible = true
196
+ @key_sender.puts "{right}{enter}"
197
+ @key_sender.puts "{right}{enter}"
198
+ @key_sender.puts "{right}{enter}"
199
+ @book.writable = true, {if_unsaved: :excel}
200
+ @book.ReadOnly.should be false
201
+ @book.Saved.should be false
202
+ @sheet[1,1].should == @new_value
203
+ @book.close(if_unsaved: :forget)
204
+ book1 = Workbook.open(@simple_file1)
205
+ sheet = book1.sheet(1)
206
+ sheet[1,1].should == @old_value
207
+ end
208
+
209
+ end
210
+
211
+ context "with :if_unsaved => :excel or :alert and from writable to read-only" do
212
+
213
+ before do
214
+ @book = Workbook.open(@simple_file1, v: true, readonly: false)
215
+ @book.ReadOnly.should be false
216
+ @sheet = @book.sheet(1)
217
+ @old_value = @sheet[1,1]
218
+ @sheet[1,1] = (@sheet[1,1] == "foo" ? "bar" : "foo")
219
+ @new_value = @sheet[1,1]
220
+ @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
221
+ end
222
+
223
+ after do
224
+ @key_sender.close
225
+ end
226
+
227
+ # question to the user, whether to save the changes before changing read-only mode
228
+ it "should save the workbook, if user answers 'no' and 'yes'" do
229
+ # "No" is right to "Yes" (the default). --> language independent
230
+ @key_sender.puts "{right}{enter}"
231
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
232
+ # "No" is right to "Yes" (the default). --> language independent
233
+ @key_sender.puts "{right}{enter}"
234
+ @key_sender.puts "{right}{enter}"
235
+ @key_sender.puts "{right}{enter}"
236
+ # 3rd question whether the workbook shall be saved
237
+ # "Yes"
238
+ @key_sender.puts "{enter}"
239
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
240
+ book2.ReadOnly.should be true
241
+ book2.Saved.should be false
242
+ @sheet[1,1].should == @new_value
243
+ book2.close(if_unsaved: :forget)
244
+ book3 = Workbook.open(@simple_file1)
245
+ sheet3 = book3.sheet(1)
246
+ sheet3[1,1].should == @old_value
247
+ end
248
+
249
+ it "should discard (not save) the workbook, if user answers 'no' and 'no'" do
250
+ # "No" is right to "Yes" (the default). --> language independent
251
+ @key_sender.puts "{right}{enter}"
252
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
253
+ # "No" is right to "Yes" (the default). --> language independent
254
+ @key_sender.puts "{right}{enter}"
255
+ @key_sender.puts "{right}{enter}"
256
+ @key_sender.puts "{right}{enter}"
257
+ # 3rd question whether the workbook shall be saved
258
+ # "No"
259
+ @key_sender.puts "{right}{enter}"
260
+ @key_sender.puts "{right}{enter}"
261
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
262
+ book2.ReadOnly.should be true
263
+ book2.Saved.should be false
264
+ @sheet[1,1].should == @new_value
265
+ book2.close(if_unsaved: :forget)
266
+ book3 = Workbook.open(@simple_file1)
267
+ sheet3 = book3.sheet(1)
268
+ sheet3[1,1].should == @old_value
269
+ end
270
+
271
+ it "should not save (discard) changes and not reopen the workbook, if user answers 'no' and 'cancel'" do
272
+ # "No" is right to "Yes" (the default). --> language independent
273
+ @key_sender.puts "{right}{enter}"
274
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
275
+ # "No" is right to "Yes" (the default). --> language independent
276
+ @key_sender.puts "{right}{enter}"
277
+ @key_sender.puts "{right}{enter}"
278
+ @key_sender.puts "{right}{enter}"
279
+ # 3rd question whether the workbook shall be saved
280
+ # "Cancel"
281
+ @key_sender.puts "{right}{right}{enter}"
282
+ @key_sender.puts "{right}{right}{enter}"
283
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
284
+ book2.ReadOnly.should be true
285
+ book2.Saved.should be false
286
+ @sheet[1,1].should == @new_value
287
+ book2.close(if_unsaved: :forget)
288
+ book3 = Workbook.open(@simple_file1, if_unsaved: :forget)
289
+ sheet3 = book3.sheet(1)
290
+ sheet3[1,1].should == @old_value
291
+ end
292
+
293
+ end
294
+
295
+ end
296
+
50
297
  describe "for_this_workbook" do
51
298
 
52
299
  before do
@@ -728,10 +975,10 @@ describe Workbook do
728
975
  }.to_not raise_error
729
976
  expect {
730
977
  @book1.namevalue_global("foo", :default => :__not_provided)
731
- }.to raise_error(NameNotFound, /name "foo" not in #<Workbook: another_workbook/)
978
+ }.to raise_error(NameNotFound, /cannot find name "foo"/)
732
979
  expect {
733
980
  @book1.namevalue_global("foo")
734
- }.to raise_error(NameNotFound, /name "foo" not in #<Workbook: another_workbook/)
981
+ }.to raise_error(NameNotFound, /cannot find name "foo"/)
735
982
  @book1.namevalue_global("foo", :default => nil).should be_nil
736
983
  @book1.namevalue_global("foo", :default => 1).should == 1
737
984
  expect {
@@ -35,13 +35,13 @@ describe Workbook do
35
35
  @simple_file_network_path = "N:/data/workbook.xls"
36
36
  network = WIN32OLE.new('WScript.Network')
37
37
  computer_name = network.ComputerName
38
- @simple_file_hostname_share_path = "//#{computer_name}/#{absolute_path('spec/data/workbook.xls').tr('\\','/').gsub('C:','c$')}"
38
+ @simple_file_hostname_share_path = "//#{computer_name}/spec/data/workbook.xls"
39
+ @simple_file_hostname_share_other_path = "//#{computer_name}/spec/more_data/workbook.xls"
39
40
  @simple_file_network_path_other_path = "N:/data/more_data/workbook.xls"
40
- @simple_file_hostname_share_path_other_path = "//#{computer_name}/#{absolute_path('spec/more_data/workbook.xls').tr('\\','/').gsub('C:','c$')}"
41
41
  @simple_file_network_path1 = @simple_file_network_path
42
42
  @simple_file_hostname_share_path1 = @simple_file_hostname_share_path
43
43
  @simple_file_network_path_other_path1 = @simple_file_network_path_other_path
44
- @simple_file_hostname_share_path_other_path1 = @simple_file_hostname_share_path_other_path
44
+ @simple_file_hostname_share_other_path1 = @simple_file_hostname_share_other_path
45
45
  @simple_file_xlsm1 = @simple_file_xlsm
46
46
  @simple_file_xlsx1 = @simple_file_xlsx
47
47
  #@linked_file = @dir + '/workbook_linked.xlsm'
@@ -56,6 +56,289 @@ describe Workbook do
56
56
  rm_tmp(@dir)
57
57
  end
58
58
 
59
+ describe "changing ReadOnly mode" do
60
+
61
+ it "should change from writable to readonly back to writable" do
62
+ book = Workbook.open(@simple_file1)
63
+ book.ReadOnly.should be false
64
+ book2 = Workbook.open(@simple_file1, read_only: true)
65
+ book2.should == book
66
+ book2.ReadOnly.should be true
67
+ book3 = Workbook.open(@simple_file1, read_only: false)
68
+ book3.should == book
69
+ book3.ReadOnly.should be false
70
+ book3.close
71
+ end
72
+
73
+ it "should change from readonly to writable back to readonly" do
74
+ book = Workbook.open(@simple_file1, read_only: true)
75
+ book.ReadOnly.should be true
76
+ book2 = Workbook.open(@simple_file1, read_only: false)
77
+ book2.should == book
78
+ book2.ReadOnly.should be false
79
+ book3 = Workbook.open(@simple_file1, read_only: true)
80
+ book3.should == book
81
+ book3.ReadOnly.should be true
82
+ book3.close
83
+ end
84
+
85
+ it "should raise error when read-only workbook unsaved and trying to reopen workbook writable by default" do
86
+ book = Workbook.open(@simple_file1, read_only: true)
87
+ book.ReadOnly.should be true
88
+ sheet = book.sheet(1)
89
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
90
+ expect{
91
+ Workbook.open(@simple_file1, read_only: false)
92
+ }.to raise_error(WorkbookNotSaved)
93
+ end
94
+
95
+ it "should raise error when read-only workbook unsaved and trying to reopen workbook writable with option :raise" do
96
+ book = Workbook.open(@simple_file1, read_only: true)
97
+ book.ReadOnly.should be true
98
+ sheet = book.sheet(1)
99
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
100
+ expect{
101
+ Workbook.open(@simple_file1, read_only: false, if_unsaved: :raise)
102
+ }.to raise_error(WorkbookNotSaved)
103
+ end
104
+
105
+ it "should save changes and change from read-only to writable with option :save" do
106
+ book = Workbook.open(@simple_file1, read_only: true)
107
+ book.ReadOnly.should be true
108
+ sheet = book.sheet(1)
109
+ old_value = sheet[1,1]
110
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
111
+ new_value = sheet[1,1]
112
+ book2 = Workbook.open(@simple_file1, if_unsaved: :save, read_only: false)
113
+ book2.should == book
114
+ book2.ReadOnly.should be false
115
+ sheet[1,1].should_not == old_value
116
+ sheet[1,1].should == new_value
117
+ end
118
+
119
+ it "should discard changes and change from read-only to writable with options :forget" do
120
+ book = Workbook.open(@simple_file1, read_only: true)
121
+ book.ReadOnly.should be true
122
+ sheet = book.sheet(1)
123
+ old_value = sheet[1,1]
124
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
125
+ new_value = sheet[1,1]
126
+ book2 = Workbook.open(@simple_file1, if_unsaved: :forget, read_only: false)
127
+ book2.ReadOnly.should be false
128
+ book2.close
129
+ book3 = Workbook.open(@simple_file1)
130
+ sheet3 = book3.sheet(1)
131
+ sheet3[1,1].should == old_value
132
+ sheet3[1,1].should_not == new_value
133
+ end
134
+
135
+
136
+ it "should raise error when writable workbook unsaved and trying to reopen workbook read-only by default" do
137
+ book = Workbook.open(@simple_file1, read_only: false)
138
+ book.ReadOnly.should be false
139
+ sheet = book.sheet(1)
140
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
141
+ expect{
142
+ Workbook.open(@simple_file1, read_only: true)
143
+ }.to raise_error(WorkbookNotSaved)
144
+ end
145
+
146
+ it "should raise error when writable workbook unsaved and trying to reopen workbook read-only with option :raise" do
147
+ book = Workbook.open(@simple_file1, read_only: false)
148
+ book.ReadOnly.should be false
149
+ sheet = book.sheet(1)
150
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
151
+ expect{
152
+ Workbook.open(@simple_file1, read_only: true, if_unsaved: :raise)
153
+ }.to raise_error(WorkbookNotSaved)
154
+ end
155
+
156
+ it "should save changes and change from writable to read-only with option :save" do
157
+ book = Workbook.open(@simple_file1, read_only: false)
158
+ book.ReadOnly.should be false
159
+ sheet = book.sheet(1)
160
+ old_value = sheet[1,1]
161
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
162
+ new_value = sheet[1,1]
163
+ book2 = Workbook.open(@simple_file1, if_unsaved: :save, read_only: true)
164
+ book2.should == book
165
+ book2.ReadOnly.should be true
166
+ sheet[1,1].should_not == old_value
167
+ sheet[1,1].should == new_value
168
+ end
169
+
170
+ it "should discard changes and change from writable to read-only with options :forget" do
171
+ book = Workbook.open(@simple_file1, read_only: false)
172
+ book.ReadOnly.should be false
173
+ sheet = book.sheet(1)
174
+ old_value = sheet[1,1]
175
+ sheet[1,1] = (sheet[1,1] == "foo" ? "bar" : "foo")
176
+ new_value = sheet[1,1]
177
+ book2 = Workbook.open(@simple_file1, if_unsaved: :forget, read_only: true)
178
+ book2.should == book
179
+ book2.ReadOnly.should be true
180
+ book2.close
181
+ book3 = Workbook.open(@simple_file1)
182
+ sheet3 = book3.sheet(1)
183
+ sheet3[1,1].should == old_value
184
+ sheet3[1,1].should_not == new_value
185
+ end
186
+
187
+ context "with :if_unsaved => :excel or :alert and from read-only to writable" do
188
+
189
+ before do
190
+ @book = Workbook.open(@simple_file1, v: true, readonly: true)
191
+ @book.ReadOnly.should be false
192
+ @sheet = @book.sheet(1)
193
+ @old_value = @sheet[1,1]
194
+ @sheet[1,1] = (@sheet[1,1] == "foo" ? "bar" : "foo")
195
+ @new_value = @sheet[1,1]
196
+ @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
197
+ end
198
+
199
+ after do
200
+ @key_sender.close
201
+ end
202
+
203
+ # question to the user, whether the workbook shall be reopened and discard any changes
204
+ it "should discard changes and reopen the workbook, if user answers 'yes'" do
205
+ @key_sender.puts "{enter}"
206
+ book2 = Workbook.open(@simple_file1, read_only: false, if_unsaved: :excel)
207
+ book2.ReadOnly.should be false
208
+ book2.Saved.should be true
209
+ book2.sheet(1)[1,1].should == @old_value
210
+ book2.close
211
+ book3 = Workbook.open(@simple_file1)
212
+ sheet3 = book3.sheet(1)
213
+ sheet3[1,1].should == @old_value
214
+ end
215
+
216
+ it "should not discard changes and reopen the workbook, if user answers 'no'" do
217
+ # "No" is right to "Yes" (the default). --> language independent
218
+ # strangely, in the "no" case, the question will sometimes be repeated three times
219
+ #@book.excel.Visible = true
220
+ @key_sender.puts "{right}{enter}"
221
+ @key_sender.puts "{right}{enter}"
222
+ @key_sender.puts "{right}{enter}"
223
+ book2 = Workbook.open(@simple_file1, read_only: false, if_unsaved: :excel)
224
+ book2.ReadOnly.should be false
225
+ book2.Saved.should be false
226
+ book2.sheet(1)[1,1].should == @new_value
227
+ book2.close(if_unsaved: :forget)
228
+ book3 = Workbook.open(@simple_file1)
229
+ sheet3 = book3.sheet(1)
230
+ sheet3[1,1].should == @old_value
231
+ end
232
+
233
+ end
234
+
235
+ context "with :if_unsaved => :excel or :alert and from writable to read-only" do
236
+
237
+ before do
238
+ Excel.kill_all
239
+ sleep 1
240
+ @book = Workbook.open(@simple_file1, v: true, readonly: false)
241
+ @book.ReadOnly.should be false
242
+ @sheet = @book.sheet(1)
243
+ @old_value = @sheet[1,1]
244
+ @sheet[1,1] = (@sheet[1,1] == "foo" ? "bar" : "foo")
245
+ @new_value = @sheet[1,1]
246
+ @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '../helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
247
+ end
248
+
249
+ after do
250
+ @key_sender.close
251
+ end
252
+
253
+ # question to the user, whether to save the changes before changing read-only mode
254
+ it "should discard changes and reopen the workbook, if user answers 'yes'" do
255
+ @key_sender.puts "{enter}"
256
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
257
+ book2.ReadOnly.should be true
258
+ book2.Saved.should be true
259
+ book2.sheet(1)[1,1].should == @new_value
260
+ book2.close
261
+ book3 = Workbook.open(@simple_file1)
262
+ sheet3 = book3.sheet(1)
263
+ sheet3[1,1].should == @new_value
264
+ end
265
+
266
+ it "should save the workbook, if user answers 'no' and 'yes'" do
267
+ # "No" is right to "Yes" (the default). --> language independent
268
+ @key_sender.puts "{right}{enter}"
269
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
270
+ # "No" is right to "Yes" (the default). --> language independent
271
+ @key_sender.puts "{right}{enter}"
272
+ @key_sender.puts "{right}{enter}"
273
+ @key_sender.puts "{right}{enter}"
274
+ # 3rd question whether the workbook shall be saved
275
+ # "Yes"
276
+ @key_sender.puts "{enter}"
277
+ @key_sender.puts "{enter}"
278
+ # another question: asking the user to save the workbook as a copy
279
+ # so far no automatic key response here
280
+
281
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
282
+ book2.ReadOnly.should be true
283
+ book2.Saved.should be false
284
+ book2.sheet(1)[1,1].should == @new_value
285
+ book2.close(if_unsaved: :forget)
286
+ book3 = Workbook.open(@simple_file1)
287
+ sheet3 = book3.sheet(1)
288
+ sheet3[1,1].should == @old_value
289
+ end
290
+
291
+
292
+ it "should discard (not save) the workbook, if user answers 'no' and 'no'" do
293
+ # "No" is right to "Yes" (the default). --> language independent
294
+ @key_sender.puts "{right}{enter}"
295
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
296
+ # "No" is right to "Yes" (the default). --> language independent
297
+ @key_sender.puts "{right}{enter}"
298
+ @key_sender.puts "{right}{enter}"
299
+ @key_sender.puts "{right}{enter}"
300
+ # 3rd question whether the workbook shall be saved
301
+ # "No"
302
+ @key_sender.puts "{right}{enter}"
303
+ @key_sender.puts "{right}{enter}"
304
+ @key_sender.puts "{right}{enter}"
305
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
306
+ book2.ReadOnly.should be true
307
+ book2.Saved.should be false
308
+ book2.sheet(1)[1,1].should == @new_value
309
+ book2.close(if_unsaved: :forget)
310
+ book3 = Workbook.open(@simple_file1)
311
+ sheet3 = book3.sheet(1)
312
+ sheet3[1,1].should == @old_value
313
+ end
314
+
315
+ it "should not save (discard) changes and not reopen the workbook, if user answers 'no' and 'cancel'" do
316
+ # "No" is right to "Yes" (the default). --> language independent
317
+ @key_sender.puts "{right}{enter}"
318
+ # 2nd question to the user: whether the workbook shall be reopened and discard any changes
319
+ # "No" is right to "Yes" (the default). --> language independent
320
+ @key_sender.puts "{right}{enter}"
321
+ @key_sender.puts "{right}{enter}"
322
+ @key_sender.puts "{right}{enter}"
323
+ # 3rd question whether the workbook shall be saved
324
+ # "Cancel"
325
+ @key_sender.puts "{right}{right}{enter}"
326
+ @key_sender.puts "{right}{right}{enter}"
327
+ @key_sender.puts "{right}{right}{enter}"
328
+ book2 = Workbook.open(@simple_file1, read_only: true, if_unsaved: :excel)
329
+ book2.ReadOnly.should be true
330
+ book2.Saved.should be false
331
+ book2.sheet(1)[1,1].should == @new_value
332
+ book2.close(if_unsaved: :forget)
333
+ book3 = Workbook.open(@simple_file1, if_unsaved: :forget)
334
+ sheet3 = book3.sheet(1)
335
+ sheet3[1,1].should == @old_value
336
+ end
337
+
338
+ end
339
+
340
+ end
341
+
59
342
  describe "linked workbooks" do
60
343
 
61
344
  context "standard" do
@@ -88,9 +371,8 @@ describe Workbook do
88
371
  end
89
372
 
90
373
  it "should raise error when trying to change the read-only mode of the linked workbook" do
91
- expect{
92
- Workbook.open(@sub_file, :read_only => true)
93
- }.to raise_error(WorkbookReadOnly, /could not change read-only mode/)
374
+ book2 = Workbook.open(@sub_file, :read_only => true)
375
+ book2.ReadOnly.should be true
94
376
  end
95
377
  end
96
378
  end
@@ -396,12 +678,12 @@ describe Workbook do
396
678
  it "should raise an WorkbookBlockederror" do
397
679
  book1 = Workbook.open(@simple_file_hostname_share_path1)
398
680
  expect{
399
- Workbook.open(@simple_file_hostname_share_path_other_path1)
681
+ Workbook.open(@simple_file_hostname_share_other_path1)
400
682
  }.to raise_error(WorkbookBlocked)
401
683
  end
402
684
 
403
685
  it "should raise an WorkbookBlockederror" do
404
- book1 = Workbook.open(@simple_file_hostname_share_path_other_path1)
686
+ book1 = Workbook.open(@simple_file_hostname_share_other_path1)
405
687
  expect{
406
688
  Workbook.open(@simple_file_hostname_share_path1)
407
689
  }.to raise_error(WorkbookBlocked)
@@ -415,7 +697,7 @@ describe Workbook do
415
697
  end
416
698
 
417
699
  it "should raise an WorkbookBlockederror" do
418
- book1 = Workbook.open(@simple_file_hostname_share_path_other_path1)
700
+ book1 = Workbook.open(@simple_file_hostname_share_other_path1)
419
701
  expect{
420
702
  Workbook.open(@simple_file_network_path1)
421
703
  }.to raise_error(WorkbookBlocked)
@@ -424,7 +706,7 @@ describe Workbook do
424
706
  it "should raise an WorkbookBlockederror" do
425
707
  book1 = Workbook.open(@simple_file_network_path1)
426
708
  expect{
427
- Workbook.open(@simple_file_hostname_share_path_other_path1)
709
+ Workbook.open(@simple_file_hostname_share_other_path1)
428
710
  }.to raise_error(WorkbookBlocked)
429
711
  end
430
712
 
@@ -572,14 +854,14 @@ describe Workbook do
572
854
  abs_filename = General.absolute_path(@simple_file_hostname_share_path1)
573
855
  @ole_wb = ws.Open(abs_filename)
574
856
  expect{
575
- Workbook.open(@simple_file_hostname_share_path_other_path1)
857
+ Workbook.open(@simple_file_hostname_share_other_path1)
576
858
  }.to raise_error(WorkbookBlocked)
577
859
  end
578
860
 
579
861
  it "should raise WorkbookBlocked error" do
580
862
  ole_e1 = WIN32OLE.new('Excel.Application')
581
863
  ws = ole_e1.Workbooks
582
- abs_filename = General.absolute_path(@simple_file_hostname_share_path_other_path1)
864
+ abs_filename = General.absolute_path(@simple_file_hostname_share_other_path1)
583
865
  @ole_wb = ws.Open(abs_filename)
584
866
  expect{
585
867
  Workbook.open(@simple_file_hostname_share_path1)
@@ -612,14 +894,14 @@ describe Workbook do
612
894
  abs_filename = General.absolute_path(@simple_file_network_path1)
613
895
  @ole_wb = ws.Open(abs_filename)
614
896
  expect{
615
- Workbook.open(@simple_file_hostname_share_path_other_path1)
897
+ Workbook.open(@simple_file_hostname_share_other_path1)
616
898
  }.to raise_error(WorkbookBlocked)
617
899
  end
618
900
 
619
901
  it "should raise WorkbookBlocked error" do
620
902
  ole_e1 = WIN32OLE.new('Excel.Application')
621
903
  ws = ole_e1.Workbooks
622
- abs_filename = General.absolute_path(@simple_file_hostname_share_path_other_path1)
904
+ abs_filename = General.absolute_path(@simple_file_hostname_share_other_path1)
623
905
  @ole_wb = ws.Open(abs_filename)
624
906
  expect{
625
907
  Workbook.open(@simple_file_network_path1)
@@ -902,7 +1184,7 @@ describe Workbook do
902
1184
  book2 = book1
903
1185
  book1.close(:if_unsaved => :forget)
904
1186
  book1.should_not be_alive
905
- book1.reopen
1187
+ book1.open
906
1188
  book1.should be_a Workbook
907
1189
  book1.should be_alive
908
1190
  book1.should === book2
@@ -2734,6 +3016,15 @@ describe Workbook do
2734
3016
  old_book.sheet(1)[1,1].should == @old_value
2735
3017
  end
2736
3018
 
3019
+ it "should let the old book open, if :if_obstructed is :accept" do
3020
+ new_book = Workbook.open(@simple_file1, :if_obstructed => :accept)
3021
+ @book.should be_alive
3022
+ new_book.should be_alive
3023
+ new_book.filename.downcase.should == @simple_file_other_path1.downcase
3024
+ old_book = Workbook.open(@simple_file_other_path1, :if_unsaved => :forget)
3025
+ old_book.sheet(1)[1,1].should == @old_value
3026
+ end
3027
+
2737
3028
  it "should save the old book, close it, and open the new book, if :if_obstructed is :save" do
2738
3029
  new_book = Workbook.open(@simple_file1, :if_obstructed => :save)
2739
3030
  @book.should_not be_alive
@@ -3082,7 +3373,7 @@ describe Workbook do
3082
3373
  book1 = @book
3083
3374
  @book.close
3084
3375
  @book.should_not be_alive
3085
- @book.reopen
3376
+ @book.open
3086
3377
  @book.should be_a Workbook
3087
3378
  @book.should be_alive
3088
3379
  @book.should === book1