From e9773be499605a4bb08a67aba16bddcb00f24a1f Mon Sep 17 00:00:00 2001 From: alschmiedt Date: Tue, 27 Nov 2018 09:32:48 -0800 Subject: [PATCH] Adds tests for a nested loop and disabled block --- tests/jsunit/generator_test.js | 94 ++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/tests/jsunit/generator_test.js b/tests/jsunit/generator_test.js index 06a137fe1..9addeaa35 100644 --- a/tests/jsunit/generator_test.js +++ b/tests/jsunit/generator_test.js @@ -45,6 +45,17 @@ function defineGeneratorTestBlocks() { ], "output": null, "nextStatement": null + }, + { + "type": "controls_repeat_ext", + "message0": "Repeat Loop", + "message1": "%1", + "args1": [{ + "type": "input_statement", + "name": "DO" + }], + "previousStatement": null, + "nextStatement": null }]); } @@ -63,16 +74,45 @@ function generatorTest_tearDown() { workspace.dispose(); } -function blockToCodeTest(generator, opt_thisOnly) { - var row_block = workspace.newBlock("row_block"); - var stack_block = workspace.newBlock("stack_block"); +function blockToCodeTestSetup(generator) { + var row_block = workspace.newBlock('row_block'); + var stack_block = workspace.newBlock('stack_block'); - generator.row_block = (block) => {return "row_block"}; - generator.stack_block = (block) => {return "stack_block"}; + generator.row_block = function(block){return 'row_block'}; + generator.stack_block = function(block){return 'stack_block'}; row_block.nextConnection.connect(stack_block.previousConnection); + return row_block; +} + +function blockToCodeTest(generator, opt_thisOnly) { + var row_block = blockToCodeTestSetup(generator); return generator.blockToCode(row_block, opt_thisOnly); } +function disabledBlockTest(generator, opt_thisOnly) { + var row_block = blockToCodeTestSetup(generator); + row_block.disabled=true; + return generator.blockToCode(row_block, opt_thisOnly); +} + +function nestedLoopTest(generator, opt_thisOnly) { + Blockly.Msg['CONTROLS_REPEAT_TITLE'] = 'repeat %1 times'; + var blockA = workspace.newBlock('controls_repeat_ext'); + var blockB = workspace.newBlock('controls_repeat_ext'); + var blockC = workspace.newBlock('controls_repeat_ext'); + generator.controls_repeat_ext = getControlRepeatFunc(generator); + + blockA.getInput('DO').connection.connect(blockB.previousConnection); + blockA.nextConnection.connect(blockC.previousConnection); + return generator.blockToCode(blockA, opt_thisOnly); +} + +function getControlRepeatFunc(generator) { + return function(block){ + return '{' + generator.statementToCode(block, 'DO') + '}'; + }; +} + function test_blockToCodeOnAllGeneartors() { generatorTest_setUp(); @@ -94,6 +134,50 @@ function test_blockToCodeOnAllGeneartors() { generatorTest_tearDown(); } +function test_disabledBlockToCode() { + generatorTest_setUp(); + + assertEquals(disabledBlockTest(Blockly.Dart, true), ''); + assertEquals(disabledBlockTest(Blockly.Dart, false), 'stack_block'); + + assertEquals(disabledBlockTest(Blockly.JavaScript, true), ''); + assertEquals(disabledBlockTest(Blockly.JavaScript, false), 'stack_block'); + + assertEquals(disabledBlockTest(Blockly.Lua, true), ''); + assertEquals(disabledBlockTest(Blockly.Lua, false), 'stack_block'); + + assertEquals(disabledBlockTest(Blockly.PHP, true), ''); + assertEquals(disabledBlockTest(Blockly.PHP, false), 'stack_block'); + + assertEquals(disabledBlockTest(Blockly.Python, true), ''); + assertEquals(disabledBlockTest(Blockly.Python, false), 'stack_block'); + + generatorTest_tearDown(); +} + +// { {}} represents a nested block +//{ {}}{} represents a nested block with a block after it +function test_nestedLoopBlockToCode() { + generatorTest_setUp(); + + assertEquals(nestedLoopTest(Blockly.Dart, true), '{ {}}'); + assertEquals(nestedLoopTest(Blockly.Dart, false), '{ {}}{}'); + + assertEquals(nestedLoopTest(Blockly.JavaScript, true), '{ {}}'); + assertEquals(nestedLoopTest(Blockly.JavaScript, false), '{ {}}{}'); + + assertEquals(nestedLoopTest(Blockly.Lua, true), '{ {}}'); + assertEquals(nestedLoopTest(Blockly.Lua, false), '{ {}}{}'); + + assertEquals(nestedLoopTest(Blockly.PHP, true), '{ {}}'); + assertEquals(nestedLoopTest(Blockly.PHP, false), '{ {}}{}'); + + assertEquals(nestedLoopTest(Blockly.Python, true), '{ {}}'); + assertEquals(nestedLoopTest(Blockly.Python, false), '{ {}}{}'); + + generatorTest_tearDown(); +} + function test_prefix() { var generator = new Blockly.Generator('INTERCAL'); assertEquals('Prefix nothing.', '', generator.prefixLines('', ''));