A guess would be to try PHP 5.3, and enable the garbage collector. http://www.php.net/manual/en/function.gc-enable.php
Jared > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of > Ævar Arnfjörð Bjarmason > Sent: 06 February 2010 01:05 > To: [email protected] > Cc: [email protected] > Subject: [Wikitech-l] New phpunit tests eat ~1GB of memory > > Since the tests were ported from t/ to phpunit's > phase3/maintenance/tests/ in r61938 and other commits running > the tests on my machine takes up to 1GB of memory and grows > as it runs more tests. It seems that phpunit uses the same > instance of the php interpreter for running all the tests. > > Is there some way around this? Perhaps phpunit.xml could be > tweaked so that it runs a new php for each test? > > Furthermore when I run `make test' I get this: > > Time: 03:35, Memory: 1849.25Mb > > There were 2 failures: > > 1) LanguageConverterTest::testGetPreferredVariantUserOption > Failed asserting that two strings are equal. > --- Expected > +++ Actual > @@ @@ > -tg-latn > +tg > > > /home/avar/src/mw/trunk/phase3/maintenance/tests/LanguageConve > rterTest.php:82 > > 2) Warning > No tests found in class "ParserUnitTest". > > FAILURES! > Tests: 686, Assertions: 3431, Failures: 2, Incomplete: 34 > > But when I run phpunit manually on the test then all tests pass: > > $ phpunit LanguageConverterTest.php > PHPUnit 3.4.5 by Sebastian Bergmann. > > ......... > > Time: 23 seconds, Memory: 23.75Mb > > OK (9 tests, 34 assertions) > > Also after I get "Tests: 686, Assertions: 3431, Failures: 2, > Incomplete: 34" in the first output phpunit doesn't exit and > continues hugging my memory. Why is it still running? It has > already run all the tests. > > On Wed, Feb 3, 2010 at 17:35, <[email protected]> wrote: > > http://www.mediawiki.org/wiki/Special:Code/MediaWiki/61938 > > > > Revision: 61938 > > Author: ialex > > Date: 2010-02-03 17:35:59 +0000 (Wed, 03 Feb 2010) > > > > Log Message: > > ----------- > > * Port tests from t/inc/ > > * Added new tests to XmlTest > > > > Added Paths: > > ----------- > > trunk/phase3/tests/LicensesTest.php > > trunk/phase3/tests/SanitizerTest.php > > trunk/phase3/tests/TimeAdjustTest.php > > trunk/phase3/tests/TitleTest.php > > trunk/phase3/tests/XmlTest.php > > > > Added: trunk/phase3/tests/LicensesTest.php > > =================================================================== > > --- trunk/phase3/tests/LicensesTest.php > (rev > > 0) > > +++ trunk/phase3/tests/LicensesTest.php 2010-02-03 17:35:59 > UTC (rev > > +++ 61938) > > @@ -0,0 +1,17 @@ > > +<?php > > + > > +/** > > + * @group Broken > > + */ > > +class LicensesTest extends PHPUnit_Framework_TestCase { > > + > > + function testLicenses() { > > + $str = " > > +* Free licenses: > > +** GFLD|Debian disagrees > > +"; > > + > > + $lc = new Licenses( $str ); > > + $this->assertTrue( is_a( $lc, 'Licenses' ), > 'Correct > > +class' ); > > + } > > +} > > \ No newline at end of file > > > > > > Property changes on: trunk/phase3/tests/LicensesTest.php > > ___________________________________________________________________ > > Added: svn:eol-style > > + native > > > > Added: trunk/phase3/tests/SanitizerTest.php > > =================================================================== > > --- trunk/phase3/tests/SanitizerTest.php > > > (rev 0) > > +++ trunk/phase3/tests/SanitizerTest.php 2010-02-03 17:35:59 > > +++ UTC (rev 61938) > > @@ -0,0 +1,71 @@ > > +<?php > > + > > +global $IP; > > +require_once( "$IP/includes/Sanitizer.php" ); > > + > > +class SanitizerTest extends PHPUnit_Framework_TestCase { > > + > > + function testDecodeNamedEntities() { > > + $this->assertEquals( > > + "\xc3\xa9cole", > > + Sanitizer::decodeCharReferences( > > + 'école' ), > > + 'decode named entities' > > + ); > > + } > > + > > + function testDecodeNumericEntities() { > > + $this->assertEquals( > > + "\xc4\x88io bonas dans l'\xc3\xa9cole!", > > + Sanitizer::decodeCharReferences( "Ĉio > > + bonas dans l'école!" ), > > + 'decode numeric entities' > > + ); > > + } > > + > > + function testDecodeMixedEntities() { > > + $this->assertEquals( > > + "\xc4\x88io bonas dans l'\xc3\xa9cole!", > > + Sanitizer::decodeCharReferences( "Ĉio > > + bonas dans l'école!" ), > > + 'decode mixed numeric/named entities' > > + ); > > + } > > + > > + function testDecodeMixedComplexEntities() { > > + $this->assertEquals( > > + "\xc4\x88io bonas dans > l'\xc3\xa9cole! (mais > > + pas Ĉio dans l'école)", > > + Sanitizer::decodeCharReferences( > > + "Ĉio bonas dans > l'école! (mais pas &#x108;io dans l'&eacute;cole)" > > + ), > > + 'decode mixed complex entities' > > + ); > > + } > > + > > + function testInvalidAmpersand() { > > + $this->assertEquals( > > + 'a & b', > > + Sanitizer::decodeCharReferences( 'a & b' ), > > + 'Invalid ampersand' > > + ); > > + } > > + > > + function testInvalidEntities() { > > + $this->assertEquals( > > + '&foo;', > > + Sanitizer::decodeCharReferences( '&foo;' ), > > + 'Invalid named entity' > > + ); > > + } > > + > > + function testInvalidNumberedEntities() { > > + $this->assertEquals( UTF8_REPLACEMENT, > > + Sanitizer::decodeCharReferences( "�" ), 'Invalid > > + numbered entity' ); > > + } > > + > > + function testSelfClosingTag() { > > + $GLOBALS['wgUseTidy'] = false; > > + $this->assertEquals( > > + '<div>Hello world</div>', > > + Sanitizer::removeHTMLtags( '<div>Hello > > +world</div />' ), > > + 'Self-closing closing div' > > + ); > > + } > > +} > > + > > > > > > Property changes on: trunk/phase3/tests/SanitizerTest.php > > ___________________________________________________________________ > > Added: svn:eol-style > > + native > > > > Added: trunk/phase3/tests/TimeAdjustTest.php > > =================================================================== > > --- trunk/phase3/tests/TimeAdjustTest.php > > > (rev 0) > > +++ trunk/phase3/tests/TimeAdjustTest.php 2010-02-03 17:35:59 > > +++ UTC (rev 61938) > > @@ -0,0 +1,40 @@ > > +<?php > > + > > +class TimeAdjustTest extends PHPUnit_Framework_TestCase { > > + > > + public function setUp() { > > + $this->iniSet( 'precision', 15 ); > > + } > > + > > + # Test offset usage for a given language::userAdjust > > + function testUserAdjust() { > > + global $wgLocalTZoffset, $wgContLang, $wgUser; > > + > > + $wgContLang = $en = Language::factory( 'en' ); > > + > > + # Collection of parameters for Language_t_Offset. > > + # Format: date to be formatted, > localTZoffset value, > > + expected date > > + $userAdjust_tests = array( > > + array( 20061231235959, 0, > 20061231235959 ), > > + array( 20061231235959, 5, > 20070101000459 ), > > + array( 20061231235959, 15, > 20070101001459 ), > > + array( 20061231235959, 60, > 20070101005959 ), > > + array( 20061231235959, 90, > 20070101012959 ), > > + array( 20061231235959, 120, > 20070101015959 ), > > + array( 20061231235959, 540, > 20070101085959 ), > > + array( 20061231235959, -5, > 20061231235459 ), > > + array( 20061231235959, -30, > 20061231232959 ), > > + array( 20061231235959, -60, > 20061231225959 ), > > + ); > > + > > + foreach( $userAdjust_tests as $data ) { > > + $wgLocalTZoffset = $data[1]; > > + > > + $this->assertEquals( > > + strval( $data[2] ), > > + strval( $en->userAdjust( > $data[0], '' > > +) ), > > + "User adjust {$data[0]} by > {$data[1]} minutes should give {$data[2]}" > > + ); > > + } > > + } > > +} > > > > > > Property changes on: trunk/phase3/tests/TimeAdjustTest.php > > ___________________________________________________________________ > > Added: svn:eol-style > > + native > > > > Added: trunk/phase3/tests/TitleTest.php > > =================================================================== > > --- trunk/phase3/tests/TitleTest.php > (rev > > 0) > > +++ trunk/phase3/tests/TitleTest.php 2010-02-03 17:35:59 > UTC (rev > > +++ 61938) > > @@ -0,0 +1,17 @@ > > +<?php > > + > > +class TitleTest extends PHPUnit_Framework_TestCase { > > + > > + function testLegalChars() { > > + $titlechars = Title::legalChars(); > > + > > + foreach ( range( 1, 255 ) as $num ) { > > + $chr = chr( $num ); > > + if ( strpos( "#[]{}<>|", $chr ) !== > false || > > +preg_match( "/[\\x00-\\x1f\\x7f]/", $chr ) ) { > > + $this->assertFalse( > (bool)preg_match( > > +"/[$titlechars]/", $chr ), "chr($num) = $chr is not a valid > > +titlechar" ); > > + } else { > > + $this->assertTrue( > (bool)preg_match( > > +"/[$titlechars]/", $chr ), "chr($num) = $chr is a valid > titlechar" ); > > + } > > + } > > + } > > +} > > > > > > Property changes on: trunk/phase3/tests/TitleTest.php > > ___________________________________________________________________ > > Added: svn:eol-style > > + native > > > > Added: trunk/phase3/tests/XmlTest.php > > =================================================================== > > --- trunk/phase3/tests/XmlTest.php > (rev > > 0) > > +++ trunk/phase3/tests/XmlTest.php 2010-02-03 17:35:59 > UTC (rev > > +++ 61938) > > @@ -0,0 +1,115 @@ > > +<?php > > + > > +class XmlTest extends PHPUnit_Framework_TestCase { > > + > > + function testElementOpen() { > > + $this->assertEquals( > > + '<element>', > > + Xml::element( 'element', null, null ), > > + 'Opening element with no attributes' > > + ); > > + } > > + > > + function testElementEmpty() { > > + $this->assertEquals( > > + '<element />', > > + Xml::element( 'element', null, '' ), > > + 'Terminated empty element' > > + ); > > + } > > + > > + function testElementEscaping() { > > + $this->assertEquals( > > + '<element>hello <there> you & > > + you</element>', > > + Xml::element( 'element', null, > 'hello <there> > > + you & you' ), > > + 'Element with no attributes and > content that needs escaping' > > + ); > > + } > > + > > + function testElementAttributes() { > > + $this->assertEquals( > > + '<element key="value" <>="<>">', > > + Xml::element( 'element', array( 'key' => > > + 'value', '<>' => '<>' ), null ), > > + 'Element attributes, keys are not escaped' > > + ); > > + } > > + > > + function testOpenElement() { > > + $this->assertEquals( > > + '<element k="v">', > > + Xml::openElement( 'element', array( > 'k' => 'v' > > + ) ), > > + 'openElement() shortcut' > > + ); > > + } > > + > > + function testCloseElement() { > > + $this->assertEquals( '</element>', > Xml::closeElement( > > + 'element' ), 'closeElement() shortcut' ); > > + } > > + > > + # > > + # textarea > > + # > > + function testTextareaNoContent() { > > + $this->assertEquals( > > + '<textarea name="name" id="name" cols="40" > > + rows="5"></textarea>', > > + Xml::textarea( 'name', '' ), > > + 'textarea() with not content' > > + ); > > + } > > + > > + function testTextareaAttribs() { > > + $this->assertEquals( > > + '<textarea name="name" id="name" cols="20" > > + rows="10"><txt></textarea>', > > + Xml::textarea( 'name', '<txt>', 20, 10 ), > > + 'textarea() with custom attribs' > > + ); > > + } > > + > > + # > > + # JS > > + # > > + function testEscapeJsStringSpecialChars() { > > + $this->assertEquals( > > + '\\\\\r\n', > > + Xml::escapeJsString( "\\\r\n" ), > > + 'escapeJsString() with special characters' > > + ); > > + } > > + > > + function testEncodeJsVarBoolean() { > > + $this->assertEquals( > > + 'true', > > + Xml::encodeJsVar( true ), > > + 'encodeJsVar() with boolean' > > + ); > > + } > > + > > + function testEncodeJsVarNull() { > > + $this->assertEquals( > > + 'null', > > + Xml::encodeJsVar( null ), > > + 'encodeJsVar() with null' > > + ); > > + } > > + > > + function testEncodeJsVarArray() { > > + $this->assertEquals( > > + '["a", 1]', > > + Xml::encodeJsVar( array( 'a', 1 ) ), > > + 'encodeJsVar() with array' > > + ); > > + $this->assertEquals( > > + '{"a": "a", "b": 1}', > > + Xml::encodeJsVar( array( 'a' => > 'a', 'b' => 1 > > + ) ), > > + 'encodeJsVar() with associative array' > > + ); > > + } > > + > > + function testEncodeJsVarObject() { > > + $this->assertEquals( > > + '{"a": "a", "b": 1}', > > + Xml::encodeJsVar( (object)array( > 'a' => 'a', > > +'b' => 1 ) ), > > + 'encodeJsVar() with object' > > + ); > > + } > > +} > > > > > > Property changes on: trunk/phase3/tests/XmlTest.php > > ___________________________________________________________________ > > Added: svn:eol-style > > + native > > > > > > > > _______________________________________________ > > MediaWiki-CVS mailing list > > [email protected] > > https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs > > > _______________________________________________ > Wikitech-l mailing list > [email protected] > https://lists.wikimedia.org/mailman/listinfo/wikitech-l _______________________________________________ Wikitech-l mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/wikitech-l
