1
This commit is contained in:
243
vendor/phpoffice/math/tests/Math/Reader/MathMLTest.php
vendored
Normal file
243
vendor/phpoffice/math/tests/Math/Reader/MathMLTest.php
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\PhpOffice\Math\Reader;
|
||||
|
||||
use PhpOffice\Math\Element;
|
||||
use PhpOffice\Math\Exception\InvalidInputException;
|
||||
use PhpOffice\Math\Exception\NotImplementedException;
|
||||
use PhpOffice\Math\Math;
|
||||
use PhpOffice\Math\Reader\MathML;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class MathMLTest extends TestCase
|
||||
{
|
||||
public function testReadBasic(): void
|
||||
{
|
||||
$content = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||
<mrow>
|
||||
<mi>a</mi> <mo>⁢</mo> <msup><mi>x</mi><mn>2</mn></msup>
|
||||
<mo>+</mo><mi>b</mi><mo>⁢</mo><mi>x</mi>
|
||||
<mo>+</mo><mi>c</mi>
|
||||
</mrow>
|
||||
</math>';
|
||||
|
||||
$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 = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||
<mfrac bevelled="true">
|
||||
<mfrac>
|
||||
<mi> a </mi>
|
||||
<mi> b </mi>
|
||||
</mfrac>
|
||||
<mfrac>
|
||||
<mi> c </mi>
|
||||
<mi> d </mi>
|
||||
</mfrac>
|
||||
</mfrac>
|
||||
</math>';
|
||||
|
||||
$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 = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||
<mfrac>
|
||||
<mi> a </mi>
|
||||
</mfrac>
|
||||
</math>';
|
||||
|
||||
$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 = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||
<msup>
|
||||
<mi> a </mi>
|
||||
</msup>
|
||||
</math>';
|
||||
|
||||
$reader = new MathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
|
||||
public function testReadSemantics(): void
|
||||
{
|
||||
$content = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
|
||||
<semantics>
|
||||
<mrow>
|
||||
<mfrac>
|
||||
<mi>π</mi>
|
||||
<mn>2</mn>
|
||||
</mfrac>
|
||||
<mo stretchy="false">+</mo>
|
||||
<mrow>
|
||||
<mi>a</mi>
|
||||
<mo stretchy="false">∗</mo>
|
||||
<mn>2</mn>
|
||||
</mrow>
|
||||
</mrow>
|
||||
<annotation encoding="StarMath 5.0">{π} over {2} + { a } * 2 </annotation>
|
||||
</semantics>
|
||||
</math>';
|
||||
|
||||
$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 = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
|
||||
<math xmlns="http://www.w3.org/1998/Math/MathML">
|
||||
<mnotexisting>
|
||||
<mi> a </mi>
|
||||
</mnotexisting>
|
||||
</math>';
|
||||
|
||||
$reader = new MathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
}
|
||||
197
vendor/phpoffice/math/tests/Math/Reader/OfficeMathMLTest.php
vendored
Normal file
197
vendor/phpoffice/math/tests/Math/Reader/OfficeMathMLTest.php
vendored
Normal file
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\PhpOffice\Math\Reader;
|
||||
|
||||
use PhpOffice\Math\Element;
|
||||
use PhpOffice\Math\Exception\InvalidInputException;
|
||||
use PhpOffice\Math\Exception\NotImplementedException;
|
||||
use PhpOffice\Math\Math;
|
||||
use PhpOffice\Math\Reader\OfficeMathML;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class OfficeMathMLTest extends TestCase
|
||||
{
|
||||
public function testRead(): void
|
||||
{
|
||||
$content = '<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:oMath>
|
||||
<m:f>
|
||||
<m:num><m:r><m:t>2</m:t></m:r></m:num>
|
||||
<m:den><m:r><m:t>π</m:t></m:r></m:den>
|
||||
</m:f>
|
||||
</m:oMath>
|
||||
</m:oMathPara>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$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(1, $subElements);
|
||||
$this->assertInstanceOf(Element\Fraction::class, $subElements[0]);
|
||||
|
||||
/** @var Element\Fraction $subElement */
|
||||
$subElement = $subElements[0];
|
||||
|
||||
/** @var Element\Identifier $numerator */
|
||||
$numerator = $subElement->getNumerator();
|
||||
$this->assertInstanceOf(Element\Numeric::class, $numerator);
|
||||
$this->assertEquals(2, $numerator->getValue());
|
||||
|
||||
/** @var Element\Numeric $denominator */
|
||||
$denominator = $subElement->getDenominator();
|
||||
$this->assertInstanceOf(Element\Identifier::class, $denominator);
|
||||
$this->assertEquals('π', $denominator->getValue());
|
||||
}
|
||||
|
||||
public function testReadWithWTag(): void
|
||||
{
|
||||
$content = '<m:oMath xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:f>
|
||||
<m:num>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">π</m:t>
|
||||
</m:r>
|
||||
</m:num>
|
||||
<m:den>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">2</m:t>
|
||||
</m:r>
|
||||
</m:den>
|
||||
</m:f>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">+</m:t>
|
||||
</m:r>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">a</m:t>
|
||||
</m:r>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">∗</m:t>
|
||||
</m:r>
|
||||
<m:r>
|
||||
<w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr>
|
||||
<m:t xml:space="preserve">2</m:t>
|
||||
</m:r>
|
||||
</m:oMath>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$math = $reader->read($content);
|
||||
$this->assertInstanceOf(Math::class, $math);
|
||||
|
||||
$elements = $math->getElements();
|
||||
$this->assertCount(5, $elements);
|
||||
|
||||
/** @var Element\Fraction $element */
|
||||
$element = $elements[0];
|
||||
$this->assertInstanceOf(Element\Fraction::class, $element);
|
||||
/** @var Element\Identifier $numerator */
|
||||
$numerator = $element->getNumerator();
|
||||
$this->assertInstanceOf(Element\Identifier::class, $numerator);
|
||||
$this->assertEquals('π', $numerator->getValue());
|
||||
/** @var Element\Numeric $denominator */
|
||||
$denominator = $element->getDenominator();
|
||||
$this->assertInstanceOf(Element\Numeric::class, $denominator);
|
||||
$this->assertEquals(2, $denominator->getValue());
|
||||
|
||||
/** @var Element\Operator $element */
|
||||
$element = $elements[1];
|
||||
$this->assertInstanceOf(Element\Operator::class, $element);
|
||||
$this->assertEquals('+', $element->getValue());
|
||||
|
||||
/** @var Element\Identifier $element */
|
||||
$element = $elements[2];
|
||||
$this->assertInstanceOf(Element\Identifier::class, $element);
|
||||
$this->assertEquals('a', $element->getValue());
|
||||
|
||||
/** @var Element\Operator $element */
|
||||
$element = $elements[3];
|
||||
$this->assertInstanceOf(Element\Operator::class, $element);
|
||||
$this->assertEquals('∗', $element->getValue());
|
||||
|
||||
/** @var Element\Numeric $element */
|
||||
$element = $elements[4];
|
||||
$this->assertInstanceOf(Element\Numeric::class, $element);
|
||||
$this->assertEquals(2, $element->getValue());
|
||||
}
|
||||
|
||||
public function testReadFractionNoNumerator(): void
|
||||
{
|
||||
$this->expectException(InvalidInputException::class);
|
||||
$this->expectExceptionMessage('PhpOffice\Math\Reader\OfficeMathML::getElement : The tag `m:f` has no numerator defined');
|
||||
|
||||
$content = '<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:oMath>
|
||||
<m:f>
|
||||
<m:den><m:r><m:t>2</m:t></m:r></m:den>
|
||||
</m:f>
|
||||
</m:oMath>
|
||||
</m:oMathPara>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
|
||||
public function testReadFractionNoDenominator(): void
|
||||
{
|
||||
$this->expectException(InvalidInputException::class);
|
||||
$this->expectExceptionMessage('PhpOffice\Math\Reader\OfficeMathML::getElement : The tag `m:f` has no denominator defined');
|
||||
|
||||
$content = '<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:oMath>
|
||||
<m:f>
|
||||
<m:num><m:r><m:t>π</m:t></m:r></m:num>
|
||||
</m:f>
|
||||
</m:oMath>
|
||||
</m:oMathPara>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
|
||||
public function testReadBasicNoText(): void
|
||||
{
|
||||
$this->expectException(InvalidInputException::class);
|
||||
$this->expectExceptionMessage('PhpOffice\Math\Reader\OfficeMathML::getElement : The tag `m:r` has no tag `m:t` defined');
|
||||
|
||||
$content = '<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:oMath>
|
||||
<m:r>
|
||||
a
|
||||
</m:r>
|
||||
</m:oMath>
|
||||
</m:oMathPara>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
|
||||
public function testReadNotImplemented(): void
|
||||
{
|
||||
$this->expectException(NotImplementedException::class);
|
||||
$this->expectExceptionMessage('PhpOffice\Math\Reader\OfficeMathML::getElement : The tag `m:mnotexisting` is not implemented');
|
||||
|
||||
$content = '<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
|
||||
<m:oMath>
|
||||
<m:mnotexisting>
|
||||
<m:num><m:r><m:t>π</m:t></m:r></m:num>
|
||||
</m:mnotexisting>
|
||||
</m:oMath>
|
||||
</m:oMathPara>';
|
||||
|
||||
$reader = new OfficeMathML();
|
||||
$math = $reader->read($content);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user