PHP Classes

File: tests/unit/CollectionTest.php

Recommend this page to a friend!
  Classes of Haseeb Ahmad Basil   PHP Skeleton Framework   tests/unit/CollectionTest.php   Download  
File: tests/unit/CollectionTest.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Skeleton Framework
Extensive Web application development framework
Author: By
Last change:
Date: 8 years ago
Size: 9,306 bytes
 

Contents

Class file image Download
<?php

class A_CollectionTest extends UnitTestCase
{
    public function
testConstruct()
    {
       
$collection = new A_Collection(array('foo' => 'bar', 'baz' => array('foobar' => 'barfoo')));
       
       
$this->assertEqual($collection->get('foo'), 'bar');
       
$this->assertEqual($collection->get('baz')->get('foobar'), 'barfoo');
       
$this->assertEqual($collection->count(), 2);
       
$this->assertEqual($collection->get('baz')->count(), 1);
    }
   
    public function
testImport()
    {
       
$collection = new A_Collection(array('foo' => 'bar', 'baz' => array('foobar' => 'barfoo'), 'bar' => 'baz'));
       
$return = $collection->import(array('bar' => 'foo', 'baz' => array('foo' => 'bar'), 'barfoo' => 'foo'));
       
       
$this->assertEqual($collection->get('foo'), 'bar');
       
$this->assertEqual($collection->get('baz')->get('foobar'), 'barfoo');
       
$this->assertEqual($collection->get('baz')->get('foo'), 'bar');
       
$this->assertEqual($collection->get('bar'), 'foo');
       
$this->assertEqual($collection->get('barfoo'), 'foo');
       
$this->assertEqual($collection->count(), 4);
       
$this->assertEqual($collection->get('baz')->count(), 2);
       
       
// make sure import() returns self
       
$this->assertEqual($return, $collection);
    }
   
    public function
testGet()
    {
       
$collection = $this->createFlatCollection();
       
$collection->set('foo', 'bar');
       
       
$this->assertEqual($collection->get('foo'), 'bar');
       
$this->assertEqual($collection->get('baz', 'default'), 'default');
       
$this->assertTrue($collection->get('baz') === null);
    }
   
    public function
testSet()
    {
       
$collection = new A_Collection();
       
       
$collection->set('foo', 'bar');
       
$this->assertEqual($collection->get('foo'), 'bar');
       
       
$collection->set('foo', 'baz', 'bar');
       
$this->assertEqual($collection->get('foo'), 'baz');
       
       
$collection->set('foo', null, 'bar');
       
$this->assertEqual($collection->get('foo'), 'bar');
       
       
$collection->set('foo', null, null);
       
$this->assertFalse($collection->has('foo'));
       
       
// make sure set() returns self
       
$return = $collection->set(null, null, null);
       
$this->assertEqual($return, $collection);
    }
   
    public function
testAdd()
    {
       
$collection = new A_Collection();
       
       
$collection->add('foo');
       
$this->assertEqual($collection->get(0), 'foo');
       
       
$collection->add('bar', false);
       
$this->assertEqual($collection->get(1), 'bar');
       
       
$collection->add('baz', true);
       
$this->assertEqual($collection->get(2), 'baz');
       
       
$collection = new A_Collection();
       
       
$collection->add(null);
       
$this->assertTrue($collection->get(0, 'foo'), null);
       
       
$collection->add(null, false);
       
$this->assertTrue($collection->get(1, 'foo'), null);
       
       
$collection->add(null, true);
       
$this->assertFalse($collection->has(2));
       
       
// make sure add() returns self
       
$return = $collection->add(null);
       
$this->assertEqual($return, $collection);
    }

    public function
testAddAll()
    {
       
$collection = new A_Collection(array(
           
'foo' => 'bar',
           
'barfoo' => 'baz'
       
));
       
       
$array = array(2, 4, 'foo');
       
$collection->addAll($array);

       
$this->assertEqual($collection->toArray(), array(
           
'foo' => 'bar',
           
'barfoo' => 'baz',
           
0 => 2,
           
1 => 4,
           
2 => 'foo'
       
));

       
$collection = new A_Collection();
       
$otherCollection = new A_Collection(array(
           
'foo' => 'bar',
           
'blah' => 'baz'
       
));

       
$collection->addAll($otherCollection);

       
$this->assertEqual($collection->toArray(), array(
           
0 => 'bar',
           
1 => 'baz'
       
));

       
$collection = new A_Collection();
       
$array = array('foo', 'bar', null, false, 0, '', 'baz');

       
$collection->addAll($array, true);

       
$this->assertEqual($collection->toArray(), array(
           
'foo',
           
'bar',
           
false,
           
0,
           
'',
           
'baz'
       
));
    }
   
    public function
testRemove()
    {
       
$collection = new A_Collection();
       
       
$collection->set('foo', 'bar');
       
$this->assertEqual($collection->get('foo'), 'bar');
       
       
$collection->remove('foo');
       
$this->assertFalse($collection->has('foo'));
       
       
// make sure remove() returns self
       
$return = $collection->remove(null);
       
$this->assertEqual($return, $collection);
    }
   
    public function
testCount()
    {
       
$collection = new A_Collection();
       
       
$this->assertEqual($collection->count(), 0);
       
       
$collection->add('foo');
       
$this->assertEqual($collection->count(), 1);
       
       
$collection->set('bar', 'baz');
       
$this->assertEqual($collection->count(), 2);
       
       
$collection->set('baz', null);
       
$this->assertEqual($collection->count(), 2);
       
       
$collection->remove(0);
       
$this->assertEqual($collection->count(), 1);
    }
   
