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

TestCase::checkHeader()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 8
c 1
b 0
f 0
nc 2
nop 2
dl 0
loc 10
rs 10
1
<?php
2
3
namespace SPSS\Tests;
4
5
use SPSS\Sav\Reader;
6
use SPSS\Sav\Variable;
7
8
class TestCase extends \PHPUnit\Framework\TestCase
9
{
10
    /**
11
     * @param array $header
12
     * @param Reader $reader
13
     */
14
    protected function checkHeader(array $header, Reader $reader)
15
    {
16
        foreach ($header as $key => $value) {
17
            $this->assertEquals(
18
                $value,
19
                $reader->header->{$key},
20
                sprintf(
21
                    'Header line `%s` is invalid: expected `%s` but got `%s`.',
22
                    $key,
23
                    $value, $reader->header->{$key}
24
                )
25
            );
26
        }
27
    }
28
29
    /**
30
     * @param array $opts
31
     * @return array
32
     */
33
    protected function generateVariable($opts = [])
34
    {
35
        $opts = array_merge([
36
            'id' => uniqid(),
37
            'numeric' => mt_rand(0, 1),
38
            'casesCount' => 0,
39
        ], $opts
40
        );
41
42
        $var = [
43
            'name' => sprintf('VAR%s', $opts['id']),
44
            'label' => sprintf('Label (%s)', $opts['id']),
45
            'columns' => mt_rand(0, 100),
46
            'alignment' => mt_rand(0, 2),
47
            'measure' => mt_rand(1, 3),
48
            'width' => 8,
49
        ];
50
51
        if ($opts['numeric']) {
52
            $var['format'] = Variable::FORMAT_TYPE_F;
53
            $var['decimals'] = mt_rand(0, 2);
54
            for ($c = 0; $c < $opts['casesCount']; $c++) {
55
                $var['data'][$c] = mt_rand(1, 99999) . '.' . mt_rand(1, 99999);
56
            }
57
        } else {
58
            $var['format'] = Variable::FORMAT_TYPE_A;
59
60
            // TODO: test > 255
61
            $var['width'] = mt_rand(2, 200);
62
            $var['decimals'] = 0;
63
            for ($c = 0; $c < $opts['casesCount']; $c++) {
64
                $var['data'][$c] = trim($this->generateRandomString(mt_rand(0, $var['width'])));
65
            }
66
        }
67
68
        return $var;
69
    }
70
71
    /**
72
     * @param int $length
73
     * @return string
74
     */
75
    protected function generateRandomString($length = 10)
76
    {
77
        $characters = '_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
78
        $charactersLength = strlen($characters);
79
        $randomString = '';
80
        for ($i = 0; $i < $length; $i++) {
81
            $randomString .= $characters[rand(0, $charactersLength - 1)];
82
        }
83
84
        return trim($randomString);
85
    }
86
}
87