From 8c3f351ab616a7a3ab88e451f7a7f0ae01a708cc Mon Sep 17 00:00:00 2001 From: toby Date: Wed, 1 Mar 2017 21:14:14 -0500 Subject: [PATCH 1/4] Add Jump and Conditional Jump tests --- test/tests/operations/FlowControl.js | 180 ++++++++++++++++++++++++++- 1 file changed, 179 insertions(+), 1 deletion(-) diff --git a/test/tests/operations/FlowControl.js b/test/tests/operations/FlowControl.js index 59c7f965..45399c21 100644 --- a/test/tests/operations/FlowControl.js +++ b/test/tests/operations/FlowControl.js @@ -64,6 +64,107 @@ TestRegister.addTests([ {"op":"To Base64", "args":["A-Za-z0-9+/="]} ] }, + { + name: "Jump: skips 0", + input: [ + "should be changed", + ].join("\n"), + expectedOutput: [ + "should be changed was changed", + ].join("\n"), + recipeConfig: [ + { + op: "Jump", + args: [0, 10], + }, + { + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "should be changed" + }, + "should be changed was changed", + true, + true, + true, + ], + }, + ], + }, + { + name: "Jump: skips 1", + input: [ + "shouldnt be changed", + ].join("\n"), + expectedOutput: [ + "shouldnt be changed", + ].join("\n"), + recipeConfig: [ + { + op: "Jump", + args: [1, 10], + }, + { + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "shouldnt be changed" + }, + "shouldnt be changed was changed", + true, + true, + true, + ], + }, + ], + }, + { + name: "Jump: skips negatively", + input: [ + "should be changed", + ].join("\n"), + expectedOutput: [ + "should be changed was changed", + ].join("\n"), + recipeConfig: [ + { + op: "Jump", + args: [2, 10], + }, + { + // Initially bypassed, until Jump(-3,_) + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "should be changed" + }, + "should be changed was changed", + true, + true, + true, + ], + }, + { + // Initially bypassed + op: "Jump", + args: [1, 10], + }, + { + op: "Jump", + // -1 skips itself + // -2 skips the one before + // -3 skips the one before that + args: [-3, 10], + }, + { + op: "Wait", + args: [1], + }, + ], + }, { name: "Conditional Jump: Skips 0", input: [ @@ -79,7 +180,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "Conditional Jump", - args: ["match", 0, 0], + args: ["match", 0, 10], }, { op: "Find / Replace", @@ -109,4 +210,81 @@ TestRegister.addTests([ }, ], }, + { + name: "Conditional Jump: Skips 1", + input: [ + "match", + "should not be changed", + "should be changed", + ].join("\n"), + expectedOutput: [ + "match", + "should not be changed", + "should be changed was changed" + ].join("\n"), + recipeConfig: [ + { + op: "Conditional Jump", + args: ["match", 1, 10], + }, + { + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "should not be changed" + }, + "should not be changed was changed", + true, + true, + true, + ], + }, + { + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "should be changed" + }, + "should be changed was changed", + true, + true, + true, + ], + }, + ], + }, + { + name: "Conditional Jump: Skips negatively", + input: [ + "match", + ].join("\n"), + expectedOutput: [ + "replaced", + ].join("\n"), + recipeConfig: [ + { + op: "Jump", + args: [1], + }, + { + op: "Find / Replace", + args: [ + { + "option": "Regex", + "string": "match" + }, + "replaced", + true, + true, + true, + ], + }, + { + op: "Conditional Jump", + args: ["match", -2, 10], + }, + ], + }, ]); From 8d4876a055dfa8cd3b2a74fb409248d78e2cbe28 Mon Sep 17 00:00:00 2001 From: toby Date: Sat, 4 Mar 2017 11:04:17 -0500 Subject: [PATCH 2/4] Fix Return operation --- src/js/core/FlowControl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/core/FlowControl.js b/src/js/core/FlowControl.js index 9d4b9af5..6241c3e4 100755 --- a/src/js/core/FlowControl.js +++ b/src/js/core/FlowControl.js @@ -201,7 +201,7 @@ var FlowControl = { * @returns {Object} The updated state of the recipe. */ runReturn: function(state) { - state.progress = state.opList.length; + state.progress = state.opList.length - 1; return state; }, From 7f0ce0da8d2a2c9623e966f12a26d2d06a8ef558 Mon Sep 17 00:00:00 2001 From: toby Date: Sat, 4 Mar 2017 11:05:05 -0500 Subject: [PATCH 3/4] Fix typo in "Fork, Cond Jump, Encodings" test --- test/tests/operations/FlowControl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/operations/FlowControl.js b/test/tests/operations/FlowControl.js index 45399c21..1531bbf1 100644 --- a/test/tests/operations/FlowControl.js +++ b/test/tests/operations/FlowControl.js @@ -54,7 +54,7 @@ TestRegister.addTests([ }, { name: "Fork, Conditional Jump, Encodings", - input: "Some data with a 1 in it\nSome data with a 2 in it", + input: "Some data with a 1 in it\nSome data with a 2 in it\n", expectedOutput: "U29tZSBkYXRhIHdpdGggYSAxIGluIGl0\n53 6f 6d 65 20 64 61 74 61 20 77 69 74 68 20 61 20 32 20 69 6e 20 69 74\n", recipeConfig: [ {"op":"Fork", "args":["\\n", "\\n", false]}, From 824c3935d9cf66540d4bb1c2c604bd0846c014fc Mon Sep 17 00:00:00 2001 From: n1474335 Date: Mon, 6 Mar 2017 13:17:58 +0000 Subject: [PATCH 4/4] Introduced more defensive checking for the end of a recipe. --- src/js/core/Recipe.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/js/core/Recipe.js b/src/js/core/Recipe.js index 5a8cadf3..a17b1b60 100755 --- a/src/js/core/Recipe.js +++ b/src/js/core/Recipe.js @@ -159,8 +159,7 @@ Recipe.prototype.execute = function(dish, currentStep, state) { return e; }; - // Operations can be asynchronous so we have to return a Promise to a - // future value. + // Operations can be asynchronous so we have to return a Promise to a future value. return new Promise(function(resolve, reject) { // Helper function to clean up recursing to the next recipe step. // It is a closure to avoid having to pass in resolve and reject. @@ -180,7 +179,7 @@ Recipe.prototype.execute = function(dish, currentStep, state) { currentStep = currentStep || 0; - if (currentStep === recipe.opList.length) { + if (currentStep >= recipe.opList.length) { resolve(currentStep); return; }