';
$reader = new MathML();
$math = $reader->read($content);
$this->assertInstanceOf(Math::class, $math);
$elements = $math->getElements();
$this->assertCount(1, $elements);
$this->assertInstanceOf(Element\Row::class, $elements[0]);
/** @var Element\Row $element */
$element = $elements[0];
$subElements = $element->getElements();
$this->assertCount(9, $subElements);
/** @var Element\Identifier $subElement */
$subElement = $subElements[0];
$this->assertInstanceOf(Element\Identifier::class, $subElement);
$this->assertEquals('a', $subElement->getValue());
/** @var Element\Identifier $subElement */
$subElement = $subElements[1];
$this->assertInstanceOf(Element\Operator::class, $subElement);
$this->assertEquals('InvisibleTimes', $subElement->getValue());
/** @var Element\Superscript $subElement */
$subElement = $subElements[2];
$this->assertInstanceOf(Element\Superscript::class, $subElements[2]);
/** @var Element\Identifier $base */
$base = $subElement->getBase();
$this->assertInstanceOf(Element\Identifier::class, $base);
$this->assertEquals('x', $base->getValue());
/** @var Element\Numeric $superscript */
$superscript = $subElement->getSuperscript();
$this->assertInstanceOf(Element\Numeric::class, $superscript);
$this->assertEquals(2, $superscript->getValue());
/** @var Element\Operator $subElement */
$subElement = $subElements[3];
$this->assertInstanceOf(Element\Operator::class, $subElement);
$this->assertEquals('+', $subElement->getValue());
/** @var Element\Identifier $subElement */
$subElement = $subElements[4];
$this->assertInstanceOf(Element\Identifier::class, $subElement);
$this->assertEquals('b', $subElement->getValue());
/** @var Element\Operator $subElement */
$subElement = $subElements[5];
$this->assertInstanceOf(Element\Operator::class, $subElement);
$this->assertEquals('InvisibleTimes', $subElement->getValue());
/** @var Element\Identifier $subElement */
$subElement = $subElements[6];
$this->assertInstanceOf(Element\Identifier::class, $subElement);
$this->assertEquals('x', $subElement->getValue());
/** @var Element\Operator $subElement */
$subElement = $subElements[7];
$this->assertInstanceOf(Element\Operator::class, $subElement);
$this->assertEquals('+', $subElement->getValue());
/** @var Element\Identifier $subElement */
$subElement = $subElements[8];
$this->assertInstanceOf(Element\Identifier::class, $subElement);
$this->assertEquals('c', $subElement->getValue());
}
public function testReadFraction(): void
{
$content = '
';
$reader = new MathML();
$math = $reader->read($content);
$this->assertInstanceOf(Math::class, $math);
$elements = $math->getElements();
$this->assertCount(1, $elements);
$this->assertInstanceOf(Element\Fraction::class, $elements[0]);
/** @var Element\Fraction $element */
$element = $elements[0];
$this->assertInstanceOf(Element\Fraction::class, $element->getNumerator());
/** @var Element\Fraction $subElement */
$subElement = $element->getNumerator();
/** @var Element\Identifier $numerator */
$numerator = $subElement->getNumerator();
$this->assertInstanceOf(Element\Identifier::class, $numerator);
$this->assertEquals('a', $numerator->getValue());
/** @var Element\Identifier $denominator */
$denominator = $subElement->getDenominator();
$this->assertInstanceOf(Element\Identifier::class, $denominator);
$this->assertEquals('b', $denominator->getValue());
$this->assertInstanceOf(Element\Fraction::class, $element->getDenominator());
/** @var Element\Fraction $subElement */
$subElement = $element->getDenominator();
/** @var Element\Identifier $numerator */
$numerator = $subElement->getNumerator();
$this->assertInstanceOf(Element\Identifier::class, $numerator);
$this->assertEquals('c', $numerator->getValue());
/** @var Element\Identifier $denominator */
$denominator = $subElement->getDenominator();
$this->assertInstanceOf(Element\Identifier::class, $denominator);
$this->assertEquals('d', $denominator->getValue());
}
public function testReadFractionInvalid(): void
{
$this->expectException(InvalidInputException::class);
$this->expectExceptionMessage('PhpOffice\Math\Reader\MathML::getElement : The tag `mfrac` has not two subelements');
$content = '
';
$reader = new MathML();
$math = $reader->read($content);
}
public function testReadSuperscriptInvalid(): void
{
$this->expectException(InvalidInputException::class);
$this->expectExceptionMessage('PhpOffice\Math\Reader\MathML::getElement : The tag `msup` has not two subelements');
$content = '
';
$reader = new MathML();
$math = $reader->read($content);
}
public function testReadSemantics(): void
{
$content = '
';
$reader = new MathML();
$math = $reader->read($content);
$this->assertInstanceOf(Math::class, $math);
$elements = $math->getElements();
$this->assertCount(1, $elements);
$this->assertInstanceOf(Element\Semantics::class, $elements[0]);
/** @var Element\Semantics $element */
$element = $elements[0];
// Check MathML
$subElements = $element->getElements();
$this->assertCount(1, $subElements);
$this->assertInstanceOf(Element\Row::class, $subElements[0]);
// Check Annotation
$this->assertCount(1, $element->getAnnotations());
$this->assertEquals('{π} over {2} + { a } * 2', $element->getAnnotation('StarMath 5.0'));
}
public function testReadNotImplemented(): void
{
$this->expectException(NotImplementedException::class);
$this->expectExceptionMessage('PhpOffice\Math\Reader\MathML::getElement : The tag `mnotexisting` is not implemented');
$content = '
';
$reader = new MathML();
$math = $reader->read($content);
}
}