diff --git a/_testing/unittests/inc/parser/lexer.todo.php b/_testing/unittests/inc/parser/lexer.test.php
similarity index 61%
rename from _testing/unittests/inc/parser/lexer.todo.php
rename to _testing/unittests/inc/parser/lexer.test.php
index 7d04c0902e522862cd7564c6dd2cbcd821030807..4fccc66884bc027ab958136504854a56a3c5ce67 100644
--- a/_testing/unittests/inc/parser/lexer.todo.php
+++ b/_testing/unittests/inc/parser/lexer.test.php
@@ -63,9 +63,9 @@ class TestOfLexerParallelRegex extends PHPUnit_Framework_TestCase {
 		$regex = new Doku_LexerParallelRegex(false);
 		$regex->addPattern("abc", "letter");
 		$regex->addPattern("123", "number");
-		$this->assertIdentical($regex->match("abcdef", $match), "letter");
+		$this->assertEquals($regex->match("abcdef", $match), "letter");
 		$this->assertEquals($match, "abc");
-		$this->assertIdentical($regex->match("0123456789", $match), "number");
+		$this->assertEquals($regex->match("0123456789", $match), "number");
 		$this->assertEquals($match, "123");
 	}
 	function testMatchMultipleWithLookaheadNot() {
@@ -244,22 +244,21 @@ class TestOfLexerModes extends PHPUnit_Framework_TestCase {
             ->with("b", DOKU_LEXER_UNMATCHED,4)->will($this->returnValue(true));
         $handler->expects($this->at(4))->method('a')
             ->with("aaa", DOKU_LEXER_MATCHED,5)->will($this->returnValue(true));
-
-        $handler->expects($this->at(0))->method('b')
+        $handler->expects($this->at(5))->method('b')
             ->with(":", DOKU_LEXER_ENTER,8)->will($this->returnValue(true));
-        $handler->expects($this->at(1))->method('b')
+        $handler->expects($this->at(6))->method('b')
             ->with("a", DOKU_LEXER_UNMATCHED,9)->will($this->returnValue(true));
-        $handler->expects($this->at(2))->method('b')
+        $handler->expects($this->at(7))->method('b')
             ->with("b", DOKU_LEXER_MATCHED, 10)->will($this->returnValue(true));
-        $handler->expects($this->at(3))->method('b')
+        $handler->expects($this->at(8))->method('b')
             ->with("a", DOKU_LEXER_UNMATCHED,11)->will($this->returnValue(true));
-        $handler->expects($this->at(4))->method('b')
+        $handler->expects($this->at(9))->method('b')
             ->with("bb", DOKU_LEXER_MATCHED,12)->will($this->returnValue(true));
-        $handler->expects($this->at(5))->method('b')
+        $handler->expects($this->at(10))->method('b')
             ->with("a", DOKU_LEXER_UNMATCHED,14)->will($this->returnValue(true));
-        $handler->expects($this->at(6))->method('b')
+        $handler->expects($this->at(11))->method('b')
             ->with("bbb", DOKU_LEXER_MATCHED,15)->will($this->returnValue(true));
-        $handler->expects($this->at(7))->method('b')
+        $handler->expects($this->at(12))->method('b')
             ->with("a", DOKU_LEXER_UNMATCHED,18)->will($this->returnValue(true));
 
 		$lexer = new Doku_Lexer($handler, "a");
@@ -270,18 +269,31 @@ class TestOfLexerModes extends PHPUnit_Framework_TestCase {
 	}
 	function testNesting() {
         $handler = $this->getMock('TestParser');
-        $handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
-		$handler->expectArgumentsAt(1, "a", array("b", DOKU_LEXER_UNMATCHED,2));
-		$handler->expectArgumentsAt(2, "a", array("aa", DOKU_LEXER_MATCHED,3));
-		$handler->expectArgumentsAt(3, "a", array("b", DOKU_LEXER_UNMATCHED,5));
-		$handler->expectArgumentsAt(0, "b", array("(", DOKU_LEXER_ENTER,6));
-		$handler->expectArgumentsAt(1, "b", array("bb", DOKU_LEXER_MATCHED,7));
-		$handler->expectArgumentsAt(2, "b", array("a", DOKU_LEXER_UNMATCHED,9));
-		$handler->expectArgumentsAt(3, "b", array("bb", DOKU_LEXER_MATCHED,10));
-		$handler->expectArgumentsAt(4, "b", array(")", DOKU_LEXER_EXIT,12));
-		$handler->expectArgumentsAt(4, "a", array("aa", DOKU_LEXER_MATCHED,13));
-		$handler->expectArgumentsAt(5, "a", array("b", DOKU_LEXER_UNMATCHED,15));
-		$lexer = new Doku_Lexer($handler, "a");
+        $handler->expects($this->at(0))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,0)->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('a')
+            ->with("b", DOKU_LEXER_UNMATCHED,2)->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,3)->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('a')
+            ->with("b", DOKU_LEXER_UNMATCHED,5)->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('b')
+            ->with("(", DOKU_LEXER_ENTER,6)->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('b')
+            ->with("bb", DOKU_LEXER_MATCHED,7)->will($this->returnValue(true));
+        $handler->expects($this->at(6))->method('b')
+            ->with("a", DOKU_LEXER_UNMATCHED,9)->will($this->returnValue(true));
+        $handler->expects($this->at(7))->method('b')
+            ->with("bb", DOKU_LEXER_MATCHED,10)->will($this->returnValue(true));
+        $handler->expects($this->at(8))->method('b')
+            ->with(")", DOKU_LEXER_EXIT,12)->will($this->returnValue(true));
+        $handler->expects($this->at(9))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,13)->will($this->returnValue(true));
+        $handler->expects($this->at(10))->method('a')
+            ->with("b", DOKU_LEXER_UNMATCHED,15)->will($this->returnValue(true));
+
+
+        $lexer = new Doku_Lexer($handler, "a");
 		$lexer->addPattern("a+", "a");
 		$lexer->addEntryPattern("(", "a", "b");
 		$lexer->addPattern("b+", "b");
