enableAutoloading(); } public function getSystemUnderTest() { return self::$sut; } public function testGetErrors() { $this->assertCount(1, $this->getSystemUnderTest()->getErrors()); } public function testGetClassmap() { $this->assertArrayHasKey( 'B', $this->getSystemUnderTest()->getClassMap() ); $this->assertInstanceOf( '\SplFileInfo', $this->getSystemUnderTest()->getClassMap()['B'], 'getClassMap should map classnames to SplFileInfo objects' ); } public function testExceptionWhenIteratingOverUnloadedClasses() { $stub = $this->getMockBuilder('hanneskod\classtools\Iterator\ClassIterator') ->disableOriginalConstructor() ->setMethods(['getClassMap']) ->getMock(); $stub->expects($this->once()) ->method('getClassMap') ->will($this->returnValue(['ClassThatDoesNotExist' => null])); $this->expectException('hanneskod\classtools\Exception\LogicException'); iterator_to_array($stub); } public function testGetIterator() { $this->assertArrayHasKey( 'B', iterator_to_array($this->getSystemUnderTest()) ); $this->assertInstanceOf( '\ReflectionClass', iterator_to_array($this->getSystemUnderTest())['B'], 'getIterator should map classnames to ReflectionClass objects' ); } public function testFilteredClassMap() { $classIterator = $this->getSystemUnderTest(); $this->assertArrayHasKey( 'B', $classIterator->getClassMap(), 'B is definied and should be present' ); $this->assertArrayNotHasKey( 'B', $classIterator->where('isInterface')->getClassMap(), 'B is not an interface and should be filtered' ); } public function testTypeFilter() { $classIterator = $this->getSystemUnderTest(); $result = iterator_to_array( $classIterator->type('Baz') ); $this->assertArrayNotHasKey( 'foobar\\A', $result, 'foobar\\A does not implement Baz' ); $this->assertArrayHasKey( 'B', $result, 'B does implement Baz' ); $result = iterator_to_array( $classIterator ->type('Baz') ->type('foobar\\A') ); $this->assertArrayNotHasKey( 'B', $result, 'B does not extend foobar\\A' ); $this->assertArrayHasKey( 'C', $result, 'C extends all' ); } public function testNameFilter() { $classIterator = $this->getSystemUnderTest(); $result = iterator_to_array( $classIterator->name('/A/') ); $this->assertArrayNotHasKey( 'Baz', $result ); $this->assertArrayHasKey( 'foobar\\A', $result ); $result = iterator_to_array( $classIterator->name('/B/')->name('/az/') ); $this->assertArrayNotHasKey( 'foobar\\A', $result ); $this->assertArrayHasKey( 'Baz', $result ); } public function testNamespaceFilter() { $classIterator = $this->getSystemUnderTest(); $result = iterator_to_array( $classIterator->inNamespace('foobar') ); $this->assertArrayNotHasKey( 'Baz', $result ); $this->assertArrayHasKey( 'foobar\\A', $result ); } public function testWhereFilter() { $classIterator = $this->getSystemUnderTest(); $result = iterator_to_array( $classIterator->where('isInterface') ); $this->assertArrayNotHasKey( 'B', $result, 'B is not an interface' ); $this->assertArrayHasKey( 'Baz', $result, 'Baz is an interface' ); } public function testNotFilter() { $classIterator = $this->getSystemUnderTest(); $result = iterator_to_array( $classIterator->not($classIterator->where('isInterface')) ); $this->assertArrayNotHasKey( 'Baz', $result, 'Baz is an interface (and thus not included using the not filter)' ); $this->assertArrayHasKey( 'B', $result, 'B is not an interface (and thus included using the not filter)' ); } public function testCacheFilter() { $classIterator = $this->getSystemUnderTest(); $this->assertNotSame( $classIterator->getIterator(), $classIterator->getIterator() ); $classIterator = $classIterator->cache(); $this->assertSame( $classIterator->getIterator(), $classIterator->getIterator() ); } public function testMinimize() { $expected = <<assertEquals( $expected, $this->getSystemUnderTest()->minimize() ); } }