1 | <?php |
||
2 | |||
3 | namespace SPSS\Tests; |
||
4 | |||
5 | use SPSS\Buffer; |
||
6 | use SPSS\ByteCodeReader; |
||
7 | use SPSS\Sav\Reader; |
||
8 | use SPSS\Sav\Variable; |
||
9 | use SPSS\Sav\Writer; |
||
10 | |||
11 | class LongStringTest extends TestCase |
||
12 | { |
||
13 | |||
14 | public function testLongString() |
||
15 | { |
||
16 | // $reader = new ByteCodeReader(Buffer::factory(fopen('/tmp/test.bin', 'r'))); |
||
17 | // var_dump($reader->read(104)); |
||
18 | // var_dump($reader->read(152)); |
||
19 | // var_dump($reader->read(256)); |
||
20 | // var_dump($reader->read(264)); |
||
21 | // var_dump($reader->read(104)); |
||
22 | // var_dump($reader->read(152)); |
||
23 | // var_dump($reader->read(256)); |
||
24 | // var_dump($reader->read(256)); |
||
25 | // var_dump($reader->read(8)); |
||
26 | // die(); |
||
27 | $firstLong = str_repeat('1234567890', 3000); |
||
28 | $secondLong = str_repeat('abcdefghij', 3000); |
||
29 | $data = [ |
||
30 | 'header' => [ |
||
31 | 'prodName' => '@(#) IBM SPSS STATISTICS', |
||
32 | 'layoutCode' => 2, |
||
33 | 'creationDate' => '08 May 19', |
||
34 | 'creationTime' => '12:22:16', |
||
35 | ], |
||
36 | 'variables' => [ |
||
37 | new Variable('SHORT', [ |
||
38 | 'label' => 'short label', |
||
39 | 'width' => 100, |
||
40 | 'format' => Variable::FORMAT_TYPE_A, |
||
41 | 'attributes' => [ |
||
42 | '$@Role' => Variable::ROLE_INPUT, |
||
43 | ], |
||
44 | 'data' => [ |
||
45 | '20202020202020202020', |
||
46 | '303030303030303030303030303030', |
||
47 | ] |
||
48 | ]), |
||
49 | new Variable('MEDIUM', [ |
||
50 | 'label' => 'medium label', |
||
51 | 'width' => 150, |
||
52 | 'format' => Variable::FORMAT_TYPE_A, |
||
53 | 'attributes' => [ |
||
54 | '$@Role' => Variable::ROLE_INPUT, |
||
55 | ], |
||
56 | 'data' => [ |
||
57 | '210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210', |
||
58 | '02600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260', |
||
59 | ] |
||
60 | ]), |
||
61 | new Variable('MEDIUMER', [ |
||
62 | 'name' => 'MEDIUMER', |
||
63 | 'label' => 'mediumer label', |
||
64 | 'width' => 250, |
||
65 | 'format' => Variable::FORMAT_TYPE_A, |
||
66 | 'attributes' => [ |
||
67 | '$@Role' => Variable::ROLE_INPUT, |
||
68 | ], |
||
69 | 'data' => [ |
||
70 | '210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210', |
||
71 | '02600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260', |
||
72 | ] |
||
73 | ]), |
||
74 | new Variable('SHORTLONG', [ |
||
75 | 'name' => 'SHORTLONG', |
||
76 | 'label' => 'short long label', |
||
77 | 'width' => 265, |
||
78 | 'format' => Variable::FORMAT_TYPE_A, |
||
79 | 'attributes' => [ |
||
80 | '$@Role' => Variable::ROLE_INPUT, |
||
81 | ], |
||
82 | 'data' => [ |
||
83 | '210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210', |
||
84 | '0260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026002600260026012345', |
||
85 | ] |
||
86 | ]), |
||
87 | new Variable('LONGER1', [ |
||
88 | 'label' => 'long label1', |
||
89 | 'width' => 30000, |
||
90 | 'format' => Variable::FORMAT_TYPE_A, |
||
91 | 'attributes' => [ |
||
92 | '$@Role' => Variable::ROLE_INPUT, |
||
93 | ], |
||
94 | 'data' => [ |
||
95 | $firstLong, |
||
96 | $secondLong |
||
97 | ] |
||
98 | ]), |
||
99 | new Variable('LONGER2', [ |
||
100 | 'name' => 'LONGER2', |
||
101 | 'label' => 'long label2', |
||
102 | 'width' => 30000, |
||
103 | 'format' => Variable::FORMAT_TYPE_A, |
||
104 | 'attributes' => [ |
||
105 | '$@Role' => Variable::ROLE_INPUT, |
||
106 | ], |
||
107 | 'data' => [ |
||
108 | $firstLong, |
||
109 | $secondLong |
||
110 | ] |
||
111 | ]), |
||
112 | new Variable('short', [ |
||
113 | 'name' => 'short', |
||
114 | 'label' => 'short label', |
||
115 | 'format' => Variable::FORMAT_TYPE_F, |
||
116 | 'width' => 8, |
||
117 | 'attributes' => [ |
||
118 | '$@Role' => Variable::ROLE_INPUT, |
||
119 | ], |
||
120 | 'data' => [ |
||
121 | 12135.12, |
||
122 | 123 |
||
123 | ], |
||
124 | ]), |
||
125 | new Variable('short', [ |
||
126 | 'label' => 'short label', |
||
127 | 'format' => Variable::FORMAT_TYPE_A, |
||
128 | 'width' => 8, |
||
129 | 'attributes' => [ |
||
130 | '$@Role' => Variable::ROLE_INPUT, |
||
131 | ], |
||
132 | 'data' => [ |
||
133 | '12345678', |
||
134 | 'abcdefgh' |
||
135 | ], |
||
136 | ]), |
||
137 | ], |
||
138 | ]; |
||
139 | $writer = new Writer($data); |
||
140 | $this->assertSame(15, $writer->header->nominalCaseSize); |
||
141 | |||
142 | // Uncomment if you want to really save and check the resulting file in SPSS |
||
143 | $writer->save('/tmp/longString.sav'); |
||
144 | |||
145 | $buffer = $writer->getBuffer(); |
||
146 | $buffer->rewind(); |
||
147 | |||
148 | $reader = Reader::fromString($buffer->getStream())->read(); |
||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
149 | /** |
||
150 | * @var $i |
||
151 | * @var Variable $variable |
||
152 | */ |
||
153 | foreach ($data['variables'] as $i => $variable) { |
||
154 | foreach($variable->data as $case => $value) { |
||
155 | if (is_string($value)) { |
||
156 | $this->assertSame(substr($value, 0, $variable->getWidth()), $reader->data[$case][$i], |
||
157 | "Position ($case, $i)"); |
||
158 | } elseif (is_numeric($value)) { |
||
159 | $this->assertEqualsWithDelta($value, $reader->data[$case][$i], 0.00001); |
||
160 | } else { |
||
161 | var_dump($value); die(); |
||
0 ignored issues
–
show
|
|||
162 | } |
||
163 | } |
||
164 | } |
||
165 | |||
166 | } |
||
167 | |||
168 | } |
||
169 |