From c169b7fbae9f50e25a3934429eeeb1c077997270 Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Tue, 28 May 2019 22:40:50 -0400 Subject: [PATCH] Update mscript tests. Increase coverage. --- app/test/mscript.test.js | 157 +++++++++++++++++++++------------------ 1 file changed, 84 insertions(+), 73 deletions(-) diff --git a/app/test/mscript.test.js b/app/test/mscript.test.js index 302c9c1..4af2275 100644 --- a/app/test/mscript.test.js +++ b/app/test/mscript.test.js @@ -11,7 +11,7 @@ describe(`mscript module`, () => { const script3 = `CF\nPF` it ('Should compile very short scripts as strings', () => { - let obj = mscript.interpret(script1) + const obj = mscript.interpret(script1) assert.ok(obj.success, `Simple script1 compiles`); assert.equal(obj.cam, 0, 'Camera gets equaled out'); assert.equal(obj.proj, 0, 'Projector gets cancelled out'); @@ -19,7 +19,7 @@ describe(`mscript module`, () => { }); it ('Should compile script with count values after command', () => { - let obj = mscript.interpret(script2) + const obj = mscript.interpret(script2) assert.ok(obj.success, `Simple script2 compiles`); assert.equal(obj.arr[0], 'CF', `First step is a camera_forward command`); assert.equal(obj.cam, 3, `Camera finished on frame 3`); @@ -29,7 +29,7 @@ describe(`mscript module`, () => { it ('Should compile with implied counts of 1', () => { - let obj = mscript.interpret(script3); + const obj = mscript.interpret(script3); assert.ok(obj.success, 'Simple script3 with implied counts compiles'); //console.log(obj); }); @@ -46,35 +46,44 @@ BF 3 BB 3`; it ('Should compile script with integers as count values', () => { - mscript.interpret(script, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 0 - && obj.proj === 0 - && obj.arr.length === 26) { - pass = true; - } - assert.ok(pass, `Script with integers cancels out count, but generates list of commands`) - }); + const obj = mscript.interpret(script) + assert.ok(obj.success, `Script with integers cancels out count, but generates list of commands`) + assert.equal(obj.cam , 0, 'Steps cancel each other out on cam'); + assert.equal(obj.proj, 0, 'Steps cancel each other out on proj'); + assert.equal(obj.arr.length, 26, 'Total of 26 steps in sequence'); }); }); -describe(`mscript - Device commands with counts`, () => { - const script = ` +describe(`mscript - Device commands`, () => { + const script1 = ` CAM 50 PROJ 50`; it ('Should compile script with device commands', () => { - mscript.interpret(script, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 50 - && obj.proj === 50 - && obj.arr.length === 100) { - pass = true; - } - assert.ok(pass, `Script generates 100 step sequence with 50 steps on each device`) - }); + const obj = mscript.interpret(script1); + assert.ok(obj.success, `Script generates 100 step sequence with 50 steps on each device`); + assert.equal(obj.cam, 50, `Camera gets to 50`); + assert.equal(obj.arr[0], 'BF', 'First step is black_forward'); + assert.equal(obj.proj, 50, `Projector gets to 50`); + assert.equal(obj.arr[50], 'PF', '51st step is projector_forward'); + assert.equal(obj.arr.length, 100, `Array is 100 steps long`); + }); + +const script2 = ` +SET CAM 0 +SET PROJ 50 + +CAM 50 +PROJ 0` + + it ('Should generate steps in correct direction', () => { + const obj = mscript.interpret(script2); + assert.ok(obj.success, `Script generates 100 step sequence with 50 steps on each device`); + assert.equal(obj.cam, 50, `Camera gets to 50`); + assert.equal(obj.arr[0], 'BF', 'First step is black_forward'); + assert.equal(obj.proj, 0, `Projector gets to 0`); + assert.equal(obj.arr[50], 'PB', '51st step is projector_backward'); + assert.equal(obj.arr.length, 100, `Array is 100 steps long`); }); }); @@ -86,15 +95,14 @@ SET PROJ 200 PB 200`; it ('Should manage state using SET commands', () => { - mscript.interpret(script, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 0 - && obj.proj === 0) { - pass = true; - } - assert.ok(pass, `Basic state test`); - }); + const obj = mscript.interpret(script) + let pass = false; + if (obj.success === true + && obj.cam === 0 + && obj.proj === 0) { + pass = true; + } + assert.ok(pass, `Basic state test`); }); }); @@ -106,16 +114,15 @@ LOOP 10 END LOOP`; it ('Should generate a looped sequence between LOOP and END LOOP statements', () => { - mscript.interpret(script1, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 30 - && obj.proj === 10 - && obj.arr.length === 40) { - pass = true; - } - assert.ok(pass, 'Basic loop'); - }); + const obj = mscript.interpret(script1) + let pass = false; + if (obj.success === true + && obj.cam === 30 + && obj.proj === 10 + && obj.arr.length === 40) { + pass = true; + } + assert.ok(pass, 'Basic loop'); }); const script2 = ` @@ -127,16 +134,15 @@ LOOP 4 END LOOP`; it ('Should generate a sequence with nested loops', () => { - mscript.interpret(script2, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 16 - && obj.proj === 16 - && obj.arr.length === 32) { - pass = true; - } - assert.ok(pass, 'Nested loop works'); - }); + const obj = mscript.interpret(script2) + let pass = false; + if (obj.success === true + && obj.cam === 16 + && obj.proj === 16 + && obj.arr.length === 32) { + pass = true; + } + assert.ok(pass, 'Nested loop works'); }); //LOOP W/ CAM and PROJ @@ -147,18 +153,17 @@ LOOP 2 END`; it ('Should generate a sequence with CAM and PROJ statements', () => { - mscript.interpret(script3, (obj) => { - let pass = false; - if (obj.success === true - && obj.cam === 8 - && obj.proj === 8 - && obj.arr.length === 16 - && obj.light.length === 16 - && obj.light[0] === '0,0,0') { - pass = true; - } - assert.ok(pass, 'Basic cam/proj loop'); - }); + const obj = mscript.interpret(script3) + let pass = false; + if (obj.success === true + && obj.cam === 8 + && obj.proj === 8 + && obj.arr.length === 16 + && obj.light.length === 16 + && obj.light[0] === '0,0,0') { + pass = true; + } + assert.ok(pass, 'Basic cam/proj loop'); }); }); @@ -166,7 +171,8 @@ describe('mscript - Light', () => { //Lighting tests const script1 = 'L 255,255,255\nCF\nPF'; - mscript.interpret(script1, (obj) => { + it ( `Should set a light value on camera steps`, () => { + const obj = mscript.interpret(script1) let pass = false; if (obj.success === true && obj.cam === 1 @@ -181,7 +187,8 @@ describe('mscript - Light', () => { }); const script2 = 'L 255,255,255\nCF\nPF\nBF'; - mscript.interpret(script2, (obj) => { + it ( `Should set light to black on black_forward`, () => { + const obj = mscript.interpret(script2) let pass = false; if (obj.success === true && obj.cam === 2 @@ -196,7 +203,8 @@ describe('mscript - Light', () => { assert.ok(pass, 'Basic black'); }); const script3 = 'LOOP 2\nL 1,1,1\nCF\nL 2,2,2\nCF\nEND'; - mscript.interpret(script3, (obj) => { + it ( `Should set light within a loop`, () => { + const obj = mscript.interpret(script3); let pass = false; if (obj.success === true && obj.cam === 4 @@ -218,7 +226,8 @@ describe('mscript - Fade', () => { CF END PF 10` - mscript.interpret(script1, (obj) => { + it ('Should generate a fade', () => { + const obj = mscript.interpret(script1) //console.dir(obj) assert.ok(obj.success, 'Basic fade compiles'); assert.equal(obj.cam, 72, `Camera moves forward 72 frames`); @@ -227,7 +236,7 @@ PF 10` assert.equal(obj.light[0], '0,0,0', 'Fade starts with starting color'); assert.equal(obj.light[71], '10,20,30', 'Fade ends with ending color'); assert.equal(obj.light[72], '', 'Frame after fade is default color'); - }); + }) const script2 = ` @@ -236,7 +245,9 @@ CF END L 225,125,10 CF 10` - mscript.interpret(script2, (obj) => { + + it ('Should generate a fade and immediately set a light value after', () => { + const obj = mscript.interpret(script2) //console.dir(obj) assert.ok(obj.success, 'Mscript labeled output success'); assert.equal(obj.cam, 34, 'There are 34 camera frames'); @@ -244,7 +255,7 @@ CF 10` assert.equal(obj.light[0], '25,255,125', 'First frame is equal to start color'); assert.equal(obj.light[23], '225,125,10', 'Last frame in fade is equal to end color'); assert.equal(obj.light[24], '225,125,10', 'First frame after fade is set using Light command'); - }); + }) }) /*describe('mscript - Variables', () => {