diff --git a/package.json b/package.json index 14172d27e..e39cd1992 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "gh-pages": "^0.12.0", "highlightjs": "^9.8.0", "htmlparser2": "3.9.2", - "jsdom": "^9.11.0", "json": "^9.0.4", "lodash.defaultsdeep": "4.6.0", "minilog": "3.1.0", diff --git a/src/playground/playground.js b/src/playground/playground.js index ca48677a5..b17f3ccca 100644 --- a/src/playground/playground.js +++ b/src/playground/playground.js @@ -88,11 +88,6 @@ window.onload = function () { }); Scratch.workspace = workspace; - // Filter available blocks - var toolbox = vm.filterToolbox(workspace.options.languageTree); - // var toolbox = workspace.options.languageTree; - workspace.updateToolbox(toolbox); - // Attach scratch-blocks events to VM. workspace.addChangeListener(vm.blockListener); var flyoutWorkspace = workspace.getFlyout().getWorkspace(); diff --git a/src/util/filter-toolbox.js b/src/util/filter-toolbox.js deleted file mode 100644 index 54d59ced8..000000000 --- a/src/util/filter-toolbox.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Filter Blockly toolbox XML node containing blocks to only those with - * valid opcodes. Return a copy of the node with valid blocks. - * @param {HTMLElement} node Blockly toolbox XML node - * @param {Array.<string>} opcodes Valid opcodes. Blocks producing other opcodes - * will be filtered. - * @returns {HTMLElement} filtered toolbox XML node - */ -var filterToolboxNode = function (node, opcodes) { - var filteredCategory = node.cloneNode(); - for (var block = node.firstElementChild; block; block = block.nextElementSibling) { - if (block.nodeName.toLowerCase() !== 'block') continue; - var opcode = block.getAttribute('type').toLowerCase(); - if (opcodes.indexOf(opcode) !== -1) { - filteredCategory.appendChild(block.cloneNode(true)); - } - } - return filteredCategory; -}; - -/** - * Filter Blockly toolbox XML and return a copy which only contains blocks with - * existent opcodes. Categories with no valid children will be removed. - * @param {HTMLElement} toolbox Blockly toolbox XML node - * @param {Array.<string>} opcodes Valid opcodes. Blocks producing other opcodes - * will be filtered. - * @returns {HTMLElement} filtered toolbox XML node - */ -var filterToolbox = function (toolbox, opcodes) { - if (!toolbox.hasChildNodes()) return toolbox; - var filteredToolbox; - if (toolbox.firstElementChild.nodeName.toLowerCase() === 'category') { - filteredToolbox = toolbox.cloneNode(); - for ( - var category = toolbox.firstElementChild; - category; - category = category.nextElementSibling - ) { - if (category.nodeName.toLowerCase() !== 'category') continue; - var filteredCategory = filterToolboxNode(category, opcodes); - if (filteredCategory.hasChildNodes() || - filteredCategory.hasAttribute('custom') - ) { - filteredToolbox.appendChild(filteredCategory); - } - } - } else { - filteredToolbox = filterToolboxNode(toolbox, opcodes); - } - return filteredToolbox; -}; - -module.exports = filterToolbox; diff --git a/src/virtual-machine.js b/src/virtual-machine.js index 9c6ee0b54..4b3ae8cd7 100644 --- a/src/virtual-machine.js +++ b/src/virtual-machine.js @@ -1,7 +1,6 @@ var EventEmitter = require('events'); var util = require('util'); -var filterToolbox = require('./util/filter-toolbox'); var log = require('./util/log'); var Runtime = require('./engine/runtime'); var ScratchStorage = require('scratch-storage'); @@ -400,17 +399,4 @@ VirtualMachine.prototype.postSpriteInfo = function (data) { this.editingTarget.postSpriteInfo(data); }; - -/** - * Filter Blockly toolbox XML and return a copy which only contains blocks with - * existent opcodes. Categories with no valid children will be removed. - * @param {HTMLElement} toolbox Blockly toolbox XML node - * @returns {HTMLElement} filtered toolbox XML node - */ -VirtualMachine.prototype.filterToolbox = function (toolbox) { - var opcodes = Object.keys(this.runtime._primitives) - .concat(Object.keys(this.runtime._hats)); - return filterToolbox(toolbox, opcodes); -}; - module.exports = VirtualMachine; diff --git a/test/fixtures/.eslintrc.js b/test/fixtures/.eslintrc.js deleted file mode 100644 index 8df47e667..000000000 --- a/test/fixtures/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - 'max-len': [0] - } -}; diff --git a/test/fixtures/toolboxes.js b/test/fixtures/toolboxes.js deleted file mode 100644 index 5f74c89df..000000000 --- a/test/fixtures/toolboxes.js +++ /dev/null @@ -1,840 +0,0 @@ -var jsdom = require('jsdom').jsdom; -var categories = '<xml id="toolbox-categories" style="display: none">' + - '<category name="Motion" colour="#4C97FF" secondaryColour="#3373CC">' + - '<block type="motion_movesteps">' + - '<value name="STEPS">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_turnright">' + - '<value name="DEGREES">' + - '<shadow type="math_number">' + - '<field name="NUM">15</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_turnleft">' + - '<value name="DEGREES">' + - '<shadow type="math_number">' + - '<field name="NUM">15</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_pointindirection">' + - '<value name="DIRECTION">' + - '<shadow type="math_angle">' + - '<field name="NUM">90</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_pointtowards">' + - '<value name="TOWARDS">' + - '<shadow type="motion_pointtowards_menu">' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_gotoxy">' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_goto">' + - '<value name="TO">' + - '<shadow type="motion_goto_menu">' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_glidesecstoxy">' + - '<value name="SECS">' + - '<shadow type="math_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_changexby">' + - '<value name="DX">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_setx">' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_changeyby">' + - '<value name="DY">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_sety">' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_ifonedgebounce"></block>' + - '<block type="motion_setrotationstyle">' + - '<value name="STYLE">' + - '<shadow type="motion_setrotationstyle_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="motion_xposition"></block>' + - '<block type="motion_yposition"></block>' + - '<block type="motion_direction"></block>' + - '</category>' + - '<category name="Looks" colour="#9966FF" secondaryColour="#774DCB">' + - '<block type="looks_sayforsecs">' + - '<value name="MESSAGE">' + - '<shadow type="text">' + - '<field name="TEXT">Hello!</field>' + - '</shadow>' + - '</value>' + - '<value name="SECS">' + - '<shadow type="math_number">' + - '<field name="NUM">2</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_say">' + - '<value name="MESSAGE">' + - '<shadow type="text">' + - '<field name="TEXT">Hello!</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_thinkforsecs">' + - '<value name="MESSAGE">' + - '<shadow type="text">' + - '<field name="TEXT">Hmm...</field>' + - '</shadow>' + - '</value>' + - '<value name="SECS">' + - '<shadow type="math_number">' + - '<field name="NUM">2</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_think">' + - '<value name="MESSAGE">' + - '<shadow type="text">' + - '<field name="TEXT">Hmm...</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_show"></block>' + - '<block type="looks_hide"></block>' + - '<block type="looks_switchcostumeto">' + - '<value name="COSTUME">' + - '<shadow type="looks_costume"></shadow>' + - '</value>' + - '</block>' + - '<block type="looks_nextcostume"></block>' + - '<block type="looks_nextbackdrop"></block>' + - '<block type="looks_switchbackdropto">' + - '<value name="BACKDROP">' + - '<shadow type="looks_backdrops"></shadow>' + - '</value>' + - '</block>' + - '<block type="looks_switchbackdroptoandwait">' + - '<value name="BACKDROP">' + - '<shadow type="looks_backdrops"></shadow>' + - '</value>' + - '</block>' + - '<block type="looks_changeeffectby">' + - '<value name="EFFECT">' + - '<shadow type="looks_effectmenu"></shadow>' + - '</value>' + - '<value name="CHANGE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_seteffectto">' + - '<value name="EFFECT">' + - '<shadow type="looks_effectmenu"></shadow>' + - '</value>' + - '<value name="VALUE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_cleargraphiceffects"></block>' + - '<block type="looks_changesizeby">' + - '<value name="CHANGE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_setsizeto">' + - '<value name="SIZE">' + - '<shadow type="math_number">' + - '<field name="NUM">100</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_gotofront"></block>' + - '<block type="looks_gobacklayers">' + - '<value name="NUM">' + - '<shadow type="math_integer">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="looks_costumeorder"></block>' + - '<block type="looks_backdroporder"></block>' + - '<block type="looks_backdropname"></block>' + - '<block type="looks_size"></block>' + - '</category>' + - '<category name="Sound" colour="#D65CD6" secondaryColour="#BD42BD">' + - '<block type="sound_play">' + - '<value name="SOUND_MENU">' + - '<shadow type="sound_sounds_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sound_playuntildone">' + - '<value name="SOUND_MENU">' + - '<shadow type="sound_sounds_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sound_stopallsounds"></block>' + - '<block type="sound_playdrumforbeats">' + - '<value name="DRUM">' + - '<shadow type="sound_drums_menu"></shadow>' + - '</value>' + - '<value name="BEATS">' + - '<shadow type="math_number">' + - '<field name="NUM">0.25</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_restforbeats">' + - '<value name="BEATS">' + - '<shadow type="math_number">' + - '<field name="NUM">0.25</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_playnoteforbeats">' + - '<value name="NOTE">' + - '<shadow type="math_number">' + - '<field name="NUM">60</field>' + - '</shadow>' + - '</value>' + - '<value name="BEATS">' + - '<shadow type="math_number">' + - '<field name="NUM">0.5</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_setinstrumentto">' + - '<value name="INSTRUMENT">' + - '<shadow type="sound_instruments_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sound_seteffectto">' + - '<value name="EFFECT">' + - '<shadow type="sound_effects_menu"></shadow>' + - '</value>' + - '<value name="VALUE">' + - '<shadow type="math_number">' + - '<field name="NUM">100</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_changeeffectby">' + - '<value name="EFFECT">' + - '<shadow type="sound_effects_menu"></shadow>' + - '</value>' + - '<value name="VALUE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_cleareffects"></block>' + - '<block type="sound_changevolumeby">' + - '<value name="VOLUME">' + - '<shadow type="math_number">' + - '<field name="NUM">-10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_setvolumeto">' + - '<value name="VOLUME">' + - '<shadow type="math_number">' + - '<field name="NUM">100</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_volume"></block>' + - '<block type="sound_changetempoby">' + - '<value name="TEMPO">' + - '<shadow type="math_number">' + - '<field name="NUM">20</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_settempotobpm">' + - '<value name="TEMPO">' + - '<shadow type="math_number">' + - '<field name="NUM">60</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sound_tempo"></block>' + - '</category>' + - '<category name="Pen" colour="#00B295" secondaryColour="#0B8E69">' + - '<block type="pen_clear"></block>' + - '<block type="pen_stamp"></block>' + - '<block type="pen_pendown"></block>' + - '<block type="pen_penup"></block>' + - '<block type="pen_setpencolortocolor">' + - '<value name="COLOR">' + - '<shadow type="colour_picker">' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_changepencolorby">' + - '<value name="COLOR">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_setpencolortonum">' + - '<value name="COLOR">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_changepenshadeby">' + - '<value name="SHADE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_setpenshadeto">' + - '<value name="SHADE">' + - '<shadow type="math_number">' + - '<field name="NUM">50</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_changepensizeby">' + - '<value name="SIZE">' + - '<shadow type="math_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="pen_setpensizeto">' + - '<value name="SIZE">' + - '<shadow type="math_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '</category>' + - '<category name="Data" colour="#FF8C1A" secondaryColour="#DB6E00" custom="VARIABLE">' + - '</category>' + - '<category name="Lists" colour="#FF8C1A" secondaryColour="#DB6E00">' + - '<block type="data_listcontents"></block>' + - '<block type="data_addtolist">' + - '<value name="ITEM">' + - '<shadow type="text">' + - '<field name="TEXT">thing</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_deleteoflist">' + - '<value name="INDEX">' + - '<shadow type="data_listindexall">' + - '<field name="INDEX">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_insertatlist">' + - '<value name="INDEX">' + - '<shadow type="data_listindexrandom">' + - '<field name="INDEX">1</field>' + - '</shadow>' + - '</value>' + - '<value name="ITEM">' + - '<shadow type="text">' + - '<field name="TEXT">thing</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_replaceitemoflist">' + - '<value name="INDEX">' + - '<shadow type="data_listindexrandom">' + - '<field name="INDEX">1</field>' + - '</shadow>' + - '</value>' + - '<value name="ITEM">' + - '<shadow type="text">' + - '<field name="TEXT">thing</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_itemoflist">' + - '<value name="INDEX">' + - '<shadow type="data_listindexrandom">' + - '<field name="INDEX">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_lengthoflist"></block>' + - '<block type="data_listcontainsitem">' + - '<value name="ITEM">' + - '<shadow type="text">' + - '<field name="TEXT">thing</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="data_showlist"></block>' + - '<block type="data_hidelist"></block>' + - '</category>' + - '<category name="Events" colour="#FFD500" secondaryColour="#CC9900">' + - '<block type="event_whenflagclicked"></block>' + - '<block type="event_whenkeypressed">' + - '</block>' + - '<block type="event_whenthisspriteclicked"></block>' + - '<block type="event_whenbackdropswitchesto">' + - '</block>' + - '<block type="event_whengreaterthan">' + - '<value name="VALUE">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="event_whenbroadcastreceived">' + - '</block>' + - '<block type="event_broadcast">' + - '<value name="BROADCAST_OPTION">' + - '<shadow type="event_broadcast_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="event_broadcastandwait">' + - '<value name="BROADCAST_OPTION">' + - '<shadow type="event_broadcast_menu"></shadow>' + - '</value>' + - '</block>' + - '</category>' + - '<category name="Control" colour="#FFAB19" secondaryColour="#CF8B17">' + - '<block type="control_wait">' + - '<value name="DURATION">' + - '<shadow type="math_positive_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="control_repeat">' + - '<value name="TIMES">' + - '<shadow type="math_whole_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="control_forever"></block>' + - '<block type="control_if"></block>' + - '<block type="control_if_else"></block>' + - '<block type="control_wait_until"></block>' + - '<block type="control_repeat_until"></block>' + - '<block type="control_stop"></block>' + - '<block type="control_start_as_clone"></block>' + - '<block type="control_create_clone_of">' + - '<value name="CLONE_OPTION">' + - '<shadow type="control_create_clone_of_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="control_delete_this_clone"></block>' + - '</category>' + - '<category name="Sensing" colour="#4CBFE6" secondaryColour="#2E8EB8">' + - '<block type="sensing_touchingobject">' + - '<value name="TOUCHINGOBJECTMENU">' + - '<shadow type="sensing_touchingobjectmenu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_touchingcolor">' + - '<value name="COLOR">' + - '<shadow type="colour_picker"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_coloristouchingcolor">' + - '<value name="COLOR">' + - '<shadow type="colour_picker"></shadow>' + - '</value>' + - '<value name="COLOR2">' + - '<shadow type="colour_picker"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_distanceto">' + - '<value name="DISTANCETOMENU">' + - '<shadow type="sensing_distancetomenu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_askandwait">' + - '<value name="QUESTION">' + - '<shadow type="text">' + - '<field name="TEXT">What\'s your name?</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_answer"></block>' + - '<block type="sensing_keypressed">' + - '<value name="KEY_OPTION">' + - '<shadow type="sensing_keyoptions"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_mousedown"></block>' + - '<block type="sensing_mousex"></block>' + - '<block type="sensing_mousey"></block>' + - '<block type="sensing_loudness"></block>' + - '<block type="sensing_videoon">' + - '<value name="VIDEOONMENU1">' + - '<shadow type="sensing_videoonmenuone"></shadow>' + - '</value>' + - '<value name="VIDEOONMENU2">' + - '<shadow type="sensing_videoonmenutwo"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_videotoggle">' + - '<value name="VIDEOTOGGLEMENU">' + - '<shadow type="sensing_videotogglemenu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_setvideotransparency">' + - '<value name="TRANSPARENCY">' + - '<shadow type="math_number">' + - '<field name="NUM">50</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_timer"></block>' + - '<block type="sensing_resettimer"></block>' + - '<block type="sensing_of">' + - '<value name="PROPERTY">' + - '<shadow type="sensing_of_property_menu"></shadow>' + - '</value>' + - '<value name="OBJECT">' + - '<shadow type="sensing_of_object_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_current">' + - '<value name="CURRENTMENU">' + - '<shadow type="sensing_currentmenu"></shadow>' + - '</value>' + - '</block>' + - '<block type="sensing_dayssince2000"></block>' + - '<block type="sensing_username"></block>' + - '</category>' + - '<category name="Operators" colour="#40BF4A" secondaryColour="#389438">' + - '<block type="operator_add">' + - '<value name="NUM1">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '<value name="NUM2">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_subtract">' + - '<value name="NUM1">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '<value name="NUM2">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_multiply">' + - '<value name="NUM1">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '<value name="NUM2">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_divide">' + - '<value name="NUM1">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '<value name="NUM2">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_random">' + - '<value name="FROM">' + - '<shadow type="math_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '<value name="TO">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_lt">' + - '<value name="OPERAND1">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '<value name="OPERAND2">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_equals">' + - '<value name="OPERAND1">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '<value name="OPERAND2">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_gt">' + - '<value name="OPERAND1">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '<value name="OPERAND2">' + - '<shadow type="text">' + - '<field name="TEXT"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_and"></block>' + - '<block type="operator_or"></block>' + - '<block type="operator_not"></block>' + - '<block type="operator_join">' + - '<value name="STRING1">' + - '<shadow type="text">' + - '<field name="TEXT">hello</field>' + - '</shadow>' + - '</value>' + - '<value name="STRING2">' + - '<shadow type="text">' + - '<field name="TEXT">world</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_letter_of">' + - '<value name="LETTER">' + - '<shadow type="math_whole_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '<value name="STRING">' + - '<shadow type="text">' + - '<field name="TEXT">world</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_length">' + - '<value name="STRING">' + - '<shadow type="text">' + - '<field name="TEXT">world</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_mod">' + - '<value name="NUM1">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '<value name="NUM2">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_round">' + - '<value name="NUM">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="operator_mathop">' + - '<value name="OPERATOR">' + - '<shadow type="operator_mathop_menu"></shadow>' + - '</value>' + - '<value name="NUM">' + - '<shadow type="math_number">' + - '<field name="NUM"></field>' + - '</shadow>' + - '</value>' + - '</block>' + - '</category>' + - '<category name="More Blocks" colour="#FF6680" secondaryColour="#FF3355" custom="PROCEDURE"></category>' + - '</xml>'; -var simple = '<xml id="toolbox-simple" style="display: none">' + - '<block type="motion_movesteps">' + - '<value name="STEPS">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_turnright">' + - '<value name="DEGREES">' + - '<shadow type="math_number">' + - '<field name="NUM">15</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_turnleft">' + - '<value name="DEGREES">' + - '<shadow type="math_number">' + - '<field name="NUM">15</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_pointindirection">' + - '<value name="DIRECTION">' + - '<shadow type="math_angle">' + - '<field name="NUM">90</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_pointtowards">' + - '<value name="TOWARDS">' + - '<shadow type="motion_pointtowards_menu">' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_gotoxy">' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_goto">' + - '<value name="TO">' + - '<shadow type="motion_goto_menu">' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_glidesecstoxy">' + - '<value name="SECS">' + - '<shadow type="math_number">' + - '<field name="NUM">1</field>' + - '</shadow>' + - '</value>' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_changexby">' + - '<value name="DX">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_setx">' + - '<value name="X">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_changeyby">' + - '<value name="DY">' + - '<shadow type="math_number">' + - '<field name="NUM">10</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_sety">' + - '<value name="Y">' + - '<shadow type="math_number">' + - '<field name="NUM">0</field>' + - '</shadow>' + - '</value>' + - '</block>' + - '<block type="motion_ifonedgebounce"></block>' + - '<block type="motion_setrotationstyle">' + - '<value name="STYLE">' + - '<shadow type="motion_setrotationstyle_menu"></shadow>' + - '</value>' + - '</block>' + - '<block type="motion_xposition"></block>' + - '<block type="motion_yposition"></block>' + - '<block type="motion_direction"></block>' + -'</xml>'; -var empty = '<xml id="toolbox-simple" style="display: none"></xml>'; -module.exports = { - categories: jsdom(categories).body.firstElementChild, - simple: jsdom(simple).body.firstElementChild, - empty: jsdom(empty).body.firstElementChild -}; diff --git a/test/unit/util_filter-toolbox.js b/test/unit/util_filter-toolbox.js deleted file mode 100644 index 9c3ea073c..000000000 --- a/test/unit/util_filter-toolbox.js +++ /dev/null @@ -1,22 +0,0 @@ -var toolboxes = require('../fixtures/toolboxes'); -var test = require('tap').test; -var filterToolbox = require('../../src/util/filter-toolbox'); - -test('categories', function (t) { - var filteredToolbox = filterToolbox(toolboxes.categories, ['motion_movesteps']); - t.strictEqual(filteredToolbox.children.length, 3); - t.strictEqual(filteredToolbox.firstElementChild.children.length, 1); - t.end(); -}); - -test('simple', function (t) { - var filteredToolbox = filterToolbox(toolboxes.simple, ['motion_movesteps']); - t.strictEqual(filteredToolbox.children.length, 1); - t.end(); -}); - -test('empty', function (t) { - var filteredToolbox = filterToolbox(toolboxes.empty, ['motion_movesteps']); - t.strictEqual(filteredToolbox.children.length, 0); - t.end(); -});