function testUnscan() { $sc = new StringScanner("foobar blorg bla"); $res = $sc->scan("foo(bar) (\\w+)"); $this->assertEqual($res, "foobar blorg"); $this->assertEqual($sc[0], "foobar blorg"); $this->assertEqual($sc[1], "bar"); $this->assertEqual($sc[2], "blorg"); $this->assertEqual($sc->rest(), " bla"); $this->assertEqual($sc->wasMatched(), true); $sc->unScan(); $this->assertEqual($sc->pos, 0); $this->assertEqual($sc[0], null); try { $sc->unScan(); $this->assertFalse(true); } catch (Exception $e) { $this->assertEqual($e->getMessage(), "unScan failed, previous match had failed"); } $res = $sc->isMatch("foo"); $this->assertEqual($sc[0], "foo"); $res = $sc->isMatch("foobar"); $this->assertEqual($sc[0], "foobar"); $sc->unScan(); $this->assertEqual($sc[0], "foo"); $res = $sc->scan("foobar "); $this->assertEqual($sc->rest(), "blorg bla"); $sc->unScan(); $this->assertEqual($sc->rest(), "foobar blorg bla"); }