From 7b24f05f22977ca71b7849b3e181636428aa0445 Mon Sep 17 00:00:00 2001 From: shadowusr Date: Sun, 29 Sep 2024 01:10:01 +0300 Subject: [PATCH 1/4] chore(new-ui): tweak attempt picker design --- lib/static/new-ui.css | 1 + .../components/AttemptPicker/index.module.css | 14 ++++++++++++++ .../new-ui/components/AttemptPicker/index.tsx | 13 +++++++------ .../components/AttemptPickerItem/index.module.css | 14 +++++++++++++- .../suites/components/SuitesPage/index.module.css | 3 ++- lib/static/styles.css | 4 ++-- 6 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 lib/static/new-ui/components/AttemptPicker/index.module.css diff --git a/lib/static/new-ui.css b/lib/static/new-ui.css index 6ed97b89b..0ebc24313 100644 --- a/lib/static/new-ui.css +++ b/lib/static/new-ui.css @@ -15,6 +15,7 @@ .g-root { --g-font-family-sans: 'Jost', sans-serif; --g-color-base-background: #eee; + --g-color-text-danger-heavy: #e9043a; } body { diff --git a/lib/static/new-ui/components/AttemptPicker/index.module.css b/lib/static/new-ui/components/AttemptPicker/index.module.css new file mode 100644 index 000000000..836cf7f1c --- /dev/null +++ b/lib/static/new-ui/components/AttemptPicker/index.module.css @@ -0,0 +1,14 @@ +.container { + display: flex; + gap: 16px; +} + +.heading { + line-height: 28px; +} + +.attempts-container { + display: flex; + flex-wrap: wrap; + gap: 4px; +} diff --git a/lib/static/new-ui/components/AttemptPicker/index.tsx b/lib/static/new-ui/components/AttemptPicker/index.tsx index 51d314459..9153809b0 100644 --- a/lib/static/new-ui/components/AttemptPicker/index.tsx +++ b/lib/static/new-ui/components/AttemptPicker/index.tsx @@ -1,9 +1,10 @@ -import {Flex} from '@gravity-ui/uikit'; import React, {ReactNode} from 'react'; import {connect} from 'react-redux'; import {State} from '@/static/new-ui/types/store'; import {AttemptPickerItem} from '@/static/new-ui/components/AttemptPickerItem'; +import styles from './index.module.css'; +import classNames from 'classnames'; interface AttemptPickerProps { onChange?: (browserId: string, resultId: string, attemptIndex: number) => unknown; @@ -26,9 +27,9 @@ function AttemptPickerInternal(props: AttemptPickerInternalProps): ReactNode { props.onChange?.(props.browserId, resultId, attemptIndex); }; - return -

Attempts

- + return
+

Attempts

+
{resultIds.map((resultId, index) => { const isActive = resultId === currentResultId; @@ -39,8 +40,8 @@ function AttemptPickerInternal(props: AttemptPickerInternalProps): ReactNode { onClick={(): unknown => onClickHandler(resultId, index)} />; })} - - ; +
+
; } export const AttemptPicker = connect((state: State) => { diff --git a/lib/static/new-ui/components/AttemptPickerItem/index.module.css b/lib/static/new-ui/components/AttemptPickerItem/index.module.css index a3ccbe947..915cd7906 100644 --- a/lib/static/new-ui/components/AttemptPickerItem/index.module.css +++ b/lib/static/new-ui/components/AttemptPickerItem/index.module.css @@ -1,9 +1,10 @@ .attempt-picker-item { - --g-button-padding: 8px; + width: 28px; } .attempt-picker-item--active { --g-button-border-width: 1px; + box-shadow: 0px 1px 3px 0px var(--box-shadow-color); } .attempt-picker-item--staged { @@ -16,10 +17,21 @@ border-color: rgba(207, 231, 252, 1); } +.attempt-picker-item--success { + --box-shadow-color: #21a95661; +} + +.attempt-picker-item--error { + --box-shadow-color: #ff004b61; +} + .attempt-picker-item--fail { + --g-button-text-color-hover: #c522ff; + --g-button-background-color-hover: #cf49ff4f; --g-button-background-color: var(--color-pink-100); --g-button-text-color: var(--color-pink-600); --g-button-border-color: var(--color-pink-600); + --box-shadow-color: #cf49ff61; } .attempt-picker-item--fail_error { diff --git a/lib/static/new-ui/features/suites/components/SuitesPage/index.module.css b/lib/static/new-ui/features/suites/components/SuitesPage/index.module.css index aed678de5..9772c4203 100644 --- a/lib/static/new-ui/features/suites/components/SuitesPage/index.module.css +++ b/lib/static/new-ui/features/suites/components/SuitesPage/index.module.css @@ -39,5 +39,6 @@ position: sticky; top: 0; z-index: 10; - padding-bottom: 4px; + padding-bottom: 8px; + border-bottom: 1px solid #eee; } diff --git a/lib/static/styles.css b/lib/static/styles.css index 92bc3a233..44eccd00e 100644 --- a/lib/static/styles.css +++ b/lib/static/styles.css @@ -950,8 +950,8 @@ h1, h2, h3, h4, h5, h6 { .text-header-1 { font-family: Jost, sans-serif; - font-weight: 500; - font-size: var(--g-text-header-1-font-size); + font-weight: 450; + font-size: 18px; line-height: var(--g-text-header-1-line-height); } From 4b8ec1d8eb3ba4c11cc189b0e03a6edc96f7b68d Mon Sep 17 00:00:00 2001 From: shadowusr Date: Mon, 30 Sep 2024 01:06:34 +0300 Subject: [PATCH 2/4] chore(new-ui): basic test running implementation --- lib/constants/features.ts | 7 +++++ lib/constants/index.ts | 1 + lib/static/modules/default-state.ts | 1 + lib/static/modules/reducers/gui.js | 4 ++- lib/static/new-ui.css | 5 ++++ lib/static/new-ui/app/gui.tsx | 30 ++++++++++++++++++- .../components/AttemptPicker/index.module.css | 7 +++++ .../new-ui/components/AttemptPicker/index.tsx | 26 ++++++++++++++-- .../SuitesTreeView/index.module.css | 2 ++ .../new-ui/features/suites/selectors.ts | 11 ++++++- lib/static/new-ui/types/store.ts | 4 ++- lib/static/new-ui/utils/index.tsx | 6 +++- lib/static/styles.css | 7 +++-- 13 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 lib/constants/features.ts diff --git a/lib/constants/features.ts b/lib/constants/features.ts new file mode 100644 index 000000000..0fa9ddc4f --- /dev/null +++ b/lib/constants/features.ts @@ -0,0 +1,7 @@ +export interface Feature { + name: string; +} + +export const RunTestsFeature = { + name: 'run-tests' +} as const satisfies Feature; diff --git a/lib/constants/index.ts b/lib/constants/index.ts index da621fc00..68992a17e 100644 --- a/lib/constants/index.ts +++ b/lib/constants/index.ts @@ -3,6 +3,7 @@ export * from './database'; export * from './defaults'; export * from './diff-modes'; export * from './errors'; +export * from './features'; export * from './group-tests'; export * from './paths'; export * from './tests'; diff --git a/lib/static/modules/default-state.ts b/lib/static/modules/default-state.ts index 9ca2b983e..861b8b847 100644 --- a/lib/static/modules/default-state.ts +++ b/lib/static/modules/default-state.ts @@ -94,6 +94,7 @@ export default Object.assign({config: configDefaults}, { }, app: { isInitialized: false, + availableFeatures: [], suitesPage: { currentBrowserId: null }, diff --git a/lib/static/modules/reducers/gui.js b/lib/static/modules/reducers/gui.js index e3fd36747..28ddca750 100644 --- a/lib/static/modules/reducers/gui.js +++ b/lib/static/modules/reducers/gui.js @@ -1,9 +1,11 @@ import actionNames from '../action-names'; +import {applyStateUpdate} from '@/static/modules/utils/state'; +import {RunTestsFeature} from '@/constants'; export default (state, action) => { switch (action.type) { case actionNames.INIT_GUI_REPORT: { - return {...state, gui: true}; + return applyStateUpdate(state, {gui: true, app: {availableFeatures: [RunTestsFeature]}}); } case actionNames.INIT_STATIC_REPORT: { diff --git a/lib/static/new-ui.css b/lib/static/new-ui.css index 0ebc24313..d10c3af8f 100644 --- a/lib/static/new-ui.css +++ b/lib/static/new-ui.css @@ -38,3 +38,8 @@ body { .gn-aside-header__header:after { display: none; } + +.action-button { + font-size: 15px; + font-weight: 450; +} diff --git a/lib/static/new-ui/app/gui.tsx b/lib/static/new-ui/app/gui.tsx index 5c9f3682f..7bf236f85 100644 --- a/lib/static/new-ui/app/gui.tsx +++ b/lib/static/new-ui/app/gui.tsx @@ -1,15 +1,43 @@ import React, {ReactNode, useEffect} from 'react'; import {createRoot} from 'react-dom/client'; + +import {ClientEvents} from '@/gui/constants'; import {App} from './App'; import store from '../../modules/store'; -import {finGuiReport, initGuiReport} from '../../modules/actions'; +import {finGuiReport, initGuiReport, suiteBegin, testBegin, testResult, testsEnd} from '../../modules/actions'; const rootEl = document.getElementById('app') as HTMLDivElement; const root = createRoot(rootEl); function Gui(): ReactNode { + const subscribeToEvents = (): void => { + const eventSource = new EventSource('/events'); + + eventSource.addEventListener(ClientEvents.BEGIN_SUITE, (e) => { + const data = JSON.parse(e.data); + store.dispatch(suiteBegin(data)); + }); + + eventSource.addEventListener(ClientEvents.BEGIN_STATE, (e) => { + const data = JSON.parse(e.data); + store.dispatch(testBegin(data)); + }); + + [ClientEvents.TEST_RESULT, ClientEvents.ERROR].forEach((eventName) => { + eventSource.addEventListener(eventName, (e) => { + const data = JSON.parse(e.data); + store.dispatch(testResult(data)); + }); + }); + + eventSource.addEventListener(ClientEvents.END, () => { + store.dispatch(testsEnd()); + }); + }; + useEffect(() => { store.dispatch(initGuiReport()); + subscribeToEvents(); return () => { store.dispatch(finGuiReport()); diff --git a/lib/static/new-ui/components/AttemptPicker/index.module.css b/lib/static/new-ui/components/AttemptPicker/index.module.css index 836cf7f1c..0dbcea499 100644 --- a/lib/static/new-ui/components/AttemptPicker/index.module.css +++ b/lib/static/new-ui/components/AttemptPicker/index.module.css @@ -12,3 +12,10 @@ flex-wrap: wrap; gap: 4px; } + +.retry-button { + composes: action-button from global; + margin-left: auto; + /* Sets spinner color */ + --g-color-line-brand: var(--g-color-text-hint); +} diff --git a/lib/static/new-ui/components/AttemptPicker/index.tsx b/lib/static/new-ui/components/AttemptPicker/index.tsx index 9153809b0..9cbcdd155 100644 --- a/lib/static/new-ui/components/AttemptPicker/index.tsx +++ b/lib/static/new-ui/components/AttemptPicker/index.tsx @@ -1,10 +1,15 @@ import React, {ReactNode} from 'react'; -import {connect} from 'react-redux'; +import {connect, useDispatch, useSelector} from 'react-redux'; +import {ArrowRotateRight} from '@gravity-ui/icons'; import {State} from '@/static/new-ui/types/store'; import {AttemptPickerItem} from '@/static/new-ui/components/AttemptPickerItem'; import styles from './index.module.css'; import classNames from 'classnames'; +import {Button, Icon, Spin} from '@gravity-ui/uikit'; +import {RunTestsFeature} from '@/constants'; +import {retryTest} from '@/static/modules/actions'; +import {getCurrentBrowser} from '@/static/new-ui/features/suites/selectors'; interface AttemptPickerProps { onChange?: (browserId: string, resultId: string, attemptIndex: number) => unknown; @@ -19,7 +24,13 @@ interface AttemptPickerInternalProps extends AttemptPickerProps { function AttemptPickerInternal(props: AttemptPickerInternalProps): ReactNode { const {resultIds, currentResultId} = props; - const onClickHandler = (resultId: string, attemptIndex: number): void => { + const dispatch = useDispatch(); + const currentBrowser = useSelector(getCurrentBrowser); + const isRunTestsAvailable = useSelector((state: State) => state.app.availableFeatures) + .find(feature => feature.name === RunTestsFeature.name); + const isRunning = useSelector((state: State) => state.running); + + const onAttemptPickHandler = (resultId: string, attemptIndex: number): void => { if (!props.browserId || currentResultId === resultId) { return; } @@ -27,6 +38,12 @@ function AttemptPickerInternal(props: AttemptPickerInternalProps): ReactNode { props.onChange?.(props.browserId, resultId, attemptIndex); }; + const onRetryTestHandler = (): void => { + if (currentBrowser) { + dispatch(retryTest({testName: currentBrowser.parentId, browserName: currentBrowser.name})); + } + }; + return

Attempts

@@ -37,10 +54,13 @@ function AttemptPickerInternal(props: AttemptPickerInternalProps): ReactNode { key={resultId} resultId={resultId} isActive={isActive} - onClick={(): unknown => onClickHandler(resultId, index)} + onClick={(): unknown => onAttemptPickHandler(resultId, index)} />; })}
+ {isRunTestsAvailable && }
; } diff --git a/lib/static/new-ui/features/suites/components/SuitesTreeView/index.module.css b/lib/static/new-ui/features/suites/components/SuitesTreeView/index.module.css index 396a611c8..ca9f84b1a 100644 --- a/lib/static/new-ui/features/suites/components/SuitesTreeView/index.module.css +++ b/lib/static/new-ui/features/suites/components/SuitesTreeView/index.module.css @@ -55,6 +55,8 @@ .tree-view__item--current { background: #a28aff !important; color: #fff !important; + /* Sets spinner color */ + --g-color-line-brand: #fff; } .tree-view__item__title--current { diff --git a/lib/static/new-ui/features/suites/selectors.ts b/lib/static/new-ui/features/suites/selectors.ts index c662f47a0..04ab133b8 100644 --- a/lib/static/new-ui/features/suites/selectors.ts +++ b/lib/static/new-ui/features/suites/selectors.ts @@ -1,4 +1,13 @@ -import {ImageEntity, ResultEntity, State} from '@/static/new-ui/types/store'; +import {BrowserEntity, ImageEntity, ResultEntity, State} from '@/static/new-ui/types/store'; + +export const getCurrentBrowser = (state: State): BrowserEntity | null => { + const browserId = state.app.suitesPage.currentBrowserId; + if (!browserId) { + return null; + } + + return state.tree.browsers.byId[browserId]; +}; export const getCurrentResultId = (state: State): string | null => { const browserId = state.app.suitesPage.currentBrowserId; diff --git a/lib/static/new-ui/types/store.ts b/lib/static/new-ui/types/store.ts index f374849a2..42d5c81bb 100644 --- a/lib/static/new-ui/types/store.ts +++ b/lib/static/new-ui/types/store.ts @@ -1,4 +1,4 @@ -import {DiffModeId, TestStatus, ViewMode} from '@/constants'; +import {DiffModeId, Feature, TestStatus, ViewMode} from '@/constants'; import {BrowserItem, ImageFile, ReporterConfig, TestError, TestStepCompressed} from '@/types'; import {HtmlReporterValues} from '@/plugin-api'; import {CoordBounds} from 'looks-same'; @@ -132,6 +132,7 @@ export interface TreeEntity { export interface State { app: { isInitialized: boolean; + availableFeatures: Feature[], suitesPage: { currentBrowserId: string | null; }; @@ -155,6 +156,7 @@ export interface State { keyToGroupTestsBy: string; baseHost: string; }; + running: boolean; apiValues: HtmlReporterValues; config: ReporterConfig; } diff --git a/lib/static/new-ui/utils/index.tsx b/lib/static/new-ui/utils/index.tsx index 96bd298fb..39d6c08d6 100644 --- a/lib/static/new-ui/utils/index.tsx +++ b/lib/static/new-ui/utils/index.tsx @@ -1,7 +1,9 @@ -import {TestStatus} from '@/constants'; import {ArrowRotateLeft, CircleCheck, CircleDashed, CircleMinus, CircleXmark, ArrowsRotateLeft} from '@gravity-ui/icons'; +import {Spin} from '@gravity-ui/uikit'; import React from 'react'; +import {TestStatus} from '@/constants'; + export const getIconByStatus = (status: TestStatus): React.JSX.Element => { if (status === TestStatus.FAIL || status === TestStatus.ERROR) { return ; @@ -13,6 +15,8 @@ export const getIconByStatus = (status: TestStatus): React.JSX.Element => { return ; } else if (status === TestStatus.UPDATED) { return ; + } else if (status === TestStatus.RUNNING) { + return ; } return ; diff --git a/lib/static/styles.css b/lib/static/styles.css index 44eccd00e..5fa41a936 100644 --- a/lib/static/styles.css +++ b/lib/static/styles.css @@ -858,15 +858,16 @@ a:active { } .g-root_theme_light { - --g-color-base-brand: var(--g-color-private-color-400); - --g-color-base-brand-hover: var(--g-color-private-color-150); + --g-color-base-brand: var(--g-color-private-color-550-solid); + --g-color-base-brand-hover: var(--g-color-private-color-450-solid); --g-color-base-selection: var(--g-color-private-color-100); --g-color-base-selection-hover: var(--g-color-private-color-150); - --g-color-line-brand: var(--g-color-private-color-200); + --g-color-line-brand: var(--g-color-private-color-500); --g-color-text-brand: var(--g-color-private-color-300); --g-color-text-link: var(--g-color-private-color-300); --g-color-text-link-hover: var(--g-color-private-color-500); --gn-aside-header-decoration-collapsed-background-color: var(--g-color-private-color-150); + --g-color-text-brand-contrast: var(--g-color-private-color-50-solid); --g-color-private-color-50: rgba(108,71,255,0.1); --g-color-private-color-100: rgba(108,71,255,0.15); From 9c8500ba8fab1500fa50b8f5abcdbce884b95811 Mon Sep 17 00:00:00 2001 From: shadowusr Date: Wed, 9 Oct 2024 00:04:04 +0300 Subject: [PATCH 3/4] test: update screenshots --- .../screens/0049570/chrome/retry-switcher.png | Bin 532 -> 934 bytes .../screens/07c99c0/chrome/retry-switcher.png | Bin 532 -> 931 bytes .../screens/1361a92/chrome/retry-selector.png | Bin 304 -> 320 bytes .../screens/42ea26d/chrome/retry-selector.png | Bin 271 -> 278 bytes .../screens/45b9477/chrome/retry-switcher.png | Bin 508 -> 895 bytes .../screens/67cd8d8/chrome/retry-switcher.png | Bin 508 -> 892 bytes .../screens/d90f7de/chrome/retry-selector.png | Bin 285 -> 307 bytes .../screens/ff4deba/chrome/retry-selector.png | Bin 271 -> 278 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/func/tests/screens/0049570/chrome/retry-switcher.png b/test/func/tests/screens/0049570/chrome/retry-switcher.png index 22ebec71de106b8f77e8d585aca29dce49dd1dbb..59e28a8ef5427e23b2e29e07a9febcf600f6f737 100644 GIT binary patch delta 926 zcmV;P17ZA>1f~ZeiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*;)a zL_t(|oV}OdOH*MO$M+A}MNl_^-Udn0AD}4hBJ?KA(g;aQ?P3s8TVmGKjF_?%OKnbT zu_7upZH~F6TW52VZO0vVc7D9){khm?>iPkj?)37#IdFJByw7tu&-ZJ{79YkK%QDI+ zIg%)&tWcx)7>XEKhADv*0|FHce`E|Kq)NC1Ayvje!2l2lDaMqrEc*+FF-91L6w4S) zti8K5)?00EsxsA;rD}7Nas2L-*DYfJDJG2WU(0Zafig(xa16H1_D}jhtneXD;mgtr zADUQye{JSrm(!X-3Z!VCl*7>cJa13_4o|apk`$Mx<8^?Ml{U0iYvHRS{@w+Ka)Cgi( zW(X@hATX|`s?AMDm@Irr#PpYieXv@V#lkFVOiu3yNBb5E}6f;p`IFH`5OZ8~C}t~z_)jn-J2?LN1T zn3iet#o-$lhT5kBA9Zh<&FebVXY>k@3S+!NWMJ{tcX7M$_(Msaf4tW?|Kn?gF#$1l z#(cSRekdTu{OM?qYxIoyvOgWIeA67ErCRIt6Q=qTrutgzbw_AP$JuyxIL{7O%9|DV z1h}JM{==`6Q~1In&||Gd_7}l6*e$HJMqAIs`uj>@>^}FUvEGBVCLt9Nm;l1FRY&Wz zrBaxdR}Y?lb0&bWf48JrmO+XInAyxkJLU%Oycs?|qibR4mh;J`7!|Y(q&R0e7|R)2 zIp4QHI@0B|woY5@KKBYAJi=tF93wAvL9m2_VE2eoIbExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*IueNQ@r5Z4k~!R5OEFcpg0?bnZ& zY?(@lK}DM<@49gcR2{YKUtZ9>cL8~(H0+t*zIQRAf^6D7zhukQHP;TEe|?w8a9MNh zP~oP@ZF?7?)U^Nq|KE1~c-rbt`>EN)RN3}Zv(r|0?znLhUS$IS{78y3&>{1e00000 LNkvXXu0mjf1#Sf1 diff --git a/test/func/tests/screens/07c99c0/chrome/retry-switcher.png b/test/func/tests/screens/07c99c0/chrome/retry-switcher.png index 22ebec71de106b8f77e8d585aca29dce49dd1dbb..d645a380e91981fe9df995db9e2cf28333547d76 100644 GIT binary patch delta 923 zcmV;M17!S^1fvHbiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*;xX zL_t(|oV}OJPZLoT#`_Q9!bCSDxHXYz`~xr&x*)hQ2!b(0P{2hKL$sA3QeMUsQXwc{ zsX$FJMg&AlQ(B>QT3XU}=+Nmr?%cVLnzp>^BWZEQn{PA8%(N@_T` zw9bYmHkX=bo_08`8C8NrJtE~WB!7=I6xtm9ovx8`t24jp{=#s()0&0?e(HIlp zW0mIm_IHB;KITtHyIiA{=6ZiRs(sTOq19^Z?K7rpXH3_st+ySaRUK#J*<(C=Oet?_ z@Ch)d!Tg6`CnK?iMWDx8iySS2U9ewRYqhqniOnUgFm|82Zmj!wtqH0OFiZgM#aBnu zv_&gS+&xG)o~t9L#KIqHS~i4;F_0ozXErc+WYo%||&U0}0Am4oY)| zR?PP;kdAaXtxeMwyU)GO22U{$yU%^|_2aJjVgG)3SKd1|Pz5`vU^NZJun_lfLF?Mg zbz5hZrF?U1X}E6d99p0Cq=FGKQLuvrGkt7s6%6;G5R=#~aXz}ih1S@>3cIExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*IueNQ@r5Z4k~!R5OEFcpg0?bnZ& zY?(@lK}DM<@49gcR2{YKUtZ9>cL8~(H0+t*zIQRAf^6D7zhukQHP;TEe|?w8a9MNh zP~oP@ZF?7?)U^Nq|KE1~c-rbt`>EN)RN3}Zv(r|0?znLhUS$IS{78y3&>{1e00000 LNkvXXu0mjf|3n1a diff --git a/test/func/tests/screens/1361a92/chrome/retry-selector.png b/test/func/tests/screens/1361a92/chrome/retry-selector.png index f446cdd2f5d4e720007e57eeaaeca3fb31fb53a7..2e291679c9e967bc9f75422ee1fa14a6edd5be35 100644 GIT binary patch delta 307 zcmV-30nGle0>ALKFlg({Ir{`HSMAPF+(vHOv$ePHtqW;9ba->mjQsKkXr#u%kzBK@q^ZAAJ?$0u|l z+{eYVg>VxzR02v&3nGp{7Jl7Qe|qQ-Cv!iGQ3NYuMyEUSlxTC@u5`YJ+c^w6@tsnu zmal%~%7v~of}@v%3Wd*MCBziaxhP#gM^#*D&0CysCt zQxX;pBc43bfRiQC*G4C36f29b9~UjQRyx-Dh=PB64trx<9NhQ2KL7v#2>?k&PDHLk FV1h+Jg~tE@ delta 290 zcmV+-0p0$<0+gvg}*NM8u@xDS1kL`qgqrnL2RRI)Sh`_)9(q2^6(c_ zLrF|VC4{1j)wVCF1YOYM40?jwUXp}XYeZxCLwExea}t_Ou^HjAprTjb)pA8erOqGq ze)v!2!vwuTV=`LpzA#Q?4`mB7YR>hDCN^shfNhqEl7vQXnXoO&UVH9Wm$zo{aFX%> O0000O+gUpqCXI77eb*GEt5P+YD+;BGC_1< zcx082OhU*IhG81$3S5BG*D358(~JmYCx$NHvZv_MD)gR}AAUqRZ)y>CF*QiI`A`CJ z7T`0G9H%xv?#~;j6>fWf-yM-IR}s$<&CqWBeYHliz-1@(*Vt8Ykb3S<@%Pa;?~eoD zFMrWhLm-*gradpH2ElNdLM618IlFJX6qv00000NkvXX Hu0mjfZ18DG diff --git a/test/func/tests/screens/45b9477/chrome/retry-switcher.png b/test/func/tests/screens/45b9477/chrome/retry-switcher.png index 8bef028a3aa7e935015f000348a36140ad079a3d..c3911945b16be03537cb656f149a211145c52bfb 100644 GIT binary patch delta 887 zcmV--1Bm?m1OEmgiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*-Z| zL_t(|oW+;RPZL2L$NLX)^Wa5Hyy?xG9!Ma-r6$G@2+;%u<&oHfL0i!fpeR8gJR;Is z8xT{75fM>J+7f8(6WcCb+V1Sm&aMq&8cB=i;+UclRIB-G$+H`(P4Dh!MtFe-^{i*?9m0 zCpO-;TKi7U@aNQQF->hQ0s^yh;#^0gT%|anrs~GKXFSWNg_(3Y8YX%YYD%S;XSfar z7^EnwB&v=2W6Z<<$2ob=o32Hb1f+;@rbFMDOkhM7sth%!#qj4;WvGeBf=pDJ#{dFD zAg%=_D8&GQ1&oB1fE3jNe-n_R5>|dLn_1!tXa&}WN8P2bte4M>9a$6HjQCq3V#r`Ja zhZzkqJ`iu5x?elqa8TF2k zb5jiFb@~`Dh#j>{zos|MU!MLK2LFSnGf*%BEo?1VGy?p+U~6?_UDNKryoTj#(&eZh z?>?|K3bH00gW|{+Tl1Xhv@lJt9*usr$Dmj+X`bPT5fP<#(&4r@{r48kCuelb58bg3 z?4-h?nnsLdBM0Y&e*hJcg{@?;!#>zNXPR_5)&=h|<}vAV+?ajXH9zdx59}&?2LUP{ z2UUub2n3|)hUgt!v(%1tR+}mhwe(K`b8!^I`fR+^Q7qBPk*a+o`Zq z^sNb7tAcwa?kZEOf_qKaa*Dp~RCrh3OCq3BM01hz*Ql;iO)Oz0p{8O`jL1R=!~;^a zOoc!^A`3AnCe)OK6_p+Y=#t{WdA8ONPF0FeUOciz=TOTj={MTds2>G|+&g2VqjLZN N002ovPDHLkV1n@ep2YwF delta 497 zcmVExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*Iuei+_rZSN=^I!|Nm{*kEgBfw4a(y nOqFdvH9Ku}=Z+gE;Z-&O6$00000NkvXXu0mjfhT-;D diff --git a/test/func/tests/screens/67cd8d8/chrome/retry-switcher.png b/test/func/tests/screens/67cd8d8/chrome/retry-switcher.png index 8bef028a3aa7e935015f000348a36140ad079a3d..7c3afc6cefd4ee3a7afe21aef58803c0d32aa38d 100644 GIT binary patch delta 884 zcmV-)1B?9p1N;UdiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*-Q_ zL_t(|oW+;RPZL2L$NLX)^Wa5Hyy?xG9!Ma-r6$G@2+;%u<&nt2psi>KP?R7gJR;Is z8xT{75fM>J+7f8(6WcCb+V1Sm&aL#W=OO2nfv1iE|x|a+TtQnyNE*&v=$Ag_(3Y8YX%YYD%S;XSfar z7^EnwB&rSi6U@W^$2ob=8?Qx`1f+;@rbFMDOkhM7s(NcG#qj4;)msyh1(~Qcj{yXR zKwJw

KNp3m6G20V%2lemk-1>#I#uZFPm<;lOe5cTJGsJT^elO*z=e2e?uq4^u3=tXV5!B z&P_3xSLHEY5Ib&{eob$hzcl?X4E_gCXP{sNTG(3fzzFd7g00n!cTKzh@*0+|NtdJE z+nJXPk67)&=hg<}vAV+?ajXH9z9n59}&?hXE=d z2UUub2n3|)hUgtyv(%1vRvXI?w?=*Kc&BOIx{>e(K`b8!^I`fh+^Q7qBPk*a+o`Zq z^sNb7tAcwa?kZ8Mf_qKaa*Dp~RCrh3OCq3BM01hz*Ql;iN-SX|p{8O`jL1R=!~;^a zM1?>+A`3AnCe)OK6_p+a=%V7mdA8P6s(56J&XJZ=)Niz_Q9l3%_S`-Gk(3Sq0000< KMNUMnLSTZu(3L*` delta 497 zcmVExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*Iuei+_rZSN=^I!|Nm{*kEgBfw4a(y nOqFdvH9Ku}=Z+gE;Z-&O6$00000NkvXXu0mjffe!Xn diff --git a/test/func/tests/screens/d90f7de/chrome/retry-selector.png b/test/func/tests/screens/d90f7de/chrome/retry-selector.png index e9cbb1c303279fcd8052bf8d472867d6544ab052..6274f4e577a847cc3c9be886f057f78b586a6e96 100644 GIT binary patch delta 293 zcmV+=0owkZ0 zVb$c{r>{}R(7%^%--xR|Ea$eDd(-sW?vvCp^l8VuiyoOj4xXc?p}&q_{(tk)pK~{< zY3P428Z~t92oBT#M51d$%Fw&iE~IZgra^V`@HxZ(&tIu*=*Q3CDw>Lpefs+Uzkgsu rfByP^`!N+vy!{x|n1C8e?Pd=Ep@vD5dZ@u^00000NkvXXu0mjfq}hs{ delta 271 zcmV+q0r38_0-XXOiBL{Q4GJ0x0000DNk~Le0000L0000S2m$~A00DYq36UWff6qxo zK~#90WB3mTpT7Qo_U8ZHr~hw0!inxa1*!S;6|RW^MEw5q|H&(S+Az_RS0G(b{f}Od zrWt}By#VX~_=OzJ5cKg21IaE&^#ucg0K<>&K4l(+`IiTV9 zpThL}pZ5CiQdoXGp|Je={FQwDpTC03Z}Ob*^fj#f|M~0x?Z>2PzWo@f{-B`#0stwS VGkpBEDQ*A&002ovPDHLkV1gIqjyV7T diff --git a/test/func/tests/screens/ff4deba/chrome/retry-selector.png b/test/func/tests/screens/ff4deba/chrome/retry-selector.png index c6d69f136b7c7090f9aef681dbcbd6a2f96bfb49..5759bd8a9e6ba7c1839a190600392719f18af1cc 100644 GIT binary patch delta 264 zcmV+j0r&oo0+s?HiBL{Q4GJ0x0000DNk~Le0000S0000S2m$~A0R3-B!;v8vf5=Hh zK~#90?bb~S!Y~j8;2g^L`qgqrnL2RRI)Sh`_)9(q2^6(c_ zLrF|VC4{1j)wVCF1YOYM40?jwUXp}XYeZxCLwExea}t_Ou^HjAprTjb)pA8erOqGq ze)v!2!vwuTV=`LpzA#Q?4`mB7YR>hDCN^shfNhqEl7vQXnXoO&UVH9Wm$zo{aFX%> O0000O+gUpqCXI77eb*GEt5P+YD+;BGC_1< zcx082OhU*IhG81$3S5BG*D358(~JmYCx$NHvZv_MD)gR}AAUqRZ)y>CF*QiI`A`CJ z7T`0G9H%xv?#~;j6>fWf-yM-IR}s$<&CqWBeYHliz-1@(*Vt8Ykb3S<@%Pa;?~eoD zFMrWhLm-*gradpH2ElNdLM618IlFJX6qv00000NkvXX Hu0mjfZ18DG From e7253c5401cefcb40caed799d0e8f812dc93d76a Mon Sep 17 00:00:00 2001 From: shadowusr Date: Wed, 9 Oct 2024 00:17:42 +0300 Subject: [PATCH 4/4] test: update screenshots --- .../screens/1bb949f/chrome/retry-switcher.png | Bin 532 -> 930 bytes .../screens/bdf4a21/chrome/retry-switcher.png | Bin 508 -> 895 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/func/tests/screens/1bb949f/chrome/retry-switcher.png b/test/func/tests/screens/1bb949f/chrome/retry-switcher.png index 22ebec71de106b8f77e8d585aca29dce49dd1dbb..20d6c2e63ac010467fa5a6b93ba7e51d5e75ae7c 100644 GIT binary patch delta 922 zcmV;L17-Y_1fmBaiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*;uW zL_t(|oV}OLPZL2H#`_Q9!9*`6cs0>z`~x7MJrF#pC>ldV1w1q{B(#28DjHKrg`gEn zL93M*5fCl4v`XuiwxsRSrQ4m|+1dH1DXY~gCM|TGJeNr}^UJ*NW}fFY6)P8Gj1?JW zlx$0sQKp|!xl9#|BEys*iXlNVe}(`pqpU4G%{_S*AEe?k;fMoXB2 zreI0{h9iNOof9{9&fqrH@yzyk$p$|bN z{pNGeZ(W$Yy{F%NcfoB4=D^+4&Yo4`63Sm&zw zvJSrhw;jxXcseb<=G4=HN1wbIe<=JgX;x&2VgVIa3dyd?J6B#fcFyRY9=zziw<0D5wSXutMGnSF zffj7mEs|foHFc0_?oi*D?sUSP$gO(fw+_o2vPgO zvleGhqpkLEYinMG0w0;ExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*IueNQ@r5Z4k~!R5OEFcpg0?bnZ& zY?(@lK}DM<@49gcR2{YKUtZ9>cL8~(H0+t*zIQRAf^6D7zhukQHP;TEe|?w8a9MNh zP~oP@ZF?7?)U^Nq|KE1~c-rbt`>EN)RN3}Zv(r|0?znLhUS$IS{78y3&>{1e00000 LNkvXXu0mjf{W}EO diff --git a/test/func/tests/screens/bdf4a21/chrome/retry-switcher.png b/test/func/tests/screens/bdf4a21/chrome/retry-switcher.png index 8bef028a3aa7e935015f000348a36140ad079a3d..d3788e671b0ea773b04ba0f2712387334bdb6a9c 100644 GIT binary patch delta 887 zcmV--1Bm?m1OEmgiBL{Q4GJ0x0000DNk~Le0000Y0000Y2m$~A0JSBYm60JAe*-Z| zL_t(|oW+;VPZL2L#rqF&^Wa5Hyy?xG9!NmoQWFyiglK|-@*|OhA+(|)Kv9A~C`6>S zHXx=DBVt7<>5o8bOIvKabZxt{J3BvX+G3%iu?1E)?=YwN?BqL{_nt0W`f<*AmNU-i zvBWszg*{3?T?r%038RP+NRdn+e;`o8ibTo~RsexAfsi7^2w{|G`EM|sbIKWF1Q0mm zdRsr)U2V`;_109RYJ>inJ~S zW<1L+^N%|0Lm4b1hKr;ehUL$ZLQoX9V+VwiwN>B|uD34;VEVkE4Dq?i_%e~=WDu<{c_%Ej0MA3GLJT}#g#VOO~rQXyu@X*t{1c+2*r z#bP}3u-@!l)&z55;Ks`WQcmAGOP%rZ+8Ep8gjG|AVJ9v~L7j*jl(~1o+#&t<_C*&3OLu8kVnVx8vGm z_kpcZkTdBx6vsZ>n&*wDg=u=(KmNrYhvL3T^DIYUGN`c9@B2e&AI-rg;DSK(5|v~5TFWi zP^CD9KuC&hi2h-xrFNpT+E{tGHR@|8I!)`=jii4E#0zn-5T*~ptxC~%Bt>OmD;;r( z0jJExO60E|ku zPThX(I77;+j`cT=P-4)UYlqTSe|It1P0b=QTpr*Iuei+_rZSN=^I!|Nm{*kEgBfw4a(y nOqFdvH9Ku}=Z+gE;Z-&O6$00000NkvXXu0mjfhT-;D