diff --git a/.hermione.conf.js b/.hermione.conf.js new file mode 100644 index 0000000..bb42aee --- /dev/null +++ b/.hermione.conf.js @@ -0,0 +1,26 @@ +const path = require("path"); + +module.exports = { + baseUrl: "http://localhost:3000", + gridUrl: "http://0.0.0.0:4444/wd/hub", + compositeImage: true, + + browsers: { + chrome: { + desiredCapabilities: { + browserName: "chrome" + } + }, + firefox: { + desiredCapabilities: { + browserName: "firefox" + } + } + }, + plugins: { + "html-reporter/hermione": { + path: "hermione/hermione-html-report" + }, + [path.resolve(__dirname, "./hermione/custom-commands.js")]: true + } +}; diff --git a/README.md b/README.md index ead0967..03e97b7 100644 --- a/README.md +++ b/README.md @@ -31,3 +31,33 @@ npm start - нужно добавить в README список логических блоков системы и их сценариев - для каждого блока нужно написать модульные тесты - если необходимо, выполните рефакторинг, чтобы реорганизовать логические блоки или добавить точки расширения + +## Список логических блоков и их сценариев + +1. История коммитов + +- получение списка коммитов в виде строки +- преобразование строки в массив с объектами +- добавление к каждому из объекту из массива ключ href +- запуск функции render с массивом коммитов в качестве аргумента + +2. Файловая система + +- получение файловой структуры в виде строки +- преобразование строки в массив с объектами +- добавляет к каждому объекту ключи href и name +- запуск функции render с массивом объектов в качестве аргумента + +3. Содержимое файлов + +- получение содержимого файла в виде строки +- запуск функции render с передачей в нее содержимого файла + +4. Создание путей + +- создание пути к папке +- создание пути к файлу + +5. Хлебные крошки + +- добавление новых элементов в соответствии с уровнем страницы diff --git a/controllers/contentController.js b/controllers/contentController.js index c9d1858..82771f1 100644 --- a/controllers/contentController.js +++ b/controllers/contentController.js @@ -1,22 +1,27 @@ -const { gitFileContent, gitFileTree } = require('../utils/git'); -const { buildFolderUrl, buildBreadcrumbs } = require('../utils/navigation'); +const { gitFileContent, gitFileTree } = require("../utils/git"); +const { buildBreadcrumbs } = require("../utils/navigation"); + +module.exports = function(req, res, next, ...rest) { + const stubs = (rest && rest[0]) || {}; + const _gitFileTree = stubs.gitFileTree || gitFileTree; + const _gitFileContent = stubs.gitFileContent || gitFileContent; + const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs; -module.exports = function(req, res, next) { const { hash } = req.params; - const path = req.params[0].split('/').filter(Boolean); + const path = req.params[0].split("/").filter(Boolean); - gitFileTree(hash, path.join('/')) + return _gitFileTree(hash, path.join("/")) .then(function([file]) { - if (file && file.type === 'blob') { - return gitFileContent(file.hash); + if (file && file.type === "blob") { + return _gitFileContent(file.hash); } }) .then( content => { if (content) { - res.render('content', { - title: 'content', - breadcrumbs: buildBreadcrumbs(hash, path.join('/')), + res.render("content", { + title: "content", + breadcrumbs: _buildBreadcrumbs(hash, path.join("/")), content }); } else { diff --git a/controllers/contentController.test.js b/controllers/contentController.test.js new file mode 100644 index 0000000..6c9b981 --- /dev/null +++ b/controllers/contentController.test.js @@ -0,0 +1,20 @@ +const contentController = require("./contentController"); + +describe("Содержимое файлов", () => { + const req = { params: { hash: "", "0": "" } }; + const res = { render: jest.fn() }; + const stubs = {}; + stubs.gitFileTree = jest.fn(() => + Promise.resolve([{ type: "", hash: "", path: "" }]) + ); + stubs.gitFileContent = jest.fn(); + stubs.buildBreadcrumbs = jest.fn(); + + test("в функцию render в качестве аргументов попадают заголовок, хлебные крошки и содержимого файла", () => { + contentController(req, res, () => {}, stubs).then(() => { + const keys = Object.keys(res.render.mock.calls[0][1]); + + expect(keys.toEqual(["title", "breadcrumbs", "content"])); + }); + }); +}); diff --git a/controllers/filesController.js b/controllers/filesController.js index 02fe732..ed256f9 100644 --- a/controllers/filesController.js +++ b/controllers/filesController.js @@ -1,38 +1,43 @@ -const { gitFileTree } = require('../utils/git'); +const { gitFileTree } = require("../utils/git"); const { buildFolderUrl, buildFileUrl, buildBreadcrumbs -} = require('../utils/navigation'); +} = require("../utils/navigation"); function buildObjectUrl(parentHash, { path, type }) { switch (type) { - case 'tree': + case "tree": return buildFolderUrl(parentHash, path); - case 'blob': + case "blob": return buildFileUrl(parentHash, path); default: - return '#'; + return "#"; } } -module.exports = function(req, res, next) { +module.exports = function(req, res, next, ...rest) { + const stubs = (rest && rest[0]) || {}; + const _gitFileTree = stubs.gitFileTree || gitFileTree; + const _buildObjectUrl = stubs.buildObjectUrl || buildObjectUrl; + const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs; + const { hash } = req.params; - const pathParam = (req.params[0] || '').split('/').filter(Boolean); + const pathParam = (req.params[0] || "").split("/").filter(Boolean); - const path = pathParam.length ? pathParam.join('/') + '/' : ''; + const path = pathParam.length ? pathParam.join("/") + "/" : ""; - return gitFileTree(hash, path).then( + return _gitFileTree(hash, path).then( list => { const files = list.map(item => ({ ...item, - href: buildObjectUrl(hash, item), - name: item.path.split('/').pop() + href: _buildObjectUrl(hash, item), + name: item.path.split("/").pop() })); - res.render('files', { - title: 'files', - breadcrumbs: buildBreadcrumbs(hash, pathParam.join('/')), + res.render("files", { + title: "files", + breadcrumbs: _buildBreadcrumbs(hash, pathParam.join("/")), files }); }, diff --git a/controllers/filesController.test.js b/controllers/filesController.test.js new file mode 100644 index 0000000..5f32d07 --- /dev/null +++ b/controllers/filesController.test.js @@ -0,0 +1,28 @@ +const filesController = require("./filesController"); + +describe("Файловая система", () => { + const stubs = {}; + stubs.gitFileTree = jest.fn(() => + Promise.resolve([{ type: "", hash: "", path: "" }]) + ); + stubs.buildObjectUrl = jest.fn(); + stubs.buildBreadcrumbs = jest.fn(); + + const req = { params: { hash: "" } }; + const res = { render: jest.fn() }; + + test("добавляются ключи href и path к объектам файлов", () => { + filesController(req, res, () => {}, stubs).then(() => { + expect(res.render.mock.calls[0][1].files.toHaveProperty("href")); + expect(res.render.mock.calls[0][1].files.toHaveProperty("name")); + }); + }); + + test("в функцию render в качестве аргументов попадают заголовок, хлебные крошки и объекты файлов", () => { + filesController(req, res, () => {}, stubs).then(() => { + const keys = Object.keys(res.render.mock.calls[0][1]); + + expect(keys.toEqual(["title", "breadcrumbs", "files"])); + }); + }); +}); diff --git a/controllers/indexController.js b/controllers/indexController.js index 0e3f100..a833716 100644 --- a/controllers/indexController.js +++ b/controllers/indexController.js @@ -1,17 +1,22 @@ -const { gitHistory } = require('../utils/git'); -const { buildFolderUrl, buildBreadcrumbs } = require('../utils/navigation'); +const { gitHistory } = require("../utils/git"); +const { buildFolderUrl, buildBreadcrumbs } = require("../utils/navigation"); -module.exports = function(req, res) { - gitHistory(1, 20).then( +module.exports = function(req, res, next, ...rest) { + const stubs = (rest && rest[0]) || {}; + const _gitHistory = stubs.gitHistory || gitHistory; + const _buildFolderUrl = stubs.buildFolderUrl || buildFolderUrl; + const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs; + + return _gitHistory(1, 20).then( history => { const list = history.map(item => ({ ...item, - href: buildFolderUrl(item.hash, '') + href: _buildFolderUrl(item.hash, "") })); - res.render('index', { - title: 'history', - breadcrumbs: buildBreadcrumbs(), + res.render("index", { + title: "history", + breadcrumbs: _buildBreadcrumbs(), list }); }, diff --git a/controllers/indexController.test.js b/controllers/indexController.test.js new file mode 100644 index 0000000..8ff61eb --- /dev/null +++ b/controllers/indexController.test.js @@ -0,0 +1,25 @@ +const indexController = require("./indexController"); + +describe("История коммитов", () => { + const stubs = {}; + stubs.gitHistory = jest.fn(() => + Promise.resolve([{ hash: "", author: "", timestamp: "", msg: "" }]) + ); + stubs.buildFolderUrl = jest.fn(); + stubs.buildBreadcrumbs = jest.fn(); + const res = { render: jest.fn() }; + + test("добавляется ключ href к объекту коммита", () => { + indexController(null, res, () => {}, stubs).then(() => { + expect(res.render.mock.calls[0][1].list.toHaveProperty("href")); + }); + }); + + test("в функцию render в качестве аргументов попадают заголовок, хлебные крошки и объекты коммитов", () => { + indexController(null, res, () => {}, stubs).then(() => { + const keys = Object.keys(res.render.mock.calls[0][1]); + + expect(keys.toEqual(["title", "breadcrumbs", "list"])); + }); + }); +}); diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 0000000..433b721 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..98431ee --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,6 @@ +{"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\contentController.js": {"path":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\contentController.js","statementMap":{"0":{"start":{"line":1,"column":40},"end":{"line":1,"column":63}},"1":{"start":{"line":2,"column":29},"end":{"line":2,"column":59}},"2":{"start":{"line":4,"column":0},"end":{"line":33,"column":2}},"3":{"start":{"line":5,"column":16},"end":{"line":5,"column":39}},"4":{"start":{"line":6,"column":23},"end":{"line":6,"column":55}},"5":{"start":{"line":7,"column":26},"end":{"line":7,"column":64}},"6":{"start":{"line":8,"column":28},"end":{"line":8,"column":70}},"7":{"start":{"line":10,"column":19},"end":{"line":10,"column":29}},"8":{"start":{"line":11,"column":15},"end":{"line":11,"column":55}},"9":{"start":{"line":13,"column":2},"end":{"line":32,"column":6}},"10":{"start":{"line":15,"column":6},"end":{"line":17,"column":7}},"11":{"start":{"line":16,"column":8},"end":{"line":16,"column":42}},"12":{"start":{"line":21,"column":8},"end":{"line":29,"column":9}},"13":{"start":{"line":22,"column":10},"end":{"line":26,"column":13}},"14":{"start":{"line":28,"column":10},"end":{"line":28,"column":17}},"15":{"start":{"line":31,"column":13},"end":{"line":31,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":51},"end":{"line":33,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":10},"end":{"line":14,"column":11}},"loc":{"start":{"line":14,"column":27},"end":{"line":18,"column":5}},"line":14},"2":{"name":"(anonymous_2)","decl":{"start":{"line":20,"column":6},"end":{"line":20,"column":7}},"loc":{"start":{"line":20,"column":17},"end":{"line":30,"column":7}},"line":20},"3":{"name":"(anonymous_3)","decl":{"start":{"line":31,"column":6},"end":{"line":31,"column":7}},"loc":{"start":{"line":31,"column":13},"end":{"line":31,"column":22}},"line":31}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":39}},"type":"binary-expr","locations":[{"start":{"line":5,"column":17},"end":{"line":5,"column":21}},{"start":{"line":5,"column":25},"end":{"line":5,"column":32}},{"start":{"line":5,"column":37},"end":{"line":5,"column":39}}],"line":5},"1":{"loc":{"start":{"line":6,"column":23},"end":{"line":6,"column":55}},"type":"binary-expr","locations":[{"start":{"line":6,"column":23},"end":{"line":6,"column":40}},{"start":{"line":6,"column":44},"end":{"line":6,"column":55}}],"line":6},"2":{"loc":{"start":{"line":7,"column":26},"end":{"line":7,"column":64}},"type":"binary-expr","locations":[{"start":{"line":7,"column":26},"end":{"line":7,"column":46}},{"start":{"line":7,"column":50},"end":{"line":7,"column":64}}],"line":7},"3":{"loc":{"start":{"line":8,"column":28},"end":{"line":8,"column":70}},"type":"binary-expr","locations":[{"start":{"line":8,"column":28},"end":{"line":8,"column":50}},{"start":{"line":8,"column":54},"end":{"line":8,"column":70}}],"line":8},"4":{"loc":{"start":{"line":15,"column":6},"end":{"line":17,"column":7}},"type":"if","locations":[{"start":{"line":15,"column":6},"end":{"line":17,"column":7}},{"start":{"line":15,"column":6},"end":{"line":17,"column":7}}],"line":15},"5":{"loc":{"start":{"line":15,"column":10},"end":{"line":15,"column":38}},"type":"binary-expr","locations":[{"start":{"line":15,"column":10},"end":{"line":15,"column":14}},{"start":{"line":15,"column":18},"end":{"line":15,"column":38}}],"line":15},"6":{"loc":{"start":{"line":21,"column":8},"end":{"line":29,"column":9}},"type":"if","locations":[{"start":{"line":21,"column":8},"end":{"line":29,"column":9}},{"start":{"line":21,"column":8},"end":{"line":29,"column":9}}],"line":21}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":0,"12":1,"13":0,"14":1,"15":0},"f":{"0":1,"1":1,"2":1,"3":0},"b":{"0":[1,1,0],"1":[1,0],"2":[1,0],"3":[1,0],"4":[0,1],"5":[1,1],"6":[0,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"da48adc0d4a6a1692892d7706c9620a932371940"} +,"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\filesController.js": {"path":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\filesController.js","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":1,"column":47}},"1":{"start":{"line":6,"column":4},"end":{"line":6,"column":34}},"2":{"start":{"line":9,"column":2},"end":{"line":16,"column":3}},"3":{"start":{"line":11,"column":6},"end":{"line":11,"column":46}},"4":{"start":{"line":13,"column":6},"end":{"line":13,"column":44}},"5":{"start":{"line":15,"column":6},"end":{"line":15,"column":17}},"6":{"start":{"line":19,"column":0},"end":{"line":46,"column":2}},"7":{"start":{"line":20,"column":16},"end":{"line":20,"column":39}},"8":{"start":{"line":21,"column":23},"end":{"line":21,"column":55}},"9":{"start":{"line":22,"column":26},"end":{"line":22,"column":64}},"10":{"start":{"line":23,"column":28},"end":{"line":23,"column":70}},"11":{"start":{"line":25,"column":19},"end":{"line":25,"column":29}},"12":{"start":{"line":26,"column":20},"end":{"line":26,"column":68}},"13":{"start":{"line":28,"column":15},"end":{"line":28,"column":64}},"14":{"start":{"line":30,"column":2},"end":{"line":45,"column":4}},"15":{"start":{"line":32,"column":20},"end":{"line":36,"column":9}},"16":{"start":{"line":32,"column":38},"end":{"line":36,"column":7}},"17":{"start":{"line":38,"column":6},"end":{"line":42,"column":9}},"18":{"start":{"line":44,"column":11},"end":{"line":44,"column":20}}},"fnMap":{"0":{"name":"buildObjectUrl","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":23}},"loc":{"start":{"line":8,"column":52},"end":{"line":17,"column":1}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":17},"end":{"line":19,"column":18}},"loc":{"start":{"line":19,"column":51},"end":{"line":46,"column":1}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":4},"end":{"line":31,"column":5}},"loc":{"start":{"line":31,"column":12},"end":{"line":43,"column":5}},"line":31},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":29},"end":{"line":32,"column":30}},"loc":{"start":{"line":32,"column":38},"end":{"line":36,"column":7}},"line":32},"4":{"name":"(anonymous_4)","decl":{"start":{"line":44,"column":4},"end":{"line":44,"column":5}},"loc":{"start":{"line":44,"column":11},"end":{"line":44,"column":20}},"line":44}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":16,"column":3}},"type":"switch","locations":[{"start":{"line":10,"column":4},"end":{"line":11,"column":46}},{"start":{"line":12,"column":4},"end":{"line":13,"column":44}},{"start":{"line":14,"column":4},"end":{"line":15,"column":17}}],"line":9},"1":{"loc":{"start":{"line":20,"column":16},"end":{"line":20,"column":39}},"type":"binary-expr","locations":[{"start":{"line":20,"column":17},"end":{"line":20,"column":21}},{"start":{"line":20,"column":25},"end":{"line":20,"column":32}},{"start":{"line":20,"column":37},"end":{"line":20,"column":39}}],"line":20},"2":{"loc":{"start":{"line":21,"column":23},"end":{"line":21,"column":55}},"type":"binary-expr","locations":[{"start":{"line":21,"column":23},"end":{"line":21,"column":40}},{"start":{"line":21,"column":44},"end":{"line":21,"column":55}}],"line":21},"3":{"loc":{"start":{"line":22,"column":26},"end":{"line":22,"column":64}},"type":"binary-expr","locations":[{"start":{"line":22,"column":26},"end":{"line":22,"column":46}},{"start":{"line":22,"column":50},"end":{"line":22,"column":64}}],"line":22},"4":{"loc":{"start":{"line":23,"column":28},"end":{"line":23,"column":70}},"type":"binary-expr","locations":[{"start":{"line":23,"column":28},"end":{"line":23,"column":50}},{"start":{"line":23,"column":54},"end":{"line":23,"column":70}}],"line":23},"5":{"loc":{"start":{"line":26,"column":21},"end":{"line":26,"column":40}},"type":"binary-expr","locations":[{"start":{"line":26,"column":21},"end":{"line":26,"column":34}},{"start":{"line":26,"column":38},"end":{"line":26,"column":40}}],"line":26},"6":{"loc":{"start":{"line":28,"column":15},"end":{"line":28,"column":64}},"type":"cond-expr","locations":[{"start":{"line":28,"column":34},"end":{"line":28,"column":59}},{"start":{"line":28,"column":62},"end":{"line":28,"column":64}}],"line":28}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":1,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":0},"f":{"0":0,"1":2,"2":2,"3":2,"4":0},"b":{"0":[0,0,0],"1":[2,2,0],"2":[2,0],"3":[2,0],"4":[2,0],"5":[2,2],"6":[0,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"ed1345e7a1142809a6d0c7c3fb4fa607a6263e80"} +,"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\indexController.js": {"path":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\controllers\\indexController.js","statementMap":{"0":{"start":{"line":1,"column":23},"end":{"line":1,"column":46}},"1":{"start":{"line":2,"column":45},"end":{"line":2,"column":75}},"2":{"start":{"line":4,"column":0},"end":{"line":25,"column":2}},"3":{"start":{"line":5,"column":16},"end":{"line":5,"column":39}},"4":{"start":{"line":6,"column":22},"end":{"line":6,"column":52}},"5":{"start":{"line":7,"column":26},"end":{"line":7,"column":64}},"6":{"start":{"line":8,"column":28},"end":{"line":8,"column":70}},"7":{"start":{"line":10,"column":2},"end":{"line":24,"column":4}},"8":{"start":{"line":12,"column":19},"end":{"line":15,"column":9}},"9":{"start":{"line":12,"column":40},"end":{"line":15,"column":7}},"10":{"start":{"line":17,"column":6},"end":{"line":21,"column":9}},"11":{"start":{"line":23,"column":11},"end":{"line":23,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":17},"end":{"line":4,"column":18}},"loc":{"start":{"line":4,"column":51},"end":{"line":25,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":15},"end":{"line":22,"column":5}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":31},"end":{"line":12,"column":32}},"loc":{"start":{"line":12,"column":40},"end":{"line":15,"column":7}},"line":12},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":4},"end":{"line":23,"column":5}},"loc":{"start":{"line":23,"column":11},"end":{"line":23,"column":20}},"line":23}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":39}},"type":"binary-expr","locations":[{"start":{"line":5,"column":17},"end":{"line":5,"column":21}},{"start":{"line":5,"column":25},"end":{"line":5,"column":32}},{"start":{"line":5,"column":37},"end":{"line":5,"column":39}}],"line":5},"1":{"loc":{"start":{"line":6,"column":22},"end":{"line":6,"column":52}},"type":"binary-expr","locations":[{"start":{"line":6,"column":22},"end":{"line":6,"column":38}},{"start":{"line":6,"column":42},"end":{"line":6,"column":52}}],"line":6},"2":{"loc":{"start":{"line":7,"column":26},"end":{"line":7,"column":64}},"type":"binary-expr","locations":[{"start":{"line":7,"column":26},"end":{"line":7,"column":46}},{"start":{"line":7,"column":50},"end":{"line":7,"column":64}}],"line":7},"3":{"loc":{"start":{"line":8,"column":28},"end":{"line":8,"column":70}},"type":"binary-expr","locations":[{"start":{"line":8,"column":28},"end":{"line":8,"column":50}},{"start":{"line":8,"column":54},"end":{"line":8,"column":70}}],"line":8}},"s":{"0":1,"1":1,"2":1,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":0},"f":{"0":2,"1":2,"2":2,"3":0},"b":{"0":[2,2,0],"1":[2,0],"2":[2,0],"3":[2,0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"9cc4d9b0cc9a2b8b34f17d23f4950916f78f73ed"} +,"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\utils\\git.js": {"path":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\utils\\git.js","statementMap":{"0":{"start":{"line":1,"column":20},"end":{"line":1,"column":35}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":25}},"2":{"start":{"line":4,"column":21},"end":{"line":4,"column":45}},"3":{"start":{"line":7,"column":2},"end":{"line":15,"column":5}},"4":{"start":{"line":8,"column":4},"end":{"line":14,"column":7}},"5":{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},"6":{"start":{"line":10,"column":8},"end":{"line":10,"column":20}},"7":{"start":{"line":13,"column":6},"end":{"line":13,"column":33}},"8":{"start":{"line":19,"column":41},"end":{"line":19,"column":57}},"9":{"start":{"line":21,"column":2},"end":{"line":26,"column":4}},"10":{"start":{"line":30,"column":17},"end":{"line":30,"column":34}},"11":{"start":{"line":32,"column":2},"end":{"line":45,"column":5}},"12":{"start":{"line":41,"column":4},"end":{"line":44,"column":29}},"13":{"start":{"line":49,"column":23},"end":{"line":49,"column":39}},"14":{"start":{"line":50,"column":25},"end":{"line":50,"column":40}},"15":{"start":{"line":52,"column":2},"end":{"line":52,"column":30}},"16":{"start":{"line":56,"column":15},"end":{"line":56,"column":38}},"17":{"start":{"line":57,"column":22},"end":{"line":57,"column":51}},"18":{"start":{"line":58,"column":29},"end":{"line":58,"column":72}},"19":{"start":{"line":60,"column":17},"end":{"line":60,"column":34}},"20":{"start":{"line":61,"column":2},"end":{"line":61,"column":28}},"21":{"start":{"line":63,"column":2},"end":{"line":68,"column":5}},"22":{"start":{"line":64,"column":4},"end":{"line":67,"column":31}},"23":{"start":{"line":72,"column":2},"end":{"line":72,"column":43}},"24":{"start":{"line":75,"column":0},"end":{"line":82,"column":2}}},"fnMap":{"0":{"name":"executeGit","decl":{"start":{"line":6,"column":9},"end":{"line":6,"column":19}},"loc":{"start":{"line":6,"column":31},"end":{"line":16,"column":1}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":7,"column":21},"end":{"line":7,"column":22}},"loc":{"start":{"line":7,"column":42},"end":{"line":15,"column":3}},"line":7},"2":{"name":"(anonymous_2)","decl":{"start":{"line":8,"column":39},"end":{"line":8,"column":40}},"loc":{"start":{"line":8,"column":56},"end":{"line":14,"column":5}},"line":8},"3":{"name":"parseHistoryItem","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":25}},"loc":{"start":{"line":18,"column":32},"end":{"line":27,"column":1}},"line":18},"4":{"name":"gitHistory","decl":{"start":{"line":29,"column":9},"end":{"line":29,"column":19}},"loc":{"start":{"line":29,"column":41},"end":{"line":46,"column":1}},"line":29},"5":{"name":"(anonymous_5)","decl":{"start":{"line":40,"column":10},"end":{"line":40,"column":11}},"loc":{"start":{"line":40,"column":18},"end":{"line":45,"column":3}},"line":40},"6":{"name":"parseFileTreeItem","decl":{"start":{"line":48,"column":9},"end":{"line":48,"column":26}},"loc":{"start":{"line":48,"column":33},"end":{"line":53,"column":1}},"line":48},"7":{"name":"gitFileTree","decl":{"start":{"line":55,"column":9},"end":{"line":55,"column":20}},"loc":{"start":{"line":55,"column":42},"end":{"line":69,"column":1}},"line":55},"8":{"name":"(anonymous_8)","decl":{"start":{"line":63,"column":41},"end":{"line":63,"column":42}},"loc":{"start":{"line":63,"column":49},"end":{"line":68,"column":3}},"line":63},"9":{"name":"gitFileContent","decl":{"start":{"line":71,"column":9},"end":{"line":71,"column":23}},"loc":{"start":{"line":71,"column":30},"end":{"line":73,"column":1}},"line":71}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},"type":"if","locations":[{"start":{"line":9,"column":6},"end":{"line":11,"column":7}},{"start":{"line":9,"column":6},"end":{"line":11,"column":7}}],"line":9},"1":{"loc":{"start":{"line":29,"column":20},"end":{"line":29,"column":28}},"type":"default-arg","locations":[{"start":{"line":29,"column":27},"end":{"line":29,"column":28}}],"line":29},"2":{"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":39}},"type":"default-arg","locations":[{"start":{"line":29,"column":37},"end":{"line":29,"column":39}}],"line":29},"3":{"loc":{"start":{"line":56,"column":15},"end":{"line":56,"column":38}},"type":"binary-expr","locations":[{"start":{"line":56,"column":16},"end":{"line":56,"column":20}},{"start":{"line":56,"column":24},"end":{"line":56,"column":31}},{"start":{"line":56,"column":36},"end":{"line":56,"column":38}}],"line":56},"4":{"loc":{"start":{"line":57,"column":22},"end":{"line":57,"column":51}},"type":"binary-expr","locations":[{"start":{"line":57,"column":22},"end":{"line":57,"column":37}},{"start":{"line":57,"column":41},"end":{"line":57,"column":51}}],"line":57},"5":{"loc":{"start":{"line":58,"column":29},"end":{"line":58,"column":72}},"type":"binary-expr","locations":[{"start":{"line":58,"column":29},"end":{"line":58,"column":51}},{"start":{"line":58,"column":55},"end":{"line":58,"column":72}}],"line":58},"6":{"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":27}},"type":"binary-expr","locations":[{"start":{"line":61,"column":2},"end":{"line":61,"column":6}},{"start":{"line":61,"column":10},"end":{"line":61,"column":27}}],"line":61}},"s":{"0":4,"1":4,"2":4,"3":2,"4":2,"5":2,"6":1,"7":2,"8":1,"9":1,"10":0,"11":0,"12":0,"13":1,"14":1,"15":1,"16":3,"17":3,"18":3,"19":3,"20":3,"21":3,"22":3,"23":0,"24":4},"f":{"0":2,"1":2,"2":2,"3":1,"4":0,"5":0,"6":1,"7":3,"8":3,"9":0},"b":{"0":[1,1],"1":[0],"2":[0],"3":[3,3,0],"4":[3,0],"5":[3,3],"6":[3,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"00c71ee1578c1836f810f522d9e5d8e103f32d1b"} +,"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\utils\\navigation.js": {"path":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\utils\\navigation.js","statementMap":{"0":{"start":{"line":2,"column":2},"end":{"line":2,"column":40}},"1":{"start":{"line":6,"column":2},"end":{"line":6,"column":42}},"2":{"start":{"line":10,"column":13},"end":{"line":15,"column":3}},"3":{"start":{"line":17,"column":2},"end":{"line":43,"column":3}},"4":{"start":{"line":18,"column":27},"end":{"line":18,"column":66}},"5":{"start":{"line":19,"column":26},"end":{"line":19,"column":50}},"6":{"start":{"line":22,"column":4},"end":{"line":25,"column":7}},"7":{"start":{"line":28,"column":19},"end":{"line":28,"column":21}},"8":{"start":{"line":29,"column":4},"end":{"line":36,"column":5}},"9":{"start":{"line":30,"column":19},"end":{"line":30,"column":36}},"10":{"start":{"line":31,"column":6},"end":{"line":31,"column":29}},"11":{"start":{"line":32,"column":6},"end":{"line":35,"column":9}},"12":{"start":{"line":39,"column":4},"end":{"line":42,"column":9}},"13":{"start":{"line":45,"column":2},"end":{"line":45,"column":12}},"14":{"start":{"line":48,"column":0},"end":{"line":52,"column":2}}},"fnMap":{"0":{"name":"buildFolderUrl","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":23}},"loc":{"start":{"line":1,"column":47},"end":{"line":3,"column":1}},"line":1},"1":{"name":"buildFileUrl","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":21}},"loc":{"start":{"line":5,"column":40},"end":{"line":7,"column":1}},"line":5},"2":{"name":"buildBreadcrumbs","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":25}},"loc":{"start":{"line":9,"column":38},"end":{"line":46,"column":1}},"line":9}},"branchMap":{"0":{"loc":{"start":{"line":1,"column":36},"end":{"line":1,"column":45}},"type":"default-arg","locations":[{"start":{"line":1,"column":43},"end":{"line":1,"column":45}}],"line":1},"1":{"loc":{"start":{"line":13,"column":12},"end":{"line":13,"column":34}},"type":"cond-expr","locations":[{"start":{"line":13,"column":19},"end":{"line":13,"column":22}},{"start":{"line":13,"column":25},"end":{"line":13,"column":34}}],"line":13},"2":{"loc":{"start":{"line":17,"column":2},"end":{"line":43,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":43,"column":3}},{"start":{"line":17,"column":2},"end":{"line":43,"column":3}}],"line":17},"3":{"loc":{"start":{"line":18,"column":28},"end":{"line":18,"column":38}},"type":"binary-expr","locations":[{"start":{"line":18,"column":28},"end":{"line":18,"column":32}},{"start":{"line":18,"column":36},"end":{"line":18,"column":38}}],"line":18},"4":{"loc":{"start":{"line":24,"column":12},"end":{"line":24,"column":65}},"type":"cond-expr","locations":[{"start":{"line":24,"column":36},"end":{"line":24,"column":53}},{"start":{"line":24,"column":56},"end":{"line":24,"column":65}}],"line":24},"5":{"loc":{"start":{"line":39,"column":4},"end":{"line":42,"column":8}},"type":"binary-expr","locations":[{"start":{"line":39,"column":4},"end":{"line":39,"column":15}},{"start":{"line":40,"column":6},"end":{"line":42,"column":8}}],"line":39}},"s":{"0":1,"1":1,"2":4,"3":4,"4":3,"5":3,"6":3,"7":3,"8":3,"9":2,"10":2,"11":2,"12":3,"13":4,"14":4},"f":{"0":1,"1":1,"2":4},"b":{"0":[0],"1":[3,1],"2":[3,1],"3":[3,1],"4":[2,1],"5":[3,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"8d20ecb83b083c658cf10066ee6982a63691ccf4"} +} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 0000000..417c7ad --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,212 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } + + +.medium .chart { border:1px solid #666; } +.medium .cover-fill { background: #666; } + +.cbranch-no { background: yellow !important; color: #111; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } +.medium { background: #eaeaea; } + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/controllers/contentController.js.html b/coverage/lcov-report/controllers/contentController.js.html new file mode 100644 index 0000000..0f52a27 --- /dev/null +++ b/coverage/lcov-report/controllers/contentController.js.html @@ -0,0 +1,164 @@ + + + + Code coverage report for controllers/contentController.js + + + + + + + +
+
+

