Skip to content

Commit

Permalink
Test: Use Board-io to implement MockFirmata. Closes gh-735
Browse files Browse the repository at this point in the history
  • Loading branch information
rwaldron committed Apr 20, 2015
1 parent 75b5b9f commit 7d3221b
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 82 deletions.
5 changes: 5 additions & 0 deletions lib/board.js
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -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",
Expand Down
15 changes: 9 additions & 6 deletions test/accelerometer.js
Expand Up @@ -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"] = {

Expand Down
66 changes: 50 additions & 16 deletions test/board.js
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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();
});
}
};

Expand Down Expand Up @@ -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");
}
};

Expand Down
17 changes: 11 additions & 6 deletions test/button.js
Expand Up @@ -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) {
Expand Down
17 changes: 11 additions & 6 deletions test/esc.js
Expand Up @@ -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) {
Expand Down
25 changes: 21 additions & 4 deletions test/led.js
Expand Up @@ -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"] = {
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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);

Expand Down
5 changes: 4 additions & 1 deletion test/pin.js
Expand Up @@ -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
Expand Down
16 changes: 10 additions & 6 deletions 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");
},
};
56 changes: 19 additions & 37 deletions 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
Expand All @@ -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;

0 comments on commit 7d3221b

Please sign in to comment.