automatic-assessments
Version:
Automatic assessment of Marty and Scratch 3.0 projects
65 lines (64 loc) • 2.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NOT_LOGIC_OPERATOR_OPCODE = exports.OR_LOGIC_OPERATOR_OPCODE = exports.AND_LOGIC_OPERATOR_OPCODE = exports.IF_ELSE_BLOCK_OPCODE = exports.IF_BLOCK_OPCODE = void 0;
const Analyzer_1 = require("../Analyzer");
exports.IF_BLOCK_OPCODE = 'control_if';
exports.IF_ELSE_BLOCK_OPCODE = 'control_if_else';
exports.AND_LOGIC_OPERATOR_OPCODE = 'operator_and';
exports.OR_LOGIC_OPERATOR_OPCODE = 'operator_or';
exports.NOT_LOGIC_OPERATOR_OPCODE = 'operator_not';
class Logic extends Analyzer_1.default {
constructor(targets) {
super();
this.score = 0;
this.targets = targets;
}
execute() {
this.firstPointIfBlock();
this.twoPointsIfElseBlock();
this.threePointsLogicOperators();
return this.score;
}
firstPointIfBlock() {
// One point when an If block is used (with at least one input)
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
const blockInputsLength = Object.keys(_block.inputs).length;
if (_block.opcode === exports.IF_BLOCK_OPCODE && blockInputsLength) {
this.score = 1;
break;
}
}
}
}
twoPointsIfElseBlock() {
// Two points when an Ifelse block is used (with at least two inputs)
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
const blockInputsLength = Object.keys(_block.inputs).length;
if (_block.opcode === exports.IF_ELSE_BLOCK_OPCODE && blockInputsLength > 1) {
this.score = 2;
break;
}
}
}
}
threePointsLogicOperators() {
// Three points when at least a logic operator was used (with parent)
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.AND_LOGIC_OPERATOR_OPCODE ||
_block.opcode === exports.OR_LOGIC_OPERATOR_OPCODE ||
_block.opcode === exports.NOT_LOGIC_OPERATOR_OPCODE) &&
_block.parent) {
this.score = 3;
break;
}
}
}
}
}
exports.default = Logic;