numaru / vscode-ceedling-test-adapter

Ceedling Test Adapter for the VS Code Test Explorer
MIT License
37 stars 13 forks source link
c ceedling embedded test test-driven-development testing vscode-extension

Ceedling Test Explorer for Visual Studio Code

Run your Ceedling tests using the Test Explorer UI.

Screenshot

Features

Getting started

Configuration

Options

Property Description
ceedlingExplorer.projectPath The path to the Ceedling project (where the project.yml is) to use (relative to the workspace folder). By default (or if this option is set to null) it use the same path as the workspace folder.
ceedlingExplorer.shellPath The path to the shell where Ceedling is installed. By default (or if this option is set to null) it use the OS default shell.
ceedlingExplorer.debugConfiguration The Debug configuration to run during debugging. See Debugging for more info.
ceedlingExplorer.prettyTestLabel The test label is prettier in the test explorer, that mean the label is shorter and without begin prefix. E.g. inactive test_BlinkTaskShouldToggleLed, active BlinkTaskShouldToggleLed
Inactive:
prettyTestLabelInactive
Active:
prettyTestLabelActive
ceedlingExplorer.prettyTestFileLabel The test file label is prettier in the test explorer, that mean the label is shorter, without begin prefix, path and file type. E.g. inactive test/LEDs/test_BlinkTask.c, active BlinkTask
Inactive:
prettyTestFileLabelInactive
Active:
prettyTestFileLabelActive
ceedlingExplorer.testCommandArgs The command line arguments used to run Ceedling tests. The first argument have to litteraly contain the ${TEST_ID} tag. The value ["test:${TEST_ID}"] is used by default. For example, the arguments "test:${TEST_ID}", "gcov:${TEST_ID}", "utils:gcov" can be used to run tests and generate a gcov report.
ceedlingExplorer.problemMatching Configuration of compiler/linker problem matching. See Problem matching section for details.
ceedlingExplorer.testCaseMacroAliases An array of aliases for the TEST_CASE macro. By default it is ["TEST_CASE"]
ceedlingExplorer.testRangeMacroAliases An array of aliases for the TEST_RANGE macro. By default it is ["TEST_RANGE"]
ceedlingExplorer.ansiEscapeSequencesRemoved Should the ansi escape sequences be removed from ceedling stdout and stderr. By default it is true


Problem matching

Problem matching is the mechanism that scans Ceedling output text for known error/warning/info strings and reports these inline in the editor and in the Problems panel. Tries to resemble VSCode Tasks problemMatchers mechanism.

problems

Problem matching configuration options: Property Description
mode Mode of problem matching. It is either "disabled", uses preset (i.e. "gcc") or uses custom "patterns" from patterns array. Default is "disabled".
patterns Array of custom pattern objects used for problem matching. If mode is set to "patterns", Ceedling output is scanned line by line using each pattern provided in this array. Default is empty array.


Example configuration which is sufficient in most cases:

"ceedlingExplorer.problemMatching": {
    "mode": "gcc"
}
Problem matching pattern options: Property              Description
scanStdout Scan stdout output for problems. Default is false.
scanStderr Scan stderr output for problems. Default is true.
severity Severity of messages found by this pattern. Correct values are "error", "warning" and "info". Default is "info".
filePrefix Used to determine file's absolute path if file location is relative. ${projectPath} replaced with project path. Empty string means that file location in message is absolute. Default is empty string.
regexp The regular expression which is used to find an error, warning or info in the output line. ECMAScript (JavaScript) flavor, with global flag. Tip: you may find regex101 useful while experimenting with patterns. This property is required.
message Index of the problem's message in the regular expression. This property is required.
file Index of the problem's filename in the regular expression. This property is required.
line Index of the problem's (first) line in the regular expression. Not used if null or not defined.
lastLine Index of the problem's last line in the regular expression. Not used if null or not defined."
column Index of the problem's (first) column in the regular expression. Not used if null or not defined.
lastColumn Index of the problem's last column in the regular expression. Not used if null or not defined.


Example pattern object (GCC compiler warnings):

{
    "severity": "warning",
    "filePrefix": "${projectPath}",
    "regexp": "^(.*):(\\d+):(\\d+):\\s+warning:\\s+(.*)$",
    "message": 4,
    "file": 1,
    "line": 2,
    "column": 3
}

Commands

The following commands are available in VS Code's command palette, use the ID to add them to your keyboard shortcuts:

ID Command
ceedlingExplorer.clean Run ceedling clean
ceedlingExplorer.clobber Run ceedling clobber
test-explorer.reload Reload tests
test-explorer.run-all Run all tests
test-explorer.run-file Run tests in current file
test-explorer.run-test-at-cursor Run the test at the current cursor position
test-explorer.cancel Cancel running tests

Debugging

To set up debugging, create a new Debug Configuration. ${command:ceedlingExplorer.debugTestExecutable} can be used access the .out test executable filename being ran. Depending on your Ceedling configuration these can be found in projectPath/build/test/out/. Then, edit the ceedlingExplorer.debugConfiguration settings with the name of the Debug Configuration to run during debug.

Note: Individual test debugging is not supported. Instead the entire test file will be ran, so skip or remove breakpoints accordingly.

Example configuration with Native Debug (webfreak.debug):

{
    "name": "Ceedling Test Explorer Debug",
    "type": "cppdbg",
    "request": "launch",
    "program": "${workspaceFolder}/build/test/out/${command:ceedlingExplorer.debugTestExecutable}",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "gdb",
    "miDebuggerPath": "C:/MinGW/bin/gdb.exe",
    "setupCommands": [
        {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        }
    ]
}

Known issues

Troubleshooting

If you think you've found a bug, please file a bug report.