diff --git a/tests/MathTexvcTest.php b/tests/MathTexvcTest.php new file mode 100644 index 0000000..fd12178 --- /dev/null +++ b/tests/MathTexvcTest.php @@ -0,0 +1,117 @@ +getMockBuilder( 'MathTexvc' ) + ->setMethods( array( 'readFromDB', 'callTexvc', 'doHTMLRender' ) ) + ->disableOriginalConstructor() + ->getMock(); + + // When we call render() below, MathTexvc will ... + + // ... first check if the item exists in the database cache: + $texvc->expects( $this->once() ) + ->method( 'readFromDB' ) + ->with() + ->will( $this->returnValue( true ) ); + + // ... if cache lookup succeeded, it won't shell out to texvc: + $texvc->expects( $this->never() ) + ->method( 'callTexvc' ); + + // ... instead, MathTexvc will skip to HTML generation: + $texvc->expects( $this->once() ) + ->method( 'doHTMLRender' ); + + $texvc->render(); + } + + /** + * Test behavior of render() upon cache miss. + * If the rendered object is not in the cache, MathTexvc will shell + * out to texvc to generate it. If texvc succeeds, it'll use the + * result to generate HTML. + * @covers MathTexvc::render + */ + function testRenderCacheMiss() { + $texvc = $this->getMockBuilder( 'MathTexvc' ) + ->setMethods( array( 'readCache', 'callTexvc', 'doHTMLRender' ) ) + ->disableOriginalConstructor() + ->getMock(); + + // When we call render() below, MathTexvc will ... + + // ... first look up the item in cache: + $texvc->expects( $this->once() ) + ->method( 'readCache' ) + ->will( $this->returnValue( false ) ); + + // ... on cache miss, MathTexvc will shell out to texvc: + $texvc->expects( $this->once() ) + ->method( 'callTexvc' ) + ->will( $this->returnValue( MW_TEXVC_SUCCESS ) ); + + // ... if texvc succeeds, MathTexvc will generate HTML: + $texvc->expects( $this->once() ) + ->method( 'doHTMLRender' ); + + $texvc->render(); + } + + /** + * Test behavior of render() when texvc fails. + * If texvc returns a value other than MW_TEXVC_SUCCESS, render() + * returns the error object and does not attempt to generate HTML. + * @covers MathTexvc::render + */ + function testRenderTexvcFailure() { + $texvc = $this->getMockBuilder( 'MathTexvc' ) + ->setMethods( array( 'readCache', 'callTexvc', 'doHTMLRender' ) ) + ->disableOriginalConstructor() + ->getMock(); + + // When we call render() below, MathTexvc will ... + + // ... first look up the item in cache: + $texvc->expects( $this->any() ) + ->method( 'readCache' ) + ->will( $this->returnValue( false ) ); + + // ... on cache miss, shell out to texvc: + $texvc->expects( $this->once() ) + ->method( 'callTexvc' ) + ->will( $this->returnValue( 'error' ) ); + + // ... if texvc fails, render() will not generate HTML: + $texvc->expects( $this->never() ) + ->method( 'doHTMLRender' ); + + // ... it will return the error result instead: + $this->assertEquals( $texvc->render(), 'error' ); + } +}