<?php 
namespace Test\Providers; 
 
use TADPHP\Providers\TADZKLib; 
use Test\Helpers\ClassReflection; 
 
 
class TADZKLibTest extends \PHPUnit_Framework_TestCase 
{ 
 
  public function testBuildTADZKLibIsOk() 
  { 
    $options = ['ip' => '127.0.0.1', 'udp_port' => 4370, 'connection_timeout'=>1]; 
    $zk = new TADZKLib( $options ); 
 
    $this->assertNotNull($zk); 
    $this->assertInstanceOf('TADPHP\Providers\TADZKLib', $zk); 
 
    return $zk; 
  } 
  /** 
   * @depends testBuildTADZKLibIsOk 
   * @dataProvider build_commands_fixtures 
   */ 
  public function testBuildCommandResponse($command, $result_code, $result, $expected_xml, $encoding, TADZKLib $zk) 
  { 
    $result = ClassReflection::invoke_method($zk, 'build_command_response', [ $command, $result_code, $result, $encoding ]); 
 
    $this->assertEquals($expected_xml, $result); 
  } 
 
  /** 
   * @depends testBuildTADZKLibIsOk 
   * @dataProvider datetime_fixtures 
   */ 
  public function testSettingUpDateIsOk($datetime, TADZKLib $zk) 
  { 
    $valid_datetime_keys = ['year', 'month', 'day', 'hour', 'minute', 'second']; 
 
    $result = ClassReflection::invoke_method( $zk, 'setup_datetime', [$datetime] ); 
    $result_keys = array_keys($result); 
 
    $this->assertEmpty( array_diff( $valid_datetime_keys, $result_keys ), 'invalid keys found!'); 
  } 
 
  /** 
   * @depends testBuildTADZKLibIsOk 
   */ 
  public function testReverseHex(TADZKLib $zk) 
  { 
    $hex_data = "000000000000000000000000000000002202000000000000420400000000000043000000000000004a0a00000000000002000000020000001027000010270000400d0300ce220000ee240000fd0c0300000000000000000000000000"; 
 
    $reversed_hex = ClassReflection::invoke_method($zk, 'reverse_hex', [$hex_data]); 
    $reversed_reversed_hex = ClassReflection::invoke_method($zk, 'reverse_hex', [$reversed_hex]); 
 
    $this->assertEquals( strlen($hex_data), strlen($reversed_hex)); 
    $this->assertEquals( $hex_data, $reversed_reversed_hex ); 
  } 
 
  /** 
   * @depends testBuildTADZKLibIsOk 
   */ 
  public function testEncodeTime(TADZKLib $zk) 
  { 
    $expected_encoded_time = 480003771; // This integer represents '2014-12-07 14:22:51' timestamp. 
 
    $dt = ['date'=>'2014-12-07', 'time'=>'14:22:51']; 
    $t = ClassReflection::invoke_method($zk, 'setup_datetime', [$dt]); 
    $encoded_time = ClassReflection::invoke_method($zk, 'encode_time', [$t]); 
 
    $this->assertInternalType('integer', $encoded_time); 
    $this->assertEquals($expected_encoded_time, $encoded_time); 
  } 
 
 
 
  public function build_commands_fixtures() 
  { 
    $encoding = 'iso8859-1'; 
    return [ 
      [ 'restart', true, true, '<RestartResponse><Row><Result>1</Result><Information>Successfully!</Information></Row></RestartResponse>', $encoding], 
      [ 'poweroff', false, false, '<PoweroffResponse><Row><Result>0</Result><Information>Fail!</Information></Row></PoweroffResponse>', $encoding], 
      [ 'foo', true, ['bar'=>0, 'taz'=>0], '<FooResponse><Row><bar>0</bar><taz>0</taz></Row></FooResponse>', $encoding], 
      [ 'foo', true, [], '<FooResponse></FooResponse>', $encoding] 
    ]; 
  } 
 
  public function datetime_fixtures() 
  { 
    return [ 
      'empty_args' => [ [] ], 
      'only_date'  => [ ['date'=>'2014-12-06'] ], 
      'only_time'  => [ ['time'=>'08:38:23'] ], 
      'valid_args' => [ ['date'=>'2014-12-06', 'time'=>'08:38:23'] ] , 
      'crazy_args' => [ ['foo'=>'123', 'bar'=>'abc', 'baz'=>'#$%'] ] 
    ]; 
  } 
}
 
 |