+ All files / controllers contentController.js +

+
+
+ 81.25% + Statements + 13/16 +
+
+ 60% + Branches + 9/15 +
+
+ 75% + Functions + 3/4 +
+
+ 81.25% + Lines + 13/16 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +341x +1x +  +1x +1x +1x +1x +1x +  +1x +1x +  +1x +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +  + 
const { gitFileContent, gitFileTree } = require("../utils/git");
+const { buildBreadcrumbs } = require("../utils/navigation");
+ 
+module.exports = function(req, res, next, ...rest) {
+  const stubs = (rest && rest[0]) || {};
+  const _gitFileTree = stubs.gitFileTree || gitFileTree;
+  const _gitFileContent = stubs.gitFileContent || gitFileContent;
+  const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs;
+ 
+  const { hash } = req.params;
+  const path = req.params[0].split("/").filter(Boolean);
+ 
+  return _gitFileTree(hash, path.join("/"))
+    .then(function([file]) {
+      Iif (file && file.type === "blob") {
+        return _gitFileContent(file.hash);
+      }
+    })
+    .then(
+      content => {
+        Iif (content) {
+          res.render("content", {
+            title: "content",
+            breadcrumbs: _buildBreadcrumbs(hash, path.join("/")),
+            content
+          });
+        } else {
+          next();
+        }
+      },
+      err => next(err)
+    );
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/controllers/filesController.js.html b/coverage/lcov-report/controllers/filesController.js.html new file mode 100644 index 0000000..491465b --- /dev/null +++ b/coverage/lcov-report/controllers/filesController.js.html @@ -0,0 +1,203 @@ + + + + Code coverage report for controllers/filesController.js + + + + + + + +
+
+

+ All files / controllers filesController.js +

+
+
+ 73.68% + Statements + 14/19 +
+
+ 50% + Branches + 8/16 +
+
+ 60% + Functions + 3/5 +
+
+ 72.22% + Lines + 13/18 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +471x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +2x +2x +2x +2x +  +2x +2x +  +2x +  +2x +  +2x +  +  +  +  +  +2x +  +  +  +  +  +  +  +  + 
const { gitFileTree } = require("../utils/git");
+const {
+  buildFolderUrl,
+  buildFileUrl,
+  buildBreadcrumbs
+} = require("../utils/navigation");
+ 
+function buildObjectUrl(parentHash, { path, type }) {
+  switch (type) {
+    case "tree":
+      return buildFolderUrl(parentHash, path);
+    case "blob":
+      return buildFileUrl(parentHash, path);
+    default:
+      return "#";
+  }
+}
+ 
+module.exports = function(req, res, next, ...rest) {
+  const stubs = (rest && rest[0]) || {};
+  const _gitFileTree = stubs.gitFileTree || gitFileTree;
+  const _buildObjectUrl = stubs.buildObjectUrl || buildObjectUrl;
+  const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs;
+ 
+  const { hash } = req.params;
+  const pathParam = (req.params[0] || "").split("/").filter(Boolean);
+ 
+  const path = pathParam.length ? pathParam.join("/") + "/" : "";
+ 
+  return _gitFileTree(hash, path).then(
+    list => {
+      const files = list.map(item => ({
+        ...item,
+        href: _buildObjectUrl(hash, item),
+        name: item.path.split("/").pop()
+      }));
+ 
+      res.render("files", {
+        title: "files",
+        breadcrumbs: _buildBreadcrumbs(hash, pathParam.join("/")),
+        files
+      });
+    },
+    err => next(err)
+  );
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/controllers/index.html b/coverage/lcov-report/controllers/index.html new file mode 100644 index 0000000..6d9f593 --- /dev/null +++ b/coverage/lcov-report/controllers/index.html @@ -0,0 +1,119 @@ + + + + Code coverage report for controllers + + + + + + + +
+
+

+ All files controllers +

+
+
+ 80.85% + Statements + 38/47 +
+
+ 55% + Branches + 22/40 +
+
+ 69.23% + Functions + 9/13 +
+
+ 80% + Lines + 36/45 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
contentController.js
81.25%13/1660%9/1575%3/481.25%13/16
filesController.js
73.68%14/1950%8/1660%3/572.22%13/18
indexController.js
91.67%11/1255.56%5/975%3/490.91%10/11
+
+
+ + + + + + + diff --git a/coverage/lcov-report/controllers/indexController.js.html b/coverage/lcov-report/controllers/indexController.js.html new file mode 100644 index 0000000..82729a0 --- /dev/null +++ b/coverage/lcov-report/controllers/indexController.js.html @@ -0,0 +1,140 @@ + + + + Code coverage report for controllers/indexController.js + + + + + + + +
+
+

+ All files / controllers indexController.js +

+
+
+ 91.67% + Statements + 11/12 +
+
+ 55.56% + Branches + 5/9 +
+
+ 75% + Functions + 3/4 +
+
+ 90.91% + Lines + 10/11 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +261x +1x +  +1x +2x +2x +2x +2x +  +2x +  +2x +  +  +  +  +2x +  +  +  +  +  +  +  +  + 
const { gitHistory } = require("../utils/git");
+const { buildFolderUrl, buildBreadcrumbs } = require("../utils/navigation");
+ 
+module.exports = function(req, res, next, ...rest) {
+  const stubs = (rest && rest[0]) || {};
+  const _gitHistory = stubs.gitHistory || gitHistory;
+  const _buildFolderUrl = stubs.buildFolderUrl || buildFolderUrl;
+  const _buildBreadcrumbs = stubs.buildBreadcrumbs || buildBreadcrumbs;
+ 
+  return _gitHistory(1, 20).then(
+    history => {
+      const list = history.map(item => ({
+        ...item,
+        href: _buildFolderUrl(item.hash, "")
+      }));
+ 
+      res.render("index", {
+        title: "history",
+        breadcrumbs: _buildBreadcrumbs(),
+        list
+      });
+    },
+    err => next(err)
+  );
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/git.js.html b/coverage/lcov-report/git.js.html new file mode 100644 index 0000000..9444eaf --- /dev/null +++ b/coverage/lcov-report/git.js.html @@ -0,0 +1,299 @@ + + + + Code coverage report for git.js + + + + + + + +
+
+

+ All files git.js +

+
+
+ 47.83% + Statements + 11/23 +
+
+ 33.33% + Branches + 2/6 +
+
+ 40% + Functions + 4/10 +
+
+ 47.83% + Lines + 11/23 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +791x +1x +  +1x +  +  +2x +2x +2x +1x +  +  +2x +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  + 
const { resolve } = require("path");
+const REPO = resolve(".");
+ 
+const { execFile } = require("child_process");
+ 
+function executeGit(cmd, args) {
+  return new Promise((resolve, reject) => {
+    execFile(cmd, args, { cwd: REPO }, (err, stdout) => {
+      if (err) {
+        reject(err);
+      }
+ 
+      resolve(stdout.toString());
+    });
+  });
+}
+ 
+function parseHistoryItem(line) {
+  const [hash, author, timestamp, msg] = line.split("\t");
+ 
+  return {
+    hash,
+    author,
+    timestamp,
+    msg
+  };
+}
+ 
+function gitHistory(page = 1, size = 10) {
+  const offset = (page - 1) * size;
+ 
+  return executeGit("git", [
+    "log",
+    "--pretty=format:%H%x09%an%x09%ad%x09%s",
+    "--date=iso",
+    "--skip",
+    offset,
+    "-n",
+    size
+  ]).then(data => {
+    return data
+      .split("\n")
+      .filter(Boolean)
+      .map(parseHistoryItem);
+  });
+}
+ 
+function parseFileTreeItem(line) {
+  const [info, path] = line.split("\t");
+  const [, type, hash] = info.split(" ");
+ 
+  return { type, hash, path };
+}
+ 
+function gitFileTree(hash, path) {
+  const params = ["ls-tree", hash];
+  path && params.push(path);
+ 
+  return executeGit("git", params).then(data => {
+    console.log(data);
+    return data
+      .split("\n")
+      .filter(Boolean)
+      .map(parseFileTreeItem);
+  });
+}
+ 
+function gitFileContent(hash) {
+  return executeGit("git", ["show", hash]);
+}
+ 
+module.exports = {
+  gitHistory,
+  gitFileTree,
+  gitFileContent,
+  parseHistoryItem,
+  executeGit
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html new file mode 100644 index 0000000..1c69451 --- /dev/null +++ b/coverage/lcov-report/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ All files +

+
+
+ 85.06% + Statements + 74/87 +
+
+ 64.06% + Branches + 41/64 +
+
+ 73.08% + Functions + 19/26 +
+
+ 84.71% + Lines + 72/85 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
controllers
80.85%38/4755%22/4069.23%9/1380%36/45
utils
90%36/4079.17%19/2476.92%10/1390%36/40
+
+
+ + + + + + + diff --git a/coverage/lcov-report/navigation.js.html b/coverage/lcov-report/navigation.js.html new file mode 100644 index 0000000..1cd2574 --- /dev/null +++ b/coverage/lcov-report/navigation.js.html @@ -0,0 +1,221 @@ + + + + Code coverage report for navigation.js + + + + + + + +
+
+

+ All files navigation.js +

+
+
+ 13.33% + Statements + 2/15 +
+
+ 0% + Branches + 0/11 +
+
+ 33.33% + Functions + 1/3 +
+
+ 13.33% + Lines + 2/15 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  + 
function buildFolderUrl(parentHash, path = '') {
+  return `/files/${parentHash}/${path}`;
+}
+ 
+function buildFileUrl(parentHash, path) {
+  return `/content/${parentHash}/${path}`;
+}
+ 
+function buildBreadcrumbs(hash, path) {
+  const bc = [
+    {
+      text: 'HISTORY',
+      href: hash ? '/' : undefined
+    }
+  ];
+ 
+  if (hash) {
+    const normalizedPath = (path || '').split('/').filter(Boolean);
+    const [currentName] = normalizedPath.slice(-1);
+ 
+    // root folder
+    bc.push({
+      text: 'ROOT',
+      href: normalizedPath.length ? `/files/${hash}/` : undefined
+    });
+ 
+    // path
+    let fullPath = '';
+    for (let i = 0; i < normalizedPath.length - 1; i++) {
+      const part = normalizedPath[i];
+      fullPath += `${part}/`;
+      bc.push({
+        text: part,
+        href: `/files/${hash}/${fullPath}`
+      });
+    }
+ 
+    // last part
+    currentName &&
+      bc.push({
+        text: currentName
+      });
+  }
+ 
+  return bc;
+}
+ 
+module.exports = {
+  buildFolderUrl,
+  buildFileUrl,
+  buildBreadcrumbs
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000..03f704a Binary files /dev/null and b/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js new file mode 100644 index 0000000..6c5034e --- /dev/null +++ b/coverage/lcov-report/sorter.js @@ -0,0 +1,158 @@ +var addSorting = (function () { + "use strict"; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { return document.querySelector('.coverage-summary'); } + // returns the thead element of the summary table + function getTableHeader() { return getTable().querySelector('thead tr'); } + // returns the tbody element of the summary table + function getTableBody() { return getTable().querySelector('tbody'); } + // returns the th element for nth column + function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/coverage/lcov-report/te/index.html b/coverage/lcov-report/te/index.html new file mode 100644 index 0000000..63d1e08 --- /dev/null +++ b/coverage/lcov-report/te/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for te + + + + + + + +
+
+

+ All files te +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 3/3 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
obertka.js
100%4/4100%0/0100%1/1100%3/3
+
+
+ + + + + + + diff --git a/coverage/lcov-report/te/math.js.html b/coverage/lcov-report/te/math.js.html new file mode 100644 index 0000000..174fdda --- /dev/null +++ b/coverage/lcov-report/te/math.js.html @@ -0,0 +1,80 @@ + + + + Code coverage report for te/math.js + + + + + + + +
+
+

+ All files / te math.js +

+
+
+ 100% + Statements + 3/3 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 2/2 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +61x +  +1x +  +  + 
const add = (a, b) => a + b;
+ 
+module.exports = {
+  add
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/te/obertka.js.html b/coverage/lcov-report/te/obertka.js.html new file mode 100644 index 0000000..9507021 --- /dev/null +++ b/coverage/lcov-report/te/obertka.js.html @@ -0,0 +1,80 @@ + + + + Code coverage report for te/obertka.js + + + + + + + +
+
+

+ All files / te obertka.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 3/3 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +61x +  +1x +  +1x + 
const add = require("./math");
+ 
+const doAdd = (a, b) => add(a, b);
+ 
+module.exports = doAdd;
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/utils/git.js.html b/coverage/lcov-report/utils/git.js.html new file mode 100644 index 0000000..c4afad6 --- /dev/null +++ b/coverage/lcov-report/utils/git.js.html @@ -0,0 +1,311 @@ + + + + Code coverage report for utils/git.js + + + + + + + +
+
+

+ All files / utils git.js +

+
+
+ 84% + Statements + 21/25 +
+
+ 69.23% + Branches + 9/13 +
+
+ 70% + Functions + 7/10 +
+
+ 84% + Lines + 21/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +834x +4x +  +4x +  +  +2x +2x +2x +1x +  +  +2x +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +  +  +  +3x +3x +3x +  +3x +3x +  +3x +3x +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  + 
const { resolve } = require("path");
+const REPO = resolve(".");
+ 
+const { execFile } = require("child_process");
+ 
+function executeGit(cmd, args) {
+  return new Promise((resolve, reject) => {
+    execFile(cmd, args, { cwd: REPO }, (err, stdout) => {
+      if (err) {
+        reject(err);
+      }
+ 
+      resolve(stdout.toString());
+    });
+  });
+}
+ 
+function parseHistoryItem(line) {
+  const [hash, author, timestamp, msg] = line.split("\t");
+ 
+  return {
+    hash,
+    author,
+    timestamp,
+    msg
+  };
+}
+ 
+function gitHistory(page = 1, size = 10) {
+  const offset = (page - 1) * size;
+ 
+  return executeGit("git", [
+    "log",
+    "--pretty=format:%H%x09%an%x09%ad%x09%s",
+    "--date=iso",
+    "--skip",
+    offset,
+    "-n",
+    size
+  ]).then(data => {
+    return data
+      .split("\n")
+      .filter(Boolean)
+      .map(parseHistoryItem);
+  });
+}
+ 
+function parseFileTreeItem(line) {
+  const [info, path] = line.split("\t");
+  const [, type, hash] = info.split(" ");
+ 
+  return { type, hash, path };
+}
+ 
+function gitFileTree(hash, path, ...rest) {
+  const stub = (rest && rest[0]) || {};
+  const _executeGit = stub.executeGit || executeGit;
+  const _parseFileTreeItem = stub.parseFileTreeItem || parseFileTreeItem;
+ 
+  const params = ["ls-tree", hash];
+  path && params.push(path);
+ 
+  return _executeGit("git", params).then(data => {
+    return data
+      .split("\n")
+      .filter(Boolean)
+      .map(_parseFileTreeItem);
+  });
+}
+ 
+function gitFileContent(hash) {
+  return executeGit("git", ["show", hash]);
+}
+ 
+module.exports = {
+  gitHistory,
+  gitFileTree,
+  gitFileContent,
+  parseHistoryItem,
+  parseFileTreeItem,
+  executeGit
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/utils/index.html b/coverage/lcov-report/utils/index.html new file mode 100644 index 0000000..cb4fde9 --- /dev/null +++ b/coverage/lcov-report/utils/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for utils + + + + + + + +
+
+

+ All files utils +

+
+
+ 90% + Statements + 36/40 +
+
+ 79.17% + Branches + 19/24 +
+
+ 76.92% + Functions + 10/13 +
+
+ 90% + Lines + 36/40 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
git.js
84%21/2569.23%9/1370%7/1084%21/25
navigation.js
100%15/1590.91%10/11100%3/3100%15/15
+
+
+ + + + + + + diff --git a/coverage/lcov-report/utils/navigation.js.html b/coverage/lcov-report/utils/navigation.js.html new file mode 100644 index 0000000..7357028 --- /dev/null +++ b/coverage/lcov-report/utils/navigation.js.html @@ -0,0 +1,221 @@ + + + + Code coverage report for utils/navigation.js + + + + + + + +
+
+

+ All files / utils navigation.js +

+
+
+ 100% + Statements + 15/15 +
+
+ 90.91% + Branches + 10/11 +
+
+ 100% + Functions + 3/3 +
+
+ 100% + Lines + 15/15 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53  +1x +  +  +  +1x +  +  +  +4x +  +  +  +  +  +  +4x +3x +3x +  +  +3x +  +  +  +  +  +3x +3x +2x +2x +2x +  +  +  +  +  +  +3x +  +  +  +  +  +4x +  +  +4x +  +  +  +  + 
function buildFolderUrl(parentHash, path = '') {
+  return `/files/${parentHash}/${path}`;
+}
+ 
+function buildFileUrl(parentHash, path) {
+  return `/content/${parentHash}/${path}`;
+}
+ 
+function buildBreadcrumbs(hash, path) {
+  const bc = [
+    {
+      text: 'HISTORY',
+      href: hash ? '/' : undefined
+    }
+  ];
+ 
+  if (hash) {
+    const normalizedPath = (path || '').split('/').filter(Boolean);
+    const [currentName] = normalizedPath.slice(-1);
+ 
+    // root folder
+    bc.push({
+      text: 'ROOT',
+      href: normalizedPath.length ? `/files/${hash}/` : undefined
+    });
+ 
+    // path
+    let fullPath = '';
+    for (let i = 0; i < normalizedPath.length - 1; i++) {
+      const part = normalizedPath[i];
+      fullPath += `${part}/`;
+      bc.push({
+        text: part,
+        href: `/files/${hash}/${fullPath}`
+      });
+    }
+ 
+    // last part
+    currentName &&
+      bc.push({
+        text: currentName
+      });
+  }
+ 
+  return bc;
+}
+ 
+module.exports = {
+  buildFolderUrl,
+  buildFileUrl,
+  buildBreadcrumbs
+};
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000..d5f986e --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,246 @@ +TN: +SF:C:\Peter\workspace\Yandex\homeworks\testing\controllers\contentController.js +FN:4,(anonymous_0) +FN:14,(anonymous_1) +FN:20,(anonymous_2) +FN:31,(anonymous_3) +FNF:4 +FNH:3 +FNDA:1,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:1,(anonymous_2) +FNDA:0,(anonymous_3) +DA:1,1 +DA:2,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:10,1 +DA:11,1 +DA:13,1 +DA:15,1 +DA:16,0 +DA:21,1 +DA:22,0 +DA:28,1 +DA:31,0 +LF:16 +LH:13 +BRDA:5,0,0,1 +BRDA:5,0,1,1 +BRDA:5,0,2,0 +BRDA:6,1,0,1 +BRDA:6,1,1,0 +BRDA:7,2,0,1 +BRDA:7,2,1,0 +BRDA:8,3,0,1 +BRDA:8,3,1,0 +BRDA:15,4,0,0 +BRDA:15,4,1,1 +BRDA:15,5,0,1 +BRDA:15,5,1,1 +BRDA:21,6,0,0 +BRDA:21,6,1,1 +BRF:15 +BRH:9 +end_of_record +TN: +SF:C:\Peter\workspace\Yandex\homeworks\testing\controllers\filesController.js +FN:8,buildObjectUrl +FN:19,(anonymous_1) +FN:31,(anonymous_2) +FN:32,(anonymous_3) +FN:44,(anonymous_4) +FNF:5 +FNH:3 +FNDA:0,buildObjectUrl +FNDA:2,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:2,(anonymous_3) +FNDA:0,(anonymous_4) +DA:1,1 +DA:6,1 +DA:9,0 +DA:11,0 +DA:13,0 +DA:15,0 +DA:19,1 +DA:20,2 +DA:21,2 +DA:22,2 +DA:23,2 +DA:25,2 +DA:26,2 +DA:28,2 +DA:30,2 +DA:32,2 +DA:38,2 +DA:44,0 +LF:18 +LH:13 +BRDA:9,0,0,0 +BRDA:9,0,1,0 +BRDA:9,0,2,0 +BRDA:20,1,0,2 +BRDA:20,1,1,2 +BRDA:20,1,2,0 +BRDA:21,2,0,2 +BRDA:21,2,1,0 +BRDA:22,3,0,2 +BRDA:22,3,1,0 +BRDA:23,4,0,2 +BRDA:23,4,1,0 +BRDA:26,5,0,2 +BRDA:26,5,1,2 +BRDA:28,6,0,0 +BRDA:28,6,1,2 +BRF:16 +BRH:8 +end_of_record +TN: +SF:C:\Peter\workspace\Yandex\homeworks\testing\controllers\indexController.js +FN:4,(anonymous_0) +FN:11,(anonymous_1) +FN:12,(anonymous_2) +FN:23,(anonymous_3) +FNF:4 +FNH:3 +FNDA:2,(anonymous_0) +FNDA:2,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:0,(anonymous_3) +DA:1,1 +DA:2,1 +DA:4,1 +DA:5,2 +DA:6,2 +DA:7,2 +DA:8,2 +DA:10,2 +DA:12,2 +DA:17,2 +DA:23,0 +LF:11 +LH:10 +BRDA:5,0,0,2 +BRDA:5,0,1,2 +BRDA:5,0,2,0 +BRDA:6,1,0,2 +BRDA:6,1,1,0 +BRDA:7,2,0,2 +BRDA:7,2,1,0 +BRDA:8,3,0,2 +BRDA:8,3,1,0 +BRF:9 +BRH:5 +end_of_record +TN: +SF:C:\Peter\workspace\Yandex\homeworks\testing\utils\git.js +FN:6,executeGit +FN:7,(anonymous_1) +FN:8,(anonymous_2) +FN:18,parseHistoryItem +FN:29,gitHistory +FN:40,(anonymous_5) +FN:48,parseFileTreeItem +FN:55,gitFileTree +FN:63,(anonymous_8) +FN:71,gitFileContent +FNF:10 +FNH:7 +FNDA:2,executeGit +FNDA:2,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:1,parseHistoryItem +FNDA:0,gitHistory +FNDA:0,(anonymous_5) +FNDA:1,parseFileTreeItem +FNDA:3,gitFileTree +FNDA:3,(anonymous_8) +FNDA:0,gitFileContent +DA:1,4 +DA:2,4 +DA:4,4 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,1 +DA:13,2 +DA:19,1 +DA:21,1 +DA:30,0 +DA:32,0 +DA:41,0 +DA:49,1 +DA:50,1 +DA:52,1 +DA:56,3 +DA:57,3 +DA:58,3 +DA:60,3 +DA:61,3 +DA:63,3 +DA:64,3 +DA:72,0 +DA:75,4 +LF:25 +LH:21 +BRDA:9,0,0,1 +BRDA:9,0,1,1 +BRDA:29,1,0,0 +BRDA:29,2,0,0 +BRDA:56,3,0,3 +BRDA:56,3,1,3 +BRDA:56,3,2,0 +BRDA:57,4,0,3 +BRDA:57,4,1,0 +BRDA:58,5,0,3 +BRDA:58,5,1,3 +BRDA:61,6,0,3 +BRDA:61,6,1,1 +BRF:13 +BRH:9 +end_of_record +TN: +SF:C:\Peter\workspace\Yandex\homeworks\testing\utils\navigation.js +FN:1,buildFolderUrl +FN:5,buildFileUrl +FN:9,buildBreadcrumbs +FNF:3 +FNH:3 +FNDA:1,buildFolderUrl +FNDA:1,buildFileUrl +FNDA:4,buildBreadcrumbs +DA:2,1 +DA:6,1 +DA:10,4 +DA:17,4 +DA:18,3 +DA:19,3 +DA:22,3 +DA:28,3 +DA:29,3 +DA:30,2 +DA:31,2 +DA:32,2 +DA:39,3 +DA:45,4 +DA:48,4 +LF:15 +LH:15 +BRDA:1,0,0,0 +BRDA:13,1,0,3 +BRDA:13,1,1,1 +BRDA:17,2,0,3 +BRDA:17,2,1,1 +BRDA:18,3,0,3 +BRDA:18,3,1,1 +BRDA:24,4,0,2 +BRDA:24,4,1,1 +BRDA:39,5,0,3 +BRDA:39,5,1,2 +BRF:11 +BRH:10 +end_of_record diff --git a/hermione/custom-commands.js b/hermione/custom-commands.js new file mode 100644 index 0000000..037ba10 --- /dev/null +++ b/hermione/custom-commands.js @@ -0,0 +1,18 @@ +const assert = require("assert"); + +module.exports = (hermione, opts) => { + hermione.on(hermione.events.NEW_BROWSER, browser => { + browser.addCommand("assertNavigation", (selector, expectSelector) => { + return browser + .isExisting(selector) + .then(exists => { + assert.ok(exists, "Ссылка для перехода не найдена"); + }) + .click(selector) + .isExisting(expectSelector) + .then(exists => { + assert.ok(exists, "Переход по ссылке происходит некорректно"); + }); + }); + }); +}; diff --git a/hermione/hermione-html-report/data.js b/hermione/hermione-html-report/data.js new file mode 100644 index 0000000..f74f4e2 --- /dev/null +++ b/hermione/hermione-html-report/data.js @@ -0,0 +1,2 @@ +var data = {"skips":[],"suites":[{"name":"Отображение страниц","suitePath":["Отображение страниц"],"children":[{"name":"История коммитов","suitePath":["Отображение страниц","История коммитов"],"children":[{"name":"Корректность отображения","suitePath":["Отображение страниц","История коммитов","Корректность отображения"],"browsers":[{"name":"chrome","result":{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"aecaa52187b5e9ccf139ef96eeb9d313"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromise0 (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:614:10)\n at Promise._settlePromises (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:694:18)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:138:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)"},"attempt":8},"retries":[{"suiteUrl":"http://localhost:3000/","name":"chrome","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"f6fe54842d48320ca5dc31c599a69fff"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png","status":"error","reason":{"message":"can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png for \"page view\" state","stack":"NoRefImageError: can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png for \"page view\" state\n at Function.fromObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\errors\\no-ref-image-error.js:7:16)\n at AssertViewResults.create.results.map (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:10:73)\n at Array.map ()\n at Function.fromRawObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:8:49)\n at RegularTestRunner._applyTestResults (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:60:59)\n at RegularTestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:30:18)\n at "},"actualPath":"images\\072a4bf\\page view\\chrome~current_0.png"}],"screenshot":false,"multipleTabs":true,"status":"fail","reason":{"message":"image comparison failed","stack":"AssertViewError: image comparison failed\n at TestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:57:21)\n at "},"attempt":0},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"unknown session id"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Timed out waiting for driver server to start.\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown","stack":"Error: Timed out waiting for driver server to start.\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown\n at new RuntimeError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\ErrorHandler.js:144:12)\n at Request._callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\RequestHandler.js:313:39)\n at Request.self.callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:186:22)\n at emitTwo (events.js:126:13)\n at Request.emit (events.js:214:7)\n at Request. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1163:10)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at IncomingMessage. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1085:12)\n at Object.onceWrapper (events.js:313:30)\n at emitNone (events.js:111:20)\n at IncomingMessage.emit (events.js:208:7)\n at endReadableNT (_stream_readable.js:1064:12)\n at _combinedTickCallback (internal/process/next_tick.js:138:11)\n at process._tickDomainCallback (internal/process/next_tick.js:218:9)"},"attempt":1},{"suiteUrl":"/","name":"chrome","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"867a7edbbff7ac45fb6a4c18ad86d459"},"imagesInfo":[{"status":"updated","actualPath":"images\\072a4bf\\page view\\chrome~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png","expectedPath":"images\\072a4bf\\page view\\chrome~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/","name":"chrome","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"d3c869706a532f7b35d365919b924055"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png","status":"success","expectedPath":"images\\072a4bf\\page view\\chrome~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d8ad29a9afdaf028e86656ebb2fc4a9b"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"http://localhost:3000/","name":"chrome","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"356cc298ad6c8da380a7e2ee6520fd66"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\chrome\\page view.png","status":"success","expectedPath":"images\\072a4bf\\page view\\chrome~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0b589cdd29b1768da23d7eb5690a8ce8"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromise0 (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:614:10)\n at Promise._settlePromises (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:694:18)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:138:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)"},"attempt":6},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0701801572e2b0fd565106f1dcdff22f"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromise0 (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:614:10)\n at Promise._settlePromises (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:694:18)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:138:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)"},"attempt":7}]},{"name":"firefox","result":{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d91771c8-2c0d-4262-ab90-9c03c5092bd4"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":8},"retries":[{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"unknown session id"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"connection refused\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown\nremote stacktrace: ","stack":"Error: connection refused\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown\nremote stacktrace: \n at new RuntimeError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\ErrorHandler.js:144:12)\n at Request._callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\RequestHandler.js:313:39)\n at Request.self.callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:186:22)\n at emitTwo (events.js:126:13)\n at Request.emit (events.js:214:7)\n at Request. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1163:10)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at IncomingMessage. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1085:12)\n at Object.onceWrapper (events.js:313:30)\n at emitNone (events.js:111:20)\n at IncomingMessage.emit (events.js:208:7)\n at endReadableNT (_stream_readable.js:1064:12)\n at _combinedTickCallback (internal/process/next_tick.js:138:11)\n at process._tickDomainCallback (internal/process/next_tick.js:218:9)"},"attempt":0},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"unknown session id"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"connection refused\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown\nremote stacktrace: ","stack":"Error: connection refused\nBuild info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'\nSystem info: host: 'MATRIX', ip: '172.17.119.225', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_191'\nDriver info: driver.version: unknown\nremote stacktrace: \n at new RuntimeError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\ErrorHandler.js:144:12)\n at Request._callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\RequestHandler.js:313:39)\n at Request.self.callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:186:22)\n at emitTwo (events.js:126:13)\n at Request.emit (events.js:214:7)\n at Request. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1163:10)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at IncomingMessage. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:1085:12)\n at Object.onceWrapper (events.js:313:30)\n at emitNone (events.js:111:20)\n at IncomingMessage.emit (events.js:208:7)\n at endReadableNT (_stream_readable.js:1064:12)\n at _combinedTickCallback (internal/process/next_tick.js:138:11)\n at process._tickDomainCallback (internal/process/next_tick.js:218:9)"},"attempt":1},{"suiteUrl":"/","name":"firefox","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"aaa74fea-95a9-40bb-a69f-311e19984144"},"imagesInfo":[{"status":"updated","actualPath":"images\\072a4bf\\page view\\firefox~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\firefox\\page view.png","expectedPath":"images\\072a4bf\\page view\\firefox~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/","name":"firefox","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"77c2d517-6de7-4dca-af24-f8a01311f812"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\firefox\\page view.png","status":"success","expectedPath":"images\\072a4bf\\page view\\firefox~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"e69cfa56-71bb-432c-9395-9dec066489a0"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"/","name":"firefox","metaInfo":{"url":"/","file":"hermione\\pages.hermione.js","sessionId":"e202cf61-e217-43aa-8719-27c09e07b158"},"imagesInfo":[{"status":"updated","actualPath":"images\\072a4bf\\page view\\firefox~current_5.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\072a4bf\\firefox\\page view.png","expectedPath":"images\\072a4bf\\page view\\firefox~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"76628f84-ad0f-4d13-a7da-47ebd46e3795"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":6},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"1aa72a32-3ec3-4bbe-97db-99374496fede"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":7}]}],"status":"error"}],"status":"error"},{"name":"Файловая система","suitePath":["Отображение страниц","Файловая система"],"children":[{"name":"Корректность отображения","suitePath":["Отображение страниц","Файловая система","Корректность отображения"],"browsers":[{"name":"chrome","result":{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"aecaa52187b5e9ccf139ef96eeb9d313"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":8},"retries":[{"suiteUrl":"http://localhost:3000/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"chrome","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"f6fe54842d48320ca5dc31c599a69fff"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png","status":"error","reason":{"message":"can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png for \"page view\" state","stack":"NoRefImageError: can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png for \"page view\" state\n at Function.fromObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\errors\\no-ref-image-error.js:7:16)\n at AssertViewResults.create.results.map (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:10:73)\n at Array.map ()\n at Function.fromRawObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:8:49)\n at RegularTestRunner._applyTestResults (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:60:59)\n at RegularTestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:30:18)\n at "},"actualPath":"images\\04c0826\\page view\\chrome~current_0.png"}],"screenshot":false,"multipleTabs":true,"status":"fail","reason":{"message":"image comparison failed","stack":"AssertViewError: image comparison failed\n at TestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:57:21)\n at "},"attempt":0},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"2b46b9be74a662acfdaf129a2d9c8b73"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"connect ECONNREFUSED 0.0.0.0:4444","stack":"Error: Couldn't connect to selenium server\n at element(\"body\") - C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\commands\\scroll.js:94:21\n at scroll(\"body\", 0, 0) - C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:77:39"},"attempt":1},{"suiteUrl":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"chrome","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"867a7edbbff7ac45fb6a4c18ad86d459"},"imagesInfo":[{"status":"updated","actualPath":"images\\04c0826\\page view\\chrome~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png","expectedPath":"images\\04c0826\\page view\\chrome~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"chrome","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"d3c869706a532f7b35d365919b924055"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png","status":"success","expectedPath":"images\\04c0826\\page view\\chrome~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d8ad29a9afdaf028e86656ebb2fc4a9b"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"http://localhost:3000/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"chrome","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"356cc298ad6c8da380a7e2ee6520fd66"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\chrome\\page view.png","status":"success","expectedPath":"images\\04c0826\\page view\\chrome~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0b589cdd29b1768da23d7eb5690a8ce8"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":6},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0701801572e2b0fd565106f1dcdff22f"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":7}]},{"name":"firefox","result":{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d91771c8-2c0d-4262-ab90-9c03c5092bd4"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":8},"retries":[{"suiteUrl":"http://localhost:3000/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"firefox","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"63e6e228-76aa-4829-ac3d-8e2942df5d43"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png","status":"error","reason":{"message":"can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png for \"page view\" state","stack":"NoRefImageError: can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png for \"page view\" state\n at Function.fromObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\errors\\no-ref-image-error.js:7:16)\n at AssertViewResults.create.results.map (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:10:73)\n at Array.map ()\n at Function.fromRawObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:8:49)\n at RegularTestRunner._applyTestResults (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:60:59)\n at RegularTestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:30:18)\n at "},"actualPath":"images\\04c0826\\page view\\firefox~current_0.png"}],"screenshot":false,"multipleTabs":true,"status":"fail","reason":{"message":"image comparison failed","stack":"AssertViewError: image comparison failed\n at TestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:57:21)\n at "},"attempt":0},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"unknown session id"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"read ECONNRESET","stack":"Error: read ECONNRESET\n at new RuntimeError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\ErrorHandler.js:144:12)\n at Request._callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\RequestHandler.js:327:43)\n at self.callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:186:22)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at Request.onRequestError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:878:8)\n at emitOne (events.js:116:13)\n at ClientRequest.emit (events.js:211:7)\n at Socket.socketErrorListener (_http_client.js:387:9)\n at emitOne (events.js:116:13)\n at Socket.emit (events.js:211:7)\n at emitErrorNT (internal/streams/destroy.js:64:8)\n at _combinedTickCallback (internal/process/next_tick.js:138:11)\n at process._tickDomainCallback (internal/process/next_tick.js:218:9)"},"attempt":1},{"suiteUrl":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"firefox","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"aaa74fea-95a9-40bb-a69f-311e19984144"},"imagesInfo":[{"status":"updated","actualPath":"images\\04c0826\\page view\\firefox~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png","expectedPath":"images\\04c0826\\page view\\firefox~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"firefox","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"77c2d517-6de7-4dca-af24-f8a01311f812"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png","status":"success","expectedPath":"images\\04c0826\\page view\\firefox~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"e69cfa56-71bb-432c-9395-9dec066489a0"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","name":"firefox","metaInfo":{"url":"/files/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/","file":"hermione\\pages.hermione.js","sessionId":"e202cf61-e217-43aa-8719-27c09e07b158"},"imagesInfo":[{"status":"updated","actualPath":"images\\04c0826\\page view\\firefox~current_5.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\04c0826\\firefox\\page view.png","expectedPath":"images\\04c0826\\page view\\firefox~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"76628f84-ad0f-4d13-a7da-47ebd46e3795"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":6},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"1aa72a32-3ec3-4bbe-97db-99374496fede"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":7}]}],"status":"error"}],"status":"error"},{"name":"Содержимое файла","suitePath":["Отображение страниц","Содержимое файла"],"children":[{"name":"Корректность отображения","suitePath":["Отображение страниц","Содержимое файла","Корректность отображения"],"browsers":[{"name":"chrome","result":{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"aecaa52187b5e9ccf139ef96eeb9d313"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":8},"retries":[{"suiteUrl":"http://localhost:3000/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"chrome","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"f6fe54842d48320ca5dc31c599a69fff"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png","status":"error","reason":{"message":"can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png for \"page view\" state","stack":"NoRefImageError: can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png for \"page view\" state\n at Function.fromObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\errors\\no-ref-image-error.js:7:16)\n at AssertViewResults.create.results.map (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:10:73)\n at Array.map ()\n at Function.fromRawObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:8:49)\n at RegularTestRunner._applyTestResults (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:60:59)\n at RegularTestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:30:18)\n at "},"actualPath":"images\\2bbc9f4\\page view\\chrome~current_0.png"}],"screenshot":false,"multipleTabs":true,"status":"fail","reason":{"message":"image comparison failed","stack":"AssertViewError: image comparison failed\n at TestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:57:21)\n at "},"attempt":0},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"2b46b9be74a662acfdaf129a2d9c8b73"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"connect ECONNREFUSED 0.0.0.0:4444","stack":"Error: Couldn't connect to selenium server\n at element(\"body\") - C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\commands\\scroll.js:94:21\n at scroll(\"body\", 0, 0) - C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:77:39"},"attempt":1},{"suiteUrl":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"chrome","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"867a7edbbff7ac45fb6a4c18ad86d459"},"imagesInfo":[{"status":"updated","actualPath":"images\\2bbc9f4\\page view\\chrome~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png","expectedPath":"images\\2bbc9f4\\page view\\chrome~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"chrome","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"d3c869706a532f7b35d365919b924055"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png","status":"success","expectedPath":"images\\2bbc9f4\\page view\\chrome~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d8ad29a9afdaf028e86656ebb2fc4a9b"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"http://localhost:3000/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"chrome","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"356cc298ad6c8da380a7e2ee6520fd66"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\chrome\\page view.png","status":"success","expectedPath":"images\\2bbc9f4\\page view\\chrome~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0b589cdd29b1768da23d7eb5690a8ce8"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":6},{"suiteUrl":"","name":"chrome","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"0701801572e2b0fd565106f1dcdff22f"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":7}]},{"name":"firefox","result":{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"d91771c8-2c0d-4262-ab90-9c03c5092bd4"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":8},"retries":[{"suiteUrl":"http://localhost:3000/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"firefox","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"63e6e228-76aa-4829-ac3d-8e2942df5d43"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png","status":"error","reason":{"message":"can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png for \"page view\" state","stack":"NoRefImageError: can not find reference image at C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png for \"page view\" state\n at Function.fromObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\errors\\no-ref-image-error.js:7:16)\n at AssertViewResults.create.results.map (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:10:73)\n at Array.map ()\n at Function.fromRawObject (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\browser\\commands\\assert-view\\assert-view-results.js:8:49)\n at RegularTestRunner._applyTestResults (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:60:59)\n at RegularTestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\runner\\test-runner\\regular-test-runner.js:30:18)\n at "},"actualPath":"images\\2bbc9f4\\page view\\firefox~current_0.png"}],"screenshot":false,"multipleTabs":true,"status":"fail","reason":{"message":"image comparison failed","stack":"AssertViewError: image comparison failed\n at TestRunner.run (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:57:21)\n at "},"attempt":0},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"unknown session id"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"connect ECONNREFUSED 0.0.0.0:4444","stack":"Error: connect ECONNREFUSED 0.0.0.0:4444\n at new RuntimeError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\ErrorHandler.js:144:12)\n at Request._callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\build\\lib\\utils\\RequestHandler.js:327:43)\n at self.callback (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:186:22)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at Request.onRequestError (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\@gemini-testing\\webdriverio\\node_modules\\request\\request.js:878:8)\n at emitOne (events.js:121:20)\n at ClientRequest.emit (events.js:211:7)\n at Socket.socketErrorListener (_http_client.js:387:9)\n at emitOne (events.js:116:13)\n at Socket.emit (events.js:211:7)\n at emitErrorNT (internal/streams/destroy.js:64:8)\n at _combinedTickCallback (internal/process/next_tick.js:138:11)\n at process._tickDomainCallback (internal/process/next_tick.js:218:9)"},"attempt":1},{"suiteUrl":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"firefox","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"aaa74fea-95a9-40bb-a69f-311e19984144"},"imagesInfo":[{"status":"updated","actualPath":"images\\2bbc9f4\\page view\\firefox~current_2.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png","expectedPath":"images\\2bbc9f4\\page view\\firefox~ref_2.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":2},{"suiteUrl":"http://localhost:3000/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"firefox","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"77c2d517-6de7-4dca-af24-f8a01311f812"},"imagesInfo":[{"stateName":"page view","refImagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png","status":"success","expectedPath":"images\\2bbc9f4\\page view\\firefox~ref_3.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":3},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"e69cfa56-71bb-432c-9395-9dec066489a0"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"path is not defined","stack":"ReferenceError: path is not defined\n at Object. (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\.hermione.conf.js:22:6)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Module.require (module.js:596:17)\n at require (internal/module.js:11:18)\n at Function._getConfigFromFile (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:27:20)\n at Function.read (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:16:31)\n at new Config (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:38:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\config\\index.js:12:16)\n at new BaseHermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:23:31)\n at new Hermione (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:11:9)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\base-hermione.js:17:16)\n at ipc.on (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:50:47)"},"attempt":4},{"suiteUrl":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","name":"firefox","metaInfo":{"url":"/content/f135c5ab9197d1d0e3f5d6eb5e3da2a3a2125f3a/.editorconfig","file":"hermione\\pages.hermione.js","sessionId":"e202cf61-e217-43aa-8719-27c09e07b158"},"imagesInfo":[{"status":"updated","actualPath":"images\\2bbc9f4\\page view\\firefox~current_5.png","stateName":"page view","imagePath":"C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\hermione\\screens\\2bbc9f4\\firefox\\page view.png","expectedPath":"images\\2bbc9f4\\page view\\firefox~ref_5.png"}],"screenshot":false,"multipleTabs":true,"status":"success","attempt":5},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"76628f84-ad0f-4d13-a7da-47ebd46e3795"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":6},{"suiteUrl":"","name":"firefox","metaInfo":{"url":"","file":"hermione\\pages.hermione.js","sessionId":"1aa72a32-3ec3-4bbe-97db-99374496fede"},"imagesInfo":[],"screenshot":false,"multipleTabs":true,"status":"error","reason":{"message":"Object prototype may only be an Object or null: undefined","stack":"TypeError: Object prototype may only be an Object or null: undefined\n at Function.create ()\n at new TestRunner (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:16:29)\n at Function.create (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\test-runner\\index.js:12:16)\n at Runner.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\runner\\index.js:35:35)\n at Hermione.runTest (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione.js:30:29)\n at syncConfig.then (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\hermione\\lib\\worker\\hermione-facade.js:40:40)\n at tryCatcher (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\util.js:16:23)\n at Promise._settlePromiseFromHandler (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:512:31)\n at Promise._settlePromise (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:569:18)\n at Promise._settlePromiseCtx (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\promise.js:606:10)\n at _drainQueueStep (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:142:12)\n at _drainQueue (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:131:9)\n at Async._drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:147:5)\n at Immediate.Async.drainQueues (C:\\Peter\\workspace\\Yandex\\homeworks\\testing\\node_modules\\bluebird\\js\\release\\async.js:17:14)\n at runCallback (timers.js:794:20)\n at tryOnImmediate (timers.js:752:5)"},"attempt":7}]}],"status":"error"}],"status":"error"}],"status":"error"}],"config":{"defaultView":"all","baseHost":"","scaleImages":false}}; +try { module.exports = data; } catch(e) {} \ No newline at end of file diff --git a/hermione/hermione-html-report/images/04c0826/page view/chrome~current_0.png b/hermione/hermione-html-report/images/04c0826/page view/chrome~current_0.png new file mode 100644 index 0000000..22dddbd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/chrome~current_0.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/chrome~current_2.png b/hermione/hermione-html-report/images/04c0826/page view/chrome~current_2.png new file mode 100644 index 0000000..22dddbd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/chrome~current_2.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_2.png b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_2.png new file mode 100644 index 0000000..22dddbd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_2.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_3.png b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_3.png new file mode 100644 index 0000000..22dddbd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_3.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_5.png b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_5.png new file mode 100644 index 0000000..22dddbd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/chrome~ref_5.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~current_0.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_0.png new file mode 100644 index 0000000..c71b699 Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_0.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~current_2.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_2.png new file mode 100644 index 0000000..c71b699 Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_2.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~current_5.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_5.png new file mode 100644 index 0000000..c13e4ed Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~current_5.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~diff_5.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~diff_5.png new file mode 100644 index 0000000..64480dd Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~diff_5.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_2.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_2.png new file mode 100644 index 0000000..c71b699 Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_2.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_3.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_3.png new file mode 100644 index 0000000..c71b699 Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_3.png differ diff --git a/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_5.png b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_5.png new file mode 100644 index 0000000..c13e4ed Binary files /dev/null and b/hermione/hermione-html-report/images/04c0826/page view/firefox~ref_5.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_0.png b/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_0.png new file mode 100644 index 0000000..157d20b Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_0.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_2.png b/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_2.png new file mode 100644 index 0000000..157d20b Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/chrome~current_2.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_2.png b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_2.png new file mode 100644 index 0000000..157d20b Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_2.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_3.png b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_3.png new file mode 100644 index 0000000..157d20b Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_3.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_5.png b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_5.png new file mode 100644 index 0000000..157d20b Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/chrome~ref_5.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_2.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_2.png new file mode 100644 index 0000000..cde1c95 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_2.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_5.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_5.png new file mode 100644 index 0000000..ddf9106 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~current_5.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~diff_5.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~diff_5.png new file mode 100644 index 0000000..4dfa999 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~diff_5.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_2.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_2.png new file mode 100644 index 0000000..cde1c95 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_2.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_3.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_3.png new file mode 100644 index 0000000..cde1c95 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_3.png differ diff --git a/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_5.png b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_5.png new file mode 100644 index 0000000..ddf9106 Binary files /dev/null and b/hermione/hermione-html-report/images/072a4bf/page view/firefox~ref_5.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_0.png b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_0.png new file mode 100644 index 0000000..f637244 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_0.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_2.png b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_2.png new file mode 100644 index 0000000..f637244 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~current_2.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_2.png b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_2.png new file mode 100644 index 0000000..f637244 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_2.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_3.png b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_3.png new file mode 100644 index 0000000..f637244 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_3.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_5.png b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_5.png new file mode 100644 index 0000000..f637244 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/chrome~ref_5.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_0.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_0.png new file mode 100644 index 0000000..ab0ccde Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_0.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_2.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_2.png new file mode 100644 index 0000000..ab0ccde Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_2.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_5.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_5.png new file mode 100644 index 0000000..c7e3b20 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~current_5.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~diff_5.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~diff_5.png new file mode 100644 index 0000000..e928f9e Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~diff_5.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_2.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_2.png new file mode 100644 index 0000000..ab0ccde Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_2.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_3.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_3.png new file mode 100644 index 0000000..ab0ccde Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_3.png differ diff --git a/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_5.png b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_5.png new file mode 100644 index 0000000..c7e3b20 Binary files /dev/null and b/hermione/hermione-html-report/images/2bbc9f4/page view/firefox~ref_5.png differ diff --git a/hermione/hermione-html-report/index.html b/hermione/hermione-html-report/index.html new file mode 100644 index 0000000..2893cd8 --- /dev/null +++ b/hermione/hermione-html-report/index.html @@ -0,0 +1,10 @@ + + + +HTML report + + + +
+ + diff --git a/hermione/hermione-html-report/report.min.css b/hermione/hermione-html-report/report.min.css new file mode 100644 index 0000000..a329173 --- /dev/null +++ b/hermione/hermione-html-report/report.min.css @@ -0,0 +1 @@ +.report{font:14px Helvetica Neue,Arial,sans-serif}.summary__key{font-weight:700;display:inline}.summary__key:after{content:":"}.summary__key_has-fails{color:#c00}.summary__value{margin-left:5px;margin-right:20px;display:inline}.select_type_view{height:22px;margin-right:4px}.button{cursor:pointer;margin-right:4px;background:#fff;border:1px solid #ccc;border-radius:2px;line-height:10px;padding:5px;outline:0;box-sizing:content-box;transition:border-color .2s,background-color .2s}.button:hover{border-color:#555}.button:disabled{background:#ccc;cursor:default}.button.pressed,.button:active{background:#eee}.button_checked{background:#ffeba0;border-color:#cebe7d}.button.button_type_action{background:#ffde5a}.control-group{display:inline-block;margin-right:4px;white-space:nowrap}.control-group__item{position:relative;margin:0;border-radius:0}.control-group__item:first-child{border-radius:2px 0 0 2px}.control-group__item:last-child{border-radius:0 2px 2px 0}.control-group__item:not(:last-child){border-right:0}.control-group__item:not(:last-child):after{content:"";border-right:1px solid transparent;position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;transition:border-color .2s}.control-group__item:first-child:after{border-radius:2px 0 0 2px}.control-group__item:last-child:after{border-radius:0 2px 2px 0}.control-group__item:hover:after{border-color:#555}.image-box{padding:5px 10px;border:1px solid #ccc;background:#c9c9c9}.image-box__container_scale{display:flex;flex-flow:row wrap}.report_show-only-errors .section_status_skipped,.report_show-only-errors .section_status_success{display:none}.image-box__image{padding:5px 5px 5px 0;display:inline-block;vertical-align:top;flex-basis:33.333%;flex-grow:1;box-sizing:border-box}.image-box__screenshot{max-width:100%;height:auto}.section__title{font-weight:700;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.section__title_skipped{color:#ccc;cursor:default;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text}.section__title:before{height:18px}.section__title:before,.toggle-open__switcher:before{display:inline-block;margin-right:2px;vertical-align:middle;content:"\25BC";color:#000}.section .section__title:hover{color:#2d3e50}.section__title.section__title_skipped:hover{color:#ccc}.section__title_skipped:before{content:none}.section_status_success>.section__title{color:#038035}.section_status_error>.section__title,.section_status_fail>.section__title{color:#c00}.section_status_skipped>.section__title{color:#ccc}.section__body{padding-left:15px}.section__body_guided{border-left:1px dotted #ccc}.section_collapsed .section__body{display:none}.section__icon{display:inline-block;width:19px;height:19px;vertical-align:top;margin-right:1px;padding:0 3px;border:none;opacity:.15;cursor:pointer}.section__icon:hover{opacity:1}.section__icon:before{display:block;width:100%;height:100%;content:"";background-repeat:no-repeat;background-size:100%;background-position:50%}.section__icon_view-local:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgLTAuNzA5IC0zMi4wODEgMTQxLjczMiAxNDEuNzMyIiBoZWlnaHQ9IjE0MS43MzJweCIgaWQ9IkxpdmVsbG9fMSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSItMC43MDkgLTMyLjA4MSAxNDEuNzMyIDE0MS43MzIiIHdpZHRoPSIxNDEuNzMycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxnIGlkPSJMaXZlbGxvXzgwIj48cGF0aCBkPSJNODkuNjY4LDM4Ljc4NmMwLTEwLjc3My04LjczMS0xOS41MTItMTkuNTEtMTkuNTEyUzUwLjY0NiwyOC4wMSw1MC42NDYsMzguNzg2YzAsMTAuNzc0LDguNzMyLDE5LjUxMSwxOS41MTIsMTkuNTExICAgQzgwLjkzNCw1OC4yOTcsODkuNjY4LDQ5LjU2MSw4OS42NjgsMzguNzg2IE0xMjguMzUyLDM4LjcyN2MtMTMuMzE1LDE3LjU5OS0zNC40MjYsMjguOTcyLTU4LjE5MywyOC45NzIgICBjLTIzLjc3LDAtNDQuODc5LTExLjM3My01OC4xOTQtMjguOTcyQzI1LjI3OSwyMS4xMjksNDYuMzg5LDkuNzU2LDcwLjE1OCw5Ljc1NkM5My45MjcsOS43NTYsMTE1LjAzNiwyMS4xMjksMTI4LjM1MiwzOC43MjcgICAgTTE0MC4zMTQsMzguNzZDMTI1LjY2NiwxNS40NzgsOTkuNzI1LDAsNzAuMTU4LDBTMTQuNjQ4LDE1LjQ3OCwwLDM4Ljc2YzE0LjY0OCwyMy4zMTIsNDAuNTkxLDM4LjgxLDcwLjE1OCwzOC44MSAgIFMxMjUuNjY2LDYyLjA3MiwxNDAuMzE0LDM4Ljc2Ii8+PC9nPjxnIGlkPSJMaXZlbGxvXzFfMV8iLz48L3N2Zz4=)}.section__icon_copy-to-clipboard{box-sizing:border-box}.section__icon_copy-to-clipboard:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDUxMiA1MTIiIGhlaWdodD0iNTEycHgiIGlkPSJMYXllcl8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEycHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxwYXRoIGQ9Ik00NjguNDkzLDEwMS42MzdMMzcxLjk1NSw1LjA5OEgxNTkuNTd2NzcuMjMxSDQzLjcyNHY0MjQuNzY5aDMwOC45MjN2LTc3LjIzMWgxMTUuODQ2VjEwMS42Mzd6ICAgTTM3MS45NTUsMzIuNDAxbDY5LjIzNiw2OS4yMzVoLTY5LjIzNlYzMi40MDF6IE02My4wMzEsNDg3Ljc5VjEwMS42MzdoMTczLjc2OXY5Ni41MzhoOTYuNTM4VjQ4Ny43OUg2My4wMzF6IE0yNTYuMTA4LDEwOS42MzIgIGw2OS4yMzYsNjkuMjM1aC02OS4yMzZWMTA5LjYzMnogTTM1Mi42NDcsNDEwLjU2VjE3OC44NjdsLTk2LjUzOC05Ni41MzhoLTc3LjIzMVYyNC40MDZoMTczLjc2OXY5Ni41MzhoOTYuNTM4VjQxMC41NkgzNTIuNjQ3eiIgZmlsbD0iIzM3NDA0RCIvPjwvc3ZnPg==)}.section_collapsed .section__title:before,.toggle-open_collapsed .toggle-open__switcher:before{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.toggle-open__item-key{font-weight:700}.reason{background:#f6f5f3;padding:5px;margin-bottom:5px;font:13px Consolas,Helvetica,monospace}.reason__item-key{font-weight:700}.state-button{position:relative;margin-right:2px;height:22px;display:inline-block;box-shadow:0 0 1px #000;border:1px solid #fff;outline:none;background:#fff;cursor:pointer}.state-title{font-weight:700}.state-title_success,.state-title_updated{color:#038035}.state-title_error,.state-title_fail{color:#c00}.cswitcher__item,.tab-switcher__button{width:22px;padding:0}.cswitcher__item_selected.cswitcher__item:before{content:"";position:absolute;top:0;left:0;background:rgba(4,4,4,.3) no-repeat 3px 2px url('data:image/svg+xml;utf8,');height:20px;width:20px}.cswitcher_color_1{background:#c9c9c9}.cswitcher_color_2{background:#d5ff09}.cswitcher_color_3{background-image:url('data:image/svg+xml;utf8,')}.collapsed,.invisible{display:none}.skipped__list{margin:10px 0;font-weight:700;color:#ccc}a:link,a:visited{text-decoration:none}a:active,a:hover{text-decoration:underline}.tab__item{display:none}.tab__item_active{display:block}.tab__item .button_type_suite-controls{position:sticky;top:0;border-color:#bbb}.tab__item .button_type_suite-controls:hover{border-color:#555}.cswitcher,.tab-switcher{display:inline-block;vertical-align:top;padding:5px}.cswitcher{padding-left:0}.cswitcher:before{content:"Background:";padding-right:4px}.tab-switcher:before{content:"Attempts:";padding-right:4px}.tab-switcher__button_active{background:#ffeba0}.toggle-open{margin:5px 5px 5px 0}.toggle-open__switcher{display:inline-block;cursor:pointer}.toggle-open__content{margin:5px 0;background:#f6f5f3;padding:5px;font-family:Consolas,monospace}.toggle-open_collapsed .toggle-open__content{display:none}.text-input{outline:0;line-height:14px;margin-left:3px;padding:3px 5px;border:1px solid #ccc;border-radius:2px}.overlay{background:rgba(0,0,0,.3);left:0;top:0;right:0;bottom:0;position:fixed;z-index:1}.preloader{width:70px;height:20px;position:absolute;top:50%;left:50%;margin-left:-35px;margin-top:-10px}.preloader>div{background-color:#f7c709;opacity:.7;width:15px;height:15px;border-radius:100%;margin:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;display:inline-block}.preloader>div:first-child{-webkit-animation:scale .75s -.24s infinite cubic-bezier(.2,.68,.18,1.08);animation:scale .75s -.24s infinite cubic-bezier(.2,.68,.18,1.08)}.preloader>div:nth-child(2){-webkit-animation:scale .75s -.12s infinite cubic-bezier(.2,.68,.18,1.08);animation:scale .75s -.12s infinite cubic-bezier(.2,.68,.18,1.08)}.preloader>div:nth-child(3){-webkit-animation:scale .75s 0s infinite cubic-bezier(.2,.68,.18,1.08);animation:scale .75s 0s infinite cubic-bezier(.2,.68,.18,1.08)}@-webkit-keyframes scale{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}45%{-webkit-transform:scale(.1);transform:scale(.1);opacity:.7}80%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}45%{-webkit-transform:scale(.1);transform:scale(.1);opacity:.7}80%{-webkit-transform:scale(1);transform:scale(1);opacity:1}} \ No newline at end of file diff --git a/hermione/hermione-html-report/report.min.js b/hermione/hermione-html-report/report.min.js new file mode 100644 index 0000000..edeb54e --- /dev/null +++ b/hermione/hermione-html-report/report.min.js @@ -0,0 +1,54 @@ +!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=362)}([function(e,t,n){"use strict";e.exports=n(120)},function(e,t,n){e.exports=n(131)()},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(174),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=function(){function e(e,t){for(var n=0;n-1}function h(e,t,n){for(var r=-1,o=null==e?0:e.length;++r-1;);return n}function q(e,t){for(var n=e.length;n--&&k(t,e[n],0)>-1;);return n}function F(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}function H(e){return"\\"+Cn[e]}function B(e,t){return null==e?oe:e[t]}function z(e){return bn.test(e)}function V(e){return _n.test(e)}function W(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function G(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function K(e,t){return function(n){return e(t(n))}}function $(e,t){for(var n=-1,r=e.length,o=0,i=[];++n>>1,qe=[["ary",Ee],["bind",ge],["bindKey",me],["curry",be],["curryRight",_e],["flip",Se],["partial",we],["partialRight",xe],["rearg",ke]],Fe="[object Arguments]",He="[object Array]",Be="[object AsyncFunction]",ze="[object Boolean]",Ve="[object Date]",We="[object DOMException]",Ge="[object Error]",Ke="[object Function]",$e="[object GeneratorFunction]",Ye="[object Map]",Xe="[object Number]",Ze="[object Null]",Qe="[object Object]",Je="[object Proxy]",et="[object RegExp]",tt="[object Set]",nt="[object String]",rt="[object Symbol]",ot="[object Undefined]",it="[object WeakMap]",at="[object WeakSet]",ut="[object ArrayBuffer]",lt="[object DataView]",st="[object Float32Array]",ct="[object Float64Array]",ft="[object Int8Array]",pt="[object Int16Array]",dt="[object Int32Array]",ht="[object Uint8Array]",vt="[object Uint8ClampedArray]",gt="[object Uint16Array]",mt="[object Uint32Array]",yt=/\b__p \+= '';/g,bt=/\b(__p \+=) '' \+/g,_t=/(__e\(.*?\)|\b__t\)) \+\n'';/g,wt=/&(?:amp|lt|gt|quot|#39);/g,xt=/[&<>"']/g,Et=RegExp(wt.source),kt=RegExp(xt.source),St=/<%-([\s\S]+?)%>/g,Ot=/<%([\s\S]+?)%>/g,Tt=/<%=([\s\S]+?)%>/g,Ct=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,At=/^\w*$/,Pt=/^\./,Nt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jt=/[\\^$.*+?()[\]{}|]/g,Rt=RegExp(jt.source),It=/^\s+|\s+$/g,Lt=/^\s+/,Dt=/\s+$/,Mt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ut=/\{\n\/\* \[wrapped with (.+)\] \*/,qt=/,? & /,Ft=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ht=/\\(\\)?/g,Bt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,zt=/\w*$/,Vt=/^[-+]0x[0-9a-f]+$/i,Wt=/^0b[01]+$/i,Gt=/^\[object .+?Constructor\]$/,Kt=/^0o[0-7]+$/i,$t=/^(?:0|[1-9]\d*)$/,Yt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xt=/($^)/,Zt=/['\n\r\u2028\u2029\\]/g,Qt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Jt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",en="["+Jt+"]",tn="["+Qt+"]",nn="[a-z\\xdf-\\xf6\\xf8-\\xff]",rn="[^\\ud800-\\udfff"+Jt+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",on="\\ud83c[\\udffb-\\udfff]",an="(?:\\ud83c[\\udde6-\\uddff]){2}",un="[\\ud800-\\udbff][\\udc00-\\udfff]",ln="[A-Z\\xc0-\\xd6\\xd8-\\xde]",sn="(?:"+nn+"|"+rn+")",cn="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",fn="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",an,un].join("|")+")[\\ufe0e\\ufe0f]?"+cn+")*",pn="[\\ufe0e\\ufe0f]?"+cn+fn,dn="(?:"+["[\\u2700-\\u27bf]",an,un].join("|")+")"+pn,hn="(?:"+["[^\\ud800-\\udfff]"+tn+"?",tn,an,un,"[\\ud800-\\udfff]"].join("|")+")",vn=RegExp("['’]","g"),gn=RegExp(tn,"g"),mn=RegExp(on+"(?="+on+")|"+hn+pn,"g"),yn=RegExp([ln+"?"+nn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[en,ln,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[en,ln+sn,"$"].join("|")+")",ln+"?"+sn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ln+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",dn].join("|"),"g"),bn=RegExp("[\\u200d\\ud800-\\udfff"+Qt+"\\ufe0e\\ufe0f]"),_n=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,wn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],xn=-1,En={};En[st]=En[ct]=En[ft]=En[pt]=En[dt]=En[ht]=En[vt]=En[gt]=En[mt]=!0,En[Fe]=En[He]=En[ut]=En[ze]=En[lt]=En[Ve]=En[Ge]=En[Ke]=En[Ye]=En[Xe]=En[Qe]=En[et]=En[tt]=En[nt]=En[it]=!1;var kn={};kn[Fe]=kn[He]=kn[ut]=kn[lt]=kn[ze]=kn[Ve]=kn[st]=kn[ct]=kn[ft]=kn[pt]=kn[dt]=kn[Ye]=kn[Xe]=kn[Qe]=kn[et]=kn[tt]=kn[nt]=kn[rt]=kn[ht]=kn[vt]=kn[gt]=kn[mt]=!0,kn[Ge]=kn[Ke]=kn[it]=!1;var Sn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},On={"&":"&","<":"<",">":">",'"':""","'":"'"},Tn={"&":"&","<":"<",">":">",""":'"',"'":"'"},Cn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},An=parseFloat,Pn=parseInt,Nn="object"==typeof e&&e&&e.Object===Object&&e,jn="object"==typeof self&&self&&self.Object===Object&&self,Rn=Nn||jn||Function("return this")(),In="object"==typeof t&&t&&!t.nodeType&&t,Ln=In&&"object"==typeof r&&r&&!r.nodeType&&r,Dn=Ln&&Ln.exports===In,Mn=Dn&&Nn.process,Un=function(){try{return Mn&&Mn.binding&&Mn.binding("util")}catch(e){}}(),qn=Un&&Un.isArrayBuffer,Fn=Un&&Un.isDate,Hn=Un&&Un.isMap,Bn=Un&&Un.isRegExp,zn=Un&&Un.isSet,Vn=Un&&Un.isTypedArray,Wn=C("length"),Gn=A(Sn),Kn=A(On),$n=A(Tn),Yn=function e(t){function n(e){if(il(e)&&!mp(e)&&!(e instanceof _)){if(e instanceof o)return e;if(gc.call(e,"__wrapped__"))return na(e)}return new o(e)}function r(){}function o(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=oe}function _(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=De,this.__views__=[]}function A(){var e=new _(this.__wrapped__);return e.__actions__=Uo(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Uo(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Uo(this.__views__),e}function Z(){if(this.__filtered__){var e=new _(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e}function te(){var e=this.__wrapped__.value(),t=this.__dir__,n=mp(e),r=t<0,o=n?e.length:0,i=Ti(0,o,this.__views__),a=i.start,u=i.end,l=u-a,s=r?u:a-1,c=this.__iteratees__,f=c.length,p=0,d=Gc(l,this.__takeCount__);if(!n||!r&&o==l&&d==l)return bo(e,this.__actions__);var h=[];e:for(;l--&&p-1}function ln(e,t){var n=this.__data__,r=Xn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function sn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function rr(e,t,n,r,o,i){var a,u=t&fe,l=t&pe,c=t&de;if(n&&(a=o?n(e,r,o,i):n(e)),a!==oe)return a;if(!ol(e))return e;var f=mp(e);if(f){if(a=Pi(e),!u)return Uo(e,a)}else{var p=Tf(e),d=p==Ke||p==$e;if(bp(e))return Oo(e,u);if(p==Qe||p==Fe||d&&!o){if(a=l||d?{}:Ni(e),!u)return l?Ho(e,Jn(a,e)):Fo(e,Qn(a,e))}else{if(!kn[p])return o?e:{};a=ji(e,p,rr,u)}}i||(i=new _n);var h=i.get(e);if(h)return h;i.set(e,a);var v=c?l?bi:yi:l?Hl:Fl,g=f?oe:v(e);return s(g||e,function(r,o){g&&(o=r,r=e[o]),Wn(a,o,rr(r,t,n,o,e,i))}),a}function or(e){var t=Fl(e);return function(n){return ir(n,e,t)}}function ir(e,t,n){var r=n.length;if(null==e)return!r;for(e=uc(e);r--;){var o=n[r],i=t[o],a=e[o];if(a===oe&&!(o in e)||!i(a))return!1}return!0}function ar(e,t,n){if("function"!=typeof e)throw new cc(ue);return Pf(function(){e.apply(oe,n)},t)}function ur(e,t,n,r){var o=-1,i=d,a=!0,u=e.length,l=[],s=t.length;if(!u)return l;n&&(t=v(t,L(n))),r?(i=h,a=!1):t.length>=ie&&(i=M,a=!1,t=new mn(t));e:for(;++oo?0:o+n),r=r===oe||r>o?o:xl(r),r<0&&(r+=o),r=n>r?0:El(r);n0&&n(u)?t>1?pr(u,t-1,n,r,o):g(o,u):r||(o[o.length]=u)}return o}function dr(e,t){return e&&mf(e,t,Fl)}function hr(e,t){return e&&yf(e,t,Fl)}function vr(e,t){return p(t,function(t){return tl(e[t])})}function gr(e,t){t=ko(t,e);for(var n=0,r=t.length;null!=e&&nt}function _r(e,t){return null!=e&&gc.call(e,t)}function wr(e,t){return null!=e&&t in uc(e)}function xr(e,t,n){return e>=Gc(t,n)&&e=120&&c.length>=120)?new mn(a&&c):oe}c=e[0];var f=-1,p=u[0];e:for(;++f-1;)u!==e&&Pc.call(u,l,1),Pc.call(e,l,1);return e}function Qr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var o=t[n];if(n==r||o!==i){var i=o;Li(o)?Pc.call(e,o,1):go(e,o)}}return e}function Jr(e,t){return e+qc(Yc()*(t-e+1))}function eo(e,t,n,r){for(var o=-1,i=Wc(Uc((t-e)/(n||1)),0),a=nc(i);i--;)a[r?i:++o]=e,e+=n;return a}function to(e,t){var n="";if(!e||t<1||t>Re)return n;do{t%2&&(n+=e),(t=qc(t/2))&&(e+=e)}while(t);return n}function no(e,t){return Nf(Ki(e,t,Ps),e+"")}function ro(e){return In(Jl(e))}function oo(e,t){var n=Jl(e);return Qi(n,nr(t,0,n.length))}function io(e,t,n,r){if(!ol(e))return e;t=ko(t,e);for(var o=-1,i=t.length,a=i-1,u=e;null!=u&&++oo?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=nc(o);++r>>1,a=e[i];null!==a&&!gl(a)&&(n?a<=t:a=ie){var s=t?null:Ef(e);if(s)return Y(s);a=!1,o=M,l=new mn}else l=t?[]:u;e:for(;++r=r?e:uo(e,t,n)}function Oo(e,t){if(t)return e.slice();var n=e.length,r=Oc?Oc(n):new e.constructor(n);return e.copy(r),r}function To(e){var t=new e.constructor(e.byteLength);return new Sc(t).set(new Sc(e)),t}function Co(e,t){var n=t?To(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}function Ao(e,t,n){return m(t?n(G(e),fe):G(e),i,new e.constructor)}function Po(e){var t=new e.constructor(e.source,zt.exec(e));return t.lastIndex=e.lastIndex,t}function No(e,t,n){return m(t?n(Y(e),fe):Y(e),a,new e.constructor)}function jo(e){return pf?uc(pf.call(e)):{}}function Ro(e,t){var n=t?To(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Io(e,t){if(e!==t){var n=e!==oe,r=null===e,o=e===e,i=gl(e),a=t!==oe,u=null===t,l=t===t,s=gl(t);if(!u&&!s&&!i&&e>t||i&&a&&l&&!u&&!s||r&&a&&l||!n&&l||!o)return 1;if(!r&&!i&&!s&&e=u)return l;return l*("desc"==n[r]?-1:1)}}return e.index-t.index}function Do(e,t,n,r){for(var o=-1,i=e.length,a=n.length,u=-1,l=t.length,s=Wc(i-a,0),c=nc(l+s),f=!r;++u1?n[o-1]:oe,a=o>2?n[2]:oe;for(i=e.length>3&&"function"==typeof i?(o--,i):oe,a&&Di(n[0],n[1],a)&&(i=o<3?oe:i,o=1),t=uc(t);++r-1?o[i?t[a]:a]:oe}}function Qo(e){return mi(function(t){var n=t.length,r=n,i=o.prototype.thru;for(e&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new cc(ue);if(i&&!u&&"wrapper"==_i(a))var u=new o([],!0)}for(r=u?r:n;++r1&&y.reverse(),f&&lu))return!1;var s=i.get(e);if(s&&i.get(t))return s==t;var c=-1,f=!0,p=n&ve?new mn:oe;for(i.set(e,t),i.set(t,e);++c1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Mt,"{\n/* [wrapped with "+t+"] */\n")}function Ii(e){return mp(e)||gp(e)||!!(Nc&&e&&e[Nc])}function Li(e,t){return!!(t=null==t?Re:t)&&("number"==typeof e||$t.test(e))&&e>-1&&e%1==0&&e0){if(++t>=Ce)return arguments[0]}else t=0;return e.apply(oe,arguments)}}function Qi(e,t){var n=-1,r=e.length,o=r-1;for(t=t===oe?r:t;++n=this.__values__.length;return{done:e,value:e?oe:this.__values__[this.__index__++]}}function nu(){return this}function ru(e){for(var t,n=this;n instanceof r;){var o=na(n);o.__index__=0,o.__values__=oe,t?i.__wrapped__=o:t=o;var i=o;n=n.__wrapped__}return i.__wrapped__=e,t}function ou(){var e=this.__wrapped__;if(e instanceof _){var t=e;return this.__actions__.length&&(t=new _(this)),t=t.reverse(),t.__actions__.push({func:Qa,args:[Ca],thisArg:oe}),new o(t,this.__chain__)}return this.thru(Ca)}function iu(){return bo(this.__wrapped__,this.__actions__)}function au(e,t,n){var r=mp(e)?f:lr;return n&&Di(e,t,n)&&(t=oe),r(e,xi(t,3))}function uu(e,t){return(mp(e)?p:fr)(e,xi(t,3))}function lu(e,t){return pr(hu(e,t),1)}function su(e,t){return pr(hu(e,t),je)}function cu(e,t,n){return n=n===oe?1:xl(n),pr(hu(e,t),n)}function fu(e,t){return(mp(e)?s:vf)(e,xi(t,3))}function pu(e,t){return(mp(e)?c:gf)(e,xi(t,3))}function du(e,t,n,r){e=Gu(e)?e:Jl(e),n=n&&!r?xl(n):0;var o=e.length;return n<0&&(n=Wc(o+n,0)),vl(e)?n<=o&&e.indexOf(t,n)>-1:!!o&&k(e,t,n)>-1}function hu(e,t){return(mp(e)?v:Hr)(e,xi(t,3))}function vu(e,t,n,r){return null==e?[]:(mp(t)||(t=null==t?[]:[t]),n=r?oe:n,mp(n)||(n=null==n?[]:[n]),Kr(e,t,n))}function gu(e,t,n){var r=mp(e)?m:P,o=arguments.length<3;return r(e,xi(t,4),n,o,vf)}function mu(e,t,n){var r=mp(e)?y:P,o=arguments.length<3;return r(e,xi(t,4),n,o,gf)}function yu(e,t){return(mp(e)?p:fr)(e,ju(xi(t,3)))}function bu(e){return(mp(e)?In:ro)(e)}function _u(e,t,n){return t=(n?Di(e,t,n):t===oe)?1:xl(t),(mp(e)?Ln:oo)(e,t)}function wu(e){return(mp(e)?Mn:ao)(e)}function xu(e){if(null==e)return 0;if(Gu(e))return vl(e)?J(e):e.length;var t=Tf(e);return t==Ye||t==tt?e.size:Ur(e).length}function Eu(e,t,n){var r=mp(e)?b:lo;return n&&Di(e,t,n)&&(t=oe),r(e,xi(t,3))}function ku(e,t){if("function"!=typeof t)throw new cc(ue);return e=xl(e),function(){if(--e<1)return t.apply(this,arguments)}}function Su(e,t,n){return t=n?oe:t,t=e&&null==t?e.length:t,ci(e,Ee,oe,oe,oe,oe,t)}function Ou(e,t){var n;if("function"!=typeof t)throw new cc(ue);return e=xl(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=oe),n}}function Tu(e,t,n){t=n?oe:t;var r=ci(e,be,oe,oe,oe,oe,oe,t);return r.placeholder=Tu.placeholder,r}function Cu(e,t,n){t=n?oe:t;var r=ci(e,_e,oe,oe,oe,oe,oe,t);return r.placeholder=Cu.placeholder,r}function Au(e,t,n){function r(t){var n=p,r=d;return p=d=oe,y=t,v=e.apply(r,n)}function o(e){return y=e,g=Pf(u,t),b?r(e):v}function i(e){var n=e-m,r=e-y,o=t-n;return _?Gc(o,h-r):o}function a(e){var n=e-m,r=e-y;return m===oe||n>=t||n<0||_&&r>=h}function u(){var e=ip();if(a(e))return l(e);g=Pf(u,i(e))}function l(e){return g=oe,w&&p?r(e):(p=d=oe,v)}function s(){g!==oe&&xf(g),y=0,p=m=d=g=oe}function c(){return g===oe?v:l(ip())}function f(){var e=ip(),n=a(e);if(p=arguments,d=this,m=e,n){if(g===oe)return o(m);if(_)return g=Pf(u,t),r(m)}return g===oe&&(g=Pf(u,t)),v}var p,d,h,v,g,m,y=0,b=!1,_=!1,w=!0;if("function"!=typeof e)throw new cc(ue);return t=kl(t)||0,ol(n)&&(b=!!n.leading,_="maxWait"in n,h=_?Wc(kl(n.maxWait)||0,t):h,w="trailing"in n?!!n.trailing:w),f.cancel=s,f.flush=c,f}function Pu(e){return ci(e,Se)}function Nu(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new cc(ue);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Nu.Cache||sn),n}function ju(e){if("function"!=typeof e)throw new cc(ue);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}function Ru(e){return Ou(2,e)}function Iu(e,t){if("function"!=typeof e)throw new cc(ue);return t=t===oe?t:xl(t),no(e,t)}function Lu(e,t){if("function"!=typeof e)throw new cc(ue);return t=null==t?0:Wc(xl(t),0),no(function(n){var r=n[t],o=So(n,0,t);return r&&g(o,r),u(e,this,o)})}function Du(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new cc(ue);return ol(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Au(e,t,{leading:r,maxWait:t,trailing:o})}function Mu(e){return Su(e,1)}function Uu(e,t){return fp(Eo(t),e)}function qu(){if(!arguments.length)return[];var e=arguments[0];return mp(e)?e:[e]}function Fu(e){return rr(e,de)}function Hu(e,t){return t="function"==typeof t?t:oe,rr(e,de,t)}function Bu(e){return rr(e,fe|de)}function zu(e,t){return t="function"==typeof t?t:oe,rr(e,fe|de,t)}function Vu(e,t){return null==t||ir(e,t,Fl(t))}function Wu(e,t){return e===t||e!==e&&t!==t}function Gu(e){return null!=e&&rl(e.length)&&!tl(e)}function Ku(e){return il(e)&&Gu(e)}function $u(e){return!0===e||!1===e||il(e)&&yr(e)==ze}function Yu(e){return il(e)&&1===e.nodeType&&!dl(e)}function Xu(e){if(null==e)return!0;if(Gu(e)&&(mp(e)||"string"==typeof e||"function"==typeof e.splice||bp(e)||kp(e)||gp(e)))return!e.length;var t=Tf(e);if(t==Ye||t==tt)return!e.size;if(Hi(e))return!Ur(e).length;for(var n in e)if(gc.call(e,n))return!1;return!0}function Zu(e,t){return Ar(e,t)}function Qu(e,t,n){n="function"==typeof n?n:oe;var r=n?n(e,t):oe;return r===oe?Ar(e,t,oe,n):!!r}function Ju(e){if(!il(e))return!1;var t=yr(e);return t==Ge||t==We||"string"==typeof e.message&&"string"==typeof e.name&&!dl(e)}function el(e){return"number"==typeof e&&Bc(e)}function tl(e){if(!ol(e))return!1;var t=yr(e);return t==Ke||t==$e||t==Be||t==Je}function nl(e){return"number"==typeof e&&e==xl(e)}function rl(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=Re}function ol(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function il(e){return null!=e&&"object"==typeof e}function al(e,t){return e===t||jr(e,t,ki(t))}function ul(e,t,n){return n="function"==typeof n?n:oe,jr(e,t,ki(t),n)}function ll(e){return pl(e)&&e!=+e}function sl(e){if(Cf(e))throw new oc(ae);return Rr(e)}function cl(e){return null===e}function fl(e){return null==e}function pl(e){return"number"==typeof e||il(e)&&yr(e)==Xe}function dl(e){if(!il(e)||yr(e)!=Qe)return!1;var t=Tc(e);if(null===t)return!0;var n=gc.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&vc.call(n)==_c}function hl(e){return nl(e)&&e>=-Re&&e<=Re}function vl(e){return"string"==typeof e||!mp(e)&&il(e)&&yr(e)==nt}function gl(e){return"symbol"==typeof e||il(e)&&yr(e)==rt}function ml(e){return e===oe}function yl(e){return il(e)&&Tf(e)==it}function bl(e){return il(e)&&yr(e)==at}function _l(e){if(!e)return[];if(Gu(e))return vl(e)?ee(e):Uo(e);if(jc&&e[jc])return W(e[jc]());var t=Tf(e);return(t==Ye?G:t==tt?Y:Jl)(e)}function wl(e){if(!e)return 0===e?e:0;if((e=kl(e))===je||e===-je){return(e<0?-1:1)*Ie}return e===e?e:0}function xl(e){var t=wl(e),n=t%1;return t===t?n?t-n:t:0}function El(e){return e?nr(xl(e),0,De):0}function kl(e){if("number"==typeof e)return e;if(gl(e))return Le;if(ol(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ol(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(It,"");var n=Wt.test(e);return n||Kt.test(e)?Pn(e.slice(2),n?2:8):Vt.test(e)?Le:+e}function Sl(e){return qo(e,Hl(e))}function Ol(e){return e?nr(xl(e),-Re,Re):0===e?e:0}function Tl(e){return null==e?"":ho(e)}function Cl(e,t){var n=hf(e);return null==t?n:Qn(n,t)}function Al(e,t){return x(e,xi(t,3),dr)}function Pl(e,t){return x(e,xi(t,3),hr)}function Nl(e,t){return null==e?e:mf(e,xi(t,3),Hl)}function jl(e,t){return null==e?e:yf(e,xi(t,3),Hl)}function Rl(e,t){return e&&dr(e,xi(t,3))}function Il(e,t){return e&&hr(e,xi(t,3))}function Ll(e){return null==e?[]:vr(e,Fl(e))}function Dl(e){return null==e?[]:vr(e,Hl(e))}function Ml(e,t,n){var r=null==e?oe:gr(e,t);return r===oe?n:r}function Ul(e,t){return null!=e&&Ai(e,t,_r)}function ql(e,t){return null!=e&&Ai(e,t,wr)}function Fl(e){return Gu(e)?jn(e):Ur(e)}function Hl(e){return Gu(e)?jn(e,!0):qr(e)}function Bl(e,t){var n={};return t=xi(t,3),dr(e,function(e,r,o){er(n,t(e,r,o),e)}),n}function zl(e,t){var n={};return t=xi(t,3),dr(e,function(e,r,o){er(n,r,t(e,r,o))}),n}function Vl(e,t){return Wl(e,ju(xi(t)))}function Wl(e,t){if(null==e)return{};var n=v(bi(e),function(e){return[e]});return t=xi(t),Yr(e,n,function(e,n){return t(e,n[0])})}function Gl(e,t,n){t=ko(t,e);var r=-1,o=t.length;for(o||(o=1,e=oe);++rt){var r=e;e=t,t=r}if(n||e%1||t%1){var o=Yc();return Gc(e+o*(t-e+An("1e-"+((o+"").length-1))),t)}return Jr(e,t)}function os(e){return Xp(Tl(e).toLowerCase())}function is(e){return(e=Tl(e))&&e.replace(Yt,Gn).replace(gn,"")}function as(e,t,n){e=Tl(e),t=ho(t);var r=e.length;n=n===oe?r:nr(xl(n),0,r);var o=n;return(n-=t.length)>=0&&e.slice(n,o)==t}function us(e){return e=Tl(e),e&&kt.test(e)?e.replace(xt,Kn):e}function ls(e){return e=Tl(e),e&&Rt.test(e)?e.replace(jt,"\\$&"):e}function ss(e,t,n){e=Tl(e),t=xl(t);var r=t?J(e):0;if(!t||r>=t)return e;var o=(t-r)/2;return ri(qc(o),n)+e+ri(Uc(o),n)}function cs(e,t,n){e=Tl(e),t=xl(t);var r=t?J(e):0;return t&&r>>0)?(e=Tl(e),e&&("string"==typeof t||null!=t&&!xp(t))&&!(t=ho(t))&&z(e)?So(ee(e),0,n):e.split(t,n)):[]}function gs(e,t,n){return e=Tl(e),n=null==n?0:nr(xl(n),0,e.length),t=ho(t),e.slice(n,n+t.length)==t}function ms(e,t,r){var o=n.templateSettings;r&&Di(e,t,r)&&(t=oe),e=Tl(e),t=Ap({},t,o,fi);var i,a,u=Ap({},t.imports,o.imports,fi),l=Fl(u),s=D(u,l),c=0,f=t.interpolate||Xt,p="__p += '",d=lc((t.escape||Xt).source+"|"+f.source+"|"+(f===Tt?Bt:Xt).source+"|"+(t.evaluate||Xt).source+"|$","g"),h="//# sourceURL="+("sourceURL"in t?t.sourceURL:"lodash.templateSources["+ ++xn+"]")+"\n";e.replace(d,function(t,n,r,o,u,l){return r||(r=o),p+=e.slice(c,l).replace(Zt,H),n&&(i=!0,p+="' +\n__e("+n+") +\n'"),u&&(a=!0,p+="';\n"+u+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=l+t.length,t}),p+="';\n";var v=t.variable;v||(p="with (obj) {\n"+p+"\n}\n"),p=(a?p.replace(yt,""):p).replace(bt,"$1").replace(_t,"$1;"),p="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var g=Zp(function(){return ic(l,h+"return "+p).apply(oe,s)});if(g.source=p,Ju(g))throw g;return g}function ys(e){return Tl(e).toLowerCase()}function bs(e){return Tl(e).toUpperCase()}function _s(e,t,n){if((e=Tl(e))&&(n||t===oe))return e.replace(It,"");if(!e||!(t=ho(t)))return e;var r=ee(e),o=ee(t);return So(r,U(r,o),q(r,o)+1).join("")}function ws(e,t,n){if((e=Tl(e))&&(n||t===oe))return e.replace(Dt,"");if(!e||!(t=ho(t)))return e;var r=ee(e);return So(r,0,q(r,ee(t))+1).join("")}function xs(e,t,n){if((e=Tl(e))&&(n||t===oe))return e.replace(Lt,"");if(!e||!(t=ho(t)))return e;var r=ee(e);return So(r,U(r,ee(t))).join("")}function Es(e,t){var n=Oe,r=Te;if(ol(t)){var o="separator"in t?t.separator:o;n="length"in t?xl(t.length):n,r="omission"in t?ho(t.omission):r}e=Tl(e);var i=e.length;if(z(e)){var a=ee(e);i=a.length}if(n>=i)return e;var u=n-J(r);if(u<1)return r;var l=a?So(a,0,u).join(""):e.slice(0,u);if(o===oe)return l+r;if(a&&(u+=l.length-u),xp(o)){if(e.slice(u).search(o)){var s,c=l;for(o.global||(o=lc(o.source,Tl(zt.exec(o))+"g")),o.lastIndex=0;s=o.exec(c);)var f=s.index;l=l.slice(0,f===oe?u:f)}}else if(e.indexOf(ho(o),u)!=u){var p=l.lastIndexOf(o);p>-1&&(l=l.slice(0,p))}return l+r}function ks(e){return e=Tl(e),e&&Et.test(e)?e.replace(wt,$n):e}function Ss(e,t,n){return e=Tl(e),t=n?oe:t,t===oe?V(e)?re(e):w(e):e.match(t)||[]}function Os(e){var t=null==e?0:e.length,n=xi();return e=t?v(e,function(e){if("function"!=typeof e[1])throw new cc(ue);return[n(e[0]),e[1]]}):[],no(function(n){for(var r=-1;++rRe)return[];var n=De,r=Gc(e,De);t=xi(t),e-=De;for(var o=R(r,t);++n1?e[t-1]:oe;return n="function"==typeof n?(e.pop(),n):oe,Ka(e,n)}),Xf=mi(function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return tr(t,e)};return!(t>1||this.__actions__.length)&&r instanceof _&&Li(n)?(r=r.slice(n,+n+(t?1:0)),r.__actions__.push({func:Qa,args:[i],thisArg:oe}),new o(r,this.__chain__).thru(function(e){return t&&!e.length&&e.push(oe),e})):this.thru(i)}),Zf=Bo(function(e,t,n){gc.call(e,n)?++e[n]:er(e,n,1)}),Qf=Zo(fa),Jf=Zo(pa),ep=Bo(function(e,t,n){gc.call(e,n)?e[n].push(t):er(e,n,[t])}),tp=no(function(e,t,n){var r=-1,o="function"==typeof t,i=Gu(e)?nc(e.length):[];return vf(e,function(e){i[++r]=o?u(t,e,n):Sr(e,t,n)}),i}),np=Bo(function(e,t,n){er(e,n,t)}),rp=Bo(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),op=no(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Di(e,t[0],t[1])?t=[]:n>2&&Di(t[0],t[1],t[2])&&(t=[t[0]]),Kr(e,pr(t,1),[])}),ip=Dc||function(){return Rn.Date.now()},ap=no(function(e,t,n){var r=ge;if(n.length){var o=$(n,wi(ap));r|=we}return ci(e,r,t,n,o)}),up=no(function(e,t,n){var r=ge|me;if(n.length){var o=$(n,wi(up));r|=we}return ci(t,r,e,n,o)}),lp=no(function(e,t){return ar(e,1,t)}),sp=no(function(e,t,n){return ar(e,kl(t)||0,n)});Nu.Cache=sn;var cp=wf(function(e,t){t=1==t.length&&mp(t[0])?v(t[0],L(xi())):v(pr(t,1),L(xi()));var n=t.length;return no(function(r){for(var o=-1,i=Gc(r.length,n);++o=t}),gp=Or(function(){return arguments}())?Or:function(e){return il(e)&&gc.call(e,"callee")&&!Ac.call(e,"callee")},mp=nc.isArray,yp=qn?L(qn):Tr,bp=Hc||Hs,_p=Fn?L(Fn):Cr,wp=Hn?L(Hn):Nr,xp=Bn?L(Bn):Ir,Ep=zn?L(zn):Lr,kp=Vn?L(Vn):Dr,Sp=ai(Fr),Op=ai(function(e,t){return e<=t}),Tp=zo(function(e,t){if(Hi(t)||Gu(t))return void qo(t,Fl(t),e);for(var n in t)gc.call(t,n)&&Wn(e,n,t[n])}),Cp=zo(function(e,t){qo(t,Hl(t),e)}),Ap=zo(function(e,t,n,r){qo(t,Hl(t),e,r)}),Pp=zo(function(e,t,n,r){qo(t,Fl(t),e,r)}),Np=mi(tr),jp=no(function(e){return e.push(oe,fi),u(Ap,oe,e)}),Rp=no(function(e){return e.push(oe,pi),u(Up,oe,e)}),Ip=ei(function(e,t,n){e[t]=n},Cs(Ps)),Lp=ei(function(e,t,n){gc.call(e,t)?e[t].push(n):e[t]=[n]},xi),Dp=no(Sr),Mp=zo(function(e,t,n){Vr(e,t,n)}),Up=zo(function(e,t,n,r){Vr(e,t,n,r)}),qp=mi(function(e,t){var n={};if(null==e)return n;var r=!1;t=v(t,function(t){return t=ko(t,e),r||(r=t.length>1),t}),qo(e,bi(e),n),r&&(n=rr(n,fe|pe|de,di));for(var o=t.length;o--;)go(n,t[o]);return n}),Fp=mi(function(e,t){return null==e?{}:$r(e,t)}),Hp=si(Fl),Bp=si(Hl),zp=$o(function(e,t,n){return t=t.toLowerCase(),e+(n?os(t):t)}),Vp=$o(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),Wp=$o(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),Gp=Ko("toLowerCase"),Kp=$o(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}),$p=$o(function(e,t,n){return e+(n?" ":"")+Xp(t)}),Yp=$o(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),Xp=Ko("toUpperCase"),Zp=no(function(e,t){try{return u(e,oe,t)}catch(e){return Ju(e)?e:new oc(e)}}),Qp=mi(function(e,t){return s(t,function(t){t=Ji(t),er(e,t,ap(e[t],e))}),e}),Jp=Qo(),ed=Qo(!0),td=no(function(e,t){return function(n){return Sr(n,e,t)}}),nd=no(function(e,t){return function(n){return Sr(e,n,t)}}),rd=ni(v),od=ni(f),id=ni(b),ad=ii(),ud=ii(!0),ld=ti(function(e,t){return e+t},0),sd=li("ceil"),cd=ti(function(e,t){return e/t},1),fd=li("floor"),pd=ti(function(e,t){return e*t},1),dd=li("round"),hd=ti(function(e,t){return e-t},0);return n.after=ku,n.ary=Su,n.assign=Tp,n.assignIn=Cp,n.assignInWith=Ap,n.assignWith=Pp,n.at=Np,n.before=Ou,n.bind=ap,n.bindAll=Qp,n.bindKey=up,n.castArray=qu,n.chain=Xa,n.chunk=ra,n.compact=oa,n.concat=ia,n.cond=Os,n.conforms=Ts,n.constant=Cs,n.countBy=Zf,n.create=Cl,n.curry=Tu,n.curryRight=Cu,n.debounce=Au,n.defaults=jp,n.defaultsDeep=Rp,n.defer=lp,n.delay=sp,n.difference=Rf,n.differenceBy=If,n.differenceWith=Lf,n.drop=aa,n.dropRight=ua,n.dropRightWhile=la,n.dropWhile=sa,n.fill=ca,n.filter=uu,n.flatMap=lu,n.flatMapDeep=su,n.flatMapDepth=cu,n.flatten=da,n.flattenDeep=ha,n.flattenDepth=va,n.flip=Pu,n.flow=Jp,n.flowRight=ed,n.fromPairs=ga,n.functions=Ll,n.functionsIn=Dl,n.groupBy=ep,n.initial=ba,n.intersection=Df,n.intersectionBy=Mf,n.intersectionWith=Uf,n.invert=Ip,n.invertBy=Lp,n.invokeMap=tp,n.iteratee=Ns,n.keyBy=np,n.keys=Fl,n.keysIn=Hl,n.map=hu,n.mapKeys=Bl,n.mapValues=zl,n.matches=js,n.matchesProperty=Rs,n.memoize=Nu,n.merge=Mp,n.mergeWith=Up,n.method=td,n.methodOf=nd,n.mixin=Is,n.negate=ju,n.nthArg=Ms,n.omit=qp,n.omitBy=Vl,n.once=Ru,n.orderBy=vu,n.over=rd,n.overArgs=cp,n.overEvery=od,n.overSome=id,n.partial=fp,n.partialRight=pp,n.partition=rp,n.pick=Fp,n.pickBy=Wl,n.property=Us,n.propertyOf=qs,n.pull=qf,n.pullAll=ka,n.pullAllBy=Sa,n.pullAllWith=Oa,n.pullAt=Ff,n.range=ad,n.rangeRight=ud,n.rearg=dp,n.reject=yu,n.remove=Ta,n.rest=Iu,n.reverse=Ca,n.sampleSize=_u,n.set=Kl,n.setWith=$l,n.shuffle=wu,n.slice=Aa,n.sortBy=op,n.sortedUniq=Da,n.sortedUniqBy=Ma,n.split=vs,n.spread=Lu,n.tail=Ua,n.take=qa,n.takeRight=Fa,n.takeRightWhile=Ha,n.takeWhile=Ba,n.tap=Za,n.throttle=Du,n.thru=Qa,n.toArray=_l,n.toPairs=Hp,n.toPairsIn=Bp,n.toPath=Gs,n.toPlainObject=Sl,n.transform=Yl,n.unary=Mu,n.union=Hf,n.unionBy=Bf,n.unionWith=zf,n.uniq=za,n.uniqBy=Va,n.uniqWith=Wa,n.unset=Xl,n.unzip=Ga,n.unzipWith=Ka,n.update=Zl,n.updateWith=Ql,n.values=Jl,n.valuesIn=es,n.without=Vf,n.words=Ss,n.wrap=Uu,n.xor=Wf,n.xorBy=Gf,n.xorWith=Kf,n.zip=$f,n.zipObject=$a,n.zipObjectDeep=Ya,n.zipWith=Yf,n.entries=Hp,n.entriesIn=Bp,n.extend=Cp,n.extendWith=Ap,Is(n,n),n.add=ld,n.attempt=Zp,n.camelCase=zp,n.capitalize=os,n.ceil=sd,n.clamp=ts,n.clone=Fu,n.cloneDeep=Bu,n.cloneDeepWith=zu,n.cloneWith=Hu,n.conformsTo=Vu,n.deburr=is,n.defaultTo=As,n.divide=cd,n.endsWith=as,n.eq=Wu,n.escape=us,n.escapeRegExp=ls,n.every=au,n.find=Qf,n.findIndex=fa,n.findKey=Al,n.findLast=Jf,n.findLastIndex=pa,n.findLastKey=Pl,n.floor=fd,n.forEach=fu,n.forEachRight=pu,n.forIn=Nl,n.forInRight=jl,n.forOwn=Rl,n.forOwnRight=Il,n.get=Ml,n.gt=hp,n.gte=vp,n.has=Ul,n.hasIn=ql,n.head=ma,n.identity=Ps,n.includes=du,n.indexOf=ya,n.inRange=ns,n.invoke=Dp,n.isArguments=gp,n.isArray=mp,n.isArrayBuffer=yp,n.isArrayLike=Gu,n.isArrayLikeObject=Ku,n.isBoolean=$u,n.isBuffer=bp,n.isDate=_p,n.isElement=Yu,n.isEmpty=Xu,n.isEqual=Zu,n.isEqualWith=Qu,n.isError=Ju,n.isFinite=el,n.isFunction=tl,n.isInteger=nl,n.isLength=rl,n.isMap=wp,n.isMatch=al,n.isMatchWith=ul,n.isNaN=ll,n.isNative=sl,n.isNil=fl,n.isNull=cl,n.isNumber=pl,n.isObject=ol,n.isObjectLike=il,n.isPlainObject=dl,n.isRegExp=xp,n.isSafeInteger=hl,n.isSet=Ep,n.isString=vl,n.isSymbol=gl,n.isTypedArray=kp,n.isUndefined=ml,n.isWeakMap=yl,n.isWeakSet=bl,n.join=_a,n.kebabCase=Vp,n.last=wa,n.lastIndexOf=xa,n.lowerCase=Wp,n.lowerFirst=Gp,n.lt=Sp,n.lte=Op,n.max=$s,n.maxBy=Ys,n.mean=Xs,n.meanBy=Zs,n.min=Qs,n.minBy=Js,n.stubArray=Fs,n.stubFalse=Hs,n.stubObject=Bs,n.stubString=zs,n.stubTrue=Vs,n.multiply=pd,n.nth=Ea,n.noConflict=Ls,n.noop=Ds,n.now=ip,n.pad=ss,n.padEnd=cs,n.padStart=fs,n.parseInt=ps,n.random=rs,n.reduce=gu,n.reduceRight=mu,n.repeat=ds,n.replace=hs,n.result=Gl,n.round=dd,n.runInContext=e,n.sample=bu,n.size=xu,n.snakeCase=Kp,n.some=Eu,n.sortedIndex=Pa,n.sortedIndexBy=Na,n.sortedIndexOf=ja,n.sortedLastIndex=Ra,n.sortedLastIndexBy=Ia,n.sortedLastIndexOf=La,n.startCase=$p,n.startsWith=gs,n.subtract=hd,n.sum=ec,n.sumBy=tc,n.template=ms,n.times=Ws,n.toFinite=wl,n.toInteger=xl,n.toLength=El,n.toLower=ys,n.toNumber=kl,n.toSafeInteger=Ol,n.toString=Tl,n.toUpper=bs,n.trim=_s,n.trimEnd=ws,n.trimStart=xs,n.truncate=Es,n.unescape=ks,n.uniqueId=Ks,n.upperCase=Yp,n.upperFirst=Xp,n.each=fu,n.eachRight=pu,n.first=ma,Is(n,function(){var e={};return dr(n,function(t,r){gc.call(n.prototype,r)||(e[r]=t)}),e}(),{chain:!1}),n.VERSION="4.17.4",s(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){n[e].placeholder=n}),s(["drop","take"],function(e,t){_.prototype[e]=function(n){n=n===oe?1:Wc(xl(n),0);var r=this.__filtered__&&!t?new _(this):this.clone();return r.__filtered__?r.__takeCount__=Gc(n,r.__takeCount__):r.__views__.push({size:Gc(n,De),type:e+(r.__dir__<0?"Right":"")}),r},_.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),s(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n==Pe||3==n;_.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:xi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),s(["head","last"],function(e,t){var n="take"+(t?"Right":"");_.prototype[e]=function(){return this[n](1).value()[0]}}),s(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");_.prototype[e]=function(){return this.__filtered__?new _(this):this[n](1)}}),_.prototype.compact=function(){return this.filter(Ps)},_.prototype.find=function(e){return this.filter(e).head()},_.prototype.findLast=function(e){return this.reverse().find(e)},_.prototype.invokeMap=no(function(e,t){return"function"==typeof e?new _(this):this.map(function(n){return Sr(n,e,t)})}),_.prototype.reject=function(e){return this.filter(ju(xi(e)))},_.prototype.slice=function(e,t){e=xl(e);var n=this;return n.__filtered__&&(e>0||t<0)?new _(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==oe&&(t=xl(t),n=t<0?n.dropRight(-t):n.take(t-e)),n)},_.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},_.prototype.toArray=function(){return this.take(De)},dr(_.prototype,function(e,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),a=n[i?"take"+("last"==t?"Right":""):t],u=i||/^find/.test(t);a&&(n.prototype[t]=function(){var t=this.__wrapped__,l=i?[1]:arguments,s=t instanceof _,c=l[0],f=s||mp(t),p=function(e){var t=a.apply(n,g([e],l));return i&&d?t[0]:t};f&&r&&"function"==typeof c&&1!=c.length&&(s=f=!1);var d=this.__chain__,h=!!this.__actions__.length,v=u&&!d,m=s&&!h;if(!u&&f){t=m?t:new _(this);var y=e.apply(t,l);return y.__actions__.push({func:Qa,args:[p],thisArg:oe}),new o(y,d)}return v&&m?e.apply(this,l):(y=this.thru(p),v?i?y.value()[0]:y.value():y)})}),s(["pop","push","shift","sort","splice","unshift"],function(e){var t=fc[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",o=/^(?:pop|shift)$/.test(e);n.prototype[e]=function(){var e=arguments;if(o&&!this.__chain__){var n=this.value();return t.apply(mp(n)?n:[],e)}return this[r](function(n){return t.apply(mp(n)?n:[],e)})}}),dr(_.prototype,function(e,t){var r=n[t];if(r){var o=r.name+"";(of[o]||(of[o]=[])).push({name:t,func:r})}}),of[Jo(oe,me).name]=[{name:"wrapper",func:oe}],_.prototype.clone=A,_.prototype.reverse=Z,_.prototype.value=te,n.prototype.at=Xf,n.prototype.chain=Ja,n.prototype.commit=eu,n.prototype.next=tu,n.prototype.plant=ru,n.prototype.reverse=ou,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=iu,n.prototype.first=n.prototype.head,jc&&(n.prototype[jc]=nu),n}();Rn._=Yn,(o=function(){return Yn}.call(t,n,t,r))!==oe&&(r.exports=o)}).call(this)}).call(t,n(22),n(46)(e))},function(e,t,n){var r,o;/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +!function(){"use strict";function n(){for(var e=[],t=0;t0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=function e(n){return n.children?(0,g.flatMap)(n.children,e):(0,g.set)(n,"browsers",(0,g.filter)(n.browsers,function(e){if(n.browserId&&n.browserId!==e.name)return!1;var r=s(e,n.acceptTestAttempt);return t(r)}))};return(0,g.flatMap)((0,g.cloneDeep)(e),n)}function u(){return a(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],_.isSuiteFailed)}function l(){return a(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],_.isAcceptable)}function s(e,t){return t>=0?e.retries.concat(e.result)[t]:e.result}Object.defineProperty(t,"__esModule",{value:!0}),t.updateBaseHost=t.toggleScaleImages=t.toggleOnlyDiff=t.toggleSkipped=t.collapseAll=t.expandRetries=t.expandErrors=t.expandAll=t.runFailed=t.testsEnd=t.testResult=t.testBegin=t.suiteBegin=t.acceptTest=t.acceptAll=t.retryTest=t.retrySuite=t.runFailedTests=t.runAllTests=t.initial=void 0;var c=n(202),f=r(c),p=n(205),d=r(p);t.changeViewMode=o;var h=n(221),v=r(h),g=n(19),m=n(86),y=r(m),b=n(87),_=n(38),w=(t.initial=function(){return function(){var e=(0,d.default)(f.default.mark(function e(t){var n;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,v.default.get("/init");case 3:n=e.sent,t({type:y.default.VIEW_INITIAL,payload:n.data}),e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("Error while getting initial data:",e.t0);case 10:case"end":return e.stop()}},e,void 0,[[0,7]])}));return function(t){return e.apply(this,arguments)}}()},function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.tests,n=void 0===t?[]:t,r=e.action,o=void 0===r?{}:r;return function(){var e=(0,d.default)(f.default.mark(function e(t){return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,v.default.post("/run",n);case 3:t(o),e.next=9;break;case 6:e.prev=6,e.t0=e.catch(0),console.error("Error while running tests:",e.t0);case 9:case"end":return e.stop()}},e,void 0,[[0,6]])}));return function(t){return e.apply(this,arguments)}}()}),x=(t.runAllTests=function(){return w({action:{type:y.default.RUN_ALL_TESTS,payload:{status:b.QUEUED}}})},t.runFailedTests=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y.default.RUN_FAILED_TESTS;return e=u([].concat(e)),w({tests:e,action:{type:t}})}),E=(t.retrySuite=function(e){return w({tests:[e],action:{type:y.default.RETRY_SUITE}})},t.retryTest=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return x((0,g.assign)({browserId:t},e),y.default.RETRY_TEST)},t.acceptAll=function(e){e=l([].concat(e));var t=(0,g.flatMap)([].concat(e),i);return function(){var e=(0,d.default)(f.default.mark(function e(n){var r,o;return f.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,v.default.post("/update-reference",(0,g.compact)(t));case 3:r=e.sent,o=r.data,n({type:y.default.UPDATE_RESULT,payload:o}),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(0),console.error("Error while updating references of failed tests:",e.t0);case 11:case"end":return e.stop()}},e,void 0,[[0,8]])}));return function(t){return e.apply(this,arguments)}}()});t.acceptTest=function(e,t,n,r){return E((0,g.assign)({browserId:t,stateName:r},e,{acceptTestAttempt:n}))},t.suiteBegin=function(e){return{type:y.default.SUITE_BEGIN,payload:e}},t.testBegin=function(e){return{type:y.default.TEST_BEGIN,payload:e}},t.testResult=function(e){return{type:y.default.TEST_RESULT,payload:e}},t.testsEnd=function(){return{type:y.default.TESTS_END}},t.runFailed=function(){return{type:y.default.RUN_FAILED_TESTS}},t.expandAll=function(){return{type:y.default.VIEW_EXPAND_ALL}},t.expandErrors=function(){return{type:y.default.VIEW_EXPAND_ERRORS}},t.expandRetries=function(){return{type:y.default.VIEW_EXPAND_RETRIES}},t.collapseAll=function(){return{type:y.default.VIEW_COLLAPSE_ALL}},t.toggleSkipped=function(){return{type:y.default.VIEW_TOGGLE_SKIPPED}},t.toggleOnlyDiff=function(){return{type:y.default.VIEW_TOGGLE_ONLY_DIFF}},t.toggleScaleImages=function(){return{type:y.default.VIEW_TOGGLE_SCALE_IMAGES}},t.updateBaseHost=function(e){return window.localStorage.setItem("_gemini-replace-host",e),{type:y.default.VIEW_UPDATE_BASE_HOST,host:e}}},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(15),o=n(34);e.exports=n(17)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(83),o=n(50);e.exports=function(e){return r(o(e))}},function(e,t,n){"use strict";var r=n(87),o=r.SUCCESS,i=r.FAIL,a=r.ERROR,u=r.SKIPPED,l=r.UPDATED,s=r.IDLE;t.isSuccessStatus=function(e){return e===o},t.isFailStatus=function(e){return e===i},t.isIdleStatus=function(e){return e===s},t.isErroredStatus=function(e){return e===a},t.isSkippedStatus=function(e){return e===u},t.isUpdatedStatus=function(e){return e===l}},function(e,t){function n(e){return e.replace(/^\s*|\s*$/g,"")}t=e.exports=n,t.left=function(e){return e.replace(/^\s*/,"")},t.right=function(e){return e.replace(/\s*$/,"")}},function(e,t,n){var r=n(33);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports={}},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(82),o=n(54);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){"use strict";function r(e){var t=e.imagesInfo,n=void 0===t?[]:t,r=e.status;return n.some(function(e){var t=e.status;return x(t)||w(t)})||x(r)||w(r)}function o(e){var t=e.imagesInfo,n=void 0===t?[]:t;return Boolean(n.filter(function(e){return m(e,"reason.stack","").startsWith(C)}).length)}function i(e){var t=e.result;return t&&r(t)||c(e,i)}function a(e){return w(e.status)||x(e.status)}function u(e){var t=e.status,n=e.reason,r=void 0===n?"":n,o=r&&r.stack;return x(t)&&o.startsWith(C)||w(t)}function l(e){return e.retries&&e.retries.length||c(e,l)}function s(e){var t=e.result,n=t&&E(t.status);return Boolean(n||c(e,s,Array.prototype.every))}function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Array.prototype.some;return e.browsers&&n.call(e.browsers,t)||e.children&&n.call(e.children,t)}function f(e,t){v(e)&&e.forEach(function(e){return f(e,t)});var n=m(e,"result.status",e.status);if(!E(n))return e.result?e.result.status=t:e.status=t,c(e,function(e){return f(e,t)},Array.prototype.forEach)}function p(e,t){if(t=t.slice(),!e.children){e=y(e);return p({name:"root",children:e},t)}var n=t.shift(),r=g(e.children,{name:n});if(r)return r.name!==n||t.length?p(r,t):r}function d(e,t,n){var r=p(e,t);r&&((_(n)||k(n))&&i(r)||(r.status=n,t=t.slice(0,-1),d(e,t,n)))}var h=n(19),v=h.isArray,g=h.find,m=h.get,y=h.values,b=n(26),_=b.isSuccessStatus,w=b.isFailStatus,x=b.isErroredStatus,E=b.isSkippedStatus,k=b.isUpdatedStatus,S=n(173),O=S.getCommonErrors,T=O(),C=T.NO_REF_IMAGE_ERROR;e.exports={hasNoRefImageErrors:o,hasFails:i,isSuiteFailed:a,isAcceptable:u,hasRetries:l,allSkipped:s,findNode:p,setStatusToAll:f,setStatusForBranch:d}},function(e,t){e.exports=!0},function(e,t,n){var r=n(15).f,o=n(24),i=n(8)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=r(o),a=n(3),u=r(a),l=n(4),s=r(l),c=n(5),f=r(c),p=n(0),d=r(p),h=n(1),v=r(h),g=n(20),m=r(g),y=function(e){function t(){return(0,i.default)(this,t),(0,s.default)(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return(0,f.default)(t,e),(0,u.default)(t,[{key:"render",value:function(){var e=this.props,t=e.label,n=e.handler,r=e.isActive,o=e.isAction,i=e.isSuiteControl,a=e.isControlGroup,u=e.isDisabled,l=void 0!==u&&u,s=(0,m.default)("button",{"button_type_suite-controls":i},{button_checked:r},{button_type_action:o},{"control-group__item":a});return d.default.createElement("button",{onClick:n,className:s,disabled:l},t)}}]),t}(p.Component);y.propTypes={label:v.default.string.isRequired,handler:v.default.func.isRequired,isActive:v.default.bool,isAction:v.default.bool,isDisabled:v.default.bool,isSuiteControl:v.default.bool,isControlGroup:v.default.bool},t.default=y},function(e,t,n){"use strict";function r(e){var t="string"==typeof e?e.charCodeAt(0):e;return t>=48&&t<=57}e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){function l(e,r,i){var l;return r=r||(i?0:null),t&&e.type!==t&&!o(t,e,r,i||null)||(l=n(e,r,i||null)),l===u?l:e.children&&l!==a&&s(e.children,e)===u?u:l}function s(e,t){for(var n,o,a=r?-1:1,s=(r?e.length:-1)+a;s>-1&&s0?r:n)(e)}},function(e,t,n){var r=n(53)("keys"),o=n(36);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t,n){var r=n(7),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function o(e,t,n){if(e&&s.isObject(e)&&e instanceof r)return e;var o=new r;return o.parse(e,t,n),o}function i(e){return s.isString(e)&&(e=o(e)),e instanceof r?e.format():r.prototype.format.call(e)}function a(e,t){return o(e,!1,!0).resolve(t)}function u(e,t){return e?o(e,!1,!0).resolveObject(t):t}var l=n(167),s=n(168);t.parse=o,t.resolve=a,t.resolveObject=u,t.format=i,t.Url=r;var c=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,d=["<",">",'"',"`"," ","\r","\n","\t"],h=["{","}","|","\\","^","`"].concat(d),v=["'"].concat(h),g=["%","/","?",";","#"].concat(v),m=["/","?","#"],y=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,_={javascript:!0,"javascript:":!0},w={javascript:!0,"javascript:":!0},x={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},E=n(169);r.prototype.parse=function(e,t,n){if(!s.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),o=-1!==r&&r127?I+="x":I+=R[L];if(!I.match(y)){var M=N.slice(0,O),U=N.slice(O+1),q=R.match(b);q&&(M.push(q[1]),U.unshift(q[2])),U.length&&(u="/"+U.join(".")+u),this.hostname=M.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),P||(this.hostname=l.toASCII(this.hostname));var F=this.port?":"+this.port:"",H=this.hostname||"";this.host=H+F,this.href+=this.host,P&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==u[0]&&(u="/"+u))}if(!_[h])for(var O=0,j=v.length;O0)&&n.host.split("@");S&&(n.auth=S.shift(),n.host=n.hostname=S.shift())}return n.search=e.search,n.query=e.query,s.isNull(n.pathname)&&s.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var O=E.slice(-1)[0],T=(n.host||e.host||E.length>1)&&("."===O||".."===O)||""===O,C=0,A=E.length;A>=0;A--)O=E[A],"."===O?E.splice(A,1):".."===O?(E.splice(A,1),C++):C&&(E.splice(A,1),C--);if(!b&&!_)for(;C--;C)E.unshift("..");!b||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),T&&"/"!==E.join("/").substr(-1)&&E.push("");var P=""===E[0]||E[0]&&"/"===E[0].charAt(0);if(k){n.hostname=n.host=P?"":E.length?E.shift():"";var S=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");S&&(n.auth=S.shift(),n.host=n.hostname=S.shift())}return b=b||n.host&&E.length,b&&!P&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),s.isNull(n.pathname)&&s.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){var r=n(13),o=n(181),i=n(54),a=n(52)("IE_PROTO"),u=function(){},l=function(){var e,t=n(48)("iframe"),r=i.length;for(t.style.display="none",n(92).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("