Skip to content

Commit

Permalink
feat: support deflated JSON string map from Valetudo 2021.01.0b0
Browse files Browse the repository at this point in the history
  • Loading branch information
alexkn committed Jan 10, 2021
1 parent eda796e commit 80faa28
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 106 deletions.
13 changes: 13 additions & 0 deletions lib/Inflate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const zlib = require("zlib");

module.exports = function Inflate(data) {
return new Promise((resolve,reject) => {
zlib.inflate(data, (err, data) => {
if (!err) {
resolve(data);
} else {
reject(err);
}
});
});
};
10 changes: 8 additions & 2 deletions nodes/valetudo-map-png.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const Tools = require("../lib/Tools");
const Gunzip = require("../lib/Gunzip");
const Inflate = require("../lib/Inflate");
const RRMapParser = require("../lib/RRMapParser");
const MapDrawer = require("../lib/MapDrawer");

Expand Down Expand Up @@ -58,8 +59,13 @@ module.exports = function(RED) {
if(typeof MapData === "string") {
MapData = JSON.parse(MapData);
}else if(Buffer.isBuffer(MapData)) {
MapData = await Gunzip(MapData);
MapData = RRMapParser.PARSE(MapData);
try {
MapData = await Inflate(MapData);
MapData = JSON.parse(MapData);
} catch (error) {
MapData = await Gunzip(MapData);
MapData = RRMapParser.PARSE(MapData);
}
}

var buf;
Expand Down
232 changes: 128 additions & 104 deletions test/valetudo-map-png_spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/// <reference types="@types/mocha" />
const fs = require("fs").promises;
const zlib = require("zlib");
const helper = require("./TestHelper");
const mapPngNode = require("../nodes/valetudo-map-png");

Expand All @@ -17,111 +18,134 @@ describe("valetudo-map-png Node", function () {
n1.should.have.property("name", "test name");
});

it("should draw JSON string from Valetudo 0.4.0 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_0.4.0.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW1886_0.4.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw JSON string from Valetudo 0.6.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw binmap from Valetudo RE 0.4.0-RE7.1 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.bin");
let expectedPng = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
describe("Valetudo", async function() {
it("should draw JSON string from Valetudo 0.4.0 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_0.4.0.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW1886_0.4.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw JSON string from Valetudo 0.6.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw deflated JSON string from Valetudo 2021.01.0b0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.json", { encoding: "utf-8" });
let deflatedData = zlib.deflateSync(data);
let expectedPng = await fs.readFile("./test/data/FW2008_0.6.0_with_segments.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: deflatedData });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});
});

it("should draw JSON string from Valetudo RE 0.4.0-RE7.1 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw binmap from Valetudo RE 0.9.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_RE0.9.0.bin");
let expectedPng = await fs.readFile("./test/data/FW2008_RE0.9.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw JSON string from Valetudo RE 0.9.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_RE0.9.0.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW2008_RE0.9.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
describe("Valetudo RE", async function() {
it("should draw binmap from Valetudo RE 0.4.0-RE7.1 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.bin");
let expectedPng = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw JSON string from Valetudo RE 0.4.0-RE7.1 with Firmware 1886 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW1886_RE0.4.0-RE7.1.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw binmap from Valetudo RE 0.9.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_RE0.9.0.bin");
let expectedPng = await fs.readFile("./test/data/FW2008_RE0.9.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});

it("should draw JSON string from Valetudo RE 0.9.0 with Firmware 2008 correctly", async function() {
let flow = [
{ id: "n1", type: "valetudo-map-png", wires:[["n2"]], drawPath: true, drawCharger: true, drawRobot: true, scale: 4 },
{ id: "n2", type: "helper" }
];
await helper.load(mapPngNode, flow);
let n1 = helper.getNode("n1");
let n2 = helper.getNode("n2");
let data = await fs.readFile("./test/data/FW2008_RE0.9.0.json", { encoding: "utf-8" });
let expectedPng = await fs.readFile("./test/data/FW2008_RE0.9.0.png");

let promise = helper.createTestPromise(n1, n2);
n1.receive({ payload: data });
let msg = await promise;

msg.payload.should.deepEqual(expectedPng);
});
});
});

0 comments on commit 80faa28

Please sign in to comment.