a x2 +bx +c '; $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 = ' a b c d '; $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 = ' a '; $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 = ' a '; $reader = new MathML(); $math = $reader->read($content); } public function testReadSemantics(): void { $content = ' π 2 + a 2 {π} over {2} + { a } * 2 '; $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 = ' a '; $reader = new MathML(); $math = $reader->read($content); } }