From 7d3221bfd34448d781e32e20cae759f90d1bde0f Mon Sep 17 00:00:00 2001 From: Rick Waldron Date: Mon, 20 Apr 2015 11:56:44 -0400 Subject: [PATCH] Test: Use Board-io to implement MockFirmata. Closes gh-735 --- lib/board.js | 5 +++ package.json | 1 + test/accelerometer.js | 15 +++++---- test/board.js | 66 +++++++++++++++++++++++++++++---------- test/button.js | 17 ++++++---- test/esc.js | 17 ++++++---- test/led.js | 25 ++++++++++++--- test/pin.js | 5 ++- test/repl.js | 16 ++++++---- test/util/mock-firmata.js | 56 +++++++++++---------------------- 10 files changed, 141 insertions(+), 82 deletions(-) diff --git a/lib/board.js b/lib/board.js index acdf1adbc..b81e6b9e6 100644 --- a/lib/board.js +++ b/lib/board.js @@ -340,6 +340,11 @@ function Board(opts) { }.bind(this)); } }, this); + + // Bubble "string" events from IO layer + this.io.on("string", function(data) { + this.emit("string", data); + }.bind(this)); } // Cache instance to allow access from module constructors diff --git a/package.json b/package.json index f874f6e54..1d56fa80f 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ }, "devDependencies": { "async": "~0.9.0", + "board-io": "latest", "copy-paste": "~0.3.0", "grunt": "~0.4.5", "grunt-cli": "~0.1.13", diff --git a/test/accelerometer.js b/test/accelerometer.js index 7ea01f42a..4a3659c6c 100644 --- a/test/accelerometer.js +++ b/test/accelerometer.js @@ -4,12 +4,15 @@ var MockFirmata = require("./util/mock-firmata"), events = require("events"), sinon = require("sinon"), Board = five.Board, - Accelerometer = five.Accelerometer, - board = new Board({ - io: new MockFirmata(), - debug: false, - repl: false - }); + Accelerometer = five.Accelerometer; + +var io = new MockFirmata(); +var board = new Board({ + io: io, + debug: false, + repl: false +}); + exports["Accelerometer -- Analog"] = { diff --git a/test/board.js b/test/board.js index 4c7f81a59..fa82a8e24 100644 --- a/test/board.js +++ b/test/board.js @@ -48,6 +48,13 @@ exports["Initialization"] = { test.expect(2); var io = new MockFirmata(); + + // Emit connection and ready BEFORE + // using the instance to initialize + // a new Board. + io.emit("connect"); + io.emit("ready"); + var board = new Board({ io: io, debug: false, @@ -139,12 +146,12 @@ exports["static"] = { test.done(); }, - "Board.Array": function(test) { + "Boards - connect, ready after": function(test) { test.expect(2); var io = new MockFirmata(); - var boards = new five.Board.Array([{ + var boards = new five.Boards([{ id: "A", repl: false, debug: false, @@ -163,6 +170,37 @@ exports["static"] = { test.done(); }); + io.emit("connect"); + io.emit("ready"); + + }, + + "Boards - connect, ready before": function(test) { + test.expect(2); + + var io = new MockFirmata(); + + io.emit("connect"); + io.emit("ready"); + + var boards = new five.Boards([{ + id: "A", + repl: false, + debug: false, + io: io + }, { + id: "B", + repl: false, + debug: false, + io: io + }]); + + test.equals(2, boards.length); + + boards.on("ready", function() { + test.ok(true); + test.done(); + }); } }; @@ -249,29 +287,25 @@ exports["Board.mount"] = { }; exports["bubbled events from io"] = { - setUp: function(done) { - this.io = new MockFirmata(); + string: function(test) { + test.expect(1); - this.board = new Board({ - io: this.io, + var io = new MockFirmata(); + var board = new Board({ + io: io, debug: false, repl: false }); - done(); - }, - string: function(test) { - test.expect(1); - - this.board.on("ready", function() { - - this.once("string", function(data) { + board.on("ready", function() { + board.on("string", function(data) { test.equal(data, 1); test.done(); }); - - this.io.emit("string", 1); + io.emit("string", 1); }); + + board.emit("ready"); } }; diff --git a/test/button.js b/test/button.js index 01d33a3ba..4bc476ae7 100644 --- a/test/button.js +++ b/test/button.js @@ -4,12 +4,17 @@ var MockFirmata = require("./util/mock-firmata"), five = require("../lib/johnny-five.js"), events = require("events"), Board = five.Board, - Button = five.Button, - board = new five.Board({ - debug: false, - repl: false, - io: new MockFirmata() - }); + Button = five.Button; + +var io = new MockFirmata(); +var board = new five.Board({ + debug: false, + repl: false, + io: io +}); + +io.emit("ready"); + exports["Button, Digital Pin"] = { setUp: function(done) { diff --git a/test/esc.js b/test/esc.js index 35b8d90ba..7c8a604f7 100644 --- a/test/esc.js +++ b/test/esc.js @@ -3,12 +3,17 @@ var MockFirmata = require("./util/mock-firmata"), events = require("events"), sinon = require("sinon"), Board = five.Board, - ESC = five.ESC, - board = new Board({ - io: new MockFirmata(), - debug: false, - repl: false - }); + ESC = five.ESC; + + +var io = new MockFirmata(); +var board = new Board({ + io: io, + debug: false, + repl: false +}); + +io.emit("ready"); exports["ESC"] = { setUp: function(done) { diff --git a/test/led.js b/test/led.js index f76dd7fa6..8fd0d5939 100644 --- a/test/led.js +++ b/test/led.js @@ -5,11 +5,16 @@ var five = require("../lib/johnny-five.js"), Led = five.Led; function newBoard() { - return new Board({ - io: new MockFirmata(), + var io = new MockFirmata(); + var board = new Board({ + io: io, debug: false, repl: false }); + + io.emit("ready"); + + return board; } exports["Led - Digital"] = { @@ -1040,7 +1045,7 @@ exports["Led.RGB"] = { test.equal(led.red.pin, 9); test.equal(led.green.pin, 10); test.equal(led.blue.pin, 11); - + // Test object constructor with array led = new Led.RGB({ pins: [9, 10, 11] @@ -1372,7 +1377,7 @@ exports["Led.RGB - Common Anode"] = { // returns this test.equal(this.ledRgb.color("#000000"), this.ledRgb); - + // Hex values this.ledRgb.color("#0000ff"); test.ok(this.analog.calledWith(redPin, 0xff)); @@ -1563,6 +1568,18 @@ exports["Led.RGB - Common Anode"] = { exports["Led - Default Pin w/ Firmata"] = { shape: function(test) { test.expect(8); + + Board.purge(); + + var io = new MockFirmata(); + var board = new Board({ + io: io, + debug: false, + repl: false + }); + + io.emit("ready"); + test.equal(new Led().pin, 13); test.equal(new Led(0).pin, 0); diff --git a/test/pin.js b/test/pin.js index 86b372077..ef7682a89 100644 --- a/test/pin.js +++ b/test/pin.js @@ -8,12 +8,15 @@ var five = require("../lib/johnny-five.js"), exports["Pin"] = { setUp: function(done) { + var io = new MockFirmata(); var board = new Board({ - io: new MockFirmata(), + io: io, debug: false, repl: false }); + io.emit("ready"); + this.digital = new Pin({ pin: 11, board: board diff --git a/test/repl.js b/test/repl.js index f12ed685f..d598a4835 100644 --- a/test/repl.js +++ b/test/repl.js @@ -1,24 +1,28 @@ -require("es6-shim"); - - var SerialPort = require("./util/mock-serial").SerialPort, MockFirmata = require("./util/mock-firmata"), five = require("../lib/johnny-five.js"), - Repl = require("../lib/repl"); + Repl = require("../lib/repl"), + Board = five.Board; exports["Repl"] = { repl: function(test) { - var board = new five.Board({ - io: new MockFirmata(), + var io = new MockFirmata(); + var board = new Board({ + io: io, debug: false }); + test.expect(2); board.on("ready", function() { + console.log("message"); test.ok(board.repl instanceof Repl); test.ok(board.repl.context); Repl.isBlocked = true; test.done(); }); + + io.emit("connect"); + io.emit("ready"); }, }; diff --git a/test/util/mock-firmata.js b/test/util/mock-firmata.js index 67b810f37..d3976acdf 100644 --- a/test/util/mock-firmata.js +++ b/test/util/mock-firmata.js @@ -1,28 +1,22 @@ -var util = require("util"), - Emitter = require("events").EventEmitter, - pins = require("./mock-pins"); +var Board = require("board-io"); +var util = require("util"); +// var Emitter = require("events").EventEmitter, +var mockPins = require("./mock-pins"); function MockFirmata(opts) { + Board.call(this, { + quiet: true + }); + opts = opts || {}; + this.name = "Mock"; - this.isReady = true; - this.pins = opts.pins || pins.UNO; - this.analogPins = opts.analogPins || pins.UNOANALOG; - this.MODES = { - INPUT: 0x00, - OUTPUT: 0x01, - ANALOG: 0x02, - PWM: 0x03, - SERVO: 0x04, - SHIFT: 0x05, - I2C: 0x06, - ONEWIRE: 0x07, - STEPPER: 0x08, - IGNORE: 0x7F, - UNKOWN: 0x10 - }; - this.HIGH = 1; - this.LOW = 0; + + var pins = opts.pins || mockPins.UNO; + + pins.forEach(function(pin) { + this._pins.push(pin); + }, this); // set/override for special cases // like AdvancedFirmata @@ -31,21 +25,9 @@ function MockFirmata(opts) { } } -util.inherits(MockFirmata, Emitter); - -[ - "digitalWrite", "analogWrite", "servoWrite", "sendI2CWriteRequest", "i2cWrite", "i2cWriteReg", - "analogRead", "digitalRead", "sendI2CReadRequest", "i2cRead", - "pinMode", "queryPinState", "sendI2CConfig", "i2cConfig", - "stepperStep", "stepperConfig", "servoConfig", - "sendOneWireConfig", "sendOneWireSearch", "sendOneWireReset", - "sendOneWireWrite", "sendOneWireDelay", "sendOneWireWriteAndRead" -].forEach(function(value) { - MockFirmata.prototype[value] = function() {}; -}); - -MockFirmata.prototype.pulseIn = function(opt, callback) { - callback(this.pulseValue); -}; +util.inherits(MockFirmata, Board); + + +MockFirmata.prototype.servoConfig = function() {}; module.exports = MockFirmata;