vscode-cmake-tools icon indicating copy to clipboard operation
vscode-cmake-tools copied to clipboard

[Bug] Test explorer tree expand / collapse are reset when running test

Open automas-dev opened this issue 1 month ago • 2 comments

Brief Issue Summary

I'm using the cmake.ctest.testSuiteDelimiter setting to view my gtests in the test explorer as a tree. When I run any of the tests, after expanding one of the tree elements, it will revert to the closed state. I am able to keep the tree open if I reload the window with the tree expanded, but then when I run a test after collapsing the tree it reverts to being expanded. It's almost like the tree has an initial state of what is expanded and running a test reverts to that state.

CMake Tools Diagnostics

{
  "os": "linux",
  "vscodeVersion": "1.106.2",
  "cmtVersion": "1.21.36",
  "configurations": [
    {
      "folder": "/home/thomas/projects/git/wavefront",
      "cmakeVersion": "3.31.6",
      "configured": true,
      "generator": "Ninja",
      "usesPresets": false,
      "compilers": {
        "C": "/usr/bin/gcc",
        "CXX": "/usr/bin/g++"
      }
    }
  ],
  "cpptoolsIntegration": {
    "isReady": false,
    "hasCodeModel": false,
    "activeBuildType": "",
    "buildTypesSeen": [],
    "requests": [],
    "responses": [],
    "partialMatches": [],
    "targetCount": 0,
    "executablesCount": 0,
    "librariesCount": 0,
    "targets": []
  },
  "settings": [
    {
      "communicationMode": "automatic",
      "useCMakePresets": "auto",
      "configureOnOpen": true
    }
  ]
}

Debug Log