@@ -289,49 +301,56 @@ class TestOfLexerModes extends PHPUnit_Framework_TestCase {
 		$this->assertTrue($lexer->parse("aabaab(bbabb)aab"));
 	}
 	function testSingular() {
-		$handler = new MockTestParser($this);
-		$handler->setReturnValue("a", true);
-		$handler->setReturnValue("b", true);
-		$handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
-		$handler->expectArgumentsAt(1, "a", array("aa", DOKU_LEXER_MATCHED,3));
-		$handler->expectArgumentsAt(2, "a", array("xx", DOKU_LEXER_UNMATCHED,5));
-		$handler->expectArgumentsAt(3, "a", array("xx", DOKU_LEXER_UNMATCHED,10));
-		$handler->expectArgumentsAt(0, "b", array("b", DOKU_LEXER_SPECIAL,2));
-		$handler->expectArgumentsAt(1, "b", array("bbb", DOKU_LEXER_SPECIAL,7));
-		$handler->expectCallCount("a", 4);
-		$handler->expectCallCount("b", 2);
+		$handler = $this->getMock('TestParser');
+        $handler->expects($this->at(0))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,0)->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('b')
+            ->with("b", DOKU_LEXER_SPECIAL,2)->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,3)->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('a')
+            ->with("xx", DOKU_LEXER_UNMATCHED,5)->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('b')
+            ->with("bbb", DOKU_LEXER_SPECIAL,7)->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('a')
+            ->with("xx", DOKU_LEXER_UNMATCHED,10)->will($this->returnValue(true));
 		$lexer = new Doku_Lexer($handler, "a");
 		$lexer->addPattern("a+", "a");
 		$lexer->addSpecialPattern("b+", "a", "b");
 		$this->assertTrue($lexer->parse("aabaaxxbbbxx"));
-		$handler->tally();
 	}
 	function testUnwindTooFar() {
-		$handler = new MockTestParser($this);
-		$handler->setReturnValue("a", true);
-		$handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
-		$handler->expectArgumentsAt(1, "a", array(")", DOKU_LEXER_EXIT,2));
-		$handler->expectCallCount("a", 2);
+		$handler = $this->getMock('TestParser');
+        $handler->expects($this->at(0))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,0)->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('a')
+            ->with(")", DOKU_LEXER_EXIT,2)->will($this->returnValue(true));
+
 		$lexer = new Doku_Lexer($handler, "a");
 		$lexer->addPattern("a+", "a");
 		$lexer->addExitPattern(")", "a");
 		$this->assertFalse($lexer->parse("aa)aa"));
