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

Commit fbfbc8f

Browse files
committed
Add testcase results to the UI.
1 parent 08c2770 commit fbfbc8f

File tree

6 files changed

+134
-4
lines changed

6 files changed

+134
-4
lines changed

‎src/ui/directory-manager.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ const fs = require('fs');
44
global.dirDict = null;
55
global.languages = null;
66
global.problemNames = null;
7+
global.resultsSchemaJson = null;
78

89
global.problemBuildsDir = null;
910

1011
LANGUAGES_DIR_NAME = "languages";
1112
PROBLEMS_DIR_NAME = "problems";
13+
RESULTS_VALIDATION_SCHEMA_FILENAME = "results_validation_schema.json";
1214

1315
function getPathsFile() {
1416
return path.resolve("filePaths.tmp")
@@ -93,9 +95,29 @@ function calculateDirectories() {
9395
["user-solution-filename"] = userSolutionFilename;
9496
});
9597

98+
const resultsSchemaFilename =
99+
path.join(problemBuildsDir, RESULTS_VALIDATION_SCHEMA_FILENAME);
100+
101+
if (!fs.existsSync(resultsSchemaFilename)) {
102+
throw new Error(`Results validation schema file
103+
does not exist:
104+
${resultsSchemaFilename}`);
105+
}
106+
107+
resultsSchema = fs.readFileSync(resultsSchemaFilename, 'utf8');
108+
109+
110+
const resultsSchemaJson = JSON.parse(resultsSchema);
111+
112+
if (!resultsSchemaJson) {
113+
throw new Error(`Could not parse results validation schema from
114+
${resultsSchema}`);
115+
}
116+
96117
global.dirDict = localDirDict;
97118
global.languages = languages;
98119
global.problemNames = problemNames;
120+
global.resultsSchemaJson = resultsSchemaJson;
99121
}
100122

101123
class DirectoryManager {
@@ -123,6 +145,10 @@ class DirectoryManager {
123145
getProblemNames() {
124146
return [...global.problemNames];
125147
}
148+
149+
getResultsSchemaJson() {
150+
return global.resultsSchemaJson;
151+
}
126152
}
127153

128154
module.exports = {

‎src/ui/index.html

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,60 @@
5353
<div class="tab-separator"></div>
5454
<div class="tab">Compilation</div>
5555
</div>
56-
<div id="tab-testcase" class="tab-content content active">
56+
<div id="tab-testcase" class="tab-content bottom-right-content content active">
5757
<div class="testcase-content" id="testcase-content tab-content content">
5858
</div>
5959
</div>
60-
<div id="tab-test-results" class="tab-test-results tab-content content">
61-
<div class="test-results-content" id="test-results-content"></div>
60+
<div id="tab-test-results" class="tab-test-results tab-content tab-bottom-right content">
61+
<div class=" bottom-right-content" id="test-results-content">
62+
<p>Duration: 21 ms</p>
63+
<p>Status: Ok</p>
64+
<p>Testcase Name: All</p>
65+
<hr>
66+
67+
<p>Testcase Name: All</p>
68+
<p>Status: Success</p>
69+
<hr>
70+
71+
<p>Testcase Name: All</p>
72+
<p>Status: Success</p>
73+
<hr>
74+
75+
<p>Testcase Name: All</p>
76+
<p>Status: Success</p>
77+
<hr>
78+
79+
<p>Testcase Name: All</p>
80+
<p>Status: Success</p>
81+
<hr>
82+
83+
<p>Testcase Name: All</p>
84+
<p>Status: Success</p>
85+
<hr>
86+
87+
<p>Testcase Name: All</p>
88+
<p>Status: Success</p>
89+
<hr>
90+
91+
<p>Testcase Name: All</p>
92+
<p>Status: Success</p>
93+
<hr>
94+
95+
<p>Testcase Name: All</p>
96+
<p>Status: Success</p>
97+
<hr>
98+
99+
<p>Testcase Name: All</p>
100+
<p>Status: Success</p>
101+
<hr>
102+
103+
<p>Testcase Name: All</p>
104+
<p>Status: Success</p>
105+
<hr>
106+
</div>
62107
</div>
63108
<div id="tab-compilation" class="tab-compilation compilation-panel tab-content content active">
64-
<pre class="compilation-content" id="compilation-content">ads asasd as das as</pre>
109+
<pre class="compilation-content bottom-right-content content" id="compilation-content">ads asasd as das as</pre>
65110
</div>
66111
</div>
67112
<!-- Right Panel BOTTOM END -->

‎src/ui/index.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const Split = require('split.js')
55
const { ipcRenderer } = require('electron');
66
const { exec } = require('child_process');
77
const DirectoryManager = require('./directory-manager.js');
8+
const { Validator } = require('jsonschema');
89

910
const amdRequire = amdLoader.require;
1011
const amdDefine = amdLoader.require.define;
@@ -54,6 +55,46 @@ function parseBuildError(stdout) {
5455
return buildError;
5556
}
5657

58+
function validateResults(results) {
59+
try {
60+
const schema = directoryManager.getResultsSchemaJson();
61+
const v = new Validator();
62+
const validation = v.validate(results, schema);
63+
if (!validation.valid) {
64+
console.error("Validation errors:", validation.errors);
65+
return false;
66+
}
67+
} catch (e) {
68+
console.error("Error validating data:", e);
69+
return false;
70+
}
71+
72+
return true;
73+
}
74+
75+
function setTestResults(results) {
76+
if (!validateResults(results)) {
77+
return;
78+
}
79+
80+
const div = document.getElementById('test-results-content');
81+
82+
let html = `
83+
<p>Duration: ${results.duration_ms} ms</p>
84+
<p>Status: ${results.status}</p>
85+
<p>Testcase Name: ${results.testcase_name}</p>
86+
<hr>
87+
`;
88+
89+
html += results.tests.map(test => `
90+
<p>Testcase Name: ${test.testcase_name}</p>
91+
<p>Status: ${test.status}</p>
92+
<hr>
93+
`).join('');
94+
95+
div.innerHTML = html;
96+
}
97+
5798
function run() {
5899
saveSolution('cpp', editor.getValue());
59100
const pathsFile = DirectoryManager.getPathsFile();
@@ -95,6 +136,7 @@ function run() {
95136
const results = file.readFileSync(resultsFilename, 'utf8');
96137
console.log(results);
97138
const resultsJson = JSON.parse(results);
139+
setTestResults(resultsJson);
98140
});
99141
}
100142

‎src/ui/package-lock.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"start": "electron . -- --problem_builds_dir=../../problem_builds"
1111
},
1212
"dependencies": {
13+
"jsonschema": "^1.4.1",
1314
"marked": "^12.0.0",
1415
"monaco-editor": "^0.46.0",
1516
"split.js": "^1.6.5"

‎src/ui/styles.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ select:hover {
9797
background-color: var(--content-background);
9898
color: var(--content-font-color);
9999
font-family: var(--content-font-family);
100+
overflow-y: auto;
101+
overflow-x: clip;
102+
}
103+
104+
.bottom-right-content {
105+
height: 300px;
106+
overflow-y: auto;
100107
}
101108

102109
.tab-content-left {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /