diff --git a/.phpunit.result.cache b/.phpunit.result.cache index c1ed8ec..6dd4ddf 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":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":8,"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},"times":{"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":0.001,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testConfigure":0,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":0.005,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsDistConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsMainConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorPrefersDistOverMainConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsNoConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":0.002,"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.002,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenAttachesConnectionAndWritesToOutput":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnMessageDoesNothing":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseDetachesConnectionAndWritesToOutput":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWritesToOutputAndClosesConnection":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastSendsMessageToAllConnections":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastWithNoConnectionsDoesNothing":0,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":0.001,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsEmptyArrayForEmptyCoverage":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithNonExistentFile":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithInvalidXml":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithMissingProjectElement":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithFileOutsideSourceDirectories":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithInvalidXml":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode":0.001,"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.001,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":0.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":0.023,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":0.006,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":0.002,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":0.006,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverSuites":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverGroups":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverTests":0.001,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":0,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":0.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":0,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":0.003,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithInvalidComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoBinDirInComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithBinDirInComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInCurrentDir":0.001,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInParentDir":0.001,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithNoVendorDir":0,"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.002,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForInvalidCommand":0.001,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":0}} \ 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":8,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":8,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":7,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":8,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":8,"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},"times":{"PhpUnitHub\\Tests\\Command\\RouterTest::testStopAllEndpointTerminatesAllProcesses":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointTerminatesSpecificProcess":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopEndpointReturns400IfNoProcessIsRunning":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testStopSingleEndpointReturns404IfRunIdNotFound":0.001,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testConfigure":0.001,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithoutWatchOptionOutputsMessages":0.006,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitNotFoundOutputsError":0.003,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOptionInotifywaitFoundAndFileChangesTriggersTests":0.003,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsDistConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsMainConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorPrefersDistOverMainConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testConstructorFindsNoConfigFile":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverWhenNoConfigFile":0.002,"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.002,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenAttachesConnectionAndWritesToOutput":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnOpenWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnMessageDoesNothing":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseDetachesConnectionAndWritesToOutput":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnCloseWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWritesToOutputAndClosesConnection":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testOnErrorWithoutOutputDoesNotWrite":0,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastSendsMessageToAllConnections":0.001,"PhpUnitHub\\Tests\\WebSocket\\StatusHandlerTest::testBroadcastWithNoConnectionsDoesNothing":0,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetCoverageReturnsCoverageData":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsCorrectData":0.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverage":0.002,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileReturnsCorrectData":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseReturnsEmptyArrayForEmptyCoverage":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithNonExistentFile":0,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithInvalidXml":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithMissingProjectElement":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithFileOutsideSourceDirectories":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoStatements":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseWithNoPhpunitConfig":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithInvalidXml":0.001,"PhpUnitHub\\Tests\\Coverage\\CoverageTest::testParseFileWithMissingFileNode":0.001,"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.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithSuites":0.002,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithGroups":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testRunTestsEndpointStartsProcess":0.024,"PhpUnitHub\\Tests\\Command\\RouterTest::testDiscoverTestsEndpointReturnsDiscovererResult":0.001,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileCoverageReturnsCoverageData":0.006,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetFileContentReturnsFileContent":0.002,"PhpUnitHub\\Tests\\Command\\RouterTest::testGetLastRunContextReturnsCorrectData":0.002,"PhpUnitHub\\Tests\\Command\\ServeCommandTest::testExecuteWithWatchOption":0.007,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverSuites":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverGroups":0.001,"PhpUnitHub\\Tests\\Discoverer\\TestDiscovererTest::testDiscoverTests":0.001,"PhpUnitHub\\Tests\\Http\\DecoratedHttpServerTest::testConstructorSetsMaxSize":0,"PhpUnitHub\\Tests\\PHPUnit\\PhpUnitHubExtensionTest::testBootstrapRegistersSubscribers":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithOptions":0.003,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testCamelToKebab":0,"PhpUnitHub\\Tests\\TestRunner\\TestRunnerTest::testRunBuildsCorrectCommandWithCoverageAndNoSource":0.004,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithInvalidComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithNoBinDirInComposerJson":0.001,"PhpUnitHub\\Tests\\Util\\ComposerTest::testGetComposerBinDirWithBinDirInComposerJson":0.002,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInCurrentDir":0.001,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithVendorDirInParentDir":0.001,"PhpUnitHub\\Tests\\Util\\ProjectRootResolverTest::testResolveWithNoVendorDir":0,"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.002,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForInvalidCommand":0.002,"PhpUnitHub\\Tests\\Util\\PhpUnitCommandExecutorTest::testExecuteReturnsNullForEmptyCommand":0,"PhpUnitHub\\Tests\\Command\\RouterTest::testStatusEndpointReturns200":0.095}} \ No newline at end of file diff --git a/public/index.html b/public/index.html index faab254..a655401 100644 --- a/public/index.html +++ b/public/index.html @@ -64,19 +64,7 @@

Filters & Settings

-
- -
- - -
-
+
@@ -652,4 +640,4 @@

{{ store.state.fileCoverage.pa }).mount('#app'); - + \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index cc4c1ee..0c7d2fc 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -87,15 +87,8 @@ export class App { this.store.setStarting(true); this.store.state.activeTab = 'results'; - // In update mode, clear results for "Run All" or "Run Failed" - if (this.store.state.options.resultUpdateMode === 'update') { - if (runOptions.contextId === 'global' || runOptions.contextId === 'failed') { - this.store.clearAllResults(); - } - } - // Filter out frontend-only options that PHPUnit doesn't understand - const { resultUpdateMode, displayMode, ...phpunitOptions } = this.store.state.options; + const { displayMode, ...phpunitOptions } = this.store.state.options; const payload = { filters: runOptions.filters || [], @@ -267,7 +260,7 @@ export class App { } /** - * Get results from current test run (or merged results in update mode) + * Get results from current test run (always reset mode) */ getResults() { const runs = this.store.state.realtimeTestRuns; @@ -277,19 +270,12 @@ export class App { return null; } - // In update mode, merge all completed/finished runs - const isUpdateMode = this.store.state.options.resultUpdateMode === 'update'; - - if (isUpdateMode) { - return this.getMergedResults(runs); - } else { - // In reset mode, show only the last completed run - let runId = this.store.state.lastCompletedRunId; - if (!runId) { - runId = runIds[runIds.length - 1]; - } - return this.getSingleRunResults(runs[runId]); + // Always show only the last completed run + let runId = this.store.state.lastCompletedRunId; + if (!runId) { + runId = runIds[runIds.length - 1]; } + return this.getSingleRunResults(runs[runId]); } /** @@ -353,125 +339,6 @@ export class App { }; } - /** - * Get merged results from all test runs - */ - getMergedResults(runs) { - const mergedSuites = {}; - const mergedSummary = { - numberOfTests: 0, - numberOfAssertions: 0, - duration: 0, - numberOfFailures: 0, - numberOfErrors: 0, - numberOfWarnings: 0, - numberOfSkipped: 0, - numberOfDeprecations: 0, - numberOfIncomplete: 0, - }; - - // Track which tests have been seen in summaries to avoid double-counting assertions - const testsSeen = new Set(); - - // Merge all runs - for (const runId in runs) { - const run = runs[runId]; - - // Only merge runs that have completed (or are running with data) - // Skip runs that are just initialized but have no test data yet - if (Object.keys(run.suites).length === 0) { - continue; - } - - // Merge suites and tests - for (const suiteName in run.suites) { - if (!mergedSuites[suiteName]) { - mergedSuites[suiteName] = { - name: suiteName, - tests: {}, - runIds: [] - }; - } - const suiteData = run.suites[suiteName]; - for (const testId in suiteData.tests) { - // Later runs override earlier runs for the same test - mergedSuites[suiteName].tests[testId] = { - ...suiteData.tests[testId], - runId: runId - }; - - // Mark this test as seen in this run - if (!testsSeen.has(testId)) { - testsSeen.add(testId); - } - } - - // Track which runs contributed to this suite - if (!mergedSuites[suiteName].runIds.includes(runId)) { - mergedSuites[suiteName].runIds.push(runId); - } - } - - // Accumulate summaries from all completed runs - // For assertions and duration, we need to accumulate from each unique run - // For other stats, we'll recalculate from merged tests - if (run.summary && run.status === 'finished') { - mergedSummary.duration += run.summary.duration || 0; - } - } - - // Transform merged suites - const transformedSuites = []; - for (const suiteName in mergedSuites) { - const suiteData = mergedSuites[suiteName]; - const testcases = []; - for (const testId in suiteData.tests) { - const testData = suiteData.tests[testId]; - testcases.push({ - name: testData.name, - class: testData.class, - id: testData.id, - duration: testData.duration || 0, - assertions: testData.assertions || 0, - status: testData.status, - message: testData.message, - trace: testData.trace, - warnings: testData.warnings || [], - deprecations: testData.deprecations || [], - }); - } - if (testcases.length > 0) { - transformedSuites.push({ - name: suiteData.name, - testcases, - }); - } - } - - // If no tests found, return null - if (transformedSuites.length === 0) { - return null; - } - - // Calculate counts from merged tests (but keep accumulated assertions and duration) - const calculatedSummary = this.calculateSummaryFromTests(transformedSuites); - - return { - summary: { - tests: calculatedSummary.tests, - assertions: calculatedSummary.assertions, - time: calculatedSummary.time, - failures: calculatedSummary.failures, - errors: calculatedSummary.errors, - warnings: calculatedSummary.warnings, - skipped: calculatedSummary.skipped, - deprecations: calculatedSummary.deprecations, - incomplete: calculatedSummary.incomplete, - }, - suites: transformedSuites, - }; - } - /** * Calculate summary statistics from test data */ @@ -719,4 +586,4 @@ export class App { console.error('Failed to fetch file coverage:', error); } } -} +} \ No newline at end of file diff --git a/public/js/store.js b/public/js/store.js index e73b5b6..b23dcdb 100644 --- a/public/js/store.js +++ b/public/js/store.js @@ -17,7 +17,6 @@ export class Store { stopOnError: false, stopOnFailure: false, stopOnWarning: false, - resultUpdateMode: 'update', // 'update' (append/merge) or 'reset' (clear all) displayMode: 'default', // 'default' or 'individual' }; @@ -70,7 +69,9 @@ export class Store { try { const parsedState = JSON.parse(savedState); if (parsedState.options) { - this.state.options = { ...this.state.options, ...parsedState.options }; + // Ensure resultUpdateMode is not loaded from old state + const { resultUpdateMode, ...restOptions } = parsedState.options; + this.state.options = { ...this.state.options, ...restOptions }; } if (Array.isArray(parsedState.selectedSuites)) { this.state.selectedSuites = parsedState.selectedSuites; @@ -128,10 +129,8 @@ export class Store { */ initializeTestRun(runId, contextId) { this.state.isStarting = false; - // Determine if we should reset results - // Always reset for 'global' runs in reset mode, or for 'failed' runs (to show only re-run tests) - const shouldReset = (this.state.options.resultUpdateMode === 'reset' && contextId === 'global') || - contextId === 'failed'; + // Always reset for 'global' runs or for 'failed' runs (to show only re-run tests) + const shouldReset = contextId === 'global' || contextId === 'failed'; this.state.realtimeTestRuns[runId] = { status: 'running', @@ -312,15 +311,6 @@ export class Store { } else if (status === 'passed') { // Remove from current run run.failedTestIds.delete(testId); - - // In update mode, also remove from all other runs (test now passes) - if (this.state.options.resultUpdateMode === 'update') { - for (const otherRunId in this.state.realtimeTestRuns) { - if (otherRunId !== runId) { - this.state.realtimeTestRuns[otherRunId].failedTestIds?.delete(testId); - } - } - } } else if (status !== 'passed') { suite.hasIssues = true; } @@ -358,8 +348,8 @@ export class Store { this.state.lastCompletedRunId = runId; delete this.state.runningTestIds[runId]; delete this.state.stopPending[runId]; - this.updateSidebarAfterRun(runId); this.state.isStarting = false; + this.updateSidebarAfterRun(runId); updateFavicon(run.summary.status === 'passed' ? 'success' : 'failure'); } @@ -495,44 +485,19 @@ export class Store { } /** - * Get failed test IDs from all runs (in update mode) or last run (in reset mode) + * Get failed test IDs from last run */ getFailedTestIds() { - if (this.state.options.resultUpdateMode === 'update') { - // In update mode, collect failed tests from all runs - const allFailedTests = new Set(); - for (const runId in this.state.realtimeTestRuns) { - const run = this.state.realtimeTestRuns[runId]; - if (run.failedTestIds) { - run.failedTestIds.forEach(testId => allFailedTests.add(testId)); - } - } - return Array.from(allFailedTests); - } else { - // In reset mode, only show failed tests from last completed run - const run = this.state.realtimeTestRuns[this.state.lastCompletedRunId]; - return run ? Array.from(run.failedTestIds) : []; - } + const run = this.state.realtimeTestRuns[this.state.lastCompletedRunId]; + return run ? Array.from(run.failedTestIds) : []; } /** * Check if there are failed tests */ hasFailedTests() { - if (this.state.options.resultUpdateMode === 'update') { - // In update mode, check all runs for failed tests - for (const runId in this.state.realtimeTestRuns) { - const run = this.state.realtimeTestRuns[runId]; - if (run.failedTestIds && run.failedTestIds.size > 0) { - return true; - } - } - return false; - } else { - // In reset mode, only check last completed run - const run = this.state.realtimeTestRuns[this.state.lastCompletedRunId]; - return run ? run.failedTestIds.size > 0 : false; - } + const run = this.state.realtimeTestRuns[this.state.lastCompletedRunId]; + return run ? run.failedTestIds.size > 0 : false; } /** diff --git a/public/js/tests/store.test.js b/public/js/tests/store.test.js index 58ede66..ac79ebf 100644 --- a/public/js/tests/store.test.js +++ b/public/js/tests/store.test.js @@ -128,17 +128,6 @@ describe('Store', () => { expect(store.state.realtimeTestRuns['oldRun']).toBeUndefined(); expect(store.state.lastCompletedRunId).toBeNull(); }); - - test('should not reset results for global context in update mode', () => { - const runId = 'run123'; - store.state.options.resultUpdateMode = 'update'; - store.state.realtimeTestRuns['oldRun'] = { status: 'finished' }; - store.state.lastCompletedRunId = 'oldRun'; - - store.initializeTestRun(runId, 'global'); - expect(store.state.realtimeTestRuns['oldRun']).toBeDefined(); - expect(store.state.lastCompletedRunId).toBe('oldRun'); - }); }); describe('handleTestEvent', () => { @@ -343,21 +332,6 @@ describe('Store', () => { store.handleTestCompleted(run, eventData, runId); expect(run.failedTestIds.has(testId)).toBe(false); }); - - test('should remove test from all runs failedTestIds in update mode when test passes', () => { - store.state.options.resultUpdateMode = 'update'; - const runId2 = 'run456'; - store.initializeTestRun(runId2, 'global'); - const run2 = store.state.realtimeTestRuns[runId2]; - run2.failedTestIds.add(testId); - run.failedTestIds.add(testId); - - const eventData = { event: 'test.passed', data: { test: testId } }; - store.handleTestCompleted(run, eventData, runId); - - expect(run.failedTestIds.has(testId)).toBe(false); - expect(run2.failedTestIds.has(testId)).toBe(false); - }); }); describe('handleTestFinished', () => { @@ -445,18 +419,6 @@ describe('Store', () => { expect(store.getFailedTestIds()).toEqual(['test1', 'test2']); }); - - test('should return failed test IDs from all runs in update mode', () => { - store.state.options.resultUpdateMode = 'update'; - store.initializeTestRun('run1', 'global'); - store.state.realtimeTestRuns['run1'].failedTestIds.add('test1'); - store.initializeTestRun('run2', 'global'); - store.state.realtimeTestRuns['run2'].failedTestIds.add('test2'); - - const failedIds = store.getFailedTestIds(); - expect(failedIds).toContain('test1'); - expect(failedIds).toContain('test2'); - }); }); describe('hasFailedTests', () => { @@ -469,14 +431,6 @@ describe('Store', () => { expect(store.hasFailedTests()).toBe(true); }); - - test('should return true if any run has failed tests in update mode', () => { - store.state.options.resultUpdateMode = 'update'; - store.initializeTestRun('run1', 'global'); - store.state.realtimeTestRuns['run1'].failedTestIds.add('test1'); - - expect(store.hasFailedTests()).toBe(true); - }); }); describe('clearAllResults', () => { diff --git a/screenshots/filters_settings.png b/screenshots/filters_settings.png index 7b11e14..942923c 100644 Binary files a/screenshots/filters_settings.png and b/screenshots/filters_settings.png differ diff --git a/src/TestRunner/TestRunner.php b/src/TestRunner/TestRunner.php index 61853f9..a96467e 100644 --- a/src/TestRunner/TestRunner.php +++ b/src/TestRunner/TestRunner.php @@ -137,7 +137,7 @@ private function addCoverageOptions(string &$command, string $phpunitXmlPath, st $excludeNodes = $domxPath->query('exclude/directory', $sourceNode); foreach ($excludeNodes as $excludeNode) { - $command .= ' --coverage-filter ' . escapeshellarg((string) $excludeNode->nodeValue) . ' --path-coverage'; + $command .= ' --coverage-exclude ' . escapeshellarg((string) $excludeNode->nodeValue); } } diff --git a/tests/TestRunner/TestRunnerTest.php b/tests/TestRunner/TestRunnerTest.php index ff91742..9541451 100644 --- a/tests/TestRunner/TestRunnerTest.php +++ b/tests/TestRunner/TestRunnerTest.php @@ -92,7 +92,7 @@ public function testRunBuildsCorrectCommandWithCoverage(): void $this->assertStringContainsString('--coverage-clover', $command); $this->assertStringContainsString('clover.xml', $command); $this->assertStringContainsString('--coverage-filter ' . escapeshellarg('src'), $command); - $this->assertStringContainsString('--coverage-filter ' . escapeshellarg('src/Exclude') . ' --path-coverage', $command); + $this->assertStringContainsString('--coverage-exclude ' . escapeshellarg('src/Exclude'), $command); } public function testRunBuildsCorrectCommandWithFilters(): void