-		$handler->tally();
 	}
 }
 
 class TestOfLexerHandlers extends PHPUnit_Framework_TestCase {
 	function testModeMapping() {
-		$handler = new MockTestParser($this);
-		$handler->setReturnValue("a", true);
-		$handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
-		$handler->expectArgumentsAt(1, "a", array("(", DOKU_LEXER_ENTER,2));
-		$handler->expectArgumentsAt(2, "a", array("bb", DOKU_LEXER_MATCHED,3));
-		$handler->expectArgumentsAt(3, "a", array("a", DOKU_LEXER_UNMATCHED,5));
-		$handler->expectArgumentsAt(4, "a", array("bb", DOKU_LEXER_MATCHED,6));
-		$handler->expectArgumentsAt(5, "a", array(")", DOKU_LEXER_EXIT,8));
-		$handler->expectArgumentsAt(6, "a", array("b", DOKU_LEXER_UNMATCHED,9));
-		$handler->expectCallCount("a", 7);
+        $handler = $this->getMock('TestParser');
+        $handler->expects($this->at(0))->method('a')
+            ->with("aa", DOKU_LEXER_MATCHED,0)->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('a')
+            ->with("(", DOKU_LEXER_ENTER,2)->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('a')
+            ->with("bb", DOKU_LEXER_MATCHED,3)->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('a')
+            ->with("a", DOKU_LEXER_UNMATCHED,5)->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('a')
+            ->with("bb", DOKU_LEXER_MATCHED,6)->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('a')
+            ->with(")", DOKU_LEXER_EXIT,8)->will($this->returnValue(true));
+        $handler->expects($this->at(6))->method('a')
+            ->with("b", DOKU_LEXER_UNMATCHED,9)->will($this->returnValue(true));
+
 		$lexer = new Doku_Lexer($handler, "mode_a");
 		$lexer->addPattern("a+", "mode_a");
 		$lexer->addEntryPattern("(", "mode_a", "mode_b");
@@ -340,7 +359,6 @@ class TestOfLexerHandlers extends PHPUnit_Framework_TestCase {
 		$lexer->mapHandler("mode_a", "a");
 		$lexer->mapHandler("mode_b", "a");
 		$this->assertTrue($lexer->parse("aa(bbabb)b"));
-		$handler->tally();
 	}
 }
 
@@ -353,43 +371,23 @@ class TestParserByteIndex {
 	function caught() {}
 }
 
-Mock::generate('TestParserByteIndex');
-
 class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
 
 	function testIndex() {
         $doc = "aaa<file>bcd</file>eee";
 
-		$handler = new MockTestParserByteIndex($this);
-		$handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
-
-		$handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
-            );
-		$handler->expectArgumentsAt(
-            1,
-            "caught",
-            array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
-            );
-		$handler->expectArgumentsAt(
-            2,
-            "caught",
-            array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
-            );
-        $handler->expectArgumentsAt(
-            3,
-            "caught",
-            array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
-            );
-		$handler->expectArgumentsAt(
-            4,
-            "caught",
-            array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
-            );
-		$handler->expectCallCount("caught", 5);
+		$handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('caught')
+            ->with("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('caught')
+            ->with("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('caught')
+            ->with("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('caught')
+            ->with("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('caught')
+            ->with("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))->will($this->returnValue(true));
 
 		$lexer = new Doku_Lexer($handler, "ignore");
 		$lexer->addEntryPattern("<file>", "ignore", "caught");
@@ -399,42 +397,23 @@ class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
         $lexer->addPattern('c','caught');
 
 		$this->assertTrue($lexer->parse($doc));
-		$handler->tally();
 	}
 
 	function testIndexLookaheadEqual() {
         $doc = "aaa<file>bcd</file>eee";
 
-		$handler = new MockTestParserByteIndex($this);
-		$handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
-
-		$handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
-            );
-		$handler->expectArgumentsAt(
-            1,
-            "caught",
-            array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
-            );
-		$handler->expectArgumentsAt(
-            2,
-            "caught",
-            array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
-            );
-        $handler->expectArgumentsAt(
-            3,
-            "caught",
-            array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
-            );
-		$handler->expectArgumentsAt(
-            4,
-            "caught",
-            array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
-            );
-		$handler->expectCallCount("caught", 5);
+		$handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('caught')
+            ->with("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('caught')
+            ->with("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('caught')
+            ->with("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('caught')
+            ->with("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('caught')
+            ->with("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))->will($this->returnValue(true));
 
 		$lexer = new Doku_Lexer($handler, "ignore");
 		$lexer->addEntryPattern('<file>(?=.*</file>)', "ignore", "caught");
@@ -444,42 +423,23 @@ class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
         $lexer->addPattern('c','caught');
 
 		$this->assertTrue($lexer->parse($doc));
-		$handler->tally();
 	}
 
 	function testIndexLookaheadNotEqual() {
         $doc = "aaa<file>bcd</file>eee";
 
-		$handler = new MockTestParserByteIndex($this);
-		$handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
-
-		$handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
-            );
-		$handler->expectArgumentsAt(
-            1,
-            "caught",
-            array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
-            );
-		$handler->expectArgumentsAt(
-            2,
-            "caught",
-            array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
-            );
-        $handler->expectArgumentsAt(
-            3,
-            "caught",
-            array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
-            );
-		$handler->expectArgumentsAt(
-            4,
-            "caught",
-            array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
-            );
-		$handler->expectCallCount("caught", 5);
+		$handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('caught')
+            ->with("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('caught')
+            ->with("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('caught')
+            ->with("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('caught')
+            ->with("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('caught')
+            ->with("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))->will($this->returnValue(true));
 
 		$lexer = new Doku_Lexer($handler, "ignore");
 		$lexer->addEntryPattern('<file>(?!foo)', "ignore", "caught");
@@ -489,42 +449,23 @@ class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
         $lexer->addPattern('c','caught');
 
 		$this->assertTrue($lexer->parse($doc));
-		$handler->tally();
 	}
 
 	function testIndexLookbehindEqual() {
         $doc = "aaa<file>bcd</file>eee";
 
-		$handler = new MockTestParserByteIndex($this);
-		$handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
-
-		$handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
-            );
-		$handler->expectArgumentsAt(
-            1,
-            "caught",
-            array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
-            );
-		$handler->expectArgumentsAt(
-            2,
-            "caught",
-            array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
-            );
-        $handler->expectArgumentsAt(
-            3,
-            "caught",
-            array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
-            );
-		$handler->expectArgumentsAt(
-            4,
-            "caught",
-            array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
-            );
-		$handler->expectCallCount("caught", 5);
+		$handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('caught')
+            ->with("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('caught')
+            ->with("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('caught')
+            ->with("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('caught')
+            ->with("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('caught')
+            ->with("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))->will($this->returnValue(true));
 
 		$lexer = new Doku_Lexer($handler, "ignore");
 		$lexer->addEntryPattern('<file>', "ignore", "caught");
@@ -534,52 +475,32 @@ class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
         $lexer->addPattern('c','caught');
 
 		$this->assertTrue($lexer->parse($doc));
-		$handler->tally();
 	}
 
 	function testIndexLookbehindNotEqual() {
         $doc = "aaa<file>bcd</file>eee";
 
-		$handler = new MockTestParserByteIndex($this);
-		$handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
-
-		$handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
-            );
-		$handler->expectArgumentsAt(
-            1,
-            "caught",
-            array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
-            );
-		$handler->expectArgumentsAt(
-            2,
-            "caught",
-            array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
-            );
-        $handler->expectArgumentsAt(
-            3,
-            "caught",
-            array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
-            );
-		$handler->expectArgumentsAt(
-            4,
-            "caught",
-            array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
-            );
-		$handler->expectCallCount("caught", 5);
-
-		$lexer = new Doku_Lexer($handler, "ignore");
-		$lexer->addEntryPattern('<file>', "ignore", "caught");
-		$lexer->addExitPattern("(?<!c)</file>", "caught");
+        $handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
+        $handler->expects($this->at(1))->method('caught')
+            ->with("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))->will($this->returnValue(true));
+        $handler->expects($this->at(2))->method('caught')
+            ->with("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))->will($this->returnValue(true));
+        $handler->expects($this->at(3))->method('caught')
+            ->with("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))->will($this->returnValue(true));
+        $handler->expects($this->at(4))->method('caught')
+            ->with("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))->will($this->returnValue(true));
+        $handler->expects($this->at(5))->method('caught')
+            ->with("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))->will($this->returnValue(true));
+
+		$lexer = new Doku_Lexer($handler, 'ignore');
+		$lexer->addEntryPattern('<file>', 'ignore', 'caught');
+		$lexer->addExitPattern('(?<!c)</file>', 'caught');
         $lexer->addSpecialPattern('b','caught','special');
         $lexer->mapHandler('special','caught');
         $lexer->addPattern('c','caught');
 
 		$this->assertTrue($lexer->parse($doc));
-		$handler->tally();
 	}
 
     /**
@@ -590,25 +511,19 @@ class TestOfLexerByteIndices extends PHPUnit_Framework_TestCase {
         $doc = "ALL FOOLS ARE FOO";
         $pattern = '\bFOO\b';
 
-        $handler = new MockTestParserByteIndex($this);
-        $handler->setReturnValue("ignore", true);
-        $handler->setReturnValue("caught", true);
+        $handler = $this->getMock('TestParserByteIndex');
+        $handler->expects($this->any())->method('ignore')->will($this->returnValue(true));
 
         $matches = array();
         preg_match('/'.$pattern.'/',$doc,$matches,PREG_OFFSET_CAPTURE);
 
-        $handler->expectArgumentsAt(
-            0,
-            "caught",
-            array("FOO", DOKU_LEXER_SPECIAL, $matches[0][1])
-            );
-        $handler->expectCallCount("caught", 1);
+        $handler->expects($this->once())->method('caught')
+            ->with("FOO", DOKU_LEXER_SPECIAL, $matches[0][1])->will($this->returnValue(true));
 
         $lexer = new Doku_Lexer($handler, "ignore");
         $lexer->addSpecialPattern($pattern,'ignore','caught');
 
         $this->assertTrue($lexer->parse($doc));
-        $handler->tally();
     }
 
 }