mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-12-21 03:42:46 +00:00
5fa3d6bfe5
Originally the parse tree was a binary tree, from that time matrix element were put into that data structure. This was partially undone, but not full which leads to some artifacts in matrix cells. One of the problem is that due to the binary parse tree structure the postprocessing did not correctly identfy \limits. This change changes reduces nesting from matrix, and regards matrix instances as two-dimensional TexArrays. Bug: T362344 Change-Id: I66a31a09f204709a51d6b5c9ecefc083f7ee2d6d
124 lines
3.8 KiB
PHP
124 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\Math\Tests\WikiTexVC\Nodes;
|
|
|
|
use InvalidArgumentException;
|
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal;
|
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray;
|
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexNode;
|
|
use MediaWikiUnitTestCase;
|
|
|
|
/**
|
|
* @covers \MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray
|
|
*/
|
|
class TexArrayTest extends MediaWikiUnitTestCase {
|
|
|
|
public function testIsTexNode() {
|
|
$this->assertTrue( new TexArray() instanceof TexNode,
|
|
'Should create an instance of TexNode' );
|
|
}
|
|
|
|
public function testConcatOutput() {
|
|
$ta = new TexArray( new Literal( 'a' ), new Literal( 'b' ) );
|
|
$this->assertEquals( 'ab', $ta->render(), 'Should concatenate its input' );
|
|
}
|
|
|
|
public function testExtractCurlies() {
|
|
$n = new TexNode( new TexArray( new Literal( 'a' ) ) );
|
|
$this->assertEquals( '{a}', $n->inCurlies(),
|
|
'Should create exactly one pair of curlies' );
|
|
}
|
|
|
|
public function testExtractIdentifiers() {
|
|
$n = new TexArray( new Literal( 'd' ) );
|
|
$this->assertEquals( [ 'd' ], $n->extractIdentifiers(),
|
|
'Should extract identifiers' );
|
|
}
|
|
|
|
public function testExtractIdentifiersFromArg() {
|
|
$n = new TexArray();
|
|
$this->assertEquals( [ 'd' ],
|
|
$n->extractIdentifiers( [ new Literal( 'd' ) ] ),
|
|
'Should extract identifiers from the argument' );
|
|
}
|
|
|
|
public function testExtractSplitIdentifiers() {
|
|
$n = new TexArray( new Literal( 'a' ), new Literal( '\'' ) );
|
|
$this->assertEquals( [ 'a\'' ], $n->extractIdentifiers(),
|
|
'Should extract split identifiers' );
|
|
}
|
|
|
|
public function testNotConfuseIntegralsIdentifiers() {
|
|
$n = new TexArray( new Literal( 'd' ), new Literal( '\\int' ) );
|
|
$this->assertEquals( [ 'd' ], $n->extractIdentifiers(),
|
|
'Should not confuse integrals and identifiers' );
|
|
}
|
|
|
|
public function testNotConfuseIntegralD() {
|
|
$n = new TexArray( new Literal( '\\int' ), new Literal( 'd' ) );
|
|
$this->assertEquals( [], $n->extractIdentifiers(), 'Should not confuse integral d with d identifier' );
|
|
}
|
|
|
|
public function testNotConfuseUprightIntegralD() {
|
|
$n = new TexArray( new Literal( '\\int' ), new Literal( '\\mathrm{d}' ) );
|
|
$this->assertEquals( [], $n->extractIdentifiers(),
|
|
'Should not confuse upright integral d with d identifier' );
|
|
}
|
|
|
|
public function testExtractIdentifierMods() {
|
|
$n = new TexArray( new TexNode( '' ) );
|
|
$this->assertEquals( [], $n->getModIdent(), 'Should extract identifier modifications' );
|
|
}
|
|
|
|
public function testExtractSubscripts() {
|
|
$n = new TexArray( new TexNode( '' ) );
|
|
$this->assertEquals( [], $n->extractSubscripts(), 'Should extract subscripts' );
|
|
}
|
|
|
|
public function testUnshift() {
|
|
$n = new TexArray( new TexNode( '' ) );
|
|
$n->unshift( 'test1', 'test2' );
|
|
$this->assertEquals( 3, $n->getLength(), 'Should unshift elements' );
|
|
}
|
|
|
|
public function testGenerator() {
|
|
$ta = new TexArray( new Literal( 'a' ), new Literal( 'b' ) );
|
|
foreach ( $ta as $item ) {
|
|
$this->assertInstanceOf(
|
|
'MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal',
|
|
$item,
|
|
'Should iterate over the elements' );
|
|
}
|
|
}
|
|
|
|
public function testOffsetExists() {
|
|
$ta = new TexArray( new Literal( 'a' ), new Literal( 'b' ) );
|
|
$this->assertTrue( isset( $ta[0] ) );
|
|
$this->assertFalse( isset( $ta[2] ) );
|
|
}
|
|
|
|
public function testOffsetGet() {
|
|
$ta = new TexArray( new Literal( 'a' ), new Literal( 'b' ) );
|
|
$this->assertEquals( 'a', $ta[0]->render() );
|
|
$this->assertNull( $ta[100] );
|
|
}
|
|
|
|
public function testOffsetUnset() {
|
|
$ta = new TexArray( new Literal( 'a' ), new Literal( 'b' ) );
|
|
unset( $ta[0] );
|
|
$this->assertNull( $ta[0] );
|
|
}
|
|
|
|
public function testOffsetSet() {
|
|
$ta = new TexArray();
|
|
$ta[0] = new Literal( 'a' );
|
|
$this->assertEquals( 'a', $ta[0]->render() );
|
|
}
|
|
|
|
public function testOffsetSetInvalid() {
|
|
$this->expectException( InvalidArgumentException::class );
|
|
$ta = new TexArray();
|
|
$ta[0] = 'a';
|
|
}
|
|
}
|