| 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 |  |  |  |