UNPKG

automatic-assessments

Version:

Automatic assessment of Marty and Scratch 3.0 projects

65 lines (64 loc) 2.74 kB
"use strict"; 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;