From ee17aef91c6e0dbaee67ca1836d1e1371a107e8d Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Thu, 27 Dec 2018 19:26:04 +0100 Subject: [PATCH] Fix timeout arguments conversion (#292) --- lib/jsonwp-proxy/protocol-converter.js | 3 ++- test/jsonwp-proxy/protocol-converter-specs.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/jsonwp-proxy/protocol-converter.js b/lib/jsonwp-proxy/protocol-converter.js index ab6bb3ae7..675450c43 100644 --- a/lib/jsonwp-proxy/protocol-converter.js +++ b/lib/jsonwp-proxy/protocol-converter.js @@ -71,7 +71,8 @@ class ProtocolConverter { if (this.downstreamProtocol === MJSONWP && (!_.has(body, 'ms') || !_.has(body, 'type'))) { const typeToJSONWP = (x) => x === 'pageLoad' ? 'page load' : x; return _.toPairs(body) - .filter((pair) => !isNaN(parseFloat(pair[1]))) + // Only transform the entry if ms value is a valid positive float number + .filter((pair) => /^\d+(?:[.,]\d*?)?$/.test(`${pair[1]}`)) .map((pair) => { return { type: typeToJSONWP(pair[0]), diff --git a/test/jsonwp-proxy/protocol-converter-specs.js b/test/jsonwp-proxy/protocol-converter-specs.js index fde76531b..c5c6636f9 100644 --- a/test/jsonwp-proxy/protocol-converter-specs.js +++ b/test/jsonwp-proxy/protocol-converter-specs.js @@ -23,6 +23,17 @@ describe('Protocol Converter', function () { timeoutObjects.length.should.equal(1); timeoutObjects[0].should.eql({type: 'script', ms: 100}); }); + it('should ignore invalid entries while converting from W3C', function () { + converter.downstreamProtocol = MJSONWP; + let timeoutObjects = converter.getTimeoutRequestObjects({ + script: 100, + sessionId: '5432a4f3-cd89-4781-8905-ea9d3150840c', + bar: -1, + baz: undefined, + }); + timeoutObjects.length.should.equal(1); + timeoutObjects[0].should.eql({type: 'script', ms: 100}); + }); it('should take multiple W3C timeouts and produce multiple MJSONWP compatible objects', function () { converter.downstreamProtocol = MJSONWP; let [scriptTimeout, pageLoadTimeout, implicitTimeout] = converter.getTimeoutRequestObjects({script: 100, pageLoad: 200, implicit: 300});