i2c-sensor-am2315
Version:
I2C communication driver for the AOSONG AM2315 temperature and humidity sensor.
562 lines (425 loc) • 13.4 kB
JavaScript
'use strict';
// inject libraries
var tape = require('tape');
var mockery = require('mockery');
// I2C bus stub
var i2cBusStub = {
open: function(bus, callback) {
setImmediate(callback, null);
return i2cBusStub;
},
close: function(callback) {
callback(null);
},
scan: function(callback) {
callback(null, []);
},
i2cWrite: function(address, bytes, buffer, callback) {
callback(null, 3, buffer);
},
i2cRead: function(address, bytes, buffer, callback) {
callback(null, 8, Buffer.from([0x03, 0x04, 0x03, 0x39, 0x01, 0x15, 0xE1, 0xFE]));
}
};
// test
tape('test i2c-sensor-am2315.setI2cBusNumber() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// set bus number
device.setI2cBusNumber(1);
// assert equal
assert.equal(device.config.i2cBusNumber, 1);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.setDeviceAddress() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// set device address
device.setDeviceAddress(1);
// assert equal
assert.equal(device.config.deviceAddress, 1);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.setReadCmdRegister() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// set read cmd register
device.setReadCmdRegister(1);
// assert equal
assert.equal(device.config.readCmdRegister, 1);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.setDebugMode() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// set debug mode
device.setDebugMode(true);
// assert equal
assert.equal(device.config.debugMode, true);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.calcTemperature() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.calcTemperature(0x01, 0x15), 300.85);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.calcHumidity() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.calcHumidity(0x03, 0x39), 82.5);
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.calcCRC() ', function(assert) {
// use sinon to stub out
var device, buffer, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// read buffer
buffer = Buffer.from([0x03, 0x04, 0x03, 0x39, 0x01, 0x15, 0xE1, 0xFE]);
// assert equal
assert.equal(device.calcCRC(buffer), ((buffer[7] << 8) + buffer[6]));
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertKelvinToCelsius() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertKelvinToCelsius(0), -273.15);
assert.equal(device.convertKelvinToCelsius(273.15), 0);
assert.deepEqual(device.convertKelvinToCelsius({ temperature: 0, temperatureUnit: 'K' }), { temperature: -273.15, temperatureUnit: '°C' });
assert.deepEqual(device.convertKelvinToCelsius({ temperature: 273.15, temperatureUnit: 'K' }), { temperature: 0, temperatureUnit: '°C' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertKelvinToFahrenheit() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertKelvinToFahrenheit(0), -459.67);
assert.equal(device.convertKelvinToFahrenheit(270), 26.33);
assert.deepEqual(device.convertKelvinToFahrenheit({ temperature: 0, temperatureUnit: 'K' }), { temperature: -459.67, temperatureUnit: '°F' });
assert.deepEqual(device.convertKelvinToFahrenheit({ temperature: 270, temperatureUnit: 'K' }), { temperature: 26.33, temperatureUnit: '°F' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertFahrenheitToCelsius() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertFahrenheitToCelsius(-459.67), -273.15);
assert.equal(device.convertFahrenheitToCelsius(-40), -40);
assert.deepEqual(device.convertFahrenheitToCelsius({ temperature: -459.67, temperatureUnit: '°F' }), { temperature: -273.15, temperatureUnit: '°C' });
assert.deepEqual(device.convertFahrenheitToCelsius({ temperature: -40, temperatureUnit: '°F' }), { temperature: -40, temperatureUnit: '°C' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertFahrenheitToKelvin() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertFahrenheitToKelvin(-459.67), 0);
assert.equal(device.convertFahrenheitToKelvin(100), 310.93);
assert.deepEqual(device.convertFahrenheitToKelvin({ temperature: -459.67, temperatureUnit: '°F' }), { temperature: 0, temperatureUnit: 'K' });
assert.deepEqual(device.convertFahrenheitToKelvin({ temperature: 100, temperatureUnit: '°F' }), { temperature: 310.93, temperatureUnit: 'K' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertCelsiusToKelvin() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertCelsiusToKelvin(-273.15), 0);
assert.equal(device.convertCelsiusToKelvin(20), 293.15);
assert.deepEqual(device.convertCelsiusToKelvin({ temperature: -273.15, temperatureUnit: '°C' }), { temperature: 0, temperatureUnit: 'K' });
assert.deepEqual(device.convertCelsiusToKelvin({ temperature: 20, temperatureUnit: '°C' }), { temperature: 293.15, temperatureUnit: 'K' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertCelsiusToFahrenheit() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertCelsiusToFahrenheit(0), 32);
assert.equal(device.convertCelsiusToFahrenheit(100), 212);
assert.deepEqual(device.convertCelsiusToFahrenheit({ temperature: 0, temperatureUnit: '°C' }), { temperature: 32, temperatureUnit: '°F' });
assert.deepEqual(device.convertCelsiusToFahrenheit({ temperature: 100, temperatureUnit: '°C' }), { temperature: 212, temperatureUnit: '°F' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.convertCelsiusToFahrenheit() ', function(assert) {
// use sinon to stub out
var device, buffer, driver, i2cBusStub;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// assert equal
assert.equal(device.convertCelsiusToFahrenheit(0), 32);
assert.equal(device.convertCelsiusToFahrenheit(100), 212);
assert.deepEqual(device.convertCelsiusToFahrenheit({ temperature: 0, temperatureUnit: '°C' }), { temperature: 32, temperatureUnit: '°F' });
assert.deepEqual(device.convertCelsiusToFahrenheit({ temperature: 100, temperatureUnit: '°C' }), { temperature: 212, temperatureUnit: '°F' });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.read() ', function(assert) {
// use sinon to stub out
var device, driver;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// read the device
device.read(function(err, result) {
assert.deepEqual(result, { temperature: 300.85, temperatureUnit: 'K', humidity: 82.5, humidityUnit: '%RH', crcCheck: true, validReading: true });
});
// disable mockery
mockery.disable();
// end assertion
assert.end();
});
// test
tape('test i2c-sensor-am2315.readAsync() ', async function(assert) {
// use sinon to stub out
var device, driver, data;
// enable mockery
mockery.enable({
warnOnReplace: false,
warnOnUnregistered: false,
useCleanCache: true
});
// replace the module `i2c-bus` with a stub object
mockery.registerMock('i2c-bus', i2cBusStub);
// now require the code to be tested
driver = require('../driver');
// create device
device = new driver;
// read the device
var data = await device.readAsync();
assert.deepEqual(data, { temperature: 300.85, temperatureUnit: 'K', humidity: 82.5, humidityUnit: '%RH', crcCheck: true, validReading: true });
// disable mockery
mockery.disable();
// end assertion
assert.end();
});