rasta 0.1.8-x86-mswin32-60
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/LICENSE.txt +32 -0
- data/README.txt +15 -0
- data/bin/rasta +4 -0
- data/examples/crud_worksheet.xls +0 -0
- data/examples/fixtures/ColumnLayout.rb +34 -0
- data/examples/fixtures/HtmlRegistration.rb +103 -0
- data/examples/fixtures/MathFunctions.rb +21 -0
- data/examples/fixtures/StringFunctions.rb +18 -0
- data/examples/fixtures/crud/CrudClass.rb +62 -0
- data/examples/fixtures/crud/CrudFixture.rb +37 -0
- data/examples/html/registration.html +102 -0
- data/examples/rasta_fixture.xls +0 -0
- data/examples/tests_in_column_layout.xls +0 -0
- data/examples/watir_example.xls +0 -0
- data/lib/rasta/extensions/rspec_extensions.rb +174 -0
- data/lib/rasta/fixture/base_fixture.rb +138 -0
- data/lib/rasta/fixture/rasta_fixture.rb +183 -0
- data/lib/rasta/fixture_runner.rb +195 -0
- data/lib/rasta/formatter/spreadsheet_formatter.rb +32 -0
- data/lib/rasta/spreadsheet.rb +528 -0
- data/lib/rasta/version.rb +9 -0
- data/lib/rasta.rb +198 -0
- data/test/fixtures/RastaTestFixture.rb +9 -0
- data/test/spreadsheets/rasta_fixture.xls +0 -0
- data/test/spreadsheets/spreadsheet_parsing.xls +0 -0
- data/test/test_bookmarks.rb +138 -0
- data/test/test_fixtures.rb +66 -0
- data/test/test_spreadsheet.rb +337 -0
- metadata +98 -0
@@ -0,0 +1,337 @@
|
|
1
|
+
TOPDIR = File.join(File.dirname(__FILE__), '..')
|
2
|
+
$LOAD_PATH.unshift File.expand_path(TOPDIR)
|
3
|
+
|
4
|
+
|
5
|
+
require 'spec'
|
6
|
+
require 'lib/rasta/spreadsheet'
|
7
|
+
|
8
|
+
TESTFILE = TOPDIR + '/test/spreadsheets/spreadsheet_parsing.xls'
|
9
|
+
|
10
|
+
describe "Book Initialization" do
|
11
|
+
it 'should populate the Excel Constants' do
|
12
|
+
# Do this test first or the constants get loaded by Book.new
|
13
|
+
Rasta::Spreadsheet::ExcelConst.constants.should == []
|
14
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
15
|
+
Rasta::Spreadsheet::ExcelConst.constants.should_not == []
|
16
|
+
end
|
17
|
+
it 'should fail if file not specified' do
|
18
|
+
lambda {
|
19
|
+
book = Rasta::Spreadsheet::Book.new()
|
20
|
+
}.should raise_error
|
21
|
+
end
|
22
|
+
it 'should fail if file not found' do
|
23
|
+
lambda {
|
24
|
+
book = Rasta::Spreadsheet::Book.new('examples/invalid_file_name')
|
25
|
+
}.should raise_error
|
26
|
+
end
|
27
|
+
it 'should initialize properly with valid filename' do
|
28
|
+
lambda {
|
29
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
30
|
+
}.should_not raise_error
|
31
|
+
end
|
32
|
+
it 'should have default options set' do
|
33
|
+
excel = Rasta::Spreadsheet::Excel.instance
|
34
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
35
|
+
excel.visible.should be_false
|
36
|
+
excel.continue.should be_false
|
37
|
+
end
|
38
|
+
it 'should handle passed options' do
|
39
|
+
excel = Rasta::Spreadsheet::Excel.instance
|
40
|
+
excel.continue = 'test'
|
41
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
42
|
+
excel.visible.should be_false
|
43
|
+
excel.continue.should == 'test'
|
44
|
+
excel.continue = false
|
45
|
+
end
|
46
|
+
it 'should have have a method for returning the filename' do
|
47
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
48
|
+
book.filename.should == TESTFILE
|
49
|
+
end
|
50
|
+
it 'should return an ole_object for the workbook' do
|
51
|
+
book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
52
|
+
book.ole_object.class.should == WIN32OLE
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'SpreadsheetTab', :shared => true do
|
57
|
+
before(:all) do
|
58
|
+
@book = Rasta::Spreadsheet::Book.new(TESTFILE)
|
59
|
+
@sheet = nil
|
60
|
+
end
|
61
|
+
after(:all) do
|
62
|
+
Rasta::Spreadsheet::Excel.instance.cleanup
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'BasicStyles', :shared => true do
|
67
|
+
it_should_behave_like 'SpreadsheetTab'
|
68
|
+
it 'should locate the headers' do
|
69
|
+
@sheet.headers.should == ['a','b']
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'Sheet style :col (1)' do
|
74
|
+
it_should_behave_like 'BasicStyles'
|
75
|
+
before(:each) do
|
76
|
+
@sheet = @book['ColStyle.1']
|
77
|
+
end
|
78
|
+
it 'should find the data range' do
|
79
|
+
@sheet.firstrow.should == 2
|
80
|
+
@sheet.firstcol.should == 1
|
81
|
+
@sheet.lastrow.should == 7
|
82
|
+
@sheet.lastcol.should == 2
|
83
|
+
end
|
84
|
+
end
|
85
|
+
describe 'Sheet style :col (2)' do
|
86
|
+
it_should_behave_like 'BasicStyles'
|
87
|
+
before(:each) do
|
88
|
+
@sheet = @book['ColStyle.2']
|
89
|
+
end
|
90
|
+
it 'should find the data range' do
|
91
|
+
@sheet.firstrow.should == 2
|
92
|
+
@sheet.firstcol.should == 2
|
93
|
+
@sheet.lastrow.should == 7
|
94
|
+
@sheet.lastcol.should == 3
|
95
|
+
end
|
96
|
+
end
|
97
|
+
describe 'Sheet style :col (3)' do
|
98
|
+
it_should_behave_like 'BasicStyles'
|
99
|
+
before(:each) do
|
100
|
+
@sheet = @book['ColStyle.3']
|
101
|
+
end
|
102
|
+
it 'should find the data range' do
|
103
|
+
@sheet.firstrow.should == 2
|
104
|
+
@sheet.firstcol.should == 1
|
105
|
+
@sheet.lastrow.should == 7
|
106
|
+
@sheet.lastcol.should == 2
|
107
|
+
end
|
108
|
+
end
|
109
|
+
describe 'Sheet style :col (4)' do
|
110
|
+
it_should_behave_like 'BasicStyles'
|
111
|
+
before(:each) do
|
112
|
+
@sheet = @book['ColStyle.4']
|
113
|
+
end
|
114
|
+
it 'should find the data range' do
|
115
|
+
@sheet.firstrow.should == 2
|
116
|
+
@sheet.firstcol.should == 2
|
117
|
+
@sheet.lastrow.should == 7
|
118
|
+
@sheet.lastcol.should == 3
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'Sheet style :row (1)' do
|
123
|
+
it_should_behave_like 'BasicStyles'
|
124
|
+
before(:each) do
|
125
|
+
@sheet = @book['RowStyle.1']
|
126
|
+
end
|
127
|
+
it 'should find the data range' do
|
128
|
+
@sheet.firstrow.should == 1
|
129
|
+
@sheet.firstcol.should == 2
|
130
|
+
@sheet.lastrow.should == 2
|
131
|
+
@sheet.lastcol.should == 7
|
132
|
+
end
|
133
|
+
end
|
134
|
+
describe 'Sheet style :row (2)' do
|
135
|
+
it_should_behave_like 'BasicStyles'
|
136
|
+
before(:each) do
|
137
|
+
@sheet = @book['RowStyle.2']
|
138
|
+
end
|
139
|
+
it 'should find the data range' do
|
140
|
+
@sheet.firstrow.should == 2
|
141
|
+
@sheet.firstcol.should == 2
|
142
|
+
@sheet.lastrow.should == 3
|
143
|
+
@sheet.lastcol.should == 7
|
144
|
+
end
|
145
|
+
end
|
146
|
+
describe 'Sheet style :row (3)' do
|
147
|
+
it_should_behave_like 'BasicStyles'
|
148
|
+
before(:each) do
|
149
|
+
@sheet = @book['RowStyle.3']
|
150
|
+
end
|
151
|
+
it 'should find the data range' do
|
152
|
+
@sheet.firstrow.should == 1
|
153
|
+
@sheet.firstcol.should == 2
|
154
|
+
@sheet.lastrow.should == 2
|
155
|
+
@sheet.lastcol.should == 7
|
156
|
+
end
|
157
|
+
end
|
158
|
+
describe 'Sheet style :row (4)' do
|
159
|
+
it_should_behave_like 'BasicStyles'
|
160
|
+
before(:each) do
|
161
|
+
@sheet = @book['RowStyle.4']
|
162
|
+
end
|
163
|
+
it 'should find the data range' do
|
164
|
+
@sheet.firstrow.should == 2
|
165
|
+
@sheet.firstcol.should == 2
|
166
|
+
@sheet.lastrow.should == 3
|
167
|
+
@sheet.lastcol.should == 7
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe 'Datatypes' do
|
172
|
+
it_should_behave_like 'SpreadsheetTab'
|
173
|
+
before(:each) do
|
174
|
+
@sheet = @book['Datatypes']
|
175
|
+
end
|
176
|
+
it 'should handle integers' do
|
177
|
+
@sheet[2][1].value.class.should == Fixnum
|
178
|
+
@sheet[2][1].value.should == 1
|
179
|
+
end
|
180
|
+
it 'should handle floats' do
|
181
|
+
@sheet[2][2].value.class.should == Float
|
182
|
+
@sheet[2][2].value.should == 2.0
|
183
|
+
end
|
184
|
+
it 'should handle hashes' do
|
185
|
+
@sheet[2][3].value.class.should == Hash
|
186
|
+
@sheet[2][3].value.should == { 'a'=>1, 'b'=>2 }
|
187
|
+
end
|
188
|
+
it 'should handle arrays' do
|
189
|
+
@sheet[2][4].value.class.should == Array
|
190
|
+
@sheet[2][4].value.should == ['c', 'd', 'e']
|
191
|
+
end
|
192
|
+
it 'should handle boolean uppercase' do
|
193
|
+
@sheet[2][5].value.class.should == TrueClass
|
194
|
+
@sheet[2][5].value.should == true
|
195
|
+
end
|
196
|
+
it 'should handle boolean lowercase' do
|
197
|
+
@sheet[2][6].value.class.should == FalseClass
|
198
|
+
@sheet[2][6].value.should == false
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
describe 'Whitespace' do
|
203
|
+
it_should_behave_like 'SpreadsheetTab'
|
204
|
+
before(:each) do
|
205
|
+
@sheet = @book['Whitespace']
|
206
|
+
end
|
207
|
+
it 'should trim leading whitespace' do
|
208
|
+
@sheet[2][1].value.should == 'test'
|
209
|
+
end
|
210
|
+
it 'should trim trailing whitespace' do
|
211
|
+
@sheet[2][2].value.should == 'test'
|
212
|
+
end
|
213
|
+
it 'should not trim middle whitespace' do
|
214
|
+
@sheet[2][3].value.should == 'this is a test'
|
215
|
+
end
|
216
|
+
it 'should trim leading and trailing whitespace' do
|
217
|
+
@sheet[2][4].value.should == 'test'
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
describe 'Control Flow - Tabs' do
|
222
|
+
it_should_behave_like 'SpreadsheetTab'
|
223
|
+
it 'should not include hidden tabs' do
|
224
|
+
lambda{ @sheet = @book['ControlFlow.hidden'] }.should raise_error
|
225
|
+
end
|
226
|
+
it 'should not include colored tabs' do
|
227
|
+
lambda{ @sheet = @book['ControlFlow.1'] }.should raise_error
|
228
|
+
end
|
229
|
+
it 'should not include commented tabs' do
|
230
|
+
lambda{ @sheet = @book['ControlFlow.2'] }.should raise_error
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe 'Control Flow - Worksheet' do
|
235
|
+
it_should_behave_like 'SpreadsheetTab'
|
236
|
+
it 'should select worksheet without error' do
|
237
|
+
lambda{
|
238
|
+
@sheet = @book['ColStyle.1'] #select called implicitly
|
239
|
+
}.should_not raise_error
|
240
|
+
end
|
241
|
+
it 'should raise error when calling bogus worksheet' do
|
242
|
+
lambda{
|
243
|
+
@sheet = @book['Bogus'] #select called implicitly
|
244
|
+
}.should raise_error
|
245
|
+
end
|
246
|
+
it 'should select the home cell without error' do
|
247
|
+
@sheet = @book['ColStyle.1']
|
248
|
+
lambda{ @sheet.select_home_cell }.should_not raise_error
|
249
|
+
end
|
250
|
+
it 'should properly identify data cells' do
|
251
|
+
@sheet = @book['ColStyle.1']
|
252
|
+
@sheet.datacell?(1,1).should == false
|
253
|
+
@sheet.datacell?(1,2).should == false
|
254
|
+
@sheet.datacell?(2,1).should == true
|
255
|
+
@sheet.datacell?(2,2).should == true
|
256
|
+
end
|
257
|
+
it 'should be able to get a range for a :row style' do
|
258
|
+
@sheet = @book['ColStyle.1']
|
259
|
+
lambda{ @sheet.cellrange(2) }.should_not raise_error
|
260
|
+
end
|
261
|
+
it 'should be able to get a range of cell values for a :row style' do
|
262
|
+
@sheet = @book['ColStyle.1']
|
263
|
+
@sheet.cellrangevals(2).should == [1.0,2.0]
|
264
|
+
end
|
265
|
+
it 'should be able to get a range for a :col style' do
|
266
|
+
@sheet = @book['RowStyle.1']
|
267
|
+
@sheet.cellrangevals(2).should == [1.0,2.0]
|
268
|
+
end
|
269
|
+
it 'should be able to get a worksheet column name from a column index' do
|
270
|
+
@sheet = @book['ColStyle.1']
|
271
|
+
@sheet.colname(1).should == 'A'
|
272
|
+
@sheet.colname(2).should == 'B'
|
273
|
+
end
|
274
|
+
it 'should gracefully handle a sheet with no data' do
|
275
|
+
@sheet = @book['Blank']
|
276
|
+
lambda{ @sheet.cellrange(2) }.should_not raise_error
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
describe 'Sheet initialization' do
|
281
|
+
it_should_behave_like 'SpreadsheetTab'
|
282
|
+
|
283
|
+
it 'should provide the reference to the Book' do
|
284
|
+
@book['ColStyle.1'].book.class.should == Rasta::Spreadsheet::Book
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'should return a valid ole_object for the Sheet' do
|
288
|
+
@book['ColStyle.1'].ole_object.class.should == WIN32OLE
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'should return the name of the worksheet tab' do
|
292
|
+
@book['ColStyle.1'].name.should == 'ColStyle.1'
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'should provide metadata with to_s' do
|
296
|
+
metadata = "firstrow = 2\n" +
|
297
|
+
"firstcol = 1\n" +
|
298
|
+
"lastrow = 7\n" +
|
299
|
+
"lastcol = 2\n" +
|
300
|
+
"style = row\n"
|
301
|
+
@book['ColStyle.1'].to_s.should == metadata
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
# Apparently the WIN32OLE returns a string for a range
|
306
|
+
# with a single value and an array for multiple values
|
307
|
+
# so test for the corner case. This series of tests
|
308
|
+
# makes sure we can properly handle a spreadsheet
|
309
|
+
# with that single data cell
|
310
|
+
describe 'Single data cell' do
|
311
|
+
it_should_behave_like 'SpreadsheetTab'
|
312
|
+
|
313
|
+
it 'should properly identify data cells for :col' do
|
314
|
+
@sheet = @book['SingleCell.col']
|
315
|
+
@sheet.datacell?(2,1).should == true
|
316
|
+
end
|
317
|
+
it 'should get data from cell for :col' do
|
318
|
+
@sheet = @book['SingleCell.col']
|
319
|
+
@sheet.headers.should == ['number']
|
320
|
+
end
|
321
|
+
it 'should be able to get a range for a :col style' do
|
322
|
+
@sheet = @book['SingleCell.col']
|
323
|
+
lambda{ @sheet.cellrangevals(2) }.should_not raise_error
|
324
|
+
end
|
325
|
+
it 'should properly identify data cells for :row' do
|
326
|
+
@sheet = @book['SingleCell.row']
|
327
|
+
@sheet.datacell?(1,2).should == true
|
328
|
+
end
|
329
|
+
it 'should get data from cell for :row' do
|
330
|
+
@sheet = @book['SingleCell.row']
|
331
|
+
@sheet.headers.should == ['number']
|
332
|
+
end
|
333
|
+
it 'should be able to get a range for a :row style' do
|
334
|
+
@sheet = @book['SingleCell.row']
|
335
|
+
lambda{ @sheet.cellrangevals(2) }.should_not raise_error
|
336
|
+
end
|
337
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rasta
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.8
|
5
|
+
platform: x86-mswin32-60
|
6
|
+
authors:
|
7
|
+
- Hugh McGowan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-18 00:00:00 -06:00
|
13
|
+
default_executable: rasta
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.1.11
|
24
|
+
version:
|
25
|
+
description: Rasta is a keyword-driven test framework using spreadsheets to drive test automation. It is loosely based on FIT - tables define test parameters which call your test fixture. As the test runs, the spreadsheet is updated with test results.
|
26
|
+
email: rasta@rubyforge.org
|
27
|
+
executables:
|
28
|
+
- rasta
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
33
|
+
files:
|
34
|
+
- README.txt
|
35
|
+
- LICENSE.txt
|
36
|
+
- lib/rasta
|
37
|
+
- lib/rasta/extensions
|
38
|
+
- lib/rasta/extensions/rspec_extensions.rb
|
39
|
+
- lib/rasta/fixture
|
40
|
+
- lib/rasta/fixture/base_fixture.rb
|
41
|
+
- lib/rasta/fixture/rasta_fixture.rb
|
42
|
+
- lib/rasta/fixture_runner.rb
|
43
|
+
- lib/rasta/formatter
|
44
|
+
- lib/rasta/formatter/spreadsheet_formatter.rb
|
45
|
+
- lib/rasta/spreadsheet.rb
|
46
|
+
- lib/rasta/version.rb
|
47
|
+
- lib/rasta.rb
|
48
|
+
- examples/crud_worksheet.xls
|
49
|
+
- examples/fixtures
|
50
|
+
- examples/fixtures/ColumnLayout.rb
|
51
|
+
- examples/fixtures/crud
|
52
|
+
- examples/fixtures/crud/CrudClass.rb
|
53
|
+
- examples/fixtures/crud/CrudFixture.rb
|
54
|
+
- examples/fixtures/HtmlRegistration.rb
|
55
|
+
- examples/fixtures/MathFunctions.rb
|
56
|
+
- examples/fixtures/StringFunctions.rb
|
57
|
+
- examples/html
|
58
|
+
- examples/html/registration.html
|
59
|
+
- examples/rasta_fixture.xls
|
60
|
+
- examples/tests_in_column_layout.xls
|
61
|
+
- examples/watir_example.xls
|
62
|
+
- test/fixtures
|
63
|
+
- test/fixtures/RastaTestFixture.rb
|
64
|
+
- test/spreadsheets
|
65
|
+
- test/spreadsheets/rasta_fixture.xls
|
66
|
+
- test/spreadsheets/spreadsheet_parsing.xls
|
67
|
+
- test/test_bookmarks.rb
|
68
|
+
- test/test_fixtures.rb
|
69
|
+
- test/test_spreadsheet.rb
|
70
|
+
- bin/rasta
|
71
|
+
has_rdoc: false
|
72
|
+
homepage: http://rasta.rubyforge.org/
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: "0"
|
83
|
+
version:
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
89
|
+
version:
|
90
|
+
requirements: []
|
91
|
+
|
92
|
+
rubyforge_project: rasta
|
93
|
+
rubygems_version: 1.3.1
|
94
|
+
signing_key:
|
95
|
+
specification_version: 2
|
96
|
+
summary: "rasta-0.1.8: Ruby Spreadsheet Test Automation http://rasta.rubyforge.org/"
|
97
|
+
test_files: []
|
98
|
+
|