123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import StringDiff from "./../../util/string_diff";
- export class OutputAssessmentResult {
- // Status code - it is not grade related!
- // 0 - Succesful execution
- // 1 - failed execution
- static get DETAIL_TEMPLATE () {
- return ` <div>
- </div>
- `;
- }
- static get OUTPUT_TEMPLATE () {
- return `<td class=":class-expected:">$0</td>
- <td class=":class-generated:">$1</td>
- <td class=":class-result:">$2</td>`;
- }
- constructor (status, result, store, time, error_msg = '') {
- this.status = status;
- this.results = result;
- this.store = store;
- this.time = time;
- this.error_msg = error_msg;
- }
- get grade () {
- return this.results.reduce((prev, val) => prev + val.grade, 0) / this.results.length;
- }
- prepareResults () {
-
- }
- generateOutput (output) {
- }
- formatNumber (result) {
- let template = this.formatOutput('assessment-number-expected',
- 'assessment-number-generated', 'assessment-number-result', result);
- return template
- }
- formatBool (result) {
- let template = this.formatOutput('assessment-bool-expected',
- 'assessment-bool-generated', 'assessment-bool-result', result);
- return template
- }
- formatOutput (expected_class, generated_class, result_class, result) {
- let template = OutputAssessmentResult.OUTPUT_TEMPLATE;
- template = template.replace(":class-expected:", expected_class);
- template = template.replace(":class-generated:", generated_class);
- template = template.replace(":class-result:", result_class);
- template = template.replace("$0", result.expected);
- template = template.replace("$1", result.generated);
- const final_result = result.grade == 1 ? "✓" : "✗"
- template = template.replace("$2", final_result);
- return template
- }
- formatString (result) {
- const expected_class = 'assessment-string-expected';
- const generated_class = 'assessment-string-generated';
- const result_class = 'assessment-string-result';
- let template = OutputAssessmentResult.OUTPUT_TEMPLATE;
- template = template.replace(":class-expected:", expected_class);
- template = template.replace(":class-generated:", generated_class);
- template = template.replace(":class-result:", result_class);
- const g_string = result.generated || "";
- const e_string = result.expected || "";
- template = template.replace("$0", result.expected);
- template = template.replace("$1", result.generated);
- if(result.grade == 1) {
- template = template.replace("$2", "✓");
- } else {
- const diff = StringDiff(g_string, e_string);
- const diff_vec = diff.map(part => this.getDiffStringStyle(part[1], part[0]), this);
- const diff_string = diff_vec.reduce((prev, actual) => prev + actual, "");
- template = template.replace("$2", diff_string);
- }
- return template;
- }
- getDiffStringStyle (text, action) {
- const template = "<span class='$0'>$1</span>"
- switch(action) {
- case StringDiff.INSERT:
- return template.replace("$0", "stringdiff-insert").replace("$1", text);
- case StringDiff.DELETE:
- return template.replace("$0", "stringdiff-delete").replace("$1", text);
- case StringDiff.EQUAL:
- return template.replace("$0", "stringdiff-equal").replace("$1", text);
- }
- }
- }
|