Updated with new methods

This commit is contained in:
Yorick
2016-04-05 11:42:41 +00:00
parent 2bdcf41538
commit 75b1a4c9bf
71 changed files with 14055 additions and 403 deletions
+135
View File
@@ -0,0 +1,135 @@
var fs = require('fs');
var assert = require('assert');
var sinon = require('sinon');
var gpio = require('../lib/gpio');
function read(file, fn) {
fs.readFile(file, "utf-8", function(err, data) {
if(!err && typeof fn === "function") fn(data);
});
}
// remove whitespace
function rmws(str) {
return str.replace(/\s+/g, '');
}
describe('GPIO', function() {
var gpio4;
before(function(done) {
gpio4 = gpio.export(4, {
direction: 'out',
ready: done
});
});
after(function() {
gpio4.unexport();
});
describe('Header Direction Out', function() {
describe('initializing', function() {
it('should open specified header', function(done) {
read('/sys/class/gpio/gpio4/direction', function(val) {
assert.equal(rmws(val), 'out');
done();
});
});
});
describe('#set', function() {
it('should set header value to high', function(done) {
gpio4.set(function() {
read('/sys/class/gpio/gpio4/value', function(val) {
assert.equal(rmws(val), '1');
done();
});
});
});
});
describe('#reset', function() {
it('should set header value to low', function(done) {
gpio4.reset(function() {
read('/sys/class/gpio/gpio4/value', function(val) {
assert.equal(rmws(val), '0');
done();
});
});
});
});
describe('#on :change', function() {
it('should fire callback when value changes', function(done) {
var callback = sinon.spy();
gpio4.on('change', callback);
// set, then reset
gpio4.set(function() { gpio4.reset(); });
// set and reset is async, wait some time before running assertions
setTimeout(function() {
assert.ok(callback.calledTwice);
done();
gpio4.removeListener('change', callback);
}, 10);
});
});
});
// For these tests, make sure header 4 is connected to header 25
// header 25 is exported with direction "out" and header 4 is used
// to simulate a hardware interrupt
describe('Header Direction In', function() {
var gpio25;
before(function(done) {
gpio25 = gpio.export(25, {
direction: 'in',
ready: done
});
});
after(function() {
gpio25.unexport();
});
describe('#on :change', function() {
it('should respond to hardware set', function(done) {
var callback = sinon.spy();
gpio25.on('change', callback);
// wait a little before setting
setTimeout(function() { gpio4.set(); }, 500);
// filewatcher has default interval of 100ms
setTimeout(function() {
assert.equal(gpio25.value, 1);
assert.ok(callback.calledOnce);
gpio25.removeListener('change', callback);
done();
}, 600);
});
it('should respond to hardware reset', function(done) {
var callback = sinon.spy();
gpio25.on('change', callback);
// wait a little before setting
setTimeout(function() { gpio4.reset(); }, 500);
// filewatcher has default interval of 100ms
setTimeout(function() {
assert.equal(gpio25.value, 0);
assert.ok(callback.calledOnce);
gpio25.removeListener('change', callback);
done();
}, 600);
});
});
});
});