TestCase::checkHeader()   A
last analyzed

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
     */
32
    protected function generateVariable($opts = []): Variable
33
    {
34
        $opts = array_merge([
35
            'id' => uniqid(),
36
            'numeric' => mt_rand(0, 1),
37
            'casesCount' => 0,
38
        ], $opts
39
        );
40
41
        $var = [
42
            'name' => sprintf('VAR%s', $opts['id']),
43
            'label' => sprintf('Label (%s)', $opts['id']),
44
            'columns' => mt_rand(0, 100),
45
            'alignment' => mt_rand(0, 2),
46
            'measure' => mt_rand(1, 3),
47
            'width' => 8,
48
        ];
49
50
        if ($opts['numeric']) {
51
            $var['format'] = Variable::FORMAT_TYPE_F;
52
            $var['decimals'] = mt_rand(0, 2);
53
            for ($c = 0; $c < $opts['casesCount']; $c++) {
54
                $var['data'][$c] = mt_rand(1, 99999) . '.' . mt_rand(1, 99999);
55
            }
56
        } else {
57
            $var['format'] = Variable::FORMAT_TYPE_A;
58
59
            // TODO: test > 255
60
            $var['width'] = mt_rand(2, 2000);
61
            $var['decimals'] = 0;
62
            for ($c = 0; $c < $opts['casesCount']; $c++) {
63
                $var['data'][$c] = trim($this->generateRandomString(mt_rand(0, $var['width'])));
64
            }
65
        }
66
67
        return new Variable($var['name'], $var);
68
    }
69
70
    /**
71
     * @param int $length
72
     * @return string
73
     */
74
    protected function generateRandomString($length = 10)
75
    {
76
        $characters = '_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
77
        $charactersLength = strlen($characters);
78
        $randomString = '';
79
        for ($i = 0; $i < $length; $i++) {
80
            $randomString .= $characters[rand(0, $charactersLength - 1)];
81
        }
82
83
        return trim($randomString);
84
    }
85
}
86