next()); self::assertEquals('b', $n->next()); self::assertEquals('c', $n->next()); } public function testIncrementsWithCustomInit() { $n = new ColumnNumerator('r'); self::assertEquals('r', $n->next()); self::assertEquals('s', $n->next()); self::assertEquals('t', $n->next()); } public function testIncrementsMultiChar() { $n = new ColumnNumerator('aaa'); self::assertEquals('aaa', $n->next()); self::assertEquals('aab', $n->next()); self::assertEquals('aac', $n->next()); } public function testOverflowGrow() { $n = new ColumnNumerator('y'); self::assertEquals('y', $n->next()); self::assertEquals('z', $n->next()); self::assertEquals('aa', $n->next()); self::assertEquals('ab', $n->next()); } public function testOverflowNoGrow() { $n = new ColumnNumerator('yy'); self::assertEquals('yy', $n->next()); self::assertEquals('yz', $n->next()); self::assertEquals('za', $n->next()); self::assertEquals('zb', $n->next()); } public function testResume() { $n = new ColumnNumerator('yy'); self::assertEquals('yy', $n->next()); self::assertEquals('yz', $n->next()); $n2 = new ColumnNumerator($n->getState()); unset($n); self::assertEquals('za', $n2->next(), 'recreated numerator continues'); self::assertEquals('zb', $n2->next()); self::assertEquals($n2->getState(), 'zc', 'State is next string'); } }