/** * @dataProvider writeVariableValueProvider * * @param Variable $variable */ public function testWriteVariableValue(Variable $variable) { $stream = new MemoryStream(); $stream->open(); $access = new QtiBinaryStreamAccessFsFile($stream); // Write the variable value. $access->writeVariableValue($variable); $stream->rewind(); $testVariable = clone $variable; // Reset the value of $testVariable. $testVariable->setValue(null); // Read what we just wrote. $access->readVariableValue($testVariable); $originalValue = $variable->getValue(); $readValue = $testVariable->getValue(); // Compare. if (is_null($originalValue) === true) { $this->assertSame($originalValue, $readValue); } else { if (is_scalar($originalValue) === true) { $this->assertEquals($originalValue, $readValue); } else { if ($originalValue instanceof RecordContainer) { $this->assertEquals($originalValue->getCardinality(), $readValue->getCardinality()); $this->assertTrue($readValue->equals($originalValue)); } else { if ($originalValue instanceof Container) { // MULTIPLE or ORDERED container. $this->assertEquals($originalValue->getCardinality(), $readValue->getCardinality()); $this->assertEquals($readValue->getBaseType(), $readValue->getBaseType()); $this->assertTrue($readValue->equals($originalValue), $originalValue . " != " . $readValue); } else { if ($originalValue instanceof Comparable) { // Complex QTI Runtime object. $this->assertTrue($readValue->equals($originalValue)); } else { // Unknown datatype. $this->assertTrue(false); } } } } } }
/** * @dataProvider writeVariableValueProvider * * @param Variable $variable */ public function testWriteVariableValue(Variable $variable, $valueType = QtiBinaryStreamAccessFsFile::RW_VALUE) { $stream = new MemoryStream(); $stream->open(); $access = new QtiBinaryStreamAccessFsFile($stream); switch ($valueType) { case QtiBinaryStreamAccessFsFile::RW_DEFAULTVALUE: $setterToCall = 'setDefaultValue'; $getterToCall = 'getDefaultValue'; break; case QtiBinaryStreamAccessFsFile::RW_CORRECTRESPONSE: $setterToCall = 'setCorrectResponse'; $getterToCall = 'getCorrectResponse'; break; default: $setterToCall = 'setValue'; $getterToCall = 'getValue'; break; } // Write the variable value. $access->writeVariableValue($variable, $valueType); $stream->rewind(); $testVariable = clone $variable; // Reset the value of $testVariable. call_user_func(array($testVariable, $setterToCall), null); // Read what we just wrote. $access->readVariableValue($testVariable, $valueType); $originalValue = call_user_func(array($variable, $getterToCall)); $readValue = call_user_func(array($testVariable, $getterToCall)); // Compare. if (is_null($originalValue) === true) { $this->assertSame($originalValue, $readValue); } else { if (is_scalar($originalValue) === true) { $this->assertEquals($originalValue, $readValue); } else { if ($originalValue instanceof RecordContainer) { $this->assertEquals($originalValue->getCardinality(), $readValue->getCardinality()); $this->assertTrue($readValue->equals($originalValue)); } else { if ($originalValue instanceof Container) { // MULTIPLE or ORDERED container. $this->assertEquals($originalValue->getCardinality(), $readValue->getCardinality()); $this->assertEquals($readValue->getBaseType(), $readValue->getBaseType()); $this->assertTrue($readValue->equals($originalValue), $originalValue . " != " . $readValue); } else { if ($originalValue instanceof Comparable) { // Complex QTI Runtime object. $this->assertTrue($readValue->equals($originalValue)); } else { // Unknown datatype. $this->assertTrue(false); } } } } } }