/** * Process a $value depending on its $baseType. * * @param integer $baseType The baseType of the value to process. * @param mixed $value A QTI Runtime compliant value. * @throws PrintedVariableProcessingException If the baseType is unknown. * @return string */ private function processValue($baseType, $value) { $printedVariable = $this->getComponent(); if ($value === null) { return 'null'; } if ($baseType === BaseType::INT_OR_IDENTIFIER) { $baseType = is_int($value) === true ? BaseType::INTEGER : BaseType::STRING; } else { if ($baseType === BaseType::IDENTIFIER || $baseType === BaseType::URI) { $baseType = BaseType::STRING; } else { if ($baseType === BaseType::FILE) { // @todo support baseType::FILE in PrintedVariable. $msg = "the 'file' BaseType is not supported yet by PrintedVariableEngine implementation."; throw new PrintedVariableProcessingException($msg, $this, PrintedVariableProcessingException::RUNTIME_ERROR); } } } if ($baseType === BaseType::STRING) { return $value->getValue(); } else { if ($baseType === BaseType::INTEGER || $baseType === BaseType::FLOAT) { $format = $printedVariable->getFormat(); if (empty($format) === false) { $format = Format::printfFormatIsoToPhp($format); return sprintf($format, $value->getValue()); } else { if ($baseType === BaseType::FLOAT && $printedVariable->mustPowerForm() === true) { return Format::scale10($value->getValue(), 'x'); } else { if ($baseType === BaseType::FLOAT) { return sprintf('%e', $value->getValue()); } else { // integer to string return '' . $value->getValue(); } } } } else { if ($baseType === BaseType::DURATION) { return '' . $value->getSeconds(true); } else { if ($baseType === BaseType::BOOLEAN) { return $value->getValue() === true ? 'true' : 'false'; } else { if ($baseType === BaseType::POINT || $baseType === BaseType::PAIR || $baseType === BaseType::DIRECTED_PAIR) { return $value->__toString(); } else { $msg = "Unknown value type."; throw new PrintedVariableProcessingException($msg, $this, PrintedVariableProcessingException::RUNTIME_ERROR); } } } } } }
/** * @dataProvider printfFormatIsoToPhpProvider * * @param string $input * @param boolean $expected */ public function testPrintfFormatIsoToPhp($input, $expected) { $this->assertEquals($expected, Format::printfFormatIsoToPhp($input)); }