diff --git a/tests/Visual/JUnit.php b/tests/Visual/JUnit.php new file mode 100644 index 00000000..46b1071a --- /dev/null +++ b/tests/Visual/JUnit.php @@ -0,0 +1,75 @@ + 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'], + ); + + $process->run(); + + $rawXmlContent = file_get_contents($junitLogFile); + unlink($junitLogFile); + + // convert xml to array + try { + $xml = new SimpleXMLElement(preg_replace("/(<\/?)(\w+):([^>]*>)/", '$1$2$3', $rawXmlContent)); + + return json_decode(json_encode((array) $xml), true); + } catch (Exception $exception) { + throw new XmlParseException($exception->getMessage(), $exception->getCode(), $exception->getPrevious()); + } +}; + +test('junit output', function () use ($run) { + $result = $run('tests/.tests/SuccessOnly.php'); + + expect($result['testsuite']['@attributes']) + ->name->toBe('Tests\tests\SuccessOnly') + ->file->toBe('tests/.tests/SuccessOnly.php') + ->tests->toBe('2') + ->assertions->toBe('2') + ->errors->toBe('0') + ->failures->toBe('0') + ->skipped->toBe('0'); + + expect($result['testsuite']['testcase']) + ->toHaveCount(2); + + expect($result['testsuite']['testcase'][0]['@attributes']) + ->name->toBe('it can pass with comparison') + ->file->toBe('tests/.tests/SuccessOnly.php::it can pass with comparison') + ->class->toBe('Tests\tests\SuccessOnly') + ->classname->toBe('Tests.tests.SuccessOnly') + ->assertions->toBe('1') + ->time->toStartWith('0.0'); +}); + +test('junit with parallel', function () use ($run) { + $result = $run('tests/.tests/SuccessOnly.php', '--parallel', '--processes=1', '--filter', 'can pass with comparison'); + + expect($result['testsuite']['@attributes']) + ->name->toBe('Tests\tests\SuccessOnly') + ->file->toBe('tests/.tests/SuccessOnly.php') + ->tests->toBe('1') + ->assertions->toBe('1') + ->errors->toBe('0') + ->failures->toBe('0') + ->skipped->toBe('0'); + + expect($result['testsuite']['testcase']) + ->toHaveCount(1); + + expect($result['testsuite']['testcase']['@attributes']) + ->name->toBe('it can pass with comparison') + ->file->toBe('tests/.tests/SuccessOnly.php::it can pass with comparison') + ->class->toBe('Tests\tests\SuccessOnly') + ->classname->toBe('Tests.tests.SuccessOnly') + ->assertions->toBe('1') + ->time->toStartWith('0.0'); +});