roo 1.10.1 → 1.10.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +38 -0
- data/History.txt +4 -4
- data/License.txt +20 -0
- data/Manifest.txt +68 -0
- data/README.markdown +109 -0
- data/Rakefile +5 -4
- data/bin/roo +0 -0
- data/examples/roo_soap_client.rb +53 -0
- data/examples/roo_soap_server.rb +29 -0
- data/examples/write_me.rb +33 -0
- data/lib/roo.rb +20 -61
- data/lib/roo/csv.rb +13 -11
- data/lib/roo/excel.rb +108 -219
- data/lib/roo/excel2003xml.rb +312 -0
- data/lib/roo/excelx.rb +205 -341
- data/lib/roo/generic_spreadsheet.rb +371 -268
- data/lib/roo/google.rb +64 -54
- data/lib/roo/openoffice.rb +101 -156
- data/lib/roo/roo_rails_helper.rb +5 -5
- data/lib/roo/worksheet.rb +18 -0
- data/roo.gemspec +43 -0
- data/scripts/txt2html +67 -0
- data/test/all_ss.rb +8 -10
- data/test/{1900_base.xls → files/1900_base.xls} +0 -0
- data/test/{1904_base.xls → files/1904_base.xls} +0 -0
- data/test/{Bibelbund.csv → files/Bibelbund.csv} +0 -0
- data/test/{Bibelbund.ods → files/Bibelbund.ods} +0 -0
- data/test/{Bibelbund.xls → files/Bibelbund.xls} +0 -0
- data/test/{Bibelbund.xlsx → files/Bibelbund.xlsx} +0 -0
- data/test/files/Bibelbund.xml +62518 -0
- data/test/{Bibelbund1.ods → files/Bibelbund1.ods} +0 -0
- data/test/{Pfand_from_windows_phone.xlsx → files/Pfand_from_windows_phone.xlsx} +0 -0
- data/test/files/bad_excel_date.xls +0 -0
- data/test/{bbu.ods → files/bbu.ods} +0 -0
- data/test/{bbu.xls → files/bbu.xls} +0 -0
- data/test/{bbu.xlsx → files/bbu.xlsx} +0 -0
- data/test/files/bbu.xml +152 -0
- data/test/{bode-v1.ods.zip → files/bode-v1.ods.zip} +0 -0
- data/test/{bode-v1.xls.zip → files/bode-v1.xls.zip} +0 -0
- data/test/{boolean.ods → files/boolean.ods} +0 -0
- data/test/{boolean.xls → files/boolean.xls} +0 -0
- data/test/{boolean.xlsx → files/boolean.xlsx} +0 -0
- data/test/files/boolean.xml +112 -0
- data/test/{borders.ods → files/borders.ods} +0 -0
- data/test/{borders.xls → files/borders.xls} +0 -0
- data/test/{borders.xlsx → files/borders.xlsx} +0 -0
- data/test/files/borders.xml +144 -0
- data/test/{bug-row-column-fixnum-float.xls → files/bug-row-column-fixnum-float.xls} +0 -0
- data/test/files/bug-row-column-fixnum-float.xml +127 -0
- data/test/{comments.ods → files/comments.ods} +0 -0
- data/test/{comments.xls → files/comments.xls} +0 -0
- data/test/{comments.xlsx → files/comments.xlsx} +0 -0
- data/test/{csvtypes.csv → files/csvtypes.csv} +0 -0
- data/test/{datetime.ods → files/datetime.ods} +0 -0
- data/test/{datetime.xls → files/datetime.xls} +0 -0
- data/test/{datetime.xlsx → files/datetime.xlsx} +0 -0
- data/test/files/datetime.xml +142 -0
- data/test/{datetime_floatconv.xls → files/datetime_floatconv.xls} +0 -0
- data/test/files/datetime_floatconv.xml +148 -0
- data/test/{dreimalvier.ods → files/dreimalvier.ods} +0 -0
- data/test/{emptysheets.ods → files/emptysheets.ods} +0 -0
- data/test/{emptysheets.xls → files/emptysheets.xls} +0 -0
- data/test/{emptysheets.xlsx → files/emptysheets.xlsx} +0 -0
- data/test/files/emptysheets.xml +105 -0
- data/test/files/excel2003.xml +21140 -0
- data/test/{false_encoding.xls → files/false_encoding.xls} +0 -0
- data/test/files/false_encoding.xml +132 -0
- data/test/{formula.ods → files/formula.ods} +0 -0
- data/test/{formula.xls → files/formula.xls} +0 -0
- data/test/{formula.xlsx → files/formula.xlsx} +0 -0
- data/test/files/formula.xml +134 -0
- data/test/files/formula_parse_error.xls +0 -0
- data/test/files/formula_parse_error.xml +1833 -0
- data/test/{formula_string_error.xlsx → files/formula_string_error.xlsx} +0 -0
- data/test/{html-escape.ods → files/html-escape.ods} +0 -0
- data/test/{matrix.ods → files/matrix.ods} +0 -0
- data/test/{matrix.xls → files/matrix.xls} +0 -0
- data/test/{named_cells.ods → files/named_cells.ods} +0 -0
- data/test/{named_cells.xls → files/named_cells.xls} +0 -0
- data/test/{named_cells.xlsx → files/named_cells.xlsx} +0 -0
- data/test/{no_spreadsheet_file.txt → files/no_spreadsheet_file.txt} +0 -0
- data/test/{numbers1.csv → files/numbers1.csv} +0 -0
- data/test/{numbers1.ods → files/numbers1.ods} +0 -0
- data/test/{numbers1.xls → files/numbers1.xls} +0 -0
- data/test/{numbers1.xlsx → files/numbers1.xlsx} +0 -0
- data/test/files/numbers1.xml +312 -0
- data/test/{only_one_sheet.ods → files/only_one_sheet.ods} +0 -0
- data/test/{only_one_sheet.xls → files/only_one_sheet.xls} +0 -0
- data/test/{only_one_sheet.xlsx → files/only_one_sheet.xlsx} +0 -0
- data/test/files/only_one_sheet.xml +67 -0
- data/test/{paragraph.ods → files/paragraph.ods} +0 -0
- data/test/{paragraph.xls → files/paragraph.xls} +0 -0
- data/test/{paragraph.xlsx → files/paragraph.xlsx} +0 -0
- data/test/files/paragraph.xml +127 -0
- data/test/{prova.xls → files/prova.xls} +0 -0
- data/test/{ric.ods → files/ric.ods} +0 -0
- data/test/{simple_spreadsheet.ods → files/simple_spreadsheet.ods} +0 -0
- data/test/{simple_spreadsheet.xls → files/simple_spreadsheet.xls} +0 -0
- data/test/{simple_spreadsheet.xlsx → files/simple_spreadsheet.xlsx} +0 -0
- data/test/files/simple_spreadsheet.xml +225 -0
- data/test/{simple_spreadsheet_from_italo.ods → files/simple_spreadsheet_from_italo.ods} +0 -0
- data/test/{simple_spreadsheet_from_italo.xls → files/simple_spreadsheet_from_italo.xls} +0 -0
- data/test/files/simple_spreadsheet_from_italo.xml +242 -0
- data/test/{so_datetime.csv → files/so_datetime.csv} +0 -0
- data/test/{style.ods → files/style.ods} +0 -0
- data/test/{style.xls → files/style.xls} +0 -0
- data/test/{style.xlsx → files/style.xlsx} +0 -0
- data/test/files/style.xml +154 -0
- data/test/{time-test.csv → files/time-test.csv} +0 -0
- data/test/{time-test.ods → files/time-test.ods} +0 -0
- data/test/{time-test.xls → files/time-test.xls} +0 -0
- data/test/{time-test.xlsx → files/time-test.xlsx} +0 -0
- data/test/files/time-test.xml +131 -0
- data/test/{type_excel.ods → files/type_excel.ods} +0 -0
- data/test/{type_excel.xlsx → files/type_excel.xlsx} +0 -0
- data/test/{type_excelx.ods → files/type_excelx.ods} +0 -0
- data/test/{type_excelx.xls → files/type_excelx.xls} +0 -0
- data/test/{type_openoffice.xls → files/type_openoffice.xls} +0 -0
- data/test/{type_openoffice.xlsx → files/type_openoffice.xlsx} +0 -0
- data/test/{whitespace.ods → files/whitespace.ods} +0 -0
- data/test/{whitespace.xls → files/whitespace.xls} +0 -0
- data/test/{whitespace.xlsx → files/whitespace.xlsx} +0 -0
- data/test/files/whitespace.xml +184 -0
- data/test/test_generic_spreadsheet.rb +257 -0
- data/test/test_helper.rb +167 -27
- data/test/test_roo.rb +1178 -930
- data/website/index.html +385 -0
- data/website/index.txt +423 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +130 -0
- data/website/template.rhtml +48 -0
- metadata +151 -121
- data/README.txt +0 -110
- data/lib/roo/.csv.rb.swp +0 -0
@@ -0,0 +1,257 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/test_helper'
|
3
|
+
|
4
|
+
class TestGenericSpreadsheet < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@klass = Class.new(Roo::GenericSpreadsheet) do
|
8
|
+
def initialize(filename='some_file')
|
9
|
+
super
|
10
|
+
@filename = filename
|
11
|
+
end
|
12
|
+
|
13
|
+
def read_cells(sheet=nil)
|
14
|
+
@cells_read[sheet] = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def cell(row, col, sheet=nil)
|
18
|
+
sheet ||= @default_sheet
|
19
|
+
@cell[sheet][[row,col]]
|
20
|
+
end
|
21
|
+
|
22
|
+
def celltype(row, col, sheet=nil)
|
23
|
+
sheet ||= @default_sheet
|
24
|
+
@cell_type[sheet][[row,col]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def sheets
|
28
|
+
['my_sheet','blank sheet']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
@oo = @klass.new
|
32
|
+
setup_test_sheet(@oo)
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'Roo::GenericSpreadsheet.letter_to_number(letter)' do
|
36
|
+
should "give us 1 for 'A' and 'a'" do
|
37
|
+
assert_equal 1, Roo::GenericSpreadsheet.letter_to_number('A')
|
38
|
+
assert_equal 1, Roo::GenericSpreadsheet.letter_to_number('a')
|
39
|
+
end
|
40
|
+
|
41
|
+
should "give us the correct value for 'Z'" do
|
42
|
+
assert_equal 26, Roo::GenericSpreadsheet.letter_to_number('Z')
|
43
|
+
end
|
44
|
+
|
45
|
+
should "give us the correct value for 'AA' regardless of case mixing" do
|
46
|
+
assert_equal 27, Roo::GenericSpreadsheet.letter_to_number('AA')
|
47
|
+
assert_equal 27, Roo::GenericSpreadsheet.letter_to_number('aA')
|
48
|
+
assert_equal 27, Roo::GenericSpreadsheet.letter_to_number('Aa')
|
49
|
+
assert_equal 27, Roo::GenericSpreadsheet.letter_to_number('aa')
|
50
|
+
end
|
51
|
+
|
52
|
+
should "give us the correct value for 'AB'" do
|
53
|
+
assert_equal 28, Roo::GenericSpreadsheet.letter_to_number('AB')
|
54
|
+
end
|
55
|
+
|
56
|
+
should "give us the correct value for 'AZ'" do
|
57
|
+
assert_equal 26*2, Roo::GenericSpreadsheet.letter_to_number('AZ')
|
58
|
+
end
|
59
|
+
|
60
|
+
should "give us the correct value for 'BZ'" do
|
61
|
+
assert_equal 26*3, Roo::GenericSpreadsheet.letter_to_number('BZ')
|
62
|
+
end
|
63
|
+
|
64
|
+
should "give us the correct value for 'ZZ'" do
|
65
|
+
assert_equal 26**2 + 26,Roo::GenericSpreadsheet.letter_to_number('ZZ')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "Roo::GenericSpreadsheet.number_to_letter" do
|
70
|
+
Roo::GenericSpreadsheet::LETTERS.each_with_index do |l,i|
|
71
|
+
should "return '#{l}' when passed #{i+1}" do
|
72
|
+
assert_equal l,Roo::GenericSpreadsheet.number_to_letter(i+1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
should "return 'AA' when passed 27" do
|
77
|
+
assert_equal 'AA',Roo::GenericSpreadsheet.number_to_letter(27)
|
78
|
+
end
|
79
|
+
|
80
|
+
should "return 'AZ' when passed #{26*2}" do
|
81
|
+
assert_equal 'AZ', Roo::GenericSpreadsheet.number_to_letter(26*2)
|
82
|
+
end
|
83
|
+
|
84
|
+
should "return 'BZ' when passed #{26*3}" do
|
85
|
+
assert_equal 'BZ', Roo::GenericSpreadsheet.number_to_letter(26*3)
|
86
|
+
end
|
87
|
+
|
88
|
+
should "return 'ZZ' when passed #{26**2 + 26}" do
|
89
|
+
assert_equal 'ZZ',Roo::GenericSpreadsheet.number_to_letter(26**2 + 26)
|
90
|
+
end
|
91
|
+
|
92
|
+
should "return 'AAA' when passed #{26**2 + 27}" do
|
93
|
+
assert_equal 'AAA',Roo::GenericSpreadsheet.number_to_letter(26**2 + 27)
|
94
|
+
end
|
95
|
+
|
96
|
+
should "return 'ZZZ' when passed #{26**3 + 26**2 + 26}" do
|
97
|
+
assert_equal 'ZZZ',Roo::GenericSpreadsheet.number_to_letter(26**3 + 26**2 + 26)
|
98
|
+
end
|
99
|
+
|
100
|
+
should "return the correct letter when passed a Float" do
|
101
|
+
assert_equal 'A',Roo::GenericSpreadsheet.number_to_letter(1.0)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_setting_invalid_type_does_not_update_cell
|
106
|
+
@oo.set(1,1,1)
|
107
|
+
assert_raise(ArgumentError){@oo.set(1,1, :invalid_type)}
|
108
|
+
assert_equal 1, @oo.cell(1,1)
|
109
|
+
assert_equal :float, @oo.celltype(1,1)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_first_row
|
113
|
+
assert_equal 5,@oo.first_row
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_last_row
|
117
|
+
assert_equal 16,@oo.last_row
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_first_column
|
121
|
+
assert_equal 1,@oo.first_column
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_first_column_as_letter
|
125
|
+
assert_equal 'A', @oo.first_column_as_letter
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_last_column
|
129
|
+
assert_equal 7, @oo.last_column
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_last_column_as_letter
|
133
|
+
assert_equal 'G', @oo.last_column_as_letter
|
134
|
+
end
|
135
|
+
|
136
|
+
#TODO: inkonsequente Lieferung Fixnum/Float
|
137
|
+
def test_rows
|
138
|
+
assert_equal [41.0,42.0,43.0,44.0,45.0, nil, nil], @oo.row(12)
|
139
|
+
assert_equal [nil, nil, "dreiundvierzig", "vierundvierzig", "fuenfundvierzig", nil, nil], @oo.row(16)
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_empty_eh
|
143
|
+
assert @oo.empty?(1,1)
|
144
|
+
assert !@oo.empty?(8,3)
|
145
|
+
assert @oo.empty?("A",11)
|
146
|
+
assert !@oo.empty?("A",12)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_reload
|
150
|
+
@oo.reload
|
151
|
+
assert @oo.instance_variable_get(:@cell).empty?
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_to_yaml
|
155
|
+
assert_equal "--- \n"+yaml_entry(5,1,"date","1961-11-21"), @oo.to_yaml({}, 5,1,5,1)
|
156
|
+
assert_equal "--- \n"+yaml_entry(8,3,"string","thisisc8"), @oo.to_yaml({}, 8,3,8,3)
|
157
|
+
assert_equal "--- \n"+yaml_entry(12,3,"float",43.0), @oo.to_yaml({}, 12,3,12,3)
|
158
|
+
assert_equal \
|
159
|
+
"--- \n"+yaml_entry(12,3,"float",43.0) +
|
160
|
+
yaml_entry(12,4,"float",44.0) +
|
161
|
+
yaml_entry(12,5,"float",45.0), @oo.to_yaml({}, 12,3,12)
|
162
|
+
assert_equal \
|
163
|
+
"--- \n"+yaml_entry(12,3,"float",43.0)+
|
164
|
+
yaml_entry(12,4,"float",44.0)+
|
165
|
+
yaml_entry(12,5,"float",45.0)+
|
166
|
+
yaml_entry(15,3,"float",43.0)+
|
167
|
+
yaml_entry(15,4,"float",44.0)+
|
168
|
+
yaml_entry(15,5,"float",45.0)+
|
169
|
+
yaml_entry(16,3,"string","dreiundvierzig")+
|
170
|
+
yaml_entry(16,4,"string","vierundvierzig")+
|
171
|
+
yaml_entry(16,5,"string","fuenfundvierzig"), @oo.to_yaml({}, 12,3)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_to_csv
|
175
|
+
assert_equal expected_csv,@oo.to_csv
|
176
|
+
end
|
177
|
+
protected
|
178
|
+
def setup_test_sheet(workbook=nil)
|
179
|
+
workbook ||= @oo
|
180
|
+
%w{sheet_values sheet_types cells_read}.each do |meth|
|
181
|
+
send("set_#{meth}".to_sym,workbook)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def set_sheet_values(workbook)
|
186
|
+
vals = workbook.instance_variable_get(:@cell)
|
187
|
+
vals[workbook.default_sheet][[5,1]] = Date.civil(1961,11,21).to_s
|
188
|
+
|
189
|
+
vals[workbook.default_sheet][[8,3]] = "thisisc8"
|
190
|
+
vals[workbook.default_sheet][[8,7]] = "thisisg8"
|
191
|
+
|
192
|
+
vals[workbook.default_sheet][[12,1]] = 41.0
|
193
|
+
vals[workbook.default_sheet][[12,2]] = 42.0
|
194
|
+
vals[workbook.default_sheet][[12,3]] = 43.0
|
195
|
+
vals[workbook.default_sheet][[12,4]] = 44.0
|
196
|
+
vals[workbook.default_sheet][[12,5]] = 45.0
|
197
|
+
|
198
|
+
vals[workbook.default_sheet][[15,3]] = 43.0
|
199
|
+
vals[workbook.default_sheet][[15,4]] = 44.0
|
200
|
+
vals[workbook.default_sheet][[15,5]] = 45.0
|
201
|
+
|
202
|
+
vals[workbook.default_sheet][[16,3]] = "dreiundvierzig"
|
203
|
+
vals[workbook.default_sheet][[16,4]] = "vierundvierzig"
|
204
|
+
vals[workbook.default_sheet][[16,5]] = "fuenfundvierzig"
|
205
|
+
end
|
206
|
+
|
207
|
+
def set_sheet_types(workbook)
|
208
|
+
types = workbook.instance_variable_get(:@cell_type)
|
209
|
+
types[workbook.default_sheet][[5,1]] = :date
|
210
|
+
|
211
|
+
types[workbook.default_sheet][[8,3]] = :string
|
212
|
+
types[workbook.default_sheet][[8,7]] = :string
|
213
|
+
|
214
|
+
types[workbook.default_sheet][[12,1]] = :float
|
215
|
+
types[workbook.default_sheet][[12,2]] = :float
|
216
|
+
types[workbook.default_sheet][[12,3]] = :float
|
217
|
+
types[workbook.default_sheet][[12,4]] = :float
|
218
|
+
types[workbook.default_sheet][[12,5]] = :float
|
219
|
+
|
220
|
+
types[workbook.default_sheet][[15,3]] = :float
|
221
|
+
types[workbook.default_sheet][[15,4]] = :float
|
222
|
+
types[workbook.default_sheet][[15,5]] = :float
|
223
|
+
|
224
|
+
types[workbook.default_sheet][[16,3]] = :string
|
225
|
+
types[workbook.default_sheet][[16,4]] = :string
|
226
|
+
types[workbook.default_sheet][[16,5]] = :string
|
227
|
+
end
|
228
|
+
|
229
|
+
def set_first_row(workbook)
|
230
|
+
row_hash = workbook.instance_variable_get(:@first_row)
|
231
|
+
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[0]}.min
|
232
|
+
end
|
233
|
+
|
234
|
+
def set_last_row(workbook)
|
235
|
+
row_hash = workbook.instance_variable_get(:@last_row)
|
236
|
+
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[0]}.max
|
237
|
+
end
|
238
|
+
|
239
|
+
def set_first_col(workbook)
|
240
|
+
col_hash = workbook.instance_variable_get(:@first_column)
|
241
|
+
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[1]}.min
|
242
|
+
end
|
243
|
+
|
244
|
+
def set_last_col(workbook)
|
245
|
+
col_hash = workbook.instance_variable_get(:@last_column)
|
246
|
+
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[1]}.max
|
247
|
+
end
|
248
|
+
|
249
|
+
def set_cells_read(workbook)
|
250
|
+
read_hash = workbook.instance_variable_get(:@cells_read)
|
251
|
+
read_hash[workbook.default_sheet] = true
|
252
|
+
end
|
253
|
+
|
254
|
+
def expected_csv
|
255
|
+
",,,,,,\n,,,,,,\n,,,,,,\n,,,,,,\n1961-11-21,,,,,,\n,,,,,,\n,,,,,,\n,,\"thisisc8\",,,,\"thisisg8\"\n,,,,,,\n,,,,,,\n,,,,,,\n41,42,43,44,45,,\n,,,,,,\n,,,,,,\n,,43,44,45,,\n,,\"dreiundvierzig\",\"vierundvierzig\",\"fuenfundvierzig\",,\n"
|
256
|
+
end
|
257
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,16 +1,63 @@
|
|
1
|
+
# require deps
|
2
|
+
require 'rubygems'
|
3
|
+
require 'tmpdir'
|
1
4
|
require 'test/unit'
|
5
|
+
require 'shoulda'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'timeout'
|
8
|
+
require 'logger'
|
9
|
+
require 'date'
|
10
|
+
|
11
|
+
# require gem files
|
2
12
|
require File.dirname(__FILE__) + '/../lib/roo'
|
3
13
|
|
4
|
-
|
5
|
-
|
6
|
-
|
14
|
+
TESTDIR = File.join(File.dirname(__FILE__), 'files')
|
15
|
+
|
16
|
+
LOG_DIR = File.join(File.dirname(__FILE__),'log')
|
17
|
+
LOG_FILE = File.join(LOG_DIR,'roo.log')
|
18
|
+
|
19
|
+
test_dirs = Dir.glob(File.dirname(__FILE__)+'/*')
|
20
|
+
unless test_dirs.include?(LOG_DIR)
|
21
|
+
Dir.mkdir(LOG_DIR)
|
7
22
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
23
|
+
|
24
|
+
$log = Logger.new(LOG_FILE)
|
25
|
+
|
26
|
+
#$log.level = Logger::WARN
|
27
|
+
$log.level = Logger::DEBUG
|
28
|
+
|
29
|
+
DISPLAY_LOG = false
|
30
|
+
DB_LOG = false
|
31
|
+
|
32
|
+
if DB_LOG
|
33
|
+
require 'activerecord'
|
34
|
+
|
35
|
+
def activerecord_connect
|
36
|
+
ActiveRecord::Base.establish_connection(:adapter => "mysql",
|
37
|
+
:database => "test_runs",
|
38
|
+
:host => "localhost",
|
39
|
+
:username => "root",
|
40
|
+
:socket => "/var/run/mysqld/mysqld.sock")
|
41
|
+
end
|
42
|
+
|
43
|
+
class Testrun < ActiveRecord::Base
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
class Roo::Csv
|
49
|
+
remove_method :cell_postprocessing
|
50
|
+
def cell_postprocessing(row,col,value)
|
51
|
+
if row==1 and col==1
|
52
|
+
return value.to_f
|
53
|
+
end
|
54
|
+
if row==1 and col==2
|
55
|
+
return value.to_s
|
56
|
+
end
|
57
|
+
return value
|
58
|
+
end
|
12
59
|
end
|
13
|
-
|
60
|
+
|
14
61
|
# helper method
|
15
62
|
def local_only
|
16
63
|
if ENV["roo_local"] == "thomas-p"
|
@@ -22,28 +69,121 @@ end
|
|
22
69
|
# output is an empty string if the files are equal
|
23
70
|
# otherwise differences a printen (not compatible to
|
24
71
|
# the diff command)
|
25
|
-
def
|
72
|
+
def file_diff(fn1,fn2)
|
26
73
|
result = ''
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
74
|
+
File.open(fn1) do |f1|
|
75
|
+
File.open(fn2) do |f2|
|
76
|
+
while f1.eof? == false and f2.eof? == false
|
77
|
+
line1 = f1.gets.chomp
|
78
|
+
line2 = f2.gets.chomp
|
79
|
+
result << "<#{line1}\n>#{line2}\n" if line1 != line2
|
80
|
+
end
|
81
|
+
if f1.eof? == false
|
82
|
+
while f1.eof? == false
|
83
|
+
line1 = f1.gets
|
84
|
+
result << "<#{line1}\n"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
if f2.eof? == false
|
88
|
+
while f2.eof? == false
|
89
|
+
line2 = f2.gets
|
90
|
+
result ">#{line2}\n"
|
91
|
+
end
|
92
|
+
end
|
38
93
|
end
|
39
94
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
95
|
+
result
|
96
|
+
end
|
97
|
+
|
98
|
+
class File
|
99
|
+
def File.delete_if_exist(filename)
|
100
|
+
if File.exist?(filename)
|
101
|
+
File.delete(filename)
|
44
102
|
end
|
45
103
|
end
|
46
|
-
f1.close
|
47
|
-
f2.close
|
48
|
-
result
|
49
104
|
end
|
105
|
+
|
106
|
+
# :nodoc
|
107
|
+
class Fixnum
|
108
|
+
def minutes
|
109
|
+
self * 60
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
class Test::Unit::TestCase
|
114
|
+
def key_of(spreadsheetname)
|
115
|
+
return {
|
116
|
+
#'formula' => 'rt4Pw1WmjxFtyfrqqy94wPw',
|
117
|
+
'formula' => 'o10837434939102457526.3022866619437760118',
|
118
|
+
#"write.me" => 'r6m7HFlUOwst0RTUTuhQ0Ow',
|
119
|
+
"write.me" => '0AkCuGANLc3jFcHR1NmJiYWhOWnBZME4wUnJ4UWJXZHc',
|
120
|
+
#'numbers1' => "rYraCzjxTtkxw1NxHJgDU8Q",
|
121
|
+
'numbers1' => 'o10837434939102457526.4784396906364855777',
|
122
|
+
#'borders' => "r_nLYMft6uWg_PT9Rc2urXw",
|
123
|
+
'borders' => "o10837434939102457526.664868920231926255",
|
124
|
+
#'simple_spreadsheet' => "r3aMMCBCA153TmU_wyIaxfw",
|
125
|
+
'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
|
126
|
+
'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
|
127
|
+
#"only_one_sheet" => "rqRtkcPJ97nhQ0m9ksDw2rA",
|
128
|
+
"only_one_sheet" => "o10837434939102457526.762705759906130135",
|
129
|
+
#'time-test' => 'r2XfDBJMrLPjmuLrPQQrEYw',
|
130
|
+
'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
|
131
|
+
#'datetime' => "r2kQpXWr6xOSUpw9MyXavYg",
|
132
|
+
'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
|
133
|
+
'whitespace' => "rZyQaoFebVGeHKzjG6e9gRQ",
|
134
|
+
'matrix' => '0AkCuGANLc3jFdHY3cWtYUkM4bVdadjZ5VGpfTzFEUEE',
|
135
|
+
}[spreadsheetname]
|
136
|
+
# 'numbers1' => "o10837434939102457526.4784396906364855777",
|
137
|
+
# 'borders' => "o10837434939102457526.664868920231926255",
|
138
|
+
# 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
|
139
|
+
# 'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
|
140
|
+
# "only_one_sheet" => "o10837434939102457526.762705759906130135",
|
141
|
+
# "write.me" => 'ptu6bbahNZpY0N0RrxQbWdw&hl',
|
142
|
+
# 'formula' => 'o10837434939102457526.3022866619437760118',
|
143
|
+
# 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
|
144
|
+
# 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
|
145
|
+
rescue
|
146
|
+
raise "unknown spreadsheetname: #{spreadsheetname}"
|
147
|
+
end
|
148
|
+
|
149
|
+
def yaml_entry(row,col,type,value)
|
150
|
+
"cell_#{row}_#{col}: \n row: #{row} \n col: #{col} \n celltype: #{type} \n value: #{value} \n"
|
151
|
+
end
|
152
|
+
|
153
|
+
if DB_LOG
|
154
|
+
if ! (defined?(@connected) and @connected)
|
155
|
+
activerecord_connect
|
156
|
+
else
|
157
|
+
@connected = true
|
158
|
+
end
|
159
|
+
end
|
160
|
+
# alias unlogged_run run
|
161
|
+
# def run(result, &block)
|
162
|
+
# t1 = Time.now
|
163
|
+
# if DISPLAY_LOG
|
164
|
+
# v1,v2,_ = RUBY_VERSION.split('.')
|
165
|
+
# if v1.to_i > 1 or
|
166
|
+
# (v1.to_i == 1 and v2.to_i > 8)
|
167
|
+
# # Ruby 1.9.x
|
168
|
+
# print "RUNNING #{self.class} #{self.__name__} \t#{Time.now.to_s}"
|
169
|
+
# else
|
170
|
+
# # Ruby < 1.9.x
|
171
|
+
# print "RUNNING #{self.class} #{@method_name} \t#{Time.now.to_s}"
|
172
|
+
# end
|
173
|
+
# STDOUT.flush
|
174
|
+
# end
|
175
|
+
# unlogged_run result, &block
|
176
|
+
# t2 = Time.now
|
177
|
+
# if DISPLAY_LOG
|
178
|
+
# puts "\t#{t2-t1} seconds"
|
179
|
+
# end
|
180
|
+
# if DB_LOG
|
181
|
+
# Testrun.create(
|
182
|
+
# :class_name => self.class.to_s,
|
183
|
+
# :test_name => @method_name,
|
184
|
+
# :start => t1,
|
185
|
+
# :duration => t2-t1
|
186
|
+
# )
|
187
|
+
# end
|
188
|
+
# end
|
189
|
+
end
|