<?php 
 | 
class BotSessionTest extends PHPUnit_Framework_TestCase { 
 | 
    private static $dataFolder; 
 | 
    private static $legacyFolder; 
 | 
     
 | 
    private static function tmpdir() { 
 | 
        $tmpName = tempnam(sys_get_temp_dir(), 'Bot'); 
 | 
        unlink($tmpName); 
 | 
        mkdir($tmpName); 
 | 
        return $tmpName; 
 | 
    } 
 | 
     
 | 
    private static function rmdir($dir) { 
 | 
        foreach(glob($dir.'/*', GLOB_NOSORT) as $name) { 
 | 
            if($name == '.' || $name == '..') continue; 
 | 
             
 | 
            if(is_dir($name)) { 
 | 
                self::rmdir($name); 
 | 
            } else { 
 | 
                unlink($name); 
 | 
            } 
 | 
        } 
 | 
         
 | 
        rmdir($dir); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * Create one-time directories for testing purposes. 
 | 
     */ 
 | 
    static function setUpBeforeClass() { 
 | 
        self::$dataFolder = self::tmpdir(); 
 | 
        self::$legacyFolder = self::tmpdir(); 
 | 
    } 
 | 
     
 | 
    function testPullEmpty() { 
 | 
        $session = new BotSession('test://user1@test', self::$dataFolder, self::$legacyFolder); 
 | 
        $session->setClass('test'); 
 | 
         
 | 
        $this->assertEquals(array(), $session->pull()); 
 | 
        $this->assertTrue(count(glob(self::$dataFolder.'/*.sqlite')) == 1); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * @expectedException Exception 
 | 
     */ 
 | 
    function testSetClass() { 
 | 
        $session = new BotSession('test://testException', self::$dataFolder, self::$legacyFolder); 
 | 
        $session->pull(); 
 | 
    } 
 | 
     
 | 
    function testLegacyImport() { 
 | 
        $data = array('test' => true, 'other' => 'yes, sir!'); 
 | 
        $data_serialized = serialize($data); 
 | 
         
 | 
        $this->assertTrue(mkdir(self::$legacyFolder.'/test')); 
 | 
         
 | 
        $filename = self::$legacyFolder.'/test/legacyUser.ggdb'; 
 | 
        $this->assertEquals(strlen($data_serialized), file_put_contents($filename, $data_serialized)); 
 | 
        $this->assertEquals($data_serialized, file_get_contents($filename)); 
 | 
         
 | 
        $session = new BotSession('test://legacyUser@test', self::$dataFolder, self::$legacyFolder); 
 | 
        $session->setClass('test'); 
 | 
         
 | 
        $this->assertTrue(isset($session->test)); 
 | 
        $this->assertEquals($data, $session->pull()); 
 | 
         
 | 
        $this->assertFalse(file_exists($filename)); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * @depends testPullEmpty 
 | 
     */ 
 | 
    function testManualExample() { 
 | 
        $session = new BotSession('test://user1@test', self::$dataFolder, self::$legacyFolder); 
 | 
        $session->setClass('test'); 
 | 
         
 | 
        // Ustawienie pojedynczej wartości 
 | 
        $session->zmienna = 'To jest test'; 
 | 
        $this->assertTrue(isset($session->zmienna)); 
 | 
        $this->assertEquals('To jest test', $session->zmienna); 
 | 
         
 | 
        // Usunięcie pojedynczej wartości 
 | 
        unset($session->zmienna); 
 | 
        $this->assertFalse(isset($session->zmienna)); 
 | 
        $this->assertEquals(NULL, $session->zmienna); 
 | 
         
 | 
        // Ustawienie pojedynczej wartości ponownie 
 | 
        $session->zmienna = 'To jest test'; 
 | 
        $this->assertTrue(isset($session->zmienna)); 
 | 
        $this->assertEquals('To jest test', $session->zmienna); 
 | 
         
 | 
        // Usunięcie wszystkich danych 
 | 
        $session->truncate(); 
 | 
        $this->assertFalse(isset($session->zmienna)); 
 | 
        $this->assertEquals(NULL, $session->zmienna); 
 | 
        $this->assertEquals(array(), $session->pull()); 
 | 
  
 | 
        // Dopisanie (nadpisanie) danych 
 | 
        $array = array( 
 | 
            'zmienna' => 'To jest test2', 
 | 
            'zmienna2' => new DateTime('2012-01-10') 
 | 
        ); 
 | 
        $session->push($array); 
 | 
  
 | 
        $this->assertEquals('To jest test2', $session->zmienna); 
 | 
        $this->assertEquals($array, $session->pull()); 
 | 
         
 | 
        // push() nie usuwa istniejących danych 
 | 
        $session->zmienna3 = '333'; 
 | 
        $session->push($array); 
 | 
        $this->assertNotEquals($array, $session->pull()); 
 | 
         
 | 
        unset($this->session); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * @depends testManualExample 
 | 
     */ 
 | 
    function testManualExample2() { 
 | 
        $session = new BotSession('test://user1@test', self::$dataFolder, self::$legacyFolder); 
 | 
        $session->setClass('test'); 
 | 
         
 | 
        $array = array( 
 | 
            'zmienna' => 'To jest test2', 
 | 
            'zmienna2' => new DateTime('2012-01-10'), 
 | 
            'zmienna3' => '333' 
 | 
        ); 
 | 
         
 | 
        $this->assertEquals($array, $session->pull()); 
 | 
         
 | 
         
 | 
        $session->setClass('test2'); 
 | 
        $this->assertEquals(array(), $session->pull()); 
 | 
    } 
 | 
     
 | 
    static function tearDownAfterClass() { 
 | 
        foreach(glob(self::$dataFolder.'/*.sqlite') as $file) { 
 | 
            unlink($file); 
 | 
        } 
 | 
         
 | 
        self::rmdir(self::$dataFolder); 
 | 
        self::rmdir(self::$legacyFolder); 
 | 
    } 
 | 
} 
 |