UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

287 lines (258 loc) 12 kB
require('./crypto'); var shell = require('shelljs'); var os = require('os'); var camelCase = require('pix-diff/lib/camelCase.js'); var config = require('../../../../config.json'); var request = require('request'); var RepalceRegex = /"/g; var isDashBoardReport = config['dashBoardReport']; var timeCal = {}; var fs = require('fs'); isDashBoardReport = isDashBoardReport === undefined ? true : isDashBoardReport; if (isDashBoardReport) { var currentRepo = shell.exec('git config --get remote.origin.url', { silent: true }) .stdout.split('essential-studio/')[1].replace('.git', '').replace('/', '').trim(); var components = JSON.stringify(config.components); components = components.replace(RepalceRegex, '').replace('[', '').replace(']', '').trim(); var branch = JSON.stringify(config.branchName); branch = branch.replace(RepalceRegex, '').trim(); var toMail = config.toMailAddress; var ccMail = config.ccMailAddress; } var commonCap = { 'browserstack.user': global.encrypt_decrypt.decrypt('c517d44b27fd03d45d94ea52b59c6b4b'), 'browserstack.key': global.encrypt_decrypt.decrypt('2e03c613f7035effb9d2d467109d50cb0ed8418b5394cf084189878ae7fe4710'), "browserstack.debug": "false", } var defaultCap = [{ "device": "Samsung Galaxy S8", "browserName": "chrome", "realMobile": "true", "os_version": "7.0" }, { "device": "iPhone SE", "browserName": "safari", "realMobile": "true", "os_version": "11.2" } ]; var capabilities = config['multiCapabilities']; capabilities = capabilities ? capabilities : defaultCap; capabilities.map((val, i) => { return Object.assign(val, commonCap); }); exports.config = { seleniumAddress: 'http://hub-cloud.browserstack.com/wd/hub', multiCapabilities: capabilities, framework: 'jasmine', jasmineNodeOpts: { defaultTimeoutInterval: 1000000 }, // Path to change specs: ['../../../../e2e/mobile-tests/**/*.spec.js'], onComplete: function () { if (isDashBoardReport) { var failurecount = 0; var resultjson = require('../../../../jasmine-test-results.json'); var key = Object.keys(resultjson); var totalcount = 0; for (var i = 0; i < key.length; i++) { var Objects = resultjson[key[i]]["specs"]; totalcount = totalcount + Objects.length; for (var j = 0; j < Objects.length; j++) { if (Objects[j].status === "failed") { failurecount++; } } } ccMail.push("ej2core@syncfusion.com"); var data = { RepositoryName: currentRepo, ComponentName: components, BranchName: branch, StartDate: new Date(), EndDate: new Date(), Type: "Mobile", TotalTestCaseCount: totalcount, FailureTestCaseCount: failurecount, SuccessTestCaseCount: totalcount - failurecount, Browser: browser.browserName, toMailAddress: toMail, ccMailAddress: ccMail }; var status = failurecount.length ? 'Failure' : 'Success'; var successCount = totalcount - failurecount; var notRun = totalcount - (successCount + failurecount); if (fs.existsSync('./testreport')) { shell.cd('./testreport'); shell.exec('Syncfusion.UpdateTestResults.exe /Platform:"JavaScript - EJ2" /Control:"' + components + '" /TestingTool:"Selenium" /StartTime:"' + new Date().toLocaleTimeString() + '" /EndTime:"' + new Date().toLocaleTimeString() + '" /Status:"' + status + '" /TotalTestCase:' + totalcount + ' /SuccessCount:' + successCount + ' /FailureCount:' + failurecount + ' /NotRunCount:' + notRun + ' /UpdatedBy:"' + toMail[0] + '"'); shell.cd('../'); } request({ url: 'https://ej2services.syncfusion.com/cicentral/api/getE2EReport', method: 'POST', json: true, body: data, headers: { 'authorization': 'ej2centrailzedstatus', 'content-type': 'application/json' } }); } browser.driver.quit(); console.log(browser.browserName + ' driver closed!'); }, onPrepare: function () { const PixDiff = require('pix-diff'); const fs = require('fs'); const path = require('path'); browser.ignoreSynchronization = true; browser.waitForAngularEnabled = false; browser.isDesktop = false; timeCal['startTime'] = new Date().toLocaleTimeString(); //Path to change browser.basePath = require('../../../../protractor.browser.json').basePath; var JSONReporter = require('jasmine-json-test-reporter'); jasmine.getEnv().addReporter(new JSONReporter({ file: 'jasmine-test-results.json', beautify: true, indentationLevel: 4 // used if beautify === true })); // Print User Agent browser.executeAsyncScript(function (callback) { callback(navigator.userAgent); }).then(function (uA) { console.log(uA); }); browser.getCapabilities().then(function (cap) { browser.browserName = cap.get('browserName'); browser.pixResult = PixDiff; browser.pixDiff = new PixDiff({ basePath: './e2e', diffPath: './e2e', formatImageName: '{tag}' }); browser.pixDiff.platformName = cap.get('platformName'); browser.pixDiff.deviceModel = cap.get('deviceModel'); browser.pixDiff.deviceName = cap.get('deviceName'); if (cap.get('platformName') === 'Android') { browser.pixDiff.devicePath = browser.pixDiff.platformName + '/' + browser.pixDiff.deviceModel; } else { browser.pixDiff.devicePath = browser.pixDiff.platformName + '/' + browser.pixDiff.deviceName; } console.log('check Device Path is : ', browser.pixDiff.devicePath); //override difference path browser.pixDiff.diffPath = path.normalize(camelCase('./e2e/' + browser.pixDiff.devicePath + '/Diff/')); //create folder if not present createF(browser.pixDiff.diffPath); browser.compareScreen = function (element, fileName, opt) { var folderName = fileName; var fArr = fileName.split('/'); if (fArr.length > 1) { fArr.splice(-1, 1); folderName = fArr.join('/') createF(camelCase('e2e/mobile/expected/' + browser.pixDiff.devicePath)); createF(camelCase('e2e/mobile/actual/' + browser.pixDiff.devicePath)); } // thresholdType: 'percent', // threshold: 0.009, var option = { imageAPath: '/mobile/expected/' + browser.pixDiff.devicePath + '/' + fileName, // Use file-path imageBPath: '/mobile/actual/' + browser.pixDiff.devicePath + '/' + fileName, filter: ['grayScale'], debug: true, hideShift: true, }; var doneFn = arguments[arguments.length - 1]; if (typeof opt === 'object' && Object.keys(opt).length) { Object.assign(option, opt); } browser.pixDiff.saveRegion(element, '/mobile/Actual/' + browser.pixDiff.devicePath + '/' + fileName, option).then(() => { var fPathName = path.resolve(__dirname, '../../../../' + camelCase('e2e/mobile/Expected/' + browser.pixDiff.devicePath + '/' + fileName) + '.png'); if (!fs.existsSync(fPathName) && fs.existsSync(fPathName.replace("Expected", "Actual"))) { fs.copyFileSync(fPathName.replace("Expected", "Actual"), fPathName); console.log('Expected Image Created : /mobile/Expected/' + browser.pixDiff.devicePath + '/' + fileName); } browser.saveCheckImage(element, fileName, option, doneFn); }); } browser.saveCheckImage = function (element, fileName, option, doneFn) { browser.pixDiff.checkRegion(element, '/mobile/Expected/' + browser.pixDiff.devicePath + '/' + fileName, option).then(function (result) { // // * - `RESULT_UNKNOWN`: 0 // * - `RESULT_DIFFERENT`: 1 // * - `RESULT_SIMILAR`: 7 // * - `RESULT_IDENTICAL`: 5 expect(result.code).toEqual(browser.pixResult.RESULT_IDENTICAL); if (typeof doneFn === 'function') { doneFn(); } }); } browser.waitForEvent = function (id, moduleName, eventName) { return browser.executeAsyncScript(function (id, moduleName, eventName, callback) { var instances = document.getElementById(id).ej2_instances; var instanceObj; for (var i = 0; instances && i < instances.length; i++) { if (instances[i].getModuleName() == moduleName) { instanceObj = instances[i] } } if (instanceObj) { var handler; handler = function (e) { instanceObj.removeEventListener(eventName, handler); callback(); }; instanceObj.addEventListener(eventName, handler); } else { callback(); } }, id, moduleName, eventName); } browser.injectScript = function (path, callback) { return browser.executeAsyncScript(function (path) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.onload = function () { callback(); } script.src = path; head.appendChild(script); }, browser.basePath + path); } browser.injectCss = function (content) { return browser.wait(browser.executeScript(` var style = document.createElement('style'); style.id = 'browsercss'; if (style.styleSheet) {style.styleSheet.cssText = '` + content + `';} else{style.appendChild(document.createTextNode('` + content + `'));} document.head.appendChild(style); `)); } browser.load = function (path) { browser.get(browser.basePath + path); browser.wait(function () { browser.sleep(30000); return element(By.css('.e-control')).isDisplayed(); }, 30000); if (browser.css) { browser.injectCss(browser.css); } } browser.loadAsync = function (path) { return browser.get(browser.basePath + path); } }); }, }; function createF(path) { shell.mkdir('-p', path); }