[main] Configuring project: wavefront 
[proc] Executing command: /usr/bin/cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ --no-warn-unused-cli -S /home/thomas/projects/git/wavefront -B /home/thomas/projects/git/wavefront/build -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Appending code coverage compiler flags: -g --coverage
[cmake] -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
[cmake] -- Doxygen not found, not building docs
[cmake] -- GLM: Version 1.0.2
[cmake] -- GLM: Build with C++ features auto detection
[cmake] Generate test parser_tests
[cmake] Generate test split_string_space_tests
[cmake] Generate test split_string_tests
[cmake] Generate test trim_string_tests
[cmake] -- Configuring done (0.4s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: /home/thomas/projects/git/wavefront/build
[cmakefileapi-parser] Read reply folder: /home/thomas/projects/git/wavefront/build/.cmake/api/v1/reply
[cmakefileapi-parser] Found index files: ["cache-v2-141abae82097a8b1829c.json","cmakeFiles-v1-704e8308b8978291395b.json","codemodel-v2-93708a648829c7d0529c.json","directory-.-Debug-a6d278aab90e0d2a02df.json","directory-_deps.glm-build-Debug-201ada10ea0a1b5f163e.json","directory-_deps.glm-build.glm-Debug-894397eaf2e95b475181.json","directory-_deps.googletest-build-Debug-325181791364522dc3de.json","directory-_deps.googletest-build.googletest-Debug-de7a7819599cf3ddfbd1.json","directory-external-Debug-c957a038f5114282bdaf.json","directory-src-Debug-1ff04ebb6bc18e202804.json","directory-tests-Debug-b01f6abb0ab61427ef3b.json","index-2025-11-27T05-43-07-0683.json","target-Continuous-Debug-7123eaa45a0f21e2e564.json","target-ContinuousBuild-Debug-256a00903484a043ee44.json","target-ContinuousConfigure-Debug-005a0ca7cc6184dda912.json","target-ContinuousCoverage-Debug-621f6e3f87ca0525aeef.json","target-ContinuousMemCheck-Debug-e1082d2f68a1a465d7ca.json","target-ContinuousStart-Debug-0b60030b120c7685d6bf.json","target-ContinuousSubmit-Debug-a8cc13e6f4fe3b319832.json","target-ContinuousTest-Debug-b85fcbb89dc7a1602dd9.json","target-ContinuousUpdate-Debug-3601c895f88a0a9e67b3.json","target-Experimental-Debug-5c36a760f8f38a7a84fc.json","target-ExperimentalBuild-Debug-51859c69abdb99ed2d68.json","target-ExperimentalConfigure-Debug-83d7e96476b21ea9924e.json","target-ExperimentalCoverage-Debug-023db6e34b41d985c6fe.json","target-ExperimentalMemCheck-Debug-46c91d21a9c1d4139604.json","target-ExperimentalStart-Debug-c14cda818c18fcdc0484.json","target-ExperimentalSubmit-Debug-e68e1b0dddd193627a52.json","target-ExperimentalTest-Debug-08aed19ce815ff708c8a.json","target-ExperimentalUpdate-Debug-f7584eb1a7b988cbd0f7.json","target-Nightly-Debug-cb618877903e906e6b48.json","target-NightlyBuild-Debug-666e3e8ad2066a894708.json","target-NightlyConfigure-Debug-0fb6c98cb412a5327776.json","target-NightlyCoverage-Debug-aa31cc5359e7e75942ee.json","target-NightlyMemCheck-Debug-ee0b853b506a175d8432.json","target-NightlyMemoryCheck-Debug-817c465b10017ea3555b.json","target-NightlyStart-Debug-14a6ca831d1cfc8f9120.json","target-NightlySubmit-Debug-6eb18a1b7d8b947412d7.json","target-NightlyTest-Debug-34ada32f0f762706897a.json","target-NightlyUpdate-Debug-4645a5b8528b4a53da13.json","target-Wavefront-Debug-4bc07bd9bcb9f506ab1c.json","target-Wavefront_coverage-Debug-2713171a5ffb808c4650.json","target-glm-Debug-04b1b24297b173f0e748.json","target-gtest-Debug-771b0422447fe63824d6.json","target-gtest_main-Debug-8a723abd9ef076aa3b59.json","target-parser_tests-Debug-9df7c88a9a9607dee34d.json","target-split_string_space_tests-Debug-69c8ba720148bfab5e07.json","target-split_string_tests-Debug-d6403791e37e4afbbf95.json","target-trim_string_tests-Debug-f948a660fc2b84c77397.json","toolchains-v1-16c0cf49103c78f1ab95.json"]
[extension] [3428] cmake.configure finished (returned 0)

Additional Information

In an effort to trace the issue, I reverted all of my vscode settings to default and disabled all extensions besides CMake Tools, Test Explorer UI and Test Adapter Converter. This recording and all logs are from that setup.

Image

Test cases in the above recording are

  1. Run all after loading the workspace (nothing changes)
  2. Run all tests after collapsing and expanding elements of the tree (both are reset)
  3. Running a single test from another group after expanding (expanded is reset)
  4. Running a single test from the expanded group after expanding (expanded is reset)

Logs from running all tests: run_all_tests_cmake_build_output.txt

automas-dev avatar Nov 27 '25 06:11 automas-dev

I was able to reduce the project down to a minimum reproducible example. With these files I am still seeing the behavior I described.

CMakeLists.txt

cmake_minimum_required(VERSION 3.15...3.20)
project(MRE VERSION 0.2.0 DESCRIPTION "Minimum Reproducible Example" LANGUAGES CXX)
include(CTest)
include(GNUInstallDirs)
include(FetchContent)
FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.15.2)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
set(BUILD_GTEST ON CACHE BOOL "" FORCE)
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
set(TARGET tests)
enable_testing()
include(GoogleTest)
add_executable(${TARGET} ${CMAKE_CURRENT_SOURCE_DIR}/tests.cpp)
target_link_libraries(${TARGET} PRIVATE gtest gtest_main)
gtest_discover_tests(${TARGET})

tests.cpp

#include <gtest/gtest.h>
TEST(FirstGroup, Test1) {
    EXPECT_TRUE(true);
}
TEST(FirstGroup, Test2) {
    EXPECT_TRUE(true);
}
TEST(SecondGroup, Test1) {
    EXPECT_TRUE(true);
}
TEST(SecondGroup, Test2) {
    EXPECT_TRUE(true);
}

.vscode/settings.json

{
    "cmake.ctest.testSuiteDelimiter": "\\.",
    "cmake.loggingLevel": "debug",
    "cmake.ctest.testExplorerIntegrationEnabled": true
}

automas-dev avatar Nov 27 '25 06:11 automas-dev

Hi @automas-dev , thanks for reporting issue here! We can reproduce this issue on a Linux machine using Visual Studio Code v1.106.2 + CMake Tools v1.21.36 release version. Repro Steps:

  1. Download the attached project(Test4621.zip) and open it.
  2. After generating the cache, open the Test window.
  3. Expand the test cases, run the tests, and observe the results.

Details please see following video:

https://github.com/user-attachments/assets/501875bf-9e6d-4d47-99f4-21e5a9dc886d

FYI: @gcampbell-msft

yanghhhhhhh avatar Nov 28 '25 02:11 yanghhhhhhh

Hitting this too. Haven't yet found a workaround.

benvanik avatar Dec 12 '25 21:12 benvanik

@benvanik Thanks for the comment, Our development team is still investigating the issue and we'll let you know as soon as there's any update. Thanks.

yanghhhhhhh avatar Dec 15 '25 02:12 yanghhhhhhh