From f0de24ccf693d1530b5c0b123f2a7f73c24a23dc Mon Sep 17 00:00:00 2001 From: Keerthi Niranjan Date: Tue, 24 Jul 2018 11:24:21 +0530 Subject: [PATCH 01/20] Removes launchd plist files as there no longer needed (#442) --- library/search-launch-agent.sh | 44 --------------------------------- library/search-launch-daemon.sh | 35 -------------------------- 2 files changed, 79 deletions(-) delete mode 100644 library/search-launch-agent.sh delete mode 100644 library/search-launch-daemon.sh diff --git a/library/search-launch-agent.sh b/library/search-launch-agent.sh deleted file mode 100644 index 4dacf670..00000000 --- a/library/search-launch-agent.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -pid=$2 -launchDir=~/Library/LaunchAgents/ - -if $1; then - if [ ! -d "$launchDir" ]; then - mkdir "$launchDir" - fi - launchctl unload ~/Library/LaunchAgents/com.symphony-search.data.plist - cat > ~/Library/LaunchAgents/com.symphony-search.data.plist << EOT - - - - - Label - com.symphony-search.data.agent - ProgramArguments - - /bin/sh - scriptPath - false - SymphonyPID - - RunAtLoad - - StartInterval - 60 - StandardOutPath - /dev/null - StandardErrorPath - /dev/null - - -EOT -launchctl load ~/Library/LaunchAgents/com.symphony-search.data.plist -elif ps -p $pid > /dev/null -then - echo true -else - echo false - rm -rf dataPath - launchctl unload ~/Library/LaunchAgents/com.symphony-search.data.plist - rm -rf ~/Library/LaunchAgents/com.symphony-search.data.plist -fi \ No newline at end of file diff --git a/library/search-launch-daemon.sh b/library/search-launch-daemon.sh deleted file mode 100644 index f325197f..00000000 --- a/library/search-launch-daemon.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -launchDir=~/Library/LaunchAgents/ - -if $1; then - if [ ! -d "$launchDir" ]; then - mkdir "$launchDir" - fi - cat > ~/Library/LaunchAgents/com.symphony-search.clear.plist << EOT - - - - - Label - com.symphony-search.clear.daemon - ProgramArguments - - /bin/sh - scriptPath - false - - RunAtLoad - - KeepAlive - - StandardOutPath - /dev/null - StandardErrorPath - /dev/null - - -EOT -else - rm -rf dataPath -fi \ No newline at end of file From 7791d5b39a5c5cd81ae2ba45336320d5f59b7849 Mon Sep 17 00:00:00 2001 From: thaisym1912 <33540170+thaisym1912@users.noreply.github.com> Date: Wed, 1 Aug 2018 00:04:45 +0700 Subject: [PATCH 02/20] AVT-914 [Spectron][Windows] Add test "Keep size and position of the windows in previous session" (#430) --- js/windowMgr.js | 2 +- tests/spectron/full-screen.spectron.js | 4 +- tests/spectron/resizeWindows.spectron.js | 70 +++++++------------ tests/spectron/saveLayout.spectron.js | 74 +++++++++++++++++++++ tests/spectron/spectronConstants.js | 5 +- tests/spectron/spectronInterfaces.js | 8 +++ tests/spectron/spectronSetup.js | 37 ++++++++--- tests/spectron/spectronWebActions.js | 20 ++++++ tests/spectron/spectronWindowsActions.js | 54 +++++++++++++++ tests/spectron/zoom-in-zoom-out.spectron.js | 14 +++- 10 files changed, 227 insertions(+), 61 deletions(-) create mode 100644 tests/spectron/saveLayout.spectron.js create mode 100644 tests/spectron/spectronInterfaces.js create mode 100644 tests/spectron/spectronWebActions.js create mode 100644 tests/spectron/spectronWindowsActions.js diff --git a/js/windowMgr.js b/js/windowMgr.js index a461d279..4300242c 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -215,7 +215,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { mainWindow.webContents.send('window-leave-full-screen'); }); - if (initialBounds && !isNodeEnv) { + if (initialBounds) { // maximizes the application if previously maximized if (initialBounds.isMaximized) { mainWindow.maximize(); diff --git a/tests/spectron/full-screen.spectron.js b/tests/spectron/full-screen.spectron.js index c959e152..4e84b60e 100644 --- a/tests/spectron/full-screen.spectron.js +++ b/tests/spectron/full-screen.spectron.js @@ -123,8 +123,8 @@ describe('Tests for Full screen', () => { robot.setMouseDelay(100); let x = bounds.x + 200; let y = bounds.y + 200; - robot.moveMouseSmooth(x, y); - robot.mouseClick(); + robot.moveMouse(x, y); + robot.mouseClick("left"); robot.keyTap('f11'); diff --git a/tests/spectron/resizeWindows.spectron.js b/tests/spectron/resizeWindows.spectron.js index 851d000c..f63a067b 100644 --- a/tests/spectron/resizeWindows.spectron.js +++ b/tests/spectron/resizeWindows.spectron.js @@ -1,44 +1,35 @@ const Application = require('./spectronSetup'); -const robot = require('robotjs'); const {isMac} = require('../../js/utils/misc'); +const WindowsActions = require('./spectronWindowsActions'); let app = new Application({}); -let defaultWidth; -let defaultHeight; +let windowActions; !isMac ? describe('Tests for Resizing windows', () => { let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); - beforeAll((done) => { - return app.startApplication().then((startedApp) => { - app = startedApp; + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication(); + windowActions = await new WindowsActions(app); done(); - }).catch((err) => { + } catch(err) { done.fail(new Error(`Unable to start application error: ${err}`)); - }); + }; }); - afterAll((done) => { - if (app && app.isRunning()) { - // resize to default size - app.browserWindow.getBounds().then((bounds) => { - let x = bounds.x - (defaultWidth - bounds.width); - let y = bounds.y - (defaultHeight - bounds.height); - robot.moveMouse(bounds.x, bounds.y); - robot.mouseToggle("down"); - robot.dragMouse(x, y); - robot.mouseToggle("up"); - }) - //close app - jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; - app.stop().then(() => { + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); done(); - }).catch((err) => { - done(); - }); - } + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; }); /** @@ -46,24 +37,13 @@ let defaultHeight; * TC-ID: 3028239 * Cover scenarios in AVT-768 */ - it('should be minimized up to 300px', (done) => { - app.browserWindow.getBounds().then((bounds) => { - defaultHeight = bounds.height; - defaultWidth = bounds.width; - let x = bounds.x + bounds.width; - let y = bounds.y + bounds.height; - robot.setMouseDelay(500); - robot.moveMouse(bounds.x, bounds.y); - robot.mouseToggle("down"); - robot.dragMouse(x, y); - robot.mouseToggle("up"); - return app.browserWindow.getBounds().then((bounds) => { - const data = {x: bounds.width, y: bounds.height}; - expect(data).toEqual({x: 300, y: 300}); - done(); - }).catch((err) => { - done.fail(new Error(`failed to minimize window to 300 px with error: ${err}`)); - }) - }); + it('Should be minimized up to 300px', async (done) => { + try { + await windowActions.resizeWindows(0, 0); + expect([ 300, 300 ]).toEqual(await windowActions.getCurrentSize()); + done(); + } catch (err) { + done.fail(new Error(`failed to minimize window to 300 px with error: ${err}`)); + } }); }) : describe.skip(); \ No newline at end of file diff --git a/tests/spectron/saveLayout.spectron.js b/tests/spectron/saveLayout.spectron.js new file mode 100644 index 00000000..cd1baca0 --- /dev/null +++ b/tests/spectron/saveLayout.spectron.js @@ -0,0 +1,74 @@ +const Application = require('./spectronSetup'); +const WindowsActions = require('./spectronWindowsActions'); +const WebActions = require('./spectronWebActions'); +const { isMac } = require('../../js/utils/misc'); + +let app; +let windowActions; +let webActions; + +!isMac ? describe('Tests for saved layout', () => { + + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication(); + windowActions = await new WindowsActions(app); + done(); + } catch(err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + + /** + * Keep size and position of the windows in previous session + * TC-ID: 2915948 + * Cover scenarios in AVT-914 + */ + it('Keep size and position of the windows in previous session', async (done) => { + try { + var defaultPosition = await windowActions.getCurrentPosition(); + var defaultSize = await windowActions.getCurrentSize(); + + // Size and position of previos session keep after resizing and dragging + await windowActions.setPosition(defaultPosition[0], 20); + await windowActions.setSize(defaultSize[0] - 100, defaultSize[0] - 100); + await windowActions.sleep(1000); // Sleep 1s after resizing + var previousPosition = await windowActions.getCurrentPosition(); + var previousSize = await windowActions.getCurrentSize(); + await app.stop(); + app = await new Application({}).startApplication({defaultSize: false, defaultPosition: false}); + windowActions = await new WindowsActions(app); + webActions = await new WebActions(app); + expect(previousPosition).toEqual(await windowActions.getCurrentPosition()); + expect(previousSize).toEqual(await windowActions.getCurrentSize()); + + // Size and position of previous session keep after maximizing + await webActions.maximizeWindows(); + await windowActions.sleep(1000); // Sleep 1s after resizing + previousSize = await windowActions.getCurrentSize(); + await app.stop(); + app = await new Application({}).startApplication({defaultSize: false, defaultPosition: false}); + windowActions = await new WindowsActions(app); + webActions = await new WebActions(app); + expect(previousSize).toEqual(await windowActions.getCurrentSize()); + done(); + } catch(err) { + done.fail(new Error(`Fail to keep size and position of the windows in previous session with error: ${err}`)); + }; + }); +}) : describe.skip(); diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 458def36..cc988e5c 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -7,4 +7,7 @@ module.exports = { SEARCH_LIBRARY_PATH_MAC: "node_modules/electron/dist/Electron.app/Contents/library", SEARCH_LIBRARY_PATH_WIN: "node_modules/electron/dist/library", -}; \ No newline at end of file + + TESTED_HOST: "https://cip4-qa.symphony.com/", +}; + diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js new file mode 100644 index 00000000..b435d9e1 --- /dev/null +++ b/tests/spectron/spectronInterfaces.js @@ -0,0 +1,8 @@ +module.exports= { + + // Title bar + TITLE_BAR: "#title-bar", + MAXIMIZE_BTN: "#title-bar-maximize-button", + + SYM_LOGO: "#logo" +}; \ No newline at end of file diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index de651a09..478dd55d 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -4,6 +4,7 @@ const fs = require('fs'); const { isMac, isWindowsOS } = require('../../js/utils/misc'); const ncp = require('ncp').ncp; const constants = require('./spectronConstants.js'); +const ui = require('./spectronInterfaces.js'); class App { @@ -29,19 +30,35 @@ class App { this.app = new Application(this.options); } - - startApplication(configurations) { - return this.app.start().then((app) => { - if (configurations) - { - if (configurations.alwaysOnTop) { - app.browserWindow.setAlwaysOnTop(true); + + async startApplication(configurations) { + try { + this.app = await this.app.start(); + await this.app.client.waitForVisible(ui.SYM_LOGO, require('./spectronSetup').getTimeOut()); + await this.app.browserWindow.minimize(); + await this.app.browserWindow.restore(); + if (configurations) { + if ((typeof configurations.alwaysOnTop !== "undefined") && (configurations.alwaysOnTop === false)) { + await this.app.browserWindow.setAlwaysOnTop(false); + } else { + await this.app.browserWindow.setAlwaysOnTop(true); + } + if (configurations.testedHost) { + await this.app.client.waitUntilWindowLoaded().url(configurations.testedHost); } } - return app; - }).catch((err) => { + + if ((typeof configurations === "undefined") || (typeof configurations.defaultSize === "undefined") || (configurations.defaultSize === true)) { + await this.app.browserWindow.setSize(900, 900); + } + if ((typeof configurations === "undefined") || (typeof configurations.defaultPosition === "undefined") || (configurations.defaultPosition === true)) { + await this.app.browserWindow.center(); + } + + return this.app; + } catch (err) { throw new Error("Unable to start application " + err); - }); + }; } static getAppPath() { diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js new file mode 100644 index 00000000..a04098d4 --- /dev/null +++ b/tests/spectron/spectronWebActions.js @@ -0,0 +1,20 @@ +const ui = require('./spectronInterfaces.js'); + +class WebActions { + constructor(app) { + this.app = app; + } + + async clickMaximizeButton(){ + await this.app.client.waitForVisible(ui.MAXIMIZE_BTN, 10000).click(ui.MAXIMIZE_BTN); + } + + async maximizeWindows() { + await this.clickMaximizeButton(); + await this.app.browserWindow.isMaximized().then(function (maximized) { + expect(maximized).toBeTruthy(); + }) + } +} + +module.exports = WebActions; diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js new file mode 100644 index 00000000..89425ad6 --- /dev/null +++ b/tests/spectron/spectronWindowsActions.js @@ -0,0 +1,54 @@ +const robot = require('robotjs'); + +class WindowsActions { + constructor(app) { + this.app = app; + } + + async getCurrentSize() { + return this.app.browserWindow.getSize(); + } + + async setSize(width, height) { + await this.app.browserWindow.setSize(width, height); + } + + async resizeWindows(width, height) { + await this.app.browserWindow.getBounds().then((bounds) => { + let x = bounds.x + (bounds.width - width); + let y = bounds.y + (bounds.height - height); + robot.setMouseDelay(500); + robot.moveMouse(bounds.x, bounds.y); + robot.mouseToggle("down"); + robot.dragMouse(x, y); + robot.mouseToggle("up"); + }) + } + + async getCurrentPosition() { + return this.app.browserWindow.getPosition(); + } + + async setPosition(x, y) { + await this.app.browserWindow.setPosition(x, y); + } + + async dragWindows(x, y) { + await this.app.browserWindow.getBounds().then((bounds) => { + robot.setMouseDelay(500); + robot.moveMouse(bounds.x + 200, bounds.y + 10); + robot.mouseToggle("down"); + robot.moveMouse(bounds.x + 205, bounds.y + 10); // Workaround to make this keyword works properly, refer: https://github.com/octalmage/robotjs/issues/389 + robot.dragMouse(x + 205, y + 10); + robot.mouseToggle("up"); + }) + } + + async sleep(ms){ + return new Promise(resolve=>{ + setTimeout(resolve,ms) + }) + } +} + +module.exports = WindowsActions; diff --git a/tests/spectron/zoom-in-zoom-out.spectron.js b/tests/spectron/zoom-in-zoom-out.spectron.js index f2efb3c0..54ee8e03 100644 --- a/tests/spectron/zoom-in-zoom-out.spectron.js +++ b/tests/spectron/zoom-in-zoom-out.spectron.js @@ -41,6 +41,16 @@ describe('Tests for Zoom in and Zoom out', () => { } afterAll((done) => { + // Get it back normal size + if (!isMac) { + for (let i = 0; i < 4; i++) { + robot.keyToggle('+', 'down', ['control', 'shift']); + } + robot.keyToggle('+', 'up'); + robot.keyToggle('control', 'up'); + robot.keyToggle('shift', 'up'); + } + if (app && app.isRunning()) { jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; app.client.getWindowCount().then((count) => { @@ -124,7 +134,7 @@ describe('Tests for Zoom in and Zoom out', () => { robot.setMouseDelay(100); let x = bounds.x + 200; let y = bounds.y + 200; - robot.moveMouseSmooth(x, y); + robot.moveMouse(x, y); robot.mouseClick(); robot.keyToggle('0', 'down', ['control']); @@ -174,7 +184,7 @@ describe('Tests for Zoom in and Zoom out', () => { robot.setMouseDelay(100); let x = bounds.x + 200; let y = bounds.y + 200; - robot.moveMouseSmooth(x, y); + robot.moveMouse(x, y); robot.mouseClick(); robot.keyToggle('0', 'down', ['control']); From f893b5658cc1728ddca65ed42c462f9f0ad7c993 Mon Sep 17 00:00:00 2001 From: tranducanh Date: Wed, 1 Aug 2018 16:13:57 +0700 Subject: [PATCH 03/20] AVT-937,AVT-938,AVT-939 : [Spectron][Windows] Close window when 'Minimize on Close' is ON (#437) --- .../minimize-on-close-icon.spectron.js | 154 ++++++++++++++++++ tests/spectron/spectronConstants.js | 13 +- tests/spectron/spectronInterfaces.js | 11 +- tests/spectron/spectronSetup.js | 10 +- tests/spectron/spectronWebActions.js | 17 +- tests/spectron/spectronWindowsActions.js | 127 +++++++++++++++ 6 files changed, 318 insertions(+), 14 deletions(-) create mode 100644 tests/spectron/minimize-on-close-icon.spectron.js diff --git a/tests/spectron/minimize-on-close-icon.spectron.js b/tests/spectron/minimize-on-close-icon.spectron.js new file mode 100644 index 00000000..d30f27c4 --- /dev/null +++ b/tests/spectron/minimize-on-close-icon.spectron.js @@ -0,0 +1,154 @@ +const Application = require('./spectronSetup'); +const { isMac } = require('../../js/utils/misc'); +const WindowsAction = require('./spectronWindowsActions'); +const WebAction = require('./spectronWebActions'); +var app = new Application({ + startTimeout: Application.getTimeOut(), + waitTimeout: Application.getTimeOut() + }); +let wActions; +let webActions; + +!isMac ?describe('Add Test To Verify Minimize on Close', () => { + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + beforeAll(async (done) => { + await app.startApplication().then(async(startedApp) => { + app.app = await startedApp; + wActions = await new WindowsAction(app.app); + webActions = await new WebAction(app.app); + }).then((async() =>{ + await getConfigPath(app.app).then((config) => { + app.pathApp = config; + }).catch((err) => { + done.fail(new Error(`Unable to start application error: ${err}`)); + }); + done(); + })); + + }); + + function getConfigPath(app) { + return new Promise(function (resolve, reject) { + app.client.addCommand('getUserDataPath', function () { + return app.client.execute(function () { + return require('electron').remote.app.getPath('userData'); + }) + }); + app.client.getUserDataPath().then((userConfigPath) => { + resolve(userConfigPath.value) + }).catch((err) => { + reject(err); + }); + }); + } + + afterAll((done) => { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + app.client.getWindowCount().then((count) => { + if (count > 0) { + app.stop().then(() => { + done(); + }).catch((err) => { + done(); + }); + } else { + done(); + } + }) + } else { + done(); + } + }); + + /** + * Verify Minimize on Close option once the application is installed + * TC-ID: 3084609 + * Cover scenarios in AVT-939 + */ + it('Verify Minimize on Close option once the application is installed', async(done) => { + await Application.readConfig(app.pathApp).then(async (userConfig) => { + + //When app un-ticked on Minimize On Close Menu Item + //Select 1 times to perform for ticking Menu + await wActions.openMenu(["Window","Minimize on Close"]); + + if (userConfig.minimizeOnClose != false) { + //When app ticked on Minimize On Close Menu Item + //Select 2 times to perform for ticking Menu + await wActions.openMenu(["Window","Minimize on Close"]); + + } + await wActions.openMenu(["Window","Close"]); + await wActions.verifyMinimizeWindows(); + done(); + + }).catch((err) => { + done.fail(new Error(`minimize-on-close failed in readConfig with error: ${err}`)); + }) + }); + + /** + * Close window when 'Minimize on Close' is ON + * TC-ID: 2911252 + * Cover scenarios in AVT-937 + */ + it('Close window when "Minimize on Close" is ON', async (done) => { + + Application.readConfig(app.pathApp).then(async (userConfig) => { + + //When app un-ticked on Minimize On Close Menu Item + //Select 1 times to perform for ticking Menu + await wActions.focusWindow(); + await wActions.openMenu(["Window","Minimize on Close"]); + if (userConfig.minimizeOnClose != false) { + await wActions.openMenu(["Window","Minimize on Close"]); + } + //When app ticked on Minimize On Close Menu Item + //Select 2 times to perform for ticking Menu + + await wActions.openMenu(["Window","Close"]) + await wActions.verifyMinimizeWindows(); + + await wActions.focusWindow(); + await wActions.pressCtrlW(); + await wActions.verifyMinimizeWindows(); + + await wActions.focusWindow(); + await wActions.openMenu(["Window","Close"]) + await wActions.verifyMinimizeWindows(); + done(); + + }).catch((err) => { + done.fail(new Error(`minimize-on-close failed in readConfig with error: ${err}`)); + }) + }); + /** + * Verify by deselecting Minimize on Close option once the application is launched + * TC-ID: 3084612 + * Cover scenarios in AVT-938 + */ + it('Verify by deselecting Minimize on Close option once the application is launched', async (done) => { + await Application.readConfig(app.pathApp).then(async (userConfig) => { + + await wActions.focusWindow(); + await wActions.openMenu(["Window","Minimize on Close"]).then(async ()=> + { + if (userConfig.minimizeOnClose == false) { + //When app does not tick on Minimize On Close Menu Item + //Select 2 times to perform for un-ticking Menu + await wActions.openMenu(["Window","Minimize on Close"]); + + } + await wActions.openMenu(["Window","Close"]) + await wActions.verifyMinimizeWindows(); + done(); + }); + + + }).catch((err) => { + done.fail(new Error(`minimize-on-close failed in readConfig with error: ${err}`)); + }) + }); +}) : describe.skip(); diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index cc988e5c..6dbfd876 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -7,7 +7,16 @@ module.exports = { SEARCH_LIBRARY_PATH_MAC: "node_modules/electron/dist/Electron.app/Contents/library", SEARCH_LIBRARY_PATH_WIN: "node_modules/electron/dist/library", - TESTED_HOST: "https://cip4-qa.symphony.com/", -}; + MENU: { + "root": { + name: "menu", step: 0, items: [ + { name: "Edit", step: 0, items: [{ name: "Undo", step: 0 }, { name: "Redo", step: 1 }, { name: "Cut", step: 2 }, { name: "Copy", step: 3 }, { name: "Paste", step: 4 }, { name: "Paste and Match Style", step: 5 }, { name: "Delete", step: 6 }, { name: "Select All", step: 7 }] }, + { name: "View", step: 1, items: [{ name: "Reload", step: 0 }, { name: "Actual Size", step: 1 }, { name: "Zoom In", step: 2 }, { name: "Zoom Out", step: 3 }, { name: "Toogle Full Screen", step: 4 }] }, + { name: "Window", step: 2, items: [{ name: "Minimize", step: 0 }, { name: "Close", step: 1 }, { name: "Auto Launch On Startup", step: 2 }, { name: "Always on Top", step: 3 }, { name: "Minimize on Close", step: 4 }] }, + { name: "Help", step: 3, items: [{ name: "Symphony Help", step: 0 }, { name: "Learn More", step: 1 }, { name: "Troubleshooting", step: 2 }, { name: "About Symphony", step: 3 }] } + ] + } + } +}; diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js index b435d9e1..05f69d40 100644 --- a/tests/spectron/spectronInterfaces.js +++ b/tests/spectron/spectronInterfaces.js @@ -1,8 +1,9 @@ -module.exports= { - +module.exports= { // Title bar TITLE_BAR: "#title-bar", - MAXIMIZE_BTN: "#title-bar-maximize-button", - - SYM_LOGO: "#logo" + MAXIMIZE_BTN: "#title-bar-maximize-button", + SYM_LOGO: "#logo", + MINIMIZED_BUTTON: "button#title-bar-minimize-button", + CLOSE_BUTTON: "button#title-bar-close-button", + MAIN_MENU_ITEM: "#hamburger-menu-button" }; \ No newline at end of file diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index 478dd55d..ef923ca7 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -27,9 +27,9 @@ class App { App.copyLibraries(constants.SEARCH_LIBRARY_PATH_WIN); } - this.app = new Application(this.options); - } + this.pathApp = ''; + } async startApplication(configurations) { try { @@ -56,7 +56,7 @@ class App { } return this.app; - } catch (err) { + } catch (err) { throw new Error("Unable to start application " + err); }; } @@ -70,7 +70,7 @@ class App { } static getTimeOut() { - return 90000 + return 90000; } static readConfig(configPath) { @@ -133,7 +133,7 @@ class App { }); }); } - + } module.exports = App; diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index a04098d4..db4c269a 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -3,8 +3,8 @@ const ui = require('./spectronInterfaces.js'); class WebActions { constructor(app) { this.app = app; - } - + } + async clickMaximizeButton(){ await this.app.client.waitForVisible(ui.MAXIMIZE_BTN, 10000).click(ui.MAXIMIZE_BTN); } @@ -15,6 +15,19 @@ class WebActions { expect(maximized).toBeTruthy(); }) } + + async minimizeWindowByClick() { + await this.app.client.click(ui.MINIMIZED_BUTTON); + } + + async closeWindowByClick() { + await this.app.client.click(ui.CLOSE_BUTTON); + } + + async openApplicationMenuByClick() { + await this.app.client.click(ui.MAIN_MENU_ITEM); + } + } module.exports = WebActions; diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 89425ad6..1bdd5c57 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -1,8 +1,13 @@ const robot = require('robotjs'); +const constants = require('./spectronConstants.js'); +const WebActions = require ('./spectronWebActions.js'); + + class WindowsActions { constructor(app) { this.app = app; + } async getCurrentSize() { @@ -48,7 +53,129 @@ class WindowsActions { return new Promise(resolve=>{ setTimeout(resolve,ms) }) + } + + async verifyMinimizeWindows() { + await this.app.browserWindow.isMinimized().then(async function (minimized) { + await expect(minimized).toBeTruthy(); + }).catch((err) => { + console.log(err.name); + });; } + + async isMinimizedWindows() { + let rminimized = -1; + + await this.app.browserWindow.isMinimized().then(async function (minimized) { + rminimized = constants.MINIMIZED; + }).catch((err) => { + rminimized = constants.QUIT; + return rminimized; + }); + + return rminimized; + } + + async selectMinimizeOnClose() { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(1000); + await robot.keyTap('enter'); + await robot.keyTap('down'); + await robot.keyTap('down'); + await robot.keyTap('right'); + for (let i = 0; i < 4; i++) { + await robot.keyTap('down'); + } + await robot.keyTap('enter'); + }); + } + + async quitApp() { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(1000); + await robot.keyTap('enter'); + await robot.keyTap('down'); + await robot.keyTap('down'); + await robot.keyTap('right'); + for (let i = 0; i < 6; i++) { + await robot.keyTap('down'); + } + await robot.keyTap('enter'); + }); + } + + async pressCtrlW() { + await robot.keyToggle('w', 'down', ['control']); + await robot.keyToggle('w', 'up', ['control']); + } + async focusWindow() { + await this.app.browserWindow.show(); + } + + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async actionForMenus(arrMenu) { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(1000); + await robot.keyTap('enter'); + for (var i = 0; i < arrMenu.length; i++) { + + for (var s = 0; s < arrMenu[i].step; s++) { + await robot.keyTap('down'); + } + if (arrMenu.length > 1 && i != arrMenu.length - 1) { + //handle right keygen + await robot.keyTap('right'); + } + } + await robot.keyTap('enter'); + }); + } + } module.exports = WindowsActions; From 75d2e066731959f35a51b02397e44d54e2d7da49 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Wed, 1 Aug 2018 14:51:29 +0530 Subject: [PATCH 04/20] ELECTRON-591 - Add logic to close up child windows whenever parent window is navigated or reloaded (#446) --- js/mainApiMgr.js | 2 + js/notify/electron-notify.js | 33 ++++++- js/preload/preloadMain.js | 2 +- js/windowMgr.js | 24 ++++- .../spectron/closePopOutsOnReload.spectron.js | 90 +++++++++++++++++++ 5 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 tests/spectron/closePopOutsOnReload.spectron.js diff --git a/js/mainApiMgr.js b/js/mainApiMgr.js index abdc2b7d..b523a34e 100644 --- a/js/mainApiMgr.js +++ b/js/mainApiMgr.js @@ -67,6 +67,8 @@ function sanitize(windowName) { if (!isMac) { eventEmitter.emit('killScreenSnippet'); } + // Closes all the child windows + windowMgr.cleanUpChildWindows(); } } diff --git a/js/notify/electron-notify.js b/js/notify/electron-notify.js index 5fc99bbf..db79078d 100644 --- a/js/notify/electron-notify.js +++ b/js/notify/electron-notify.js @@ -487,7 +487,7 @@ function buildCloseNotification(notificationWindow, notificationObj, getTimeoutI // safety check to prevent from using an // already destroyed notification window - if (notificationWindow.isDestroyed()) { + if (notificationWindow && notificationWindow.isDestroyed()) { return new Promise(function(exitEarly) { exitEarly() }) } @@ -699,6 +699,7 @@ function getWindow() { windowProperties.width = config.width; windowProperties.height = config.height; notificationWindow = new BrowserWindow(windowProperties); + notificationWindow.winName = 'notification-window'; notificationWindow.setVisibleOnAllWorkspaces(true); notificationWindow.loadURL(getTemplatePath()); notificationWindow.webContents.on('did-finish-load', function() { @@ -737,13 +738,39 @@ function cleanUpActiveNotification(event) { */ function cleanUpInactiveWindow() { inactiveWindows.forEach(function(window) { - if (!window.isDestroyed()) { + if (window && !window.isDestroyed()) { window.close(); } }); inactiveWindows = []; } +/** + * Closes all the notification windows + * and cleans up the reference variables + */ +function closeAll() { + resetAnimationQueue(); + const notificationWin = Object.assign([], activeNotifications); + for (let activeNotification of notificationWin) { + if (activeNotification && !activeNotification.isDestroyed()) { + activeNotification.close(); + } + } + + nextInsertPos = {}; + activeNotifications = []; + notificationQueue = []; + cleanUpInactiveWindow(); +} + +/** + * Resets the animation queue instance + */ +function resetAnimationQueue() { + animationQueue = new AnimationQueue(); +} + /** * Start a new timer to close the notification * @param event @@ -784,3 +811,5 @@ ipc.on('electron-notify-mouseover', onMouseOver); module.exports.notify = notify; module.exports.updateConfig = updateConfig; module.exports.reset = setupConfig; +module.exports.closeAll = closeAll; +module.exports.resetAnimationQueue = resetAnimationQueue; diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index f02cb13c..7491451a 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -498,7 +498,7 @@ function createAPI() { function sanitize() { local.ipcRenderer.send(apiName, { cmd: apiCmds.sanitize, - windowName: window.name + windowName: window.name || 'main' }); } diff --git a/js/windowMgr.js b/js/windowMgr.js index 4300242c..62583715 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -1102,6 +1102,27 @@ function handleKeyPress(keyCode) { } } +/** + * Finds all the child window and closes it + */ +function cleanUpChildWindows() { + const browserWindows = BrowserWindow.getAllWindows(); + notify.resetAnimationQueue(); + if (browserWindows && browserWindows.length) { + browserWindows.forEach(browserWindow => { + // Closes only child windows + if (browserWindow && !browserWindow.isDestroyed() && browserWindow.winName !== 'main') { + // clean up notification windows + if (browserWindow.winName === 'notification-window') { + notify.closeAll(); + } else { + browserWindow.close(); + } + } + }); + } +} + module.exports = { createMainWindow: createMainWindow, @@ -1115,5 +1136,6 @@ module.exports = { verifyDisplays: verifyDisplays, getMenu: getMenu, setIsAutoReload: setIsAutoReload, - handleKeyPress: handleKeyPress + handleKeyPress: handleKeyPress, + cleanUpChildWindows: cleanUpChildWindows, }; diff --git a/tests/spectron/closePopOutsOnReload.spectron.js b/tests/spectron/closePopOutsOnReload.spectron.js new file mode 100644 index 00000000..845cd0b5 --- /dev/null +++ b/tests/spectron/closePopOutsOnReload.spectron.js @@ -0,0 +1,90 @@ +const Application = require('./spectronSetup'); +const path = require('path'); + +let app = new Application({}); + +describe('Tests for pop outs reload scenario', () => { + + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + + beforeAll((done) => { + return app.startApplication().then((startedApp) => { + app = startedApp; + done(); + }).catch((err) => { + console.error(`Unable to start application: ${err}`); + expect(err).toBeNull(); + done(); + }); + }); + + afterAll((done) => { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + app.stop().then(() => { + done(); + }).catch((err) => { + done(); + }); + } + }); + + it('should launch the app', (done) => { + return app.client.waitUntilWindowLoaded().then(() => { + return app.client.getWindowCount().then((count) => { + expect(count === 1).toBeTruthy(); + done(); + }).catch((err) => { + expect(err).toBeNull(); + }); + }).catch((err) => { + expect(err).toBeNull(); + }); + }); + + it('should load the demo page', () => { + return app.client.url('file:///' + path.join(__dirname, '..', '..', 'demo/index.html')); + }); + + it('should open a new window and verify', function (done) { + app.client.waitForExist('#open-win', 2000); + app.client.moveToObject('#open-win', 10, 10); + app.client.leftClick('#open-win', 10, 10); + + setTimeout(() => { + app.client.getWindowCount().then((count) => { + expect(count === 2).toBeTruthy(); + done(); + }); + }, 2000); + }); + + it('should open a child window from pop-out and verify', function (done) { + return app.client.windowByIndex(1).then(() => { + app.client.waitForExist('#open-win', 2000); + app.client.moveToObject('#open-win', 10, 10); + app.client.leftClick('#open-win', 10, 10); + + setTimeout(() => { + app.client.getWindowCount().then((count) => { + expect(count === 3).toBeTruthy(); + done(); + }); + }, 2000); + }); + }); + + it('should close pop-out window when main window is reloaded', function (done) { + return app.client.windowByIndex(0).then(() => { + app.browserWindow.reload(); + + setTimeout(() => { + app.client.getWindowCount().then((count) => { + expect(count === 1).toBeTruthy(); + done(); + }); + }, 2000); + }); + }); +}); \ No newline at end of file From 33b3e0840b465d5bed2106e7c97af1dcf491051b Mon Sep 17 00:00:00 2001 From: thaisym1912 <33540170+thaisym1912@users.noreply.github.com> Date: Wed, 1 Aug 2018 21:50:48 +0700 Subject: [PATCH 05/20] Add test (#443) --- .../alwaysOnTopWithMultApps.spectron.js | 69 +++++++++++++++++++ tests/spectron/saveLayout.spectron.js | 5 +- tests/spectron/spectronConstants.js | 2 +- tests/spectron/spectronInterfaces.js | 11 +-- tests/spectron/spectronUtils.js | 19 +++++ tests/spectron/spectronWebActions.js | 16 ++++- tests/spectron/spectronWindowsActions.js | 33 +++++---- 7 files changed, 131 insertions(+), 24 deletions(-) create mode 100644 tests/spectron/alwaysOnTopWithMultApps.spectron.js create mode 100644 tests/spectron/spectronUtils.js diff --git a/tests/spectron/alwaysOnTopWithMultApps.spectron.js b/tests/spectron/alwaysOnTopWithMultApps.spectron.js new file mode 100644 index 00000000..760b0ea8 --- /dev/null +++ b/tests/spectron/alwaysOnTopWithMultApps.spectron.js @@ -0,0 +1,69 @@ +const Application = require('./spectronSetup'); +const WindowsActions = require('./spectronWindowsActions'); +const WebActions = require('./spectronWebActions'); +const Utils = require('./spectronUtils'); +const {isMac} = require('../../js/utils/misc'); + +let app; +let windowActions; +let webActions; + +!isMac ? describe('Tests for always on top with mult-apps are opened', () => { + + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication({alwaysOnTop: false}); + windowActions = await new WindowsActions(app); + webActions = await new WebActions(app); + done(); + } catch(err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + + afterAll(async (done) => { + try { + await Utils.killProcess("notepad.exe"); + await Utils.killProcess("mspaint.exe"); + await windowActions.openMenu(["Window","Always on Top"]); + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + + /** + * Verify Always on Top options when multiple applications are opened + * TC-ID: 2898431 + * Cover scenarios in AVT-990 + */ + it('Verify Always on Top options when multiple applications are opened', async (done) => { + try { + await windowActions.openMenu(["Window","Always on Top"]); + await webActions.minimizeWindows(); + await Utils.openAppInMaximize("C:\\Windows\\notepad.exe"); + await Utils.openAppInMaximize("C:\\Windows\\system32\\mspaint.exe"); + await windowActions.showWindow(); + await windowActions.clickOutsideWindow(); + await windowActions.verifyWindowsOnTop(); + + //Close and open app again, make sure it's always on top + await app.stop(); + app = await new Application({}).startApplication(); + windowActions = await new WindowsActions(app); + webActions = await new WebActions(app); + await windowActions.clickOutsideWindow(); + await windowActions.verifyWindowsOnTop(); + done(); + } catch(err) { + done.fail(new Error(`Fail to keep Always on Top options when multiple applications are opened with error: ${err}`)); + }; + }); +}): describe.skip(); diff --git a/tests/spectron/saveLayout.spectron.js b/tests/spectron/saveLayout.spectron.js index cd1baca0..a12c643e 100644 --- a/tests/spectron/saveLayout.spectron.js +++ b/tests/spectron/saveLayout.spectron.js @@ -2,6 +2,7 @@ const Application = require('./spectronSetup'); const WindowsActions = require('./spectronWindowsActions'); const WebActions = require('./spectronWebActions'); const { isMac } = require('../../js/utils/misc'); +const Utils = require('./spectronUtils'); let app; let windowActions; @@ -47,7 +48,7 @@ let webActions; // Size and position of previos session keep after resizing and dragging await windowActions.setPosition(defaultPosition[0], 20); await windowActions.setSize(defaultSize[0] - 100, defaultSize[0] - 100); - await windowActions.sleep(1000); // Sleep 1s after resizing + await Utils.sleep(1000); // Sleep 1s after resizing var previousPosition = await windowActions.getCurrentPosition(); var previousSize = await windowActions.getCurrentSize(); await app.stop(); @@ -59,7 +60,7 @@ let webActions; // Size and position of previous session keep after maximizing await webActions.maximizeWindows(); - await windowActions.sleep(1000); // Sleep 1s after resizing + await Utils.sleep(1000); // Sleep 1s after resizing previousSize = await windowActions.getCurrentSize(); await app.stop(); app = await new Application({}).startApplication({defaultSize: false, defaultPosition: false}); diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 6dbfd876..12fafb82 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -8,6 +8,7 @@ module.exports = { SEARCH_LIBRARY_PATH_MAC: "node_modules/electron/dist/Electron.app/Contents/library", SEARCH_LIBRARY_PATH_WIN: "node_modules/electron/dist/library", TESTED_HOST: "https://cip4-qa.symphony.com/", + MENU: { "root": { name: "menu", step: 0, items: [ @@ -18,5 +19,4 @@ module.exports = { ] } } - }; diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js index 05f69d40..653bd0cb 100644 --- a/tests/spectron/spectronInterfaces.js +++ b/tests/spectron/spectronInterfaces.js @@ -1,9 +1,10 @@ module.exports= { // Title bar TITLE_BAR: "#title-bar", - MAXIMIZE_BTN: "#title-bar-maximize-button", - SYM_LOGO: "#logo", - MINIMIZED_BUTTON: "button#title-bar-minimize-button", + MAXIMIZE_BTN: "#title-bar-maximize-button", + MINIMIZE_BTN: "#title-bar-minimize-button", CLOSE_BUTTON: "button#title-bar-close-button", - MAIN_MENU_ITEM: "#hamburger-menu-button" -}; \ No newline at end of file + MAIN_MENU_ITEM: "#hamburger-menu-button", + + SYM_LOGO: "#logo" +}; diff --git a/tests/spectron/spectronUtils.js b/tests/spectron/spectronUtils.js new file mode 100644 index 00000000..176d3b9d --- /dev/null +++ b/tests/spectron/spectronUtils.js @@ -0,0 +1,19 @@ +const childProcess = require('child_process'); + +class Utils { + static async openAppInMaximize(appPath) { + await childProcess.exec('start /MAX ' + appPath); + } + + static async killProcess(processName) { + await childProcess.exec('taskkill /f /t /im ' + processName); + } + + static async sleep(ms) { + return new Promise(resolve => { + setTimeout(resolve, ms) + }) + } +} + +module.exports = Utils; \ No newline at end of file diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index db4c269a..d300bf2b 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -16,10 +16,21 @@ class WebActions { }) } - async minimizeWindowByClick() { - await this.app.client.click(ui.MINIMIZED_BUTTON); + async clickMinimizeButton(){ + await this.app.client.waitForVisible(ui.MINIMIZE_BTN, 10000).click(ui.MINIMIZE_BTN); } + async minimizeWindows() { + await this.clickMinimizeButton(); + await this.app.browserWindow.isMinimized().then(function (isMinimized) { + expect(isMinimized).toBeTruthy(); + }) + } + + async openApplicationMenuByClick() { + await this.app.client.click(ui.MAIN_MENU_ITEM); + } + async closeWindowByClick() { await this.app.client.click(ui.CLOSE_BUTTON); } @@ -27,7 +38,6 @@ class WebActions { async openApplicationMenuByClick() { await this.app.client.click(ui.MAIN_MENU_ITEM); } - } module.exports = WebActions; diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 1bdd5c57..22cd7252 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -1,13 +1,11 @@ const robot = require('robotjs'); - const constants = require('./spectronConstants.js'); -const WebActions = require ('./spectronWebActions.js'); - +const WebActions = require('./spectronWebActions.js') class WindowsActions { constructor(app) { this.app = app; - + this.webAction = new WebActions(app); } async getCurrentSize() { @@ -49,9 +47,20 @@ class WindowsActions { }) } - async sleep(ms){ - return new Promise(resolve=>{ - setTimeout(resolve,ms) + async showWindow() { + await this.app.browserWindow.show(); + } + + async clickOutsideWindow() { + await this.setPosition(0, 0); + var currentSize = await this.getCurrentSize(); + await robot.moveMouse(currentSize[0] + 20, currentSize[1] + 20); + await robot.mouseClick(); + } + + async verifyWindowsOnTop() { + await this.app.browserWindow.isAlwaysOnTop().then(function (isAlwaysOnTop) { + expect(isAlwaysOnTop).toBeTruthy(); }) } @@ -145,8 +154,8 @@ class WindowsActions { var arrStep = []; for (var i = 0; i < arrMenu.length; i++) { var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } + await arrStep.push(item); + } await this.actionForMenus(arrStep); return arrStep; } @@ -160,10 +169,9 @@ class WindowsActions { await robot.moveMouse(x, y); await robot.mouseClick(); await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(1000); + await robot.setKeyboardDelay(200); await robot.keyTap('enter'); for (var i = 0; i < arrMenu.length; i++) { - for (var s = 0; s < arrMenu[i].step; s++) { await robot.keyTap('down'); } @@ -174,8 +182,7 @@ class WindowsActions { } await robot.keyTap('enter'); }); - } - + } } module.exports = WindowsActions; From e441deeb1d8cf23c90befa7cd9ff5bd7e68c9c12 Mon Sep 17 00:00:00 2001 From: thaisym1912 <33540170+thaisym1912@users.noreply.github.com> Date: Thu, 2 Aug 2018 17:23:46 +0700 Subject: [PATCH 06/20] AVT-1029 Add test "Verify the production logs exists when clicking on "Show logs in Explorer"" (#445) --- .../electronProductionLogging.spectron.js | 52 +++++++++++++ tests/spectron/spectronConstants.js | 6 +- tests/spectron/spectronSetup.js | 10 +-- tests/spectron/spectronUtils.js | 10 +++ tests/spectron/spectronWebActions.js | 6 +- tests/spectron/spectronWindowsActions.js | 75 ++++++++++++++++++- 6 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 tests/spectron/electronProductionLogging.spectron.js diff --git a/tests/spectron/electronProductionLogging.spectron.js b/tests/spectron/electronProductionLogging.spectron.js new file mode 100644 index 00000000..0216ae47 --- /dev/null +++ b/tests/spectron/electronProductionLogging.spectron.js @@ -0,0 +1,52 @@ +const Application = require('./spectronSetup'); +const WindowsActions = require('./spectronWindowsActions'); +const { isMac } = require('../../js/utils/misc.js'); +const Utils = require('./spectronUtils'); + +let app; +let windowActions; + +!isMac ? describe('Tests for Electron Production Logging', () => { + + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication(); + windowActions = await new WindowsActions(app); + await windowActions.deleteAllLogFiles(); + done(); + } catch (err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + + /** + * Verify the production logs exists when clicking on "Show logs in Explorer" + * TC-ID: 3935260 + * Cover scenarios in AVT-1029 + */ + it('Verify the production logs exists when clicking on Show logs in Explorer', async (done) => { + try { + await windowActions.openMenu(["Help", "Troubleshooting", "Show Logs in Explorer"]); + Utils.sleep(2000) //sleep for creating log + await windowActions.verifyLogExported(); + done(); + } catch (err) { + done.fail(new Error(`Fail to export production logs with error: ${err}`)); + }; + }); +}) : describe.skip(); diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 12fafb82..80f7df9a 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -15,8 +15,10 @@ module.exports = { { name: "Edit", step: 0, items: [{ name: "Undo", step: 0 }, { name: "Redo", step: 1 }, { name: "Cut", step: 2 }, { name: "Copy", step: 3 }, { name: "Paste", step: 4 }, { name: "Paste and Match Style", step: 5 }, { name: "Delete", step: 6 }, { name: "Select All", step: 7 }] }, { name: "View", step: 1, items: [{ name: "Reload", step: 0 }, { name: "Actual Size", step: 1 }, { name: "Zoom In", step: 2 }, { name: "Zoom Out", step: 3 }, { name: "Toogle Full Screen", step: 4 }] }, { name: "Window", step: 2, items: [{ name: "Minimize", step: 0 }, { name: "Close", step: 1 }, { name: "Auto Launch On Startup", step: 2 }, { name: "Always on Top", step: 3 }, { name: "Minimize on Close", step: 4 }] }, - { name: "Help", step: 3, items: [{ name: "Symphony Help", step: 0 }, { name: "Learn More", step: 1 }, { name: "Troubleshooting", step: 2 }, { name: "About Symphony", step: 3 }] } + { name: "Help", step: 3, items: [{ name: "Symphony Help", step: 0 }, { name: "Learn More", step: 1 }, { name: "Troubleshooting", step: 2, items:[{name: "Show Logs in Explorer", step: 0}] }, { name: "About Symphony", step: 3 }] } ] } - } + }, + + LOG_FILENAME_PREFIX: "logs_symphony_" }; diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index ef923ca7..2f2e2ae0 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -28,8 +28,7 @@ class App { } this.app = new Application(this.options); - this.pathApp = ''; - } + } async startApplication(configurations) { try { @@ -38,10 +37,8 @@ class App { await this.app.browserWindow.minimize(); await this.app.browserWindow.restore(); if (configurations) { - if ((typeof configurations.alwaysOnTop !== "undefined") && (configurations.alwaysOnTop === false)) { - await this.app.browserWindow.setAlwaysOnTop(false); - } else { - await this.app.browserWindow.setAlwaysOnTop(true); + if (typeof configurations.alwaysOnTop !== "undefined") { + await this.app.browserWindow.setAlwaysOnTop(configurations.alwaysOnTop); } if (configurations.testedHost) { await this.app.client.waitUntilWindowLoaded().url(configurations.testedHost); @@ -54,7 +51,6 @@ class App { if ((typeof configurations === "undefined") || (typeof configurations.defaultPosition === "undefined") || (configurations.defaultPosition === true)) { await this.app.browserWindow.center(); } - return this.app; } catch (err) { throw new Error("Unable to start application " + err); diff --git a/tests/spectron/spectronUtils.js b/tests/spectron/spectronUtils.js index 176d3b9d..e993ce87 100644 --- a/tests/spectron/spectronUtils.js +++ b/tests/spectron/spectronUtils.js @@ -1,4 +1,6 @@ const childProcess = require('child_process'); +const path = require('path'); +const fs = require('fs'); class Utils { static async openAppInMaximize(appPath) { @@ -14,6 +16,14 @@ class Utils { setTimeout(resolve, ms) }) } + + static getFolderPath(folderName){ + return path.join(require('os').homedir(), folderName); + } + + static getFiles(path){ + return fs.readdirSync(path); + } } module.exports = Utils; \ No newline at end of file diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index d300bf2b..ce52390d 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -2,10 +2,10 @@ const ui = require('./spectronInterfaces.js'); class WebActions { constructor(app) { - this.app = app; - } + this.app = app; + } - async clickMaximizeButton(){ + async clickMaximizeButton() { await this.app.client.waitForVisible(ui.MAXIMIZE_BTN, 10000).click(ui.MAXIMIZE_BTN); } diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 22cd7252..2821b077 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -1,5 +1,7 @@ const robot = require('robotjs'); const constants = require('./spectronConstants.js'); +const Utils = require('./spectronUtils.js'); +const fs = require('fs'); const WebActions = require('./spectronWebActions.js') class WindowsActions { @@ -62,7 +64,78 @@ class WindowsActions { await this.app.browserWindow.isAlwaysOnTop().then(function (isAlwaysOnTop) { expect(isAlwaysOnTop).toBeTruthy(); }) - } + } + + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async actionForMenus(arrMenu) { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(200); + await robot.keyTap('enter'); + for (var i = 0; i < arrMenu.length; i++) { + for (var s = 0; s < arrMenu[i].step; s++) { + await robot.keyTap('down'); + } + if (arrMenu.length > 1 && i != arrMenu.length - 1) { + //handle right keygen + await robot.keyTap('right'); + } + } + await robot.keyTap('enter'); + }); + } + + async verifyLogExported() { + let expected = false; + let path = await Utils.getFolderPath('Downloads'); + var listFiles = Utils.getFiles(path); + listFiles.forEach(function (fileName) { + if (fileName.indexOf(constants.LOG_FILENAME_PREFIX) > -1) { + expected = true; + } + }) + await expect(expected).toBeTruthy(); + } + + async deleteAllLogFiles() { + let path = await Utils.getFolderPath('Downloads'); + var listFiles = Utils.getFiles(path); + await listFiles.forEach(function (fileName) { + if (fileName.indexOf(constants.LOG_FILENAME_PREFIX) > -1) { + fs.unlinkSync(path.concat("\\", fileName)); + } + }) + } async verifyMinimizeWindows() { await this.app.browserWindow.isMinimized().then(async function (minimized) { From 76b995d064004e2fb456c51c371d0f0431bbfabc Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Fri, 3 Aug 2018 19:31:54 +0530 Subject: [PATCH 07/20] ELECTRON-661 (Security fix for pop-outs RCE) (#450) - Security fix for pop-outs RCE - Bump Electron version to 2.0.6 --- js/windowMgr.js | 381 +++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 199 insertions(+), 184 deletions(-) diff --git a/js/windowMgr.js b/js/windowMgr.js index 62583715..ccc273e1 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -371,194 +371,209 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { }); // open external links in default browser - a tag with href='_blank' or window.open - mainWindow.webContents.on('new-window', handleNewWindow); + const enforceInheritance = (topWebContents) => { + const handleNewWindow = (webContents) => { + webContents.on('new-window', (event, newWinUrl, frameName, disposition, newWinOptions) => { + if (!newWinOptions.webPreferences) { + // eslint-disable-next-line no-param-reassign + newWinOptions.webPreferences = {}; + } + + Object.assign(newWinOptions.webPreferences, topWebContents); + + let newWinParsedUrl = getParsedUrl(newWinUrl); + let mainWinParsedUrl = getParsedUrl(url); + + let newWinHost = newWinParsedUrl && newWinParsedUrl.host; + let mainWinHost = mainWinParsedUrl && mainWinParsedUrl.host; + + let emptyUrlString = 'about:blank'; + let dispositionWhitelist = ['new-window', 'foreground-tab']; + + // only allow window.open to succeed is if coming from same hsot, + // otherwise open in default browser. + if ((newWinHost === mainWinHost || newWinUrl === emptyUrlString) && dispositionWhitelist.includes(disposition)) { + // handle: window.open + + if (!frameName) { + // abort - no frame name provided. + return; + } + + log.send(logLevels.INFO, 'creating pop-out window url: ' + newWinParsedUrl); + + let x = 0; + let y = 0; + + let width = newWinOptions.width || DEFAULT_WIDTH; + let height = newWinOptions.height || DEFAULT_HEIGHT; + + // try getting x and y position from query parameters + let query = newWinParsedUrl && querystring.parse(newWinParsedUrl.query); + if (query && query.x && query.y) { + let newX = Number.parseInt(query.x, 10); + let newY = Number.parseInt(query.y, 10); + + let newWinRect = { x: newX, y: newY, width, height }; + + // only accept if both are successfully parsed. + if (Number.isInteger(newX) && Number.isInteger(newY) && + isInDisplayBounds(newWinRect)) { + x = newX; + y = newY; + } else { + x = 0; + y = 0; + } + } else { + // create new window at slight offset from main window. + ({ x, y } = getWindowSizeAndPosition(mainWindow)); + x += 50; + y += 50; + } + + /* eslint-disable no-param-reassign */ + newWinOptions.x = x; + newWinOptions.y = y; + newWinOptions.width = Math.max(width, DEFAULT_WIDTH); + newWinOptions.height = Math.max(height, DEFAULT_HEIGHT); + newWinOptions.minWidth = MIN_WIDTH; + newWinOptions.minHeight = MIN_HEIGHT; + newWinOptions.alwaysOnTop = alwaysOnTop; + newWinOptions.frame = true; + + let newWinKey = getGuid(); + + newWinOptions.winKey = newWinKey; + /* eslint-enable no-param-reassign */ + + let childWebContents = newWinOptions.webContents; + + // Event needed to hide native menu bar + childWebContents.once('did-start-loading', () => { + let browserWin = BrowserWindow.fromWebContents(childWebContents); + if (isWindowsOS && browserWin && !browserWin.isDestroyed()) { + browserWin.setMenuBarVisibility(false); + } + }); + + childWebContents.once('did-finish-load', function () { + let browserWin = BrowserWindow.fromWebContents(childWebContents); + + if (browserWin) { + log.send(logLevels.INFO, 'loaded pop-out window url: ' + newWinParsedUrl); + + if (!isMac) { + // Removes the menu bar from the pop-out window + // setMenu is currently only supported on Windows and Linux + browserWin.setMenu(null); + } + browserWin.webContents.send('on-page-load'); + // applies styles required for snack bar + browserWin.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/snackBar/style.css'), 'utf8').toString()); + + initCrashReporterMain({ process: 'pop-out window' }); + initCrashReporterRenderer(browserWin, { process: 'render | pop-out window' }); + + browserWin.winName = frameName; + browserWin.setAlwaysOnTop(alwaysOnTop); + + let handleChildWindowCrashEvent = (e) => { + const options = { + type: 'error', + title: i18n.getMessageFor('Renderer Process Crashed'), + message: i18n.getMessageFor('Oops! Looks like we have had a crash. Please reload or close this window.'), + buttons: ['Reload', 'Close'] + }; + + let childBrowserWindow = BrowserWindow.fromWebContents(e.sender); + if (childBrowserWindow && !childBrowserWindow.isDestroyed()) { + electron.dialog.showMessageBox(childBrowserWindow, options, function (index) { + if (index === 0) { + childBrowserWindow.reload(); + } else { + childBrowserWindow.close(); + } + }); + } + }; + + browserWin.webContents.on('crashed', handleChildWindowCrashEvent); + + // In case we navigate to an external link from inside a pop-out, + // we open that link in an external browser rather than creating + // a new window + if (browserWin.webContents) { + handleNewWindow(browserWin.webContents); + } + + addWindowKey(newWinKey, browserWin); + + // Method that sends bound changes as soon + // as a new window is created + // issue https://perzoinc.atlassian.net/browse/ELECTRON-172 + sendChildWinBoundsChange(browserWin); + + // throttle full screen + let throttledFullScreen = throttle(1000, + handleChildWindowFullScreen.bind(null, browserWin)); + + // throttle leave full screen + let throttledLeaveFullScreen = throttle(1000, + handleChildWindowLeaveFullScreen.bind(null, browserWin)); + + // throttle changes so we don't flood client. + let throttledBoundsChange = throttle(1000, + sendChildWinBoundsChange.bind(null, browserWin)); + + browserWin.on('move', throttledBoundsChange); + browserWin.on('resize', throttledBoundsChange); + browserWin.on('enter-full-screen', throttledFullScreen); + browserWin.on('leave-full-screen', throttledLeaveFullScreen); + + let handleChildWindowClosed = () => { + removeWindowKey(newWinKey); + browserWin.removeListener('move', throttledBoundsChange); + browserWin.removeListener('resize', throttledBoundsChange); + browserWin.removeListener('enter-full-screen', throttledFullScreen); + browserWin.removeListener('leave-full-screen', throttledLeaveFullScreen); + }; + + browserWin.on('close', () => { + browserWin.webContents.removeListener('crashed', handleChildWindowCrashEvent); + }); + + browserWin.once('closed', () => { + handleChildWindowClosed(); + }); + + handlePermissionRequests(browserWin.webContents); + + if (!isDevEnv) { + browserWin.webContents.session.setCertificateVerifyProc(handleCertificateTransparencyChecks); + } + + browserWin.webContents.on('devtools-opened', () => { + handleDevTools(browserWin); + }); + } + }); + } else { + event.preventDefault(); + openUrlInDefaultBrowser(newWinUrl); + } + }); + }; + handleNewWindow(topWebContents); + }; if (!isDevEnv) { mainWindow.webContents.session.setCertificateVerifyProc(handleCertificateTransparencyChecks); } - function handleNewWindow(event, newWinUrl, frameName, disposition, newWinOptions) { - - let newWinParsedUrl = getParsedUrl(newWinUrl); - let mainWinParsedUrl = getParsedUrl(url); - - let newWinHost = newWinParsedUrl && newWinParsedUrl.host; - let mainWinHost = mainWinParsedUrl && mainWinParsedUrl.host; - - let emptyUrlString = 'about:blank'; - let dispositionWhitelist = ['new-window', 'foreground-tab']; - - // only allow window.open to succeed is if coming from same hsot, - // otherwise open in default browser. - if ((newWinHost === mainWinHost || newWinUrl === emptyUrlString) && dispositionWhitelist.includes(disposition)) { - // handle: window.open - - if (!frameName) { - // abort - no frame name provided. - return; - } - - log.send(logLevels.INFO, 'creating pop-out window url: ' + newWinParsedUrl); - - let x = 0; - let y = 0; - - let width = newWinOptions.width || DEFAULT_WIDTH; - let height = newWinOptions.height || DEFAULT_HEIGHT; - - // try getting x and y position from query parameters - let query = newWinParsedUrl && querystring.parse(newWinParsedUrl.query); - if (query && query.x && query.y) { - let newX = Number.parseInt(query.x, 10); - let newY = Number.parseInt(query.y, 10); - - let newWinRect = { x: newX, y: newY, width, height }; - - // only accept if both are successfully parsed. - if (Number.isInteger(newX) && Number.isInteger(newY) && - isInDisplayBounds(newWinRect)) { - x = newX; - y = newY; - } else { - x = 0; - y = 0; - } - } else { - // create new window at slight offset from main window. - ({ x, y } = getWindowSizeAndPosition(mainWindow)); - x += 50; - y += 50; - } - - /* eslint-disable no-param-reassign */ - newWinOptions.x = x; - newWinOptions.y = y; - newWinOptions.width = Math.max(width, DEFAULT_WIDTH); - newWinOptions.height = Math.max(height, DEFAULT_HEIGHT); - newWinOptions.minWidth = MIN_WIDTH; - newWinOptions.minHeight = MIN_HEIGHT; - newWinOptions.alwaysOnTop = alwaysOnTop; - newWinOptions.frame = true; - - let newWinKey = getGuid(); - - newWinOptions.winKey = newWinKey; - /* eslint-enable no-param-reassign */ - - let webContents = newWinOptions.webContents; - - // Event needed to hide native menu bar - webContents.once('did-start-loading', () => { - let browserWin = BrowserWindow.fromWebContents(webContents); - if (isWindowsOS && browserWin && !browserWin.isDestroyed()) { - browserWin.setMenuBarVisibility(false); - } - }); - - webContents.once('did-finish-load', function () { - let browserWin = BrowserWindow.fromWebContents(webContents); - - if (browserWin) { - log.send(logLevels.INFO, 'loaded pop-out window url: ' + newWinParsedUrl); - - if (!isMac) { - // Removes the menu bar from the pop-out window - // setMenu is currently only supported on Windows and Linux - browserWin.setMenu(null); - } - browserWin.webContents.send('on-page-load'); - // applies styles required for snack bar - browserWin.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/snackBar/style.css'), 'utf8').toString()); - - initCrashReporterMain({ process: 'pop-out window' }); - initCrashReporterRenderer(browserWin, { process: 'render | pop-out window' }); - - browserWin.winName = frameName; - browserWin.setAlwaysOnTop(alwaysOnTop); - - let handleChildWindowCrashEvent = (e) => { - const options = { - type: 'error', - title: i18n.getMessageFor('Renderer Process Crashed'), - message: i18n.getMessageFor('Oops! Looks like we have had a crash. Please reload or close this window.'), - buttons: ['Reload', 'Close'] - }; - - let childBrowserWindow = BrowserWindow.fromWebContents(e.sender); - if (childBrowserWindow && !childBrowserWindow.isDestroyed()) { - electron.dialog.showMessageBox(childBrowserWindow, options, function (index) { - if (index === 0) { - childBrowserWindow.reload(); - } else { - childBrowserWindow.close(); - } - }); - } - }; - - browserWin.webContents.on('crashed', handleChildWindowCrashEvent); - - // In case we navigate to an external link from inside a pop-out, - // we open that link in an external browser rather than creating - // a new window - browserWin.webContents.on('new-window', handleNewWindow.bind(this)); - - addWindowKey(newWinKey, browserWin); - - // Method that sends bound changes as soon - // as a new window is created - // issue https://perzoinc.atlassian.net/browse/ELECTRON-172 - sendChildWinBoundsChange(browserWin); - - // throttle full screen - let throttledFullScreen = throttle(1000, - handleChildWindowFullScreen.bind(null, browserWin)); - - // throttle leave full screen - let throttledLeaveFullScreen = throttle(1000, - handleChildWindowLeaveFullScreen.bind(null, browserWin)); - - // throttle changes so we don't flood client. - let throttledBoundsChange = throttle(1000, - sendChildWinBoundsChange.bind(null, browserWin)); - - browserWin.on('move', throttledBoundsChange); - browserWin.on('resize', throttledBoundsChange); - browserWin.on('enter-full-screen', throttledFullScreen); - browserWin.on('leave-full-screen', throttledLeaveFullScreen); - - let handleChildWindowClosed = () => { - removeWindowKey(newWinKey); - browserWin.removeListener('move', throttledBoundsChange); - browserWin.removeListener('resize', throttledBoundsChange); - browserWin.removeListener('enter-full-screen', throttledFullScreen); - browserWin.removeListener('leave-full-screen', throttledLeaveFullScreen); - }; - - browserWin.on('close', () => { - browserWin.webContents.removeListener('new-window', handleNewWindow); - browserWin.webContents.removeListener('crashed', handleChildWindowCrashEvent); - }); - - browserWin.once('closed', () => { - handleChildWindowClosed(); - }); - - handlePermissionRequests(browserWin.webContents); - - if (!isDevEnv) { - browserWin.webContents.session.setCertificateVerifyProc(handleCertificateTransparencyChecks); - } - - browserWin.webContents.on('devtools-opened', () => { - handleDevTools(browserWin); - }); - } - }); - } else { - event.preventDefault(); - openUrlInDefaultBrowser(newWinUrl); - } + // enforce main window's webPreferences to child windows + if (mainWindow.webContents) { + enforceInheritance(mainWindow.webContents); } // whenever the main window is navigated for ex: window.location.href or url redirect diff --git a/package.json b/package.json index f46e06e8..8d3beb22 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "bluebird": "3.5.1", "browserify": "16.2.2", "cross-env": "5.2.0", - "electron": "2.0.4", + "electron": "2.0.6", "electron-builder": "20.16.4", "electron-builder-squirrel-windows": "12.3.0", "electron-chromedriver": "2.0.0", From 42021087ae112d57828f3cb20e075c4d67cf7b6c Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Mon, 6 Aug 2018 15:31:02 +0530 Subject: [PATCH 08/20] ELECTRON-607 (Change native menu bar style - Windows 10) (#451) - Change native menu bar style - Display dialog confirmation for app relaunch - Update menu coordinates - Display dialog confirmation for app relaunch --- js/enums/titleBarStyles.js | 2 +- js/mainApiMgr.js | 3 +- js/menus/menuTemplate.js | 32 ++++++++++++++--- js/preload/preloadMain.js | 20 +++++++++-- js/windowMgr.js | 57 ++++++++++++++++++++++++------ js/windowsTitleBar/index.js | 4 +-- locale/en-US.json | 70 +++++++++++++++++++------------------ locale/en.json | 66 +++++++++++++++++----------------- locale/ja-JP.json | 70 +++++++++++++++++++------------------ locale/ja.json | 66 +++++++++++++++++----------------- 10 files changed, 236 insertions(+), 154 deletions(-) diff --git a/js/enums/titleBarStyles.js b/js/enums/titleBarStyles.js index 1f546fbd..a1c49ff3 100644 --- a/js/enums/titleBarStyles.js +++ b/js/enums/titleBarStyles.js @@ -8,5 +8,5 @@ let keyMirror = require('keymirror'); */ module.exports = keyMirror({ CUSTOM: null, - NATIVE_WITH_CUSTOM: null, + NATIVE: null, }); diff --git a/js/mainApiMgr.js b/js/mainApiMgr.js index b523a34e..8e9e8e9d 100644 --- a/js/mainApiMgr.js +++ b/js/mainApiMgr.js @@ -163,7 +163,8 @@ electron.ipcMain.on(apiName, (event, arg) => { break; case apiCmds.setLocale: if (typeof arg.locale === 'string') { - eventEmitter.emit('language-changed', { language: arg.locale }); + let browserWin = electron.BrowserWindow.fromWebContents(event.sender); + windowMgr.setLocale(browserWin, { language: arg.locale }); } break; case apiCmds.keyPress: diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 99d729ef..0abea00f 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -399,13 +399,14 @@ function getTemplate(app) { label: i18n.getMessageFor('Title Bar Style'), submenu: [ { - label: i18n.getMessageFor('Native With Custom'), + label: i18n.getMessageFor('Native'), type: 'checkbox', - checked: titleBarStyle === titleBarStyles.NATIVE_WITH_CUSTOM, + checked: titleBarStyle === titleBarStyles.NATIVE, click: function (item) { item.menu.items[1].checked = false; - titleBarStyle = titleBarStyles.NATIVE_WITH_CUSTOM; + titleBarStyle = titleBarStyles.NATIVE; updateConfigField('isCustomTitleBar', false); + titleBarActions(app); } }, { @@ -416,6 +417,7 @@ function getTemplate(app) { item.menu.items[0].checked = false; titleBarStyle = titleBarStyles.CUSTOM; updateConfigField('isCustomTitleBar', true); + titleBarActions(app); } } ] @@ -479,7 +481,7 @@ function setCheckboxValues() { bringToFront = configData[key]; break; case 'isCustomTitleBar': - titleBarStyle = configData[key] ? titleBarStyles.CUSTOM : titleBarStyles.NATIVE_WITH_CUSTOM; + titleBarStyle = configData[key] ? titleBarStyles.CUSTOM : titleBarStyles.NATIVE; break; case 'memoryRefresh': memoryRefresh = configData[key]; @@ -537,6 +539,28 @@ function getTitleBarStyle() { return titleBarStyle; } +/** + * Displays an option to the user whether + * to relaunch application + * + * @param app + */ +function titleBarActions(app) { + const options = { + type: 'question', + title: i18n.getMessageFor('Relaunch Application'), + message: i18n.getMessageFor('Updating Title bar style requires Symphony to relaunch'), + buttons: ['Relaunch', 'Cancel'] + }; + + electron.dialog.showMessageBox(options, function (index) { + if (index === 0) { + app.relaunch(); + app.exit(); + } + }); +} + module.exports = { getTemplate: getTemplate, getMinimizeOnClose: getMinimizeOnClose, diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index 7491451a..a1f3ce32 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -26,10 +26,12 @@ const memoryMonitorInterval = 1000 * 60 * 60; const SnackBar = require('../snackBar').SnackBar; const KeyCodes = { Esc: 27, + Alt: 18, }; let Search; let SearchUtils; +let isAltKey = false; try { Search = remote.require('swift-search').Search; @@ -470,7 +472,6 @@ function createAPI() { * the window enters full screen */ local.ipcRenderer.on('window-enter-full-screen', (event, arg) => { - window.addEventListener('keydown', throttledKeyDown, true); if (snackBar && typeof arg === 'object' && arg.snackBar) { setTimeout(() => snackBar.showSnackBar(arg.snackBar), 500); } @@ -481,7 +482,6 @@ function createAPI() { * the window leave full screen */ local.ipcRenderer.on('window-leave-full-screen', () => { - window.removeEventListener('keydown', throttledKeyDown, true); if (snackBar) { snackBar.removeSnackBar(); } @@ -502,11 +502,23 @@ function createAPI() { }); } + // Handle key down events const throttledKeyDown = throttle(1000, (event) => { + isAltKey = event.keyCode === KeyCodes.Alt; if (event.keyCode === KeyCodes.Esc) { local.ipcRenderer.send(apiName, { cmd: apiCmds.keyPress, - keyCode: KeyCodes.Esc + keyCode: event.keyCode + }); + } + }); + + // Handle key up events + const throttledKeyUp = throttle(1000, (event) => { + if (isAltKey && event.keyCode === KeyCodes.Alt) { + local.ipcRenderer.send(apiName, { + cmd: apiCmds.keyPress, + keyCode: event.keyCode }); } }); @@ -514,6 +526,8 @@ function createAPI() { window.addEventListener('offline', updateOnlineStatus, false); window.addEventListener('online', updateOnlineStatus, false); window.addEventListener('beforeunload', sanitize, false); + window.addEventListener('keyup', throttledKeyUp, true); + window.addEventListener('keydown', throttledKeyDown, true); updateOnlineStatus(); } diff --git a/js/windowMgr.js b/js/windowMgr.js index ccc273e1..81abf926 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -44,9 +44,11 @@ let display; let sandboxed = false; let isAutoReload = false; let devToolsEnabled = true; +let isCustomTitleBarEnabled = true; const KeyCodes = { Esc: 27, + Alt: 18, }; // Application menu @@ -132,7 +134,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { const config = readConfigFileSync(); // condition whether to enable custom Windows 10 title bar - const isCustomTitleBarEnabled = typeof isCustomTitleBar === 'boolean' + isCustomTitleBarEnabled = typeof isCustomTitleBar === 'boolean' && isCustomTitleBar && isWindows10(); log.send(logLevels.INFO, `we are configuring a custom title bar for windows -> ${isCustomTitleBarEnabled}`); @@ -240,7 +242,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { // Event needed to hide native menu bar on Windows 10 as we use custom menu bar mainWindow.webContents.once('did-start-loading', () => { - if (isWindows10() && mainWindow && !mainWindow.isDestroyed()) { + if ((isCustomTitleBarEnabled || isWindows10()) && mainWindow && !mainWindow.isDestroyed()) { mainWindow.setMenuBarVisibility(false); } }); @@ -256,7 +258,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { mainWindow.webContents.send('on-page-load'); // initializes and applies styles required for snack bar mainWindow.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/snackBar/style.css'), 'utf8').toString()); - if (isCustomTitleBarEnabled || isWindows10()) { + if (isCustomTitleBarEnabled) { mainWindow.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/windowsTitleBar/style.css'), 'utf8').toString()); // This is required to initiate Windows title bar only after insertCSS const titleBarStyle = getTitleBarStyle(); @@ -320,7 +322,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { addWindowKey(key, mainWindow); mainWindow.loadURL(url); - rebuildMenu(lang); + setLocale(mainWindow, lang); mainWindow.on('close', function (e) { if (willQuitApp) { @@ -970,19 +972,34 @@ eventEmitter.on('notificationSettings', (notificationSettings) => { display = notificationSettings.display; }); -eventEmitter.on('language-changed', (opts) => { +/** + * Sets the locale settings + * + * @param browserWindow {Electron.BrowserWindow} + * @param opts {Object} + * @param opts.language {String} - locale string ex: en-US + */ +function setLocale(browserWindow, opts) { const language = opts && opts.language || app.getLocale(); log.send(logLevels.INFO, `language changed to ${language}. Updating menu and user config`); - rebuildMenu(language); - updateConfigField('locale', language); -}); -function rebuildMenu(language) { setLanguage(language); - menu = electron.Menu.buildFromTemplate(getTemplate(app)); - electron.Menu.setApplicationMenu(menu); + if (browserWindow && isMainWindow(browserWindow)) { + menu = electron.Menu.buildFromTemplate(getTemplate(app)); + electron.Menu.setApplicationMenu(menu); + + if (isWindows10()) { + browserWindow.setMenuBarVisibility(false); + } + } + + updateConfigField('locale', language); } +/** + * Sets language for i18n + * @param language {String} - locale string ex: en-US + */ function setLanguage(language) { i18n.setLanguage(language); } @@ -1112,6 +1129,11 @@ function handleKeyPress(keyCode) { } break; } + case KeyCodes.Alt: + if (isWindows10() && !isCustomTitleBarEnabled) { + popupMenu(); + } + break; default: break; } @@ -1138,6 +1160,18 @@ function cleanUpChildWindows() { } } +/** + * Method that popup the menu on top of the native title bar + * whenever Alt key is pressed + */ +function popupMenu() { + const focusedWindow = BrowserWindow.getFocusedWindow(); + if (mainWindow && !mainWindow.isDestroyed() && isMainWindow(focusedWindow)) { + const popupOpts = { browserWin: mainWindow, x: 10, y: -20 }; + getMenu().popup(popupOpts); + } +} + module.exports = { createMainWindow: createMainWindow, @@ -1153,4 +1187,5 @@ module.exports = { setIsAutoReload: setIsAutoReload, handleKeyPress: handleKeyPress, cleanUpChildWindows: cleanUpChildWindows, + setLocale: setLocale, }; diff --git a/js/windowsTitleBar/index.js b/js/windowsTitleBar/index.js index a92e294f..df62c321 100644 --- a/js/windowsTitleBar/index.js +++ b/js/windowsTitleBar/index.js @@ -54,7 +54,7 @@ class TitleBar { TitleBar.setTitleBarTitle(); TitleBar.addWindowBorders(); break; - case titleBarStyles.NATIVE_WITH_CUSTOM: + case titleBarStyles.NATIVE: TitleBar.hideTitleContainer(); break; default: @@ -104,7 +104,7 @@ class TitleBar { /** * Method that hides the title container - * if the title bar style is NATIVE_WITH_CUSTOM + * if the title bar style is NATIVE */ static hideTitleContainer() { const titleContainer = document.getElementById('title-container'); diff --git a/locale/en-US.json b/locale/en-US.json index 4b9a7ec0..6e2b0d7a 100644 --- a/locale/en-US.json +++ b/locale/en-US.json @@ -15,21 +15,32 @@ }, "Bring All to Front": "Bring All to Front", "Bring to Front on Notifications": "Bring to Front on Notifications", - "Flash Notification in Taskbar": "Flash Notification in Taskbar", - "Title Bar Style": "Title Bar Style", - "Native With Custom": "Native With Custom", - "Custom": "Custom", + "Certificate Error": "Certificate Error", "Close": "Close", "Copy": "Copy", + "Custom": "Custom", "Cut": "Cut", "Delete": "Delete", + "Dev Tools disabled": "Dev Tools disabled", + "Dev Tools has been disabled. Please contact your system administrator": "Dev Tools has been disabled. Please contact your system administrator", "Edit": "Edit", + "Error loading configuration": "Error loading configuration", + "Error loading URL": "Error loading URL", + "Error loading window": "Error loading window", + "Error setting AutoLaunch configuration": "Error setting AutoLaunch configuration", + "Failed!": "Failed!", + "Flash Notification in Taskbar": "Flash Notification in Taskbar", "Help": "Help", "Hide Others": "Hide Others", "Hide Symphony": "Hide Symphony", "Learn More": "Learn More", + "Loading Error": "Loading Error", "Minimize": "Minimize", "Minimize on Close": "Minimize on Close", + "Native": "Native", + "No crashes available to share": "No crashes available to share", + "No logs are available to share": "No logs are available to share", + "Not Allowed": "Not Allowed", "NotificationSettings": { "Bottom Left": "Bottom Left", "Bottom Right": "Bottom Right", @@ -43,12 +54,19 @@ "Top Left": "Top Left", "Top Right": "Top Right" }, + "Oops! Looks like we have had a crash.": "Oops! Looks like we have had a crash.", + "Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! Looks like we have had a crash. Please reload or close this window.", "Paste": "Paste", "Paste and Match Style": "Paste and Match Style", + "Permission Denied": "Permission Denied", + "Please contact your admin for help": "Please contact your admin for help", + "please contact your administrator for more details": "please contact your administrator for more details", "Quit Symphony": "Quit Symphony", "Redo": "Redo", "Refresh app when idle": "Refresh app when idle", + "Relaunch Application": "Relaunch Application", "Reload": "Reload", + "Renderer Process Crashed": "Renderer Process Crashed", "ScreenPicker": { "Applications": "Applications", "Cancel": "Cancel", @@ -61,56 +79,40 @@ "Share": "Share" }, "ScreenSnippet": { - "Pen": "Pen", "Done": "Done", - "Snipping Tool": "Snipping Tool", "Erase": "Erase", - "Highlight": "Highlight" + "Highlight": "Highlight", + "Pen": "Pen", + "Snipping Tool": "Snipping Tool" }, "Select All": "Select All", "Services": "Services", "Show All": "Show All", + "Show crash dump in Explorer": "Show crash dump in Explorer", "Show crash dump in Finder": "Show crash dump in Finder", - "Show Logs in Finder": "Show Logs in Finder", "Show Logs in Explorer": "Show Logs in Explorer", + "Show Logs in Finder": "Show Logs in Finder", "SnackBar": { - "Press ": "Press ", + " to exit full screen": " to exit full screen", "esc": "esc", - " to exit full screen": " to exit full screen" + "Press ": "Press " }, + "Sorry, you are not allowed to access this website": "Sorry, you are not allowed to access this website", "Speech": "Speech", "Start Speaking": "Start Speaking", "Stop Speaking": "Stop Speaking", "Symphony Help": "Symphony Help", + "Title Bar Style": "Title Bar Style", "Toggle Full Screen": "Toggle Full Screen", "Troubleshooting": "Troubleshooting", + "Unable to generate crash reports due to ": "Unable to generate crash reports due to ", + "Unable to generate logs due to ": "Unable to generate logs due to ", "Undo": "Undo", + "Updating Title bar style requires Symphony to relaunch": "Updating Title bar style requires Symphony to relaunch", "View": "View", "Window": "Window", + "Your administrator has disabled": "Your administrator has disabled", "Zoom": "Zoom", "Zoom In": "Zoom In", - "Zoom Out": "Zoom Out", - "Renderer Process Crashed": "Renderer Process Crashed", - "Oops! Looks like we have had a crash.": "Oops! Looks like we have had a crash.", - "Failed!": "Failed!", - "No logs are available to share": "No logs are available to share", - "Unable to generate logs due to ": "Unable to generate logs due to ", - "Show crash dump in Explorer": "Show crash dump in Explorer", - "No crashes available to share": "No crashes available to share", - "Unable to generate crash reports due to ": "Unable to generate crash reports due to ", - "Error setting AutoLaunch configuration": "Error setting AutoLaunch configuration", - "Error loading configuration": "Error loading configuration", - "Certificate Error": "Certificate Error", - "Error loading URL": "Error loading URL", - "Error loading window": "Error loading window", - "Loading Error": "Loading Error", - "Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! Looks like we have had a crash. Please reload or close this window.", - "Not Allowed": "Not Allowed", - "Sorry, you are not allowed to access this website": "Sorry, you are not allowed to access this website", - "please contact your administrator for more details": "please contact your administrator for more details", - "Your administrator has disabled": "Your administrator has disabled", - "Please contact your admin for help": "Please contact your admin for help", - "Permission Denied": "Permission Denied", - "Dev Tools disabled": "Dev Tools disabled", - "Dev Tools has been disabled. Please contact your system administrator": "Dev Tools has been disabled. Please contact your system administrator" + "Zoom Out": "Zoom Out" } \ No newline at end of file diff --git a/locale/en.json b/locale/en.json index 651d3fa2..c6765f73 100644 --- a/locale/en.json +++ b/locale/en.json @@ -15,21 +15,30 @@ }, "Bring All to Front": "Bring All to Front", "Bring to Front on Notifications": "Bring to Front on Notifications", - "Flash Notification in Taskbar": "Flash Notification in Taskbar", - "Title Bar Style": "Title Bar Style", - "Native With Custom": "Native With Custom", - "Custom": "Custom", + "Certificate Error": "Certificate Error", "Close": "Close", "Copy": "Copy", + "Custom": "Custom", "Cut": "Cut", "Delete": "Delete", "Edit": "Edit", + "Error loading configuration": "Error loading configuration", + "Error loading URL": "Error loading URL", + "Error loading window": "Error loading window", + "Error setting AutoLaunch configuration": "Error setting AutoLaunch configuration", + "Failed!": "Failed!", + "Flash Notification in Taskbar": "Flash Notification in Taskbar", "Help": "Help", "Hide Others": "Hide Others", "Hide Symphony": "Hide Symphony", "Learn More": "Learn More", + "Loading Error": "Loading Error", "Minimize": "Minimize", "Minimize on Close": "Minimize on Close", + "Native": "Native", + "No crashes available to share": "No crashes available to share", + "No logs are available to share": "No logs are available to share", + "Not Allowed": "Not Allowed", "NotificationSettings": { "Bottom Left": "Bottom Left", "Bottom Right": "Bottom Right", @@ -43,12 +52,19 @@ "Top Left": "Top Left", "Top Right": "Top Right" }, + "Oops! Looks like we have had a crash.": "Oops! Looks like we have had a crash.", + "Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! Looks like we have had a crash. Please reload or close this window.", "Paste": "Paste", "Paste and Match Style": "Paste and Match Style", + "Permission Denied": "Permission Denied", + "Please contact your admin for help": "Please contact your admin for help", + "please contact your administrator for more details": "please contact your administrator for more details", "Quit Symphony": "Quit Symphony", "Redo": "Redo", "Refresh app when idle": "Refresh app when idle", + "Relaunch Application": "Relaunch Application", "Reload": "Reload", + "Renderer Process Crashed": "Renderer Process Crashed", "ScreenPicker": { "Applications": "Applications", "Cancel": "Cancel", @@ -61,54 +77,40 @@ "Share": "Share" }, "ScreenSnippet": { - "Pen": "Pen", "Done": "Done", - "Snipping Tool": "Snipping Tool", "Erase": "Erase", - "Highlight": "Highlight" + "Highlight": "Highlight", + "Pen": "Pen", + "Snipping Tool": "Snipping Tool" }, "Select All": "Select All", "Services": "Services", "Show All": "Show All", + "Show crash dump in Explorer": "Show crash dump in Explorer", "Show crash dump in Finder": "Show crash dump in Finder", - "Show Logs in Finder": "Show Logs in Finder", "Show Logs in Explorer": "Show Logs in Explorer", + "Show Logs in Finder": "Show Logs in Finder", "SnackBar": { - "Press ": "Press ", + " to exit full screen": " to exit full screen", "esc": "esc", - " to exit full screen": " to exit full screen" + "Press ": "Press " }, + "Sorry, you are not allowed to access this website": "Sorry, you are not allowed to access this website", "Speech": "Speech", "Start Speaking": "Start Speaking", "Stop Speaking": "Stop Speaking", "Symphony Help": "Symphony Help", + "Title Bar Style": "Title Bar Style", "Toggle Full Screen": "Toggle Full Screen", "Troubleshooting": "Troubleshooting", + "Unable to generate crash reports due to ": "Unable to generate crash reports due to ", + "Unable to generate logs due to ": "Unable to generate logs due to ", "Undo": "Undo", + "Updating Title bar style requires Symphony to relaunch": "Updating Title bar style requires Symphony to relaunch", "View": "View", "Window": "Window", + "Your administrator has disabled": "Your administrator has disabled", "Zoom": "Zoom", "Zoom In": "Zoom In", - "Zoom Out": "Zoom Out", - "Renderer Process Crashed": "Renderer Process Crashed", - "Oops! Looks like we have had a crash.": "Oops! Looks like we have had a crash.", - "Failed!": "Failed!", - "No logs are available to share": "No logs are available to share", - "Unable to generate logs due to ": "Unable to generate logs due to ", - "Show crash dump in Explorer": "Show crash dump in Explorer", - "No crashes available to share": "No crashes available to share", - "Unable to generate crash reports due to ": "Unable to generate crash reports due to ", - "Error setting AutoLaunch configuration": "Error setting AutoLaunch configuration", - "Error loading configuration": "Error loading configuration", - "Certificate Error": "Certificate Error", - "Error loading URL": "Error loading URL", - "Error loading window": "Error loading window", - "Loading Error": "Loading Error", - "Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! Looks like we have had a crash. Please reload or close this window.", - "Not Allowed": "Not Allowed", - "Sorry, you are not allowed to access this website": "Sorry, you are not allowed to access this website", - "please contact your administrator for more details": "please contact your administrator for more details", - "Your administrator has disabled": "Your administrator has disabled", - "Please contact your admin for help": "Please contact your admin for help", - "Permission Denied": "Permission Denied" + "Zoom Out": "Zoom Out" } \ No newline at end of file diff --git a/locale/ja-JP.json b/locale/ja-JP.json index 5f23ea0d..50af5cb6 100644 --- a/locale/ja-JP.json +++ b/locale/ja-JP.json @@ -15,21 +15,32 @@ }, "Bring All to Front": "すべて前面に表示", "Bring to Front on Notifications": "通知時に前面に表示", - "Flash Notification in Taskbar": "タスクバーの通知を点滅", - "Title Bar Style": "タイトルバーのスタイル", - "Native With Custom": "Nativeでカスタムを使用", - "Custom": "カスタム", + "Certificate Error": "証明書のエラー", "Close": "閉じる", "Copy": "コピー", + "Custom": "カスタム", "Cut": "切り取り", "Delete": "削除", + "Dev Tools disabled": "開発ツールを無効にする", + "Dev Tools has been disabled. Please contact your system administrator": "Dev Toolsが無効になっています。システム管理者に連絡してください", "Edit": "編集", + "Error loading configuration": "構成の読み込みエラー", + "Error loading URL": "URLの読み込みエラー", + "Error loading window": "ウィンドウを読み込みエラー", + "Error setting AutoLaunch configuration": "自動起動の構成の設定エラー", + "Failed!": "問題が起きました!", + "Flash Notification in Taskbar": "タスクバーの通知を点滅", "Help": "ヘルプ", "Hide Others": "他を隠す", "Hide Symphony": "Symphonyを隠す", "Learn More": "詳細", + "Loading Error": "読み込みエラー", "Minimize": "最小化", "Minimize on Close": "閉じるで最小化", + "Native": "Native", + "No crashes available to share": "共有できるクラッシュはありません", + "No logs are available to share": "共有できるログはありません", + "Not Allowed": "許可されていませ。", "NotificationSettings": { "Bottom Left": "左下", "Bottom Right": "右下", @@ -43,12 +54,19 @@ "Top Left": "左上", "Top Right": "右上" }, + "Oops! Looks like we have had a crash.": "おっと!クラッシュしたようです。", + "Oops! Looks like we have had a crash. Please reload or close this window.": "おっと!クラッシュしたようです。このウィンドウを再度読み込むか閉じてください。", "Paste": "貼り付け", "Paste and Match Style": "貼り付けでスタイルを合わせる", + "Permission Denied": "アクセス許可が拒否されています", + "Please contact your admin for help": "不明な点がある場合は、管理者にお問い合わせください", + "please contact your administrator for more details": "詳細は、管理者にお問い合わせください", "Quit Symphony": "Symphonyを終了", "Redo": "やり直し", "Refresh app when idle": "アイドル時にアプリを再表示", + "Relaunch Application": "アプリケーションの再起動", "Reload": "再読み込み", + "Renderer Process Crashed": "レンダラープロセスがクラッシュしました", "ScreenPicker": { "Applications": "アプリケーション", "Cancel": "キャンセル", @@ -61,56 +79,40 @@ "Share": "共有" }, "ScreenSnippet": { - "Pen": "ペン", "Done": "完了", - "Snipping Tool": "切り取りツール", "Erase": "消去", - "Highlight": "強調" + "Highlight": "強調", + "Pen": "ペン", + "Snipping Tool": "切り取りツール" }, "Select All": "すべてを選択", "Services": "サービス", "Show All": "すべてを表示", + "Show crash dump in Explorer": "Explorerにクラッシュダンプを表示", "Show crash dump in Finder": "ファインダーにクラッシュダンプを表示", - "Show Logs in Finder": "ファインダーにログを表示", "Show Logs in Explorer": "Explorerにログを表示", + "Show Logs in Finder": "ファインダーにログを表示", "SnackBar": { - "Press ": "全画面表示を終了するには ", + " to exit full screen": " を押します", "esc": "esc", - " to exit full screen": " を押します" + "Press ": "全画面表示を終了するには " }, + "Sorry, you are not allowed to access this website": "申し訳ありませんが、このウェブサイトへのアクセスは許可されていません", "Speech": "スピーチ", "Start Speaking": "スピーチを開始", "Stop Speaking": "スピーチを終了", "Symphony Help": "Symphonyのヘルプ", + "Title Bar Style": "タイトルバーのスタイル", "Toggle Full Screen": "画面表示を切り替え", "Troubleshooting": "トラブルシューティング", + "Unable to generate crash reports due to ": "クラッシュレポートを生成できません。理由: ", + "Unable to generate logs due to ": "ログを生成できません。理由:", "Undo": "元に戻す", + "Updating Title bar style requires Symphony to relaunch": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります", "View": "ビュー", "Window": "ウインドウ", + "Your administrator has disabled": "管理者によて無効にされています", "Zoom": "ズーム", "Zoom In": "ズームイン", - "Zoom Out": "ズームアウト", - "Renderer Process Crashed": "レンダラープロセスがクラッシュしました", - "Oops! Looks like we have had a crash.": "おっと!クラッシュしたようです。", - "Failed!": "問題が起きました!", - "No logs are available to share": "共有できるログはありません", - "Unable to generate logs due to ": "ログを生成できません。理由:", - "Show crash dump in Explorer": "Explorerにクラッシュダンプを表示", - "No crashes available to share": "共有できるクラッシュはありません", - "Unable to generate crash reports due to ": "クラッシュレポートを生成できません。理由: ", - "Error setting AutoLaunch configuration": "自動起動の構成の設定エラー", - "Error loading configuration": "構成の読み込みエラー", - "Certificate Error": "証明書のエラー", - "Error loading URL": "URLの読み込みエラー", - "Error loading window": "ウィンドウを読み込みエラー", - "Loading Error": "読み込みエラー", - "Oops! Looks like we have had a crash. Please reload or close this window.": "おっと!クラッシュしたようです。このウィンドウを再度読み込むか閉じてください。", - "Not Allowed": "許可されていませ。", - "Sorry, you are not allowed to access this website": "申し訳ありませんが、このウェブサイトへのアクセスは許可されていません", - "please contact your administrator for more details": "詳細は、管理者にお問い合わせください", - "Your administrator has disabled": "管理者によて無効にされています", - "Please contact your admin for help": "不明な点がある場合は、管理者にお問い合わせください", - "Permission Denied": "アクセス許可が拒否されています", - "Dev Tools disabled": "開発ツールを無効にする", - "Dev Tools has been disabled. Please contact your system administrator": "Dev Toolsが無効になっています。システム管理者に連絡してください" + "Zoom Out": "ズームアウト" } \ No newline at end of file diff --git a/locale/ja.json b/locale/ja.json index 7a5a8846..e23659a5 100644 --- a/locale/ja.json +++ b/locale/ja.json @@ -15,21 +15,30 @@ }, "Bring All to Front": "すべて前面に表示", "Bring to Front on Notifications": "通知時に前面に表示", - "Flash Notification in Taskbar": "タスクバーの通知を点滅", - "Title Bar Style": "タイトルバーのスタイル", - "Native With Custom": "Nativeでカスタムを使用", - "Custom": "カスタム", + "Certificate Error": "証明書のエラー", "Close": "閉じる", "Copy": "コピー", + "Custom": "カスタム", "Cut": "切り取り", "Delete": "削除", "Edit": "編集", + "Error loading configuration": "構成の読み込みエラー", + "Error loading URL": "URLの読み込みエラー", + "Error loading window": "ウィンドウを読み込みエラー", + "Error setting AutoLaunch configuration": "自動起動の構成の設定エラー", + "Failed!": "問題が起きました!", + "Flash Notification in Taskbar": "タスクバーの通知を点滅", "Help": "ヘルプ", "Hide Others": "他を隠す", "Hide Symphony": "Symphonyを隠す", "Learn More": "詳細", + "Loading Error": "読み込みエラー", "Minimize": "最小化", "Minimize on Close": "閉じるで最小化", + "Native": "Native", + "No crashes available to share": "共有できるクラッシュはありません", + "No logs are available to share": "共有できるログはありません", + "Not Allowed": "許可されていませ。", "NotificationSettings": { "Bottom Left": "左下", "Bottom Right": "右下", @@ -43,12 +52,19 @@ "Top Left": "左上", "Top Right": "右上" }, + "Oops! Looks like we have had a crash.": "おっと!クラッシュしたようです。", + "Oops! Looks like we have had a crash. Please reload or close this window.": "おっと!クラッシュしたようです。このウィンドウを再度読み込むか閉じてください。", "Paste": "貼り付け", "Paste and Match Style": "貼り付けでスタイルを合わせる", + "Permission Denied": "アクセス許可が拒否されています", + "Please contact your admin for help": "不明な点がある場合は、管理者にお問い合わせください", + "please contact your administrator for more details": "詳細は、管理者にお問い合わせください", "Quit Symphony": "Symphonyを終了", "Redo": "やり直し", "Refresh app when idle": "アイドル時にアプリを再表示", + "Relaunch Application": "アプリケーションの再起動", "Reload": "再読み込み", + "Renderer Process Crashed": "レンダラープロセスがクラッシュしました", "ScreenPicker": { "Applications": "アプリケーション", "Cancel": "キャンセル", @@ -61,54 +77,40 @@ "Share": "共有" }, "ScreenSnippet": { - "Pen": "ペン", "Done": "完了", - "Snipping Tool": "切り取りツール", "Erase": "消去", - "Highlight": "強調" + "Highlight": "強調", + "Pen": "ペン", + "Snipping Tool": "切り取りツール" }, "Select All": "すべてを選択", "Services": "サービス", "Show All": "すべてを表示", + "Show crash dump in Explorer": "Explorerにクラッシュダンプを表示", "Show crash dump in Finder": "ファインダーにクラッシュダンプを表示", - "Show Logs in Finder": "ファインダーにログを表示", "Show Logs in Explorer": "Explorerにログを表示", + "Show Logs in Finder": "ファインダーにログを表示", "SnackBar": { - "Press ": "全画面表示を終了するには ", + " to exit full screen": " を押します", "esc": "esc", - " to exit full screen": " を押します" + "Press ": "全画面表示を終了するには " }, + "Sorry, you are not allowed to access this website": "申し訳ありませんが、このウェブサイトへのアクセスは許可されていません", "Speech": "スピーチ", "Start Speaking": "スピーチを開始", "Stop Speaking": "スピーチを終了", "Symphony Help": "Symphonyのヘルプ", + "Title Bar Style": "タイトルバーのスタイル", "Toggle Full Screen": "画面表示を切り替え", "Troubleshooting": "トラブルシューティング", + "Unable to generate crash reports due to ": "クラッシュレポートを生成できません。理由: ", + "Unable to generate logs due to ": "ログを生成できません。理由:", "Undo": "元に戻す", + "Updating Title bar style requires Symphony to relaunch": "タイトルバーのスタイルを更新するには、Symphonyが再起動する必要があります", "View": "ビュー", "Window": "ウインドウ", + "Your administrator has disabled": "管理者によて無効にされています", "Zoom": "ズーム", "Zoom In": "ズームイン", - "Zoom Out": "ズームアウト", - "Renderer Process Crashed": "レンダラープロセスがクラッシュしました", - "Oops! Looks like we have had a crash.": "おっと!クラッシュしたようです。", - "Failed!": "問題が起きました!", - "No logs are available to share": "共有できるログはありません", - "Unable to generate logs due to ": "ログを生成できません。理由:", - "Show crash dump in Explorer": "Explorerにクラッシュダンプを表示", - "No crashes available to share": "共有できるクラッシュはありません", - "Unable to generate crash reports due to ": "クラッシュレポートを生成できません。理由: ", - "Error setting AutoLaunch configuration": "自動起動の構成の設定エラー", - "Error loading configuration": "構成の読み込みエラー", - "Certificate Error": "証明書のエラー", - "Error loading URL": "URLの読み込みエラー", - "Error loading window": "ウィンドウを読み込みエラー", - "Loading Error": "読み込みエラー", - "Oops! Looks like we have had a crash. Please reload or close this window.": "おっと!クラッシュしたようです。このウィンドウを再度読み込むか閉じてください。", - "Not Allowed": "許可されていませ。", - "Sorry, you are not allowed to access this website": "申し訳ありませんが、このウェブサイトへのアクセスは許可されていません", - "please contact your administrator for more details": "詳細は、管理者にお問い合わせください", - "Your administrator has disabled": "管理者によて無効にされています", - "Please contact your admin for help": "不明な点がある場合は、管理者にお問い合わせください", - "Permission Denied": "アクセス許可が拒否されています" + "Zoom Out": "ズームアウト" } \ No newline at end of file From 79c952ac04052943514b48e7d9e5ed4f2ae1578d Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Mon, 6 Aug 2018 18:09:34 +0530 Subject: [PATCH 09/20] ELECTRON-652: add new app icons for windows and macOS (#453) --- build/icon.icns | Bin 201809 -> 189313 bytes build/icon.ico | Bin 370070 -> 370070 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/icon.icns b/build/icon.icns index 1935fa0a9ec59f4b72f766490da5fd8063b8c98f..7ffbbcd494c3ffb3a2b996f9c5b63957c05bf9ca 100644 GIT binary patch literal 189313 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≫ad=Hc{N!j~Y!u`@}a1{^g^>Ii+H)-{LKsyb!W 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 z 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 literal 201809 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Ø_+t}8!p`#HF(c=GCyGbo5@2$?A>bpk(;sL12~H7EG7 z-^{U`*_|A~w}n~UnIo=_RWS8aa+CEtiB?R^6%3B4E^!FLD>nt)8t9KGtBm%ErmUSz zn0I3~XEp(7+6;O}_M+FLdA3v$VhxrD?BPlC?9u<00(w@%V)UdVaCtm>70AQ4gi(jW z_Ay}Fikp2<%7n~Qt)ZO)(mPi0OO7$h<_4tI`sehPjc`X;1dUY29^QH@Cli}qNIZV5 zV8d!pp%>-!OlyvT*Pp}UGy@k)V(khbZhG1$G{u8Jdhnyb#ptN==>{IUIW{Ez7a?=qK#Zo(V;pq ztY)sdNb{ohm4t0YAskKu)RRI*;5Ivr1xpYk`5+9jF#UG z8fpY#A!%^ZEOdSgqD6SWGeqc`2p(7=*i81rt{fyl?-kdrJK@)wx}D#3x9o&lOtEFl zw~?VNz${QdjA4NElhXNkooXw=-3UWDqSMrU*~+2uf;d|NKwH)*N{m~(h|1QWU0#cO zD~wQ@-nbq*;8!DA?&_G$16FAU(JaS;zKc#DzD`y2t(J=VE~2fG4B1WeOu7ikWJfuO zfQC03-Ec^A9&D{CsCyEIeSPF|G-)b7 zPhGGW>Al=^lonaa^)&96b*zdAt-%8P_*0RJrY}x8>T2v;@ z0GC)4_k7<0Xv&;*3p0nMRrcwzG(ZUSjO;BrWc4$`csdHmdlYp_>;$|ngQkQZw1nA3 z%134>KrkG*B?p7gX2$~PRg<%b%HCKw7>Wi@^lZKjUZV5Mn3pPUZgNX0TP)FI?E+5{ z-~ZoyGNiLcD|#)I4ga5(@ry7TR4Q%j`%#7py#BV};>q{A0FlmlsMYA1 zTS!-SD+hQ*XhZ9GsoYortt!CGw*AH;VXu>WOO5ti6B8L1ena2cDyt=ghnK+`t3 zsA~FMS3>-_1ZQrTAa35g??cxL^hst{arwDScTf*PEgWl3$}q0|*m(>bPFJ`cH4M&< ztA=~EaSrJ>dbuIfRfLO!2xpcm7b?sZ@qI5(ISot5$G9pp)t}>zEks?Eyt)Rb=2F?9 z&XS;fTJKv_PZ=&ovP0f0mHLxfSlm`6qB}F!whH##kZ0LJcfz~fef?Tqlp+M?mL{O2 zU(u*J)Hnh-oD~6NKKu?;fo-DEky2fWVM{aW7$=d{0zA7Xpfb6T%its?F3 zt~%2VQF$6Mmkq|AgFS19Xt*B1^l(as72csY)YKk*^FONJ_OOV{#4)h_D6hHQ)sGWb zZEcjK-PtKVBAPNog@4G0m$8i%hjCymEEAAAXyB)TGH@Dz2;(CZcXvKJ z*|g{25F)DLsc#|z^rDj5SD^{auaSnWc(ZS@iuC@eH5D_`LuM?740zktEsw}tl=;OA zi1|oiwpW_|FV2s;@{wJ09Q=_?j}8D`g13ph>Gs7(^xxmdKwYICk|?BQ26;`)bnZN1P!2)9*HpmQvLmD_o-SnGZ7qvX0!+P0u|H> zkz_g>DNDJ-fHqG#-IxD-48fPaxj|j%0%Z=$znNbm2H}+0A7Xd3Ot|z&; zl3D=n1Uf1!0i!hc$i2`lE4HRlFhf-#f6sRp#meuzu42**tB=>EPBv9F1e{)=q3D(a zAi>gl-b1IPCUBQVN{P%MYv%2yu`1s;%$`!}YZ|4^cEe9U`4=>&=uD;1#kR&WC=_RE zb}fuHk1n%F8quwHcx$yb1M7$8_&nM`);mol7N&WK2$tPbo#xtbjq4_BTIME8Jb9RJ zH9D$6wQ(bP#n6rU`QG_TCq5)X>jYnbv8L%RAK-psQsl5iKrq&bnS9ldAjg?$W;-Nn zSD9NQyeR#VeTq8wp)11MFn-G1>V!|62>Na9qQ%}&#c3wLFayh{G9cPhF0fF4CQ~hb+KLqlQP3nmJ^rnuCjVzD6p7tYP-f zp(S)>6ibkU{5u|VhlhPUdjMaGmq?<3jM-4Ieq>Q&GuvVi(T_-?bJI!!GqVS&?(jIf zLp^0YmLX|fi4^SF^)|t(QbpTTJjx)1uD6BL8pv|IGGKs`N=IewIU z*1c2RR1pfDhmBAWSqOz+$+%|n*}L)4aBf0uFcv|Fp3a$G&$Id?w#q)vgwk5oHBw+m zE+eaUKeO!1b}JhjKE4j64QsL8N~;yJ<6Llsj@Z?ZZBgN)2B33dE?NCm2Wu$v%gh-R zQ~T-cNX99N$OlWwqqvj`=41?G{MNxSqV?3pM4NZuc{}eYj`|M6$Q()}Ki@LN+BMj^#17^*R`TkN@UrOEJ`4g8p8StKIwxx=B#!`4UKI#G@#WI*!GbM*?~ zfp|_25(2g98QOqFq__G6$A)`9n7kaK`uZ-ii@qF_!0B7Ij&k%Nf&qXpoh7qB@V!!e zF6%cqa6Mg;(ykem%)>g%;?%l6yW2G zV#JfS-lE4-Fn5L#RBiNIP40q6z8cowtV(U&9~>D4F3Uea$HUykGX*AViW1qR{>J>P<}J~LFxw|E~%zj&X;Ie!@Owt zaQ3g|{n1=n%CXFbzxH%+r59j#l_w{LhJdASK@Y_f!iRkwpZh?2%&$toG}IilQAEE@ z%ER`ai6YkUsQ%#tH!_*4)qKaMB)-}fNuZ{&iI)+U3D*WrsY8s*?Ppo=^s!7e(C?g_ zBTa2dH{y1hamI~5UZRJT6jmO%S8p0@TrvVRN1qg9TOYlom~)Sdw`8B0NC$)ekT zaz+*Cj1Y=`?hkZFgDx%r9o8XjCOc)$Trw8E*=d2cfIi!b%Ze=3|9_b7slvL_iqf#f zkB~0LJHVrci12W#b#=tPA7cZdZ?S3A7&F9$8ix!MpUf=32_N6dIgNnoc}wibT^H!?HC>?GTvRrQ|bf^)Y4T=WoT767Xn zRK!BA8JP$q8efC62#YUqFcLlRgFMfizK!U1shbz> z7QbP9yGiaRDeKf6^o*y?c&MCY=y)LLJ)q|Qn}$G@xu_LTu~1| zqto{7DsOGod(}@k-xr}e(4i6`CmYvt16E^ zFv02jsz%QQCLV<3bcm-`vBnRui%W;7ni?+6rSeuJB&iSD>~~u6q5z0*Uj8x6MfqkF zWYu_F5ye*ZX@k2*Omd@CGGxbezU-C`BA|SO+XSL3u6UzEfAj%A|J*&Y>$#BiIt5Y* z)oW+2bpP7`_gb!8#Vcs@V))roeKaNy(-%)obu#36idFOllhg116MNW8r$87uG|5nn>!EE@SN6nPkvke{ zC&m?%6|>d||7jt&8)jOhuVQ_A_tjA5(N-Z6iML4uO>HI+kz}dOkk{!_kaB&!i<1oS z=ej95M`oOIIx`|Eo6`C3nUxhn^=YdaxjfHgyTX+HS-*8!rtHo0a}NJW456)DxmsU{ zoDKLN&b?5w4#ZWEuD0xY4O4n#uqKcgk@%{)QTqSsMp9RB%gCrUO;xxWnl*s;$(IyK z9lzz@|9l;EhMejK+FyER+IuT}>?&!wuh?k9W33s8kQ#cMRHi63@kwlm(-NVLr1(Fq zos1f36RkA!c`qzgU~%Q{@6mJhzWD(ci@YCof5ZSQFzu_ikj9zUDLVZR9!cnCGYa8D|X?%GILm_W@Ba8WZNVcw|Cgu{QZGR8Dk)Q-6VSV;&FU}F-H~|Ba%2~H7RG@J-Zp$-D4NoC+t*`j*&u~HwGokhzaUv z59$!;WX7MuOhyQ|1hI~usnGu@9V;`yuIluEd%249dsXq z5A7JAEZW4S8dm><$m@;IkG>O>2?B!-l4W793AXH2_F!ea&j@xfRMwSwZfPqt=tIZG zC&x*S!nJjYVkwPiixb;Lsm~|Rr#{gj5dYa!kCwjQ8ss=r{W^(S!ocvbw9Mu$s90Up z;4fQ>=}-WOW&`t@z~hG767FBOQ*e(hR|D`9y>v9m@kn60i4Q4;(GfM3ex6M6nJEb< z3cw%XR6)59Z>VX;;KcCMuMQqusqA5An}KjZc;9uI#Zk^`gL)w`zQL4IUY|f}g=e2A4AQA7 zrupP1HNN1X7UCcrOq<0;ZC*E92cUUK1xuTZ#D=|y2_#+%m3~CNO=GLm7T+_KuLu{T zXuzk4%6^4fLMaa{3*M}bOa8@zDlggdLA%o(|1q7RSJeXgqlDncf@bH$8iZ2r@6G>b_b)*51*{XVvULM(uJ(`CgD=u^w7tMQXT@Nq*90Z#?4;i{ zu)~N6eQ1u$2c&=NrDF7+Nm^uIyNvfdPua7<-P;+*( z^7F%oe4Ry{V;S2aUHeVz0@F@uvdwIzPSeF9jiItP&gUwTUnW1A(d&eqFA1+1qo0$K z(J^bta7vJEOZR3eesWE82gkLKv3_qOVYQ0)j2B~o$oh^pnQWMU8rqHU$X<6@4|*A= zY+aMnbsn1!E*<%IP&YxS5v@){C!GMo%%nvUb@!bn2;6O_V z*l-oy@v?+T(aMw1*Z9|VbJOqp>K>MSKaGmDE*%a5$EKy3AEvH#p^m9g_lxLp7hthQ ztZ-o27lth!$YM^6o?bm`B^0s~8%F{;5@#5H+FShKbi_EoikxXz?)wx&XFlIb zBKT)moG8+#Ekn`cU>H$u_?0rL&~2cr&=U~CdiY}1nBV_Ts&^J;h&a9n@91F zANMYu$7D$GW633U-*7jxGSGF#Nsr2N+Z*mD-AYai3lJ;RXpnWzh99^K2F5=9ojn#xb{FyYd;IFdeZMsGDKB#y*bmAETb&%ettAQEqBD<@Rd#hNphoY>}YmR37!A=6zAL6gE9^KQ!plD;R6TKul zGpX|NA%#3garR>LRG4IcPbuKO?oN;ZGSQN4Xsj6qyx;ilt^f@EWJJpM7SHo2L6#`FTLq*nMdf8Uv%UCsnjw?iRL z;#N&(BwjdYR;;Axe#1fd>c)X5b&64&N!SYe=^;^v9->{UuMr^;Q6z?#UbwqTC8X2I zn;9V=e*P8qCI&Hog7a93YONHi372GyxOi{8N9_VdA*Ts?>fznY4=KS)rNy=xgQKqN z)6P1o{=vIXQy3F3Wm${G2NI6zyf%g}eYrjlMi1uIPAnB?`A2!AYnK!D{v*NDy^MM^ zV#Rc?0e%JQFgkS5?cg;q^zhBy0SWFZ?*Lq$%gf_;P^4*Aj>=~=BIb~ zy$*3>b7WwWZ@reT9M&@h>B};sl~J^dz3$@H6E0cF9gjnCg?~B89c_I@qDASGPZ<2t zZzmP;i;ow}cF(#2USGBIjkWsAsbqn=A)z{s7HKQWZJY;vUOH(~lb71um_Y6peP{IJ ztaOXDQCD~i@k}#EQs91x9fS0~ZJ?}M>%iyA?$M8*9N?2>&_aIpo6ZoRqgH8#j^R6; z59<#iM3={+wh?2KA$*OBW-I8Qn*HkwHLZCU-mhJ&c(vSdo+xMp1L|bTfPR1ITa~Fs zpXwi>XO?P5?p=e|YY4;LnM{8^{KmGoAd@#bNR*a#Cv%DaMBJ^M7WvWBd*K?s@$`e; zh+|Z+>9@Ds#ywD#1oMrIvSS2OQGB8G`$|m>Dv6h*5-q1KMU<_TMYP}-h|tM z;DHBbqTjN?QfVM+;lHb>6Rv?{k@3oyrI~OW9vXZ$WLdxEJ zgSCKPBzmOo;>pu(amUFq!5{(BhF^|x1b1Eo6!QnUq}bWp7#l&3iDUCxjqw*D9=ptF zyY*ZFT>aaG22)rAC}sS`b=yF^jhc4aDt9ohiXbI#dT9x;xm^T&2F*@%}7;&A8ioThCsf$YdD!@qtg(Mu&^4$^fzIPzaGbI@ul&rH~ z`=1txyk8v$QW0#}4eFfTI733~YzI^GUt5{L#|D~545gFLO5WBM*M-YR+$`tI!dD@d zb#wIPG~rat)5KzXq+ZM8Z**fOnvi{|n)U=mV}$Qtg4;cA(!kyGC#Y?b(4r|$Yh)g` zNqjds4AAQ;E3yf?6E#`b$)CN8BNA={&s~2TWZMx>EFaIQD>VIVsL^QaMCCm@*%@(E zVscAGtR0T*FySsMs}dy%P0z@5FGB94c8Cf{4ylZ#kr8KH6ot$YG0Elao_bJmnxq*s zHOgN5D-vY1Eoa5Z6~fS&mCm)sW6WSwjghahoY}w{P3|^c-n$m2I6y@i4=o`#UD?L+ z7tuvH-e(k|fSNk17$m<;$ZZ8lgWKpo@|T^(1Ll8Y30Jr5l0hRW0Z02*{!t5h^b&Dd zSt+-hnDFj2u}yD0Y>4CKDZX7#6^;x4j@hWKHaU^mF8OnlD~#Z+sOqFXH2RR6SWZ>u zrYc~;x1<|e2sP7=MjEHShV>pW1y_ItV?+Vjlzu{ByS?sFw$G-4VzxOski|W(M-ChU zOnxrMCDslq&%pbal)YrP7dxMnq4=mDS>D2zmSC_P!{h&+0#bb0wc%PHh@I)};p$iimN$@oXJ%>aM z&%D;rE&u`$pXFy6Ze|sEk;AJpO!N)#eg9Mls&Af%#-;85=7Fef4xOUFg* z!h7yuGse*6MEgcMX|gD5XPpO;6P!w4JG%P;o%Do!N87)yyihJLO;vPmpm?*D6az(_ z8GhLW5nIGVQ%~jRN=4)~EshOA2*If8R@1Vb6#^|xsmb@^l6TS~w>8_(&s<0Yy<}M^ zs&-C<4mfY=34_uWQ>g$tTikH)dKBgyO0G7i$je=v%f!+<>d!1wZXLGO-XcN?Z91M7 zpV2<8`0YHM2Y%vbcM#b<*7V~*z4E1rH;_kjL!ST*uBoogh4+>XCJPi#H*-+<1HZu8 zo=xuh)U(p^pp7O-X19brXD_;`ldu$m6uE<4Ij6V>8f|gp>PVX0!a^d)D})ZZ!#x%$ z=5liBlC9k?mqvhmZBCinD`3{*!~e(fJf=yLuH}>4#^urt zO$LWVTWdGQ5RW|LQiyn3AhT8?(IL&9S+GouwmU_r?~L`6A3R43{Sayn_Ow?>7i!_C zxDdaZUmw?-+;bNW2S+q8Vtr+Dr^^aZ-x*Ip;EiwS)*K&eQIR5Sk2Ir{3dtGWwDV|@g^t{t}zLM^c}&7$7ALj|J7(I*k3f3s&(q_4!vLS!3 zsr13`k!~SB{?n2CZ!_&yw!3hhVA-xaA6`VlyBA!*(W_+#MKfn)j80xu+kioEmg^{(BzV%^B_+y| z+}N@US!C*ge!ZO zNngUa4}g)iOzmgbw)~&Tcqh`^LT5UewKitaVmxiv-2`&`BX&i&md`@=LMZeb7=+&u zkYV8he?geFpr_16=UiBifV6=UT!v`wYOEBrMj4pL7^0u~;_|k}KF{SF^Y1~S-K$(a zV2;XnK+W1HL{Q3l&(s1M*X+i}eW}f^odcNyC;nNX&gCo-oD`d<#qHUKRaXawi`d%T z1Ow=>mQBB5#9TKQQtYj*@|{-&;_kP>RY1U*uMD2c`VHwF+EUxzP}R)&D0me!J4wV1 zy-M^AN(?cHl1K|xMKRvE2@waMCyub@RE8?3;mG%3^egL(_$Di9{hw76i71(q!5bIR zg|u;LYrW#WY@~?`q_~;Bl9gQ~k$8TyflrI0Ky2N@4}_Nc@lzoc@u|)dbDBLL%$*b! z217fssC#h)>bW5jxT0RNufZbv!?m?-?tZ2m_6HUW3FhEsx;fU|dg8+-F)Z67Q}P~5 zAZ^eW6chjI_W4#Ju#PtLxBz>MlR)+IWIctYrHXIi0Ps6k3cIZpjELXWvLm zQMm^9103y4_&R}$voJInq&?B1xbV$MxlE+?)H0`TdzUNgmPcCJF4R9oBYxM z!)Tw04Nun<8C-u))wlR)rOAkXLH;E(+K`_DvnJ{%oewp_ULx?&C(K(BmeUCg`rI_q z#6}MnqQ}HG)TT?rPe#~TXAd`0<+}8d#)63C9b?4W)Y_>cp@L0sz)-E3TSxX=px7z( zZm?VYyNbL8te^=Z#Sn-Dt|7;d^90bYOf}eEpWPSet+Rhyg{C#{`rDIhBd?J=$tMN> z@!tPcnx-?p6ppWwx}2DIHTOTdd}s3=CDUsDw!(N6D(#o&vK1@tS^339k2Y=9bNbcc zD5a;tOOe&xV%3_(uPD>~KEnbD$cL;rHnJU(WHlv$vF)zDk?j=ZZ~^Tih2xp+}MZwaqRGAiU+=h+9SB)wbjup=c5WJ`EW^u!P0f^mIdIU8n zTbL!tMZpwXnD8-rvrJ##sNjG0}|`?|)!B$ISWBv}++C?yyHNd4()|*<`68JC?j_@@ilc!r(~hTl9UIN@TUY+F_1@{S)?Mz6d+~ zxklbHCCgAMR${A+DWklhvW!;~{c}4+v#mW*I;s8)^0;-s#U~Y~+ca?AA)etdMSg@= zFa#(j_eMO`m#NqKr09>_1}XID%E`R4O!LQ0H4-VYE0@P3x`6(>+h$f-5DPs>JWb5` z9w6ehC@Sb1)B`y}vw0QN5c232 z9b)g@;7<&621r_;?OtcB(+q5k+|>K4OiXxtlhJB67dy#uVN(M%0Vxe8ytYTDH`b@6 zNSbdIpxLX>(ZMC1XrIAB@vAryQ*N!+bQm)&`PG5yjX5pO< zO6_@Z{f86d_>0=o+k)+rb&M=rzTTD>OImSHw1BU0D*%yiTJ#?C#%aqH)B&(#nVu6c z&AZ^X2Irrlw*;}`1NA`B1NwCKS~B25d&w9^Pf{-GB2@4(!DO_NGrkkJWPklAEGMs= zI6A)_-i+3nlf4(O-V?SYPmqs!>H{Y2K~+}orP>Ig^}aEzL7GY`)eH_I)g5w3#esyc zBLXvgqzWZMTpNpCo*%nD3GH{8iH@^@xP#O24?L3o&Hn(UB_#E8qsQ#EWRQV3Vf{7y z|I?Q1-<$Y*MI*JCMV``Ika_lS?}_3{(*GusBTpk%;cTwnoMc>JR%ZQQWPIy@{4(5! zBjM{_SqbB%Ec={{bW_92pv14Yr?t8sf4XRVkrM)QcQoEJ(6m&>0=P(SHnt||9cs1J zrBR`YiLm>cAtI?|;}MRu6nToRNvm5as@vhLP5c-s=T}%Yi>@l@rYCsJ=uNOz;psQZ zI%4%)z+yGl*4Aj7w9w+`9vXHoEtmw#i64jQ??KzUjco(cv~jW70KHGjn@0pefVG6R zA2A3JJNm{knHkUi1$IGbw?&aY+`*yEC!bqe`InIfVO)%0ax>0{(Tbq`-9`m$L0yR? zGyh^4m|1mNnzf&M_D=5zzTHN)tD)^X3>9bRc$C{{N+|4B1|#uDM-E$WToyQZTmdmm zOGPtb1b|o!+n+8;93qUia;b@I9}&p{3;@z{Xh6ney19$!F#X@i^=++rJ0UqTvs)N1 zlj_TmN2ztCi<{I9>rnMNE7Xa z?5Ft=W7$?0PrE*aVh}MU_Plz^=%m+^IU|0CKwb3%zpYNa+%7e(6Y@z6hJqM;`1V8! z%x2Tezb7Qa50hMk$UKpC{@>T~36nL>Z|)v08P^FULt z&VlT97Rz!JwM&7Hv^zs^a+NZQC5Xt?+}}IA7M0mIQuTDg4=Y)~it#cl@e-NEqv$w{ zI+$KO&!Z=F2ajKY`O2!2x;CbGs$;N}R9#w6s_1D z3GfU)A%+!Z`MP{u;02RW-Qp7uL9yveU<`&RaTGAXmv87hca66(BM0G8t?LZvctZgH zpPI<|;e|cCdqD#HKQ+-)<5=L~w#9o;i)T5nh#^QSldGNI)v%bs?iLPKyqyh6rZFJ- z>f2BW(}oUX(0%$oeq;5OtDJ~!>6t-2?&^J3ZEsxtw>*AeS=mDC45nfcp0n*io} zBE!vSFT;J6w6qDcAOa6dIS>eQu^BqLDnJvEEES6geRU=@NX(LHCYm-9m+DM0N4IY6 zJE<2sWt)E8(~CcxtlWydo4!aI^WF7SGanv^#4SZcAX&*B!fRWB8RR-$k-lH>+kLb3 zg@v0g??V-5;n<)O+gZ1(jS!Ap9kKo%Xw}etN6PGF8sSvPYAP0O{|09U1a9s8T7r@# z!{LUsfMQ6W@=RLyWFA^ds;NC9?#q3!13f_d(;#WJ@v{bgXGs}Lb9k-WgtgXu-_k+- zJ-Dh+l6)M`aEd8F#D&AeVNq2>)Bq+*Wa8W{)wOo@(&khQ^a*jmHeOhTl}qX0pP1h! zoYNcqUqg`Q_kuF%OQ9d{Qk?=a0gA0qac$+XXi(Xw2i#5(KwhkMCS4$QwwPr1m{mu1e+Z56>J@mINlZd&9#Nb=`pfri!8DBok>k?w;r9U8to9DmO~= zpUHzZ_qK^{RECG$CjvXKZg&lKJXhN8lMK;B0L2jS9Ff{T>Kn(P+dpTT{A#39X!h~@ z+|29F#Gi6Y0S{XcCOFt`FO39D2o7Ec(b5S$@~E z%h(O{mk2gY^>r+OCEzQ-nUfa~-PQ^M5ZFb# z&}XNRCfB>!mtq9ursh)rEjIvhEG;NE$TXdm_}s;9;fm|b9tzQSiEC~RO_QAi5Zh?T5H zu*ku*j+xN3b6%95S2c^Il@@r)MiQ3ofx2O3=s^nUcOOM3l>tHP7e8(tqvlGDyN;LP>O@>{o4jvFt3dAdY^M7p?60@H7V z$Ry+?BkvzNq!UJ6Eel^czRlDh#;k5+-0`PL#%@VX{Zn$$iRu6%__IzRVyLrOJ2dRQ zgD<`s>RtY2<)|uw0u{;xlS@CB9+?}((bX^J3GCyky!rZEmLKyhYSXna>pG${t}vv&ZYf#%weD%; z>;_SrtdDytC@Q|3hLQMwQt-B#P%LUa#?cK+^>HjGLwT^{(NTq4Hp<3a{ykCVgGyX9 zG;<;I9+M24c*Cy{iFoY`tQN1bN%`-L&il^%nc@&0pH5B7_%Vy-h7h$NDl!1{vCa-(m z_l%2C@0xPy@kdp0Vcn`AED{h=KRC11_(9O`L1K=RC6C_%+@Q9XlKRJ~v`N_CpZ5)d z2`$FG%Yvu?iWG=-ts-(l*EBtz3#i>!EWqEEitXj>GL4euV_m6+QaMDep7()R@YmD+ zc3Qzh?On~ZQWHbAXMut2NqM+0d_FaQ+8@B^TkD{Mzk|#~yQx+?=`{cByL)`v%C9Z@ zIB|9O*(QvAnN7A>G=LXr!*@m4n}R`o{`Ud!5yDLP1(g}Y&5@IOfGEMYqjTaEMU|UI zpn=Q;r+J z4&He<;c0Cp+QkHiVKZtBY;B0yFOwbd)`Ux#k3@z@`nHk%KBKQUq|MZ2mDTriLn7U& z;Th+%*IXcv(;^Q|>Fix>BR;fT)N$4b z-wENOmN(}JwO@!~sGzm>C9XN2AaTChzIr+ld^0Tq-8sM1;--Z%<@|q?1_rA?1Se3e z8CNh>O`iQmG-St&o17QMHvAeKwyHI?wZs8RdK;6!z^WW|P}l`aDV=F#2K5cBUB|Pm zvCg+>;zNWv`ZvIaC4WLaE}nEbM>>V+MKY8&qq*>E^_8i?uKqPPE+x)y7p8>)TD)4^ zn0W0LIX=sJ-+m?nOBFA*hbd%bQSd@*(ke=%#uRXS8Fl?L5Mz`ekp46v^tylufzVPw z|Gt?5;b=*spwEg02d{q~_f^lkk^TriROvg-I5-a-*bL*&eKd-n=g7WjH8A)i%N=4JLM4tkfC_*b&$eqRGiXJJ!tGG0It?66dJQj(@{L~V{^bJn{Gy>- zOR~$Of%`4+*GzmP3;prk^E?)2mO1Cj0>KV-^|}S1)!W&qv=BERpy2FK^v#a!Ht2ZO zL;V?U8O1w|<1w1zM6r*y;9P458>!fBhiB{LxPxxa@rh6A2xWMEd84F^qvrCt6fs9L z*D^N%=5xy4t=bB9rAkURCFK##7P>XqCA_yM5Tb6i=~WN?_^KXOFv5(f_7u37x=vMr z>V(fGE0{PI|Dh zXgyfO#IEYWK)aV9p#{|8M>;VcLeD0iVYv7GQK7aJgn_OE=@JA`=`^5-5mF2^M2zcX zi&fy$f?6=vxPf9$r1k@Q%q39< z9~z|#5rSCm$y&}?o*;hh4YmE;T5+slzg~GJc}RyMVgH=xnhX+~b9LkVG`glYtKm=6 zb(d=8!Jre#yStJo{9%Pmtfc9)K{Ia8__G0PbZzs*_H*t^`el;#E zSS|8FD2ekw`gaVr#q4?2*iL|moBE9Vd6}GFi-kk5FuReIa?}jMOW({0bTQ%Y(u-gv zKzu^6t|Y6&&e~qDo?)m~X0?cc%?)A6&>15{qPs(BSbnBGK`Q%&B`RQ0Qg^u%5imag zqondxdj;ocO|9ag({Gv8;d}qOvxjR!<|xi#U}xK08QmDo1Lkrpvkd$((XH&4W3cJv zBQf=wo5c_weacW51=9v7a%>@cfaFLjjA7fO+8NR4rFL>(kG78o;#JGDy z?A3f2+O=b7qOfp`WDrt0${H%Z3i@l4B~R*kMg1{Z>>Vd0O#GX@)c2SAD2vZ%*13Yc zket2!7M#I--le7;F5B{r)k`jr)M6aG)%UC_T!<9c=m%hP9h9z+19B-yj%6}M-OjPE ze#ZMBXWZ?j>e%scKR1>*p2*T_yqp7hDnrNSKdSVxkRqh!-KcWx5Ln0PU4=}7px~YI zEMuX$=27!MkNXG$vRo1zpC=^r6jKK-HD-lL`*-a@o1|&V_~HV(G0})AtA;$QAbx)} z?O-jM@QMIRst67TPxLnuXkAfPsU0&+j7#lKT+sr%E$L@Q2|Xs77JNW_r7mHugx%p0 zgz&*j9SHi?0qOn5qC<=+&Fkx+qa2Nrh@UeW{}8B`5IzsvMSGQ`g_Vy4y=vn`^-DeR z0l^m2n4-Q?iOOIYEMl|FS&n^gh@ZZ;ZL*Db7fKqmuE3*zt-=_>5f>MCbIM}_gN^># z4oRM50*y1j$d>Jl86sB85hUho(!%@M*VPg|0d}i-b$NAkrQSu%A}BS6YBGHONcIOg zXH1b|bL|caW2R1%H#hA_+;(-P#%B+=MaeSe{DgI)MQX-l(YX!1g5D{NO2C2jL2wu; z`s{sA0y(B^t{)2#7@4`9tq7x`#ds&tt!0XJ55b=U`~$ep)s9Hu!ysE{n9z*p!$jcN z!)>=;N^ddAx{lMA(e?;eCsqr*J^4Mv@uQ~)YRcMtB|Y+u4>irdAj7Bo_U*JVKnca` zNQ22mkD)D*En|LIwZ>_H$875s%%woG`)n>|n zK|HW^M`ea9DJaB~BHNsomtZzuKwEHFC_o_{#!$u1P*3cN&y6-4wu#dQEA(pY)GOqc z|A(`C2ofdgwggPxP{?pK<5AwlnJ?;lhGl?r2rAAWZ$FT(=i9+7u_jtqAvbQL3F%yy zHOw6GELH|v^!&!-*I%}xY&`nSLrc!W{Mq;sW-R^<8BXE`GqIC&6=-)s8;19!*rsT? zV`?2FDU?;$kWvuFN{arzYdH-MQcxA+24FxlRNt9|%*bEMwBw=PecLV?85i>VcOjBP zI)yOZ@~nMhHgSB>E3SyHulCu?F+SMd8CKQ0AL8PxC4c?vd|W$EgbJ}IUNvjQ&Gqttp4uV@Y@*L4dZ9WC_f!& z$5feRVU}5dsa;EP>nGr1v78Lt?yGh>K54qxH;Z~YE@FfP2QhYpFb+V^4oU!ji6ky; zJyv>&0Q(OaEC(g#_OH?UJzn{d{8WBETC3?jhH| z!wciT{Em{oDk+JF!iSpZm1b7iY3Pv8g63vq{%wtHjSOBEX4A;=2R zbxnl>Z=7Gh7Vb~&rc{l(Nl9Be-(pB4j{~CVbTtzOsszt_t~dD5DZpj+ zf=}?=z7LW0jLr%|_0_{B;&Qi%=w7ShW1D*ymZr^09;e$v7WpO+f8p0t_s(H8@!C4F zP3eHuixK(TuLNKEgWCm`&Sh4qCn`H!M4FxQ(6hurLjm%I!!i5Xi@gqHL_T+ayjd4_ zkK*-G1BcMLTn6MY@YtH#td$*yaRrTel8qURvfoxma+*BUVLX?O^bLTW2caO3ut02z z)ERL8QeZ}l3K4?C1oMldiTo1snbdyWtzKIRe_XR>75O#A&u(b3g- ztW*^5YNu;Y3U85y_ch&g!b(+Ga+lfJfxOGNM#5`OO5Rf#;XVCSS z2N0;9M0`o1b`eSwnjBbVD7qtQ$ALs=d%`!@Zu*I28(O+UuS?fzLD0-A_>3(N7p^1dSavZdG`835Okzzp=)&NGkaCqW!;3%61Bo>W~E zS2&Y2^-9xr5S-3CJ;W9V`zk_wl8ovwZTbt^=0q#)>ICymsG}L5F;T*??9-BdaelNg z;Pv4_IUKpzQ$33H<;^S~4&DS%5EO_(4uw|b9#j^Tg1B?tAcJvBpco*j~ zE;`jy^^i5hz%RmDvzve?lW%)lwOvdT2kR}W6`AF{=g(OS zBkLdp>7`p3C8{Ub7$h_MATLloDgw&6MFmd9pNkRi7e0MSZI@EdkCqI=|D?~&RixLAXUy7dg* zW7|JPpfu98j3od){G(bOoyi@g1eyseOQ$Rx`v%Wi^4rjQ*0knm3Kn2nUhD46{M@QuivRHk_#%gi9YX(wuY)AT6sl0x|fh1|=?4}>y zJm&}ynE~XE+kZ0hDP(e{P2KW}&>EiM{#~XZw{SYlcxg>eqP?)s0~&4;vW-0jb>H0P zye4DK=24q>NS` zGCT@pyByYnbN}a_vQlLnpfiH#S5f{XoZ+WCsw4X=UAc@xODWv_t1VQVPW!SaKt(`4 zQByT-u?&Z&s~k6w(bzMh|Jk;BxT*cRs6eFJ<^h{k@4%ZSCJtB2dOZWD;#C2U2pb)@m3={|!i*N~A zRfcidZ!vwf?D318hoY@Fx2;8yZwP>p3^tLD4aUk70@mz!XT_7NiVaee_D-8^c^jF` zfG?}?25@VFC>g`Hq3#o~AEmW}>8hG#49kx)WP!!ht-vt$Yk0Jk(06Vq@}44~Fqqm# zeXg{&1gd5o!_??@#RzC@^8*mF9$UQk1y8jYT0(vu4H#s32+ zk{9Mzd`H(TsVd!tP}YO8R(d=_OnZVPia`suNxKkvqC#MoNCvn9&RMMyveD{HAx|Rp z1UVycwF=J|9ag!U3tz{tzc0R~Xh*X#-bt85)T9)n1#M4%C^R}x^r4udso=d73XGWZ zC1@*{_q|jvU0*hx?4?EcL-J7aTWf*VJK22tla$TF$#*PooxC?fR5U}E)tMED$8$J3 zB#1ganGOZZB>K|=)_;gySfnKcV-r96R?k)`Q#zydMlDb%5S)^P0qUbrRLnbJ3ZiyU zYq_Q0)6I;rdb>p9#Uw1=Jc*)3tZv!Z8VT!NUG@NL58=3H5nOQACj9%;J(fah8Qk=9 zwF&{F*LlRri~&{|^B3YKS_0~er0%{L!sL9|b1ywkE#t96e3<>20U|dji_?|U-|r(kjz-*2C-^0LsrX;3R2|+uBpPe z>YTioNw50et^av#`en;LwB86G>7k+ei!Cq)eNxUZu-C#nLFcpL`OFjeS3n62O9bQm zFEn<{mE`*!6y``Ll%134E)5g3j_WA_QUgwhdt&%1Gti;VDmWRu|{i7~lzETec?Y@E>!eq`j&_DL6Fr zi2=bvEmCby(xU7g6Bmakq3LD!C)ztR(>JB9SJTFiM_mn7D2-D>9g$1(e75vUN&@J~ z1LGA~Sva|Ykjux{NGgNZXxyi-87;%>N5J895VC|AX60R6lWjTW;Zb+2rH|m=L!E`M zRgf`nC006I6RnH~;84-R)6fdb28U5IZar7(Yr%^U^uMY<#*kYx25;rXOT{p&FZi-V zx%(_hFe5;hI|1WQC8H&+Mt}Z}Y3jOjD{G-n_ID8V&5!Qou-G6_i4lLwt7~lWGv)@cP|>w6xMeOBX81yd zGe9yhZ49ZAT{m+b&RQ5($+rNs>qo#K2Z^Xzb3nj7W!VI7XB$itX7i=-*g>$rO~bF0 z<`C)ezR2$@^?nPAMKwL=+Jo(r}$OA z9>l|fYm6fqc+zQt>>2t%`Q>e+-W+?dlxK%|i=2W|6J%}b$!^ux`|4Y*q=ybtmmmdY zDKl0wiuy+*y%n_ctHdc0TXZEr_=>AABRz@&$t9Ifqc`jmn1+nDt9A3)@v^Z*W>%7L z^(*5X;rYXRc(bCP-j;dI8>5&^=zSnNAOw=b1dw&Q0J`cFcpFXH?B}W^NjKY# zWK_Uu>=rA5>=BQ|n1*;VX)y)L(SvGNkiCEQIrja< zz!+@mnm{8Jr|ICP%bJ;!;H^6Nb*oGVACD+$4Ky}5x346 zEY8jMbQDntcp{mAj&GMjRgZu>hDU(S;LkJbc>%Pgv*rE*!xn~-J+vBn`Mif@nJ_ei zR))0%>?kRvnzYM+X0m<-tvG0D@Z=H``bRp_0!LRnJL_L|>wd;W292lkeXidH9&e-E zK~MieCU552h0=%QiW2Sob}SGzj%e329QOef^Co5B-%TYFHdeYzOF5z1lf%-+08#UYbueDcq1y+ za-8OB)Sqy@7JcTsmtoJWl_J9X(Qx@Sh|qhh{ys8=5J^#K=*)0LNzs5ZTV49Huc>TGp7cJaJfns zl{#)^N?gH6Dyh(Bz{DD!Nq}ia*VsaeiLbGpSjs8})=*H%oT)~2qfIyB?8^_#o+S^6 zMB!;mTKa8=F0*r!-eE0E4S9v|CBb-yi(sKzMvgBxIom37@$l0rU^`52a%cbwXxUTAAA3HCGJrW z&w7#tAx($GSXeRYcQh&mqHFyH%yxNIFj)X6Kh^~LpxWaJmuP0C2)A*baW7~H=k}M~ zDjit9#N0xTzpaIm_$z5~^NyKHeZDLqw57Q{z`dqMKxKG362zX9E_?q6$`7@o*jmNM=S@k*`Wnj57_uDeqo@SsbNY$ zgE-`xdu1}a%RIFwP+KwOVWoz;%d^z6y zaeKym^=+KhKf*|v6DT`*e30h}A%RUk-$QYU`HbguCbNt&$64UlB+-C1ki)>&cd+CY zNQS}X%yoOba%QaVGPLjJVL8!sfn-@R@sjQaqDECfVT9&xG+t}Y5c{SKAUXmjBP>4C ztkN~gGz$?QwEzS}{=*2-2{Q^t!%pruLBgVZNmWRQmE;|QM4p!z0Q3}Bqymihq3uWL z-rI3C7Z634y51Fh_@< zv{SnFlyMnck=?`-!xY z5_RQSgatA>wCOXU7u1k^xk-LRbb8Bd(q{Myg@$k>4{sv0@3eqG<)jzG;K^WY-M`9XvvT!9uo&K4_WF!cAh zI5TV@!)CT_0qmf5Knt0P+&ias$g-J+YcdU^@boLjAeC?x#K!S8+j`S1G>M-(*mg-DKmvd?5hf;2H^af&pUTVnNHiN%A2i+ zB*W8D+7k%0KO(#3E~a>g>fdD7;WBFv?r`Cdjlt|h?`7Iy_Kht3xrGIsex`I}fFe=K zIw|9YVHnPy~pG|{7&k3d>0)aWS~BS=FV{r+P+ zC(k8I^<_TU7~krHE5|{>yDH7CbkVtuU-Ili&6>e$C(`$BvO6Kgk9Lu<$%rk-P@ zrNqT^Tkc|N@F6xB@$xg+B2zLzWHx**!I=b(KWp>oADpTz)S-V6+W|PtO>URtkNT~( z*WdkV7^JAp!z3^kb-XGmYgYH(T5i!fOqzl@HHd8dkjn&|*_>pUg7(N2t8lF55HC0e z;Dg00skqPcH_%~wbfDoGFrzg3VT_ALRWUY5PH69k4p+(eqo%w*CMj%X^%V9;NiyqD{Zcw2|8)o3DGF06ki3gXqmW z%$f43Nxm%18=iaJPK0wQgTicxAZ+R6F$c8nGPWof*m|lNlHyTYgZ0Q-YVOL!r*FUI}tvoCE9T1mNy2)%7!UKh7mLb!9j4`xYtcTwEq7 zqmV@urz*o8v3KTmrc?{K@j~_X$02LwqH5)``6GM#HQ`TEktL4 z7i5=@;JZr#p9(G#&E3}{J#XUO^QkD)YLg{7mBZwM8bE4H%G%`^i_^E>pjRPFUnj)# z1(SuBo;oX(_($!1Et$v6*-FeHsBid&A2=`$uf?PiJljnw<~{{uMCDlKGZXLZ%mlV0 z4m#aIFFi{EMIkKlSEnjUeH7#jLY;*F4%A=@v~Au;#>{tEhORzq?>}N6?*M`|eM8!% z#&!h!k%I^kLVx@EwTa#x__uxmcYUHg|JZz3cg^LeBzD)PuV^X(LM0^_JL;imVKA*B z+Dxg;XVUMzn?S@%FS=B)jtu&Jcpk|+LsKCZM0huZj>iijRn(!+VYEV_-YE&T!$%*z z@8G!!h0VXr>6tb21z}?t(2PNU@UyXeTCyQcQM}GOmS&Nl1SbL{ZF7p}uZ)+)h#X@> zpz%lzDhzkoQ-*s1d;7`H$3rs^Oo!lKPAn~cm8(OZw1)8@y(oIrPc4BgSVQt(azpoR zD37xZn_I>@U+&447t=kt;WoKlJ2A%NLEj!KAz z%*Lm#7YE{9;Vte00=?nbpY)^JH=> zTZh#Bqh%C2Ntpt&g|@|a%39`D`-^nCx>sY*((mO@PxU{Rr(sUePt3{w+*O2%PW(4& z!4&o1aojr>r;Rgao1X@Tg0tl{NGX6NYMvq`&ywXC)QM(Af+BglPoWSxL8IjGT{bl% z{wx~u??K7NfBuzq`871q@9|PuSYa_y>R+krKMFc<5;lim)QHYY&;9CQ;ph@CzIrn` zcDC-uB3w(4jvf#=kU#>jxnS`nome;W%_pAFmKlI5^I>V#dqc0^S)HgK(8i^>GwvfyfM!Lmz`*j|qd3u!b$ zc!&euiVc!*dE&&dSoLa@N|X6y|McU)W|wCp2Gp3R?Rmd#Tf3eYFkSb;Tvy?nL%`rtPW4J)aW^h$))WR4LB1K({Y6tZ-1F320~ zE7kOBc8HUm^s=#^5$VhbuF~|Yf@~Tg$w3CtJTN1=RYD6 z_}3G5&QimmUk(f9stxC+#Z;ZRms22RB!qME0BBY}Q9A{?A?;yySS$h4EqV0cA8`A! zzBya*0CeKRg&>npjmYji^FM;ONE{9r55vZJ0~XOZ3GQjynnQuN+y~{7oo+mUI}bm< zAm2J!V;t^Qtv&_q;dv!%FRSTKXv_{iU+xg*)d`0=+|S^D8ucq2RN0uV%4+rzspQ2_ z<-dw_^pNn1#UP%YYkF=Zk2}ERO(8yCHSSWKZ}gqiu)F&H{>BvMDrlCQzAw2tEXYX) zT%r5;vNOlRd@EU-$+cQ3N0@h@Bsnm`G%lgXa-b-vbmV z5@a!EoN_>DC}Xd6-$n@1otNjn zc@Byz@m@gG?~3t{-v1fbiOp2>^K4(bW3vG*<UA}GdKFjME!NcV8c(XLfp1}&4d;K}(JNQ1Qq%a@jWcv{;! zFZQiY6qnpz-9_1)*^v3y=i8;Ru@ey?lnt<1k>!`T>cAJ_J}o}OUrcgB#H!Yi@FS_x zBmiQ#Bx2`?LwsD-yIPTin#sjjHRpru{=u!xD8ll7tr#dN%Ek_Pq3tLok>p>Y0Atc( z4w@HG#ZeVHfNR5dji@IrDoaEBD6T52Yp)CuL~g4f2a~vPte0;&ISvR^QlZBH9UHLk zu$!5sg=_UFq0sdGwZ9m{N7ceqDvXd!$fp81wevf?$$^QxNjpC6|B^2L|7be>%@y^F zOW_As@85&)o6GGNm(vffgYlb7=@*yr4=$lUT;;(3ou(r;*&Iie^fgFoE1f5re4T6! z5bjx=g;#J;lsm3Gj;6rDoH(6aZh5aLKxq1m@ACvk>X7+So>wmBLJ|S;PrI z{!|BO;umSxgxGduVarmj&slylvApri=a*mpJFSkNo0pxgPK8j`!^u*9FZm{AuJmkZ znKnSIaMJ!D_o>-4lN}lH=PYd{wH4q@J>3r+j2h|v-6rUYc>NYo1O!~q>1PHI#bOFI z*yUfhUz9Edr2!hU?vN;o79J_Q>Ob$i=??nyT51@p>pn^DNi5jMYhwPCJ;FlfWcKy#Hf9k=hUq6S12C5*(TAq!)}A(YSbmK_DpB|4KK&6xC&%f*-rBul80ckDnyVzPD5gMBtEtz;KZNPTB#rNmrLZ) z@>2?MqOy}P@NHtB)8 z;!ntVeG#)&tK{H&{R-OFNP{-C+e|lfxD6OFi>IrZYfsqXL3V7Fyhzm|c`}&&umAsn zq2I{*3{k-#mB}K!!iZJ%`6BXG1p@d6Vpy-}hWq#BL{?S7r4XkBerj{Y(0w(x2 zszIKz_<08f*!qSY!O<(h(ku;{ayD4UlMN42+-CD~-j~8pG1>}~&(LOK3M~g1WZM)+ z1eD|kNId&ZLdF#6at|6Z;X~1lm0i1kKKJ!DgKAqm6&jEB)&lM-6Tm0hT~2$rdI?{y zOzU-`x^-%}L*tM+XS0}jCdhJt3p+8XvM3dBzY6?FvkZpT@aB%w3CY&yT5e88tKT@VFgz>eo zLN_BM{OplhW3k3PdelQ8gJ{C43FtaALgN`fDxan7HdNkY0bHoRAbo@P#|D?O?(xB0 z=<

TBG>X%hK`F2t@ct!LcOG^jv{=V+0pi8hn_uIwW?!X0O(U5rA0+kv@W#1DlH( zV4(<=;ve_OLn-VMeIo8 z^A!<6I6a&JG=?gtlMCCXlk1HpgPy4ZvuL*S4fV(F|B}*(3zmyU6=s`b(K!^xym6ze zzg$Qcgvt%(zs60RmeFmm?bwrA?4zJ!=sK=K;sIl^KIT??qRx>L8%-OAiL{3snsv8IN6`d!4MN-KBjpe+PyTg6cWOH!Ma?-2kt4!6T%+kinCVRaLx6i6^Bo!}2N`A$_E3 z17-0N?47-Zn9bsDT`EgT3Ex7e^}gF{bx7XSjq7+2&~bIjJOZY)eVurXFSLyhfybD) zoY+oEuLv;RI7U04U@~-0Ujb60Qm6Bfp$9yhR2Wvd%9hK5;euXb0^LqpJr;UW$mIJK zw+deLj%Sgn%*+KmwYOP8QJ)NjeZffa-)%M!h=;Ny9=M#z+x~TK{d@WSun9%Y+Cn(F z@0HP;9HGm55|@Ot3y&U=aHOlpvZlS(0WMe!8_*}y)EdLdNK35mQlj<;-VY;orZp=R zmE`I~!m=!}Q`%rM4RK9%5#3u#dnqQdhLNt2KFR^7M~?*p@I#1)U&Uo*Aa9@v0RSUa zWs*Dwo#dLKh_gwbqDYR={Q0A{_2LvKecz7V#M#rF=Vp@JgHD$ zUITfDD`>sOOzw4b{8B2DO0e@K|GxusM?+8cv|zer1|0pC5_W&pS|d{bmRz7S_R zf3#&}a)hzpUaG zcn#n3@O_TYBO@`URH*eg^4V&EF&@H^}Wo;L{o^&{dXrN6v_w-McnV#3njMLX(Cd@ys!BS(8KMc(k?$Gg zqWPOzA0G7Wug8Qs+bF+CW5hNBJ&MzLVGGpX#&=hIe~Y9ostR;gj`Y)@N-f8(u|MIZ zNT`*klwvB20n+?C(=4i&`b3LLb(tVpA3jv7+wnMSls%d2=M#iCZd)HfMZVrjHoxLm zB;GO8RigEEOGN?PdX;T1!8wM?+B9 z_Bgh@67ZC;EnAaxc)}cpzVb-sY;Wg&G~@F0PdcaFUqcM3YP3wS#r(0Lk86-UnBf*8 zVNWQm4kG9}?40927Ju37FT>%R6#{2A(2MQm0YfEuf>mDSdB z{3eGw87zJ&sbBAxv{x@ zn~|z8T6!y9%7*nNQ_^!T3rYyE`JHf^M*b+eeBQ=cHohib9lsOg8I}c`hrKSH-q$#> zXx!sg)7kAd* zH8%cN$i~znewWk*QOy;|^5=`hWToQn9hA$Rm|Dc)z#|01H%`OH{6omNVk^N6tC~uE1+3lo`bfCcuR{p z2TSNks!?1((sLg~*?~P{VULFF@9P;m28YnqkgLsLO|@=VJxsc;3JVIGxMPJ09pUuWqFWcsP2uSY)mmwy+g9KQK z+$#-Dy}G$+g1o?^8SX*w9fQ-TDolyzJ`s^L72>6C?ej{VYmSsaw?xmhnpjfEfvhYFKb7!G~&l z*{aa_o#2vfAyo7^G=nH3)x8k%#a%SyE*qU}Z_qV5JG_?|UNQ!_<=J{_bnX&eeq(qW zvT3u&C+m`rA!V^lhP>t2#ZRjCCaY5e2+ zBb5X)>j0KlqQhpu3<;5vYU$6_w=SRv=Iz-D@(U}DFzi4H-^!stsDLu<5H_WO;}qKMP3rhc3I(0+{@!y-9lHKwk;>B zx6{X96q-%{R~7aQ{}u@h`xD5sDn6yc4j{zT4K35&2LkOeMp=<`lZ=(Nv(~n>?!D`1 z!i=U95vF@%2|?K@>Mr zyHtg_OlmZrdo$K0{+WGfbOKB5F`%*BQ9jhAu=93T0?K!+=1>(UzFFPK2N^s~?-vEN zbR2@RL9c2P#Rd>6^JI#=X+dbFDBxv+@;|gf4mkQDP>E8MWob%^oqN1Er|C211q<-RzqZd0bus`zqq`!T>pw~z{S%jyWMfCGL!>3F55ImSd=zg#8@vJSyw-A zq1aV$iZ$7^>rsbDAzCh=Yqy&=8#{h>sKDA1hcAZ^-IDidp25rw&AHbVK;I4s*02(& zrD@PwlXM#fdbDh_@=$hLN)NI@UeZ*p<#A^B)7gQ}cD zzPUjyXH9#?Vwf-74<8f^UMR@QgT z{%#bb`bi7I-c4i-UME^>DDs_vxGuoOwcEjG@}-g~&)1OHt^^19kL`z%7I1C;#!GDD zt^7*%Kr2sF$J)(-3NnVjs^+g^*cey~4Jk<8k?g8#`6fB|Ehb*TVVlg@o_%NO+>flv zihHDR3}P~H%H8=Clg&7PPaO~Cu31*Mlle!H z$p$6#tN3U%d4AN%2V-I4ja8vHaD1eq&#n+F+v$8%cIr6`$2FIt1~{7k?ObA^3yi}w zx|t#{@CLeT;x(V-p!go^vc9fMN}$0|lzI|mODu^Fmg+UrlZUCz6|`L!of@#OqIKt8gjYAOYb)Qg_|7hGK#8wvqfM5e>>ky;aRwf7 zhzx&`SfNtacLMKrRolE(N|4FD%CfFikT#6GpzZF80i$zd_1f-(K?Y?C?BW)3i~t44 zjJGGBke8Gx%~eJ9jD?w)H)B2}t8?h{h89>Po98AuivvTQfl`Wrk={dNJFjycp)0xY z>J?wr?Ba@A_6f2G-6G#~^T&}q&`J)#tY+1M0|OrpGWbT9J=2w)q3;E*t;9xhdqQMU z*2qM2!t@&yCx`V4MErTvc032(!P(DV2q$4VU$$NbB;dZ`F(gbvcDdxs*F2QIues$i zd#eflOKlu*2<%YP1yFvRjSq10^^?;c9>FgZo4ALQtc+KbCPa5T=sW)e^Huj`-I{dX zibizBQj>Dq55@SBfJn9RB6cMH5wsl_1muogjx#p(3O(cFKQ9cU!`C|VI5*}gv~#F zXMZb2JtoH`^bksOhtZ`jlvH+@MHO?1@gI;TfVkwU*|Cue;`Jq<^^158WE~y5zi`Ma zUc`M8tDXO~E{+PQ&@QLcTS_g({vx3Zh>E4s^-S@B5h@q!h25Z|J8VXWrpQ7vRy{b# zfjMaA5<-d6A|)$9KLGAf=Ia5}g(JR*wASdqjy(NM-mCVBn;uf6-SVRm`wADNDGVNy zS8~Q{(h|j83`ln?_!Y|xe9u_8BcfL;Ib)x#Kt&W!U>y|>xiAznC6Dg30MzJLz-3i- zNStlJ?7D5xR5fO2Vy$KeCse z6)<>T95?MR?hKlnD)M$1w|9v=%CWuQ)aOuwbK^z*1?s~&fLqYCD)W#xF{6=SOq$Nk zzb_bh=E8z^Hv38+XM|8Pn?fwNR9fY$K}1TXzrKcqin2?X`St(L33wTBR!k#QZxlhv z^b^ri#CqX}A2B9Iw^D?D+2_`trGV^MeGQh-R6!D-CU>{YZxC znrA-gFIqJt+N!YOJnYC?Y9j3!jACQ5JwM}@A&TzG1!eOaX&d=V4n{|-c>OqNLw&%p z-l>euo&lS`4z$~^dN2@E`VJmxskl_YLM=(L6Cj!1d04ln}LePY4+h$tlj7{ zTTZDEXdS@3lMe?K`n=dk~g!&IwS zaGXiJDw8C>Zn`0JiVSA+l8T3c>%XENbmU(^_One-vum<?>rXs{%qI1<1O-@cNd5V=EmQLKK=*0}^!nzqfz3B_TZ`(^P8XGYke4v` z#27e_!IrHQ;8Tk>v}q&mcUFTbsm z%7(6t%oyh@e`28td7agL6Mj&xukIbJKcX`vN(q>59B|8DPoJKJ3NZrk$zW;*YcVM| zn*Alv{Qx9xD!YZ2tgoe>KVC=fO^nWaA37DG7<=_LadaPEdQhH|YY4uf{Y!VV?k}2q zNg*F-2^X2P({H#EyY6(LxD3~o`VY}DWlUvDNS zCNR~RH|AM*M#3lGYr!4U+u7&1S8}&#T^kFBHP?L8=r`HM6kz=8Dh6!j!G#HCc?G0o z{gGFrqobQlwDTkY9i8Of$Ev_s!y`3|H*1fOy`&tN@p1c*K7aA53C`yzPumF6P6(rU z>x}AEV0Xr=84J6Y@iDT1?1mR!ctRv0B&HGNhKqKu*OKX|ERAkGtwvh*kS?gcc7|7= zn<6119Y8<2=kSx`N< z(@))GC?uPIxabhmePcL0l^mKAk2Js_kcx8KE%L3+A<5YXO=ZpLhsbeuEYsHI-zDW5 zGN#7uhO2-*JN@0&r15WI8=v>#@KN~|6}F}Q&8PLExvbK=;7cV0l%6-O5CCNrS!d+8eY zFZNbv!wymjSwi-wIMy_`vNW97_SFnn6E2X&?!OxK4k{VWmp<4i0$TS_$cETWz`GFu z2Ps7tBfv^K_o>$(IXMmpR8nEjz0R#gb#m&s-BNt+SV-TwB3yu8k&x(E3L07+gag4# zDAcGrrND2{6-+$=bN@8g`+w1{(hsicztpk%o6GeVm)#Gp)xXqn?iZKU4=$cRT*d!{ zc6U#7yPBpP9!g$GS$UoGk2|ksIzYs{B1~IOLi11@s0c~i(pl^MVfdss4J3(3p%vdHhS!%5e8zOQ&M>}RN-$A zfH-;6hd$9>XJ$WUAncef_v~`%dL?KE1u?Q%meO^T*ZWD*CSi;D|0OS*n2M z{AQo~E{%x>gH*)D%2j;*n2JM%!;SzD^xK?d?sJfFCA)?{mmAD&ow}eEIBeFhFs$(W z?JMghMmNr9_oelr^tc0zwH!c-cvNMTq1_x|$ipw7Eojp%PU4l?8#K}g&Dcs**Cpx- zwH{2xgHUo;{rEqtOqAH;rTHCwYqWIPlqqa!!TskWJVTK_yJ_=ZUsEnP< z#k3FKIFOKgKr?EsGthuXQ#+ho9rMiAiPYq)JXgo!0sf5Quj%cVT|cp2g;3J$)MDW( zuKT!z0A6KAs6XLX<(vIfqzy{2R~|TaoW`3XhrL8C;&rIHfRe~nlf0$nrUFIW^!`|c z%*`rjmkb9b=m?)b)VIW*w?4G8iX)xD)Ha;*$p-XiVNgav1R;>0__R*i;WEki(S{w+ zXyY}G7z6QOgHi`KRo9Jt?Fxfeb8agj6{yc~26Ry|IT*ZWZ#1#o`=t_zT8g*;lKwGa z6{N+xPD)V!RhZ)pGGYR{z{OCCruUvK_*ZNWEV$SZIl^qNI3fqz^5I?_8u4~2^Nu9) zMM}bFKNP)j;4jcA%&ih|1QxlV4>jg5IO=0>Td z8?0-dq1nPGG6p~oom-}azjvch8D_zB+xY;EngY0lB*CnVmS0@Oz%m3jf-&q~A0Jvn zt?zE#vL(7Gjp(SkQR-wWK)*ahi~sHhO%nw%?7ns^gbB{DZ2MN`>PK*$kIXBG@)e|+ zpWA=KbU6kemq_RyZcS{Rs%Y`eLA|r1tZOBqlhd>dmI2~8$rK!4&^6vm9H^O5d)rK{ zkAW#=>3_6VaK*OcR35R|I_Md2C3Yg%iYC&kv+Os-ocmV$N!>nuMsovd%TBc9t}X1T zPIUn8vmB|P22q%-7!?ZH+IbOwQDj;7IyfAnWTs6Hfzb}WarrpN{}i3WPemjXPjwM) zakcBjyUTzpc2u5z?Bm5Aa3&}sv;9!>JARX1=j(H#st&3%ECCu$)=X8fJzx+twA^Dn zS`mKo%6+U6`1n{=gmE|NlQ)!w68W8t@EDhq5 z(&!1F41xXvMbXya7#fn1H8sDRlzlPC^K*=eU6a+28dSp@cm*_~*RyXhA1WD_dp!LE zP1p6}eE>g(wIqCvHR3>#NO^h1D6VH~v3|oP83Nrr`{vm;@k3;3*uwwFp`A!PMj@+hGpzbn zS+hu^HD)9UYrz*crVbw7DJ6>0dgfkyv+xD(ajzkYk3U!DuKCZ$Ui8yT+wwU*+WSmH zMT5sbN6*?00G%;y4%e1@vdsw~GBW=mn<>th{}B-h-Ce5_pMk^!)$l%ri;j#^VZRM5 z_Fqm;$KrK6Yr>6vuJ2FN$Y1#X9@VW>^>F_N<}vrV>a2X6^di-=4NC<&*CDNgl%*OS z$z4;~t8-Y0tqM z4K9izM+&HMMP^#l8vD?aN7Vy?3ytkx6Bs?BU-L;4V)AOE1WGzBEihj2EMM3Z@)Jmy zgIUfa=2R_V1yX0xckL%^V&n!d9mK}2y4(F5X7bbB_7$K7Dj?;QLt3_jqZ*7A zD|N-dEG*me%R}6TAow#1fNCae_NrNp`=m_lRCBEZJ38Ejdgdk-RgyH`Ehg>rR#0Yk z(qWp>*cR%&!}AN*Vm5Sy&k40+UCRxed%kDtvULBLK7 z8pPJM++gB2Li7b0*w!375n6HrA4cj?)%(&ly>Djw&})jW3>&euO5wAb+fvMyE%MC2 zWmDtIf+MU>Lc%+gD=$fCTE@X`Eql9YG1cO*TQ=RyGcPw{{UU?N_n4r z;>?he<&ER)nG#!wdF(qSSs0jAb|0l*;cpmT%PvFHiDL#wZ{>_`o)=?M_ZN`%3%iL8j3X*@sK+44zzK^f9t_&@j;qE(2YMEZo>&z~3dGaLWiU26_k4T1pF7VyM zkdkOi=#VR4HDWFZ48H4a&!4z2Di^n)Zbj@{p2{lODtm#N}3RUaw>=u(0cfI4O9C2 z)zuT~Cm`?9D#|8o^v;-;35b?X9;K{q?>3+U`hF4eC$M>eN&4mW`?!-+zS9L4B_XvDls}SD zIynaWwm)RrcoU^t0`Kg+8#Q(&rPa{?gd;l4YGC3O9SFZ$HVgrRA4vHC__8MR$uAkz zw!D6Ez;%SSpMEHbLB8%g`ka@Zfd9<>qI6}q+!kaSt2+&6QIm_4xVWoAg7#mT+fj&% zG7k*fnzSg>3NdKb!B>IhHDT?HKvT$RQKR!ERn$6?4*Vc41g0-{9ML|Uibl%8Q& z+T06cY8c3dSdJ)0W%64fY<+evPgAIC*)jkL?1Bk1U`AyJ0&4;;&e?OBR?eG?y(t(-#HQwpY)d5WS6$GjjorO=O-O6?ROGD}y=_%X3SL-T&Wl+}ou7WV&p< zF_9V`WTkVL$N^@;i4B9HidK}8Nw0UpCJ_6-Oc~64Y2AXFW)O+?vw><{st6ESM*E@a zfM5fgM5SehfCC;OErO?b9kS)NF=)N_mx@oW`iZf4(pvPCw6#%8UgCwxKAlY>#;FSr z?b=SKYpz{)K5^*+c>|o;V8jf4O5v}pY(Tpl*6?-C7{YNLTJdK$ZmOfS4%wPsp@<nLt2$}?xiPchCxTsu^a4-I2-2Y4brxB@~Yei=mt{*2O<8L zannQNNi-Zpu5`RxZh5D$VPtTcSCjMSpn=d&@L8MNL?rI}3%ZB?aI{!nrFP+LgYMlH zvX8v8S1oDWM##e5FTDCLS?U|YqU++hA&#j8LB*0;s4}@^Q*}*76t)Y;@W&w2Chy?(<(cbq@YKd*v?#$2EE$;YK#fzpTt- z49aqlZTFP2VyoV;sTk4nqF&5LF|G6pPrXJYxioAp!(yj&(Kji#udpNYrzkeP{ualFUssf zPtY_7tQ^bqB2=BT1H~+jo?5nP{Dj!Rn9d)qUE0E9OG;6IN>*S0 zC>3BiFqM3diAri0A!j?sV$>}+W=eZ8l$KR?gn#U1wH0Tv?eVZQr4NGtm-A0!%q zo>S6PmzfBO3}p^HJBe}-e98kY zB_&D|!c5wE3S2w0@Lo}VPE-9yyHr{F5J#+i|1jiZ6l{(KfymkR8M8G{?7QBWA)_O{ z@9g(N4L8~V@k*7QXjJ24-XMXhc>l>jlikl{`PkDwwX+LZjoHVwoB}nygLp*_DQD8O z9ZwHIF+?fXRyg?OF#@bq-(`ZT3V%f%UIiaY8Ubn_6*)cnX!a90qL~Amk#Gv1r1Fp%K4h1)U&#rY$Gm)zXhEQ|EOuHxP z#4R0+Q*3_>@EKNzXNqv#+WRE5Agq5XU(8NSBn&)5{GJgW8a+Ot18ZkeL1zv?s|>I1 zX9byNcl+l7;!x!dm?4X0Sv8UfV;QsGdhQGFzff|iapMY&LSR4Hl)b2MwE4iY_a0G5 z7EL%~8%XMEb`ba#8#`d(WZz`M*2$-d{Y;kY-5uAe~8;A791>DYu_LINO9$4m;B4T6~LmP zNmc()wg9&%HZAO43WR-9I-Sed*jRBjQ?EAO*QIAP)M%%_D?6PQe?cT^n|bCsE^2O@K|CFj4^JCs@R0&)fyZA6{c}h%>M|GJbQLj zO-2!x*2^o{uP%J}Rmgqm<4(Ifh3NqKgv9s?h-42A5%%SrAmCh&p`~gP09nn1We?1{ z@7mp*?_w&5XuH);8+`Z10<1qR#tHFEhQ`Gjvg}eRM{LuRN<{^aSqRslZ#=8OicV0r zfn<y0Dk(hpgYZ4tQUnT{HPS?Zgz zsrR{!^f}I?lrsl%3fHE zLQV~q1)~lfX1wF>wjI1CJA;Uu?Ei~&Qq=FuQ#@LHJPH-*UOTj zWV>`QKlmWo@#~fyxq5oLdKw=J(yTv7c^W4lVVgGDg4V|5nv{{wKRAkk4zgbFRD0~h<9@(nVzZPPN|954VqPF^%ER#lq32`0)N>@8pxbSR zM(oR*7k9C-FU?s)5Pz1!Lh9z@iQ5G~h_arGsy{DrosAT95RuU5DGoj(rH12n_^iO-F7-tn7Z8v#m&J#+y}n|P z@|Twzbi(O8X$F5SAkXAt%*2IC1OFXc=$ymB-}@br`7F#%6F--K8Ga!Yea6W4=4WY3 z%z(pTDj=$+fr(4-?L8Fjm{aO42LhO{1(hn-3bRx&Y4(^Kl%mPVO?Uy~l;Al6F3{G$ z_R7|WZPCO*xs2MM%7Ou^qhjO`j8OHdB3zmdVI|F#*eN6dMro-63);;7eSJIbsBpO} zY8ZJU4a9_=%|W1xAB2UlW4_+8{uwraW0^6(|IgbaG8-AG_W>VJWt(D|HHkvX4FD^z zuty`S#2GLa1OtwAvz;AMGI``p0dWpRXjH>aLYG#ms-%xmSk@M>L4xUHnkj6y|6ukr zUzQN|gA|CfSKFhVa8FuQU@DAZC7$BSxaG?b z+vpqg$WTMgn0;#cQI`30>6d2b=bMIwGFa`?nAX6&J`XA`$QaWOC!ik(QR$P!sCkrI zsgs4m?d=zm+%XaZ$m9nOWH*g?qE1ijFqjm<=N(9xLo7HX@U@ASS#XX|wZLwacEP0tOiONI9~%#y(5T?4XVHS`duio4eCxJr zM)gM9xy$(=zp9W93lWVio_k(AF2t457pWOyN!PS*_l0aEWK7n8f3n(3!K+WloKm1` zB@;Rp^eHVc2qRkGZ1%8S-VX;1&&e2LcQ=p^o6U`fG&nBXmDrwoew5y8^b89Su&>7p z>l^uBdFV;UuqkVTC6}K;KdDhS2zp{7x3>+LHeuwIO7;%0vkR&w0Yfxp)G;3+1h9)U z*{Gxd%@U8~!W)V)6#@#p)hQ`8j;nJ}adPlDs#jVc@EFZrh=lLI+f^ zJuQ%}+K}iv$z;ubAq&#==BCduw?Ne0%uRl<6q1kkU?9RipncF!v#4|ho2v-*@HGYC z8z4Cy+g zx;+htuBNAP0QVk77LYBDX;0G@LuCzig!I2~oo>ADm|gVKK&{?onMn52iJrFWZW=0S z(sMm8lP;3=D%#mF*6rCY=^_hxbg`@_nS&UR5MRHGHXMH-9$0QnJm(IaMD~Ie{MbYC zd9USp^MhVAct87yt|VO@1!88S55xB{b*r2L-0H;(QX(U@`oXy$YvH?UB>mk-V+@8K29lx2NCW9k z*cn8rq-%Un_7}6zq&BERH+CO_T#M#3)-$N+_k`O7u?|q3af?gCg_xts)i_*#6srP} zI&QZ);H2be(;@KX7lByo0DcvX3#>F*=4=Ne_c|H5YzTT|*+Y8VbjpJ^_TD*Rwc_&@ z$h!}zH=j8<_6Ssxp`U+o_|W`(*JTrv@@rJAd2xG0%ZjjId1uFh7#>6N_~pKr1S8{O zgF+5pF3ql2={IZeTXpI`T?St+Rx9z_>7C&7UUoO+`RIplQ!s)dMs)OF^ z5yOc4NiMQl-Fs<&6=!UFJliWc_n!(42$ufln%I}7QaTBn9Psqvlkz;EQAYOKXjn;S z+=M|i*zVQrhZv*bMR4C{&7+wW8n(nD*xdS_iF-}C zJ>4Xt@_j!!s#oUeb#?^x*mm42nBS<2*&YD#IVD!bPfthwSg!K)n$`gp)5`GIYZCIN zo;FxL7Vg8Cv^`qCO;AKv;4ud}mYCE0`wsQCsqzx1DqmBTImGRl2?)xbR}X#-?=WCn zN8T`tm%4TsmE&qq8jH8Ux9FQ@anY%FjhV^Qm;; z@fh?R1a*|HbT`n4-^1bk?7WOPk2(LXg&T7kGsvkv6qqwA%KpCYun;QD{$Vpx zQEWfbZ)S23t%^noEyU0x8f7x-{7yXCH6tj}#&QYjk|8AQn~sjlp~FVB9orFH3iQ+{a7)O|J>{HY<$RUo_^9mY~{C@Z!(?XI9a9fc6RRsow4_ z)(o$!J`M(n-|sbex`>daP1=^Pi!y9hOiHp*`|<2&4r#h;)C{VN;2=x2&1CJKauA%d zmjk}tn|NZ|D#bz;Ya(BEH{-9OZ5qyvyAK2|WK3l2BSi+$W^mtj@}>H*5H z!*K~0^wBTw>kCNOHvP-iOYp$kRIpTfM)Xv&_niiRgNM=n0Qd~lGME#2e)7}2jtRM! zkY^d2=;dbI6h|u-rJ8)pUg{^$3@P=kmP*QMChpH+Ci`_=?_YW3@yp=Ff(#PHO|X#C zaV7D8wF~?zL+x+-U`#$~ZQ1UB< z!)aS3CV7ONEZ&HEVW5>|8CGfOu5a0|_dKmEKr8S$w7&gU_0nC&7+5(Q5$7?IfN4D= zmJaBRl~4zLGAfFSrrwpT8F*y0NEYZq#%5zE3jdz7aq4LZ(7)QT>qHUK+-~3wm4gww z!ENmjMt+1`L)mYm+FV)IOo*TLJqUMiRJPp)&7R7Jt+%i5jxboPoWn5Rs5G7^)N}Hy z4PS;5VrXGA9K2?L1Y0eo;sdByR3vCi5B;%idT|HoT}T*WhPckzq@wjuf`ii>0ymMS z0QjJ8y)Y&K6V8+ncJ~j^rc!ug#C^1g3$(5+=O2V|%%4fH;Fr-Lu$E zc+k|}CC7oM4;Ow%G5Zo&aL_sN(5{)90$Nup`sW}k!?+kh$6hhJ!=h{c9~UM^4t0T2 zAsRHk^%Hkb{xRok*;q3NAGOP9LvpL7!4Tj_KEz!Lp&^5_G@Q-ql*tMLU}qcBmp+-? zW&{%!HvkSfMBPnt|A54ibfGAp-Q$|Hcq8-aaoFw6^qI$;LC}x@SD!OHTJ1TB6@8%i zZX2x(ayPcqevP4K$0#FE#_l2#hhQZH|B?mbFzwae$jGIMG8mH;ys#P>#UZs3S~Zl; z6H|F^G=jzvSu;ru-f&5kBSk%C_dIswdEJuI+N8=xZQM%2GYA^{z^XCdx{&O`2S$Mw>eJY0=uJQO#@ksU2qW^lJUWIaV>VZ-QCK=ecf%7hgcQ){zK(sghnV^1Ia#wyQ*n zJ?J&pr57TdU4?zir=575hOrZrFZ*>t`qxCAJStd5TZXA*Yo^kV{~Fox)g)RxURN-S zP7j+{C&71l*yHwJsh>e+Yl16MyVdZ6T-=3c?_$2)Oom0^yunR=2!&#i`%%{mMcw4h z?-b7yw=29Cke+Efo9imIeT%zF^z;unMb|7ggNE30(qm|n*CdrXu%`1evELsq;luKl zQMvKt_%pACYu1XFYy>nLo?}qF1LA*TA^|`2=*95vU~g_bHBtjv)5)&(;G@FkaJy|h z`E|-X+uX;z9}Pm1wOFy^uvAT3+bZ=Qs3wB>3#msufYFNytnVm!WPGhH0nr=q8T~mv zk)wbr)=y&ZU{TtaL&lFSsUS7S3Y*++#SUVDCIkNZ&YBgVqqaX|lEa$q%^4 zWogaK2t%x7OzHXoT|@;)B`yA{38D4lZ_`oL>MxaYMO z73>ERBrESC)LzzOE~FH+Yrgn7n{=4i2rYjM?X;hhQlSe$xMd<6xDY>f4x!G_d*;3o zq+whq(Jiyko6NE8P>9A@6&t#Dvm7!r{gmfVUm{<+FuyHKf_bFg&Pe~mp_Sfv$>aCU ziqEs7^NE>}TaGTJPR(>c<^VZN+q2cdgGxi#eMf^eI#QFFI6z<#uSj%SRn1)C*vkt> zo^O`o&GhPHlSspS4RC|+Tc33t;*~SpIrA|(o(k?Ccu787jM;^L(~h$Dud3gGQ%*dO z2D^_I)fdApGbJUAIF$g11|w1&{9ZDKs3M=mrs%DVJo$I0_Hj`lsU0H<(+lJj1>Cya zJ&ciHQ$ITMiOOtEIswy33=It9sw;_G8>y;}70rhxR-E}?`xG>YiJK!w;iEVE@!V)bz%0BbaG)vraz~xEfS`8D^z-kP+`VRv}Pf z(LT)4d~?}NRKP)QaNhZmIHLo*w13tkyQh#De1#a|N)DH!Zi{A-C!rXK+O;TeK3>VQ zB5D)!QK38bV>x`SZT&UTAjd|fOXq1~l_mn85Pl7RMb*SBT5*c#3Yd}~X<8ui@p}TE zB9DsF@(scQb5Tf@wA{eB*`q_CiUQ9FfFC+u++9c!(a`g}*zCk_)a;J!_MT47{MY5% z4dir9_nM|`SSYU-S9Ki9a>qE@OLwg})Cxz%IS^PlGI@;`6Qj%%ttEPCe5r9lMS;C; zodu@kFrPrz8H2NF1nZ8cYX%=c+$5}SbkgGgvX*A|{-iPR;5&~|7idnTMUrR`%&95M z!U%-i+uP*BtP6FOGlpa3{H49F>2j}~eyn7D+n8bE(uusWwb_nInGui|pN?$7zMdk5 z+U#j3!$85vIq}yb*hFkd0FR#lWv!O$|L9Jj^U(z~Z`S4YzC?sLG|-(4V41}EMG1?> z{u}0EPh*Nwj?CHv-y2x~sVb?w;JkzxY^%ZDHXh%V*?zY*vB_b3&n6_& z3jB?L>E)(}y#AQx;Uq+lvj3~EY}Je3(s$KWQoHg(=dikqZzoIEF#*wx*S$LxwWKot zDSAzm$<73$3)f+rknt?O>oK|9S1qm|gIdGBT3Uj*wQYR4VPcuc-j+e zuAVyppRo>~h4(zo`=+qnL16&E^7msMp)Y4wQm=fWTb;0u$<53XjTgf|a`N&?+4zX_ zaZ>$u=Tq*_vjVdot>-31D<76;;_~RhjT+@t+V`haIO{kGb%$I%+U(EwyKnl2HkUxR zC5J6wyNsC50Q3v43ZGG}6Y(Woe*t05wCD$QlL$eo9a74951#s#THr*2Mfd&s%(mco%OZ~BBU-NG;ZHkg zkVs+}CEQt1NAINg5rG_5cgDZIaSBQ10wI^e>Is%2D*dO-}+4*d9WCn zY9tP63a<~MtyZ9dmA0kvfRfwsA`B@(|AaH3cm?nwxy#v**fzW%zjbSBfPnt0M2seL~`NU z#mn0Ni+^j`9i7wq0<_HV!?I|=HquDKJ%#HYehc2b52Pkn6W%25pR>LY&{K!E=(|(S1#x!~YHFR}gC#(c z_XvhrsoABY*UzB1LlmMo7*%b492`Sa_495rWm6Ylu-Og&nYA97Y4Y*K`xukC-Jp*_ z32B;WZ5}Z?vBc@pcdLU|tVLO-&X%Q&((_E$6K~$)ve*-u=6>!(ZiU$i=uPs(!QcJT zBtwnnMYic=|J{i#D=LI^J%hBo@R_<4Hx1@Zk!N&=@*;n6?8Jbt(eFbEOrADfP(=XS zS`u|kQ#MIhT)ZSe6c#T&-O<}xBYqGF)aUqWeK zj!z#CS=^fl7HZ8qA~|Ox$DGn9kVv>0{@-;ABL+?Yz&r~8000WOS zhrOje6Tv?k;J^0r|9bO(ESiP6u_FKg&_D9u2?7rOAI|{58`)Vq0{#~g;op_W$k@ab z0OY^$fB?V%|8eI(PN4tt9`Jw2{|#sKEB~tq!1N#7e;w{W$p3Qu4?GAsAmD#%zs3N> z0D!`dCI-%Sj$8y%22Khljs$8Zj!qVKwgilHoD2+fjK4|%F#kpZ1ONpA0Ra5f20#`N zkdRRL@7u2q01DuLDh2varNIARX&k_Rs0%Qc;@>9{cSHXIAj$)7+69kFs@;X7Eo(~7 zon72jUYdAPYz3~PJdaZH4I52Ahb}XeqRvIe>u!ksB2IC}Wm+jJW*e z)}^TMAr80p_U*i>^U$;L#_=PeymdvSEvbLOk^{0V@g9*1?@8vCP&2Xqx3hVqNw3r3 z+b2V#(R)q!Brf(cz1wgyyya_7i-gYuB3SsB1xFhoL>#~bv-<+!2HDet zz9|#?)s{a@rDO~C-Mjpas;_%@E|cyQa2+aBkS+m(zOLS#C6>)gIW2U3^l{u^cQ-Wb zKhsH*pBe;i)j$zKpnzL6?W347rM+l2NVFgod37@Wkr)1L>Tz)XBCgoQ7GC_Pg}RpB z@Vb1SjG5(p&Y%^}EI+ z`YRLOCZsn) z)|?@dfl$GaLE!|P-A(09e5;{;(!WRu9Ef)Zd8u=xxkjz2qRGOv4@R$pzehmqZgvgH zFk6iyGsv2mnDCmL#@-bR50lEZ;;E~s(($ROdPRTJc;m<=EmJ>^)l-7ixg&q+3gXJ{ zS^qiR{(mcE)&U|=e~zOKGVNU91%XbI$0L;B~Hs_ zmEF8y2+M-7fSly6WVuupuk5DR~10YmTIGy?Ykj$|1`3u zPkJ{5s61>%zERaExd{=neeF;R-!TYjJT}-nL)&I^0v|8?{9HVw+MJ@=0@8(I&JykL zP6b6f7FTS>e{!^JJ>qyvE}h@rj4R*3@KE!#BPZcwOjRlfJu z0c2cnH@n)`b?EE5FEUCUA?&DCmN8KCJK?r0EnKBr*n{ENFTfSJS0^Oug~@h>TLlks%(<(T{CBL#!MT6`GeEmqKld2O+a2GOF2ilkHP>BKFY+jGfo6b)-xyYDd&1L%W%^iw z&84u5|M0FSp`?yIKVw=Fr11jfcIfInIm+RNR;oTd`eFO!w{M zLg~~Y66&V2;A5bn+-u^Z1`9sUw;U(NHnvD4Zt;f!+E779r{Sic#Ei^aH3#{q7ORYw zKWu)-#U{eItGKxMj1)pW>@~{%&lJ!`F3%rye6SV7SP;a1)c4vVo7SbTIvXSYysSS< z5@rn}*M>naMC5i7YLyV3kyrjwb5L(*CcbiQFMd3H(~(1*#4>Wb*@eEYMPJtf|J5XO zV$XQ+5=-57IVDzLSl_p#cEC_|#f)|oWu{vi=oPL0Wd<|Pc7Ua#{vIjAl&0=JV2PiE zzDA)_^1{T&%5SoZC7n5ql7j-kM!N|hzpd8dZ-(Ab9!iX^KuBW*k#@9o>qf{Rb^2np z29=rTCZjl4mY%4HgYGk+%et}Z1gdMnnKXCW8yk7S4bwCB;Ap)p2CBXI3K7%XyJW4} z*FGjo4}FC%+Ui6Wu21Ld~}YzJQwFVusLwo!HPKA*}+$u{Nxe)%*@E#SPYm-??wX`rt5t7UNa7 zDtbVYLKg7Qm3jWXGAfPkpFb{M2iiL1`9_jU&#jJ`GtYnCc43Ob7-Z3AuIG=(M#bDB@m$kt;L0aDM z;mvf|Md%eN20yYz_;cYxA2}HXh3Orh;-N3#+cK;3RBzRRUNH;;IlZ>6Llzdzed+jqsma;47X|d5(9?)3k28oIf@e5vovzgrZCBKp0;FAF{1?jy7QBH2QRrdfp26ay>+)te)sc=?}`Y+Enr<{&Oe{$Dr8w2b9$0* z0NNUl9DgH>eRUPNLG6yI1BfVevu?j&J%pi_@i_>tevO(-JtpY?n*p{{aio!scN90L z@MDeAQ!aGHV8tiwtD7FqZv%`+6s7SrobQS@f(t5k{UY38isIaPg3y*)0Df%DK@~CU z<`+8yzEyN|_!~FJH;A$$Ge^i;oOr zIK4?rs6gtt&AO83H<3V51ISb{$Buo;F0Uf{U%451ZA;JoXXeM>H&j<{j@6h+is-`J zG|xfzmu-y9b6mNWJ4I%B{@Qjm9#`+*2DW1#tBOz1C|B8KO7%R;Xt3=7CQm$fE_d!^ z-At6+1JIlCIXI-lgLssVV0bK!zKV>1iuns2t1wT2)A_f9d_VAVd2)qkQfDoBdRYa^oR+f3?HN5ZB{d1C?o{_g9F} z=!OC)b4o%`%ZRi@lO6c2Ap((Ds=1;pb@f{=_g6?D=7gSq#JC|N6qHc2H(GDkVUn0G zK)4AFy*y9nMyL9(skM8St=$@GBnfM*^ok+l#nSyi_WMpSatOrThJbSfz$2KgwqFhqc>T-V$YJ~V2T;OH2IEA!Z>rLV zCn7zpf{bs8mxHi-_-y919V%MM@oh%T@`Q3{CZJoGPKHME!7$sU(!G4_WtU#U4akdb zyYv^b?LS53Ko6h=A!P9uA~O^g^ZlMbURSDsR&I9jp>Dz=CajDf!1}Sh(FVKTE3pmZ zgg$)L*d4&v&*^IWrv;Tdsa_m<)sh5JP=3fqL;10kUO?n^yeMGVA>TNTuK*}S(k4lL z;63R-8PH}W=h^n9Tnc>8yt^v6|Dt|f?{rxGWd};QL{aVpgo%wKcOZ@S(=w$0p0DoZ zpB?lx+wW<7+*PPMLbtgKK(IlHRGY#Gu1qU(U+OGI0~1aVJ_@ZiXadfRw(B)?N67F) zxUxEDTD>+cW~K`v@}vy8S?o??JwQ&s+k%|vqC@<%9K9ip&v|Exj_J&dMs}L}T~pF~ zQHb=ovrtMHvMz`;>o-7t(TxY9bt=`J*H{ zU;jqD%pnYCz7%3Vcc_jj01T6kJIh!M@@(qa+>+ZsaH>+vC(jj^L`dS@B%)2|AQn(-s^HU^ z)jVdHNYnNx`F+SODd3d06zg*}cuTT)ERgtIs;7=YHo-J>x%8Im!``K-Gd+Bfu~v?8 z9h$wVW}|8c?$BgHdS|9B7Q63i%bV`pWbs}+@x49axnzKAarz>X-yuf;1&Q0Zp*BBbYCi%12WpX0a$5uC?;;1Yk)tS?!` zpeUD+$bmQ37sJ_Gqk^MjoVm7ZVE1^EW_c!rx?|XoQnOKOpr279x~M63gDSA8y^|Q_rRi@@ z1B9dJ8(AV;!9riv29OMD6qSVyq3~Q4O!;E2E=nAI>^+HZ&TcAFPst>`-hhmt!@Z-y z-5iugPmG-R!oW=!(+0mDB`>N2W3D?Bi{&oxLaEd<8(hP!T#1*%49m0gD?mqn_c{84$^OyoA_B$p=Gzi%7k()d!#2stVWyI` zUCt$3gFTa!z6x_wkxe4u(xv4PhlW3Zh^%R^FfxY=<9{AeiW*Yi4M&4FL>mT^l03|T zAw(tN74s_2(-_?}Pi`%yZ#^v7g@#U9)1_>2TW~e!X=ZOovJ~H0SV8IPadL0OxdMGv zl=pkVaLkAe-y+$zxk6r*Umw)>CCvC+x~tKPLAoQ%O$gtEBkwD6i&04$8R+@OvBiMS{03W3Vd8MwedP`^zw{#r{DY7)oaE z+y{I`MdCl`Z)COUeO=m{j`o6u1x;S|)kRw>5#VSJYLhWBR26{qOrf5$s+n-|0xS^+ zY2(&Xu$mwg=Urxj2G?c912I5YBM=PJoHyle}9ugcdiL#SYS$}F(t9SA3qTRIN9F=^2GS5k{+ zjLcLg43vMdCCLu7+E3l`jXD17tnM2ZxOV#Tt;%a)6RE&(Wfmp-bP9}U66ID`9Q(;L zdz)kt-BMe9HgRot6(DsMo;1D!`km{`i_8rMwuLgsKCd2?&_afCq=p3ZvQ;j;P=Rx} zuwr$&*wr$(CZQHhO z+qQS^;x6vJ{k(r7qn@m)%un(IzL))ed4!6$C-H;ZF48t95&h~fgJ0<7{OYkgeixI$ z?X>K^h#Z0dXx~kiO_}E5O)O~@9cbAmuY5OR8oRW%F&P_k^Aca`&pb%!jD{`)U9we~ zqc<@X(MYFJQu^~iU#Onx+Cggy-RNFU_caI+fm%w4Uqt;{G#XQppCcmH^)M|x2Ucx2 z3h)4`IGS84|0dOznJ2I)fk{LJ&Ds6@&RWp(g6{)Lvb~3K}oBtd=u>C@I;$5fP7Bwj4Cl5k5txn9Ef`snu1W84R7C*~P59`uZTLKlWd?ci&rZ33f0(={ z!DeR>@IpcT_3o3Ho9Y$!SSp*;KNTmfP5g1t6Ofe%47Es;j~CcI$Cq8kEUL8mVBy`i zR@1Ju<$r~)PGqAbodjILTfNOf@stM3--wAwi9{Eg>FU7S}q^d1w z{DC^xyly~&S)y6xt6p>A7gT~JAp`exn!oY+n|k3b2eeoQB_4==u0fQoHiPChA^(M6 zjBo9n97_&^3zgwv-3HFy5)=^%b{9$a2l_9Icyd&pFoTS}tSqSUXTX!zHORf42KRRJ zvhC9w4%fuEzDE4QZo-H?Wqjz*?JRSuXqi?^o+(K=^(r{3yK?it7yQ%&uF05JKmfw> zk(K3-tMp%1@?KHj38pYpg!(hbFz{^Wl> z1kpzV*tB~9K9NsR*i!McsU$J49yA>E!zN(J&E*0T+#kQ;_s^iXS^uAam?{qvf3&6L zhm8#p)WcX`X3P5k*vnc012(tV{*g-RSizVht)9oJ9yfW8;bX*3ENGXr+CMNoYIqmi zg;C>!NhU2=0^P!AV$@4R;N8%<79d#OYF4ET-?JxuZ??2U}C zKXkk7{!5Ss3XW*Sxkr&qbDJV+ z83d~9_zRO2AChlns_~`uN?iFoiN8FFwRlw%|BzEX+g}=TV#Sg<_Sop$(4*fyp?fPW zXVqN=T>mUF!2XyRgt~0lvO+Is@j%dtV z>5V(-M%vuI(l)j4>AkSkMUA)U0jNchd(QM0cN<+S{bEN5o9#9FFmgk4Hd{By?z^)e z@!j)N++(TKP2+?bBo8(uYA(gEMIKe z1plY=*UQX5f^(-Y;wOT=n&Ysz3@2uST=PSUIBxXSS3Bl0cCi+>mkmJxf%?sh;c#+HMpMHY*{f`??JHhGMn<^ zq7sjB3@Wn&^vb@T4zyKG>jz7(RqQ&aPKSv+<1hPBIia9^WH`eQlsJ!-#57}7b-ls6 zqV6K3+&^(<+Dj2~j-PzC_fW@PiQ#sJULnPXq`qP{C{@>LR1O9hu>QqqtNrMVijPL^ z&eIrrVzLqVy9p5pAP}vST@#s7;f5BkDTkrzT)ka-{1u=_%IDp@(M(Rt)#~6g^U#oQ zV1-cTo0ZiD`LZBp<@NI2ZVsWFwvGAF@Zep;@h0gQ|v_N%UB-G-U{M zF3>D?Mu`tGV<=M<0{oOmWuWWbpH7j=e(W=fg@ic<%B(OhW>Hk@5F!(^GkQtB^o`k; z&@}X@SlSC$;KEF^VV}XhFkzgSY5SG6~9qrE>BgpnLXbCDM9o+ ze3?d$8p+Rm?(O2KwnDfeEhSWD3Et{C7flO>Y-q3PtOY0GLBSR6tJScOwuRO>yh?KW z*i|a2Ir+Gm9mT+;K+4(MX|=jD65|T~i?xnZCNzx&0A9fkD zcwQlpu2WH_jAH8K8$Gx*Hn6DdJ?6KeKq#9Q;YU5o6$L>Wri{@UBOvRroIoeWU##D= zgTkl#1qg3uY5z-@jX|hx$2#L)GVoWbD)9>w3vrD`Omhz2Z@M!=y3f>ArKprJVtE0c z+6*dpwpFnv^@Fr)o&}fR$`!J+n-SRWc*FCi@uw~#h}~qyN!CLgJ_FWs=iAaWlsi8D z61p92cwV^_%xhc6w=n-@?XGkXzTj%-dnm8^^=HbB%Q2}s!zST^J325}fI+1tNOI)u z#e-6?4&;;Fu$5~4Y~4KS3u^Rh7y+THL7l;Rl5hOP<%Ao81Y=eu|NcrDCojgqQmM0#t{G)RVVan^NQt5v?chtL$piP~(Ah6&W^2 z`&~o;_=mIjw6kX41Cz~^354(>1Uygj8dOMCzk7;LFv*+*88e&<<5LMo(Pa~{34|HI zCjwkT2oU7I?~~vw#Me9gF7JnziRDc_Y~{1v@m@<&Wd|tTE0*o$($g=ta2}kQvR}C@ zqo8BQ#uWf}fYNYv@tI$g(jv&y_xVhi6Q<;0P;pYm^bDKcxILMh>1PJaEp89rJmrG! zU>)sEO!5`EL|P*!02aScSqzHuh5_JcR*;y~CWF1YzJrC($R`5JR~vZIjsh8+#YDi`fz$*Q_}z-rcLOm|S-Rlz+D zg2~a?j5=`)T{-IYK&LAj#o7;MI>CqLn8WYIPc#J()|lb*ZsURCFnC%H#6MZ(r!DNB zx}`xXr1}wZyG%)zkS4y%;OTnjX_O$U7pTbv4UPa%pX8sI^4GV?I){vt z6~Z|7Ndj1{-_Kk-e8pYAXp#P>F|lQRn(%-)&|?6U+!f4dsRJPVm3*oF_?kH-87dlm za*p$v<4)(t=lGqU<^l87G#ku-9J4~Ky`ZMgze-JP*PoHV)g)k2X)wZhA4ZaWi$odT zVrZ)jWg={Wz$eHgMol%mB1SxvxB3sPBVpbm-x2tQQ-3!K&-kBIjWpn6^GjwS|K3D| zUb5%x2mNIU^Z2DV`r%T7`&K!o?GN&Tn1#UMD{S&V6cmUt-n?uSyF}if@jHpcnMbG4 zS*b5}*5u=Tx7%&CeS9?z2eAz$-SovOakgD*aX$h~(pS-C<$1&@n$?5|3YV_}3un99 zhJjTXK+n@WBnD@T&uA)fA;ap2(OqHIdZn$Et7Gt7(KG7d0XV~kk7m`GWDTo;+2TWZ z{jmJn@+qA3kBr@0^=s~IX*^btrQ|pogd;^ZCEX87{i2GOA}`Yi{6+%G#qth1_ehat z%T#HWU!g98y&>)>;_#$Nf?q5@qdMrKUj~tAi>rdbLd+s)dsYdyBuf%CO816O;gyd&oOPB6~2awt5h1XE5rs`0IEx8XbTEtq(uz z-pQ>@W7X({IZ)Nc*C%Ym_l$ZNE!?PnY@NRcnaPc&xraquD=8!Y3X;TU2&y-_e8_-z zzhj-QJm6GrH4Qm9{w(JXirA!uFm_S(N!xO3&R#E}hYuoF2teQyP2w_7D&B|($P?7! zD1tEWwt}&6eKHIX<*bAU zUO}U@9vux3GGiHrBE@#v@AvS{tW`KpFTOtPJXp9r?P=K=V1fC3+Mo(Y z0lX4m0x~RMm0vc!SQb~F2QM}4Nkb$E(udn=!f-rZERuRKF+FUSS^|LD3cUHH<-rx} z&%xoatxXi34)QUNT1&Tw`K#77k%MhdJ;tO0!(qk8_PLk<3i2Yo>rX!YL_jqg1o<4q zTY1yz0t5RJsv7qb)SlLmJ`cT;AIe$t4h3;ede`qkA#w*ZwMz~(ecJ|>CidN8DienO zYBCwd;4}tXu+F)6eObhj`P2E4^<1y*tnD&oM~ONX?=s-UKhWdhz*VNzDBd+5L@gPo zq<@R#V~a`Grl)vfxc#JIp;wEEMqyjU%buAw7c6o?yZlAQiA%CY$1Q8WVAru*t_zl7 zZX^bzhlt8tO z7g~jwT|S%NYkFr<({V4SRufTY+!Q121r?53IlgqNYn?p^ruIj->`&ATHaXUN`5B-A zlp2ulVQ?bql~5FJ3GP{}PVzX!bF;;BzToms)V*?|)72w5`V5pjlgGyuD^u7eSc#zj z528;Mz};ZAU}GlXL9DVFM?@8({B7VPC?3il1FTeTXMe6F@UHNb!B;ZmnYq&_%y7fd z$|3ee`EDX7qOQisY6Nt{FCIjKe+YoMe(TS%09MQ2v;4J5yRP=<+71$Vxig}oL&tz% z7a|=;?tVsduD|0n!BeMG`_)nJjg?$>h5VZY*KD#Rtkrf3v^0Sbk`r?U#V68}R zF9UX!0=%%&)DRy^skf-$1N_!>nV3Om3^UExO5 zCd`p#p>)9RB$T8%w!FDDHuAb-KqRwTabkrc=JNW%V6&orChSG{Ucf5+JWDS zIy)I>;ztO>-wUA0Rn*-<@zMSr=iC!6&gY zM#|JwfH_gfJ?5-BP$bgc{zJ~3%~FmDyO8tVRF6p4DeD!B(V;^Xi>~5+KhiOF#8gQR zF-Ln%OV4QDyB<+EaS(68V|p0gk2@!J@~(h0%pB@uZ6oBDvB5GiLXas=YL4Xm2Rn1c z-4@;I8$!H;fKLlRB&jizEM7XLr#&9XJX1jtAM+Yh9z5I^Ed#OZ*%^~z2LBoFX)Iv+ z%K@$mutt#|PQ5z^cr8GaLqGTa^v~LE3=b`MOw87sLzm8DYBRMs zOu$>1=mfJPfX=GZCFig9HeLRLeAb<&wo6~a3uO8SYanh?YCpo1cT1`g0v>f0Cjoq1 z_X3?e*DEipmErBo~MkaZGx-lAW&o>l2c^1d)QD0YM zatShT(ixX!(*{n7SEwqCG-TWz2%Jd{%e3?y!Z%d0r8)0_qF+<)LuMDGgHb8)NW< z>ttP2^C6*N#0M^0p_djHhu`OHmRvev=w zm%V#ZR}n68yoSt@E|cww`px8R{RQ1TctLfm>2x}I;?(NmEt53Ebfp&3kVqTV}fMPA7McJX~QFN#yUL`P8iv7vpJ!csNt%>A}(5e{h|(6 zVqj2elw$tG`;QF~z#Fgy(=aq&E6qdt$%`*zi3y>&Un`@+mWdWmlTuGAc%2hR)Y2sJA}cBah^ z6!0+jk#K57rNX@hbZ-C8TF;smIvZ%9^V@$*@&%nQM2;c`%`E-!kka5%dTN4j&Ea|d-da7IykbWPpU_ctrRxCS=HvYu5^`~Y; zA8gg+?dlZ@k&@))=xmQvquc@;RIN^yEy27{x$RFIc;Fy78UOQV6+2PAH7K`rfX*aX z)+@9*7@Q0G&7}hRilQfNR9!&{VQEDpbVV79Y^9cj6rIci;gCGD{r7r^r;h%toT!p7 zogOrUmS#iILN_S1NlH90xFvPV6LO3}prf6EO~n0UzSYQW1V+Q@hQ4((_?Izc1EXv@ zG9y^?We2JaO-x6wPtBtF$1!(-J zgEcB;8|}7~;ysy; zV1REXyIHb)mp$2(Z^H6UU55`lC4Gp`TE#UMzTf`WsV&rF)ANjja=P*={fuI_F(Frw zE33zC>bkBuo(@7-p%UoN0v>RcSYV6au{07(lYSW`|3M@ELBp53`d@#D)x(fkj5Qf*N^h0ZM-qe20qhII9Sw&RA33cm z{hT2iTln1e3>~!c$#uH{1{Z3x-sv1Bc;q`wgD&#FU*oh5#}xWFzYT-e}*v zSEjgEmRJhe$-t}x`V7SMu%Gu#^lu!0MRxf{Zux}UmUv*|& zNCvQ>-yT0Q@z<0|+tHRqdPLFjNn*A**);i2+_oX2ynTRX?@>iJVjs6)1r1H1MpnoR zj?rr#t_!m@K#h1@-yAg=5v8*d=~7;9J!axQOb3;nHj@(BMN{eSvjdMVEh;O_dhA4) zN0SUv4a1n>PQaKQXCnH3BxQM27x%BCb`tE*MP?i#FzZ>MZ+z}sS*U2)#V-j&lM zwYp$h-K-tqW1GWXT6WZ zgJtVh|Cpf*U~4D;YJxSf{kv7Uasr!AM)AU$hQA&3Yy0cQDW(wJ=(Dq;xg0)b7Wr^b z9L5mpdLjX{)Xl6-Zq4OyUc_u=T}zCmyh!z!-J&}6iV)vuTrTV(V-A)*b`TS0wj$G5 zM!#36`NBBMj{5`qMhQpDFsZUt`uXZnX-mkQiCO>IdcIoY}mErfoWgK|fJ$%rn zRQepB*;|#OS!V3#O6X4Xe45;$1l4bVhFs|bqrL0fCY8%6WpC<9q9obOwCF2hLMJo` z9Zh5nB30(IJ}M!zI=0jB@*z@i8~6U-951xz2(z*`a*;GjS>HsYM7X(WnMG&-f0CR6 zZ0A)Gs`JyFQQ@(l=N+uNcq0(X@2XQk$)=`2_uhztkt?+;2m-4def=Ou!`d~)(A!c> z>7Xe`vmfTaBd=`z_t*%{pMICwu)%=&X9V-A8Wf~sYRrs&@!sw+El3>{`kV1 z^H)^8QJe?nA*B8ytJ=I9JHrNUy7-A_*xAW}k#W*RgS7;=dpPAyt|+b35c>SJ z_kZza#~BP|>iA&PO>#2fg@m4c9{HJ)Bk!n}%(3MhSM-60sCCYQcKp{zLU>kV@}O$( zolUTq z-p3Jhwo02f805vdg7_{ty z6h8aGCW7PYO_sh}_*DB;95_8jCx~l4u>a^(q^4GFp6jnY|ANN~JxM6y+8^{gg^5YB zxmRrngk21w^sz@?7~6HQ2V zB;hD0nxbz{q=_6NW_54^6CoR8%A9H{)<>I!e)jOc@*ks#n*+~FwzpmdrDI`M_ zT90~9StP)vi@dqzB`G z8*;SJVl1JtRL0KY7rCA{hX`=`OtviWcad$klCf2J_r;c zDf1(b`0Hq(-#(o^rrgRtu5lVjUKn|jI~=Fz$M@O#}9Hf7N%Ku_LOKMIz0Hho%yteep& zcmh^MJoL{^jx0O{lK#?d1iXNe)TVovT0E??ownOj<(i$+HxSG{@n;h77rYE8LJ>&>aI$$-ker zrP)=Nnrpo2F1Y7C>lu)oFHBj}qc>7>`_WjH^S6$_DU8!%AvQA@Dd1!S^Ri*r*w+At zfN%sR;5Me*AsJxqqFMbwN%xQm8By_l^r|4y;j-{s9+h8#)U^JvKS2&p(Fuc$M}p>f zV8vcGRIFU9K5AgCT?Q)5yV9EN;MI7foZ)KN6B(LAcl9fA^3>m!%;3aIVT@K?TzM3| zMYJLlRoo*l3jh9v>j*z*IqH@t?Vlp&lxH}I3)D=nyv zeIUXzY5iKE;Orpbfe1D~JAKmpFc#9&-FHjM)3QG65A{QY&_S5?#2HN3l|$+%9b_ST zFRQU>gT&uWh3`OM@x7kXI1CgCD*o2aJecXAwh8WgEonMW=F$r)%7VM0JgJa!Tr=XH zJ}DH8m+2m-Y7BsrY3?r3lSz{HK{7q#-r!KvTR)MOkVa;7Q7s?bmx$P<96#nDdmdZd z2W_Z{(LdpjbrLT^??DnCD#5&RtVKAJ>r|KTI2lA=;tSCKbq!m&<}KUtuZ;cwUvz|X zQk-}XEtqndlSCgH8C6`5%q5EPqr#F-x~JJqrq#fD_}xMj=E$_LS|`7Vb0!aw9-m+( zJ=CpG5!%<#>%j|3z< z%ryWepTEq|-b2{Hjo9mAVi9-bisn8aFv2)jNL_xk4zJA44wjFE$p!uRa?6Kbm^-4Q zll&!7+`q_)g&mc;fUfdAal9#e2Hfs(K##P>H)B>+riB5t}H6mPx`C z5K-Zd0W)y%uB@X_o|f)qpsBL_D2Vv=Wc+RtCw_3>a`Uw#6+94m>yVKPgw_Lzk?7<^ z7Nm}S-MY)tNidL4feY~wx4-;rnlTLNm|iwXP{NLTtzoO>d(EVkZHyK6LG5h(0HZ9i z&RYKKUL|}4g1&(O;|&|mkyuI&$Jv*?npMTv+`Ylou$fYfZyjyL8n^MwE>aihh0@X6 z=Fh*rZclWT_bQ4bxcWgrl=Md*QA$1us(S?5X0FkFnzIPQa+6JhgB5@5GOY}fw_F3Y z3BK;uxp0#Uv4Md5qN>O??@tlU(Y%Ds-Ks))7@d~kEd(O4xjRW-%01b;cIr~)8SgMC zXs-nan7JoRdR+K-AXBe-&WBOLs8ifk@n%-Vk6wlhc`i4;2{-|&%$J507m6|-l^20Z z$pYm$i4GRIX1I%!W?RK^th@@AOH$eUa?ij1k;{$XjO6|nm-JK_Lzvq zAk8VFadVxObW9qRahJBY(VvR#z})HRoBF%PpWeplX7%Zg(GFjx)@^6}dM7nLn?(^+*9_HDyRTmAkylFv*Q_>)MTlPgRi}m6Icl9eu0F* zlkzH#l~YWin>UMlwtnIO)QDO$+hI^i!SKu!R@0mxf87rUR6i1JZR?Ox&859c{7ySF z#AgSVfsN##o4?!j0Mj>-ck`uy0_KMSgWx-aIGtCki6QR6CD&v0Zd;ZwbalzlQgdU6 zpk;4fMdtf2#N~lXz$Z1`+LHA#mV^o~3QnsAS2sUadu$iTs-C|0S|U5eM@b$eXcZjJ zfli7Tw_}GrCH*AdB4DD$+G5L@&>v2(pFP?~(g@}bR~CCp2*^O^Y)ZOJY0ST;T3!hX zc4sT{ksYl`eZ8TMXzDcUCtO@fRxao61OgzXE~+f^6O}mp-x3tTIT_x9EU9|--G#%4 z=v%5WIK`&%iFCEz!OnNTkTu-w3|IvIRM6I=GbN#?r{Pa_yxQ9fGunq>mJbAVG$$2@ zj8y^0H4?NkrjzTvq(rT02Ca-$;^YqT`~TV@?}!O4*Z)$tQy4(5;D27eSb(2PBD?a} zA(g0D3bH(41rfp@cgIpF2`=}rV0c%xD9Z?!$VQCp zq7~p#MxxW>ZGP!yp|$INxHbu5v)t$rO~~lZTy+J#z+0+`g8pDgqhpD3(Liuwn=?%N z8QA)fCLk!!KwHWjfG|?#!sv*2X=^Iiw__kAw8s8oO*KVO*rspMjOPboY!Y?FJV9{T zkT{OIl%QM)Sv!JUoZbhA>QURWfJ#{)ImnceyLELwU}N}|9_jp)39GeOt|3XJ+ylvL zH!J?Nkq$-M_>(i$;l)O%H76AXgi(y;RK-b@s%iBLa_Iy}kfawm zr6mbX1OeT`2Y~B8mITY6aN?&>*+uMeb+lmNiav_4=XQ6=< z0KF3Mugu@V=eK0tmFGggABzWD%q@@hscGbrCN8jWi_m5U z=ydtIp4SNSwrUuw4wk5=t9BjCk2FiwU-YG*afgK{qsFE~wzVL6_<N%e^DLKX2 z2C~ukWt8n~%g4hU?`G>@zX;Ni*2-%EpIp|+aZRBSi ztOu8ge-Q!@X6B6RSNw7w%pieq;RChY?BwAXzR~DDxfA`k%$&T6!JhLY#gb0 zL~_=n6kn{l;zM8$7zrs4Uiuzj^Dyv&C|QKhZNAJ~joE$Nmz?n15^4d|YwjtPfF+s! z$ZG}~o%4Q1U9c~@uBFn7ISa%x5lefP0QeHR;eX{sZ-QKtWFvBaXHBHnXij^;k-rCy{jGIWBNniOpJb);Pe*&0ZxCE;Kf|XsEDg3WDgMcctAt zSr_QziIF(9hWKGBm_{_4R{f8q4^-G+&x7Gm>~*#=e!?Q~^G+dXA!ucs0TH?991WEL zXBhoeefq8gv2S$dvi9+^TZ*!Ai!Lkq!x+?uegg+R&7?P^M&*T9@)C>@ujS4p7;+)}rW2hgadt$GD+;=^DE3_Ld!)GVEg7S`-r>h^v!Wc@Tq( zOK;?BN&)+e3I9|OWu|S?te1zCEc8#4jk)+gY5JUI_O5H9YN#>$#R&zsx{jwLh&wc+ zW+~C7DEUVQ=tULZ;#NL<)+K5eXr=gVAm`8}I%6bP=mbJFm(6zypJi&4j`H;m5<2|x z8|#$li4Hp0PGBhRk(1w7d6#c$GfZsc6A?^eR)&r8&sVJPrILz@K9v{J=LO)VI!w99!Ja=JBGcPE^B%4VcpIoKC4pp3IhBnG`dka9hP*<4_vr8kjZr zG_t*HE$18SY7fEOkRW|oeCWNNX&DHe<_CpFZY0nKj|{Vhb6Hq zxF*N=`*h*y2|{$*x1h^s51FVbNbftgV8gAPxncuECx9AmRw2`Rjgj;>wA)1S$+^qu z6AB0LOIl&EqI8@q`}$nnco@|^fHBht#7A6{*j`f??%>QLS#im0TlZ<9T;`C8F$LWq z<#KVbp)R?N6x+-_*fDmt|19~{UtQZ5ZN_0y2q|=J-^|Fggr;(XW(K_+gX!j-x(-{~ zH93QQn!9vlGM0T~mQ0FyQVhA4QNr@^)!28gRCpH^yc$_>PA#dA+}_(}LL*T(EbZDd zmDXMPvC?mW2r|wE3>TE{gqgozpk~QtRhALE&$d2-0N37+b-i&o0r0cq?=Vd6xG0K2 zA*%Tc8ja#}bh9-}IEQaHU9Z5~+y+i}B1ZYUdZwT4@Z*8^Zd_Op1 z|4Qo7-khqxIJJIol#Jh;Y`;FFdST<~221kpv@)CLOdyT2W4&x5C4J$U4HNced#;s2Fn9c*`lp%{8neeh5-mvUsdY%rKshmYi$+}O zT2<8*Us#%-OGzu|qbqY18pQbf&J6`XBstDrC{M{QlTEbmehH6IM3{5ixd@R=Mwe+@ zggbY|ad5@_!(P6!4v8|lC|K;pdV(Yi-v72Ie|_;{qc)?~O9Zky1+8HmZjVw$Jic$Q z#Vo%u>bhUsNK!Zo0?C^yQ97lUA3dgiN{2YeWa#-IPEc4BNyh$p@=j|K&*WVA8Jd>d zs@lIKX>zzcLTS}?wfxC|tLaohl|_y<Ie}~mbl($Or9c@S9v+t_;yzXkwmg&1 z@0}rR7*VHa>VVya^e=0XE0%~8*b(yH;KLKtlEvH0?Z}M|#3{3vvs@4T7l4{i`Harw za_(5}82kNXApv{+K{xCkVJuhPDXwPX^J3ge?jU(J?y=gT9xkIWB!oQEcP`LgkHTjN zMK*Z>og#05D0zuIyWZr@-1aC9v}%Yrbr{$9P4TdVM!y8Ulq+U38{Yv&!DYO| zd+sKdSp~sx0Gwn*qLf&3#l$=VUbM9Uy5{sNdP?Ttr$6Z)94#b1+g}A`QakhNZhmV@ zPXG4YA^`*Ze3XEh^T(AHuMZ{bbAS_@Ui44hZi|{uGUE?kCJR#_ zMhtsp5w)O`qXAZ4a@>yO4qGp-!22ajQgVgzPW)VXx>y8+VAWOq${PBsEe8X00PH`t~zf+^-=WbtE-VfD@H9IYI5L z@F=o-MVga`Xzxk&S7qW?Wg6&l+Qn;#25=SJ3yfZd%b5K zB`~a!&Vm474a2U|7zg5!$bW3I1 zLrVthiEq)IO^KI7Hv7{PKw-Fu#<6yCI;+PlPU5r;MdN4q{0mk_3Sls3Kxw_nCB&Pz zcGrl>sMde>fP`pq{~bZ*wyEg;dRLi&W<*a_GRhnqK+b_vzZxjiXih*acLJp;U(O(o%VnIU{f zGp+iBD~%u>5%I`YzKG{U#8^zHx1N$}f@;ujy?Cg5c3yo}%b$wCi5hl&frB&Faz-@j z)OC0JIgw?5t+#5WkO183}GIv&SR0gdXjkL zhYS?vq4ZrSpPf9|A)`?lAu{hVnI;~W34wn#h(A*cXHH8htdesw^d8VXy`xo=uo}iu zz7!61<=^#N6sR;T$1+6Y_t_%|`oMmeZ@}QDV2(ga{Wb6ym zVdEK(1aq!+PQ!w%33fy2>nDu=x>t^#b5wv1aeHI}BR;*XlrTyn0ASL830^3*eU*A! z+5L--4IaD$1xytIQNJuA!klP+nd&Y1u6iA9;TPi|R%BKwAtRSAVtS*0MWDp8EM-QZ@1 zU}sICDSp9H#bks)gp}s`>x=CN1e77`j$30d8&Vs_T;lc4U%`%BR)PgIzdScJ0F1Ck zVUsl|peV}u68m%hG$l(9llmH1_IQ}9RXPacan?6Xb z`|79O1;v)gn1a?-?r-s5jNMa{XwjA>;Iw_xw)3QI+qP}nwsq3BZQHhOTa~w?`=KhL zBKmRvg0o~>sry;X(6{e zkAf4*hfIBKQtO7jHdDOV7(M&8EK+k`DzG|~D1ZjmS-R>5GpC(B_re^9%bb@f#V)pC zO*W<8u=(F!6^S*?mpWQWAJ4M%+`pG_SNy>!=EUAjj7*g|ZfhrmT=qZVZ6R=hkPu7z zh`ev)9mC)6QR27vPCVMq91#LucrZ7)7kNYRU`qvzE&yWcR2D@c^u>=D7c*Bt`BTNa z?%?scvquz795@)n)C$?7g(suC2;+_mUm5V9{LR-4j3{frbFgsGN^uPF?xn#GTnWY9 z>~qmmFa>BvMxaRE5C#D`&9LTwBisrC67iFELwx|Pknsm-ms+TO=1RjpDHoKG?H|yw zH-9PDjeBA#s5;nq!q5MKJ5;zz#z%7m5XF!>ujx+jBNsBpRw^Ek0L_NvQOFT2cu?WUZm?vv_U`b zZ!cquKFRP-;*a;1a^E$={ldkN-c^>~w*K!t0=`{O8<*+c3uK!c5_Kbd8#YXt@E=^E zKWX3Jua-vSSSPNxm$@6Me`!%dROfc(MY}XF8BE14V1tH-edwODQeY!z6)eG;tgEpS zkR~vAxD$YQM8Q)!aR^Gyz`tv${{GWH|I?2J?|TNQ^ZTma{D&twV6LqWG_Cu)Xfv}} zU=svq+EWpYn}>;j;Rjt4#FPQ===|~F4rAKfSv8lND7$!Vq~lsEjr(?Z*f)LQB;9!S zx@X~KO$VN0R`wyxc=bzfc}QGxb+aMoa7RL9&NI~=v}kR6^$Xy2(t5&VkZmuzyk zh9jq5a{aevFI86`J%m{#C$ncMo#a|+p2vSJJGRrcL&$nqiY?Cg`*1#fWSim}aM^e4 z+!(qm@0!eXSlr?jGmG1+ed6%OTEI?a&&9NY3SQXWQ|I!COrklum zyQ|PI$LA}wbqpKxm4#T{{$`eB5Ubz|{qd9?zOS^y&N7J~z><|WWNL;>J&SqH=ZhI?q}bh#`#S8LbBtD$Rs zvU8?CIVs$HP z_aFToJaZdNWhHyp$lJ;mY^>@l-O8p1|;ex6A>veeG&bk8-iC%W9KVR@Cc|SWrtS0Y78u?vKlPS zB&=CLRG2ie&E-X7xZ0RDE{FH4Zr7G_qh~&qvvic#5tgKHA+fjHUU*}4s<)234CeJ> zspdO!OKQXt38M$+(Vej)_qu608n0<-Au0)j`Dd`qZ%9uSp3h=C(_3Ojmr+-3eHIpqNAUW~E}$4-Cq2dMfBFnQJ2g@XQWp&ZTyX{!w7 zn+?=^22^k`V=C>)pC1e}nGe?=bnXWDumE$kcNf2;4kZIdt;GLbUZhPxCvTlhTE|6e zSJ2s-Wa`9tGC~PDBNnbqWUbjf5wx`#jTYg)tS>G6jbr=QviPUS1+KE8%V|l|P1HDzb0cqpaX! zCq@afEB%R=h?Z07AUQ}cCOU47dw?!2n9Vu+9%S;t40XqFmq%E@G@J00bv)j~c6911 zahkGQ&=pM@m~5MspxUJZW2ZF>*rE^_0S|}L9|HsL%Gi-JVJYaa!_AzlA%|8wE%UhS zs=x6IR*adsv0a_qaq&;|ice|ffP1?1y0x*6N4>^j&t`zEks(_6L&SM($w$R&;<6XX z!+kC&J2S`C=hbb4y?7%Q@E+v5fJhATF1nc24SS~a48clbWyyPUa;JfH^AM7;BZ1f6 zx-r;aPr0>KX>YSKJKF0vA@&7=bDL4roArvrK~#Ys@-_iWz>kPvxHoLyVP~A;d5}On z$z$!P1A)D?K)H3NrW*R7n`e%v0MZ@Nu+WwGc~Vb(XZZN;!-=v-kR>gD*n}+y;Xq8z zQl*YEPxG~+$)N7;W&;bONGVB1VdDL=l|)-DS+m3t$WeqHBOg^1U!gcY6@p7hH+ePb zG2=gd(7RsBUaGt}o=NcYnqq^d+-f+&eO5dWf0LEP#K=?1 zXUcM*aM~~SBaOB!2VIoi#vRL#vjFXdym%07MQ@y0e8 zO6)HkHtuvG`K`Jbyw1>C=QD$Uz>abmL6-1aM_cWCSk7YDl%sk-fO6{-D}Yjra}B+q zX^`J1LNr_n=z)LoEB46v-8}!(u1hg+8GC}a3?##u-DDbBmmJWR11~^WZHx|!f^p|Y z>=nf^xs|90H#=O|C)r}KY0Ytnq!x4L+G5xV{Tkg)t^3+%*BWjDsi&YSwr+@Svj(p1 z`lCR_^2mQ9$jg^s=@2uXyXAyPKl&nnBd(wNaM>sO68(4wj7Ypuz-EgG=e<2qTJG^aF+d>I*)i zNIF*f$rmndxpMdMbhq^~R%9>dqu@8uqUw7p#Wpq|vIGy!lx7>j%CX2V>b7><Mnhg(9ULuHpxzRI+Ej+X33rKiaHb9k}6EpaOk$85VmM_+&cjVECLj;#z;}j`wl(v_3t1>23;LXB4t0}$tmt37 z^L}$y+l7kVQNjg;cIL2emUY34WAbV6N^WL9*p{Ms=fB2eUHdQk@%~W)qTM$bf$AKk zFmM#d%Us~I+}Xz-6PLEsku)y&)<{9Nn*tn%hZTLKXUv2#f}}TZp-|C4zDB^YS*5m=)vLeM_5urqosd6zaW7EBIey*>jA;$F&v&@$ z2eBLq{TcO$Gg6*~d5{a{4~B~VO9{oR1j6c8w9f@#$E6IBDwk&=<{<4yK1NFM-=vDg ze#9H0MY#9t+t;w zIfmp!wn0F<%|O_fI91}8F;qRN87HJ8{F91@#CS7QeP?ywUDEU8ccBFS@IF7p$H*jOimjDu?>yCT zu*X4jQtgt2hfJv+v;5LtSWbw%ETSTujr{cpakxJZ7w2+nIHG-!UO4`1D4>lvRrPQ2W3XvLo*s_X*B&@@}+kUi5 z0;1!%HpauA0h||zcoQ?|Xt{J>&?q1k0-d}{fIf*$PzR*I)pM2}k9iDB5{sO=F)u2A zaJ>W$@#ixs9Q|NWyx=H+b3fRcEv0%y{YHY8o(Dh!EODPh6qj}77nt};vS-YF( zyQyINZk3}%iczF}U8jFVEU;ZjE7xeyD5Jp=do7|G*6{^CPDk+MeNZL_!9Q36sr4)gk)Bb2YwmyP~vK?6kpR4TmeS%u=IWykgs`4Z`ZeD;1ql<>|g zM4xh~hzMB{yzlYr;(wSoIspy=T`g5Z5Eh!d8E!+=WxS_0Q!DU_a?l*#0fGVfMbs7* z!`bm9{naN=BWHNhtv~?rh-G^#OKRvlJAdm8DK076g@f|?(7+1M5JvnKMk<3%iOzli zMo9;xJ>_%DzU+tPh$PY7RDNVgB1?DHv4DUYDc&M-)07{uc#Hpd)%lfxGXrXzWw9{t zG{m;ZW7B93JT%#4M+TED=CzgwCUi8@^(>(nR-jR^il95}fb$!__pq5KG#{^7t2y1N zh@3l~J_&)S$HX*-k1l}K1LezKmU*uidI$GcN_s|sRv3a)7CZilQUlb@vp$GmLJ%D@ z8ler5P5o2+C*bj&Bvb`e3i}Y=IWkBSLl-#6@`=4AJHa++QRD%JWGMx?jBba;n2D&q zNl*=Cb>u1BoiIq|fH3s+%MJETpqC^pRPU2__k(R63PoJPb{M82A5-mp6Dy|Is4i@X zv`!_0dWNW1&oAP|pW*3f`M{6r)OS`$i{_U|-m$E0H2i-2fpeIl2S@L0*X)BgmA>f@ z-nwpL*k$Y4$c(E~awAgXkN@uL18Nv9OWjd;40lu2pUK1-VA8KUIP zGfy){wt{F_r#3KVczaa3tnlh&lRlp+eEzXDhiaYpqrz%wNDspzP8zcBG<9KK<4=k!i~r+r#ao6BXE^KXlZF&X!u-u-r5Csc@jFao-P%jsQ_k@4# zszvcxg8|qA(n-m*LWhCU-{;j`HqZd~2P!fv4&@S^1T=Ifh#A8i!&En$y?abfj)6K& ziF8n^+_Lk6n>C)gEt*ZFjiEr-ZmPpjd!i^r zYEQ`%tA@(p80Z5iNv|Bps({zpSWOcfW>RqC4!>_Jh`8ZI>ic5H}Q| z6~VR~_#%oj5ZlM;fG>|?tS)$pCiM~Cve($T)&@yU3;)z3JsH5Y~H4W7&2M&K8$TkYinLA_f7T;J|6E=F4gN$1gpZ2gFEDS6_V?}=0_8q z46v=Df#F|Rv{H(8X7cy?@m9_Og8zmaCCltq0vgA9ahiyf+dYOZ_LYRkR#TIrzz{)P zg$)j8NbbKO%d=^l53Ggf2_-!oqfqI75Z1TzH_vdU^e0!c;U#0PNpA@6j4!q@4YlW_l4NJGcB`r8_b8jxXR!ff9zSzyku1(m${{VnhVI}0K@L3UIPOQ@5O zi)UmnQHk&36eO2A9j=~?pbgsRX)jwlef%!>%{I(ER(NefY;f4(snc=EsyxS!tTlLB zcL#zqT`5yFj8|C%*!VGC%bfqBdovFma;ny?0}E6>1$KQ2uzX(ilg!oOFc6ypunApv z3;d^Sok{aG%R0Xt{@f)sxu}lQM)r4n5gby+-9iPG|0`T^<@mSZEt)M`a;madrOj+P z^3#z{ks$5CsFS`E4Cfl~GC$MnjVwOzpHNKF>a~zUrf9|J z?d8zD&-Z^AQ8JMLSPU7vJL97?DbzUkFwSQos8y_puFaV-n*j)ZOx;qW4CSfu;tGnv zgvPj>lzE5jxdvm!u{+E`Ln%G6Mx zgz*SXWvw85-D%$b@OyoSJ40?6x2qzEe)8vei!TTDhWR=irGPk}2!$y+Bh`Lv3P^vK zvV=`BsIbFmC-q3p$XZ)VY~>WZMc;M0>IocL=ltKozmb^g@Q zWHLRZ9?^Z}$G%8OjibB8P)M5RbaUjHl<6@$H!i}5TWz=+$4wUCcfg%9$Mp2vnkHo- zI_aCbgfKh8E}!4zN|8-L1`si{CJBkF(z>t#kk-${U=nvf@dK>4GK$jPGTEa;p$oFw zk36gb#@BmAwt71H5AnC!b1i=g+bDEizy2ddUtN}z@3RknC%KAtc7;rl2;@kr|3V$M zBalWxC~EPKExjzxxcGWbT{OY+M9d|>v(ktv!Ao@ZzDevSr~E#xI(v@OAAP;rmEe6C zF|Z%ZF7elFhpjp8qJz2=EdjI=lw8#J_U7wW#jMGoXDde-tHh;7nAd=B6E_%T#?Thw zZM0{YD$Qzd6y}N=(e^r0krULSyid{Y_G%c3-AaFwk@7p=Een&#&Apfaw_lW;7=xbj1bSdeL$*KL0uIp(@wN;Ir#xrO875Hh`_}b1U#R(ROJ2)vhOO@NNiDHwYRX7txzQv}KUSL)o zkQkAW^__%vmkLSY%x1_P6a!L31>jHmM&Q!_G5jO`L6PXRdz!Vz9YFNXkd)aD%^xu$ z4$V9R+K|9KQC9Wv;y<$`v00GpL26p)-VQL{1+yqXHUKpA;x+vvdQ%ihPY*g!yhv)^ z&o|wULIK5dy(N>J93t1u&m1iT7u32PDs7IOxG+f2o{g+8|L?;7eIp;5jX0y=>0TOb z<}syN|4I<71bXlP$>C06Dy5JEv=0F<{lH`*Q$<{+Q(U%mvINVxWCv}mwV52(>)aHi z>$4a%LB3)ZLt)fb;jIY7p6L$A}h|W3t&ZRv{Y4 z)oy^k|DM2jf9=rlolJQlC~hbrqEnpO$@+eXmfi=056N{=jTXkd>9$~-+^ut`wfCri z>*$O6rcH+m0*3Rka$U^q3^yX!Boon)#Kez|Dxy-r_hNwp+JMU)joR~x7@%Ws%8$}a zuKz~^>l)of;%EhOd_9f;WM9XnOn*#+Cb7R7m{w&Uk5SQpzAjhQIY`d#b!s5?#>OAG zR0B&6j_S|reZR#6q9^<@5NK9qR1jLRrzs9FUp3>bkUtFl1(V-Y1m^G2iA@>Nt}Ecb z9^12Ly*F$!?VT*Rmgvv!hn^`LXB|yu-hcfG5GoUDkJMguV9G4*VEjDRG#v-e?3971 z1qJSo=s6Kw9*m%4mVa#vL=?7hKFTH&BM+bMB6mInY@Q%^zXE-{Utb`E0pXf@o96GU z8&1r{UzIxBYbc(E^yH|5?4C?EO3L=VQ`X%AF>bUI(&v#=!_Gf_M3x9fh-#gYGkTO? zRZjZ2s#!7n;q^mk96GY+wTYUId6R7Q*hb`wXA7NbV*1sNBaImK;~ZkKuWvbBOrPj8 z=@T1WbD`GitV=s3g0D-&8?gV52y$rNc(;ZqlGDU@VWVI+RT zhoWaPBi{@-G`BRFH) z{Z*jRD_e?@3}URh~43o7bpjUSF_Ex=w@e=#|pzi`4Zcs!0sej^=io+Bft1&^=%a`4azr zk&igk!r-~~~CoYO%gSxM?Zau|j_+m#74sdWYRO}EY!YJ$JdxkmpCF($w@+wBx%!xX#%cpkzoSFrz+79n77q;O=| zP$}w=w_>V`k8xt(Lfd#KgD^?zb+Xw*qQsyoKawa3-OP*`$1`y=>>=5u&c@}j*L4QBd`%L zKT5^F)15}N*cftj*JOS!=8|LC3*jv-!t>y~TCb#5#{7rF`^t>}v|XLRjY@R1-$az) zJ_f82Cm_U^5Ok&IDZr^MH%;V)UVH_Cep8C z{nnlaEWgIwxNyd;rRR=ukyK}SV}iuXvTdFWh^$s{FIn{2@ULrTZcZ6mW~XrYQA^%9nI(B=vQR|grD%klA^N6`}8BI<6m7gQ$ZwjWC9R-!|1*08r z^!bwA82RnI9lpz!Xe{|gPW!Q6JNSXi=NyMwiyy)(R-4>L((raP91k68m*P3Pb{k77 z`P)%rU2ik;0_*@O^hRA3TL?&Rs#f<&D8R-;SXv23esY$}R8+OQ943zvLK<0OV*1Gt zt~r((J&#%ac_Znx&2=f=2UucNLi*rqH#^o_K*9T~ero6db&yo_PiLLe^v8tIG;}$X z_X|PGU*E-a;9D6An8-a8I%~TzN@m3eI&B9)C$woKJ=P-gD9PR(A zTkF9=Kx|xcsh-!niTV6^`N08kdE73Q_|NB4*E)o$U@N@6VOk2{7NX(HI+9qkzPjAe ze>fS&gs77$Z*Tsh5JS?!`c$TVD?%l|kJ(V`T7i{-^V1(vrrA0AO(OpyxVwWVgj>Nt zl)KmXcrhuWc(FazYz`ENvPn(ZNJzy~U%+C*Jov4l0lfPzV2 ztHi7(C-26{9$sJ$c0Pso)8qt^N? zyoA0OQ!k5c5+xjj{*s2H0z#(~!Oc_O*Ry4IkWrSxrUyU;bSDiw>QUp7?u!EA`rT-Z z2dwWL@Hl3MR?%cmZ#|Qs7(Da~ysjFwfL9$rH}v{YkCLSNCRe3I;DQb%k9$ZX+7Co* zOnA-9qJ1V9VD5ur7rHebNg?tha>G!K)h`AOJd~0l%HEWIo{KQ_R@UHA?zC3h8f0_} zUX~c+Bcw{I-il5M$#QTYD1r<`x6C*(=-nfd0>5Ra;`@q>`Nh<0|7n+Vk2zrS8=Lms z-~ICp)&r2C(URjim!(xjnGX|F%;aDY&Xm(oTW0$lPWOZjQMxR8gAmf1mcpZR@=-Sh z+fsO|o|YO3XSSgSa-D-_tB9KJIvXrm8QWRoelBW$0OwvA$6qnUVAMI%aSuXBjMbvE zHj@v?!~bF9$f_3=wG1%}gyv*S@*=5SZ(cjJj-5Cn0_LHp`(E}P3ZOFcoiB`FDo8TF ztJ*IP$4{P4lc+^slQ;mZkQil*nDZ&I=%!)vKB|eF?$APCPpOQw8E$IC*p;YlnNYd# zs))qxwUM^|-fRdL8Qc{NNpMpo>2W-Ti$FBsOCAAj3&ngxzGvCM3>9V?FPP|<{n0J> zZ+`4se@TT=&xHS8De}r{il1o^fnLr_TCbLxD@YvW-)j+i=`Bc>kOFU!g?oyNIH$?0 zh+w;cu6)@-)qqL|F<5cPY~-6C=q!>3#aPQG2-a(VLYHqe&$|*Z_1GMno`a*s@DI}V z;UmpS*Mp#_e6{4xiYXMsLVv`!1dX79rpeU|lY4;1RoQ(D{211T(u%_F@meA@0<>~l2KdQo;#u*ovlA-zk{0)*cB3?J>*`0 z?x(dR*!U+<}W2=_NEN#U!8=-W|b zA>)9bi#(_(xDn{N5_tO+aK`rv9^8apec9)?TG;M{MQ)dk7|R$7+zTACFwbZpZI5k0qzCnToY;_~Synsh{kP z%l2p6Wky;blm;K!y_w1p$C)W+eAahPYkM^8djQm0v;Z}_jS{t=`|01ukMIAGJfrpm z@IpX0I+V=^`?lJ*a?D+dOFA239?;POsi`>7I-okV3Tg>08V&!5ZY?taJO?8ClI)E4 z9EUVQOGU!N#atgX`T()>rYFQot#uj^FEYOv1&e zp)*a{r?JR82-HY}UweR#*iI{~O~#5aj+Rw45;z?D*Bt~6h|7laAkfViN925+MboXV zThY+7lVb+X&E|_@RX};OSlKUFXzr^-Wjuqk) zr&1I$?U~?oO$!BE5hpGD!l{PTx;m0&{isg;=bn+ZsQt{FPxxp}K(8-6d?ie)IEDDe zclx+|wgLUks#6tgE$RZu?&9ST?ykYc*Zt`ZG>FBqJMiS3+jIS%B{J+H50lX15m><{ zeirk0beeq)Jgy0yfXy|#MP>x%W%i3Gs=d6!Pq`>xx<3PHY-`nF zh@VR5lG&F-f-c64-&U6bUFUtGJ^vi^w2x+$W002m>~6Y$lnN{xHs5dnZreJ^9XTEP z$tKndj?u4R27Lbq+m)FRXQs+a%<@%<;}9esC(Bzyxi@xbo6SPamE+HW!AY@CUPouk)1co%N(0N>`;DA} zISl>5A!yFJ`H_!uy2SFW8a+b6!{ib-bq0JQL=nl6S|&_j%3Gb-JT�oZd)%Wx2{q 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�rBT=LH{XmKxaXfy4W+5eDK zUc3G)!e{awYg$nZomc?9x%OdrbV=^zI0<+89r5y|V_34N2=}gf0pohTD{#%6*wJtI zVcLM<=vk=_8fNpu7fV-}XR?32Yo1)&r3HL=)FfbbVP5ve7I*&gA%xEM#mHIy2;m-3 z1IFb>*AeN^D(EHdCFzU3$5!L$@o0S7IS0Q*9>vTWd7)^WvxZi1YwBa|z zg<(+!Uc4@t0(8E#QkyU96oKFhkL|kL9d!w%)W)@+hXYq{3e$Q zWxSH1X|-bbZuc(SymJ;ywv@)OUQIE$~>*TcHmIk0U3_adBEgnR9A54MRi zXU{#zICn4m%Q^cDDgT0)@;7yaK^(?+u7Clx({SJ3%-laQ6FOA(LIeNg__(wemQIi4 zH<5d^>%4=ROY8DGU@^4noEnon>nCpG@Xk=I9MAoI#`|->x03d|lk9O7UJ#$p{ZRN6 zXK*nT`5zU$tT#eS+?vTjX74K5$FFbo)ZDAu>v~v z;WvP`zQzVopa1&vc5Ikj!R#|6-${jk*F(^C-zay5!XX{F%Pe?xQ2bY3-e@Ing1L}N-yUqQa zb}nmczMJS?SJ$|&3LR0iQ?mFalWBi=&$z!0QH#UdLgXO(xr)}5>cjO0-e}h?2TuNM`&>JB8~@$n^4Yz( z&HaAp1iU!8HtnzWKTe$Ke?$(6=l7lG=9|!WM^|Fi<{p^3s00R%D8RiL3J`y0ELhrK z;9C9}N*<@4@!B+R@>u&g)Bia5P5;aELYM^NB&~(vT+3X%%HqPWKbrk-y7luhdt&q& zQ~)8NrIXwPM`&;WD&Ttrt@9W<26$lnVF+;klpb9_dGPQibn2bM>`5VWxpx1JJlMH= zj>(}qpxK=;$?=CHgU61)1cu`Oe8&uQ@1K+Nt=vz36#L;ZoC6$P6w~H5F*1|14$W4O zl)J>yB^ZA>xSweJDezSO%VUFSmz|IME|f9*4vZLE!pxoaqph~gkI~6EA~9~!xrdEE zwHzKg{ucaFzr@X1*oJfGKHUF-ywe7J^n|xDb?(OyyZ1}K|7`Gz&M~RV{GsD-k%2g- zRT`3f|FHOtGRFPE`gHdEA)GmTz}R5lxOs_>ZTrCs!7K7MoeaarzJFK>3=LWqPyhbK zrh{#(ryV01g8zx%zuYu1pVA@kB-81y(!1)BdoE7CcbWQaymHhRD<|nP9dmI_86z>B;4-gKSfvqQ(y}Y z!6i5ax6D(>v_y7#&pd^hp=LxP=g36Mr6lj?)1Pz7S^BhdJnwBj`|^^Km2J4Z_nWx~ zSNIaIW9XUO>aqkku3X@Lb+@GaocK6N^OC?}XkhSx7^Yvy2deU+``~manrjL zjr($b$bG(xo3@5Ju~lIR9Hx)vz2v=_GBm zLql0!3r?$OwywpUJ$C@xw)I9h-#^0}XX9MJLBoT48XlT@1H$krU~MH zzj7AATmv_CNinqVkpatAg-a6iB6E`Km9L!t&a{8*e*5$uN2~GXwy{G=($;LTf&YNy$4;9SXDE?tipG#WF HBYFQ1ZdXqg literal 370070 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 From 6746fb294c039058ee9c2f3129fa3a42f2ab8555 Mon Sep 17 00:00:00 2001 From: thaisym1912 <33540170+thaisym1912@users.noreply.github.com> Date: Tue, 7 Aug 2018 16:49:01 +0700 Subject: [PATCH 10/20] AVT-1024 Add test "Pop-up alert play depends on setting" (#454) --- package.json | 5 +- tests/spectron/saveLayout.spectron.js | 4 +- tests/spectron/spectronConstants.js | 11 +- tests/spectron/spectronInterfaces.js | 38 +++- tests/spectron/spectronSetup.js | 4 +- tests/spectron/spectronUtils.js | 25 ++- tests/spectron/spectronWebActions.js | 144 +++++++++++- tests/spectron/spectronWebDriver.js | 224 +++++++++++++++++++ tests/spectron/spectronWindowsActions.js | 192 +++++++++------- tests/spectron/toastNotification.spectron.js | 77 +++++++ 10 files changed, 624 insertions(+), 100 deletions(-) create mode 100644 tests/spectron/spectronWebDriver.js create mode 100644 tests/spectron/toastNotification.spectron.js diff --git a/package.json b/package.json index 8d3beb22..e8f142f5 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "devDependencies": { "bluebird": "3.5.1", "browserify": "16.2.2", + "chromedriver": "2.40.0", "cross-env": "5.2.0", "electron": "2.0.6", "electron-builder": "20.16.4", @@ -105,7 +106,9 @@ "jest-html-reporter": "2.4.1", "ncp": "2.0.0", "robotjs": "0.5.1", - "spectron": "3.8.0" + "selenium-webdriver": "3.6.0", + "spectron": "3.8.0", + "wdio-selenium-standalone-service": "0.0.10" }, "dependencies": { "@paulcbetts/system-idle-time": "1.0.4", diff --git a/tests/spectron/saveLayout.spectron.js b/tests/spectron/saveLayout.spectron.js index a12c643e..cd35fc81 100644 --- a/tests/spectron/saveLayout.spectron.js +++ b/tests/spectron/saveLayout.spectron.js @@ -48,7 +48,7 @@ let webActions; // Size and position of previos session keep after resizing and dragging await windowActions.setPosition(defaultPosition[0], 20); await windowActions.setSize(defaultSize[0] - 100, defaultSize[0] - 100); - await Utils.sleep(1000); // Sleep 1s after resizing + await Utils.sleep(1); // Sleep 1s after resizing var previousPosition = await windowActions.getCurrentPosition(); var previousSize = await windowActions.getCurrentSize(); await app.stop(); @@ -60,7 +60,7 @@ let webActions; // Size and position of previous session keep after maximizing await webActions.maximizeWindows(); - await Utils.sleep(1000); // Sleep 1s after resizing + await Utils.sleep(1); // Sleep 1s after resizing previousSize = await windowActions.getCurrentSize(); await app.stop(); app = await new Application({}).startApplication({defaultSize: false, defaultPosition: false}); diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 80f7df9a..199c7475 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -7,7 +7,6 @@ module.exports = { SEARCH_LIBRARY_PATH_MAC: "node_modules/electron/dist/Electron.app/Contents/library", SEARCH_LIBRARY_PATH_WIN: "node_modules/electron/dist/library", - TESTED_HOST: "https://cip4-qa.symphony.com/", MENU: { "root": { @@ -20,5 +19,13 @@ module.exports = { } }, - LOG_FILENAME_PREFIX: "logs_symphony_" + LOG_FILENAME_PREFIX: "logs_symphony_", + USER_A: process.env.USER_A, + USER_B: process.env.USER_B, + USER_C: process.env.USER_C, + SIGN_IN_PASSWORD: process.env.PASSWORD, + TESTED_HOST: process.env.TESTED_HOST, + TYPE_ROOM: {private:"PRIVATE",public:"PUBLIC"}, + TIMEOUT_PAGE_LOAD: 120000, + TIMEOUT_WAIT_ELEMENT: 10000 }; diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js index 653bd0cb..8be1e4aa 100644 --- a/tests/spectron/spectronInterfaces.js +++ b/tests/spectron/spectronInterfaces.js @@ -5,6 +5,42 @@ module.exports= { MINIMIZE_BTN: "#title-bar-minimize-button", CLOSE_BUTTON: "button#title-bar-close-button", MAIN_MENU_ITEM: "#hamburger-menu-button", + SYM_LOGO: "#logo", - SYM_LOGO: "#logo" + //Sign In + SIGN_IN_BUTTON: "//button[@name='signin-submit']", + SIGN_IN_EMAIL: "//input[@name='signin-email']", + SIGN_IN_PASSWORD: "//input[@name='signin-password']", + NAV_PROFILE: "//div[@id='nav-profile']", + PLUS_BTN: "//div[@class='nav-profile__plus-btn-icon']", + IM_TAB: "//div[contains(@class,'modal-box modal-box--nfs')]//li[contains(text(),'Direct Chat')]", + CHATROOM_TAB: "//div[contains(@class, 'modal-box modal-box--nfs')]//li[contains(text(),'Chat Room')]", + CREATE_IM: "//form[@class='create-im']", + CREATE_BUTTON: "//button[text()='Create']", + ADD_PARTICIPANT_TEXT: "//div[@id='react-modal']//input[contains(@class,'react-autosuggest__input')]", + USERS_SUGGESTION_LIST: "//li[@id='react-autowhatever-1-section-0-item-0']", + CHATROOM_NAME_TEXT: "//form[@class='create-chatroom']//input[@name='name']", + CHATROOM_DESCR_TEXT: "//form[@class='create-chatroom']//input[@name='description']", + PRIVATE_ROOM_RADIO_BTN: "//form[@class='create-chatroom']//input[@value='PRIVATE']", + PUBLIC_ROOM_RADIO_BTN: "//form[@class='create-chatroom']//input[@value='PUBLIC']", + CREATE_IM_DONE_BTN: "//button[contains(@class,tempo-btn--good) and text()='Create']", + START_CHAT: "//*[contains(@class, 'sym-menu-tooltip__option')]/*[text()='Start a Chat']", + LEFT_NAV_SINGLE_ITEM: "//div[contains(@class, 'navigation-item-title')][.//span[@class='navigation-item-name' and normalize-space()='$$']]", + CHAT_INPUT_TYPING: "//div[contains(@class,'public-DraftEditor-content')]", + SETTTING_BUTTON: "//div[@class='toolbar-settings-text-container']", + PERSIS_NOTIFICATION_INPUT_ROOM: "//div[@class='alerts-settings__notification-category']//h5[text()='Rooms:']/..//input[@class='persistent-notification']", + PERSIS_NOTIFICATION_INPUT_IM: "//div[@class='alerts-settings__notification-category']//h5[text()='IMs:']/..//input[@class='persistent-notification']", + PERSIS_NOTIFICATION_INPUT_SIGNAL: "//div[@class='alerts-settings__notification-category']//h5[text()='Signals:']/..//input[@class='persistent-notification']", + ALERT_TAB: "//*[contains(@class,'tempo-tabs__tab tabs-tab') and @data-tab='alerts']", + ALERT_OPTION: "//span[@class='sym-menu-tooltip__option-label' and contains(.,'Alerts')]", + NAV_ALIAS: "//div[@class='nav-profile__alias']", + SIGNAL_HEADER : "//span[@class='navigation-category-name' and contains(.,'Signals')]", + WARNING_CLOSE_ICON : "//div[@id='sysMsg']//span[@class='close-icon']", + SCROLL_TAB_ACTIVE : "//div[@class='active-tab-container']", + + //Alert Settings + MUTE_POPUP_ALERTS_CKB: ".field.field-notifications-on input", + + //Toast Message + TOAST_MESSAGE_CONTENT: "#message", }; diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index 2f2e2ae0..f670681c 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -29,11 +29,11 @@ class App { this.app = new Application(this.options); } - + async startApplication(configurations) { try { this.app = await this.app.start(); - await this.app.client.waitForVisible(ui.SYM_LOGO, require('./spectronSetup').getTimeOut()); + await this.app.client.waitForVisible(ui.SYM_LOGO, constants.TIMEOUT_PAGE_LOAD); await this.app.browserWindow.minimize(); await this.app.browserWindow.restore(); if (configurations) { diff --git a/tests/spectron/spectronUtils.js b/tests/spectron/spectronUtils.js index e993ce87..0a4f7e9c 100644 --- a/tests/spectron/spectronUtils.js +++ b/tests/spectron/spectronUtils.js @@ -11,19 +11,34 @@ class Utils { await childProcess.exec('taskkill /f /t /im ' + processName); } - static async sleep(ms) { + static async sleep(second) { return new Promise(resolve => { - setTimeout(resolve, ms) + setTimeout(resolve, this.toMs(second)); }) } - static getFolderPath(folderName){ + static getFolderPath(folderName) { return path.join(require('os').homedir(), folderName); } - static getFiles(path){ + static getFiles(path) { return fs.readdirSync(path); } + + static toMs(second) { + return second * 1000; + } + + static async randomString() { + var chars = await "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; + var string_length = await 8; + var randomstring = await ''; + for (var i = 0; i < string_length; i++) { + var rnum = await Math.floor(Math.random() * chars.length); + randomstring += await chars.substring(rnum, rnum + 1); + } + return randomstring; + } } -module.exports = Utils; \ No newline at end of file +module.exports = Utils; diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index ce52390d..60211cdf 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -1,16 +1,18 @@ const ui = require('./spectronInterfaces.js'); +const constants = require('./spectronConstants.js'); +const Utils = require('./spectronUtils'); class WebActions { constructor(app) { this.app = app; } - async clickMaximizeButton() { - await this.app.client.waitForVisible(ui.MAXIMIZE_BTN, 10000).click(ui.MAXIMIZE_BTN); + async maximizeButtonByClick() { + await this.app.client.waitForVisible(ui.MAXIMIZE_BTN, constants.TIMEOUT_WAIT_ELEMENT).click(ui.MAXIMIZE_BTN); } async maximizeWindows() { - await this.clickMaximizeButton(); + await this.maximizeButtonByClick(); await this.app.browserWindow.isMaximized().then(function (maximized) { expect(maximized).toBeTruthy(); }) @@ -27,17 +29,141 @@ class WebActions { }) } - async openApplicationMenuByClick() { - await this.app.client.click(ui.MAIN_MENU_ITEM); - } - - async closeWindowByClick() { + async closeWindowByClick() { await this.app.client.click(ui.CLOSE_BUTTON); } - async openApplicationMenuByClick() { + async openApplicationMenuByClick() { await this.app.client.click(ui.MAIN_MENU_ITEM); } + + async getElementByXPath(xpath) { + var elem = this.app.client.element(xpath); + if (elem.isVisible()) { + return elem; + } + return null; + } + async inputText(el, data) { + var obj = await this.getElementByXPath(el); + if (obj != null) + await this.app.client.setValue(el, data); + } + async clickAndWaitElementVisible(xpath, elementToVisible, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { + await this.app.client.click(xpath).then(async () => { + await this.app.client.waitForVisible(elementToVisible, timeOut); + + }); + } + + async login(username) { + await this.inputText(ui.SIGN_IN_EMAIL, username); + await this.inputText(ui.SIGN_IN_PASSWORD, constants.SIGN_IN_PASSWORD); + await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON, ui.PLUS_BTN, constants.TIMEOUT_PAGE_LOAD); + } + async scrollAndClick(selector, findElement) { + var i = 0; + var y = 0; + await this.app.client.scroll(selector, 0, y); + var size = 0; + while (i < 10) { + size = this.app.client.getElementSize(findElement); + if (findElement != null && size == 0) { + y += 50; + await this.app.client.scroll(selector, 0, y); + } + else { + await this.app.client.click(findElement); + return; + } + i++; + } + return; + } + + async promiseTimeout(ms, promiseFunc) { + + return new Promise(function (resolve, reject) { + + // create a timeout to reject promise if not resolved + var timer = setTimeout(function () { + reject(new Error("promise timeout")); + }, ms); + + promiseFunc + .then(function (res) { + clearTimeout(timer); + resolve(res); + }) + .catch(function (err) { + clearTimeout(timer); + reject(err); + }); + }); + }; + + async clickIfElementVisible(selector, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { + await this.app.client.waitForVisible(selector, timeOut) + .click(selector) + } + + async openAlertsSettings() { + await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION); + await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB); + } + + async checkBox(selector, value) { + var checked = await this.app.client.isSelected(selector); + while (checked != value) { + await this.clickIfElementVisible(selector); + checked = await this.app.client.isSelected(selector); + } + } + + async verifyToastNotificationShow(message) { + let show = false; + for (let i = 0; i < 10; i++) { + var winCount = await this.app.client.getWindowCount(); + if (winCount > 1) { + for (let j = 1; j < winCount; j++) { + await this.app.client.windowByIndex(j); + if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) === message) { + show = true; + } + } + if (show){ + break; + } + } + await Utils.sleep(1); + } + await expect(show).toBeTruthy(); + await this.app.client.windowByIndex(0); + } + + async verifyNoToastNotificationShow(message) { + let noShow; + for (let i = 0; i < 10; i++) { + var winCount = await this.app.client.getWindowCount(); + if (winCount > 1) { + for (let j = 1; j < winCount; j++) { + await this.app.client.windowByIndex(j); + if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) !== message) { + noShow = true; + } + else { + noShow = false; + } + } + if (noShow === false){ + break; + } + } + await Utils.sleep(1); + } + await expect(noShow).toBeTruthy(); + await this.app.client.windowByIndex(0); + } } module.exports = WebActions; diff --git a/tests/spectron/spectronWebDriver.js b/tests/spectron/spectronWebDriver.js new file mode 100644 index 00000000..f7a01aef --- /dev/null +++ b/tests/spectron/spectronWebDriver.js @@ -0,0 +1,224 @@ +const { Builder, By, Key, until } = require('selenium-webdriver') +require('selenium-webdriver/chrome'); +require('chromedriver'); +var assert = require('assert'); +const ui = require('./spectronInterfaces.js'); +const specconst = require('./spectronConstants.js'); + +const waitUntilTime = 20000; + +class WebDriver { + constructor(options) { + this.options = options; + this.d = new Builder().forBrowser(options.browser).build(); + this.initDriver(); + } + + async waitElelmentIsNotVisible(xpath) { + let result = false; + try { + const el = await this.driver.wait( + until.elementLocated(By.xpath(xpath)), + waitUntilTime + ) + await this.driver.wait(until.elementIsNotVisible(el), 10000); + if (this.driver.findElements(By.xpath(xpath)).length > 0) { + result = true; + } + else { + result = false; + } + return await assert.equal(result, false); + } + catch (err) { + await assert.equal(result, false); + } + } + + async waitElementVisibleAndGet(xpath) { + const el = await this.driver.wait( + until.elementLocated(By.xpath(xpath)), + waitUntilTime + ) + return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + } + + async getElementById(id) { + const el = await this.driver.wait(until.elementLocated(By.id(id)), waitUntilTime) + return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + } + + async getElementByXPath(xpath) { + const el = await this.driver.wait( + until.elementLocated(By.xpath(xpath)), + waitUntilTime + ) + return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + } + + async inputText(el, data) { + var obj = await this.getElementByXPath(el); + await obj.sendKeys(data); + } + + async sendEnter(el) { + var obj = await this.getElementByXPath(el); + await obj.sendKeys(Key.ENTER); + } + + async sendMessage(message) { + await this.inputText(ui.CHAT_INPUT_TYPING, message); + await this.sendEnter(ui.CHAT_INPUT_TYPING, message); + } + + async sendMessages(messages) { + for (var i = 0; i < messages.length; i++) { + await this.sendMessage(messages[i]); + await this.sleep(1); + } + } + + async login(username) { + await this.inputText(ui.SIGN_IN_EMAIL, username); + await this.inputText(ui.SIGN_IN_PASSWORD, specconst.SIGN_IN_PASSWORD); + var singin = await this.getElementByXPath(ui.SIGN_IN_BUTTON); + await singin.click(); + await this.waitElelmentIsVisible(ui.SETTTING_BUTTON,specconst.TIMEOUT_PAGE_LOAD); + } + + async clickShowConversationCreationModal() { + var plusButton = await this.getElementByXPath(ui.PLUS_BTN); + await plusButton.click(); + } + + async selectIMTab() { + var imTab = await this.getElementByXPath(ui.IM_TAB); + await imTab.click(); + } + + async selectRoomTab() { + var roomTab = await this.getElementByXPath(ui.CHATROOM_TAB); + await roomTab.click(); + } + + async addParticipant(username) { + await this.inputText(ui.ADD_PARTICIPANT_TEXT, username); + await this.sleep(5); + var el = await this.waitElementVisibleAndGet(ui.USERS_SUGGESTION_LIST); + await el.click(); + } + + async clickDoneButton() { + var el = await this.getElementByXPath(ui.CREATE_IM_DONE_BTN); + await el.click(); + } + + async clickStartChat() { + var el = await this.getElementByXPath(ui.START_CHAT); + await el.click(); + } + + async createIM(username) { + await this.clickShowConversationCreationModal(); + await this.clickStartChat(); + await this.selectIMTab(); + await this.addParticipant(username); + await this.clickDoneButton(); + } + + async createMIM(usernames) { + await this.clickShowConversationCreationModal(); + await this.clickStartChat(); + await this.selectIMTab(); + for (var i = 0; i < usernames.length; i++) { + await this.addParticipant(usernames[i]); + } + await this.clickDoneButton(); + } + + async selectPublicRadioButton() { + var el = await this.waitElementVisibleAndGet(ui.PUBLIC_ROOM_RADIO_BTN); + await el.click(); + } + + async selectPrivateRadioButton() { + var el = await this.waitElementVisibleAndGet(ui.PRIVATE_ROOM_RADIO_BTN); + await el.click(); + } + + async clickLeftNavItem(name) { + xpath = ui.LEFT_NAV_SINGLE_ITEM.replace("$$", name); + var el = await this.waitElementVisibleAndGet(xpath); + await el.click(); + } + + async createRoom(usernames, name, description, type) { + await this.clickShowConversationCreationModal(); + await this.clickStartChat(); + await this.selectRoomTab(); + await this.inputText(ui.CHATROOM_NAME_TEXT, name); + await this.inputText(ui.CHATROOM_DESCR_TEXT, description); + if (type === specconst.TYPE_ROOM.private) { + await this.selectPrivateRadioButton(); + } + if (type === specconst.TYPE_ROOM.public) { + await this.selectPublicRadioButton(); + } + for (var i = 0; i < usernames.length; i++) { + await this.addParticipant(usernames[i]); + } + await this.clickDoneButton(); + } + + async initDriver() { + return this.d.then(_d => { + this.driver = _d + }) + } + + async startDriver() { + await this.driver + .manage() + .window() + .setPosition(0, 0); + var size = await await this.driver + .manage() + .window().getSize(); + await this.driver.get(specconst.TESTED_HOST); + } + + async focusCurrentBrowser() { + this.driver.switchTo().window(this.driver.getAllWindowHandles()[0]); + } + + async quit() { + await d.quit(); + } + async sleep(secondSleep) { + await this.driver.sleep(secondSleep * 1000); + } + async timeOut(secondSleep) { + return secondSleep * 1000; + } + + async waitElelmentIsVisible(xpath,timeout) { + try { + const el = await this.driver.wait( + until.elementLocated(By.xpath(xpath)), + waitUntilTime + ) + await this.driver.wait(until.elementIsVisible(el), timeout); + } + catch (err) { + console.log("Error:"+err.messages); + } + } + + async quit() { + await this.driver.quit(); + } + async close() { + await this.driver.close(); + } +} +module.exports = WebDriver; \ No newline at end of file diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 2821b077..738886ea 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -3,6 +3,7 @@ const constants = require('./spectronConstants.js'); const Utils = require('./spectronUtils.js'); const fs = require('fs'); const WebActions = require('./spectronWebActions.js') +const ui = require('./spectronInterfaces.js'); class WindowsActions { constructor(app) { @@ -10,6 +11,119 @@ class WindowsActions { this.webAction = new WebActions(app); } + async verifyMinimizeWindows() { + await this.app.browserWindow.isMinimized().then(async function (minimized) { + await expect(minimized).toBeTruthy(); + }).catch((err) => { + console.log("error:" + err.name); + });; + } + + async isMinimizedWindows() { + let rminimized = -1; + + await this.app.browserWindow.isMinimized().then(async function (minimized) { + rminimized = constants.MINIMIZED; + }).catch((err) => { + rminimized = constants.QUIT; + return rminimized; + }); + + return rminimized; + } + + async pressCtrlW() { + await robot.keyToggle('w', 'down', ['control']); + await robot.keyToggle('w', 'up', ['control']); + } + async pressCtrlM() { + await robot.keyToggle('m', 'down', ['control']); + await robot.keyToggle('m', 'up', ['control']); + } + async focusWindow() { + await this.app.browserWindow.show(); + } + + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async actionForMenus(arrMenu) { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(1000); + await robot.keyTap('enter'); + for (var i = 0; i < arrMenu.length; i++) { + + for (var s = 0; s < arrMenu[i].step; s++) { + await robot.keyTap('down'); + } + if (arrMenu.length > 1 && i != arrMenu.length - 1) { + //handle right keygen + await robot.keyTap('right'); + } + } + await robot.keyTap('enter'); + }); + } + + async reload() { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 200; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick('right'); + await robot.setKeyboardDelay(2000); + await robot.keyTap('right'); + await robot.keyTap('down'); + await robot.keyTap('enter'); + }); + await this.app.client.waitForVisible(ui.PLUS_BTN, constants.TIMEOUT_PAGE_LOAD); + } + + async clickNotification() { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + bounds.height - 20; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + }); + } + timeOut(second) { + return second * 1000; + } + async getCurrentSize() { return this.app.browserWindow.getSize(); } @@ -137,27 +251,6 @@ class WindowsActions { }) } - async verifyMinimizeWindows() { - await this.app.browserWindow.isMinimized().then(async function (minimized) { - await expect(minimized).toBeTruthy(); - }).catch((err) => { - console.log(err.name); - });; - } - - async isMinimizedWindows() { - let rminimized = -1; - - await this.app.browserWindow.isMinimized().then(async function (minimized) { - rminimized = constants.MINIMIZED; - }).catch((err) => { - rminimized = constants.QUIT; - return rminimized; - }); - - return rminimized; - } - async selectMinimizeOnClose() { await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); @@ -199,63 +292,6 @@ class WindowsActions { await robot.keyTap('enter'); }); } - - async pressCtrlW() { - await robot.keyToggle('w', 'down', ['control']); - await robot.keyToggle('w', 'up', ['control']); - } - async focusWindow() { - await this.app.browserWindow.show(); - } - - async menuSearch(element, namevalue) { - if (element.name == namevalue) { - return await element; - } - else if (element.items !== undefined) { - var result; - for (var i = 0; result == null && i < element.items.length; i++) { - result = await this.menuSearch(element.items[i], namevalue); - result; - } - return await result; - } - return await null; - } - - async openMenu(arrMenu) { - var arrStep = []; - for (var i = 0; i < arrMenu.length; i++) { - var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } - await this.actionForMenus(arrStep); - return arrStep; - } - - async actionForMenus(arrMenu) { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + 35; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(200); - await robot.keyTap('enter'); - for (var i = 0; i < arrMenu.length; i++) { - for (var s = 0; s < arrMenu[i].step; s++) { - await robot.keyTap('down'); - } - if (arrMenu.length > 1 && i != arrMenu.length - 1) { - //handle right keygen - await robot.keyTap('right'); - } - } - await robot.keyTap('enter'); - }); - } } module.exports = WindowsActions; diff --git a/tests/spectron/toastNotification.spectron.js b/tests/spectron/toastNotification.spectron.js new file mode 100644 index 00000000..15f5f092 --- /dev/null +++ b/tests/spectron/toastNotification.spectron.js @@ -0,0 +1,77 @@ +const Application = require('./spectronSetup'); +const WebActions = require('./spectronWebActions'); +const WindowsActions = require('./spectronWindowsActions'); +const WebDriver = require('./spectronWebDriver'); +const { isMac } = require('../../js/utils/misc.js'); +const constants = require('./spectronConstants.js'); +const ui = require('./spectronInterfaces.js'); +const Utils = require('./spectronUtils'); + +let app, webDriver, webActions, windowsActions; + +describe('Tests for Toast Notification ', () => { + + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = constants.TIMEOUT_PAGE_LOAD; + + beforeAll(async (done) => { + try { + webDriver = await new WebDriver({ browser: 'chrome' }); + app = await new Application({}).startApplication({ testedHost: constants.TESTED_HOST, alwaysOnTop: true }); + webActions = await new WebActions(app); + windowsActions = await new WindowsActions(app); + done(); + } catch (err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + await webDriver.quit(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + + /** + * Verify Pop-up alert play depends on setting + * TC-ID: 2916217 + * Cover scenarios in AVT-1024 + */ + it('Pop-up alert play depends on setting', async (done) => { + try { + if (isMac) { + done(); + } else { + let message1 = await Utils.randomString(); + let message2 = await Utils.randomString(); + + //"Mute pop-up alerts on my desktop"=OFF + await webDriver.startDriver(); + await webActions.login(constants.USER_A); + await windowsActions.reload(); //workaround to show topbar menu + await webDriver.login(constants.USER_B); + await webActions.openAlertsSettings(); + await webActions.checkBox(ui.MUTE_POPUP_ALERTS_CKB, false); + await webDriver.createIM(constants.USER_A); + await webDriver.sendMessages([message1]); + await webActions.verifyToastNotificationShow(message1); + await Utils.sleep(5); //waitting for toast message disappears + + //"Mute pop-up alerts on my desktop"=ON + await webActions.checkBox(ui.MUTE_POPUP_ALERTS_CKB, true); + await webDriver.sendMessages([message2]); + await webActions.verifyNoToastNotificationShow(message2); + done(); + } + } catch (err) { + done.fail(new Error(`Fail to verify pop-up alert play depends on setting: ${err}`)); + }; + }); +}) From 3ce535ae21b5d39cddc8961fb306748cf8d8ef32 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Tue, 7 Aug 2018 18:02:02 +0530 Subject: [PATCH 11/20] ELECTRON-607 (Optimization and bug fix) (#455) - Fix setLocale args - Optimize Alt key press - Optimize title bar style menu selection --- js/menus/menuTemplate.js | 18 ++++++++++++++++-- js/preload/preloadMain.js | 17 ++++++++++++++--- js/windowMgr.js | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/js/menus/menuTemplate.js b/js/menus/menuTemplate.js index 0abea00f..030d21f6 100644 --- a/js/menus/menuTemplate.js +++ b/js/menus/menuTemplate.js @@ -402,8 +402,15 @@ function getTemplate(app) { label: i18n.getMessageFor('Native'), type: 'checkbox', checked: titleBarStyle === titleBarStyles.NATIVE, + enabled: titleBarStyle !== titleBarStyles.NATIVE, click: function (item) { - item.menu.items[1].checked = false; + const isNativeStyle = titleBarStyle === titleBarStyles.NATIVE; + item.menu.items[1].checked = isNativeStyle; + + // Disable menu item accordingly + item.menu.items[0].enabled = isNativeStyle; + item.menu.items[1].enabled = !isNativeStyle; + titleBarStyle = titleBarStyles.NATIVE; updateConfigField('isCustomTitleBar', false); titleBarActions(app); @@ -413,8 +420,15 @@ function getTemplate(app) { label: i18n.getMessageFor('Custom'), type: 'checkbox', checked: titleBarStyle === titleBarStyles.CUSTOM, + enabled: titleBarStyle !== titleBarStyles.CUSTOM, click: function (item) { - item.menu.items[0].checked = false; + const isCustomStyle = titleBarStyle === titleBarStyles.CUSTOM; + item.menu.items[0].checked = isCustomStyle; + + // Disable menu item accordingly + item.menu.items[1].enabled = isCustomStyle; + item.menu.items[0].enabled = !isCustomStyle; + titleBarStyle = titleBarStyles.CUSTOM; updateConfigField('isCustomTitleBar', true); titleBarActions(app); diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index a1f3ce32..dee590e3 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -32,6 +32,7 @@ const KeyCodes = { let Search; let SearchUtils; let isAltKey = false; +let isMenuOpen = false; try { Search = remote.require('swift-search').Search; @@ -503,7 +504,7 @@ function createAPI() { } // Handle key down events - const throttledKeyDown = throttle(1000, (event) => { + const throttledKeyDown = throttle(500, (event) => { isAltKey = event.keyCode === KeyCodes.Alt; if (event.keyCode === KeyCodes.Esc) { local.ipcRenderer.send(apiName, { @@ -514,8 +515,11 @@ function createAPI() { }); // Handle key up events - const throttledKeyUp = throttle(1000, (event) => { - if (isAltKey && event.keyCode === KeyCodes.Alt) { + const throttledKeyUp = throttle(500, (event) => { + if (isAltKey && (event.keyCode === KeyCodes.Alt || KeyCodes.Esc)) { + isMenuOpen = !isMenuOpen; + } + if (isAltKey && isMenuOpen && event.keyCode === KeyCodes.Alt) { local.ipcRenderer.send(apiName, { cmd: apiCmds.keyPress, keyCode: event.keyCode @@ -523,11 +527,18 @@ function createAPI() { } }); + const throttleMouseDown = throttle(500, () => { + if (isAltKey && isMenuOpen) { + isMenuOpen = !isMenuOpen; + } + }); + window.addEventListener('offline', updateOnlineStatus, false); window.addEventListener('online', updateOnlineStatus, false); window.addEventListener('beforeunload', sanitize, false); window.addEventListener('keyup', throttledKeyUp, true); window.addEventListener('keydown', throttledKeyDown, true); + window.addEventListener('mousedown', throttleMouseDown, { capture: true }); updateOnlineStatus(); } diff --git a/js/windowMgr.js b/js/windowMgr.js index 81abf926..c7646f8f 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -322,7 +322,7 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { addWindowKey(key, mainWindow); mainWindow.loadURL(url); - setLocale(mainWindow, lang); + setLocale(mainWindow, { language: lang }); mainWindow.on('close', function (e) { if (willQuitApp) { From d3f77685dd86f150a85b798380fdd0067baafbf1 Mon Sep 17 00:00:00 2001 From: tranducanh Date: Tue, 7 Aug 2018 19:49:42 +0700 Subject: [PATCH 12/20] AVT-1025: Verify toast notification when Persist Notification is ON (#447) --- tests/spectron/spectronConstants.js | 2 +- tests/spectron/spectronInterfaces.js | 21 +- tests/spectron/spectronWebActions.js | 56 ++- tests/spectron/spectronWebDriver.js | 75 +++- tests/spectron/spectronWindowsActions.js | 400 +++++++++++++----- .../turnONPersistentToast.spectron.js | 87 ++++ 6 files changed, 498 insertions(+), 143 deletions(-) create mode 100644 tests/spectron/turnONPersistentToast.spectron.js diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 199c7475..ea0f5cea 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -1,3 +1,4 @@ +require('dotenv').config() module.exports = { SYMPHONY_CONFIG_FILE_NAME: "/Symphony.config", @@ -7,7 +8,6 @@ module.exports = { SEARCH_LIBRARY_PATH_MAC: "node_modules/electron/dist/Electron.app/Contents/library", SEARCH_LIBRARY_PATH_WIN: "node_modules/electron/dist/library", - MENU: { "root": { name: "menu", step: 0, items: [ diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js index 8be1e4aa..b5955ade 100644 --- a/tests/spectron/spectronInterfaces.js +++ b/tests/spectron/spectronInterfaces.js @@ -1,8 +1,7 @@ module.exports= { // Title bar TITLE_BAR: "#title-bar", - MAXIMIZE_BTN: "#title-bar-maximize-button", - MINIMIZE_BTN: "#title-bar-minimize-button", + MAXIMIZE_BTN: "#title-bar-maximize-button", CLOSE_BUTTON: "button#title-bar-close-button", MAIN_MENU_ITEM: "#hamburger-menu-button", SYM_LOGO: "#logo", @@ -25,6 +24,7 @@ module.exports= { PUBLIC_ROOM_RADIO_BTN: "//form[@class='create-chatroom']//input[@value='PUBLIC']", CREATE_IM_DONE_BTN: "//button[contains(@class,tempo-btn--good) and text()='Create']", START_CHAT: "//*[contains(@class, 'sym-menu-tooltip__option')]/*[text()='Start a Chat']", + SIGNAL_OPTION: "//div[@class='sym-menu-tooltip__option']/*[text()='Create a Signal']", LEFT_NAV_SINGLE_ITEM: "//div[contains(@class, 'navigation-item-title')][.//span[@class='navigation-item-name' and normalize-space()='$$']]", CHAT_INPUT_TYPING: "//div[contains(@class,'public-DraftEditor-content')]", SETTTING_BUTTON: "//div[@class='toolbar-settings-text-container']", @@ -34,13 +34,20 @@ module.exports= { ALERT_TAB: "//*[contains(@class,'tempo-tabs__tab tabs-tab') and @data-tab='alerts']", ALERT_OPTION: "//span[@class='sym-menu-tooltip__option-label' and contains(.,'Alerts')]", NAV_ALIAS: "//div[@class='nav-profile__alias']", - SIGNAL_HEADER : "//span[@class='navigation-category-name' and contains(.,'Signals')]", - WARNING_CLOSE_ICON : "//div[@id='sysMsg']//span[@class='close-icon']", - SCROLL_TAB_ACTIVE : "//div[@class='active-tab-container']", - + SIGNAL_HEADER: "//span[@class='navigation-category-name' and contains(.,'Signals')]", + WARNING_CLOSE_ICON: "//div[@id='sysMsg']//span[@class='close-icon']", + SCROLL_TAB_ACTIVE: "//div[@class='active-tab-container']", + SIGNAL_NAME: "//input[@class='react-signal__name']", + HASHTAG_NAME: "//div[@class='react-signal__rule-name']//input", + LAST_RULE_ROW: "//div[@class='react-signal__rules'][last()]", + ENTER_KEYWORD_IN_LAST_INPUT: "//input", + HEADER_MODULE: "//header[contains(@class,'module-header gs-draggable')]", + MENTION_USER_SUGGESTION: "//span[@class='draftJs__suggestionsEntryText' and text()='$$']", + SUGGESTED_ENTITY_DROPDOWN: "//span[@class='draftJs__suggestionsEntryText']", + CONFIRM_CREATE_ROOM_BUTTON: "//div[@class='modal-box__footer-buttons']//button[text()='Yes']", //Alert Settings MUTE_POPUP_ALERTS_CKB: ".field.field-notifications-on input", - //Toast Message TOAST_MESSAGE_CONTENT: "#message", }; + diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index 60211cdf..07460b53 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -29,8 +29,13 @@ class WebActions { }) } + async minimizeWindowByClick() { + await this.app.client.click(ui.MINIMIZED_BUTTON); + } + async closeWindowByClick() { await this.app.client.click(ui.CLOSE_BUTTON); + } async openApplicationMenuByClick() { @@ -110,15 +115,7 @@ class WebActions { async openAlertsSettings() { await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION); await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB); - } - - async checkBox(selector, value) { - var checked = await this.app.client.isSelected(selector); - while (checked != value) { - await this.clickIfElementVisible(selector); - checked = await this.app.client.isSelected(selector); - } - } + } async verifyToastNotificationShow(message) { let show = false; @@ -164,6 +161,47 @@ class WebActions { await expect(noShow).toBeTruthy(); await this.app.client.windowByIndex(0); } + + async getElementByXPath(xpath) { + var elem = this.app.client.element(xpath); + if (elem.isVisible()) { + return elem; + } + return null; + } + + async inputText(el, data) { + var obj = await this.getElementByXPath(el); + if (obj != null) + await this.app.client.setValue(el, data); + } + + async clickAndWaitElementVisible(xpath,elementToVisible,timeOut=5000) + { + await this.app.client.click(xpath).then(async()=> + { + await this.app.client.waitForVisible(elementToVisible,timeOut); + }); + } + + async clickIfElementVisible(xpath, timeOut = 5000) { + await this.app.client.waitForVisible(xpath, timeOut) + .click(xpath) + } + + async login(user) { + await this.inputText(ui.SIGN_IN_EMAIL, user.username); + await this.inputText(ui.SIGN_IN_PASSWORD, user.password); + await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON,ui.SETTTING_BUTTON,60000); + } + + async persistToastIM() + { + await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION, 5000); + await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB,10000); + await this.clickAndWaitElementVisible(ui.PERSIS_NOTIFICATION_INPUT_IM,ui.PERSIS_NOTIFICATION_INPUT_IM, 5000); + + } } module.exports = WebActions; diff --git a/tests/spectron/spectronWebDriver.js b/tests/spectron/spectronWebDriver.js index f7a01aef..29f8bb12 100644 --- a/tests/spectron/spectronWebDriver.js +++ b/tests/spectron/spectronWebDriver.js @@ -21,7 +21,7 @@ class WebDriver { until.elementLocated(By.xpath(xpath)), waitUntilTime ) - await this.driver.wait(until.elementIsNotVisible(el), 10000); + await this.driver.wait(until.elementIsNotVisible(el), waitUntilTime); if (this.driver.findElements(By.xpath(xpath)).length > 0) { result = true; } @@ -35,7 +35,20 @@ class WebDriver { } } - async waitElementVisibleAndGet(xpath) { + async waitElelmentIsVisible(xpath,timeout) { + try { + const el = await this.driver.wait( + until.elementLocated(By.xpath(xpath)), + waitUntilTime + ) + await this.driver.wait(until.elementIsVisible(el), timeout); + } + catch (err) { + console.log("Error:"+err.messages); + } + } + + async waitElementVisibleAndGet(xpath) { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), waitUntilTime @@ -68,7 +81,7 @@ class WebDriver { async sendMessage(message) { await this.inputText(ui.CHAT_INPUT_TYPING, message); - await this.sendEnter(ui.CHAT_INPUT_TYPING, message); + await this.sendEnter(ui.CHAT_INPUT_TYPING); } async sendMessages(messages) { @@ -86,6 +99,23 @@ class WebDriver { await this.waitElelmentIsVisible(ui.SETTTING_BUTTON,specconst.TIMEOUT_PAGE_LOAD); } + async mentionUserOnChat(user) + { + await this.inputText(ui.CHAT_INPUT_TYPING, "@"+user.name); + var suggestion = ui.MENTION_USER_SUGGESTION.replace("$$",user.name); + var el = await this.getElementByXPath(suggestion); + await el.click(); + await this.sendEnter(ui.CHAT_INPUT_TYPING); + } + + async waitSuggestionShowOnlyOneItem(xpath) + { + if (this.driver.findElements(By.xpath(xpath)).length==1) { + return result = true; + } + return false; + } + async clickShowConversationCreationModal() { var plusButton = await this.getElementByXPath(ui.PLUS_BTN); await plusButton.click(); @@ -113,6 +143,18 @@ class WebDriver { await el.click(); } + async clickDoneButton() { + var el = await this.getElementByXPath(ui.CREATE_IM_DONE_BTN); + await el.click(); + await this.waitElelmentIsNotVisible(ui.CREATE_IM_DONE_BTN); + } + + async clickConfirmCreateRoom() { + var el = await this.getElementByXPath(ui.CONFIRM_CREATE_ROOM_BUTTON); + await el.click(); + await this.waitElelmentIsNotVisible(ui.CONFIRM_CREATE_ROOM_BUTTON); + } + async clickStartChat() { var el = await this.getElementByXPath(ui.START_CHAT); await el.click(); @@ -136,6 +178,11 @@ class WebDriver { await this.clickDoneButton(); } + async clickCreateSignal() { + var el = await this.getElementByXPath(ui.SIGNAL_OPTION); + await el.click(); + } + async selectPublicRadioButton() { var el = await this.waitElementVisibleAndGet(ui.PUBLIC_ROOM_RADIO_BTN); await el.click(); @@ -144,12 +191,14 @@ class WebDriver { async selectPrivateRadioButton() { var el = await this.waitElementVisibleAndGet(ui.PRIVATE_ROOM_RADIO_BTN); await el.click(); - } + } async clickLeftNavItem(name) { - xpath = ui.LEFT_NAV_SINGLE_ITEM.replace("$$", name); - var el = await this.waitElementVisibleAndGet(xpath); + var xpath = await ui.LEFT_NAV_SINGLE_ITEM.replace("$$", name); + var el = await this.getElementByXPath(xpath); await el.click(); + var eheader = await this.getElementByXPath(ui.HEADER_MODULE); + await this.driver.wait(until.elementIsVisible(eheader), waitUntilTime) } async createRoom(usernames, name, description, type) { @@ -168,6 +217,16 @@ class WebDriver { await this.addParticipant(usernames[i]); } await this.clickDoneButton(); + // await this.clickConfirmCreateRoom(); + } + + async createSignal(signalName, hashTag) + { + await this.clickShowConversationCreationModal(); + await this.clickCreateSignal(); + await this.inputText(ui.SIGNAL_NAME,signalName); + await this.inputText(ui.LAST_RULE_ROW+ui.ENTER_KEYWORD_IN_LAST_INPUT,hashTag); + await this.clickDoneButton(); } async initDriver() { @@ -191,12 +250,10 @@ class WebDriver { this.driver.switchTo().window(this.driver.getAllWindowHandles()[0]); } - async quit() { - await d.quit(); - } async sleep(secondSleep) { await this.driver.sleep(secondSleep * 1000); } + async timeOut(secondSleep) { return secondSleep * 1000; } diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 738886ea..afee5391 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -3,7 +3,6 @@ const constants = require('./spectronConstants.js'); const Utils = require('./spectronUtils.js'); const fs = require('fs'); const WebActions = require('./spectronWebActions.js') -const ui = require('./spectronInterfaces.js'); class WindowsActions { constructor(app) { @@ -11,119 +10,6 @@ class WindowsActions { this.webAction = new WebActions(app); } - async verifyMinimizeWindows() { - await this.app.browserWindow.isMinimized().then(async function (minimized) { - await expect(minimized).toBeTruthy(); - }).catch((err) => { - console.log("error:" + err.name); - });; - } - - async isMinimizedWindows() { - let rminimized = -1; - - await this.app.browserWindow.isMinimized().then(async function (minimized) { - rminimized = constants.MINIMIZED; - }).catch((err) => { - rminimized = constants.QUIT; - return rminimized; - }); - - return rminimized; - } - - async pressCtrlW() { - await robot.keyToggle('w', 'down', ['control']); - await robot.keyToggle('w', 'up', ['control']); - } - async pressCtrlM() { - await robot.keyToggle('m', 'down', ['control']); - await robot.keyToggle('m', 'up', ['control']); - } - async focusWindow() { - await this.app.browserWindow.show(); - } - - async menuSearch(element, namevalue) { - if (element.name == namevalue) { - return await element; - } - else if (element.items !== undefined) { - var result; - for (var i = 0; result == null && i < element.items.length; i++) { - result = await this.menuSearch(element.items[i], namevalue); - result; - } - return await result; - } - return await null; - } - - async openMenu(arrMenu) { - var arrStep = []; - for (var i = 0; i < arrMenu.length; i++) { - var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } - await this.actionForMenus(arrStep); - return arrStep; - } - - async actionForMenus(arrMenu) { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + 35; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(1000); - await robot.keyTap('enter'); - for (var i = 0; i < arrMenu.length; i++) { - - for (var s = 0; s < arrMenu[i].step; s++) { - await robot.keyTap('down'); - } - if (arrMenu.length > 1 && i != arrMenu.length - 1) { - //handle right keygen - await robot.keyTap('right'); - } - } - await robot.keyTap('enter'); - }); - } - - async reload() { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + 200; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick('right'); - await robot.setKeyboardDelay(2000); - await robot.keyTap('right'); - await robot.keyTap('down'); - await robot.keyTap('enter'); - }); - await this.app.client.waitForVisible(ui.PLUS_BTN, constants.TIMEOUT_PAGE_LOAD); - } - - async clickNotification() { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + bounds.height - 20; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - }); - } - timeOut(second) { - return second * 1000; - } - async getCurrentSize() { return this.app.browserWindow.getSize(); } @@ -163,8 +49,9 @@ class WindowsActions { }) } - async showWindow() { - await this.app.browserWindow.show(); + async showWindow() { + await this.app.browserWindow.restore(); + await this.app.browserWindow.setAlwaysOnTop(true); } async clickOutsideWindow() { @@ -251,6 +138,27 @@ class WindowsActions { }) } + async verifyMinimizeWindows() { + await this.app.browserWindow.isMinimized().then(async function (minimized) { + await expect(minimized).toBeTruthy(); + }).catch((err) => { + console.log(err.name); + });; + } + + async isMinimizedWindows() { + let rminimized = -1; + + await this.app.browserWindow.isMinimized().then(async function (minimized) { + rminimized = constants.MINIMIZED; + }).catch((err) => { + rminimized = constants.QUIT; + return rminimized; + }); + + return rminimized; + } + async selectMinimizeOnClose() { await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); @@ -292,6 +200,264 @@ class WindowsActions { await robot.keyTap('enter'); }); } + + async pressCtrlW() { + await robot.keyToggle('w', 'down', ['control']); + await robot.keyToggle('w', 'up', ['control']); + } + async focusWindow() { + await this.app.browserWindow.show(); + } + + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async actionForMenus(arrMenu) { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await this.webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(200); + await robot.keyTap('enter'); + for (var i = 0; i < arrMenu.length; i++) { + for (var s = 0; s < arrMenu[i].step; s++) { + await robot.keyTap('down'); + } + if (arrMenu.length > 1 && i != arrMenu.length - 1) { + //handle right keygen + await robot.keyTap('right'); + } + } + await robot.keyTap('enter'); + }); + } + + async verifyMinimizeWindows() { + await this.app.browserWindow.isMinimized().then(async function (minimized) { + await expect(minimized).toBeTruthy(); + }).catch((err) => { + console.log("error:"+err.name); + });; + } + + async isMinimizedWindows() { + let rminimized = -1; + + await this.app.browserWindow.isMinimized().then(async function (minimized) { + rminimized = constants.MINIMIZED; + }).catch((err) => { + rminimized = constants.QUIT; + return rminimized; + }); + + return rminimized; + } + + async pressCtrlW() { + await robot.keyToggle('w', 'down', ['control']); + await robot.keyToggle('w', 'up', ['control']); + } + + async pressCtrlM() { + await robot.keyToggle('m', 'down', ['control']); + await robot.keyToggle('m', 'up', ['control']); + } + + async pressCtrlR() { + await robot.keyToggle('r', 'down', ['control']); + await robot.keyToggle('r', 'up', ['control']); + } + + async focusWindow() { + this.app.browserWindow.focus(); + this.app.browserWindow.setAlwaysOnTop(true); + } + + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async reload() + { + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 200; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick('right'); + await robot.setKeyboardDelay(2000); + await robot.keyTap('right'); + await robot.keyTap('down'); + await robot.keyTap('enter'); + }).catch((err1) => { + console.log("Message:"+err1); + }); + } + + async clickNotification() + { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = screen[0].bounds.width-50; + let y = screen[0].bounds.height - 100; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + }); + } + + async mouseMoveNotification() + { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = screen[0].bounds.width-50; + let y = screen[0].bounds.height - 100; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + }); + } + + async mouseMoveCenter() + { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = screen[0].bounds.width-500; + let y = screen[0].bounds.height - 100; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + }); + } + + async verifyNotCloseToastWhenMouseOver() + { + await this.mouseMoveNotification(); + var i =0; + while(i < 11) + { + await Utils.sleep(1); + await i++; + } + await this.verifyToastNotificationShow(); + await this.mouseMoveCenter(); + } + + async veriryPersistToastNotification() + { + var i =0; + while(i < 11) + { + await Utils.sleep(1); + await i++; + } + await this.verifyToastNotificationShow(); + await this.clickNotification(); + await this.mouseMoveCenter(); + } + + async veriryNotPersistToastNotification() + { + var i = 0; + let count =0; + + while(i < 11) + { + await Utils.sleep(1); + await i++; + } + await this.verifyNotShowToastNotification(); + await this.mouseMoveCenter(); + } + + async verifyToastNotificationShow() { + let show = false; + for (let i = 0; i < 10; i++) { + var winCount = await this.app.client.getWindowCount(); + if (winCount > 1) { + await this.app.client.windowByIndex(1); + if (await this.app.browserWindow.getTitle() === 'Electron') { + show = true; + break; + } + } + await Utils.sleep(1); + } + await expect(show).toBeTruthy(); + await this.app.client.windowByIndex(0); + } + + async verifyNotShowToastNotification() + { + let notshow = true; + for (let i = 0; i < 10; i++) { + var winCount = await this.app.client.getWindowCount(); + if (winCount == 1) { + notshow = true; + break; + } + else + { + await this.app.client.windowByIndex(1); + if (await this.app.browserWindow.getTitle() !== 'Electron') { + notshow = true; + break; + } + } + await Utils.sleep(1); + } + await expect(notshow).toBeTruthy(); + await this.app.client.windowByIndex(0); + } } -module.exports = WindowsActions; +module.exports = WindowsActions; \ No newline at end of file diff --git a/tests/spectron/turnONPersistentToast.spectron.js b/tests/spectron/turnONPersistentToast.spectron.js new file mode 100644 index 00000000..2df538b2 --- /dev/null +++ b/tests/spectron/turnONPersistentToast.spectron.js @@ -0,0 +1,87 @@ +const Application = require('./spectronSetup'); +const WebDriver = require('./spectronWebDriver'); +const { isMac } = require('../../js/utils/misc.js'); +const Utils = require('./spectronUtils'); +var app = new Application({ + startTimeout: Application.getTimeOut(), + waitTimeout: Application.getTimeOut() +}); +var webdriver = new WebDriver({ browser: 'chrome' }); +const WindowsAction = require('./spectronWindowsActions'); +const WebActions = require('./spectronWebActions'); +const ifc = require('./spectronInterfaces.js'); +const specconst = require('./spectronConstants.js'); +let webActions, windowAction; + +!isMac ? describe('Verify toast notification when Persist Notification is ON', () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + beforeAll(async(done) => { + try + { + app = await new Application({}).startApplication({testedHost:specconst.TESTED_HOST, alwaysOnTop: true}); + windowAction = await new WindowsAction(app); + webActions = await new WebActions(app); + done(); + } catch(err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + await webdriver.quit(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + /** + * Verify toast notification when Persist Notification is ON + * TC-ID: 3308790 + * Cover scenarios in AVT-1025 + */ + it('Toast notification appears on screen and should stay on the screen IM', async () => { + + await webdriver.startDriver(); + await webdriver.login(specconst.USER_A); + await webdriver.createIM(specconst.USER_B); + await webdriver.sendMessages([Utils.randomString()]); + await webActions.login(specconst.USER_B); + + await windowAction.reload(); + await app.client.waitForVisible(ifc.SETTTING_BUTTON, windowAction.timeOut(50)); + await webActions.persistToastIM(); + + await windowAction.pressCtrlM(); + await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); + await windowAction.veriryPersistToastNotification(); + await webdriver.startDriver(); + await webdriver.createMIM([specconst.USER_B, specconst.USER_C]); + await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); + await windowAction.veriryPersistToastNotification(); + + }) + /** + * Verify toast notification when Persist Notification is OFF + * TC-ID: 46602241 + * Cover scenarios in AVT-1027 + */ + it('Toast notification appears on screen and should disappear in few seconds IM', async () => { + + await windowAction.showWindow(); + await app.client.waitForVisible(ifc.SETTTING_BUTTON, windowAction.timeOut(50)); + await webActions.persistToastIM(); + await webdriver.clickLeftNavItem(specconst.USER_B.name); + await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); + await windowAction.veriryNotPersistToastNotification(); + await webdriver.createMIM([specconst.USER_B, specconst.USER_C]); + await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); + await windowAction.veriryNotPersistToastNotification(); + + }) + +}) : describe.skip(); From 2624e706c5fe4aecbc34f1654820889a433dc84c Mon Sep 17 00:00:00 2001 From: tranducanh Date: Wed, 8 Aug 2018 14:30:44 +0700 Subject: [PATCH 13/20] AVT-1031 AND AVT-1032: Verify toast notification for IMs, Signal,Room (#448) --- tests/spectron/spectronConstants.js | 8 +- tests/spectron/spectronSetup.js | 2 +- tests/spectron/spectronWebActions.js | 9 +- tests/spectron/spectronWebDriver.js | 30 ++- tests/spectron/spectronWindowsActions.js | 188 +++--------------- .../toastMouseHoveringForIM.spectron.js | 84 ++++++++ .../turnONPersistentToast.spectron.js | 29 +-- 7 files changed, 142 insertions(+), 208 deletions(-) create mode 100644 tests/spectron/toastMouseHoveringForIM.spectron.js diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index ea0f5cea..2c443a17 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -1,4 +1,3 @@ -require('dotenv').config() module.exports = { SYMPHONY_CONFIG_FILE_NAME: "/Symphony.config", @@ -20,10 +19,9 @@ module.exports = { }, LOG_FILENAME_PREFIX: "logs_symphony_", - USER_A: process.env.USER_A, - USER_B: process.env.USER_B, - USER_C: process.env.USER_C, - SIGN_IN_PASSWORD: process.env.PASSWORD, + USER_A: {username:process.env.USER_A,password:process.env.PASSWORD,name:process.env.USER_A_NAME}, + USER_B: {username:process.env.USER_B,password:process.env.PASSWORD,name:process.env.USER_B_NAME}, + USER_C: {username:process.env.USER_C,password:process.env.PASSWORD,name:process.env.USER_C_NAME}, TESTED_HOST: process.env.TESTED_HOST, TYPE_ROOM: {private:"PRIVATE",public:"PUBLIC"}, TIMEOUT_PAGE_LOAD: 120000, diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index f670681c..03545246 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -66,7 +66,7 @@ class App { } static getTimeOut() { - return 90000; + return 600000; } static readConfig(configPath) { diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index 07460b53..58d58ad8 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -61,11 +61,6 @@ class WebActions { }); } - async login(username) { - await this.inputText(ui.SIGN_IN_EMAIL, username); - await this.inputText(ui.SIGN_IN_PASSWORD, constants.SIGN_IN_PASSWORD); - await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON, ui.PLUS_BTN, constants.TIMEOUT_PAGE_LOAD); - } async scrollAndClick(selector, findElement) { var i = 0; var y = 0; @@ -123,7 +118,7 @@ class WebActions { var winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { - await this.app.client.windowByIndex(j); + await this.app.client.windowByIndex(j); if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) === message) { show = true; } @@ -144,7 +139,7 @@ class WebActions { var winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { - await this.app.client.windowByIndex(j); + await this.app.client.windowByIndex(j); if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) !== message) { noShow = true; } diff --git a/tests/spectron/spectronWebDriver.js b/tests/spectron/spectronWebDriver.js index 29f8bb12..5e6fc98b 100644 --- a/tests/spectron/spectronWebDriver.js +++ b/tests/spectron/spectronWebDriver.js @@ -5,8 +5,6 @@ var assert = require('assert'); const ui = require('./spectronInterfaces.js'); const specconst = require('./spectronConstants.js'); -const waitUntilTime = 20000; - class WebDriver { constructor(options) { this.options = options; @@ -19,9 +17,9 @@ class WebDriver { try { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), - waitUntilTime + specconst.TIMEOUT_WAIT_ELEMENT ) - await this.driver.wait(until.elementIsNotVisible(el), waitUntilTime); + await this.driver.wait(until.elementIsNotVisible(el), specconst.TIMEOUT_WAIT_ELEMENT); if (this.driver.findElements(By.xpath(xpath)).length > 0) { result = true; } @@ -39,7 +37,7 @@ class WebDriver { try { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), - waitUntilTime + specconst.TIMEOUT_WAIT_ELEMENT ) await this.driver.wait(until.elementIsVisible(el), timeout); } @@ -51,22 +49,22 @@ class WebDriver { async waitElementVisibleAndGet(xpath) { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), - waitUntilTime + specconst.TIMEOUT_WAIT_ELEMENT ) - return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + return await this.driver.wait(until.elementIsVisible(el), specconst.TIMEOUT_WAIT_ELEMENT) } async getElementById(id) { - const el = await this.driver.wait(until.elementLocated(By.id(id)), waitUntilTime) - return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + const el = await this.driver.wait(until.elementLocated(By.id(id)), specconst.TIMEOUT_WAIT_ELEMENT) + return await this.driver.wait(until.elementIsVisible(el), specconst.TIMEOUT_WAIT_ELEMENT) } async getElementByXPath(xpath) { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), - waitUntilTime + specconst.TIMEOUT_WAIT_ELEMENT ) - return await this.driver.wait(until.elementIsVisible(el), waitUntilTime) + return await this.driver.wait(until.elementIsVisible(el), specconst.TIMEOUT_WAIT_ELEMENT) } async inputText(el, data) { @@ -91,9 +89,9 @@ class WebDriver { } } - async login(username) { - await this.inputText(ui.SIGN_IN_EMAIL, username); - await this.inputText(ui.SIGN_IN_PASSWORD, specconst.SIGN_IN_PASSWORD); + async login(user) { + await this.inputText(ui.SIGN_IN_EMAIL, user.username); + await this.inputText(ui.SIGN_IN_PASSWORD, user.password); var singin = await this.getElementByXPath(ui.SIGN_IN_BUTTON); await singin.click(); await this.waitElelmentIsVisible(ui.SETTTING_BUTTON,specconst.TIMEOUT_PAGE_LOAD); @@ -198,7 +196,7 @@ class WebDriver { var el = await this.getElementByXPath(xpath); await el.click(); var eheader = await this.getElementByXPath(ui.HEADER_MODULE); - await this.driver.wait(until.elementIsVisible(eheader), waitUntilTime) + await this.driver.wait(until.elementIsVisible(eheader), specconst.TIMEOUT_WAIT_ELEMENT) } async createRoom(usernames, name, description, type) { @@ -262,7 +260,7 @@ class WebDriver { try { const el = await this.driver.wait( until.elementLocated(By.xpath(xpath)), - waitUntilTime + specconst.TIMEOUT_WAIT_ELEMENT ) await this.driver.wait(until.elementIsVisible(el), timeout); } diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index afee5391..f84090af 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -67,55 +67,6 @@ class WindowsActions { }) } - async menuSearch(element, namevalue) { - if (element.name == namevalue) { - return await element; - } - else if (element.items !== undefined) { - var result; - for (var i = 0; result == null && i < element.items.length; i++) { - result = await this.menuSearch(element.items[i], namevalue); - result; - } - return await result; - } - return await null; - } - - async openMenu(arrMenu) { - var arrStep = []; - for (var i = 0; i < arrMenu.length; i++) { - var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } - await this.actionForMenus(arrStep); - return arrStep; - } - - async actionForMenus(arrMenu) { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + 35; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(200); - await robot.keyTap('enter'); - for (var i = 0; i < arrMenu.length; i++) { - for (var s = 0; s < arrMenu[i].step; s++) { - await robot.keyTap('down'); - } - if (arrMenu.length > 1 && i != arrMenu.length - 1) { - //handle right keygen - await robot.keyTap('right'); - } - } - await robot.keyTap('enter'); - }); - } - async verifyLogExported() { let expected = false; let path = await Utils.getFolderPath('Downloads'); @@ -178,36 +129,7 @@ class WindowsActions { } await robot.keyTap('enter'); }); - } - - async quitApp() { - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); - let x = bounds.x + 95; - let y = bounds.y + 35; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(1000); - await robot.keyTap('enter'); - await robot.keyTap('down'); - await robot.keyTap('down'); - await robot.keyTap('right'); - for (let i = 0; i < 6; i++) { - await robot.keyTap('down'); - } - await robot.keyTap('enter'); - }); - } - - async pressCtrlW() { - await robot.keyToggle('w', 'down', ['control']); - await robot.keyToggle('w', 'up', ['control']); - } - async focusWindow() { - await this.app.browserWindow.show(); - } + } async menuSearch(element, namevalue) { if (element.name == namevalue) { @@ -224,16 +146,6 @@ class WindowsActions { return await null; } - async openMenu(arrMenu) { - var arrStep = []; - for (var i = 0; i < arrMenu.length; i++) { - var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } - await this.actionForMenus(arrStep); - return arrStep; - } - async actionForMenus(arrMenu) { await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); @@ -297,22 +209,7 @@ class WindowsActions { async focusWindow() { this.app.browserWindow.focus(); this.app.browserWindow.setAlwaysOnTop(true); - } - - async menuSearch(element, namevalue) { - if (element.name == namevalue) { - return await element; - } - else if (element.items !== undefined) { - var result; - for (var i = 0; result == null && i < element.items.length; i++) { - result = await this.menuSearch(element.items[i], namevalue); - result; - } - return await result; - } - return await null; - } + } async openMenu(arrMenu) { var arrStep = []; @@ -346,7 +243,7 @@ class WindowsActions { { let screen = await this.app.electron.screen.getAllDisplays(); await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); + await robot.setMouseDelay(50); let x = screen[0].bounds.width-50; let y = screen[0].bounds.height - 100; await robot.moveMouseSmooth(x, y); @@ -359,7 +256,7 @@ class WindowsActions { { let screen = await this.app.electron.screen.getAllDisplays(); await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); + await robot.setMouseDelay(50); let x = screen[0].bounds.width-50; let y = screen[0].bounds.height - 100; await robot.moveMouseSmooth(x, y); @@ -371,41 +268,28 @@ class WindowsActions { { let screen = await this.app.electron.screen.getAllDisplays(); await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(100); + await robot.setMouseDelay(50); let x = screen[0].bounds.width-500; let y = screen[0].bounds.height - 100; await robot.moveMouseSmooth(x, y); await robot.moveMouse(x, y); }); - } + } - async verifyNotCloseToastWhenMouseOver() + async veriryPersistToastNotification(message) { - await this.mouseMoveNotification(); var i =0; - while(i < 11) + while(i < 6) { await Utils.sleep(1); await i++; } - await this.verifyToastNotificationShow(); - await this.mouseMoveCenter(); - } - - async veriryPersistToastNotification() - { - var i =0; - while(i < 11) - { - await Utils.sleep(1); - await i++; - } - await this.verifyToastNotificationShow(); + await this.webAction.verifyToastNotificationShow(message); await this.clickNotification(); await this.mouseMoveCenter(); } - async veriryNotPersistToastNotification() + async verifyNotPersistToastNotification(message) { var i = 0; let count =0; @@ -415,49 +299,23 @@ class WindowsActions { await Utils.sleep(1); await i++; } - await this.verifyNotShowToastNotification(); + await this.webAction.verifyNoToastNotificationShow(message); await this.mouseMoveCenter(); - } + } - async verifyToastNotificationShow() { - let show = false; - for (let i = 0; i < 10; i++) { - var winCount = await this.app.client.getWindowCount(); - if (winCount > 1) { - await this.app.client.windowByIndex(1); - if (await this.app.browserWindow.getTitle() === 'Electron') { - show = true; - break; - } - } - await Utils.sleep(1); - } - await expect(show).toBeTruthy(); - await this.app.client.windowByIndex(0); - } - - async verifyNotShowToastNotification() + async verifyNotCloseToastWhenMouseOver(message) { - let notshow = true; - for (let i = 0; i < 10; i++) { - var winCount = await this.app.client.getWindowCount(); - if (winCount == 1) { - notshow = true; - break; - } - else - { - await this.app.client.windowByIndex(1); - if (await this.app.browserWindow.getTitle() !== 'Electron') { - notshow = true; - break; - } - } - await Utils.sleep(1); + await this.mouseMoveNotification(); + var i =0; + while(i < 8) + { + await Utils.sleep(1); + await i++; } - await expect(notshow).toBeTruthy(); - await this.app.client.windowByIndex(0); - } + await this.webAction.verifyToastNotificationShow(message); + await this.mouseMoveCenter(); + } + } module.exports = WindowsActions; \ No newline at end of file diff --git a/tests/spectron/toastMouseHoveringForIM.spectron.js b/tests/spectron/toastMouseHoveringForIM.spectron.js new file mode 100644 index 00000000..5f138611 --- /dev/null +++ b/tests/spectron/toastMouseHoveringForIM.spectron.js @@ -0,0 +1,84 @@ +const Application = require('./spectronSetup'); +const WebDriver = require('./spectronWebDriver'); +const { isMac } = require('../../js/utils/misc.js'); +var app = new Application({ + startTimeout: Application.getTimeOut(), + waitTimeout: Application.getTimeOut() +}); +var webdriver = new WebDriver({ browser: 'chrome' }); +const WindowsAction = require('./spectronWindowsActions'); +const WebActions = require('./spectronWebActions'); +const specconst = require('./spectronConstants.js'); +const Utils = require('./spectronUtils'); +const ifc = require('./spectronInterfaces.js'); +let webActions, windowAction; + +!isMac? describe('Verify toast notification for IMs', () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + beforeAll(async(done) => { + try + { + app = await new Application({}).startApplication({testedHost:specconst.TESTED_HOST, alwaysOnTop: true}); + windowAction = await new WindowsAction(app); + webActions = await new WebActions(app); + done(); + } catch(err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + afterAll((done) => { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + app.stop().then(() => { + webdriver.close(); + webdriver.quit(); + done(); + }).catch((err) => { + done(); + }); + } + }); + /** + * Verify toast notification for IMs + * TC-ID: 3395297 + * Cover scenarios in AVT-1031 + */ + it('Toast notification should not be closed', async () => { + + await webdriver.startDriver(); + await webdriver.login(specconst.USER_A); + await webdriver.createIM(specconst.USER_B.username); + await webActions.login(specconst.USER_B); + await windowAction.reload(); + await app.client.waitForVisible(ifc.SETTTING_BUTTON, Utils.toMs(50)); + await webActions.clickIfElementVisible(ifc.SETTTING_BUTTON); + await windowAction.pressCtrlM(); + await webdriver.clickLeftNavItem(specconst.USER_B.name); + var message = await Utils.randomString(); + await webdriver.sendMessages([message]); + await windowAction.verifyNotCloseToastWhenMouseOver(message); + + }); + /** + * Verify toast notification for signals, mentions and keywords + * TC-ID: 3395306 + * Cover scenarios in AVT-1032 + */ + it('Verify toast notification for signals, mentions and keywords', async () => { + var nameSignal = await Utils.randomString(); + var nameHashTag = await Utils.randomString(); + var roomName = await Utils.randomString(); + var description =await Utils.randomString(); + + await webdriver.createSignal(nameSignal,nameHashTag); + await webdriver.createRoom([specconst.USER_B.username],roomName,description,specconst.TYPE_ROOM.public) + await webdriver.clickLeftNavItem(roomName); + + await webdriver.sendMessages(["#"+nameHashTag]); + await windowAction.verifyNotCloseToastWhenMouseOver(specconst.USER_A.name+": #"+nameHashTag); + await webdriver.mentionUserOnChat(specconst.USER_B); + await windowAction.verifyNotCloseToastWhenMouseOver(specconst.USER_A.name+": @"+specconst.USER_B.name); + }); + +}):describe.skip(); diff --git a/tests/spectron/turnONPersistentToast.spectron.js b/tests/spectron/turnONPersistentToast.spectron.js index 2df538b2..0e8bb0a0 100644 --- a/tests/spectron/turnONPersistentToast.spectron.js +++ b/tests/spectron/turnONPersistentToast.spectron.js @@ -48,21 +48,21 @@ let webActions, windowAction; await webdriver.startDriver(); await webdriver.login(specconst.USER_A); - await webdriver.createIM(specconst.USER_B); - await webdriver.sendMessages([Utils.randomString()]); + await webdriver.createIM(specconst.USER_B.username); await webActions.login(specconst.USER_B); await windowAction.reload(); - await app.client.waitForVisible(ifc.SETTTING_BUTTON, windowAction.timeOut(50)); + await app.client.waitForVisible(ifc.SETTTING_BUTTON, Utils.toMs(50)); await webActions.persistToastIM(); await windowAction.pressCtrlM(); - await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); - await windowAction.veriryPersistToastNotification(); + var message = await Utils.randomString(); + await webdriver.sendMessages([message]); + await windowAction.veriryPersistToastNotification(message); await webdriver.startDriver(); - await webdriver.createMIM([specconst.USER_B, specconst.USER_C]); - await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); - await windowAction.veriryPersistToastNotification(); + await webdriver.createMIM([specconst.USER_B.username, specconst.USER_C.username]); + await webdriver.sendMessages([message]); + await windowAction.veriryPersistToastNotification(message); }) /** @@ -73,14 +73,15 @@ let webActions, windowAction; it('Toast notification appears on screen and should disappear in few seconds IM', async () => { await windowAction.showWindow(); - await app.client.waitForVisible(ifc.SETTTING_BUTTON, windowAction.timeOut(50)); + await app.client.waitForVisible(ifc.SETTTING_BUTTON, Utils.toMs(50)); await webActions.persistToastIM(); await webdriver.clickLeftNavItem(specconst.USER_B.name); - await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); - await windowAction.veriryNotPersistToastNotification(); - await webdriver.createMIM([specconst.USER_B, specconst.USER_C]); - await webdriver.sendMessages([Utils.randomString(),Utils.randomString()]); - await windowAction.veriryNotPersistToastNotification(); + var message = await Utils.randomString(); + await webdriver.sendMessages([message]); + await windowAction.verifyNotPersistToastNotification("Electron"); + await webdriver.createMIM([specconst.USER_B.username, specconst.USER_C.username]); + await webdriver.sendMessages([message]); + await windowAction.verifyNotPersistToastNotification("Electron"); }) From 65b107a1abf83c1af832e22e3a68cd0e5fc0353c Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Thu, 9 Aug 2018 18:17:49 +0530 Subject: [PATCH 14/20] ELECTRON-670 - Remove setting menu to null for pop-out (#457) --- js/windowMgr.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/js/windowMgr.js b/js/windowMgr.js index c7646f8f..6fa413e0 100644 --- a/js/windowMgr.js +++ b/js/windowMgr.js @@ -465,11 +465,6 @@ function doCreateMainWindow(initialUrl, initialBounds, isCustomTitleBar) { if (browserWin) { log.send(logLevels.INFO, 'loaded pop-out window url: ' + newWinParsedUrl); - if (!isMac) { - // Removes the menu bar from the pop-out window - // setMenu is currently only supported on Windows and Linux - browserWin.setMenu(null); - } browserWin.webContents.send('on-page-load'); // applies styles required for snack bar browserWin.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/snackBar/style.css'), 'utf8').toString()); From 668b49a82645a6ac1983d95cbb7f8b53bf402ca3 Mon Sep 17 00:00:00 2001 From: Kiran Niranjan Date: Thu, 9 Aug 2018 21:21:37 +0530 Subject: [PATCH 15/20] ELECTRON-600 (Implement Native Encryption for AESGCMEncrypt, AESGCMDecrypt & RSADecrypt) (#452) - Implement Native Encryption for AESGCMEncrypt & AESGCMDecrypt - Refactor and remove spectron test case for security reasons - Update library file for MacOS - Include RSADecrypt method - Throw errors instead of logs - Remove exceptions throw - Fix tag buffer in AESGCMDecrypt - Optimize EncryptDecrypt method --- js/cryptoLib.js | 247 ++++++++++++++++++++++++++++++++++++++ js/preload/preloadMain.js | 14 +++ package.json | 5 +- 3 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 js/cryptoLib.js diff --git a/js/cryptoLib.js b/js/cryptoLib.js new file mode 100644 index 00000000..ea11578f --- /dev/null +++ b/js/cryptoLib.js @@ -0,0 +1,247 @@ +const electron = require('electron'); +const app = electron.app; +const ffi = require('ffi'); +const ref = require('ref'); +const path = require('path'); +const execPath = path.dirname(app.getPath('exe')); + +const log = require('./log.js'); +const logLevels = require('./enums/logLevels.js'); +const { isMac, isDevEnv } = require('../js/utils/misc'); + +const TAG_LENGTH = 16; +const KEY_LENGTH = 32; +const arch = process.arch === 'ia32'; +const winLibraryPath = isDevEnv ? path.join(__dirname, '..', 'library') : path.join(execPath, 'library'); +const macLibraryPath = isDevEnv ? path.join(__dirname, '..', 'library') : path.join(execPath, '..', 'library'); + +const cryptoLibPath = isMac ? + path.join(macLibraryPath, 'cryptoLib.dylib') : + (arch ? path.join(winLibraryPath, 'libsymphonysearch-x86.dll') : path.join(winLibraryPath, 'libsymphonysearch-x64.dll')); + +const voidPtr = ref.refType(ref.types.void); +const RSAKeyPair = exports.RSAKeyPair = voidPtr; +const RSAKeyPairPtr = exports.RSAKeyPairPtr = ref.refType(RSAKeyPair); +const RSAPubKey = exports.RSAPubKey = voidPtr; +const RSAPubKeyPtr = exports.RSAPubKeyPtr = ref.refType(RSAPubKey); + +const library = new ffi.Library((cryptoLibPath), { + + AESEncryptGCM: [ref.types.int32, [ + ref.refType(ref.types.uchar), + ref.types.int32, + ref.refType(ref.types.uchar), + ref.types.int32, + ref.refType(ref.types.uchar), + ref.refType(ref.types.uchar), + ref.types.uint32, + ref.refType(ref.types.uchar), + ref.refType(ref.types.uchar), + ref.types.uint32, + ]], + + AESDecryptGCM: [ref.types.int32, [ + ref.refType(ref.types.uchar), + ref.types.int32, + ref.refType(ref.types.uchar), + ref.types.int32, + ref.refType(ref.types.uchar), + ref.types.uint32, + ref.refType(ref.types.uchar), + ref.refType(ref.types.uchar), + ref.types.uint32, + ref.refType(ref.types.uchar), + ]], + + encryptRSA: [ref.types.uint32, [ + RSAPubKeyPtr, + ref.types.int32, + ref.refType(ref.types.uchar), + ref.types.uint32, + ref.refType(ref.types.uchar), + ref.types.uint32, + ]], + + decryptRSA: [ref.types.uint32, [ + RSAPubKeyPtr, + ref.types.int32, + ref.refType(ref.types.uchar), + ref.types.uint32, + ref.refType(ref.types.uchar), + ref.types.uint32, + ]], + + deserializeRSAPubKey: [RSAPubKey, [ + ref.refType(ref.types.uchar), + ref.types.uint32, + ]], + deserializeRSAKeyPair: [RSAKeyPairPtr, [ + ref.refType(ref.types.uchar), + ref.types.uint32, + ]], + + getRSAKeySize: [ref.types.uint32, [ + RSAKeyPairPtr + ]], + + getVersion: [ref.types.CString, []], +}); + +/** + * Method to decrypt content + * @param Base64IV + * @param Base64AAD + * @param Base64Key + * @param Base64In + * @return {*} + * @constructor + */ +const AESGCMEncrypt = function(Base64IV, Base64AAD, Base64Key, Base64In) { + return EncryptDecrypt('AESGCMEncrypt', Base64IV, Base64AAD, Base64Key, Base64In); +}; + +/** + * Method to decrypt content + * @param Base64IV + * @param Base64AAD + * @param Base64Key + * @param Base64In + * @return {*} + * @constructor + */ +const AESGCMDecrypt = function(Base64IV, Base64AAD, Base64Key, Base64In) { + return EncryptDecrypt('AESGCMDecrypt', Base64IV, Base64AAD, Base64Key, Base64In); +}; + +/** + * Encrypt / Decrypt + * @param name {String} - Method name + * @param Base64IV {String} base64 + * @param Base64AAD {String} base64 + * @param Base64Key {String} base64 + * @param Base64In {String} base64 + * @return {*} + * @constructor + */ +const EncryptDecrypt = function(name, Base64IV, Base64AAD, Base64Key, Base64In) { + let base64In = Base64In; + + if (!base64In) { + base64In = ""; + } + + const IV = Buffer.from(Base64IV, 'base64'); + const AAD = Buffer.from(Base64AAD, 'base64'); + const Key = Buffer.from(Base64Key, 'base64'); + const In = Buffer.from(base64In, 'base64'); + + if (name === 'AESGCMEncrypt') { + const OutPtr = Buffer.alloc(In.length); + const Tag = Buffer.alloc(TAG_LENGTH); + + const resultCode = library.AESEncryptGCM(In, In.length, AAD, AAD.length, Key, IV, IV.length, OutPtr, Tag, TAG_LENGTH); + + if (resultCode < 0) { + log.send(logLevels.ERROR, `AESEncryptGCM, Failed to encrypt with exit code ${resultCode}`); + } + log.send(logLevels.INFO, `Output from AESEncryptGCM ${resultCode}`); + const bufferArray = [OutPtr, Tag]; + return Buffer.concat(bufferArray).toString('base64'); + } + + if (name === 'AESGCMDecrypt') { + const CipherTextLen = In.length - TAG_LENGTH; + const Tag = Buffer.from(In.slice(In.length - 16, In.length)); + const OutPtr = Buffer.alloc(In.length - TAG_LENGTH); + + const resultCode = library.AESDecryptGCM(In, CipherTextLen, AAD, AAD.length, Tag, TAG_LENGTH, Key, IV, IV.length, OutPtr); + + if (resultCode < 0) { + log.send(logLevels.ERROR, `AESDecryptGCM, Failed to decrypt with exit code ${resultCode}`); + } + log.send(logLevels.INFO, `Output from AESDecryptGCM ${resultCode}`); + return OutPtr.toString('base64'); + } + + return null; +}; + +/** + * Decrypt RSA + * @param pemKey + * @param input + * @return {*} + * @constructor + */ +const RSADecrypt = function (pemKey, input) { + return RSAEncryptDecrypt("RSADecrypt", pemKey, input); +}; + +/** + * Encrypt / Decrypt RSA + * @param action + * @param pemKey + * @param inputStr + * @return {String} + * @constructor + */ +const RSAEncryptDecrypt = function (action, pemKey, inputStr) { + + let rsaKey = getRSAKeyFromPEM(pemKey); + + if (!rsaKey) { + log.send(logLevels.ERROR, `Failed to parse formatted RSA PEM key`); + } + + let input = Buffer.from(inputStr, 'base64'); + let outLen = library.getRSAKeySize(rsaKey); + + let outPtr = Buffer.alloc(KEY_LENGTH); + + let ret = 0; + + if (action === 'RSAEncrypt') { + ret = library.encryptRSA(rsaKey, 0, input, input.length, outPtr, outLen); + } else { + outLen = library.decryptRSA(rsaKey, 0, input, input.length, outPtr, outLen); + + if (outLen < 0) { + ret = outLen; + } + } + + if (ret !== 0) { + log.send(logLevels.ERROR, `${action} failed due to -> ${ret}`); + } + return Buffer.from(outPtr.toString('hex'), 'hex').toString('base64'); +}; + +/** + * Get RSA key from PEM key + * @param pemKey + * @return {*} + */ +const getRSAKeyFromPEM = function (pemKey) { + + let pemKeyBytes = Buffer.from(pemKey, 'utf-8'); + + let rsaKey; + + if (pemKey.startsWith("-----BEGIN PUBLIC KEY-----")) { + rsaKey = library.deserializeRSAPubKey(pemKeyBytes, pemKey.length); + } else { + rsaKey = library.deserializeRSAKeyPair(pemKeyBytes, pemKey.length); + } + + if (rsaKey === 0) { + log.send(logLevels.ERROR, 'RSAKey is 0!!'); + } + return rsaKey; +}; + + +module.exports = { + AESGCMEncrypt: AESGCMEncrypt, + AESGCMDecrypt: AESGCMDecrypt, + RSADecrypt: RSADecrypt, +}; diff --git a/js/preload/preloadMain.js b/js/preload/preloadMain.js index dee590e3..ae3a45a0 100644 --- a/js/preload/preloadMain.js +++ b/js/preload/preloadMain.js @@ -31,6 +31,7 @@ const KeyCodes = { let Search; let SearchUtils; +let CryptoLib; let isAltKey = false; let isMenuOpen = false; @@ -48,6 +49,14 @@ try { console.warn("Failed to initialize swift search (Utils). You'll need to include the search dependency. Contact the developers for more details"); } +try { + CryptoLib = remote.require('./cryptoLib.js'); +} catch (e) { + CryptoLib = null; + // eslint-disable-next-line no-console + console.warn("Failed to initialize Crypto Lib. You'll need to include the Crypto library. Contact the developers for more details"); +} + require('../downloadManager'); let snackBar; @@ -202,6 +211,11 @@ function createAPI() { */ SearchUtils: SearchUtils || null, + /** + * Native encryption and decryption. + */ + CryptoLib: CryptoLib, + /** * Brings window forward and gives focus. * @param {String} windowName Name of window. Note: main window name is 'main' diff --git a/package.json b/package.json index e8f142f5..eec6aaf7 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "extraFiles": [ "config/Symphony.config", "library/libsymphonysearch.dylib", + "library/cryptoLib.dylib", "library/lz4.exec" ], "appId": "com.symphony.electron-desktop", @@ -127,7 +128,9 @@ "lodash.omit": "4.5.0", "lodash.pick": "4.4.0", "shell-path": "2.1.0", - "winreg": "1.2.4" + "winreg": "1.2.4", + "ffi": "2.2.0", + "ref": "1.3.5" }, "optionalDependencies": { "screen-snippet": "git+https://github.com/symphonyoss/ScreenSnippet.git#v1.0.2", From f6db6b08dbd5648ad3e955f5cce323bcb4f4b3d0 Mon Sep 17 00:00:00 2001 From: Vishwas Shashidhar Date: Fri, 10 Aug 2018 10:25:06 +0530 Subject: [PATCH 16/20] bump up version number to 2.11.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eec6aaf7..728fa03b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Symphony", "productName": "Symphony", - "version": "2.10.0", + "version": "2.11.0", "buildNumber": "0", "description": "Symphony desktop app (Foundation ODP)", "author": "Symphony", From d92a123f32851875238e0c2543fc81c7f0bda71f Mon Sep 17 00:00:00 2001 From: Truong Pham Date: Mon, 13 Aug 2018 15:54:04 +0700 Subject: [PATCH 17/20] Support on MAC (#456) --- tests/spectron/resizeWindows.spectron.js | 4 ++-- tests/spectron/spectronWindowsActions.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/spectron/resizeWindows.spectron.js b/tests/spectron/resizeWindows.spectron.js index f63a067b..0d0c490c 100644 --- a/tests/spectron/resizeWindows.spectron.js +++ b/tests/spectron/resizeWindows.spectron.js @@ -5,7 +5,7 @@ const WindowsActions = require('./spectronWindowsActions'); let app = new Application({}); let windowActions; -!isMac ? describe('Tests for Resizing windows', () => { +describe('Tests for Resizing windows', () => { let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); @@ -46,4 +46,4 @@ let windowActions; done.fail(new Error(`failed to minimize window to 300 px with error: ${err}`)); } }); -}) : describe.skip(); \ No newline at end of file +}); diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index f84090af..392284d9 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -23,7 +23,8 @@ class WindowsActions { let x = bounds.x + (bounds.width - width); let y = bounds.y + (bounds.height - height); robot.setMouseDelay(500); - robot.moveMouse(bounds.x, bounds.y); + // Plus 2 pixels to make sure this function works well on MAC + robot.moveMouse(bounds.x + 2, bounds.y + 2); robot.mouseToggle("down"); robot.dragMouse(x, y); robot.mouseToggle("up"); From a0968d17521883a8d3f0d628342f1809450c4e5d Mon Sep 17 00:00:00 2001 From: Truong Pham Date: Mon, 13 Aug 2018 15:54:55 +0700 Subject: [PATCH 18/20] [AVT-1095] - [Spectron][MAC] Show 1 in tray icon when unread message = 1 (#458) - Support new test on MAC - Support Badge Count test on MAC - Use let instead of var --- tests/spectron/badgeCount.spectron.js | 69 +++++++++ tests/spectron/spectronWebActions.js | 47 +++--- tests/spectron/spectronWindowsActions.js | 176 +++++++++++++---------- 3 files changed, 191 insertions(+), 101 deletions(-) create mode 100644 tests/spectron/badgeCount.spectron.js diff --git a/tests/spectron/badgeCount.spectron.js b/tests/spectron/badgeCount.spectron.js new file mode 100644 index 00000000..b4eb0f76 --- /dev/null +++ b/tests/spectron/badgeCount.spectron.js @@ -0,0 +1,69 @@ +const Application = require('./spectronSetup'); +const WebDriver = require('./spectronWebDriver'); +const { isMac } = require('../../js/utils/misc.js'); +const Utils = require('./spectronUtils'); +let app = new Application({ + startTimeout: Application.getTimeOut(), + waitTimeout: Application.getTimeOut() +}); +let webdriver = new WebDriver({ browser: 'chrome' }); +const WindowsAction = require('./spectronWindowsActions'); +const WebActions = require('./spectronWebActions'); +const specconst = require('./spectronConstants.js'); + +let webActions, windowAction; + +describe('Test for Badge Count on MAC', () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); + let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication({ testedHost: specconst.TESTED_HOST, alwaysOnTop: true }); + windowAction = await new WindowsAction(app); + webActions = await new WebActions(app); + done(); + } catch (err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + afterAll(async (done) => { + try { + if (app && app.isRunning()) { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout; + await app.stop(); + await webdriver.quit(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + /** + * Show 1 in tray icon when unread message = 1 + * TC-ID: 2906586 + * Cover scenarios in AVT-1095 + */ + it('Show 1 in tray icon when unread message = 1', async (done) => { + try { + if (isMac) { + let message = await Utils.randomString(); + await webdriver.startDriver(); + await webdriver.login(specconst.USER_A); + await webdriver.createIM(specconst.USER_B.username); + await webActions.login(specconst.USER_B); + await webActions.clickLeftNavItem(specconst.USER_A.name); + await webActions.openAlertsSettings(); + let currentBadgeCount = await windowAction.getBadgeCount(); + await webdriver.sendMessage(message); + await windowAction.verifyCurrentBadgeCount(currentBadgeCount + 1); + done(); + } + else { + done(); + } + } catch (err) { + done.fail(new Error(`Show 1 in tray icon with error: ${err}`)); + } + }); + +}) diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index 58d58ad8..b0297310 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -18,7 +18,7 @@ class WebActions { }) } - async clickMinimizeButton(){ + async clickMinimizeButton() { await this.app.client.waitForVisible(ui.MINIMIZE_BTN, 10000).click(ui.MINIMIZE_BTN); } @@ -43,6 +43,7 @@ class WebActions { } async getElementByXPath(xpath) { + await this.app.client.waitForVisible(xpath, constants.TIMEOUT_WAIT_ELEMENT); var elem = this.app.client.element(xpath); if (elem.isVisible()) { return elem; @@ -110,7 +111,7 @@ class WebActions { async openAlertsSettings() { await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION); await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB); - } + } async verifyToastNotificationShow(message) { let show = false; @@ -118,12 +119,12 @@ class WebActions { var winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { - await this.app.client.windowByIndex(j); + await this.app.client.windowByIndex(j); if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) === message) { show = true; } } - if (show){ + if (show) { break; } } @@ -139,7 +140,7 @@ class WebActions { var winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { - await this.app.client.windowByIndex(j); + await this.app.client.windowByIndex(j); if (await this.app.client.getText(ui.TOAST_MESSAGE_CONTENT) !== message) { noShow = true; } @@ -147,7 +148,7 @@ class WebActions { noShow = false; } } - if (noShow === false){ + if (noShow === false) { break; } } @@ -158,27 +159,24 @@ class WebActions { } async getElementByXPath(xpath) { - var elem = this.app.client.element(xpath); + let elem = this.app.client.element(xpath); if (elem.isVisible()) { return elem; } return null; } - + async inputText(el, data) { - var obj = await this.getElementByXPath(el); + let obj = await this.getElementByXPath(el); if (obj != null) await this.app.client.setValue(el, data); } - async clickAndWaitElementVisible(xpath,elementToVisible,timeOut=5000) - { - await this.app.client.click(xpath).then(async()=> - { - await this.app.client.waitForVisible(elementToVisible,timeOut); - }); + async clickAndWaitElementVisible(xpath, elementToVisible, timeOut = 5000) { + await this.app.client.click(xpath); + await this.app.client.waitForVisible(elementToVisible, timeOut); } - + async clickIfElementVisible(xpath, timeOut = 5000) { await this.app.client.waitForVisible(xpath, timeOut) .click(xpath) @@ -187,15 +185,18 @@ class WebActions { async login(user) { await this.inputText(ui.SIGN_IN_EMAIL, user.username); await this.inputText(ui.SIGN_IN_PASSWORD, user.password); - await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON,ui.SETTTING_BUTTON,60000); + await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON, ui.SETTTING_BUTTON, 60000); } - - async persistToastIM() - { - await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION, 5000); - await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB,10000); - await this.clickAndWaitElementVisible(ui.PERSIS_NOTIFICATION_INPUT_IM,ui.PERSIS_NOTIFICATION_INPUT_IM, 5000); + async persistToastIM() { + await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION, 5000); + await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB, 10000); + await this.clickAndWaitElementVisible(ui.PERSIS_NOTIFICATION_INPUT_IM, ui.PERSIS_NOTIFICATION_INPUT_IM, 5000); + + } + async clickLeftNavItem(name) { + let xpath = await ui.LEFT_NAV_SINGLE_ITEM.replace("$$", name); + await this.clickAndWaitElementVisible(xpath,ui.HEADER_MODULE); } } diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index 392284d9..af620b18 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -50,14 +50,14 @@ class WindowsActions { }) } - async showWindow() { + async showWindow() { await this.app.browserWindow.restore(); await this.app.browserWindow.setAlwaysOnTop(true); } async clickOutsideWindow() { await this.setPosition(0, 0); - var currentSize = await this.getCurrentSize(); + let currentSize = await this.getCurrentSize(); await robot.moveMouse(currentSize[0] + 20, currentSize[1] + 20); await robot.mouseClick(); } @@ -66,12 +66,12 @@ class WindowsActions { await this.app.browserWindow.isAlwaysOnTop().then(function (isAlwaysOnTop) { expect(isAlwaysOnTop).toBeTruthy(); }) - } + } async verifyLogExported() { let expected = false; let path = await Utils.getFolderPath('Downloads'); - var listFiles = Utils.getFiles(path); + let listFiles = Utils.getFiles(path); listFiles.forEach(function (fileName) { if (fileName.indexOf(constants.LOG_FILENAME_PREFIX) > -1) { expected = true; @@ -82,7 +82,7 @@ class WindowsActions { async deleteAllLogFiles() { let path = await Utils.getFolderPath('Downloads'); - var listFiles = Utils.getFiles(path); + let listFiles = Utils.getFiles(path); await listFiles.forEach(function (fileName) { if (fileName.indexOf(constants.LOG_FILENAME_PREFIX) > -1) { fs.unlinkSync(path.concat("\\", fileName)); @@ -130,14 +130,14 @@ class WindowsActions { } await robot.keyTap('enter'); }); - } + } async menuSearch(element, namevalue) { - if (element.name == namevalue) { + if (element.name == namevalue) { return await element; } else if (element.items !== undefined) { - var result; + let result; for (var i = 0; result == null && i < element.items.length; i++) { result = await this.menuSearch(element.items[i], namevalue); result; @@ -175,7 +175,7 @@ class WindowsActions { await this.app.browserWindow.isMinimized().then(async function (minimized) { await expect(minimized).toBeTruthy(); }).catch((err) => { - console.log("error:"+err.name); + console.log("error:" + err.name); });; } @@ -207,23 +207,22 @@ class WindowsActions { await robot.keyToggle('r', 'up', ['control']); } - async focusWindow() { + async focusWindow() { this.app.browserWindow.focus(); this.app.browserWindow.setAlwaysOnTop(true); - } + } async openMenu(arrMenu) { - var arrStep = []; + let arrStep = []; for (var i = 0; i < arrMenu.length; i++) { var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } + await arrStep.push(item); + } await this.actionForMenus(arrStep); return arrStep; - } + } - async reload() - { + async reload() { await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); let x = bounds.x + 95; @@ -232,91 +231,112 @@ class WindowsActions { await robot.moveMouse(x, y); await robot.mouseClick('right'); await robot.setKeyboardDelay(2000); - await robot.keyTap('right'); - await robot.keyTap('down'); - await robot.keyTap('enter'); - }).catch((err1) => { - console.log("Message:"+err1); - }); - } - - async clickNotification() - { - let screen = await this.app.electron.screen.getAllDisplays(); - await this.app.browserWindow.getBounds().then(async (bounds) => { - await robot.setMouseDelay(50); - let x = screen[0].bounds.width-50; - let y = screen[0].bounds.height - 100; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - await robot.mouseClick(); - }); + await robot.keyTap('right'); + await robot.keyTap('down'); + await robot.keyTap('enter'); + }).catch((err1) => { + console.log("Message:" + err1); + }); } - async mouseMoveNotification() - { - let screen = await this.app.electron.screen.getAllDisplays(); - await this.app.browserWindow.getBounds().then(async (bounds) => { + async clickNotification() { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(50); - let x = screen[0].bounds.width-50; + let x = screen[0].bounds.width - 50; let y = screen[0].bounds.height - 100; await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - }); + await robot.moveMouse(x, y); + await robot.mouseClick(); + }); } - async mouseMoveCenter() - { - let screen = await this.app.electron.screen.getAllDisplays(); - await this.app.browserWindow.getBounds().then(async (bounds) => { + async mouseMoveNotification() { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(50); - let x = screen[0].bounds.width-500; - let y = screen[0].bounds.height - 100; - await robot.moveMouseSmooth(x, y); - await robot.moveMouse(x, y); - }); - } - - async veriryPersistToastNotification(message) - { - var i =0; - while(i < 6) - { - await Utils.sleep(1); + let x = screen[0].bounds.width - 50; + let y = screen[0].bounds.height - 100; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + }); + } + + async mouseMoveCenter() { + let screen = await this.app.electron.screen.getAllDisplays(); + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(50); + let x = screen[0].bounds.width - 500; + let y = screen[0].bounds.height - 100; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + }); + } + + async veriryPersistToastNotification(message) { + let i = 0; + while (i < 6) { + await Utils.sleep(1); await i++; } await this.webAction.verifyToastNotificationShow(message); - await this.clickNotification(); + await this.clickNotification(); await this.mouseMoveCenter(); } - async verifyNotPersistToastNotification(message) - { - var i = 0; - let count =0; - - while(i < 11) - { - await Utils.sleep(1); + async verifyNotPersistToastNotification(message) { + let i = 0; + let count = 0; + + while (i < 11) { + await Utils.sleep(1); await i++; } await this.webAction.verifyNoToastNotificationShow(message); await this.mouseMoveCenter(); - } + } - async verifyNotCloseToastWhenMouseOver(message) - { + async verifyNotCloseToastWhenMouseOver(message) { await this.mouseMoveNotification(); - var i =0; - while(i < 8) - { - await Utils.sleep(1); + let i = 0; + while (i < 8) { + await Utils.sleep(1); await i++; } await this.webAction.verifyToastNotificationShow(message); await this.mouseMoveCenter(); - } + } + + async getBadgeCount() { + let count = await this.app.electron.remote.app.getBadgeCount(); + return count; + } + + async resetBadgeCount() { + await this.app.electron.remote.app.setBadgeCount(0); + } + + async getBadgeCount() { + let count = await this.app.electron.remote.app.getBadgeCount(); + return count; + } + + async verifyCurrentBadgeCount(number) { + let expected = false; + let i = 0; + let count = await this.getBadgeCount(); + while (i < 5) { + if (count == number) { + expected = true; + break; + } + await Utils.sleep(1); + count = await this.getBadgeCount(); + await i++; + } + await expect(expected).toBeTruthy(); + } } -module.exports = WindowsActions; \ No newline at end of file +module.exports = WindowsActions; From 21b79f7714a49ebdfdc718540b2fc5a5cf0f0944 Mon Sep 17 00:00:00 2001 From: thaisym1912 <33540170+thaisym1912@users.noreply.github.com> Date: Tue, 14 Aug 2018 11:50:16 +0700 Subject: [PATCH 19/20] AVT-1081 [Spectron][Windows] pop-out chat, inbox (#460) --- tests/spectron/pop-Outs.spectron.js | 84 +++++++++ tests/spectron/spectronConstants.js | 11 +- tests/spectron/spectronInterfaces.js | 18 +- tests/spectron/spectronSetup.js | 6 +- tests/spectron/spectronWebActions.js | 108 +++++++++-- tests/spectron/spectronWindowsActions.js | 172 +++++++++++++----- .../toastMouseHoveringForIM.spectron.js | 5 +- .../turnONPersistentToast.spectron.js | 3 +- 8 files changed, 336 insertions(+), 71 deletions(-) create mode 100644 tests/spectron/pop-Outs.spectron.js diff --git a/tests/spectron/pop-Outs.spectron.js b/tests/spectron/pop-Outs.spectron.js new file mode 100644 index 00000000..abb2921f --- /dev/null +++ b/tests/spectron/pop-Outs.spectron.js @@ -0,0 +1,84 @@ +const Application = require('./spectronSetup'); +const WebActions = require('./spectronWebActions'); +const WindowsActions = require('./spectronWindowsActions'); +const { isMac } = require('../../js/utils/misc.js'); +const constants = require('./spectronConstants.js'); +const Utils = require('./spectronUtils'); + +let app, webActions, windowsActions; + +describe('Tests for Pop-Outs', () => { + + jasmine.DEFAULT_TIMEOUT_INTERVAL = constants.TIMEOUT_TEST_SUITE; + + beforeAll(async (done) => { + try { + app = await new Application({}).startApplication({testedHost: constants.TESTED_HOST}); + webActions = await new WebActions(app); + windowsActions = await new WindowsActions(app); + done(); + } catch (err) { + done.fail(new Error(`Unable to start application error: ${err}`)); + }; + }); + + afterAll(async (done) => { + try { + await windowsActions.closeAllPopOutWindow(); + if (app && app.isRunning()) { + await app.stop(); + await webDriver.quit(); + done(); + } + } catch (err) { + done.fail(new Error(`Failed at post-condition: ${err}`)); + }; + }); + + /** + * Verify pop-out chat, inbox + * TC-ID: 2897209 + * Cover scenarios in AVT-1081 + */ + it('Verify pop-out chat, inbox', async (done) => { + try { + if (isMac) { + done(); + } else { + await webActions.login(constants.USER_A); + await windowsActions.closeAllPopOutWindow(); + await windowsActions.bringToFront("Symphony"); + + await webActions.createIM(constants.USER_B.name); + await webActions.clickPopOutIcon(); + await windowsActions.verifyPopOutWindowAppear(constants.USER_B.name); + await webActions.verifyPopInIconDisplay(constants.USER_B.name); + + await webActions.clickInboxIcon(); + await webActions.clickInboxPopOutIcon(); + await windowsActions.verifyPopOutWindowAppear("Inbox"); + await webActions.verifyPopInIconDisplay("Inbox"); + + await windowsActions.bringToFront("Symphony"); + await webActions.clickInboxIcon(); + await windowsActions.verifyWindowFocus("Inbox"); + + await windowsActions.bringToFront("Symphony"); + await webActions.clickLeftNavItem(constants.USER_B.name); + await Utils.sleep(1); //wait for popout overlaying completely + await windowsActions.verifyWindowFocus(constants.USER_B.name); + + await windowsActions.bringToFront("Symphony"); + await webActions.logout(); + await webActions.login(constants.USER_A); + await windowsActions.verifyPopOutWindowAppear(constants.USER_B.name); + await windowsActions.verifyPopOutWindowAppear("Inbox"); + + await windowsActions.closeAllPopOutWindow(); + done(); + } + } catch (err) { + done.fail(new Error(`Fail to verify pop-out chat, inbox: ${err}`)); + }; + }); +}) \ No newline at end of file diff --git a/tests/spectron/spectronConstants.js b/tests/spectron/spectronConstants.js index 2c443a17..df50b592 100644 --- a/tests/spectron/spectronConstants.js +++ b/tests/spectron/spectronConstants.js @@ -13,17 +13,18 @@ module.exports = { { name: "Edit", step: 0, items: [{ name: "Undo", step: 0 }, { name: "Redo", step: 1 }, { name: "Cut", step: 2 }, { name: "Copy", step: 3 }, { name: "Paste", step: 4 }, { name: "Paste and Match Style", step: 5 }, { name: "Delete", step: 6 }, { name: "Select All", step: 7 }] }, { name: "View", step: 1, items: [{ name: "Reload", step: 0 }, { name: "Actual Size", step: 1 }, { name: "Zoom In", step: 2 }, { name: "Zoom Out", step: 3 }, { name: "Toogle Full Screen", step: 4 }] }, { name: "Window", step: 2, items: [{ name: "Minimize", step: 0 }, { name: "Close", step: 1 }, { name: "Auto Launch On Startup", step: 2 }, { name: "Always on Top", step: 3 }, { name: "Minimize on Close", step: 4 }] }, - { name: "Help", step: 3, items: [{ name: "Symphony Help", step: 0 }, { name: "Learn More", step: 1 }, { name: "Troubleshooting", step: 2, items:[{name: "Show Logs in Explorer", step: 0}] }, { name: "About Symphony", step: 3 }] } + { name: "Help", step: 3, items: [{ name: "Symphony Help", step: 0 }, { name: "Learn More", step: 1 }, { name: "Troubleshooting", step: 2, items: [{ name: "Show Logs in Explorer", step: 0 }] }, { name: "About Symphony", step: 3 }] } ] } }, LOG_FILENAME_PREFIX: "logs_symphony_", - USER_A: {username:process.env.USER_A,password:process.env.PASSWORD,name:process.env.USER_A_NAME}, - USER_B: {username:process.env.USER_B,password:process.env.PASSWORD,name:process.env.USER_B_NAME}, - USER_C: {username:process.env.USER_C,password:process.env.PASSWORD,name:process.env.USER_C_NAME}, + USER_A: { username: process.env.USER_A, password: process.env.PASSWORD, name: process.env.USER_A_NAME }, + USER_B: { username: process.env.USER_B, password: process.env.PASSWORD, name: process.env.USER_B_NAME }, + USER_C: { username: process.env.USER_C, password: process.env.PASSWORD, name: process.env.USER_C_NAME }, TESTED_HOST: process.env.TESTED_HOST, - TYPE_ROOM: {private:"PRIVATE",public:"PUBLIC"}, + TYPE_ROOM: { private: "PRIVATE", public: "PUBLIC" }, + TIMEOUT_TEST_SUITE: 600000, TIMEOUT_PAGE_LOAD: 120000, TIMEOUT_WAIT_ELEMENT: 10000 }; diff --git a/tests/spectron/spectronInterfaces.js b/tests/spectron/spectronInterfaces.js index b5955ade..d2783d2f 100644 --- a/tests/spectron/spectronInterfaces.js +++ b/tests/spectron/spectronInterfaces.js @@ -25,7 +25,7 @@ module.exports= { CREATE_IM_DONE_BTN: "//button[contains(@class,tempo-btn--good) and text()='Create']", START_CHAT: "//*[contains(@class, 'sym-menu-tooltip__option')]/*[text()='Start a Chat']", SIGNAL_OPTION: "//div[@class='sym-menu-tooltip__option']/*[text()='Create a Signal']", - LEFT_NAV_SINGLE_ITEM: "//div[contains(@class, 'navigation-item-title')][.//span[@class='navigation-item-name' and normalize-space()='$$']]", + LEFT_NAV_SINGLE_ITEM: "//div[contains(@class, 'navigation-item-title')]//span[@class='navigation-item-name' and normalize-space()='$$']", CHAT_INPUT_TYPING: "//div[contains(@class,'public-DraftEditor-content')]", SETTTING_BUTTON: "//div[@class='toolbar-settings-text-container']", PERSIS_NOTIFICATION_INPUT_ROOM: "//div[@class='alerts-settings__notification-category']//h5[text()='Rooms:']/..//input[@class='persistent-notification']", @@ -45,9 +45,25 @@ module.exports= { MENTION_USER_SUGGESTION: "//span[@class='draftJs__suggestionsEntryText' and text()='$$']", SUGGESTED_ENTITY_DROPDOWN: "//span[@class='draftJs__suggestionsEntryText']", CONFIRM_CREATE_ROOM_BUTTON: "//div[@class='modal-box__footer-buttons']//button[text()='Yes']", + MODULE_ON_GRID: "#simple_grid", + SPINNER: ".spinner", + SIGNOUT: ".sign-out", + SIGNOUT_MODAL_BUTTON: "//div[@class='modal-content-buttons buttons']//button[contains(text(), 'Sign Out')]", + + //Popin Popout + POPOUT_BUTTON: ".enhanced-pop-out", + POPOUT_INBOX_BUTTON: ".add-margin.popout", + POPIN_BUTTON: "//*[contains(@class, 'enhanced-pop-in') or contains(@class, 'add-margin popin')]", + PIN_CHAT_MOD: ".chat-module .pin-view", + //Alert Settings MUTE_POPUP_ALERTS_CKB: ".field.field-notifications-on input", + //Toast Message TOAST_MESSAGE_CONTENT: "#message", + + //Inbox + INBOX_BUTTON: ".toolbar-btn-inbox", + INBOX_HEADER: ".inbox-header", }; diff --git a/tests/spectron/spectronSetup.js b/tests/spectron/spectronSetup.js index 03545246..a48de06b 100644 --- a/tests/spectron/spectronSetup.js +++ b/tests/spectron/spectronSetup.js @@ -34,8 +34,6 @@ class App { try { this.app = await this.app.start(); await this.app.client.waitForVisible(ui.SYM_LOGO, constants.TIMEOUT_PAGE_LOAD); - await this.app.browserWindow.minimize(); - await this.app.browserWindow.restore(); if (configurations) { if (typeof configurations.alwaysOnTop !== "undefined") { await this.app.browserWindow.setAlwaysOnTop(configurations.alwaysOnTop); @@ -51,6 +49,8 @@ class App { if ((typeof configurations === "undefined") || (typeof configurations.defaultPosition === "undefined") || (configurations.defaultPosition === true)) { await this.app.browserWindow.center(); } + await this.app.browserWindow.minimize(); + await this.app.browserWindow.restore(); return this.app; } catch (err) { throw new Error("Unable to start application " + err); @@ -66,7 +66,7 @@ class App { } static getTimeOut() { - return 600000; + return 90000; } static readConfig(configPath) { diff --git a/tests/spectron/spectronWebActions.js b/tests/spectron/spectronWebActions.js index b0297310..66cad5ec 100644 --- a/tests/spectron/spectronWebActions.js +++ b/tests/spectron/spectronWebActions.js @@ -1,6 +1,7 @@ const ui = require('./spectronInterfaces.js'); const constants = require('./spectronConstants.js'); const Utils = require('./spectronUtils'); +const WindowsActions = require('./spectronWindowsActions'); class WebActions { constructor(app) { @@ -58,7 +59,6 @@ class WebActions { async clickAndWaitElementVisible(xpath, elementToVisible, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { await this.app.client.click(xpath).then(async () => { await this.app.client.waitForVisible(elementToVisible, timeOut); - }); } @@ -83,14 +83,11 @@ class WebActions { } async promiseTimeout(ms, promiseFunc) { - return new Promise(function (resolve, reject) { - // create a timeout to reject promise if not resolved var timer = setTimeout(function () { reject(new Error("promise timeout")); }, ms); - promiseFunc .then(function (res) { clearTimeout(timer); @@ -116,7 +113,7 @@ class WebActions { async verifyToastNotificationShow(message) { let show = false; for (let i = 0; i < 10; i++) { - var winCount = await this.app.client.getWindowCount(); + let winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { await this.app.client.windowByIndex(j); @@ -137,7 +134,7 @@ class WebActions { async verifyNoToastNotificationShow(message) { let noShow; for (let i = 0; i < 10; i++) { - var winCount = await this.app.client.getWindowCount(); + let winCount = await this.app.client.getWindowCount(); if (winCount > 1) { for (let j = 1; j < winCount; j++) { await this.app.client.windowByIndex(j); @@ -172,12 +169,12 @@ class WebActions { await this.app.client.setValue(el, data); } - async clickAndWaitElementVisible(xpath, elementToVisible, timeOut = 5000) { + async clickAndWaitElementVisible(xpath, elementToVisible, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { await this.app.client.click(xpath); await this.app.client.waitForVisible(elementToVisible, timeOut); } - async clickIfElementVisible(xpath, timeOut = 5000) { + async clickIfElementVisible(xpath, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { await this.app.client.waitForVisible(xpath, timeOut) .click(xpath) } @@ -185,18 +182,97 @@ class WebActions { async login(user) { await this.inputText(ui.SIGN_IN_EMAIL, user.username); await this.inputText(ui.SIGN_IN_PASSWORD, user.password); - await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON, ui.SETTTING_BUTTON, 60000); + await this.clickAndWaitElementVisible(ui.SIGN_IN_BUTTON, ui.SETTTING_BUTTON, constants.TIMEOUT_PAGE_LOAD); + await this.waitElementNotVisible(ui.SPINNER); } async persistToastIM() { - await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION, 5000); - await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB, 10000); - await this.clickAndWaitElementVisible(ui.PERSIS_NOTIFICATION_INPUT_IM, ui.PERSIS_NOTIFICATION_INPUT_IM, 5000); - + await this.clickAndWaitElementVisible(ui.SETTTING_BUTTON, ui.ALERT_OPTION); + await this.clickAndWaitElementVisible(ui.ALERT_OPTION, ui.ALERT_TAB); + await this.clickAndWaitElementVisible(ui.PERSIS_NOTIFICATION_INPUT_IM, ui.PERSIS_NOTIFICATION_INPUT_IM); } - async clickLeftNavItem(name) { - let xpath = await ui.LEFT_NAV_SINGLE_ITEM.replace("$$", name); - await this.clickAndWaitElementVisible(xpath,ui.HEADER_MODULE); + + async clickPlusButton() { + await this.clickIfElementVisible(ui.PLUS_BTN); + } + + async clickStartChat() { + await this.clickIfElementVisible(ui.START_CHAT); + } + + async selectIMTab() { + await this.clickIfElementVisible(ui.IM_TAB); + } + + async addParticipant(username) { + await this.inputText(ui.ADD_PARTICIPANT_TEXT, username); + await this.clickIfElementVisible(ui.USERS_SUGGESTION_LIST, 20000); + } + + async clickDoneButton() { + await this.clickIfElementVisible(ui.CREATE_IM_DONE_BTN); + await this.waitElementVisible(ui.HEADER_MODULE); + } + + async waitElementNotVisible(locator, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { + return await this.app.client.waitForVisible(locator, timeOut, true); + } + + async waitElementVisible(locator, timeOut = constants.TIMEOUT_WAIT_ELEMENT) { + return await this.app.client.waitForVisible(locator, timeOut); + } + + async mouseOver(locator) { + await this.app.client.moveToObject(locator); + } + + async createIM(username) { + await this.clickPlusButton(); + await this.clickStartChat(); + await this.selectIMTab(); + await this.addParticipant(username); + await this.clickDoneButton(); + } + + async clickPopOutIcon() { + let windowsActions = await new WindowsActions(this.app); + await this.mouseOver(ui.PIN_CHAT_MOD); + await Utils.sleep(2); //wait popout button clickable + await this.clickIfElementVisible(ui.POPOUT_BUTTON); + let index = await windowsActions.getWindowCount() - 1; + await windowsActions.windowByIndex(index); + await this.waitElementNotVisible(ui.SPINNER, constants.TIMEOUT_PAGE_LOAD); + } + + async clickInboxPopOutIcon() { + let windowsActions = await new WindowsActions(this.app); + await this.clickIfElementVisible(ui.POPOUT_INBOX_BUTTON); + let index = await windowsActions.getWindowCount() - 1; + await windowsActions.windowByIndex(index); + await this.waitElementNotVisible(ui.SPINNER, constants.TIMEOUT_PAGE_LOAD); + } + + async verifyPopInIconDisplay(windowTitle){ + let windowsActions = await new WindowsActions(this.app); + let index = await windowsActions.getWindowIndexFromTitle(windowTitle); + await windowsActions.windowByIndex(index); + await this.waitElementVisible(ui.POPIN_BUTTON, constants.TIMEOUT_WAIT_ELEMENT); + await windowsActions.windowByIndex(0); + } + + async clickInboxIcon() { + await this.clickIfElementVisible(ui.INBOX_BUTTON); + } + + async clickLeftNavItem(item){ + let singleItemLocator = ui.LEFT_NAV_SINGLE_ITEM.replace("$$",item); + await this.clickIfElementVisible(singleItemLocator); + } + + async logout(){ + await this.openAlertsSettings(); + await this.clickAndWaitElementVisible(ui.SIGNOUT, ui.SIGNOUT_MODAL_BUTTON); + await this.clickAndWaitElementVisible(ui.SIGNOUT_MODAL_BUTTON, ui.SIGN_IN_BUTTON, constants.TIMEOUT_PAGE_LOAD); } } diff --git a/tests/spectron/spectronWindowsActions.js b/tests/spectron/spectronWindowsActions.js index af620b18..03c9d877 100644 --- a/tests/spectron/spectronWindowsActions.js +++ b/tests/spectron/spectronWindowsActions.js @@ -7,7 +7,6 @@ const WebActions = require('./spectronWebActions.js') class WindowsActions { constructor(app) { this.app = app; - this.webAction = new WebActions(app); } async getCurrentSize() { @@ -68,6 +67,56 @@ class WindowsActions { }) } + async menuSearch(element, namevalue) { + if (element.name == namevalue) { + return await element; + } + else if (element.items !== undefined) { + var result; + for (var i = 0; result == null && i < element.items.length; i++) { + result = await this.menuSearch(element.items[i], namevalue); + result; + } + return await result; + } + return await null; + } + + async openMenu(arrMenu) { + var arrStep = []; + for (var i = 0; i < arrMenu.length; i++) { + var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); + await arrStep.push(item); + } + await this.actionForMenus(arrStep); + return arrStep; + } + + async actionForMenus(arrMenu) { + let webAction = await new WebActions(this.app); + await this.app.browserWindow.getBounds().then(async (bounds) => { + await robot.setMouseDelay(100); + let x = bounds.x + 95; + let y = bounds.y + 35; + await robot.moveMouseSmooth(x, y); + await robot.moveMouse(x, y); + await robot.mouseClick(); + await webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(200); + await robot.keyTap('enter'); + for (var i = 0; i < arrMenu.length; i++) { + for (var s = 0; s < arrMenu[i].step; s++) { + await robot.keyTap('down'); + } + if (arrMenu.length > 1 && i != arrMenu.length - 1) { + //handle right keygen + await robot.keyTap('right'); + } + } + await robot.keyTap('enter'); + }); + } + async verifyLogExported() { let expected = false; let path = await Utils.getFolderPath('Downloads'); @@ -112,6 +161,7 @@ class WindowsActions { } async selectMinimizeOnClose() { + let webAction = await new WebActions(this.app); await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); let x = bounds.x + 95; @@ -119,7 +169,7 @@ class WindowsActions { await robot.moveMouseSmooth(x, y); await robot.moveMouse(x, y); await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); + await webAction.openApplicationMenuByClick(); await robot.setKeyboardDelay(1000); await robot.keyTap('enter'); await robot.keyTap('down'); @@ -132,22 +182,8 @@ class WindowsActions { }); } - async menuSearch(element, namevalue) { - if (element.name == namevalue) { - return await element; - } - else if (element.items !== undefined) { - let result; - for (var i = 0; result == null && i < element.items.length; i++) { - result = await this.menuSearch(element.items[i], namevalue); - result; - } - return await result; - } - return await null; - } - - async actionForMenus(arrMenu) { + async quitApp() { + let webAction = await new WebActions(this.app); await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); let x = bounds.x + 95; @@ -155,22 +191,24 @@ class WindowsActions { await robot.moveMouseSmooth(x, y); await robot.moveMouse(x, y); await robot.mouseClick(); - await this.webAction.openApplicationMenuByClick(); - await robot.setKeyboardDelay(200); + await webAction.openApplicationMenuByClick(); + await robot.setKeyboardDelay(1000); await robot.keyTap('enter'); - for (var i = 0; i < arrMenu.length; i++) { - for (var s = 0; s < arrMenu[i].step; s++) { - await robot.keyTap('down'); - } - if (arrMenu.length > 1 && i != arrMenu.length - 1) { - //handle right keygen - await robot.keyTap('right'); - } + await robot.keyTap('down'); + await robot.keyTap('down'); + await robot.keyTap('right'); + for (let i = 0; i < 6; i++) { + await robot.keyTap('down'); } await robot.keyTap('enter'); }); } + async pressCtrlW() { + await robot.keyToggle('w', 'down', ['control']); + await robot.keyToggle('w', 'up', ['control']); + } + async verifyMinimizeWindows() { await this.app.browserWindow.isMinimized().then(async function (minimized) { await expect(minimized).toBeTruthy(); @@ -192,11 +230,6 @@ class WindowsActions { return rminimized; } - async pressCtrlW() { - await robot.keyToggle('w', 'down', ['control']); - await robot.keyToggle('w', 'up', ['control']); - } - async pressCtrlM() { await robot.keyToggle('m', 'down', ['control']); await robot.keyToggle('m', 'up', ['control']); @@ -212,16 +245,6 @@ class WindowsActions { this.app.browserWindow.setAlwaysOnTop(true); } - async openMenu(arrMenu) { - let arrStep = []; - for (var i = 0; i < arrMenu.length; i++) { - var item = await this.menuSearch(constants.MENU.root, arrMenu[i]); - await arrStep.push(item); - } - await this.actionForMenus(arrStep); - return arrStep; - } - async reload() { await this.app.browserWindow.getBounds().then(async (bounds) => { await robot.setMouseDelay(100); @@ -337,6 +360,69 @@ class WindowsActions { await expect(expected).toBeTruthy(); } + async getWindowIndexFromTitle(windowTitle) { + let winCount = await this.getWindowCount(); + if (winCount > 1) { + for (let j = 1; j < winCount; j++) { + await this.windowByIndex(j); + + //wait 120s for title loading + let title = await this.app.browserWindow.getTitle(); + for (let i = 1; i <= 120; i++) { + if (title != "Symphony") { + break; + } + await Utils.sleep(1); + title = await this.app.browserWindow.getTitle();; + } + + if (title === windowTitle) { + await this.windowByIndex(0); + return j; + } + } + } + await this.windowByIndex(0); + return 0; + } + + async windowByIndex(index) { + await this.app.client.windowByIndex(index); + } + + async getWindowCount() { + return await this.app.client.getWindowCount(); + } + + async bringToFront(windowTitle) { + let index = await this.getWindowIndexFromTitle(windowTitle); + await this.windowByIndex(index); + await this.app.browserWindow.minimize(); + await this.app.browserWindow.restore(); + } + + async verifyWindowFocus(windowTitle) { + let index = await this.getWindowIndexFromTitle(windowTitle); + await this.windowByIndex(index); + expect(await this.app.browserWindow.isFocused()).toBeTruthy(); + await this.windowByIndex(0); + } + + async verifyPopOutWindowAppear(windowTitle) { + let index = await this.getWindowIndexFromTitle(windowTitle); + expect(index).toBeGreaterThan(0); + } + + async closeAllPopOutWindow() { + let winCount = await this.getWindowCount(); + while (winCount > 1) { + await this.windowByIndex(winCount - 1); + await this.app.browserWindow.close(); + await Utils.sleep(2); + winCount = await this.getWindowCount(); + } + await this.windowByIndex(0); + } } module.exports = WindowsActions; diff --git a/tests/spectron/toastMouseHoveringForIM.spectron.js b/tests/spectron/toastMouseHoveringForIM.spectron.js index 5f138611..2650d0ff 100644 --- a/tests/spectron/toastMouseHoveringForIM.spectron.js +++ b/tests/spectron/toastMouseHoveringForIM.spectron.js @@ -14,8 +14,9 @@ const ifc = require('./spectronInterfaces.js'); let webActions, windowAction; !isMac? describe('Verify toast notification for IMs', () => { - jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); - let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + let originalTimeout = specconst.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = specconst.TIMEOUT_TEST_SUITE; + beforeAll(async(done) => { try { diff --git a/tests/spectron/turnONPersistentToast.spectron.js b/tests/spectron/turnONPersistentToast.spectron.js index 0e8bb0a0..9c9dcce5 100644 --- a/tests/spectron/turnONPersistentToast.spectron.js +++ b/tests/spectron/turnONPersistentToast.spectron.js @@ -14,8 +14,9 @@ const specconst = require('./spectronConstants.js'); let webActions, windowAction; !isMac ? describe('Verify toast notification when Persist Notification is ON', () => { - jasmine.DEFAULT_TIMEOUT_INTERVAL = Application.getTimeOut(); let originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; + jasmine.DEFAULT_TIMEOUT_INTERVAL = specconst.TIMEOUT_TEST_SUITE; + beforeAll(async(done) => { try { From 924ae9bb6fd81d8cd03393124d5ea4f92185fab5 Mon Sep 17 00:00:00 2001 From: Keerthi Niranjan Date: Tue, 14 Aug 2018 10:21:30 +0530 Subject: [PATCH 20/20] SEARCH-905 - Electron "child_process" promisify issue (#462) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 728fa03b..73df5aa5 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "browserify": "16.2.2", "chromedriver": "2.40.0", "cross-env": "5.2.0", - "electron": "2.0.6", + "electron": "2.0.7", "electron-builder": "20.16.4", "electron-builder-squirrel-windows": "12.3.0", "electron-chromedriver": "2.0.0", @@ -134,6 +134,6 @@ }, "optionalDependencies": { "screen-snippet": "git+https://github.com/symphonyoss/ScreenSnippet.git#v1.0.2", - "swift-search": "1.0.4" + "swift-search": "1.0.5" } }