stats_package_syntax_file_generator 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +128 -0
- data/lib/stats_package_syntax_file_generator.rb +19 -0
- data/lib/stats_package_syntax_file_generator/controller.rb +323 -0
- data/lib/stats_package_syntax_file_generator/maker.rb +126 -0
- data/lib/stats_package_syntax_file_generator/maker_sas.rb +306 -0
- data/lib/stats_package_syntax_file_generator/maker_spss.rb +194 -0
- data/lib/stats_package_syntax_file_generator/maker_stata.rb +300 -0
- data/lib/stats_package_syntax_file_generator/maker_sts.rb +181 -0
- data/lib/stats_package_syntax_file_generator/value.rb +29 -0
- data/lib/stats_package_syntax_file_generator/variable.rb +56 -0
- data/tests/input_all_vars.yaml +2012 -0
- data/tests/input_controller.yaml +13 -0
- data/tests/setup.rb +103 -0
- data/tests/tc_controller.rb +378 -0
- data/tests/tc_maker.rb +172 -0
- data/tests/tc_maker_sas.rb +251 -0
- data/tests/tc_maker_spss.rb +121 -0
- data/tests/tc_maker_stata.rb +224 -0
- data/tests/tc_maker_sts.rb +190 -0
- data/tests/tc_value.rb +23 -0
- data/tests/tc_variable.rb +53 -0
- data/tests/ts_all.rb +20 -0
- metadata +67 -0
data/tests/tc_maker.rb
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
# This file is part of the Minnesota Population Center's stats_package_syntax_file_generator project.
|
2
|
+
# For copyright and licensing information, see the NOTICE and LICENSE files
|
3
|
+
# in this project's top-level directory, and also on-line at:
|
4
|
+
# https://github.com/mnpopcenter/stats_package_syntax_file_generator
|
5
|
+
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'setup.rb'))
|
7
|
+
|
8
|
+
module StatsPackageSyntaxFileGeneratorTest
|
9
|
+
class Maker < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include StatsPackageSyntaxFileGeneratorTestSetup
|
12
|
+
|
13
|
+
def test_create_maker
|
14
|
+
msg = 'Try to create an object.'
|
15
|
+
mk = new_maker()
|
16
|
+
assert_instance_of StatsPackageSyntaxFileGenerator::Maker, mk, msg
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_syntax_end
|
20
|
+
msg = 'Compare against hardcoded result.'
|
21
|
+
mk = new_maker()
|
22
|
+
mk.cmd_end = '.'
|
23
|
+
assert_equal ['.', ''], mk.syntax_end, msg
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_q
|
27
|
+
msg = 'Compare against hardcoded result.'
|
28
|
+
mk = new_maker()
|
29
|
+
orig = %q{"A "quoted" 'string' with ""extra-quotes"""}
|
30
|
+
quoted = %q{"""A ""quoted"" 'string' with """"extra-quotes"""""""}
|
31
|
+
assert_equal quoted, mk.q(orig), msg
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_val_q
|
35
|
+
msg = 'Numeric variable: the method should convert to string.'
|
36
|
+
mk = new_maker()
|
37
|
+
v = new_variable()
|
38
|
+
assert_equal '1234', mk.val_q(v, 1234), msg
|
39
|
+
|
40
|
+
msg = 'String variable: the method should convert to string and quote.'
|
41
|
+
v.is_string_var = true
|
42
|
+
assert_equal '"123456"', mk.val_q(v, 123456), msg
|
43
|
+
assert_equal '"-123456"', mk.val_q(v, -123456), msg
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_val_as_s
|
47
|
+
msg = 'Numeric variable: the method should convert to string.'
|
48
|
+
mk = new_maker()
|
49
|
+
v = new_variable()
|
50
|
+
assert_equal '1234', mk.val_as_s(v, 1234), msg
|
51
|
+
|
52
|
+
msg = 'String variable, non-integer value: the method should convert to string.'
|
53
|
+
v.is_string_var = true
|
54
|
+
assert_equal 'ab', mk.val_as_s(v, 'ab'), msg
|
55
|
+
assert_equal '123.2', mk.val_as_s(v, 123.2), msg
|
56
|
+
assert_equal '', mk.val_as_s(v, ''), msg
|
57
|
+
|
58
|
+
msg = 'String variable, integer value: the method should convert to string and zero-pad.'
|
59
|
+
assert_equal '0012', mk.val_as_s(v, 12), msg
|
60
|
+
assert_equal '-034', mk.val_as_s(v, -34), msg
|
61
|
+
assert_equal '123456', mk.val_as_s(v, 123456), msg
|
62
|
+
assert_equal '-123456', mk.val_as_s(v, -123456), msg
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_label_trunc
|
66
|
+
msg = 'Compare against hardcoded result.'
|
67
|
+
mk = new_maker()
|
68
|
+
assert_equal '12', mk.label_trunc(123, 2), msg
|
69
|
+
assert_equal '123', mk.label_trunc(123, 12), msg
|
70
|
+
assert_equal '', mk.label_trunc('', 12), msg
|
71
|
+
assert_equal 'foo_', mk.label_trunc('foo_bar', 4), msg
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_label_segments
|
75
|
+
mk = new_maker()
|
76
|
+
|
77
|
+
msg = 'Non-string should be converted to string.'
|
78
|
+
assert_equal ['12345'], mk.label_segments(12345, 10), msg
|
79
|
+
assert_equal ['123', '45'], mk.label_segments(12345, 3), msg
|
80
|
+
|
81
|
+
msg = 'Empty string and nil should work.'
|
82
|
+
assert_equal [''], mk.label_segments('', 10), msg
|
83
|
+
assert_equal [''], mk.label_segments(nil, 10), msg
|
84
|
+
|
85
|
+
msg = 'Compare against hardcoded result.'
|
86
|
+
label = "A really long label"
|
87
|
+
label_copy = String.new(label)
|
88
|
+
expected = [
|
89
|
+
'A reall',
|
90
|
+
'y long ',
|
91
|
+
'label',
|
92
|
+
]
|
93
|
+
assert_equal expected, mk.label_segments(label, 7), msg
|
94
|
+
|
95
|
+
msg = 'Make sure the original string was not destroyed.'
|
96
|
+
assert_equal label_copy, label, msg
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_weave_label_segments
|
100
|
+
msg = 'Compare against hardcoded result.'
|
101
|
+
mk = new_maker()
|
102
|
+
fmt = "%-7s %s %-7s"
|
103
|
+
a = [
|
104
|
+
"a very",
|
105
|
+
"long v",
|
106
|
+
"alue",
|
107
|
+
]
|
108
|
+
b = [
|
109
|
+
"a very",
|
110
|
+
"long l",
|
111
|
+
"abel",
|
112
|
+
]
|
113
|
+
expected = [
|
114
|
+
"a very + ",
|
115
|
+
"long v + ",
|
116
|
+
"alue = a very ",
|
117
|
+
" + long l ",
|
118
|
+
" + abel ",
|
119
|
+
]
|
120
|
+
assert_equal expected, mk.weave_label_segments(fmt, a, b, '=', '+')
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_labelable_values
|
124
|
+
msg = 'Non-integer values should not be treated as labelable values.'
|
125
|
+
mk = new_maker()
|
126
|
+
var = new_variable()
|
127
|
+
add_new_values_to_var(var)
|
128
|
+
n = var.values.size
|
129
|
+
var.add_value(:value => 'X')
|
130
|
+
var.add_value(:value => '123x')
|
131
|
+
var.add_value(:value => '')
|
132
|
+
var.add_value(:value => -123)
|
133
|
+
assert_equal n + 4, var.values.size, msg
|
134
|
+
assert_equal n + 1, mk.labelable_values(var).size, msg
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_max_value_length
|
138
|
+
msg = 'Compare against hardcoded result.'
|
139
|
+
mk = new_maker()
|
140
|
+
var = new_variable()
|
141
|
+
|
142
|
+
msg = 'A variable with no values should have a max_value_length of zero.'
|
143
|
+
assert_equal 0, mk.max_value_length(var, var.values), msg
|
144
|
+
|
145
|
+
msg = 'The method should agree with direct computation.'
|
146
|
+
add_new_values_to_var(var)
|
147
|
+
mx = params_values().map { |pv| pv[:value].to_s.length }.max
|
148
|
+
assert_equal mx, mk.max_value_length(var, var.values), msg
|
149
|
+
|
150
|
+
msg = 'Compare against hardcoded result.'
|
151
|
+
var.add_value( params_value(123456789012345) )
|
152
|
+
assert_equal 15, mk.max_value_length(var, var.values), msg
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_comments_start
|
156
|
+
msg = 'Only web_app uses comments.'
|
157
|
+
mk = new_maker()
|
158
|
+
mk.sfc.caller = 'vb'
|
159
|
+
assert_equal '', mk.comments_start.join(''), msg
|
160
|
+
mk.sfc.caller = 'web_app'
|
161
|
+
assert_not_equal '', mk.comments_start.join(''), msg
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_comments_end
|
165
|
+
msg = 'Compare against hardcoded result.'
|
166
|
+
mk = new_maker()
|
167
|
+
assert_equal [], mk.comments_end, msg
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,251 @@
|
|
1
|
+
# This file is part of the Minnesota Population Center's stats_package_syntax_file_generator project.
|
2
|
+
# For copyright and licensing information, see the NOTICE and LICENSE files
|
3
|
+
# in this project's top-level directory, and also on-line at:
|
4
|
+
# https://github.com/mnpopcenter/stats_package_syntax_file_generator
|
5
|
+
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'setup.rb'))
|
7
|
+
|
8
|
+
module StatsPackageSyntaxFileGeneratorTest
|
9
|
+
class MakerSAS < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include StatsPackageSyntaxFileGeneratorTestSetup
|
12
|
+
|
13
|
+
def test_create_maker_sas
|
14
|
+
msg = 'Try to create an object.'
|
15
|
+
mk = new_maker('sas')
|
16
|
+
assert_instance_of StatsPackageSyntaxFileGenerator::MakerSAS, mk, msg
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_syn_fmt_big_nums
|
20
|
+
msg = "Compare against hardcoded result."
|
21
|
+
mk = new_maker('sas')
|
22
|
+
expected = [
|
23
|
+
" BIGDEC 11.5",
|
24
|
+
" BIGINT 19."
|
25
|
+
]
|
26
|
+
var_list = names_to_vars( mk.sfc, %w(BIGDEC BIGINT) )
|
27
|
+
actual = mk.syn_fmt_big_nums_for_var_list(var_list)
|
28
|
+
assert_equal expected, actual, msg
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_syn_val_labs_for_var_start
|
32
|
+
msg = 'Compare against hardcoded result.'
|
33
|
+
mk = new_maker('sas')
|
34
|
+
expected = [
|
35
|
+
'value $ RECTYPE_f',
|
36
|
+
'value SEX_f',
|
37
|
+
]
|
38
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE SEX) )
|
39
|
+
var_list.each_index { |i|
|
40
|
+
actual = mk.syn_val_labs_for_var_start(var_list[i])
|
41
|
+
assert_equal expected[i], actual, msg
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_syn_val_labs_for_var
|
46
|
+
msg = 'Compare against hardcoded result.'
|
47
|
+
mk = new_maker('sas')
|
48
|
+
expected = [
|
49
|
+
[
|
50
|
+
' "H" = "Household"',
|
51
|
+
' "P" = "Person"',
|
52
|
+
],
|
53
|
+
[
|
54
|
+
' 1 = "Directly covered person"',
|
55
|
+
' 2 = "Covered through family member"',
|
56
|
+
' 3 = "Not covered"',
|
57
|
+
],
|
58
|
+
]
|
59
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE SOCSEC) )
|
60
|
+
var_list.each_index { |i|
|
61
|
+
actual = mk.syn_val_labs_for_var(var_list[i])
|
62
|
+
assert_equal expected[i], actual, msg
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_syn_val_lab_for_val
|
67
|
+
msg = 'Compare against hardcoded result.'
|
68
|
+
fmt = " %-8s %s %s"
|
69
|
+
mk = new_maker('sas')
|
70
|
+
var = new_variable()
|
71
|
+
var.values[0] = new_value()
|
72
|
+
tests = [
|
73
|
+
[ false, 99, 'fubb', [' 99 = "fubb"'] ],
|
74
|
+
[ false, 9, 'fubb', [' 9 = "fubb"'] ],
|
75
|
+
[ true, 'a', 'fubb', [' "a" = "fubb"'] ],
|
76
|
+
[
|
77
|
+
true,
|
78
|
+
'x' * 120,
|
79
|
+
'fubb' * 30,
|
80
|
+
[
|
81
|
+
' "' + ('x' * 100) + '" ',
|
82
|
+
' "' + ('x' * 20) + '" = "' + ('fubb' * 25) + '"',
|
83
|
+
' "' + ('fubb' * 5) + '"',
|
84
|
+
]
|
85
|
+
],
|
86
|
+
]
|
87
|
+
tests.each_index { |i|
|
88
|
+
var.is_string_var = tests[i][0]
|
89
|
+
var.values[0].value = tests[i][1]
|
90
|
+
var.values[0].label = tests[i][2]
|
91
|
+
actual = mk.syn_val_lab_for_val(var, var.values[0], fmt)
|
92
|
+
assert_equal tests[i][3], actual, msg
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_syn_var_locations
|
97
|
+
msg = 'Compare against hardcoded result.'
|
98
|
+
mk = new_maker('sas')
|
99
|
+
expected = [
|
100
|
+
' RECTYPE $ 1-1',
|
101
|
+
' DWNUM 2-7',
|
102
|
+
' SEX 68-68',
|
103
|
+
' AGE 69-71',
|
104
|
+
' RESPREV2 80-83 .3',
|
105
|
+
]
|
106
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE DWNUM SEX AGE RESPREV2) )
|
107
|
+
actual = mk.syn_var_locations(var_list)
|
108
|
+
assert_equal expected, actual, msg
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_syn_dfh_retain
|
112
|
+
mk = new_maker('sas')
|
113
|
+
|
114
|
+
msg = 'Compare against hardcoded result.'
|
115
|
+
expected = [
|
116
|
+
'retain',
|
117
|
+
' CANTON',
|
118
|
+
' URBAN',
|
119
|
+
' DWTYPE',
|
120
|
+
' OWNERSHP',
|
121
|
+
' RENT',
|
122
|
+
';',
|
123
|
+
'',
|
124
|
+
]
|
125
|
+
mk.sfc.rectangularize = true
|
126
|
+
assert_equal expected, mk.syn_dfh_retain, msg
|
127
|
+
|
128
|
+
msg = 'Should be empty list if rectangularize option is not set.'
|
129
|
+
expected = []
|
130
|
+
mk.sfc.rectangularize = false
|
131
|
+
assert_equal expected, mk.syn_dfh_retain, msg
|
132
|
+
|
133
|
+
msg = 'Should be empty list if there are no variables.'
|
134
|
+
expected = []
|
135
|
+
mk.sfc.rectangularize = true
|
136
|
+
mk.sfc.clear_variables
|
137
|
+
assert_equal expected, mk.syn_dfh_retain, msg
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_syn_dfh_rec_type_block
|
141
|
+
msg = 'Compare against hardcoded result.'
|
142
|
+
mk = new_maker('sas')
|
143
|
+
expected = [
|
144
|
+
'input',
|
145
|
+
' RECTYPE $ 1-1 @',
|
146
|
+
';',
|
147
|
+
]
|
148
|
+
actual = mk.syn_dfh_rec_type_block
|
149
|
+
assert_equal expected, actual, msg
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_syn_dfh_if_start
|
153
|
+
msg = 'Compare against hardcoded result.'
|
154
|
+
mk = new_maker('sas')
|
155
|
+
expected = [
|
156
|
+
'if RECTYPE = "H" then do;',
|
157
|
+
'else if RECTYPE = "P" then do;',
|
158
|
+
]
|
159
|
+
actual = [
|
160
|
+
mk.syn_dfh_if_start('if', 'H'),
|
161
|
+
mk.syn_dfh_if_start('else if', 'P'),
|
162
|
+
]
|
163
|
+
expected.each_index { |i| assert_equal expected[i], actual[i], msg }
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_syn_dfh_if_end
|
167
|
+
msg = 'Compare against hardcoded result: no rectangularize, '
|
168
|
+
mk = new_maker('sas')
|
169
|
+
expected = {
|
170
|
+
'H' => [ 'output;', 'end;', '' ],
|
171
|
+
'P' => [ 'output;', 'end;', '' ],
|
172
|
+
}
|
173
|
+
mk.sfc.rectangularize = false
|
174
|
+
expected.each { |k,v|
|
175
|
+
assert_equal expected[k], mk.syn_dfh_if_end(k), msg + k
|
176
|
+
}
|
177
|
+
|
178
|
+
msg = 'Compare against hardcoded result: rectangularize, '
|
179
|
+
mk.sfc.rectangularize = true
|
180
|
+
expected['H'].shift
|
181
|
+
expected.each { |k,v|
|
182
|
+
assert_equal expected[k], mk.syn_dfh_if_end(k), msg + k
|
183
|
+
}
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_syn_var_lab_for_var
|
187
|
+
msg = 'Compare against hardcoded result.'
|
188
|
+
mk = new_maker('sas')
|
189
|
+
expected = [
|
190
|
+
[ ' RECTYPE = "Record type"' ],
|
191
|
+
[ ' HDFIRSTD = "Head not first [""dwelling-wide""] {note}"' ],
|
192
|
+
[
|
193
|
+
' SEX = "' + ('fubb' * 25) + '"',
|
194
|
+
' "' + ('fubb' * 5) + '"',
|
195
|
+
],
|
196
|
+
]
|
197
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE HDFIRSTD SEX) )
|
198
|
+
var_list[2].label = 'fubb' * 30
|
199
|
+
expected.each_index { |i|
|
200
|
+
actual = mk.syn_var_lab_for_var(var_list[i])
|
201
|
+
assert_equal expected[i], actual, msg
|
202
|
+
}
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_syn_fmt_link_for_var_list
|
206
|
+
msg = 'Compare against hardcoded result.'
|
207
|
+
mk = new_maker('sas')
|
208
|
+
expected = [
|
209
|
+
' RECTYPE RECTYPE_f.',
|
210
|
+
' HDFIRSTD HDFIRSTD_f.',
|
211
|
+
' SEX SEX_f.',
|
212
|
+
]
|
213
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE HDFIRSTD SEX) )
|
214
|
+
actual = mk.syn_fmt_link_for_var_list(var_list)
|
215
|
+
assert_equal expected, actual, msg
|
216
|
+
|
217
|
+
msg = 'Should return [] if there are no variables.'
|
218
|
+
mk.sfc.clear_variables
|
219
|
+
assert_equal [], mk.syn_fmt_link, msg
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_implied_decimal_fmt
|
223
|
+
msg = 'Compare against hardcoded result.'
|
224
|
+
mk = new_maker('sas')
|
225
|
+
expected = [
|
226
|
+
'',
|
227
|
+
'',
|
228
|
+
' .1',
|
229
|
+
' .3',
|
230
|
+
]
|
231
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE SEX CANTON RESPREV2) )
|
232
|
+
actual = var_list.map { |v| mk.implied_decimal_fmt(v) }
|
233
|
+
assert_equal expected, actual, msg
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_non_last_non_common_vars
|
237
|
+
mk = new_maker('sas')
|
238
|
+
|
239
|
+
msg = 'Compare against hardcoded result.'
|
240
|
+
expected = ['CANTON', 'URBAN', 'DWTYPE', 'OWNERSHP', 'RENT']
|
241
|
+
var_list = mk.non_last_non_common_vars
|
242
|
+
assert_equal expected, vars_to_names(var_list), msg
|
243
|
+
|
244
|
+
msg = 'Should return empty list if there are no variables.'
|
245
|
+
mk.sfc.clear_variables
|
246
|
+
var_list = mk.non_last_non_common_vars
|
247
|
+
assert_equal [], vars_to_names(var_list), msg
|
248
|
+
end
|
249
|
+
|
250
|
+
end
|
251
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# This file is part of the Minnesota Population Center's stats_package_syntax_file_generator project.
|
2
|
+
# For copyright and licensing information, see the NOTICE and LICENSE files
|
3
|
+
# in this project's top-level directory, and also on-line at:
|
4
|
+
# https://github.com/mnpopcenter/stats_package_syntax_file_generator
|
5
|
+
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'setup.rb'))
|
7
|
+
|
8
|
+
module StatsPackageSyntaxFileGeneratorTest
|
9
|
+
class MakerSPSS < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include StatsPackageSyntaxFileGeneratorTestSetup
|
12
|
+
|
13
|
+
def test_create_maker_spss
|
14
|
+
msg = 'Try to create an object.'
|
15
|
+
mk = new_maker('spss')
|
16
|
+
assert_instance_of StatsPackageSyntaxFileGenerator::MakerSPSS, mk, msg
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_syn_dfh_file_type
|
20
|
+
msg = 'Compare against hardcoded result.'
|
21
|
+
mk = new_maker('spss')
|
22
|
+
expected = [
|
23
|
+
'file type mixed',
|
24
|
+
' /file = "xx9999a.dat"',
|
25
|
+
' /record = 1-1 (a)',
|
26
|
+
'.',
|
27
|
+
'',
|
28
|
+
]
|
29
|
+
assert_equal expected, mk.syn_dfh_file_type, msg
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_syn_dfh_data_block_start
|
33
|
+
msg = 'Compare against hardcoded result.'
|
34
|
+
mk = new_maker('spss')
|
35
|
+
expected = [
|
36
|
+
'record type "H".',
|
37
|
+
'data list /',
|
38
|
+
]
|
39
|
+
actual = mk.syn_dfh_data_block_start('H')
|
40
|
+
assert_equal expected, actual, msg
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_syn_var_locations
|
44
|
+
msg = 'Compare against hardcoded result.'
|
45
|
+
mk = new_maker('spss')
|
46
|
+
expected = [
|
47
|
+
' RECTYPE 1-1 (a)',
|
48
|
+
' CANTON 67-69 (1)',
|
49
|
+
' AGE 69-71',
|
50
|
+
' LIT 101-101',
|
51
|
+
]
|
52
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE CANTON AGE LIT) )
|
53
|
+
actual = mk.syn_var_locations(var_list)
|
54
|
+
assert_equal expected, actual, msg
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_syn_var_labs
|
58
|
+
msg = 'Compare against hardcoded result.'
|
59
|
+
mk = new_maker('spss')
|
60
|
+
expected = [
|
61
|
+
'variable labels',
|
62
|
+
' HHNUM """Household number"""',
|
63
|
+
' HDFIRSTD "Head not first [""dwelling-wide""] {note}"',
|
64
|
+
' CANTON "Canton ""geo area"""',
|
65
|
+
' SEX ".........x.........x.........x.........x.........x.........x.........x.........x.........x.........x"',
|
66
|
+
' + ".........x.........x"',
|
67
|
+
'.',
|
68
|
+
'',
|
69
|
+
]
|
70
|
+
var_list = names_to_vars( mk.sfc, %w(HHNUM HDFIRSTD CANTON SEX) )
|
71
|
+
var_list[-1].label = '.........x' * 15
|
72
|
+
actual = mk.syn_var_labs(var_list)
|
73
|
+
assert_equal expected, actual, msg
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_syn_val_labs_for_var
|
77
|
+
msg = 'Compare against hardcoded result.'
|
78
|
+
mk = new_maker('spss')
|
79
|
+
expected = [
|
80
|
+
[
|
81
|
+
' /RECTYPE',
|
82
|
+
' "H" "Household"',
|
83
|
+
' "P" "Person"',
|
84
|
+
],
|
85
|
+
[
|
86
|
+
' /URBAN',
|
87
|
+
' 1 "Urban"',
|
88
|
+
' 2 "Rural"',
|
89
|
+
],
|
90
|
+
[
|
91
|
+
' /SEX',
|
92
|
+
' 1 "Male"',
|
93
|
+
' 2 ".........x.........x.........x.........x.........x.........x.........x.........x.........x.........x"',
|
94
|
+
' + ".........x.........x"',
|
95
|
+
],
|
96
|
+
]
|
97
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE URBAN SEX) )
|
98
|
+
var_list[-1].values[-1].label = '.........x' * 15
|
99
|
+
var_list.each_index { |i|
|
100
|
+
actual = mk.syn_val_labs_for_var(var_list[i])
|
101
|
+
assert_equal expected[i], actual, msg
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_var_fmt
|
106
|
+
msg = 'Compare against hardcoded result.'
|
107
|
+
mk = new_maker('spss')
|
108
|
+
expected = [
|
109
|
+
' (a)',
|
110
|
+
' (1)',
|
111
|
+
'',
|
112
|
+
' (3)',
|
113
|
+
]
|
114
|
+
var_list = names_to_vars( mk.sfc, %w(RECTYPE CANTON URBAN RESPREV2) )
|
115
|
+
actual = var_list.map { |v| mk.var_fmt(v) }
|
116
|
+
assert_equal expected, actual, msg
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|