SavDateFormatTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 325
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 234
c 2
b 0
f 0
dl 0
loc 325
rs 10
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
B dataProvider() 0 286 1
A testWriteRead() 0 25 2
1
<?php
2
3
namespace SPSS\Tests;
4
5
use SPSS\Sav\Record;
6
use SPSS\Sav\Variable;
7
use SPSS\Sav\Reader;
8
use SPSS\Sav\Writer;
9
10
class SavDateFormatTest extends TestCase
11
{
12
    /**
13
     * @return array
14
     */
15
    public function dataProvider()
16
    {
17
        $header = [
18
            'recType' => Record\Header::NORMAL_REC_TYPE,
19
            'prodName' => '@(#) SPSS DATA FILE',
20
            'layoutCode' => 2,
21
            'nominalCaseSize' => 47,
22
            'casesCount' => 3,
23
            'compression' => 1,
24
            'weightIndex' => 0,
25
            'bias' => 100,
26
            'creationDate' => date('d M y'),
27
            'creationTime' => date('H:i:s'),
28
            'fileLabel' => 'test dates',
29
        ];
30
31
        $variables = [
32
            new Variable('DATE_11', [
33
                'format' => Variable::FORMAT_TYPE_DATE, // dd-mmm-yyyy
34
                'width' => 11,
35
                'data' => [
36
                    '01-Jan-1001',
37
                    '13-Feb-1989',
38
                    '10-Jan-2017',
39
                ],
40
            ]),
41
            new Variable('DATE_9', [
42
                'format' => Variable::FORMAT_TYPE_DATE, // dd-mmm-yy
43
                'width' => 9,
44
                'data' => [
45
                    '01-Feb-89',
46
                    '01-Feb-00',
47
                    '01-Feb-17',
48
                ],
49
            ]),
50
            new Variable('TIME_5', [
51
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm
52
                'width' => 5,
53
                'data' => [
54
                    '00:00',
55
                    '12:30',
56
                    '59:59',
57
                ],
58
            ]),
59
            new Variable('TIME_8', [
60
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm:ss
61
                'width' => 8,
62
                'data' => [
63
                    '00:00:00',
64
                    '12:30:13',
65
                    '59:59:59',
66
                ],
67
            ]),
68
            new Variable('TIME_11', [
69
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm:ss.s
70
                'width' => 11,
71
                'decimals' => 2,
72
                'data' => [
73
                    '00:00:00.12',
74
                    '12:30:13.99',
75
                    '59:59:59.99',
76
                ],
77
            ]),
78
            new Variable('DTIME_17',[
79
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm
80
                'width' => 17,
81
                'data' => [
82
                    '14-Oct-1989 13:30',
83
                    '14-Oct-1989 13:30',
84
                    '14-Oct-1989 13:30',
85
                ],
86
            ]),
87
            new Variable('DTIME_20',[
88
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm:ss
89
                'width' => 20,
90
                'data' => [
91
                    '13-Feb-1989 13:30:59',
92
                    '13-Feb-1989 13:30:59',
93
                    '13-Feb-1989 13:30:59',
94
                ],
95
            ]),
96
            new Variable('DTIME_23', [
97
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm:ss
98
                'width' => 23,
99
                'decimals' => 2,
100
                'data' => [
101
                    '13-Feb-1989 13:30:59.99',
102
                    '13-Feb-1989 13:30:59.99',
103
                    '13-Feb-1989 13:30:59.99',
104
                ],
105
            ]),
106
            new Variable('ADATE_8', [
107
                'format' => Variable::FORMAT_TYPE_ADATE, // mm/dd/yy
108
                'width' => 8,
109
                'data' => [
110
                    '02/13/89',
111
                    '02/13/89',
112
                    '02/13/89',
113
                ],
114
            ]),
115
            new Variable('ADATE_10', [
116
                'format' => Variable::FORMAT_TYPE_ADATE, // mm/dd/yyyy
117
                'width' => 10,
118
                'data' => [
119
                    '02/13/1989',
120
                    '02/13/1989',
121
                    '02/13/1989',
122
                ],
123
            ]),
124
            new Variable('JDATE_5', [
125
                'format' => Variable::FORMAT_TYPE_JDATE, // Julian date - yyddd
126
                'width' => 5,
127
                'data' => [
128
                    '90301',
129
                    '90301',
130
                    '90301',
131
                ],
132
            ]),
133
            new Variable('JDATE_7', [
134
                'format' => Variable::FORMAT_TYPE_JDATE, // Julian date - yyyyddd
135
                'width' => 7,
136
                'data' => [
137
                    '1990301',
138
                    '1990301',
139
                    '1990301',
140
                ],
141
            ]),
142
            new Variable('DTIME_9', [
143
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm
144
                'width' => 9,
145
                'data' => [
146
                    '13 13:13',
147
                    '14 14:14',
148
                    '15 15:15',
149
                ],
150
            ]),
151
            new Variable('DTIME_12', [
152
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm:ss
153
                'width' => 12,
154
                'data' => [
155
                    '13 13:13:13',
156
                    '14 14:14:14',
157
                    '15 15:15:15',
158
                ],
159
            ]),
160
            new Variable('DTIME_15', [
161
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm:ss.s
162
                'width' => 15,
163
                'decimals' => 2,
164
                'data' => [
165
                    '13 13:13:13.13',
166
                    '14 14:14:14.14',
167
                    '15 15:15:15.15',
168
                ],
169
            ]),
170
            new Variable('WKDAY', [
171
                'format' => Variable::FORMAT_TYPE_WKDAY,
172
                'width' => 3,
173
                'data' => [
174
                    'Sun',
175
                    'Mon',
176
                    'Tue',
177
                ],
178
            ]),
179
            new Variable('WKDAY_9', [
180
                'format' => Variable::FORMAT_TYPE_WKDAY, // Monday
181
                'width' => 9,
182
                'data' => [
183
                    'Sunday',
184
                    'Monday',
185
                    'Tuesday',
186
                ],
187
            ]),
188
            new Variable('MONTH', [
189
                'format' => Variable::FORMAT_TYPE_MONTH, // Jan
190
                'width' => 3,
191
                'data' => [
192
                    'Jan',
193
                    'Feb',
194
                    'Mar',
195
                ],
196
            ]),
197
            new Variable('MONTH_9', [
198
                'format' => Variable::FORMAT_TYPE_MONTH, // January
199
                'width' => 9,
200
                'data' => [
201
                    'January',
202
                    'February',
203
                    'March',
204
                ],
205
            ]),
206
            new Variable('MOYR_6', [
207
                'format' => Variable::FORMAT_TYPE_MOYR, // mmm yy
208
                'width' => 6,
209
                'data' => [
210
                    'OCT 90',
211
                    'OCT 90',
212
                    'OCT 90',
213
                ],
214
            ]),
215
            new Variable('MOYR_8', [
216
                'format' => Variable::FORMAT_TYPE_MOYR, // mmm yyyy
217
                'width' => 8,
218
                'data' => [
219
                    'OCT 1990',
220
                    'OCT 1990',
221
                    'OCT 1990',
222
                ],
223
            ]),
224
            new Variable('QYR_6', [
225
                'format' => Variable::FORMAT_TYPE_QYR, // q Q yy
226
                'width' => 6,
227
                'data' => [
228
                    '4 Q 90',
229
                    '4 Q 90',
230
                    '4 Q 90',
231
                ],
232
            ]),
233
            new Variable('QYR_8', [
234
                'format' => Variable::FORMAT_TYPE_QYR, // q Q yyyy
235
                'width' => 8,
236
                'data' => [
237
                    '4 Q 1990',
238
                    '4 Q 1990',
239
                    '4 Q 1990',
240
                ],
241
            ]),
242
            new Variable('WKYR_8', [
243
                'format' => Variable::FORMAT_TYPE_WKYR, // ww WK yy
244
                'width' => 8,
245
                'data' => [
246
                    '43 WK 90',
247
                    '43 WK 90',
248
                    '43 WK 90',
249
                ],
250
            ]),
251
            new Variable('WKYR_10', [
252
                'format' => Variable::FORMAT_TYPE_WKYR, // ww WK yyyy
253
                'width' => 10,
254
                'data' => [
255
                    '43 WK 1990',
256
                    '43 WK 1990',
257
                    '43 WK 1990',
258
                ],
259
            ]),
260
            new Variable('EDATE_8', [
261
                'format' => Variable::FORMAT_TYPE_EDATE, // dd.mm.yy
262
                'width' => 8,
263
                'data' => [
264
                    '28.10.90',
265
                    '28.10.90',
266
                    '28.10.90',
267
                ],
268
            ]),
269
            new Variable('EDATE_10', [
270
                'format' => Variable::FORMAT_TYPE_EDATE, // dd.mm.yyyy
271
                'width' => 10,
272
                'data' => [
273
                    '28.10.1990',
274
                    '28.10.1990',
275
                    '28.10.1990',
276
                ],
277
            ]),
278
            new Variable('SDATE_8', [
279
                'format' => Variable::FORMAT_TYPE_SDATE, // yy/mm/dd
280
                'width' => 8,
281
                'data' => [
282
                    '90/10/28',
283
                    '90/10/28',
284
                    '90/10/28',
285
                ],
286
            ]),
287
            new Variable('SDATE_10', [
288
                'format' => Variable::FORMAT_TYPE_SDATE, // yyyy/mm/dd
289
                'width' => 10,
290
                'data' => [
291
                    '1990/10/28',
292
                    '1990/10/28',
293
                    '1990/10/28',
294
                ],
295
            ]),
296
        ];
297
298
        return [
299
            [
300
                compact('header', 'variables'),
301
            ],
302
        ];
303
    }
304
305
    /**
306
     * @dataProvider dataProvider
307
     * @param array $data
308
     * @throws \Exception
309
     */
310
    public function testWriteRead($data)
311
    {
312
        $writer = new Writer($data);
313
314
        $buffer = $writer->getBuffer();
315
        $buffer->rewind();
316
317
        $stream = $buffer->getStream();
318
319
        $reader = Reader::fromString($stream)->read();
0 ignored issues
show
Bug introduced by
$stream of type resource is incompatible with the type string expected by parameter $str of SPSS\Sav\Reader::fromString(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

319
        $reader = Reader::fromString(/** @scrutinizer ignore-type */ $stream)->read();
Loading history...
320
321
        $this->checkHeader($data['header'], $reader);
322
323
        $index = 0;
324
        foreach ($data['variables'] as $var) {
325
            /** @var Record\Variable $_var */
326
            $_var = $reader->variables[$index];
327
328
            // TODO: test long variables
329
            // $this->assertEquals($var['name'], $_var->name);
330
331
            $this->assertEquals($var->format, $_var->print[1]);
332
            $this->assertEquals($var->getWidth(), $_var->print[2]);
333
334
            $index++;
335
        }
336
    }
337
338
}
339