Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0f23a85

Browse files
committed
timeout customization complete
1 parente445524 commit0f23a85

File tree

4 files changed

+59
-12
lines changed

4 files changed

+59
-12
lines changed

‎package.json‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"displayName":"C++ Unit Testing Framework",
44
"description":"C++ Unit Testing Framework",
55
"enableApiProposals":false,
6-
"version":"0.3.0",
6+
"version":"0.3.6",
77
"publisher":"AutumnMoon",
88
"icon":"images/icon.png",
99
"engines": {
@@ -43,6 +43,16 @@
4343
"type":"boolean",
4444
"default":"true",
4545
"description":"Destroy the driver file automatically after building the tests"
46+
},
47+
"cpp-unit-test.run.timeouttime": {
48+
"type":"integer",
49+
"default":"60",
50+
"description":"Max time per test (in seconds)."
51+
},
52+
"cpp-unit-test.run.valgrindtimeouttime": {
53+
"type":"integer",
54+
"default":"60",
55+
"description":"Max time per valgrind test (in seconds)."
4656
}
4757
}
4858
}

‎sample/unit_tests.h‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,9 @@ void block_commented_test() {
4848

4949
// void inline_commented_test() {
5050
// std::cout << "don't run me";
51-
//}
51+
//}
52+
53+
voidtimeout_test() {
54+
std::cout <<"testing" << std::endl;
55+
while(true) {}
56+
}

‎src/driverUtils.ts‎

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ function getConfiguration(configtype : string) : {[key : string] : string} {
1111
returnconfig;
1212
}
1313

14+
15+
exportfunctiongetValgrindTimeoutTime() :string{
16+
returngetConfiguration('run')['valgrindtimeouttime'];
17+
}
18+
19+
exportfunctiongetTimeoutTime() :string{
20+
returngetConfiguration('run')['timeouttime'];
21+
}
22+
1423
exportfunctiongetCleanUpExecutableOnBuild() :string{
1524
returngetConfiguration('build')['cleanUpExecutableOnBuild'];
1625
}
@@ -153,11 +162,21 @@ export const cleanup = async function() {
153162

154163
exportconstexecShellCommand=asyncfunction(cmd:string,fsPathDict:Object={}):Promise<any>{
155164
constexec=require('child_process').exec;
156-
165+
//Object.assign(fsPathDict);
157166
returnnewPromise((resolve,reject)=>{
158-
exec(cmd,fsPathDict,(error:string,stdout:string,stderr:string)=>{
159-
letresult={'passed':false,'stdout':"",'stderr':''};
160-
error ?result.passed=false :result.passed=true;
167+
exec(cmd,fsPathDict,(error:NodeJS.ErrnoException,stdout:string,stderr:string)=>{
168+
letresult={'passed':false,'stdout':"",'stderr':"",'exitcode':""};
169+
if(error){
170+
result.passed=false;
171+
if(error.code){
172+
result.exitcode=error.code;
173+
console.log("exitcode: "+result.exitcode);
174+
}
175+
}else{
176+
result.passed=true;
177+
result.exitcode='0';
178+
}
179+
161180
result.stdout=stdout;
162181
result.stderr=stderr;
163182
resolve(result);

‎src/testTree.ts‎

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import * as vscode from 'vscode';
22
import{TextDecoder}from'util';
33
import{parseTestsFile}from'./parser';
44
import{join}from'path';
5-
import{execShellCommand,getCwdUri,getExecutableFilename,writeLocalFile}from'./driverUtils';
5+
import{execShellCommand,getCwdUri,getExecutableFilename,
6+
getTimeoutTime,getValgrindTimeoutTime,writeLocalFile}from'./driverUtils';
67
import{existsSync,unlinkSync}from'fs';
78

89
consttextDecoder=newTextDecoder('utf-8');
@@ -119,16 +120,28 @@ export class TestCase {
119120
letwsFolderUri=vscode.workspace.workspaceFolders[0].uri.fsPath;
120121
letexecPath=join(wsFolderUri,getExecutableFilename());
121122

122-
letresult=awaitexecShellCommand(execPath+' '+this.name);
123+
lettimeouttime=getTimeoutTime().toString();
124+
letvalgrindtimeouttime=getValgrindTimeoutTime().toString();
125+
letresult=awaitexecShellCommand('timeout --preserve-status '+timeouttime+' '+execPath+' '+this.name);
123126
constduration=Date.now()-start;
124127
if(!result.passed){
125-
letmessage=newvscode.TestMessage("stdout: "+result.stdout+"\n stderr: "+result.stderr);
128+
letmessage=newvscode.TestMessage("");
129+
if(result.exitcode===143){
130+
message=newvscode.TestMessage("stdout: "+result.stdout+"\n stderr: code timed out (>"+timeouttime+"s to run) while running test");
131+
}else{
132+
message=newvscode.TestMessage("stdout: "+result.stdout+"\n stderr: "+result.stderr);
133+
}
126134
message.location=newvscode.Location(item.uri!,item.range!);
127135
options.failed(item,message,duration);
128136
}else{
129-
letvalgrindResult=awaitexecShellCommand('valgrind --leak-check=full --show-leak-kinds=all --error-exitcode=1 '+execPath+' '+this.name);
130-
if(!valgrindResult.passed){
131-
letmessage=newvscode.TestMessage("stdout: "+valgrindResult.stdout+"\n stderr: "+valgrindResult.stderr);
137+
letvalgrindResult=awaitexecShellCommand('timeout --preserve-status '+valgrindtimeouttime+' valgrind --leak-check=full --show-leak-kinds=all --error-exitcode=1 '+execPath+' '+this.name);
138+
if(!valgrindResult.passed){
139+
letmessage=newvscode.TestMessage("");
140+
if(valgrindResult.exitcode===143){
141+
message=newvscode.TestMessage("stdout: "+valgrindResult.stdout+"\n stderr: valgrind timed out (>"+valgrindtimeouttime+"s to run while running test");
142+
}else{
143+
message=newvscode.TestMessage("stdout: "+valgrindResult.stdout+"\n stderr: "+valgrindResult.stderr);
144+
}
132145
message.location=newvscode.Location(item.uri!,item.range!);
133146
options.failed(item,message,duration);
134147
}else{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp