diff --git a/src/Framework/TestCase.php b/src/Framework/TestCase.php index bece6944cbe..0ca13346ff4 100644 --- a/src/Framework/TestCase.php +++ b/src/Framework/TestCase.php @@ -1447,7 +1447,8 @@ protected function getMockForAbstractClass($originalClassName, array $arguments protected function getMockFromWsdl($wsdlFile, $originalClassName = '', $mockClassName = '', array $methods = [], $callOriginalConstructor = true, array $options = []): MockObject { if ($originalClassName === '') { - $originalClassName = \pathinfo(\basename(\parse_url($wsdlFile)['path']), \PATHINFO_FILENAME); + $fileName = \pathinfo(\basename(\parse_url($wsdlFile)['path']), \PATHINFO_FILENAME); + $originalClassName = \preg_replace('/[^a-zA-Z0-9_]/', '', $fileName); } if (!\class_exists($originalClassName)) { diff --git a/tests/Framework/MockObject/MockObjectTest.php b/tests/Framework/MockObject/MockObjectTest.php index 60b151073ac..02cebb58a15 100644 --- a/tests/Framework/MockObject/MockObjectTest.php +++ b/tests/Framework/MockObject/MockObjectTest.php @@ -941,6 +941,18 @@ public function testCreateTwoMocksOfOneWsdlFile(): void $this->assertEquals(\get_class($a), \get_class($b)); } + /** + * @see https://github.com/sebastianbergmann/phpunit/issues/2573 + * @ticket 2573 + * @requires extension soap + */ + public function testCreateMockOfWsdlFileWithSpecialChars() + { + $mock = $this->getMockFromWsdl(__DIR__ . '/_fixture/Go ogle-Sea.rch.wsdl'); + + $this->assertStringStartsWith('Mock_GoogleSearch_', \get_class($mock)); + } + /** * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/156 * @ticket 156 diff --git a/tests/_files/Go ogle-Sea.rch.wsdl b/tests/_files/Go ogle-Sea.rch.wsdl new file mode 100644 index 00000000000..e448501dd1b --- /dev/null +++ b/tests/_files/Go ogle-Sea.rch.wsdl @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +