Completed
Push — master ( dd1269...21c3dd )
by Sam
02:11
created

SavDateFormatTest::testWriteRead()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 25
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 25
rs 9.8666
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
            [
33
                'name' => 'DATE_11',
34
                'format' => Variable::FORMAT_TYPE_DATE, // dd-mmm-yyyy
35
                'width' => 11,
36
                'data' => [
37
                    '01-Jan-1001',
38
                    '13-Feb-1989',
39
                    '10-Jan-2017',
40
                ],
41
            ],
42
            [
43
                'name' => 'DATE_9',
44
                'format' => Variable::FORMAT_TYPE_DATE, // dd-mmm-yy
45
                'width' => 9,
46
                'data' => [
47
                    '01-Feb-89',
48
                    '01-Feb-00',
49
                    '01-Feb-17',
50
                ],
51
            ],
52
            [
53
                'name' => 'TIME_5',
54
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm
55
                'width' => 5,
56
                'data' => [
57
                    '00:00',
58
                    '12:30',
59
                    '59:59',
60
                ],
61
            ],
62
            [
63
                'name' => 'TIME_8',
64
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm:ss
65
                'width' => 8,
66
                'data' => [
67
                    '00:00:00',
68
                    '12:30:13',
69
                    '59:59:59',
70
                ],
71
            ],
72
            [
73
                'name' => 'TIME_11',
74
                'format' => Variable::FORMAT_TYPE_TIME, // hh:mm:ss.s
75
                'width' => 11,
76
                'decimals' => 2,
77
                'data' => [
78
                    '00:00:00.12',
79
                    '12:30:13.99',
80
                    '59:59:59.99',
81
                ],
82
            ],
83
            [
84
                'name' => 'DTIME_17',
85
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm
86
                'width' => 17,
87
                'data' => [
88
                    '14-Oct-1989 13:30',
89
                    '14-Oct-1989 13:30',
90
                    '14-Oct-1989 13:30',
91
                ],
92
            ],
93
            [
94
                'name' => 'DTIME_20',
95
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm:ss
96
                'width' => 20,
97
                'data' => [
98
                    '13-Feb-1989 13:30:59',
99
                    '13-Feb-1989 13:30:59',
100
                    '13-Feb-1989 13:30:59',
101
                ],
102
            ],
103
            [
104
                'name' => 'DTIME_23',
105
                'format' => Variable::FORMAT_TYPE_DATETIME, // dd-mmm-yyy hh:mm:ss
106
                'width' => 23,
107
                'decimals' => 2,
108
                'data' => [
109
                    '13-Feb-1989 13:30:59.99',
110
                    '13-Feb-1989 13:30:59.99',
111
                    '13-Feb-1989 13:30:59.99',
112
                ],
113
            ],
114
            [
115
                'name' => 'ADATE_8',
116
                'format' => Variable::FORMAT_TYPE_ADATE, // mm/dd/yy
117
                'width' => 8,
118
                'data' => [
119
                    '02/13/89',
120
                    '02/13/89',
121
                    '02/13/89',
122
                ],
123
            ],
124
            [
125
                'name' => 'ADATE_10',
126
                'format' => Variable::FORMAT_TYPE_ADATE, // mm/dd/yyyy
127
                'width' => 10,
128
                'data' => [
129
                    '02/13/1989',
130
                    '02/13/1989',
131
                    '02/13/1989',
132
                ],
133
            ],
134
            [
135
                'name' => 'JDATE_5',
136
                'format' => Variable::FORMAT_TYPE_JDATE, // Julian date - yyddd
137
                'width' => 5,
138
                'data' => [
139
                    '90301',
140
                    '90301',
141
                    '90301',
142
                ],
143
            ],
144
            [
145
                'name' => 'JDATE_7',
146
                'format' => Variable::FORMAT_TYPE_JDATE, // Julian date - yyyyddd
147
                'width' => 7,
148
                'data' => [
149
                    '1990301',
150
                    '1990301',
151
                    '1990301',
152
                ],
153
            ],
154
            [
155
                'name' => 'DTIME_9',
156
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm
157
                'width' => 9,
158
                'data' => [
159
                    '13 13:13',
160
                    '14 14:14',
161
                    '15 15:15',
162
                ],
163
            ],
164
            [
165
                'name' => 'DTIME_12',
166
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm:ss
167
                'width' => 12,
168
                'data' => [
169
                    '13 13:13:13',
170
                    '14 14:14:14',
171
                    '15 15:15:15',
172
                ],
173
            ],
174
            [
175
                'name' => 'DTIME_15',
176
                'format' => Variable::FORMAT_TYPE_DTIME, // dd hh:mm:ss.s
177
                'width' => 15,
178
                'decimals' => 2,
179
                'data' => [
180
                    '13 13:13:13.13',
181
                    '14 14:14:14.14',
182
                    '15 15:15:15.15',
183
                ],
184
            ],
185
            [
186
                'name' => 'WKDAY',
187
                'format' => Variable::FORMAT_TYPE_WKDAY,
188
                'width' => 3,
189
                'data' => [
190
                    'Sun',
191
                    'Mon',
192
                    'Tue',
193
                ],
194
            ],
