automatic-assessments
Version:
Automatic assessment of Marty and Scratch 3.0 projects
56 lines (55 loc) • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFINITION_OF_BLOCK_OPCODE = exports.CLONE_OPCODE = void 0;
const Analyzer_1 = require("../Analyzer");
exports.CLONE_OPCODE = 'control_start_as_clone';
exports.DEFINITION_OF_BLOCK_OPCODE = 'procedures_definition';
class Abstraction extends Analyzer_1.default {
constructor(targets) {
super();
this.targets = targets;
this.score = 0;
}
execute() {
this.firstPointNumberOfScripts();
this.twoPointsNewBlocks();
this.threePointsClones();
return this.score;
}
firstPointNumberOfScripts() {
// 1 point for more than 1 script in the whole program
let scriptCounter = 0;
for (const target of this.targets) {
scriptCounter += target.blocks._scripts.length;
if (scriptCounter > 1) {
this.score = 1;
break;
}
}
}
twoPointsNewBlocks() {
// 2 points for at least one defined block
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
if (_block.opcode === exports.DEFINITION_OF_BLOCK_OPCODE) {
this.score = 2;
break;
}
}
}
}
threePointsClones() {
// 3 points for at least one clone
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
if (_block.opcode === exports.CLONE_OPCODE) {
this.score = 3;
break;
}
}
}
}
}
exports.default = Abstraction;