diff --git a/TestSelenium.js b/TestSelenium.js index 16b20f71c..71de38d5c 100644 --- a/TestSelenium.js +++ b/TestSelenium.js @@ -26,14 +26,30 @@ if (process.env.SAUCE_USERNAME !== undefined) { var SC_GET_DATA = "return (window.__CRYPTPAD_TEST__) ? window.__CRYPTPAD_TEST__.getData() : '[]'"; var failed = false; -var nt = nThen; +var nt = nThen(function (waitFor) { + driver.get('http://localhost:3000/auth/').then(waitFor()); +}).nThen(function (waitFor) { + console.log('initialized'); + driver.manage().addCookie({name: 'test', value: 'auto'}).then(waitFor()); +}).nThen; + [ - '/register/#?test=auto', - //'/assert/#?test=auto', - '/auth/#?test=auto' -].forEach(function (path) { + ['/register/', {}], + ['/assert/', {}], + ['/auth/', {}], + + ['/pad/#/1/edit/1KXFMz5L+nLgvHqXVJjyiQ/IUAE6IzVVg5UIYFOPglmVxvV/', {}], + ['/pad/#/1/view/1KXFMz5L+nLgvHqXVJjyiQ/O4kuSnJyviGVlz3qpcr4Fxc8fIK6uTeB30MfMkh86O8/', {}], + + ['/code/#/1/edit/CWtkq8Qa2re7W1XvXZRDYg/2G7Gse5UZ8dLyGAXUdCV2fLL/', {}], + ['/code/#/1/view/CWtkq8Qa2re7W1XvXZRDYg/G1pVa1EL26JRAjk28b43W7Ftc3AkdBblef1U58F3iDk/', {}], + + ['/slide/#/1/edit/uwKqgj8Ezh2dRaFUWSlrRQ/JkJtAb-hNzfESZEHreAeULU1/', {}], + ['/slide/#/1/view/uwKqgj8Ezh2dRaFUWSlrRQ/Xa8jXl+jWMpwep41mlrhkqbRuVKGxlueH80Pbgeu5Go/', {}], + +].forEach(function (x) { if (failed) { return; } - var url = 'http://localhost:3000' + path; + var url = 'http://localhost:3000' + x[0]; nt = nt(function (waitFor) { var done = waitFor(); console.log('\n\n-----TEST ' + url + ' -----'); @@ -70,6 +86,10 @@ var nt = nThen; if (done) { setTimeout(logMore, 50); } })); }; + driver.manage().addCookie({ + name: 'test', + value: encodeURIComponent(JSON.stringify({ test:'auto', opts: x[1] })) + }); driver.get(url).then(waitFor(logMore)); }).nThen; }); diff --git a/package.json b/package.json index e48d11b72..b7123d03b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "jshint": "~2.9.1", "less": "2.7.1", "lesshint": "^4.5.0", - "selenium-webdriver": "^2.53.1" + "selenium-webdriver": "^3.6.0" }, "scripts": { "start": "node server.js", diff --git a/www/common/sframe-app-framework.js b/www/common/sframe-app-framework.js index d9b59abeb..2290dd3ba 100644 --- a/www/common/sframe-app-framework.js +++ b/www/common/sframe-app-framework.js @@ -290,6 +290,12 @@ define([ if (newPad && !AppConfig.displayCreationScreen) { common.openTemplatePicker(); } + + if (Test.testing) { + cpNfInner.chainpad.onSettle(function () { + Test.passed(); + }); + } }; var onConnectionChange = function (info) { stateChange(info.state ? STATE.INITIALIZING : STATE.DISCONNECTED); @@ -385,10 +391,7 @@ define([ }).nThen(function (waitFor) { common.getSframeChannel().onReady(waitFor()); }).nThen(function (waitFor) { - if (common.getMetadataMgr().getPrivateData().isTesting) { - Test.registerInner(common.getSframeChannel()); - } - + Test.registerInner(common.getSframeChannel()); if (!AppConfig.displayCreationScreen) { return; } if (common.getMetadataMgr().getPrivateData().isNewFile) { common.getPadCreationScreen(waitFor()); diff --git a/www/common/sframe-protocol.js b/www/common/sframe-protocol.js index 7bada3c42..96014c992 100644 --- a/www/common/sframe-protocol.js +++ b/www/common/sframe-protocol.js @@ -213,4 +213,8 @@ define({ // Pad creation screen: create a pad with the selected attributes (owned, expire) 'Q_CREATE_PAD': true, + + // This is for sending data out of the iframe when we are in testing mode + // The exact protocol is defined in common/test.js + 'EV_TESTDATA': true, }); diff --git a/www/common/test.js b/www/common/test.js index 46416e1ad..e2824b8c0 100644 --- a/www/common/test.js +++ b/www/common/test.js @@ -1,7 +1,10 @@ define([], function () { - var out = function () { }; + if (window.__CRYPTPAD_TEST_OBJ_) { return window.__CRYPTPAD_TEST_OBJ_; } + var out = window.__CRYPTPAD_TEST_OBJ__ = function (f) { if (out.testing) { f(); } }; out.passed = out.failed = out; - if (window.location.hash.indexOf("test=auto") > -1) { + var enableAuto = function () { + console.log("Enable auto testing 1 " + window.origin); + if (window.__CRYPTPAD_TEST__) { return; } var cpt = window.__CRYPTPAD_TEST__ = { data: [], getData: function () { @@ -51,8 +54,7 @@ define([], function () { error: { message: e.message, stack: e.stack } }); }; - out = function (f) { f(); }; - out.testing = true; + out.testing = 'auto'; out.passed = function () { cpt.data.push({ type: 'report', @@ -71,13 +73,13 @@ define([], function () { out.registerInner = function (sframeChan) { sframeChan.whenReg('EV_TESTDATA', function () { - cpt.data.forEach(function (x) { sframeChan.fire('EV_TESTDATA', x); }); + cpt.data.forEach(function (x) { sframeChan.event('EV_TESTDATA', x); }); // override cpt.data.push() with a function which will send the content to the // outside where it will go on the outer window cpt.data array. cpt = window.__CRYPTPAD_TEST__ = { data: { push: function (elem) { - sframeChan.fire('EV_TESTDATA', elem); + sframeChan.event('EV_TESTDATA', elem); } }, getData: function () { @@ -89,10 +91,9 @@ define([], function () { out.registerOuter = function (sframeChan) { sframeChan.on('EV_TESTDATA', function (data) { cpt.data.push(data); }); }; - - } else if (window.location.hash.indexOf("test=manual") > -1) { - out = function (f) { f(); }; - out.testing = true; + }; + var enableManual = function () { + out.testing = 'manual'; out.passed = function () { window.alert("Test passed"); }; @@ -101,10 +102,27 @@ define([], function () { }; out.registerInner = function () { }; out.registerOuter = function () { }; - } else { - out.testing = false; - out.registerInner = function () { }; - out.registerOuter = function () { }; + }; + + out.options = {}; + out.testing = false; + out.registerInner = function () { }; + out.registerOuter = function () { }; + + if (window.location.hash.indexOf("test=auto") > -1) { + enableAuto(); + } else if (window.location.hash.indexOf("test=manual") > -1) { + enableManual(); + } else if (document.cookie.indexOf('test=') === 0) { + try { + var x = JSON.parse(decodeURIComponent(document.cookie.replace('test=', ''))); + if (x.test === 'auto') { + out.options = x.opts; + enableAuto('auto'); + } + console.log("Enable auto testing " + window.origin); + } catch (e) { } } + return out; });