    public function
testUserSort()
    {
       
$items = array(
            array(
'name' => 'bob', 'age' => 40),
            array(
'name' => 'mike', 'age' => 23),
            array(
'name' => 'jim', 'age' => 37)
        );
       
$collection = new A_Collection($items);
       
       
$this->assertTrue($collection->get(0)->get('name') == $items[0]['name']);
       
$this->assertTrue($collection->get(1)->get('name') == $items[1]['name']);
       
$this->assertTrue($collection->get(2)->get('name') == $items[2]['name']);
       
       
$return = $collection->userSort(function ($item1, $item2) {
            return
$item1->get('age') - $item2->get('age');
        });
       
// make sure userSort returns it's object
       
$this->assertTrue($return == $collection);
       
       
$this->assertTrue($collection->get(0)->get('name') == $items[1]['name']);
       
$this->assertTrue($collection->get(1)->get('name') == $items[2]['name']);
       
$this->assertTrue($collection->get(2)->get('name') == $items[0]['name']);
    }
   
    public function
testSlice()
    {
       
$collection = new A_Collection(array('foo' => 'bar', 'baz' => 'foobar', 'barfoo' => 'foobarbaz', 'bazbarfoo' => 'foobazbar'));
       
       
$slice = $collection->slice(1, 2);
       
       
$this->assertEqual($slice->count(), 2);
       
$this->assertEqual($slice->get('baz'), 'foobar');
       
$this->assertEqual($slice->get('barfoo'), 'foobarbaz');
       
       
$slice = $collection->slice(1);
       
       
$this->assertEqual($slice->count(), 3);
       
$this->assertEqual($slice->get('baz'), 'foobar');
       
$this->assertEqual($slice->get('barfoo'), 'foobarbaz');
       
$this->assertEqual($slice->get('bazbarfoo'), 'foobazbar');
    }
   
    public function
testHas()
    {
       
$collection = new A_Collection(array('foo' => 'bar'));
       
       
$this->assertTrue($collection->has('foo'));
       
$this->assertFalse($collection->has('baz'));
    }
   
    public function
testToArray()
    {
       
$collection = new A_Collection(array('foo' => 'bar', 'baz'));
       
$this->assertEqual($collection->toArray(), $collection->toArray(false));
       
       
$array = $collection->toArray();
       
$this->assertTrue(is_array($array));
       
$this->assertEqual($array['foo'], 'bar');
       
$this->assertEqual($array[0], 'baz');
       
       
$collection = new A_Collection(array('foo' => 'bar', 'bar' => array('baz' => 'foo')));
       
$this->assertEqual($collection->toArray(), $collection->toArray(false));
       
       
$array = $collection->toArray();
       
$this->assertTrue(is_array($array));
       
$this->assertEqual($array['foo'], 'bar');
       
$this->assertFalse(is_array($array['bar']));
       
$this->assertEqual($array['bar']->get('baz'), 'foo');
       
       
$array = $collection->toArray(true);
       
$this->assertTrue(is_array($array));
       
$this->assertEqual($array['foo'], 'bar');
       
$this->assertTrue(is_array($array));
       
$this->assertEqual($array['bar']['baz'], 'foo');
    }
   
    public function
testNestedJoin()
    {
       
$collection = $this->createNestedCollection();
       
$joined = $collection->join('');
       
       
$this->assertEqual($joined, 'foobarfoobarbarfooblah');
    }
   
    public function
testFlatJoin()
    {
       
$collection = $this->createFlatCollection();
       
$joined = $collection->join('');
       
       
$this->assertEqual($joined, 'foobarfoobar');
    }
   
    public function
testIterator()
    {
       
$array = array('foo' => 'bar', 'baz' => 'foobar');
       
$collection = new A_Collection($array);
       
       
// do twice to make sure there are no problems with reset()
       
for ($i = 0; $i < 2; $i++) {
            foreach (
$collection as $key => $value) {
               
$this->assertEqual($value, $array[$key]);
            }
        }
    }
   
    public function
testArrayAccess()
    {
       
$collection = new A_Collection();
       
       
$this->assertFalse(isset($collection['foo']));
       
       
$collection['foo'] = 'bar';
       
$this->assertTrue(isset($collection['foo']));
       
$this->assertEqual($collection['foo'], 'bar');
       
        unset(
$collection['foo']);
       
$this->assertFalse(isset($collection['foo']));
    }
   
    public function
test__ToString()
    {
       
$collection = $this->createNestedCollection();
       
       
$this->assertEqual(strval($collection), $collection->join(','));
    }
   
    public function
test__Set()
    {
       
$collection = new A_Collection();
       
       
$collection->foo = 'bar';
       
$this->assertEqual($collection->get('foo'), 'bar');
       
       
$collection->foo = null;
       
$this->assertFalse($collection->has('foo'));
    }
   
    public function
test__Get()
    {
       
$collection = new A_Collection(array('foo' => 'bar'));
       
       
$this->assertEqual($collection->foo, 'bar');
    }
   
   
// NON-TEST UTILITY METHODS
   
   
private function createNestedCollection()
    {
        return new
A_Collection(array(
           
'foo',
           
'bar',
            array(
               
'foobar',
                array(
                   
'barfoo'
               
)
            ),
           
'blah'
       
));
    }
   
    private function
createFlatCollection()
    {
        return new
A_Collection(array(
           
'foo',
           
'bar',
           
'foobar'
       
));
    }
}