diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache index ac23417..9ca779c 100644 --- a/.php-cs-fixer.cache +++ b/.php-cs-fixer.cache @@ -1 +1 @@ -{"php":"8.2.29","version":"3.91.2:v3.91.2#f171dc216bc8a4192d5a0876a899cce6f9e379d6","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"modifier_keywords":true,"new_with_parentheses":{"anonymous_class":true},"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":{"closure_fn_spacing":"one"},"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"after_heredoc":true},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true,"octal_notation":true,"clean_namespace":true,"no_unset_cast":true,"assign_null_coalescing_to_coalesce_equal":true,"normalize_index_brace":true,"heredoc_indentation":true,"no_whitespace_before_comma_in_array":{"after_heredoc":true},"trailing_comma_in_multiline":{"after_heredoc":true},"list_syntax":true,"ternary_to_null_coalescing":true,"array_syntax":true,"no_unused_imports":true,"fully_qualified_strict_types":true},"hashes":{"src\/Command\/Router.php":"8956c9552a204df48b3825c48a7ade4c","src\/Command\/ServeCommand.php":"4c45cbcf7c8fe646c68c1ec35d9a4984","src\/Command\/RouterInterface.php":"5dd19ba932d4c43c920427003b3c1c3c","src\/Coverage\/Coverage.php":"0cb07471a183377c0b8fc1e6828cd606","src\/Util\/ProjectRootResolver.php":"cfc86290611994f3efe9355e84ae4049","src\/Util\/Composer.php":"0ece8bbf75bbb97e7d0a583404824538","src\/Util\/PhpUnitCommandExecutor.php":"84274486bc5836d4dfa6a15ae4711dcc","src\/PHPUnit\/PhpUnitHubExtension.php":"fe86b1c890e1b827fba07f738a36b24c","src\/Discoverer\/TestDiscoverer.php":"26db9dbb92284349b05b7320d1250a6f","src\/WebSocket\/StatusHandler.php":"e65bbba93f1f1c8bb116140370023aa1","src\/Http\/DecoratedHttpServer.php":"796efd5b1f3413200c4216eacd07baf4","src\/TestRunner\/TestRunner.php":"55f494bb6094e554e31388e3ba8c3431","tests\/Command\/RouterTest.php":"fcbb7a575e2103f020e0aa797dd07e7c","tests\/Command\/ServeCommandTest.php":"98e0865c6fd11eb3726bf182e37012e7","tests\/Coverage\/CoverageTest.php":"2e6a24d482ff721a9deff2f194e0e2bd","tests\/Util\/ProjectRootResolverTest.php":"b77b8208c37629acedd90b4b675f761e","tests\/Util\/ComposerTest.php":"d9c61117c9f424c3bd45724c13a9ef87","tests\/Util\/PhpUnitCommandExecutorTest.php":"2f9d8ada0f682222427c4e5689e88d98","tests\/Discoverer\/TestDiscovererTest.php":"a4354743436349d6c8fdde06e9f3e969","tests\/WebSocket\/StatusHandlerTest.php":"532eaf4611becdc32d805efc6411f665","tests\/Http\/DecoratedHttpServerTest.php":"eca8426406a227d192f817bac2853cb2","tests\/TestRunner\/TestRunnerTest.php":"529b29a3acbe2b17fd709e54cc38c3da"}} \ No newline at end of file +{"php":"8.2.29","version":"3.91.2:v3.91.2#f171dc216bc8a4192d5a0876a899cce6f9e379d6","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"modifier_keywords":true,"new_with_parentheses":{"anonymous_class":true},"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":{"closure_fn_spacing":"one"},"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"after_heredoc":true},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true,"octal_notation":true,"clean_namespace":true,"no_unset_cast":true,"assign_null_coalescing_to_coalesce_equal":true,"normalize_index_brace":true,"heredoc_indentation":true,"no_whitespace_before_comma_in_array":{"after_heredoc":true},"trailing_comma_in_multiline":{"after_heredoc":true},"list_syntax":true,"ternary_to_null_coalescing":true,"array_syntax":true,"no_unused_imports":true,"fully_qualified_strict_types":true},"hashes":{"src\/Command\/Router.php":"cacf79fb8b8e11fae811aa1cb7f45844","src\/Command\/ServeCommand.php":"4c45cbcf7c8fe646c68c1ec35d9a4984","src\/Command\/RouterInterface.php":"f6cc6a3f32b5a9d8dedcb1f34a1cbd68","src\/Coverage\/Coverage.php":"0cb07471a183377c0b8fc1e6828cd606","src\/Util\/ProjectRootResolver.php":"cfc86290611994f3efe9355e84ae4049","src\/Util\/Composer.php":"0ece8bbf75bbb97e7d0a583404824538","src\/Util\/PhpUnitCommandExecutor.php":"84274486bc5836d4dfa6a15ae4711dcc","src\/PHPUnit\/PhpUnitHubExtension.php":"bc97add061d2b615a4c828142d07e905","src\/Discoverer\/TestDiscoverer.php":"93f30da5e984101dc1e402c6fdc626e2","src\/WebSocket\/StatusHandler.php":"e65bbba93f1f1c8bb116140370023aa1","src\/Http\/DecoratedHttpServer.php":"796efd5b1f3413200c4216eacd07baf4","src\/TestRunner\/TestRunner.php":"2e6e8c057e8243009b3acda9eb1a8d37","tests\/Command\/RouterTest.php":"fcbb7a575e2103f020e0aa797dd07e7c","tests\/Command\/ServeCommandTest.php":"98e0865c6fd11eb3726bf182e37012e7","tests\/Coverage\/CoverageTest.php":"2e6a24d482ff721a9deff2f194e0e2bd","tests\/Util\/ProjectRootResolverTest.php":"b77b8208c37629acedd90b4b675f761e","tests\/Util\/ComposerTest.php":"d9c61117c9f424c3bd45724c13a9ef87","tests\/Util\/PhpUnitCommandExecutorTest.php":"2f9d8ada0f682222427c4e5689e88d98","tests\/Discoverer\/TestDiscovererTest.php":"677f2f722a38617cc5bcc4e3ae7942fa","tests\/WebSocket\/StatusHandlerTest.php":"532eaf4611becdc32d805efc6411f665","tests\/Http\/DecoratedHttpServerTest.php":"eca8426406a227d192f817bac2853cb2","tests\/TestRunner\/TestRunnerTest.php":"e6eb78e9c9b57079805e066eca06c812"}} \ No newline at end of file diff --git a/.phpunit.result.cache b/.phpunit.result.cache index cb61670..bd42640 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":2,"defects":{"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":8,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":1,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":1,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunReturnsProcessInstance":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":7,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":8,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithValidConfig":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":8,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":8,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":8,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPreparedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPassedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesFailedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesErroredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesSkippedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestFinishedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPreparedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPassedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesFailedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesErroredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesSkippedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestFinishedEvent":7,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithFilters":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":8,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStatusEndpointReturns200":8,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testServesIndexHtml":7,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileContentErrorResponses":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesWebSocketError":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesHttpConnectionError":8,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":7,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithInvalidConfigFile":7,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testRisky":5,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testNotice":5,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #0":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #1":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #2":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #0":8,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #1":8,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #2":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":7,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":7,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testServesIndexHtml":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfNoProcessIsRunning":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageErrorResponses":8},"times":{"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testConfigure":0.001,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":0.007,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsDistConfigFile":0.011,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsMainConfigFile":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorPrefersDistOverMainConfigFile":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsNoConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithInvalidConfigFile":0.004,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithAllPassedTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithFailedTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithErrorTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithMixedTestStatuses":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithEmptyXmlContentThrowsException":0.001,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithZeroXmlContentThrowsException":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithInvalidXmlContentThrowsException":0.001,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithXmlContainingNoTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithXmlContainingEmptyTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithNestedTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithMissingAttributes":0,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunReturnsProcessInstance":0.003,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenAttachesConnectionAndWritesToOutput":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnMessageDoesNothing":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseDetachesConnectionAndWritesToOutput":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWritesToOutputAndClosesConnection":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastSendsMessageToAllConnections":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastWithNoConnectionsDoesNothing":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":0.021,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":0.003,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":0.007,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsEmptyArrayForEmptyCoverage":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithNonExistentFile":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithInvalidXml":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithMissingProjectElement":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithFileOutsideSourceDirectories":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithInvalidXml":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #0":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #1":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #2":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #0 ('1')\"":0.004,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #1 ('2')\"":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #2 ('3')\"":0.004,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithValidConfig":0.007,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithFilters":0.004,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":0.006,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":0.119,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":0.005,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":0.008,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverSuites":0.004,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverGroups":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverTests":0.004,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":0.004,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":0.004,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":0.006,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithInvalidComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoBinDirInComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithBinDirInComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInCurrentDir":0.006,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInParentDir":0.002,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithNoVendorDir":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPreparedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPassedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesFailedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesErroredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesSkippedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":0,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":0,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestFinishedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPreparedEvent":0.003,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPassedEvent":0.003,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesFailedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesErroredEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesSkippedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":0.004,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestFinishedEvent":0.001,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsOutputOfValidCommand":0.005,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForInvalidCommand":0.003,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStatusEndpointReturns200":0.095,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testWebSocketConnection":0.105,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testRunFailedEndpointWithNoFailedTests":0.007,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testServesIndexHtml":0.006,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testNotFoundResponse":0.003,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetMimeType":0.001,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileCoverageErrorResponses":0.021,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileContentErrorResponses":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnMessageDelegatesToWebSocket":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnMessageDoesNotThrowWhenWebSocketPropertyIsNull":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnCloseCallsHttpServerOnCloseWhenWebSocketIsNotNull":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnCloseDoesNotThrowWhenWebSocketPropertyIsNull":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesWebSocketError":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesHttpConnectionError":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testWebSocketConnection":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunFailedEndpointWithNoFailedTests":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testServesIndexHtml":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testNotFoundResponse":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetMimeType":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageErrorResponses":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentErrorResponses":0.007,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testRisky":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testNotice":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #0":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #1":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #2":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #0":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #1":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #2":0,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfNoProcessIsRunning":0.003}} \ No newline at end of file +{"version":2,"defects":{"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":8,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":1,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":1,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunReturnsProcessInstance":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":7,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":8,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithValidConfig":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":8,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":8,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":8,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPreparedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPassedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesFailedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesErroredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesSkippedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestFinishedEvent":8,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPreparedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPassedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesFailedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesErroredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesSkippedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":7,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestFinishedEvent":7,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithFilters":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":8,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStatusEndpointReturns200":8,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testServesIndexHtml":7,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileContentErrorResponses":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesWebSocketError":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesHttpConnectionError":8,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":7,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithInvalidConfigFile":7,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testRisky":5,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testNotice":5,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #0":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #1":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #2":2,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #0":8,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #1":8,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #2":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":7,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":7,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testServesIndexHtml":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfNoProcessIsRunning":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageErrorResponses":8},"times":{"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":0.007,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testConfigure":0.001,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":0.01,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsDistConfigFile":0.011,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsMainConfigFile":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorPrefersDistOverMainConfigFile":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsNoConfigFile":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithInvalidConfigFile":0.001,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithAllPassedTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithFailedTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithErrorTests":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithMixedTestStatuses":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithEmptyXmlContentThrowsException":0.001,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithZeroXmlContentThrowsException":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithInvalidXmlContentThrowsException":0.001,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithXmlContainingNoTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithXmlContainingEmptyTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithNestedTestSuites":0,"PhpUnitHub\\Tests\\Parser\\JUnitParserTest::testParseWithMissingAttributes":0,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunReturnsProcessInstance":0.005,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenAttachesConnectionAndWritesToOutput":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnMessageDoesNothing":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseDetachesConnectionAndWritesToOutput":0.003,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWritesToOutputAndClosesConnection":0.002,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWithoutOutputDoesNotWrite":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastSendsMessageToAllConnections":0.003,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastWithNoConnectionsDoesNothing":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":0.035,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":0.004,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":0.004,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":0.008,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsEmptyArrayForEmptyCoverage":0.003,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithNonExistentFile":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithInvalidXml":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithMissingProjectElement":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithFileOutsideSourceDirectories":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":0.004,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithInvalidXml":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #0":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #1":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set #2":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #0 ('1')\"":0.004,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #1 ('2')\"":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode with data set \" with data set #2 ('3')\"":0.004,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWithValidConfig":0.007,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithFilters":0.005,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":0.004,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":0.168,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":0.007,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":0.005,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":0.011,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverSuites":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverGroups":0.002,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverTests":0.002,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":0.004,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":0.004,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":0.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":0.007,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithInvalidComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoBinDirInComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithBinDirInComposerJson":0.004,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInCurrentDir":0.008,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInParentDir":0.003,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithNoVendorDir":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPreparedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPassedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesFailedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesErroredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesSkippedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":0,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":0,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\RealtimeTestSubscriberTest::testNotifyHandlesTestFinishedEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPreparedEvent":0.003,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPassedEvent":0.003,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesFailedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesErroredEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesSkippedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesMarkedIncompleteEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesWarningTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpDeprecationTriggeredEvent":0.001,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesPhpWarningTriggeredEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestSuiteStartedEvent":0.004,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestRunnerFinishedEvent":0.002,"PhpUnitHub\\Tests\\PHPUnit\\TestSubscriberTest::testNotifyHandlesTestFinishedEvent":0.001,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsOutputOfValidCommand":0.011,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForInvalidCommand":0.002,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStatusEndpointReturns200":0.095,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testWebSocketConnection":0.105,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testRunFailedEndpointWithNoFailedTests":0.007,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testServesIndexHtml":0.006,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testNotFoundResponse":0.003,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetMimeType":0.001,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileCoverageErrorResponses":0.021,"PhpUnitHub\\Tests\\Command\\RouterNewTest::testGetFileContentErrorResponses":0.005,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnMessageDelegatesToWebSocket":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnMessageDoesNotThrowWhenWebSocketPropertyIsNull":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnCloseCallsHttpServerOnCloseWhenWebSocketIsNotNull":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnCloseDoesNotThrowWhenWebSocketPropertyIsNull":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesWebSocketError":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testOnErrorHandlesHttpConnectionError":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testWebSocketConnection":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunFailedEndpointWithNoFailedTests":0.003,"PhpUnitHub\\Tests\\Command\\RouterTest::testServesIndexHtml":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testNotFoundResponse":0.004,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetMimeType":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageErrorResponses":0.007,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentErrorResponses":0.005,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testRisky":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testNotice":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #0":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #1":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testIncomplete2 with data set #2":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #0":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #1":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testData with data set #2":0,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfNoProcessIsRunning":0.002}} \ No newline at end of file diff --git a/README.md b/README.md index 4641e0f..27a403b 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,42 @@ That's it! All dependencies will be installed automatically. - The **"Results"** tab will populate in real-time as tests execute, showing you immediate feedback on test status, failures, and errors. - Tests are grouped by their TestCase class, with failures and errors displayed prominently at the top. +### Running Tests in Parallel with ParaTeste + +PHPUnit Hub supports running tests in parallel using [ParaTest](https://github.com/paratestphp/paratest). This can significantly speed up your test execution on multi-core machines. + +To use ParaTest, first install it as a development dependency: + +```sh +composer require --dev brianium/paratest +``` + +Then, you can flag on UI "Run in parallel" settings + +**Generating Coverage with ParaTest**: + +If you want to generate code coverage reports while running tests in parallel with ParaTest, you need to configure a `cacheDirectory` in your `phpunit.xml` or `phpunit.xml.dist` file. This is crucial for ParaTest to correctly aggregate coverage data from parallel processes. + +Add the `cacheDirectory` attribute to your `` tag: + +```xml + + + + + tests + + + + + + +``` + ### File Watching (Auto Re-run) To automatically re-run tests whenever a source or test file changes, start the server with the `--watch` option: diff --git a/assets/js/App.vue b/assets/js/App.vue index cd9cb14..ae4092a 100644 --- a/assets/js/App.vue +++ b/assets/js/App.vue @@ -57,7 +57,8 @@ watch(() => [ store.state.options, store.state.selectedSuites, store.state.selectedGroups, - store.state.coverage + store.state.coverage, + store.state.parallel ], () => { store.saveState(); }, { deep: true }); diff --git a/assets/js/components/TestSidebar.vue b/assets/js/components/TestSidebar.vue index 5941f23..c41b176 100644 --- a/assets/js/components/TestSidebar.vue +++ b/assets/js/components/TestSidebar.vue @@ -57,6 +57,7 @@ async function fetchTests() { store.state.availableSuites = data.availableSuites || []; store.state.availableGroups = data.availableGroups || []; store.state.coverageDriverMissing = !data.coverageDriver; + store.state.paratest = data.paratest; // Build test index buildTestIndex(); diff --git a/assets/js/components/header/filter/FilterPanelContent.vue b/assets/js/components/header/filter/FilterPanelContent.vue index 1d02022..7648dd8 100644 --- a/assets/js/components/header/filter/FilterPanelContent.vue +++ b/assets/js/components/header/filter/FilterPanelContent.vue @@ -1,198 +1,215 @@