195
            [
196
                'name' => 'WKDAY_9',
197
                'format' => Variable::FORMAT_TYPE_WKDAY, // Monday
198
                'width' => 9,
199
                'data' => [
200
                    'Sunday',
201
                    'Monday',
202
                    'Tuesday',
203
                ],
204
            ],
205
            [
206
                'name' => 'MONTH',
207
                'format' => Variable::FORMAT_TYPE_MONTH, // Jan
208
                'width' => 3,
209
                'data' => [
210
                    'Jan',
211
                    'Feb',
212
                    'Mar',
213
                ],
214
            ],
215
            [
216
                'name' => 'MONTH_9',
217
                'format' => Variable::FORMAT_TYPE_MONTH, // January
218
                'width' => 9,
219
                'data' => [
220
                    'January',
221
                    'February',
222
                    'March',
223
                ],
224
            ],
225
            [
226
                'name' => 'MOYR_6',
227
                'format' => Variable::FORMAT_TYPE_MOYR, // mmm yy
228
                'width' => 6,
229
                'data' => [
230
                    'OCT 90',
231
                    'OCT 90',
232
                    'OCT 90',
233
                ],
234
            ],
235
            [
236
                'name' => 'MOYR_8',
237
                'format' => Variable::FORMAT_TYPE_MOYR, // mmm yyyy
238
                'width' => 8,
239
                'data' => [
240
                    'OCT 1990',
241
                    'OCT 1990',
242
                    'OCT 1990',
243
                ],
244
            ],
245
            [
246
                'name' => 'QYR_6',
247
                'format' => Variable::FORMAT_TYPE_QYR, // q Q yy
248
                'width' => 6,
249
                'data' => [
250
                    '4 Q 90',
251
                    '4 Q 90',
252
                    '4 Q 90',
253
                ],
254
            ],
255
            [
256
                'name' => 'QYR_8',
257
                'format' => Variable::FORMAT_TYPE_QYR, // q Q yyyy
258
                'width' => 8,
259
                'data' => [
260
                    '4 Q 1990',
261
                    '4 Q 1990',
262
                    '4 Q 1990',
263
                ],
264
            ],
265
            [
266
                'name' => 'WKYR_8',
267
                'format' => Variable::FORMAT_TYPE_WKYR, // ww WK yy
268
                'width' => 8,
269
                'data' => [
270
                    '43 WK 90',
271
                    '43 WK 90',
272
                    '43 WK 90',
273
                ],
274
            ],
275
            [
276
                'name' => 'WKYR_10',
277
                'format' => Variable::FORMAT_TYPE_WKYR, // ww WK yyyy
278
                'width' => 10,
279
                'data' => [
280
                    '43 WK 1990',
281
                    '43 WK 1990',
282
                    '43 WK 1990',
283
                ],
284
            ],
285
            [
286
                'name' => 'EDATE_8',
287
                'format' => Variable::FORMAT_TYPE_EDATE, // dd.mm.yy
288
                'width' => 8,
289
                'data' => [
290
                    '28.10.90',
291
                    '28.10.90',
292
                    '28.10.90',
293
                ],
294
            ],
295
            [
296
                'name' => 'EDATE_10',
297
                'format' => Variable::FORMAT_TYPE_EDATE, // dd.mm.yyyy
298
                'width' => 10,
299
                'data' => [
300
                    '28.10.1990',
301
                    '28.10.1990',
302
                    '28.10.1990',
303
                ],
304
            ],
305
            [
306
                'name' => 'SDATE_8',
307
                'format' => Variable::FORMAT_TYPE_SDATE, // yy/mm/dd
308
                'width' => 8,
309
                'data' => [
310
                    '90/10/28',
311
                    '90/10/28',
312
                    '90/10/28',
313
                ],
314
            ],
315
            [
316
                'name' => 'SDATE_10',
317
                'format' => Variable::FORMAT_TYPE_SDATE, // yyyy/mm/dd
318
                'width' => 10,
319
                'data' => [
320
                    '1990/10/28',
321
                    '1990/10/28',
322
                    '1990/10/28',
323
                ],
324
            ],
325
        ];
326
327
        return [
328
            [
329
                compact('header', 'variables'),
330
            ],
331
        ];
332
    }
333
334
    /**
335
     * @dataProvider dataProvider
336
     * @param array $data
337
     * @throws \Exception
338
     */
339
    public function testWriteRead($data)
340
    {
341
        $writer = new Writer($data);
342
343
        $buffer = $writer->getBuffer();
344
        $buffer->rewind();
345
346
        $stream = $buffer->getStream();
347
348
        $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

348
        $reader = Reader::fromString(/** @scrutinizer ignore-type */ $stream)->read();
Loading history...
349
350
        $this->checkHeader($data['header'], $reader);
351
352
        $index = 0;
353
        foreach ($data['variables'] as $var) {
354
            /** @var Record\Variable $_var */
355
            $_var = $reader->variables[$index];
356
357
            // TODO: test long variables
358
            // $this->assertEquals($var['name'], $_var->name);
359
360
            $this->assertEquals($var['format'], $_var->print[1]);
361
            $this->assertEquals($var['width'], $_var->print[2]);
362
363
            $index++;
364
        }
365
    }
366
367
}
368