diff --git a/README.md b/README.md index a09b50a57..0605053c5 100644 --- a/README.md +++ b/README.md @@ -34,71 +34,13 @@ TestSpark currently supports two test generation strategies:
Initially implemented by CISELab at SERG @ TU Delft, TestSpark is currently developed and maintained by ICTL at JetBrains Research.
## DISCLAIMER TestSpark is currently designed to serve as an experimental tool. Please keep in mind that tests generated by TestSpark are meant to augment your existing test suites. They are not meant to replace writing tests manually. - - -## Features -[//]: # (TODO add validation and caching to the list) - -- [Installation](#installation) -- [Automatic test generation for classes](#generating-tests-for-classes-1) -- [Automatic test generation for methods](#generating-tests-for-methods) -- [Automatic test generation for lines](#generating-tests-for-lines-1) -- [Working with test cases](#working-with-test-cases-1) -- [Coverage table](#coverage-table-1) -- [Coverage visualisation for generated test suite](#coverage-visualisation-1) -- [Killed mutants visualisation](#killed-mutants-visualisation-1) -- [Integrating tests into the project](#integrating-tests-into-the-project-1) -- [Accessibility features](#accessibility-features-1) -- [Telemetry](#telemetry-opt-in-1) - -### Generating Tests for Classes -TestSpark uses EvoSuite and OpenAI models to automatically generate tests for Java classes. Two clicks are required from the user for the tests to be generated. - -### Generating Tests for Methods -TestSpark uses EvoSuite and OpenAI models to automatically generate tests for Java methods. Two clicks are required from the user for the tests to be generated. - -### Generating Tests for Lines -TestSpark uses EvoSuite and OpenAI models to automatically generate tests for Java code lines. Two clicks are required from the user for the tests to be generated. - -### Working with test cases -After receiving the results, the user can interact with the test cases in various ways. They can view the result (whether it's passed or failed), select, delete, modify, reset and execute the tests to update the results. - -### Coverage Table -Basic statistics for the test suite in form of a table. - -### Coverage Visualisation -TestSpark offers an option to highlight lines which the generated test suite covers. Clicking the gutter icon (green rectangle) to the left of the lines allows the user to see which tests cover the line. Clicking a name of a test highlights the according test in the "Generated Tests" tab to make it easy to spot. - -### Killed Mutants Visualisation -TestSpark offers an option to see which mutants were killed and by which tests. Clicking the gutter icon (green rectangle) to the left of the lines allows the user to see which tests cover the line. Clicking a name of a mutant highlights all the tests in the "Generated Tests" tab which cover it. - -### Integrating tests into the project -When the user has decided on a set of tests that he wants to use, it is possible to integrate these tests into the project. To do this, click on the button "Apply to test suite". - -[//]: # (### Caching Tests) -[//]: # (Due to its nature, generating tests with EvoSuite takes time. TestSpark takes steps to address this as) -[//]: # (much as technically feasible by caching all generated test cases that the user has decided not to apply) -[//]: # (immediately. This then allows TestSpark to instantly show those tests later, when the user decides to) -[//]: # (generate tests for a method or class that those unapplied tests also covered.) - -[//]: # (### Test validation) -[//]: # (To assure that the cached tests are still valid, we have static and dynamic validation which are run before showing any cached tests.) - -### Accessibility Features -Features which make the plugin more user-friendly. For instance, a color picker for coverage visualisation. - -### Telemetry (opt-in) -Opt-in non-intrusive data collection to improve EvoSuite in the future. - - ## Installation - Using IDE built-in plugin system: @@ -114,120 +56,109 @@ Opt-in non-intrusive data collection to improve EvoSuite in the future. ## Usage -### Important note before generating tests -If you are running the plugin for the first time, checkout the [`First time configuration`](#first-time-configuration) section. +### Important note before generating tests +If you are running the plugin for the first time, checkout the [Configuration](#configuration) section. + +- [Generating Tests for Classes](#generating-tests-for-classes) +- [Generating Tests for Methods](#generating-tests-for-methods) +- [Generating Tests for Lines](#generating-tests-for-lines) +- [Working with Test Cases](#working-with-test-cases) +- [Coverage](#coverage) +- [Killed mutants visualisation](#killed-mutants-visualisation) +- [Integrating tests into the project](#integrating-tests-into-the-project) +- [Accessibility features](#accessibility-features) +- [Telemetry](#telemetry-opt-in) +- [Configuration](#configuration) ### Generating Tests for Classes -To generate a test for a class, right-click (with mouse) anywhere within the class you want to test or right-click the class name itself (note that when using multiple cursors only the last one will count). Under the "TestSpark" option, select "Generate Tests for Class [...] by LLM/EvoSuite" option: +To generate a test for a class, right-click (with mouse) anywhere within the class you want to test or right-click the class name itself (note that when using multiple cursors only the last one will count). Under the "TestSpark" option, select the test generator and "class [...]" option. After setting up the selected test generator, test generation will start. ![Test generation for classes](readme-images/gifs/testClass.gif#gh-light-mode-only) ![Test generation for classes dark](readme-images/gifs/testClass_dark.gif#gh-dark-mode-only) -Once the tests are generated, they can be accessed in the "TestSpark" tool window (under "Generated Tests" tab), accessible via the stripe button on the right-hand side of the IDE: - -![Generated Tests](readme-images/gifs/testsClassAppear.gif#gh-light-mode-only) -![Generated Tests dark](readme-images/gifs/testsClassAppear_dark.gif#gh-dark-mode-only) - ### Generating Tests for Methods -To generate a test for a method, right-click (with mouse) anywhere within the method you want to test or right-click the method name itself (note that when using multiple cursors only the last one will count). Under the "TestSpark" option, select "Generate Tests for Method [...] by LLM/EvoSuite" option: +To generate a test for a method, right-click (with mouse) anywhere within the method you want to test or right-click the method name itself (note that when using multiple cursors only the last one will count). Under the "TestSpark" option, select the test generator and "method [...]" option. After setting up the selected test generator, test generation will start. ![Test generation for methods](readme-images/gifs/testMethod.gif#gh-light-mode-only) ![Test generation for methods dark](readme-images/gifs/testMethod_dark.gif#gh-dark-mode-only) -Once the tests are generated, they can be accessed in the "TestSpark" tool window (under "Generated Tests" tab), accessible via the stripe button on the righthand-side of the IDE: - -![Generated Tests](readme-images/gifs/testsMethodAppear.gif#gh-light-mode-only) -![Generated Tests dark](readme-images/gifs/testsMethodAppear_dark.gif#gh-dark-mode-only) - ### Generating Tests for Lines -To generate a test for a method, right-click (with mouse) anywhere within the line you want. Note that the line has to contain a statement (e.g. you will not have the option on lines with only method declarations). Under the "TestSpark" option, select "Generate Tests for Line [...] by LLM/EvoSuite" option: +To generate a test for a method, right-click (with mouse) anywhere within the line you want. Note that the line has to contain a statement (e.g. you will not have the option on lines with only method declarations). Under the "TestSpark" option, select the test generator and "line [...]" option. After setting up the selected test generator, test generation will start. ![Test generation for methods](readme-images/gifs/testLine.gif#gh-light-mode-only) ![Test generation for methods dark](readme-images/gifs/testLine_dark.gif#gh-dark-mode-only) -[//]: # (EvoSuite going to run in the background and generate tests. While EvoSuite is running, a progress bar in the bottom right-hand corner of the IDE:) - -[//]: # (![Progress bar](readme-images/pngs/ProgressBar.jpg)) +### Working with Test Cases +After receiving the results, the user can interact with the test cases in various ways. They can view the result (whether it's passed or failed), also select, delete, modify, reset, like/dislike, fix by LLM and execute the tests to update the results.\ +Hitting the "Apply to test suite" button will add the selected tests to a test class of your choice.\ +Additionally, the top row of the tool window has buttons for selecting all tests, deselecting all tests, running all tests and removing them. The user also has an overview of how many tests they currently have selected and passed. -Once the tests are generated, they can be accessed in the "TestSpark" tool window (under "Generated Tests" tab), accessible via the stripe button on the righthand-side of the IDE: +![Quick buttons](readme-images/pngs/quickButtons.png#gh-light-mode-only) +![Quick buttons dark](readme-images/pngs/quickButtons_dark.png#gh-dark-mode-only) -![Generated Tests](readme-images/gifs/testsLineAppear.gif#gh-light-mode-only) -![Generated Tests dark](readme-images/gifs/testsLineAppear_dark.gif#gh-dark-mode-only) - -### Working with test cases -You can examine the created tests, select those you wish to be added to your test class (via checkboxes). The tests can also be edited inside their mini-editors. Hitting the "Apply to test suite" button will add the selected tests to a test class of your choice.\ -Additionally, the top row of the tool window has buttons for selecting all tests, deselecting all tests and removing (deleting) them. The user also has an overview of how many tests they currently have selected. - -![Quick buttons](readme-images/pngs/selectAll.png#gh-light-mode-only) -![Quick buttons dark](readme-images/pngs/selectAll_dark.png#gh-dark-mode-only) - -#### Select test +#### Select Test Users can select test cases. ![Select test case](readme-images/gifs/selectTestCase.gif#gh-light-mode-only) ![Select test case dark](readme-images/gifs/selectTestCase_dark.gif#gh-dark-mode-only) -#### Remove test +#### Remove Test Users can remove test cases. ![Remove test case](readme-images/gifs/deleteTestCase.gif#gh-light-mode-only) ![Remove test case dark](readme-images/gifs/deleteTestCase_dark.gif#gh-dark-mode-only) -#### Modify test +#### Modify Test Users can modify the code of test cases. ![Modify test case](readme-images/gifs/modifyTestCase.gif#gh-light-mode-only) ![Modify test case dark](readme-images/gifs/modifyTestCase_dark.gif#gh-dark-mode-only) -#### Reset test +#### Reset Test Users can reset the code to its original. ![Reset test case](readme-images/gifs/resetTestCase.gif#gh-light-mode-only) ![Reset test case dark](readme-images/gifs/resetTestCase_dark.gif#gh-dark-mode-only) -#### Reset to last run +#### Reset to Last Run Users can reset the code to the last run. ![Reset to last run](readme-images/gifs/resetToLastRunTestCase.gif#gh-light-mode-only) ![Reset to last run dark](readme-images/gifs/resetToLastRunTestCase_dark.gif#gh-dark-mode-only) -#### Run test +#### Run Test Users can run the test to update the execution result.\ Effortlessly identify passed and failed test cases with green and red color highlights for instant result comprehension is available. In case of failure, it is possible to find out the current error. ![Run test](readme-images/gifs/runTestCase.gif#gh-light-mode-only) ![Run test dark](readme-images/gifs/runTestCase_dark.gif#gh-dark-mode-only) -#### Copy test +#### Copy Test Users can copy the test. ![Copy test](readme-images/gifs/copyTestCase.gif#gh-light-mode-only) ![Copy test dark](readme-images/gifs/copyTestCase_dark.gif#gh-dark-mode-only) -#### Like/dislike test +#### Like/Dislike Test Users can like/dislike the test for future analysis and improvement of the generation process. ![Like test](readme-images/gifs/likeTestCase.gif#gh-light-mode-only) ![Like test dark](readme-images/gifs/likeTestCase_dark.gif#gh-dark-mode-only) -#### Send a request to LLM +#### Send a Request to LLM Users can send a request to LLM with modification which users prefer for the test case. ![Send a request to LLM](readme-images/gifs/send.gif#gh-light-mode-only) ![Send a request to LLM dark](readme-images/gifs/send_dark.gif#gh-dark-mode-only) -### Coverage Table +### Coverage +#### Coverage Table Once a test suite is generated, basic statistics about it can be seen in the tool window, `coverage` tab. The statistics include line coverage, branch coverage, weak mutation coverage. The table adjusts dynamically - it only calculates the statistics for the selected tests in the test suite. ![Progress bar](readme-images/pngs/coverageTable.png#gh-light-mode-only) ![Progress bar dark](readme-images/pngs/coverageTable_dark.png#gh-dark-mode-only) -### Coverage Visualisation - -[//]: # (For coverage visualisation to work, you must have it turned on. The setting is available in the Quick Access tab.) - -[//]: # (![Coverage Visualisation Checkbox](readme-images/pngs/showCoverage.png)) - +#### Coverage Visualisation Once test are generated, the lines which are covered by the tests will be highlighted (default color: green). The gutter next to the lines will have a green rectangle as well. If the rectangle is clicked, a popup will show the names of the tests which cover the selected line. If any of the test names are clicked, the corresponding test in the toolwindow will be highlighted with the same accent color. The effect lasts 10 seconds. Coverage visualisation adjusts dynamically - it only shows results for the tests that are selected in the TestSpark tab. ![Test Highlight](readme-images/gifs/testHighlight.gif#gh-light-mode-only) @@ -238,7 +169,7 @@ For reference, without visualisation the window would look like this: ![No Test Highlight](readme-images/pngs/NoCoverageVisualisation.png#gh-light-mode-only) ![No Test Highlight dark](readme-images/pngs/NoCoverageVisualisation_dark.png#gh-dark-mode-only) -### Killed Mutants Visualisation +#### Killed Mutants Visualisation For mutation visualisation to work, you must have [coverage visualisation](#coverage-visualisation-1) enabled. You must also have the criterion `Mutation coverage` turned on. The setting is available in the Settings > Tools > TestSpark > EvoSuite tab. ![Turn on Mutation](readme-images/pngs/turnOnMutation.png#gh-light-mode-only) @@ -249,7 +180,7 @@ Once tests are generated, the same gutter from [`Coverage Visualisation`](#cover ![Mutation Coverage](readme-images/gifs/mutationHighlight.gif#gh-light-mode-only) ![Mutation Coverage dark](readme-images/gifs/mutationHighlight_dark.gif#gh-dark-mode-only) -### Integrating tests into the project +### Integrating Tests into the Project The tests can be added to an existing file: ![Tests adding to an exiting file](readme-images/gifs/addingToAnExistingFile.gif#gh-light-mode-only) @@ -260,22 +191,6 @@ Or to a new file: ![Tests adding to a new file](readme-images/gifs/addingToANewFile.gif#gh-light-mode-only) ![Tests adding to a new file_dark](readme-images/gifs/addingToANewFile_dark.gif#gh-dark-mode-only) -[//]: # (TODO uncomment after the caching fixing) -[//]: # (### Caching Tests) -[//]: # (When a user initially generates tests for a class, this will take some time, as the EvoSuite backend needs to be invoked. Then, if a user generates tests for a single method in this class, Test-Spark will look in its cache and find the tests that were previously generated for the entire class, and will instantly display them to the user rather than invoking EvoSuite again.) - -[//]: # ( Before displaying cached tests, they are (in)validated [statically and dynamically](#test-validation-1).\ ) -[//]: # (![Cached Tests for Method](readme-images/gifs/caching.gif)) - -[//]: # (TODO uncomment after the validator fixing) -[//]: # (### Test validation) -[//]: # (Tests which are no longer representative of the current state of the code under test are dropped from the cache, as they are no longer valid. We have 2 types of cache validation - static and dynamic validation. Static validation removes tests from cache by analysing the structure of the methods inside a class. If a method is modified, the tests covering it would be invalidated. Furthermore, it ignores whitespace changes, formatting inside a method and also reordering methods inside a class. Dynamic invalidation comes after static invalidation and verifies that all tests in the cache are still valid by running each of them. Failing tests are removed from the cache.\) -[//]: # (On the tool window, in the top corner there exist two buttons: `Validate Tests` and `Toggle Jacoco Report` (greyed out). To validate cached tests, the user can press `Validate Tests`. Validation is going to happen in the background.\) -[//]: # (![validate](readme-images/pngs/validate.png)\) -[//]: # (Once validated, `Toggle Jacoco Report` becomes clickable. If clicked, a jacoco table with the updated coverage (so, excluding deleted tests) will appear.\) -[//]: # (![jacoco](readme-images/pngs/jacoco.png)\) -[//]: # (![jacoco coverage](readme-images/pngs/jacocoTable.png)) - ### Accessibility Features The plugin supports changing the color for [coverage visualisation](#coverage-visualisation-1) and [killed mutants visualisation](#killed-mutants-visualisation-1) (one setting for both). To change the color, go to Settings > Tools > TestSpark and use the color picker under `Accessibility settings`: @@ -291,14 +206,14 @@ To opt into telemetry, go to Settings > Tools > TestS ![Telemetry](readme-images/pngs/telemetry.png#gh-light-mode-only) ![Telemetry dark](readme-images/pngs/telemetry_dark.png#gh-dark-mode-only) -## Configuration +### Configuration The plugin is configured mainly through the Settings menu. The plugin settings can be found under Settings > Tools > TestSpark. Here, the user is able to select options for the plugin: ![Plugin Settings](readme-images/pngs/PluginSettings.png#gh-light-mode-only) ![Plugin Settings dark](readme-images/pngs/PluginSettings_dark.png#gh-dark-mode-only) -### First time configuration +#### First time configuration Before running the plugin for the first time, we highly recommend going to the `Environment settings` section of TestSpark settings. The settings include compilation path (path to compiled code) and compilation command. Both commands have defaults. However, we recommend especially that you check compilation command. For this command the user requires maven, gradle or any other builder program which can be accessed via command. Leaving this field with a faulty value may cause unintended behaviour. ![Setup](readme-images/pngs/Setup.png#gh-light-mode-only) @@ -306,7 +221,7 @@ Before running the plugin for the first time, we highly recommend going to the ` Also, the parameters for the generators have to be configured. Check [EvoSuite Parameters](#evosuite-parameters) and [LLM Parameters](#llm-parameters). -### EvoSuite Settings +#### EvoSuite Settings The settings submenu Settings > Tools > TestSpark > EvoSuite allows the user to tweak EvoSuite parameters to their liking.\ At the moment EvoSuite can be executed only with Java 11, so if the user has a more modern version by default, it is necessary to download Java 11 and set the path to the java file. @@ -319,7 +234,7 @@ EvoSuite has hundreds of parameters, not all can be packed in a settings menu. H ![EvoSuite Settings](readme-images/pngs/EvoSuiteSettings.png#gh-light-mode-only) ![EvoSuite Settings dark](readme-images/pngs/EvoSuiteSettings_dark.png#gh-dark-mode-only) -### LLM Settings +#### LLM Settings The settings submenu Settings > Tools > TestSpark > LLM allows the user to tweak LLM parameters to their liking. ![LLM Settings](readme-images/pngs/LLMSettings.png#gh-light-mode-only) @@ -330,12 +245,12 @@ Selecting a platform to interact with the LLM. By default, only OpenAI is availa ![LLM Platform](readme-images/pngs/LLMPlatform.png#gh-light-mode-only) ![LLM Platform dark](readme-images/pngs/LLMPlatform_dark.png#gh-dark-mode-only) -Users have to set their own token for OpenAI, the plugin does not provide a default option. +Users have to set their own token for LLM, the plugin does not provide a default option. ![LLM Token](readme-images/pngs/LLMToken.png#gh-light-mode-only) ![LLM Token dark](readme-images/pngs/LLMToken_dark.png#gh-dark-mode-only) -Once the correct token is entered, it will be possible to select an OpenAI model for test generation. +Once the correct token is entered, it will be possible to select an LLM model for test generation. ![LLM Model](readme-images/pngs/LLMModel.png#gh-light-mode-only) ![LLM Model dark](readme-images/pngs/LLMModel_dark.png#gh-dark-mode-only) diff --git a/readme-images/gifs/addingToANewFile.gif b/readme-images/gifs/addingToANewFile.gif index 89c549270..214879afb 100644 Binary files a/readme-images/gifs/addingToANewFile.gif and b/readme-images/gifs/addingToANewFile.gif differ diff --git a/readme-images/gifs/addingToANewFile_dark.gif b/readme-images/gifs/addingToANewFile_dark.gif index 253e8d5e1..f84a90c05 100644 Binary files a/readme-images/gifs/addingToANewFile_dark.gif and b/readme-images/gifs/addingToANewFile_dark.gif differ diff --git a/readme-images/gifs/addingToAnExistingFile.gif b/readme-images/gifs/addingToAnExistingFile.gif index e72dd18ae..40a85dc92 100644 Binary files a/readme-images/gifs/addingToAnExistingFile.gif and b/readme-images/gifs/addingToAnExistingFile.gif differ diff --git a/readme-images/gifs/addingToAnExistingFile_dark.gif b/readme-images/gifs/addingToAnExistingFile_dark.gif index 3c8ea4752..fd2d1020e 100644 Binary files a/readme-images/gifs/addingToAnExistingFile_dark.gif and b/readme-images/gifs/addingToAnExistingFile_dark.gif differ diff --git a/readme-images/gifs/copyTestCase.gif b/readme-images/gifs/copyTestCase.gif index 29a168472..5468374a1 100644 Binary files a/readme-images/gifs/copyTestCase.gif and b/readme-images/gifs/copyTestCase.gif differ diff --git a/readme-images/gifs/copyTestCase_dark.gif b/readme-images/gifs/copyTestCase_dark.gif index f81be0e5b..1b39bddce 100644 Binary files a/readme-images/gifs/copyTestCase_dark.gif and b/readme-images/gifs/copyTestCase_dark.gif differ diff --git a/readme-images/gifs/deleteTestCase.gif b/readme-images/gifs/deleteTestCase.gif index db1683e7c..be0eeb8a2 100644 Binary files a/readme-images/gifs/deleteTestCase.gif and b/readme-images/gifs/deleteTestCase.gif differ diff --git a/readme-images/gifs/deleteTestCase_dark.gif b/readme-images/gifs/deleteTestCase_dark.gif index 664ff2097..68ac5f0e4 100644 Binary files a/readme-images/gifs/deleteTestCase_dark.gif and b/readme-images/gifs/deleteTestCase_dark.gif differ diff --git a/readme-images/gifs/likeTestCase.gif b/readme-images/gifs/likeTestCase.gif index fb834421a..a4651e25e 100644 Binary files a/readme-images/gifs/likeTestCase.gif and b/readme-images/gifs/likeTestCase.gif differ diff --git a/readme-images/gifs/likeTestCase_dark.gif b/readme-images/gifs/likeTestCase_dark.gif index 77428af14..4275d024c 100644 Binary files a/readme-images/gifs/likeTestCase_dark.gif and b/readme-images/gifs/likeTestCase_dark.gif differ diff --git a/readme-images/gifs/modifyTestCase.gif b/readme-images/gifs/modifyTestCase.gif index d94cfb8ec..92a5de7f2 100644 Binary files a/readme-images/gifs/modifyTestCase.gif and b/readme-images/gifs/modifyTestCase.gif differ diff --git a/readme-images/gifs/modifyTestCase_dark.gif b/readme-images/gifs/modifyTestCase_dark.gif index 4502541c3..ab407d7e8 100644 Binary files a/readme-images/gifs/modifyTestCase_dark.gif and b/readme-images/gifs/modifyTestCase_dark.gif differ diff --git a/readme-images/gifs/mutationHighlight.gif b/readme-images/gifs/mutationHighlight.gif index 74958b366..c8d5238ff 100644 Binary files a/readme-images/gifs/mutationHighlight.gif and b/readme-images/gifs/mutationHighlight.gif differ diff --git a/readme-images/gifs/mutationHighlight_dark.gif b/readme-images/gifs/mutationHighlight_dark.gif index c2d94d91f..5f0d1e2e2 100644 Binary files a/readme-images/gifs/mutationHighlight_dark.gif and b/readme-images/gifs/mutationHighlight_dark.gif differ diff --git a/readme-images/gifs/resetTestCase.gif b/readme-images/gifs/resetTestCase.gif index f9f04eb2b..175791759 100644 Binary files a/readme-images/gifs/resetTestCase.gif and b/readme-images/gifs/resetTestCase.gif differ diff --git a/readme-images/gifs/resetTestCase_dark.gif b/readme-images/gifs/resetTestCase_dark.gif index bbefd1bff..6e743ab95 100644 Binary files a/readme-images/gifs/resetTestCase_dark.gif and b/readme-images/gifs/resetTestCase_dark.gif differ diff --git a/readme-images/gifs/resetToLastRunTestCase.gif b/readme-images/gifs/resetToLastRunTestCase.gif index 3d9d1a3f8..f3192c2f0 100644 Binary files a/readme-images/gifs/resetToLastRunTestCase.gif and b/readme-images/gifs/resetToLastRunTestCase.gif differ diff --git a/readme-images/gifs/resetToLastRunTestCase_dark.gif b/readme-images/gifs/resetToLastRunTestCase_dark.gif index a12cdbff4..9a6bcd39c 100644 Binary files a/readme-images/gifs/resetToLastRunTestCase_dark.gif and b/readme-images/gifs/resetToLastRunTestCase_dark.gif differ diff --git a/readme-images/gifs/runTestCase.gif b/readme-images/gifs/runTestCase.gif index 39550804d..0d2825448 100644 Binary files a/readme-images/gifs/runTestCase.gif and b/readme-images/gifs/runTestCase.gif differ diff --git a/readme-images/gifs/runTestCase_dark.gif b/readme-images/gifs/runTestCase_dark.gif index ada7fc7f7..e1733b644 100644 Binary files a/readme-images/gifs/runTestCase_dark.gif and b/readme-images/gifs/runTestCase_dark.gif differ diff --git a/readme-images/gifs/selectTestCase.gif b/readme-images/gifs/selectTestCase.gif index 383edd0ae..1232e0c69 100644 Binary files a/readme-images/gifs/selectTestCase.gif and b/readme-images/gifs/selectTestCase.gif differ diff --git a/readme-images/gifs/selectTestCase_dark.gif b/readme-images/gifs/selectTestCase_dark.gif index bee34986a..80b5b9830 100644 Binary files a/readme-images/gifs/selectTestCase_dark.gif and b/readme-images/gifs/selectTestCase_dark.gif differ diff --git a/readme-images/gifs/send.gif b/readme-images/gifs/send.gif index b36e88bfe..19a1f5df7 100644 Binary files a/readme-images/gifs/send.gif and b/readme-images/gifs/send.gif differ diff --git a/readme-images/gifs/send_dark.gif b/readme-images/gifs/send_dark.gif index c2c9c27d6..fe4bdd186 100644 Binary files a/readme-images/gifs/send_dark.gif and b/readme-images/gifs/send_dark.gif differ diff --git a/readme-images/gifs/testClass.gif b/readme-images/gifs/testClass.gif index 240258317..a152ea956 100644 Binary files a/readme-images/gifs/testClass.gif and b/readme-images/gifs/testClass.gif differ diff --git a/readme-images/gifs/testClass_dark.gif b/readme-images/gifs/testClass_dark.gif index 2bac30556..e19773066 100644 Binary files a/readme-images/gifs/testClass_dark.gif and b/readme-images/gifs/testClass_dark.gif differ diff --git a/readme-images/gifs/testHighlight.gif b/readme-images/gifs/testHighlight.gif index 60c71f698..9497e3503 100644 Binary files a/readme-images/gifs/testHighlight.gif and b/readme-images/gifs/testHighlight.gif differ diff --git a/readme-images/gifs/testHighlight_dark.gif b/readme-images/gifs/testHighlight_dark.gif index 6bf95adee..14d12bab8 100644 Binary files a/readme-images/gifs/testHighlight_dark.gif and b/readme-images/gifs/testHighlight_dark.gif differ diff --git a/readme-images/gifs/testLine.gif b/readme-images/gifs/testLine.gif index fb65bd5d7..344ba540d 100644 Binary files a/readme-images/gifs/testLine.gif and b/readme-images/gifs/testLine.gif differ diff --git a/readme-images/gifs/testLine_dark.gif b/readme-images/gifs/testLine_dark.gif index d9e3b25b8..aa5289a29 100644 Binary files a/readme-images/gifs/testLine_dark.gif and b/readme-images/gifs/testLine_dark.gif differ diff --git a/readme-images/gifs/testMethod.gif b/readme-images/gifs/testMethod.gif index 5d196c036..7de1a005c 100644 Binary files a/readme-images/gifs/testMethod.gif and b/readme-images/gifs/testMethod.gif differ diff --git a/readme-images/gifs/testMethod_dark.gif b/readme-images/gifs/testMethod_dark.gif index b097fa3d1..831f910a6 100644 Binary files a/readme-images/gifs/testMethod_dark.gif and b/readme-images/gifs/testMethod_dark.gif differ diff --git a/readme-images/pngs/LLMModel.png b/readme-images/pngs/LLMModel.png index 32039830a..b65ef553a 100644 Binary files a/readme-images/pngs/LLMModel.png and b/readme-images/pngs/LLMModel.png differ diff --git a/readme-images/pngs/LLMModel_dark.png b/readme-images/pngs/LLMModel_dark.png index 72a50fdcd..7c8e68cec 100644 Binary files a/readme-images/pngs/LLMModel_dark.png and b/readme-images/pngs/LLMModel_dark.png differ diff --git a/readme-images/pngs/LLMParameters.png b/readme-images/pngs/LLMParameters.png index 0236f1125..c4e287da8 100644 Binary files a/readme-images/pngs/LLMParameters.png and b/readme-images/pngs/LLMParameters.png differ diff --git a/readme-images/pngs/LLMParameters_dark.png b/readme-images/pngs/LLMParameters_dark.png index 19d72f1d5..1f4058b2b 100644 Binary files a/readme-images/pngs/LLMParameters_dark.png and b/readme-images/pngs/LLMParameters_dark.png differ diff --git a/readme-images/pngs/LLMPlatform.png b/readme-images/pngs/LLMPlatform.png index e19203d2d..6362dc1f8 100644 Binary files a/readme-images/pngs/LLMPlatform.png and b/readme-images/pngs/LLMPlatform.png differ diff --git a/readme-images/pngs/LLMPlatform_dark.png b/readme-images/pngs/LLMPlatform_dark.png index 6fec52a45..013cc1eef 100644 Binary files a/readme-images/pngs/LLMPlatform_dark.png and b/readme-images/pngs/LLMPlatform_dark.png differ diff --git a/readme-images/pngs/LLMPrompt.png b/readme-images/pngs/LLMPrompt.png index 5bd7b2689..82aad55c1 100644 Binary files a/readme-images/pngs/LLMPrompt.png and b/readme-images/pngs/LLMPrompt.png differ diff --git a/readme-images/pngs/LLMPrompt_dark.png b/readme-images/pngs/LLMPrompt_dark.png index c4b213b60..85e21b2dc 100644 Binary files a/readme-images/pngs/LLMPrompt_dark.png and b/readme-images/pngs/LLMPrompt_dark.png differ diff --git a/readme-images/pngs/LLMSettings.png b/readme-images/pngs/LLMSettings.png index f81549b95..73a89e7ff 100644 Binary files a/readme-images/pngs/LLMSettings.png and b/readme-images/pngs/LLMSettings.png differ diff --git a/readme-images/pngs/LLMSettings_dark.png b/readme-images/pngs/LLMSettings_dark.png index f54a5ea05..bb3fd74f4 100644 Binary files a/readme-images/pngs/LLMSettings_dark.png and b/readme-images/pngs/LLMSettings_dark.png differ diff --git a/readme-images/pngs/LLMToken.png b/readme-images/pngs/LLMToken.png index 61f262748..14095523f 100644 Binary files a/readme-images/pngs/LLMToken.png and b/readme-images/pngs/LLMToken.png differ diff --git a/readme-images/pngs/LLMToken_dark.png b/readme-images/pngs/LLMToken_dark.png index 47a1fadc6..d534d00e3 100644 Binary files a/readme-images/pngs/LLMToken_dark.png and b/readme-images/pngs/LLMToken_dark.png differ diff --git a/readme-images/pngs/NoCoverageVisualisation.png b/readme-images/pngs/NoCoverageVisualisation.png index d482831c1..0f551ce17 100644 Binary files a/readme-images/pngs/NoCoverageVisualisation.png and b/readme-images/pngs/NoCoverageVisualisation.png differ diff --git a/readme-images/pngs/NoCoverageVisualisation_dark.png b/readme-images/pngs/NoCoverageVisualisation_dark.png index 0dbf3ad2f..dd729907f 100644 Binary files a/readme-images/pngs/NoCoverageVisualisation_dark.png and b/readme-images/pngs/NoCoverageVisualisation_dark.png differ diff --git a/readme-images/pngs/quickButtons.png b/readme-images/pngs/quickButtons.png new file mode 100644 index 000000000..c47043aa7 Binary files /dev/null and b/readme-images/pngs/quickButtons.png differ diff --git a/readme-images/pngs/quickButtons_dark.png b/readme-images/pngs/quickButtons_dark.png new file mode 100644 index 000000000..74baf9561 Binary files /dev/null and b/readme-images/pngs/quickButtons_dark.png differ diff --git a/readme-images/pngs/selectAll.png b/readme-images/pngs/selectAll.png deleted file mode 100644 index d67a5d7e3..000000000 Binary files a/readme-images/pngs/selectAll.png and /dev/null differ diff --git a/readme-images/pngs/selectAll_dark.png b/readme-images/pngs/selectAll_dark.png deleted file mode 100644 index 65621ae13..000000000 Binary files a/readme-images/pngs/selectAll_dark.png and /dev/null differ