metaDataClass(); $this->assertAttributeEquals( array(), 'storageData', $meta ); $this->assertAttributeEquals( array(), 'replacementData', $meta ); } public function testAddItemBase() { $meta = new $this->metaDataClass(); $this->assertAttributeEquals( array(), 'storageData', $meta ); // Add first item to unknown storage $meta->addItem( 'storage_id_1', 'item_id_1' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), ), 'storageData', $meta ); // Add first item to second unknown storage $meta->addItem( 'storage_id_2', 'item_id_1' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, ), ), 'storageData', $meta ); // Add second item to known storag $meta->addItem( 'storage_id_2', 'item_id_2' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'storageData', $meta ); // Add existing item without changes $meta->addItem( 'storage_id_1', 'item_id_1' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'storageData', $meta ); } public function testRemoveItem() { $meta = new $this->metaDataClass(); $meta->setState( array( 'storageData' => array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'replacementData' => array( 'item_id_1' => 1, 'item_id_2' => 2, ) ) ); // Assert basis $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'storageData', $meta ); $this->assertAttributeEquals( array( 'item_id_1' => 1, 'item_id_2' => 2, ), 'replacementData', $meta ); // Remove item with non empty storage afterwards $meta->removeItem( 'storage_id_2', 'item_id_1' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_2' => true, ), ), 'storageData', $meta ); $this->assertAttributeEquals( array( 'item_id_1' => 1, 'item_id_2' => 2, ), 'replacementData', $meta ); // Remove item with empty storage afterwards $meta->removeItem( 'storage_id_2', 'item_id_2' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), ), 'storageData', $meta ); $this->assertAttributeEquals( array( 'item_id_1' => 1, ), 'replacementData', $meta ); // Remove unknown item $meta->removeItem( 'storage_id_1', 'item_id_2' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), ), 'storageData', $meta ); $this->assertAttributeEquals( array( 'item_id_1' => 1, ), 'replacementData', $meta ); // Remove from unknown storage $meta->removeItem( 'storage_id_2', 'item_id_1' ); $this->assertAttributeEquals( array( 'storage_id_1' => array( 'item_id_1' => true, ), ), 'storageData', $meta ); $this->assertAttributeEquals( array( 'item_id_1' => 1, ), 'replacementData', $meta ); } public function testHasItem() { $meta = new $this->metaDataClass(); $meta->setState( array( 'storageData' => array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'replacementData' => array( 'item_id_1' => 1, 'item_id_2' => 2, ) ) ); // Known item in known storage $this->assertTrue( $meta->hasItem( 'storage_id_1', 'item_id_1' ) ); // Known item in unknown storage $this->assertFalse( $meta->hasItem( 'storage_id_3', 'item_id_1' ) ); // Unknown item in known storage $this->assertFalse( $meta->hasItem( 'storage_id_1', 'item_id_2' ) ); // Unknown item in unknown storage $this->assertFalse( $meta->hasItem( 'storage_id_3', 'item_id_3' ) ); } public function testReachedItemLimit() { $meta = new $this->metaDataClass(); $meta->setState( array( 'storageData' => array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'replacementData' => array( 'item_id_1' => 1, 'item_id_2' => 2, ) ) ); // Reached limit exactly $this->assertTrue( $meta->reachedItemLimit( 'storage_id_2', 2 ) ); // Over limit $this->assertTrue( $meta->reachedItemLimit( 'storage_id_2', 1 ) ); // Under limit $this->assertFalse( $meta->reachedItemLimit( 'storage_id_2', 3 ) ); // Unknown storage $this->assertFalse( $meta->reachedItemLimit( 'storage_id_3', 3 ) ); } public function testGetReplacementItems() { $meta = new $this->metaDataClass(); $meta->setState( array( 'storageData' => array( ), 'replacementData' => array( 'item_id_1' => 4, 'item_id_2' => 3, 'item_id_5' => 2, 'item_id_3' => 8, 'item_id_4' => 5, ) ) ); $sorted = array( 'item_id_5' => 2, 'item_id_2' => 3, 'item_id_1' => 4, 'item_id_4' => 5, 'item_id_3' => 8, ); // Returned array correctly sorted $this->assertEquals( $sorted, $meta->getReplacementItems() ); // Attribute correctly sorted $this->assertAttributeEquals( $sorted, 'replacementData', $meta ); } public function testGetData() { $meta = new $this->metaDataClass(); $data = array( 'storageData' => array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'replacementData' => array( 'item_id_1' => 1, 'item_id_2' => 2, ) ); $meta->setState( $data ); $returnedData = $meta->getState(); $this->assertEquals( $data['replacementData'], $returnedData['replacementData'] ); $this->assertEquals( $data['storageData'], $returnedData['storageData'] ); } public function testSetData() { $meta = new $this->metaDataClass(); $data = array( 'storageData' => array( 'storage_id_1' => array( 'item_id_1' => true, ), 'storage_id_2' => array( 'item_id_1' => true, 'item_id_2' => true, ), ), 'replacementData' => array( 'item_id_1' => 1, 'item_id_2' => 2, ) ); $meta->setState( $data ); $this->assertAttributeEquals( $data['replacementData'], 'replacementData', $meta ); $this->assertAttributeEquals( $data['storageData'], 'storageData', $meta ); } } ?>