Files
divkit/test_data/regression_test_data/index.json
T
avmushtukov 6fd59e04ea add scroll actions and change item actions in gallery
commit_hash:87014adfd73ebb2d79314c9119fc534c54902f75
2024-09-27 18:05:15 +03:00

3213 lines
88 KiB
JSON

{
"tests": [
{
"title": "Copy to clipboard",
"tags": [
"DivAction"
],
"steps": [
"Tap to copy url button and paste clipboard to input",
"Tap to copy string button and paste clipboard to input"
],
"expected_results": [
"At input pasted url - 'https://yandex.ru'",
"At input pasted string - 'Copied string'"
],
"file": "actions/copy-to-clipboard.json"
},
{
"title": "Focus action",
"platforms": [
"web"
],
"tags": [
"DivAction"
],
"steps": [
"click on every button",
"same, but click buttons with the keyboard (Tab + Enter)"
],
"expected_results": [
"related element is selected"
],
"file": "actions/focus-element.json"
},
{
"title": "Clear focus actions",
"platforms": [
"android",
"web",
"ios"
],
"tags": [
"DivAction"
],
"steps": [
"click on button",
"Wait 2 seconds"
],
"expected_results": [
"input has focus, label says that timer is started",
"input had lost the focus, label says that timer is finished"
],
"file": "actions/clear-focus.json"
},
{
"title": "Focus action",
"platforms": [
"ios"
],
"tags": [
"DivAction"
],
"steps": [
"click on Focus 1, 2, 3 button",
"click on \"Change state and focus\""
],
"expected_results": [
"related element is selected",
"button changes to input and it gets focus"
],
"file": "actions/focus-element-mobile.json"
},
{
"title": "Simple tap",
"tags": [
"DivAction"
],
"automated": [
"web"
],
"steps": [
"Tap on text 'Click on me'"
],
"expected_results": [
"Text 'Click on me' changed to 'You clicked on me'",
"Second click changes text to 'Click on me'"
],
"file": "simple_tap.json"
},
{
"title": "Long tap",
"platforms": [
"android",
"ios"
],
"tags": [
"DivAction"
],
"steps": [
"Long tap on button 'Long tap menu'"
],
"expected_results": [
"Menu with buttons 'show' and 'hide' is appearing",
"longtap_actions logged"
],
"file": "long_tap.json"
},
{
"title": "Tab swipe",
"automated": [
"web"
],
"tags": [
"DivTabs",
"swipe"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Tab changes depending on the swipe direction",
"Tabs changes is logged"
],
"file": "tabs_max_height.json"
},
{
"title": "Tab swipe restricted",
"automated": [
"web"
],
"tags": [
"DivTabs",
"swipe"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Tab not changed",
"Tab changes on header click"
],
"file": "tabs_disabled_switch_tabs_by_swipe.json"
},
{
"title": "Gallery scroll",
"automated": [
"web"
],
"tags": [
"DivGallery",
"scroll"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Content is changes depending on scroll direction",
"Gallery scroll is logged"
],
"file": "gallery/gallery_swipe.json"
},
{
"title": "Incompletely filled gallery throws taps",
"tags": [
"DivGallery"
],
"steps": [
"Click on the empty space inside the gallery"
],
"expected_results": [
"Check view shown with text 'Last caught action: tap_container'"
],
"file": "gallery/incompletely_filled_gallery_throws_taps.json"
},
{
"title": "Paged gallery scroll",
"automated": [
"web"
],
"tags": [
"DivGallery",
"scroll"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Content is changes page by page",
"Gallery scroll is logged"
],
"file": "gallery/gallery_swipe_paged.json"
},
{
"title": "Gallery columns",
"platforms": [
"android",
"ios"
],
"tags": [
"DivGallery"
],
"expected_results": [
"Gallery has 2 columns. First column has 2 elements, second - 4 elements."
],
"file": "gallery/gallery-columns.json"
},
{
"title": "Gallery item actions",
"tags": [
"DivGallery"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right",
"Click on buttons"
],
"expected_results": [
"Content is changes depending on scroll direction or clicked buttons",
"Gallery scroll is logged"
],
"file": "gallery/gallery-item-actions.json"
},
{
"title": "Gallery item actions typed",
"tags": [
"DivGallery",
"TypedActions"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right",
"Click on buttons"
],
"expected_results": [
"Content is changes depending on scroll direction or clicked buttons",
"Gallery scroll is logged",
"first and last galleries are scrolled without animation"
],
"file": "gallery/gallery-item-actions-typed.json"
},
{
"title": "Gallery default item states",
"automated": [
"web"
],
"tags": [
"DivGallery"
],
"steps": [
"Click on button 'Expand' in gallery item",
"Click on button 'Collapse' in expanded items"
],
"expected_results": [
"Only clicked gallery item change state"
],
"file": "gallery/gallery_default_item_states.json"
},
{
"title": "Gallery paging default item states",
"automated": [
"web"
],
"tags": [
"DivGallery"
],
"steps": [
"Click on button 'Expand' in gallery item",
"Click on button 'Collapse' in expanded items",
"Scroll gallery"
],
"expected_results": [
"Only clicked gallery item change state",
"Gallery scrolls page by page"
],
"file": "gallery/gallery_paging_default_item_states.json"
},
{
"title": "Zoomable gallery",
"tags": [
"DivGallery"
],
"expected_results": [
"Image in gallery can be zoomed"
],
"file": "gallery/zoomable-gallery.json"
},
{
"title": "Gallery bottom multiline",
"tags": [
"DivGallery"
],
"file": "gallery/gallery-bottom-multiline.json"
},
{
"title": "Gallery bottom multiline selected actions",
"tags": [
"DivGallery"
],
"file": "gallery/gallery-bottom-multiline-selected-action.json"
},
{
"title": "Gallery bottom singleline",
"tags": [
"DivGallery"
],
"file": "gallery/gallery-bottom-singleline.json"
},
{
"title": "Gallery top multiline",
"tags": [
"DivGallery"
],
"file": "gallery/gallery-top-multiline.json"
},
{
"title": "Pager scroll",
"automated": [
"web"
],
"tags": [
"DivPager",
"scroll"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Content is changes page by page",
"Page change is logged"
],
"file": "pager/pager.json"
},
{
"title": "Pager item actions",
"automated": [
"web"
],
"tags": [
"DivPager"
],
"file": "pager/pager-item-actions.json"
},
{
"title": "Pager selected actions",
"tags": [
"DivPager"
],
"file": "pager/pager-selected-actions.json"
},
{
"title": "Pager default item states",
"automated": [
"web"
],
"tags": [
"DivPager"
],
"file": "pager/pager_default_item_states.json"
},
{
"title": "Pager with infinite scroll",
"platforms": [
"ios"
],
"tags": [
"DivPager"
],
"file": "pager/pager_infinite_scroll.json"
},
{
"title": "Action animations",
"tags": [
"DivAnimation"
],
"steps": [
"Click on each button with animations"
],
"expected_results": [
"The animation written on the button appears",
"Animation finished on long click finish"
],
"file": "action_animation/animations.json"
},
{
"title": "Recommendation slider",
"tags": [
"Slider"
],
"automated": [
"android"
],
"priority": "blocker",
"steps": [
"Interact with the slider"
],
"expected_results": [
"Pointer position is changes and change button text"
],
"file": "slider_nps.json"
},
{
"title": "Slider with two pointers",
"tags": [
"Slider"
],
"automated": [
"android"
],
"priority": "critical",
"steps": [
"Interact with the slider"
],
"expected_results": [
"Pointer position is changes and change button text"
],
"file": "double_slider.json"
},
{
"title": "Slider preferences",
"tags": [
"Slider"
],
"steps": [
"Interact with slider"
],
"expected_results": [
"Slider pointer change it's position"
],
"file": "slider_presets.json"
},
{
"title": "Root state switching",
"automated": [
"web"
],
"steps": [
"Press 'CHANGE STATE (TEMPORARY)'",
"Restart the app",
"Turn back to this scenario",
"Press 'CHANGE STATE'",
"Restart the app",
"Turn back to this scenario"
],
"expected_results": [
"button 'CHANGE STATE (TEMPORARY)' change state and save it between app restart",
"button 'CHANGE STATE' change state, but state resets after app restart"
],
"file": "root_state_switching.json"
},
{
"title": "Focus",
"platforms": [
"android"
],
"steps": [
"Switch focus"
],
"expected_results": [
"Elements focus changes in order to switch"
],
"file": "focus.json"
},
{
"title": "Focus events",
"platforms": [
"android"
],
"steps": [
"Switch focus to handler",
"Switch focus to idle"
],
"expected_results": [
"Start state of the right element is 'init'",
"When handler gets focus, state of the right element is 'focus'",
"When handler lost focus, state of the right element is 'blur'"
],
"file": "focus_actions.json"
},
{
"title": "Accessibility descriptions",
"tags": [
"Accessibility"
],
"steps": [
"Set russian language on device",
"Turn on Screen reader and set order of elements description to '\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435,\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435,\u0442\u0438\u043f'",
"Set focus on '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 1'",
"Listen to Screen reader",
"Double tap on screen",
"Set focus on '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 2'",
"Listen to Screen reader",
"Set focus on '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 3'"
],
"expected_results": [
"On '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 1' Screen reader should say 'C\u0435\u0439\u0447\u0430\u0441 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 0; \u042d\u043b\u0435\u043c\u0435\u043d\u0442 1; \u041a\u043d\u043e\u043f\u043a\u0430; \u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0434\u0432\u0430\u0436\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c'",
"After double tap Screen reader should say '\u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1'",
"On '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 2' Screen reader should say '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 2; \u041a\u043d\u043e\u043f\u043a\u0430; \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e'",
"On '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 3' Screen reader should say '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 3; \u041a\u043d\u043e\u043f\u043a\u0430'"
],
"file": "accessibility/descriptions.json"
},
{
"title": "Accessibility image range",
"tags": [
"Accessibility"
],
"platforms": [
"android"
],
"steps": [
"Turn on Screen reader",
"Set focus on text",
"Listen to Screen reader",
"Set focus on image in text",
"Listen to Screen reader",
"Click on image in text"
],
"expected_results": [
"After setting focus to text you can hear the text itself.",
"After setting focus on image, you should here that this image is a button and you can click on it to trigger an action.",
"After click on image action triggered"
],
"file": "accessibility/image_and_clickable_range.json"
},
{
"title": "Accessibility types",
"tags": [
"Accessibility"
],
"platforms": [
"android",
"ios"
],
"steps": [
"Turn on Screen reader",
"Tap on elements"
],
"expected_results": [
"Screen reader should read elements correctly according to their accessibility types."
],
"file": "accessibility/types.json"
},
{
"title": "Accessibility auto types",
"tags": [
"Accessibility"
],
"steps": [
"Turn on Screen reader",
"Tap on elements"
],
"expected_results": [
"Screen reader should read correct element types. Separator and image without description must be not focusable with screen reader."
],
"file": "accessibility/auto_types.json"
},
{
"title": "Default Accessibility mode",
"tags": [
"Accessibility"
],
"platforms": [
"android",
"ios"
],
"steps": [
"Turn on Screen reader",
"Focus on items from top to bottom"
],
"expected_results": [
"When focusing on 1 item you'll hear '\u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 1'",
"When focusing on group of 2 and 3 items you will hear '\u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 2, \u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 3'",
"Can't focus 4 element"
],
"file": "accessibility/mode/default.json"
},
{
"title": "Merge Accessibility mode",
"tags": [
"Accessibility"
],
"platforms": [
"android",
"ios"
],
"steps": [
"Turn on Screen reader",
"Focus on items from top to bottom"
],
"expected_results": [
"Focusing on all card",
"You will hear '\u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 1, \u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 2, \u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 3'",
"On activation menu with text '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 1, \u042d\u043b\u0435\u043c\u0435\u043d\u0442 2, \u042d\u043b\u0435\u043c\u0435\u043d\u0442 3' appears",
"On focus Screen reader should not say '\u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0434\u0432\u0430\u0436\u0434\u044b \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435'"
],
"file": "accessibility/mode/merge.json"
},
{
"title": "Exclude Accessibility mode",
"tags": [
"Accessibility"
],
"platforms": [
"android",
"ios"
],
"steps": [
"Turn on Screen reader",
"Focus on items from top to bottom"
],
"expected_results": [
"Focus on 5-th item",
"\u0423\u0441\u043b\u044b\u0448\u0438\u043c '\u042d\u0442\u043e \u042d\u043b\u0435\u043c\u0435\u043d\u0442 5'",
"\u041f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c Screen reader \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0435 \u043f\u0440\u0438 \u0442\u0430\u043f\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u044e \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438"
],
"file": "accessibility/mode/exclude.json"
},
{
"title": "Accessibility mode changes",
"platforms": [
"android",
"ios"
],
"tags": [
"Accessibility"
],
"steps": [
"Turn on Screen reader",
"Change accessibility mode for items",
"Try to focus"
],
"expected_results": [
"Elements should be focusable if their accessibility mode is default or merge and they have no ancestors with merge accessibility mode",
"Elements shouldn't be focusable if their accessibility mode if exclude"
],
"file": "accessibility/mode/mode_change.json"
},
{
"title": "Actions on tap",
"automated": [
"web"
],
"steps": [
"Tap on top button",
"Double tap on top button",
"Long tap on top button",
"Tap on 2-nd button",
"Double tap on 2-nd button",
"Long tap on 2-nd button",
"Tap on 3-rd button",
"Double tap on 3-rd button",
"Long tap on 3-rd button",
"Tap on image on the bottom button",
"Long tap between buttons"
],
"expected_results": [
"Menu with text 'Single tap' appears with delay",
"Menu with text 'Double tap' appears",
"Menu with text 'Long tap' appears",
"Menu with text 'Single tap' appears without delay",
"Menu with text 'Single tap' appears and than disappears",
"Menu with text 'Long tap' appears",
"Menu with text 'Single tap' appears with delay",
"Menu with text 'Double tap' appears",
"Menu with text 'Long tap on container' appears for container",
"Menu with text 'Single tap on child' appears",
"Menu with text 'Long tap on container' appears for container"
],
"file": "button_actions.json"
},
{
"title": "Div errors visualization",
"platforms": [
"android",
"ios"
],
"priority": "critical",
"expected_results": [
"The card displays a red button with the number 1",
"Click on red button shows error INVALID_VALUE",
"Click on the cross hide screen with error details",
"Click on save button copy json with errors",
"Click on text 'Generate error!' add errors 'Value 'wrong_value' for key 'alignment_horizontal' at path '@{alignment}' is not valid'"
],
"file": "error_visual_monitor.json"
},
{
"title": "Synchronizing multiple change bounds animations. Fade full",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears changing the transparency"
],
"file": "animations/transition/fade_full_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Fade part",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears changing the transparency starting or ending with transparency = 0.5"
],
"file": "animations/transition/fade_part_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Scale full",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears changing the scale"
],
"file": "animations/transition/scale_full_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Scale part",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears changing the scale starting or ending with scale = 0.75"
],
"file": "animations/transition/scale_part_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Slide full",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears sliding from under the top edge of the card"
],
"file": "animations/transition/slide_full_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Slide part",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears sliding from under the top edge of the card, but not reaching it"
],
"file": "animations/transition/slide_part_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Set",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears and disappears changing transparency and sliding from center to edge"
],
"file": "animations/transition/set_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Diff ids",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should appears from different edges of card"
],
"file": "animations/transition/change_bounds_diff_ids_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Diff sizes",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should change it's size"
],
"file": "animations/transition/change_bounds_diff_sizes_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Diff types",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should change text moving across the screen"
],
"file": "animations/transition/change_bounds_diff_types_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Change bounds same ids",
"platforms": [
"android"
],
"tags": [
"Animations"
],
"steps": [
"Press button with text 'GO'",
"After image appears press 'GO BACK'"
],
"expected_results": [
"Image should move horizontally across the screen"
],
"file": "animations/transition/change_bounds_same_ids_src.json"
},
{
"title": "Synchronizing multiple change bounds animations. Article",
"tags": [
"Animations"
],
"steps": [
"Click on 'EXPAND'",
"Click on 'SHOW COMMENTS'",
"After expanding of elements click on 'COLLAPSE'"
],
"expected_results": [
"Expanding and collapsing the elements should be with animation"
],
"file": "animations/article.json"
},
{
"title": "Synchronizing multiple change bounds animations. Article with transitions",
"tags": [
"Animations"
],
"steps": [
"Click on 'EXPAND'",
"Click on 'SHOW COMMENTS'",
"After expanding of elements click on 'COLLAPSE'"
],
"expected_results": [
"Expanding end collapsing the elements should be with animation"
],
"file": "animations/article_with_transitions.json"
},
{
"title": "Synchronizing multiple change bounds animations. Blink",
"tags": [
"Animations"
],
"steps": [
"Click on 'BLINK'"
],
"expected_results": [
"Red circle should appear and disappear"
],
"file": "animations/blink.json"
},
{
"title": "Scale transition ignore pivot_x/pivot_y",
"platforms": [
"android",
"ios"
],
"tags": [
"Animations"
],
"steps": [
"Press on 'GO'"
],
"expected_results": [
"Image should scale from left edge to right one"
],
"file": "animations/scale_pivot_src.json"
},
{
"title": "Change bounds transitions ignore start_delay",
"tags": [
"Animations"
],
"steps": [
"Click on tooltip"
],
"expected_results": [
"A few seconds after the card is shown, a tooltip should appear",
"The text should disappear first, and the background after a short delay"
],
"file": "animations/mute_notification.json"
},
{
"title": "Div with corner radius and shadow set is clipped during transition animation",
"tags": [
"Animations"
],
"steps": [
"Click on yellow rectangle",
"Repeat if necessary"
],
"expected_results": [
"Blue circle still a circle while transition is in progress"
],
"file": "animations/transient_div_with_clip_and_shadow.json"
},
{
"title": "State transition any change",
"file": "animations/transition/state_transition_any_change.json"
},
{
"title": "State transition data change",
"file": "animations/transition/state_transition_data_change.json"
},
{
"title": "State transition state change",
"file": "animations/transition/state_transition_state_change.json"
},
{
"title": "Inner state transition any change",
"file": "animations/transition/inner_state_transition_any_change.json"
},
{
"title": "Inner state transition data change",
"file": "animations/transition/inner_state_transition_data_change.json"
},
{
"title": "Disappear transition of div with shadow",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"Animations"
],
"steps": [
"Click on 'Show button'",
"Click on 'Hide Button'"
],
"expected_results": [
"Floating button do not draw shadow during disappear animation"
],
"file": "animations/transition/transition_out_of_div_with_shadow.json"
},
{
"title": "Lottie animation (repeat_mode=restart, repeat_count=5)",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"Animations",
"lottie"
],
"steps": [
"Spinner animation will continue 5 times and then stop",
"Press RESTART"
],
"expected_results": [
"Spinner animation will continue 5 times and then stop"
],
"file": "animations/lottie/spinner_restart_repeat_mode.json"
},
{
"title": "Lottie animation (repeat_mode=reverse, repeat_count=3)",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"Animations",
"lottie"
],
"steps": [
"Spinner changes spin direction 3 times and stops",
"Press RESTART"
],
"expected_results": [
"Spinner changes spin direction 3 times and stops"
],
"file": "animations/lottie/spinner_reverse_repeat_mode.json"
},
{
"title": "Lottie animation (repeat_mode=restart, repeat_count=-1)",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"Animations",
"lottie"
],
"expected_results": [
"Infinite spinner animation."
],
"file": "animations/lottie/spinner.json"
},
{
"title": "For the reverse animation of the action, a direct interpolator is used",
"platforms": [
"android",
"web"
],
"tags": [
"Animations"
],
"file": "action_animation/button_press_action_animations.json"
},
{
"title": "Simple variable animator",
"platforms": [
"android"
],
"tags": [
"Animators"
],
"steps": [
"Press \"Start\" button",
"Wait for completion",
"Press \"Start\" button again",
"Press \"Stop\" button before animation ends"
],
"expected_results": [
"Spinner performs full rotation cycle and changes color. If stopped it stands still."
],
"file": "animations/animators/simple_variable_animator.json"
},
{
"title": "Repeating variable animator",
"platforms": [
"android"
],
"tags": [
"Animators"
],
"steps": [
"Press \"Start\" button",
"Wait for completion",
"Press \"Start\" button again",
"Press \"Stop\" button before animation ends"
],
"expected_results": [
"Spinner performs full rotation cycle and changes color 4 times. If stopped it stands still."
],
"file": "animations/animators/repeating_variable_animator.json"
},
{
"title": "Infinite variable animator",
"platforms": [
"android"
],
"tags": [
"Animators"
],
"steps": [
"Press \"Start\" button",
"Wait for couple of cycles",
"Press \"Stop\" button"
],
"expected_results": [
"Spinner performs multiple rotation cycles until being stopped. When stopped it reset rotation angle and color."
],
"file": "animations/animators/infinite_variable_animator.json"
},
{
"title": "Infinite alternating variable animator",
"platforms": [
"android"
],
"tags": [
"Animators"
],
"steps": [
"Press \"Start\" button",
"Wait for couple of cycles",
"Press \"Stop\" button"
],
"expected_results": [
"Spinner performs multiple rotation cycles alternating direction until being stopped. When stopped it reset rotation angle and color."
],
"file": "animations/animators/infinite_alternating_variable_animator.json"
},
{
"title": "Visibility actions in gallery",
"automated": [
"web"
],
"tags": [
"visibility_actions"
],
"steps": [
"Scroll the gallery",
"Check logs"
],
"expected_results": [
"Gallery data was opened",
"items visibility logged, for example 'logViewShown(cardId = ..., id = item/01)'"
],
"file": "gallery/gallery_swipe.json"
},
{
"title": "Disappear actions in gallery",
"automated": [
"web"
],
"platforms": [
"ios",
"web"
],
"tags": [
"Disappear_actions"
],
"steps": [
"Scroll the gallery",
"Check logs"
],
"expected_results": [
"Gallery data was opened",
"The text changes along with the item that disappeared",
"Items disappearing logged, for example 'logViewShown(cardId = ..., id = item/01)'"
],
"file": "gallery/gallery_swipe_disappear_action.json"
},
{
"title": "Visibility actions in pager",
"automated": [
"web"
],
"tags": [
"visibility_actions",
"DivPager"
],
"steps": [
"Scroll the pager",
"Check logs"
],
"expected_results": [
"Pager data was opened",
"items visibility logged, for example 'logViewShown(cardId = ..., id = content_item_show:1)'"
],
"file": "visibility_actions/pager.json"
},
{
"title": "Visibility actions performed and logged in pager",
"automated": [
"web"
],
"tags": [
"visibility_actions",
"DivPager"
],
"steps": [
"Swipe cards",
"Check logs"
],
"expected_results": [
"Logged evens logViewShown(cardId = ..., id = content_item_show0) logViewShown(cardId = ..., id = container)",
"Cards description was changed"
],
"file": "visibility_actions/swipe_div_pager.json"
},
{
"title": "Visibility action for child of item in gallery",
"automated": [
"android"
],
"tags": [
"visibility_actions",
"DivGallery"
],
"steps": [
"Scroll to positions from 0 to 4",
"Check view shown with text 'Last caught visibility action: item_{item_position}'"
],
"expected_results": [
"View shown with text 'Last caught visibility action: item_{item_position}'"
],
"file": "visibility_actions/gallery_child_of_item.json"
},
{
"title": "Visibility actions is_enabled",
"automated": [
"android",
"web"
],
"tags": [
"visibility_actions",
"disappear_actions"
],
"steps": [
"Scroll to last position",
"Check view shown with text 'Last caught visibility action: none'",
"Click on view with text 'Enable actions'",
"Check view shown with text 'Last caught visibility action: item_4'"
],
"expected_results": [
"When actions disabled view shown with text 'Last caught visibility action: none'",
"When actions enabled view shown with text 'Last caught visibility action: item_{index}'"
],
"file": "visibility_actions/is_enabled.json"
},
{
"title": "Actions is_enabled",
"automated": [
"android",
"web"
],
"tags": [
"actions"
],
"steps": [
"Click text 'Tested text'",
"Long click text 'Tested text'",
"Double click text 'Tested text'",
"Click on view with text 'Enable actions' and repeat steps before"
],
"expected_results": [
"When actions disabled view shown with text 'Last caught action: none'",
"When actions enabled view shown with text 'Last caught action: {click | long_click | double_click}'"
],
"file": "actions/is_enabled.json"
},
{
"title": "Send select Pager using Div2View.tryLogVisibility",
"automated": [
"web"
],
"tags": [
"visibility_actions",
"DivPager"
],
"platforms": [
"android"
],
"steps": [
"Check first item visibility logged",
"Swipe to the next item",
"Check second item visibility logged"
],
"expected_results": [
"First element logged, example Ya:PagerSelectedActionsTracker onPageSelected(0) Ya:PagerSelectedActionsTracker dispatch selected actions for page 0",
"Second element logged, example logViewShown(cardId = ..., currentPageIndex = 1) Logcat Ya:PagerSelectedActionsTracker onPageSelected(1) DemoDiv2Logger logPagerChangePage(cardId = card, currentPageIndex = 1), scrollDirection = next) Ya:PagerSelectedActionsTracker dispatch selected actions for page 1"
],
"file": "visibility_actions/pager_selected_actions.json"
},
{
"title": "Visibility actions for default_item",
"automated": [
"web"
],
"tags": [
"visibility_actions"
],
"steps": [
"Check logs"
],
"expected_results": [
"Card is opened",
"Card visibility logged, example logViewShown(cardId = ..., id = comments_counter_show:4)"
],
"file": "visibility_actions/default_item.json"
},
{
"title": "Nested visibility actions",
"automated": [
"web"
],
"tags": [
"visibility_actions"
],
"steps": [
"Click EXPAND",
"Check logs"
],
"expected_results": [
"Elements are expanded",
"Visibility actions logged, example logViewShown(cardId = ..., id = separator) logViewShown(cardId = ..., id = text) logViewShown(cardId = ..., id = text2) logViewShown(cardId = ..., id = comment_state) logViewShown(cardId = ..., id = comment_01) logViewShown(cardId = ..., id = comment_02) logViewShown(cardId = ..., id = comment_03) logViewShown(cardId = ..., id = comment_04)"
],
"file": "visibility_actions/article.json"
},
{
"title": "Visibility action in visible block",
"automated": [
"web"
],
"tags": [
"visibility_actions"
],
"steps": [
"Wait 2 seconds"
],
"expected_results": [
"Text is changed to 'Triggered!'"
],
"file": "visibility_actions/visibility_action.json"
},
{
"title": "Visibility actions in DivState",
"automated": [
"web"
],
"tags": [
"DivState",
"visibility_actions"
],
"steps": [
"Press 'State 2' button",
"Wait 2 seconds"
],
"expected_results": [
"State changes",
"Text is changed to 'Triggered!'"
],
"file": "visibility_actions/states.json"
},
{
"title": "Variables in gallery",
"tags": [
"DivGallery"
],
"steps": [
"Check different combinations of gallery properties"
],
"expected_results": [
"'orientation=horizontal' - sets gallery orientation to horizontal",
"'orientation=vertical' - sets gallery orientation to vertical",
"'column_count=1' - sets amount of columns to 1",
"'column_count=2' - sets amount of columns to 2",
"'item_spacing=5' - sets spacing between items along main axis to 5",
"'item_spacing=25' - sets spacing between items along main axis to 25",
"'cross_spacing=5' - sets spacing between items along cross axis to 5 (if column_count > 1)",
"'cross_spacing=25' - sets spacing between items along cross axis to 25 (if column_count > 1)",
"'restrict_parent_scroll=false' - gallery scroll gestures don't get passed to parent element",
"'restrict_parent_scroll_true' - gallery scrolls gestures get passed to parent element",
"'item_color=#80ff0000' - sets color of items in gallery to pink",
"'item_color=#9614e000' - sets color of items in gallery to green",
"'paddings.left=10' - paddings of gallery: left - 10",
"'paddings.left=50' - paddings of gallery: left - 50",
"'paddings.right=10' - paddings of gallery: right - 10",
"'paddings.right=50' - paddings of gallery: right - 50",
"'paddings.top=10' - paddings of gallery: top - 10",
"'paddings.top=50' - paddings of gallery: top - 50",
"'paddings.bottom=10' - paddings of gallery: bottom - 10",
"'paddings.bottom=50' - paddings of gallery: bottom - 50",
"'item_text=Item text' - sets text in gallery items to 'Item text'",
"'item_text=ITEM TEXT' - sets text in gallery items to 'ITEM TEXT'"
],
"file": "variables/div_gallery.json"
},
{
"title": "Variables in pager",
"tags": [
"DivPager"
],
"steps": [
"Check different combinations of pager properties"
],
"expected_results": [
"'orientation=horizontal' - sets pager orientation to horizontal",
"'orientation=vertical' - sets pager orientation to vertical",
"'fixed_width=50' - sets visible width of adjacent card to 50",
"'fixed_width=20' - sets visible width of adjacent card to 20",
"'percentage_width=75' - sets current card's width to 75% of pager's width",
"'percentage_width=95' - sets current card's width to 95% of pager's width",
"'paddings.left=10' - paddings of pager: left - 10",
"'paddings.left=50' - paddings of pager: left - 50",
"'paddings.right=10' - paddings of pager: right - 10",
"'paddings.right=50' - paddings of pager: right - 50",
"'paddings.top=0' - paddings of pager: top - 0",
"'paddings.top=20' - paddings of pager: top - 20",
"'paddings.bottom=0' - paddings of pager: bottom - 0",
"'paddings.bottom=20' - paddings of pager: bottom - 20",
"'item_text=Item' - sets text of text_blocks in format 'Item #'",
"'item_text=ITEM' - sets text of text_blocks in format 'ITEM #'"
],
"file": "variables/div_pager.json"
},
{
"title": "Variables in tabs",
"tags": [
"DivTabs"
],
"steps": [
"Check different combinations of tabs properties"
],
"expected_results": [
"'dynamic_height=DYNAMIC' - each tab has height equals content height",
"'dynamic_height=MAX_HEIGHT(for non-first-page)' - from the second tab each tab has height equals max tabs content height",
"'tab.line_height=10' - line spacing of tabs text equals 10",
"'tab.line_height=30' - line spacing of tabs text equals 30",
"'tab.theme=GREEN' - tabs become green",
"'tab.theme=RED' - tabs become red",
"'selected_tab=0' - set first tab",
"'selected_tab=1' - set second tab",
"'selected_tab=6' - set 'Page index 6' tab",
"'has_separator=0' - turn off horizontal delimiter",
"'has_separator=1' - turn on horizontal delimiter",
"'separator.color=RED' - set red delimiter color",
"'separator.color=BLUE' - set blue delimiter color",
"'separator_paddings.top=0' - padding of horizontal delimiter: top - 0",
"'separator_paddings.top=50' - padding of horizontal delimiter: top - 50",
"'separator_paddings.bottom=0' - padding of horizontal delimiter: bottom - 0",
"'separator_paddings.bottom=50' - padding of horizontal delimiter: bottom - 50",
"'separator_paddings.left=0' - padding of horizontal delimiter: left - 0",
"'separator_paddings.left=50' - padding of horizontal delimiter: left - 50",
"'separator_paddings.right=0' - padding of horizontal delimiter: right - 0",
"'separator_paddings.right=50' - padding of horizontal delimiter: right - 50",
"'title_paddings.top=0' - padding of tabs container: top - 0",
"'title_paddings.top=50' - padding of tabs container: top - 50",
"'title_paddings.bottom=0' - padding of tabs container: bottom - 0",
"'title_paddings.bottom=50' - padding of tabs container: bottom - 50",
"'title_paddings.left=0' - padding of tabs container: left - 0",
"'title_paddings.left=50' - padding of tabs container: left - 50",
"'title_paddings.right=0' - padding of tabs container: right - 0",
"'title_paddings.right=50' - padding of tabs container: right - 50"
],
"file": "variables/div_tabs.json"
},
{
"title": "Visibility in div-base",
"automated": [
"web"
],
"steps": [
"Check different combinations of visibility properties"
],
"expected_results": [
"On click on test button text field set correct visibility.",
"Showing text field is logged."
],
"file": "set_visibility.json"
},
{
"title": "Showing animation on image loaded",
"tags": [
"Animations"
],
"expected_results": [
"Image appears with described animation"
],
"file": "action_animation/image_loading_animation.json"
},
{
"title": "Variables in DivIndicator",
"tags": [
"DivIndicator"
],
"file": "variables/div_indicator.json"
},
{
"title": "Variables in DivImage",
"automated": [
"web"
],
"tags": [
"DivImage"
],
"steps": [
"Click on blue label \"tint color\"",
"Click on label \"img#1\"",
"Click on red label \"tint color\"",
"Click on label \"img#2\"",
"Click on blue label \"tint color\""
],
"expected_results": [
"Initially, there should be a red parallelogram on a green background",
"The red parallelogram has changed color to blue",
"The blue parallelogram has changed to the blue camera icon",
"The blue camera icon has changed color to red",
"The red camera icon has become a red stripe pattern",
"The red stripe pattern has changed color to blue"
],
"file": "variables/div_image.json"
},
{
"title": "Variables triggers",
"automated": [
"web"
],
"tags": [
"Triggers"
],
"steps": [
"When only left button clicked, text changes to 'left switched'",
"When only right button clicked, text changes to 'right switched'",
"When both button clicked, text changes to 'both switched'",
"When both buttons is inactive text state changes to initial"
],
"expected_results": [
"Text changes according to the button description"
],
"file": "variables/div_variable_triggers.json"
},
{
"title": "Variable triggers (modes)",
"tags": [
"Triggers"
],
"steps": [
"'Thumb value' show current thumb position",
"'First selected positive position' show first selected positive thumb value",
"'Last selected positive position' show last selected positive value or move with thumb, if value > 0"
],
"expected_results": [
"The layout corresponds to switching buttons"
],
"file": "variables/div_variable_trigger_modes.json"
},
{
"title": "Variable triggers (closures)",
"tags": [
"DivInput",
"Slider",
"Triggers",
"Functions"
],
"expected_results": [
"Slider and input values should be synchronized",
"When entering an incorrect value in text input - error shows"
],
"file": "variables/div_variable_trigger_loops.json"
},
{
"title": "Local variables",
"automated": [
"android"
],
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"variables"
],
"expected_results": [
"Click items",
"Corresponding variable values change"
],
"file": "variables/local.json"
},
{
"title": "Sequential animations",
"steps": [
"Click on image"
],
"expected_results": [
"Heart will increase by 2 times in 2 seconds, then will increase by 4 times in 2 seconds"
],
"file": "animations/transition/transition_set.json"
},
{
"title": "Animations of switching tabs headers",
"platforms": [
"android"
],
"tags": [
"DivTabs",
"Animations"
],
"steps": [
"Switch items on each tab by clicking on the tab headers",
"Slowly swipe each tab"
],
"expected_results": [
"Look at the headers animation",
"1 tab has slide animation",
"2 tab has fade animation",
"3 tab has no animation"
],
"file": "animations/tab_titles_animations.json"
},
{
"title": "Text copying",
"tags": [
"DivText"
],
"steps": [
"Double tap or long click on first text",
"Double tap or long click on second text"
],
"expected_results": [
"First text has a system highlighting, you can copy it. Second text has no highlighting."
],
"file": "selectable_text.json"
},
{
"title": "Nested change bounds transitions",
"automated": [
"web"
],
"steps": [
"Click 'PRESS HERE'",
"Click 'PRESS AGAIN'"
],
"expected_results": [
"After first click image appears with animation, the container extends with animation.",
"After second click extends button, text changes, container extends again."
],
"file": "action_animation/nested_change_bounds.json"
},
{
"title": "Text input",
"tags": [
"DivInput"
],
"steps": [
"Tap on input field",
"Change text"
],
"expected_results": [
"Text under the input should be equal to text in input and change on input changes."
],
"file": "input.json"
},
{
"title": "Text input (single line)",
"tags": [
"DivInput"
],
"steps": [
"Tap on input field",
"Change text"
],
"expected_results": [
"Text under the input should be equal to text in input and change on input changes.",
"Max lines = 1. Line break is unavailable."
],
"file": "single_line_input.json"
},
{
"title": "Text input max_length",
"tags": [
"DivInput"
],
"steps": [
"Tap on input field",
"Enter text with more than 10 characters"
],
"expected_results": [
"text in the field should not be longer than 10 characters"
],
"file": "input_max_length.json"
},
{
"title": "Select",
"tags": [
"DivSelect"
],
"steps": [
"Tap on select field",
"Select item"
],
"expected_results": [
"When selecting, the text in the select should change."
],
"file": "select.json"
},
{
"title": "Select with default item",
"tags": [
"DivSelect"
],
"steps": [
"Tap on select field",
"Select item"
],
"expected_results": [
"When selecting, the text in the select should change."
],
"file": "select_with_default.json"
},
{
"title": "Manage VideoCustom",
"platforms": [
"android"
],
"tags": [
"VideoCustom"
],
"steps": [
"Tap on 'play', 'pause', 'reset'"
],
"expected_results": [
"On tap on 'play' video continue",
"On tap on 'pause' video pause",
"On tap on 'reset' video starts from the beginning",
"If video was paused using button 'pause', on tap on 'reset' rewind to the beginning, but still paused",
"If video wasn't paused, on tap on 'reset' the video starts playing from beginning"
],
"file": "video/video_controls.json"
},
{
"title": "State transition trigger",
"steps": [
"Press 'To liked'"
],
"expected_results": [
"First - there should be animation, there are only old triggers",
"Second - there should be no animation, the old 'state_change' is rubbed with an empty list of new ones",
"Third - there should be animation, old and new are allowed by default"
],
"file": "animations/transition/transition_triggers_state_change.json"
},
{
"title": "Data transition trigger",
"platforms": [
"android"
],
"steps": [
"Press 'Change data'"
],
"expected_results": [
"First - there should be animation, there are only old triggers",
"Second - there should be no animation, the old 'state_change' is rubbed with an empty list of new ones",
"Third - there should be an animation, the old 'none' is rubbed by the new 'state_change'"
],
"file": "animations/transition/transition_triggers_data_change_src.json"
},
{
"title": "Actions logging",
"platforms": [
"android",
"web"
],
"automated": [
"web"
],
"steps": [
"Click on Test button",
"Double click Test button",
"Long click on Test button",
"Check logs"
],
"expected_results": [
"Click logged 2 times",
"Double click logged 2 times",
"Long click logged 2 times"
],
"file": "logging.json"
},
{
"title": "Lottie animations",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"lottie"
],
"file": "animations/lottie/lottie_animations.json"
},
{
"title": "Lottie gallery",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"lottie"
],
"file": "animations/lottie/lottie_gallery.json"
},
{
"title": "Lottie cycled animations",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"lottie"
],
"expected_results": [
"Red circle appears with animation, then blink"
],
"file": "animations/lottie/lottie_cycled_animations.json"
},
{
"title": "States default state",
"automated": [
"web"
],
"file": "states_default_state.json"
},
{
"title": "Tabs item actions",
"file": "tabs-item-actions.json"
},
{
"title": "Grid layout",
"automated": [
"web"
],
"file": "grid_layout.json"
},
{
"title": "Image Shimmer Preview",
"file": "image_shimmer_preview.json",
"platforms": [
"android",
"ios"
],
"expected_results": [
"Shimmer animation is running"
]
},
{
"title": "Custom container",
"platforms": [
"android",
"web"
],
"file": "custom-container.json"
},
{
"title": "Custom card",
"platforms": [
"android",
"web"
],
"file": "custom-card.json"
},
{
"title": "Rive animations",
"platforms": [
"ios"
],
"expected_results": [
"Two-column grid with seven cards playing different rive animations"
],
"file": "animations/rive/rive_animation.json"
},
{
"title": "Rive gallery",
"platforms": [
"ios"
],
"expected_results": [
"Gallery with seven cards playing different rive animations"
],
"file": "animations/rive/rive_gallery.json"
},
{
"title": "Rive animation (loop=pingPong)",
"platforms": [
"ios"
],
"expected_results": [
"Infinite animation with changing direction"
],
"file": "animations/rive/rive_ping_pong_loop.json"
},
{
"title": "Rive animation (loop=oneShot)",
"platforms": [
"ios"
],
"steps": [
"Animation plays once then stops",
"Press Restart"
],
"expected_results": [
"Animation plays once then stops"
],
"file": "animations/rive/rive_one_shot_loop.json"
},
{
"title": "Visibility transition trigger",
"platforms": [
"android",
"web"
],
"file": "animations/transition/transition_triggers_visibility_change.json",
"steps": [
"1. Click on 'Visible', then on 'Invisible'",
"2. Click on 'Visible', then on 'Gone'",
"3. Click on 'Invisible', then on 'Visible'",
"4. Click on 'Invisible', then on 'Gone'",
"5. Click on 'Gone', then on 'Visible'",
"6. Click on 'Gone', then on 'Invisible'"
],
"expected_results": [
"1, 2 - animated, 3 - instant, 4 - always visible",
"'Invisible' -> 'Gone' or 'Gone' -> 'Invisible' - not animated, last item changes position",
"'Visible' -> 'Invisible' or 'Invisible' -> 'Visible' - items animated, last item static",
"'Visible' -> 'Gone' or 'Gone' -> 'Visible' - items animated, last item changes position"
]
},
{
"title": "Complex transition triggers",
"platforms": [
"android"
],
"steps": [
"Click on 'Change data'",
"Click on 'Go back'",
"Click on 'To state two'",
"Click on 'Visible' / 'Invisible' / 'Gone'"
],
"expected_results": [
"If item 'Visible' or 'Invisible' - blue background visible, otherwise hidden"
],
"file": "animations/transition/transition_triggers_complex_src.json"
},
{
"title": "Indicator shapes",
"platforms": [
"android"
],
"tags": [
"DivIndicator"
],
"expected_results": [
"Two pagers with indicator of different shapes - Rounded Rectangle and Circle"
],
"file": "indicator/indicator_shapes.json"
},
{
"title": "Gallery items posing",
"automated": [
"web"
],
"tags": [
"DivGallery"
],
"steps": [
"Scroll the items to the gallery end",
"Try to scroll again"
],
"expected_results": [
"Current item always stick to the text."
],
"file": "gallery/gallery-items-posing.json"
},
{
"title": "Common timer",
"tags": [
"Timers"
],
"expected_results": [
"The timer calls tick_actions and changes the variable with the set interval.",
"After the duration expires, the timer stops and calls end_actions."
],
"file": "timers/common-timer.json"
},
{
"title": "Common timer with typed action",
"tags": [
"Timers",
"TypedActions"
],
"platforms": [
"android",
"ios"
],
"expected_results": [
"The timer calls tick_actions and changes the variable with the set interval.",
"After the duration expires, the timer stops and calls end_actions."
],
"file": "timers/typed-common-timer.json"
},
{
"title": "Endless timer",
"tags": [
"Timers"
],
"expected_results": [
"The timer calls tick_actions and changes the variable with the set interval.",
"The timer is endless and can be stopped only by an action."
],
"file": "timers/endless-timer.json"
},
{
"title": "Countdown timer",
"tags": [
"Timers"
],
"expected_results": [
"The timer changes the value of the variable only at the end of the work."
],
"file": "timers/countdown-timer.json"
},
{
"title": "Change bounds transition allows input focus",
"platforms": [
"ios"
],
"unsupported_platforms": {
"android": "The bug is caused by the peculiarities of animation implementation on iOS",
"web": "The bug is caused by the peculiarities of animation implementation on iOS"
},
"tags": [
"DivInput",
"Animations"
],
"expected_results": [
"Text can be entered into the input field, focus does not disappear. The check is related to the implementation features of change_bounds on iOS"
],
"file": "change_bounds_transition_input.json"
},
{
"title": "Blur in DivImage",
"tags": [
"DivImage"
],
"steps": [
"Click on images under the text"
],
"expected_results": [
"Images are blurred according to blur radius",
"Starting blur radius is 4",
"Blur radius is changed to 0 or 8 when clicking on images"
],
"file": "div_image_blur.json"
},
{
"title": "Blur in background image",
"steps": [
"Click on 'Disable/Enable blur' buttons"
],
"expected_results": [
"Text background is blurred according to blur radius",
"Starting blur radius is 4",
"Blur radius is changed to 0 or 8 when clicking on buttons"
],
"file": "div_background_blur.json"
},
{
"title": "Container with aspect size",
"tags": [
"DivContainer"
],
"expected_results": [
"Containers with correct height appear"
],
"file": "container/aspect.json"
},
{
"title": "LayoutProvider",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"LayoutProvider"
],
"expected_results": [
"Blocks with correct size"
],
"file": "layout_provider.json"
},
{
"title": "LayoutProvider recursive",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"LayoutProvider"
],
"expected_results": [
"Blocks with correct size",
"Warning about recursive layout, depends on platform"
],
"file": "layout_provider_recursive.json"
},
{
"title": "SizeProvider extension",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"extensions",
"SizeProvider"
],
"expected_results": [
"Blocks with correct size"
],
"file": "size_provider.json"
},
{
"title": "SizeProvider extension (recursive)",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"extensions",
"SizeProvider"
],
"expected_results": [
"No relayout"
],
"file": "size_provider_recursive.json"
},
{
"title": "Fixed length input mask",
"platforms": [
"android",
"web",
"ios"
],
"tags": [
"DivInput"
],
"steps": [
"Enter an inappropriate character for the place",
"Enter the appropriate character",
"Switch show/hide placeholders"
],
"expected_results": [
"The symbol did not appear",
"The symbol appeared",
"Placeholders shown/hidden"
],
"file": "fixed_length_input_mask.json"
},
{
"title": "Fixed length phone input mask",
"platforms": [
"android",
"web",
"ios"
],
"tags": [
"DivInput"
],
"file": "fixed_length_phone_input_mask.json"
},
{
"title": "Phone input mask",
"platforms": [
"android",
"ios"
],
"tags": [
"DivInput"
],
"steps": [
"Enter an inappropriate character for the place",
"Enter the appropriate character",
"Enter phone number"
],
"expected_results": [
"The symbol did not appear",
"The symbol appeared",
"Mask for phone number is correct"
],
"file": "phone_input_mask.json"
},
{
"title": "Regex input filter",
"platforms": [
"ios"
],
"tags": [
"DivInput"
],
"expected_results": [
"Entered text must be filtered by a regular expression from another input field"
],
"file": "regex_input_filter.json"
},
{
"title": "Regex input validator",
"platforms": [
"android",
"ios"
],
"tags": [
"DivInput"
],
"file": "regex_input_validator.json"
},
{
"title": "Expression input filter",
"platforms": [
"ios"
],
"tags": [
"DivInput"
],
"expected_results": [
"Entering in the input field should be filtered depending on whether the filter condition is enabled or disabled"
],
"file": "expression_input_filter.json"
},
{
"title": "Expression input validator",
"platforms": [
"android",
"ios"
],
"tags": [
"DivInput"
],
"file": "expression_input_validator.json"
},
{
"title": "Currency input mask",
"platforms": [
"android",
"web"
],
"tags": [
"DivInput"
],
"file": "currency_input_mask.json"
},
{
"title": "Video with controls",
"tags": [
"DivVideo"
],
"file": "video/video_with_controls.json"
},
{
"title": "Video with controls and typed actions",
"tags": [
"DivVideo",
"TypedActions"
],
"platforms": [
"android",
"ios"
],
"file": "video/typed_video_with_controls.json"
},
{
"title": "Video volume control",
"tags": [
"DivVideo"
],
"file": "video/video_volume_control.json"
},
{
"title": "Disappearing actions with DivVideo",
"tags": [
"DivVideo",
"Disappear action",
"visibility_actions",
"DivGallery"
],
"file": "video/video_in_gallery.json"
},
{
"title": "Video stream",
"platforms": [
"android",
"ios"
],
"tags": [
"DivVideo"
],
"file": "video/video_stream.json"
},
{
"title": "Video fullscreen",
"tags": [
"DivVideo",
"Disappear action",
"visibility_actions",
"DivGallery"
],
"file": "video/fullscreen_video_in_recycler.json"
},
{
"title": "Video in pager",
"tags": [
"DivVideo",
"DivPager"
],
"file": "video/video_in_pager.json"
},
{
"title": "Video callbacks",
"tags": [
"DivVideo"
],
"file": "video/video_callbacks.json"
},
{
"title": "Video scale",
"tags": [
"DivVideo"
],
"platforms": [
"android",
"ios",
"web"
],
"file": "video/video_scale.json"
},
{
"title": "Video aspect",
"tags": [
"DivVideo"
],
"file": "video/video_aspect.json"
},
{
"title": "state_id_variable",
"tags": [
"DivState"
],
"steps": [
"Open example",
"Click buttons to change between 2nd and 3rd states"
],
"expected_results": [
"Second state should be shown",
"All buttons should change variable value, also buttons with the 'by variable' text should perform the same as `by action` buttons"
],
"file": "state/state_variable.json"
},
{
"title": "Tooltips with typed actions",
"platforms": [
"android"
],
"tags": [
"Tooltips",
"visibility_actions",
"TypedActions"
],
"steps": [
"Click on buttons"
],
"expected_results": [
"Tooltips are shown",
"Tooltips are hidden when tapping into an empty area",
"The tooltip is closed by tapping on the cross button and disappears when the Disappear Action is called"
],
"file": "typed-tooltips.json"
},
{
"title": "Tooltips",
"tags": [
"Tooltips",
"visibility_actions"
],
"steps": [
"Click on buttons"
],
"expected_results": [
"Tooltips are shown",
"Tooltips are hidden when tapping into an empty area",
"The tooltip is closed by tapping on the cross button and disappears when the Disappear Action is called"
],
"file": "tooltips.json"
},
{
"title": "Persistent values storage",
"platforms": [
"ios",
"web",
"android"
],
"steps": [
"Press 'Store value for 10 seconds'",
"Reopen this json in less than 10 seconds",
"Reopen this json in after 10 seconds"
],
"expected_results": [
"In the first open there should be the text 'Nothing stored'",
"In the second open there should be the text 'Stored'",
"In the last open there should be again the text 'Nothing stored'"
],
"file": "stored_value.json"
},
{
"title": "Persistent values storage with typed actions",
"tags": [
"TypedActions"
],
"platforms": [
"android"
],
"steps": [
"Press 'Store string value for 10 seconds'",
"Press 'Store color value for 10 seconds'",
"Press 'Store url value for 10 seconds'",
"Press 'Store array value for 10 seconds'",
"Press 'Store dict value for 10 seconds'",
"Reopen this json in less than 10 seconds",
"Reopen this json in after 10 seconds"
],
"expected_results": [
"In the first open there should be the text 'No String value, https://no-stored-url.com, [], {}'.",
"In the second open there should new values should appear 'Stored typed, https://yandex.ru, [1, 2, 3], {\"key\": \"value\"}' on a green background.",
"In the last open there should be again as it was at first open."
],
"file": "typed_stored_value.json"
},
{
"title": "Patch container",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/container.json"
},
{
"title": "Patch container typed action",
"platforms": [
"android"
],
"tags": [
"patch",
"TypedActions"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red",
"In case of success, 'Success!' text appears",
"In case of fail 'Fail!' text appears"
],
"file": "patch/typed-container.json"
},
{
"title": "Patch container internal items",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/inside_container.json"
},
{
"title": "Patch gallery with typed action",
"platforms": [
"android"
],
"tags": [
"TypedActions",
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/typed-gallery.json"
},
{
"title": "Patch gallery",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/gallery.json"
},
{
"title": "Patch gallery internal items",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"Second original item should be replaced with two vertical ones, which background is red. Third item should be an empty space. That look like 2-nd and 3-rd elements became red and has slightly more free space after 3-rd"
],
"file": "patch/inside_gallery.json"
},
{
"title": "Patch grid",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/grid.json"
},
{
"title": "Patch grid internal items",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"Second original item should be replaced with two vertical ones, which background is red. Third item should be an empty space"
],
"file": "patch/inside_grid.json"
},
{
"title": "Patch pager",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"2 original items should be replaced with the new ones, which background is red"
],
"file": "patch/pager.json"
},
{
"title": "Patch pager internal items",
"tags": [
"patch"
],
"steps": [
"Wait 1 second"
],
"expected_results": [
"Second original item should be replaced with two vertical ones, which background is red. Third item should be an empty space"
],
"file": "patch/inside_pager.json"
},
{
"title": "Patch state partial",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"toggle state"
],
"expected_results": [
"First state should be replaced",
"Second state should persist without changes"
],
"file": "patch/state_partial.json"
},
{
"title": "Patch state transactional broken",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"toggle state"
],
"expected_results": [
"Both states should have no changes"
],
"file": "patch/state_transactional_broken.json"
},
{
"title": "Patch state transactional success",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"toggle state"
],
"expected_results": [
"First state should be replaced",
"Second state should persist without changes"
],
"file": "patch/state_transactional_success.json"
},
{
"title": "Patch tabs partial",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"Check all tabs"
],
"expected_results": [
"Second tab should be replaced, other should have no changes"
],
"file": "patch/tabs_partial.json"
},
{
"title": "Patch tabs transactional broken",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"Check all tabs"
],
"expected_results": [
"All tabs should have no changes"
],
"file": "patch/tabs_transactional_broken.json"
},
{
"title": "Patch tabs transactional success",
"tags": [
"patch"
],
"steps": [
"Wait 1 second",
"Check all tabs"
],
"expected_results": [
"First tab should be replaced, other should have no changes"
],
"file": "patch/tabs_transactional_success.json"
},
{
"title": "Track visibility action from patch",
"tags": [
"patch"
],
"steps": [
"Wait 10 seconds",
"Should be lorem ipsum text"
],
"platforms": [
"android",
"web",
"ios"
],
"priority": "blocker",
"expected_results": [
"Lorem ipsum text, showed with animation"
],
"file": "patch/patchable_card_with_visibility_actions.json"
},
{
"title": "Patch root div",
"tags": [
"patch"
],
"steps": [
"Wait 10 seconds",
"Check items"
],
"expected_results": [
"Second element is gallery"
],
"file": "patch/root.json"
},
{
"title": "Patch on_applied_actions",
"tags": [
"patch"
],
"platforms": [
"web",
"android",
"ios"
],
"steps": [
"Wait 10 seconds",
"Check items"
],
"expected_results": [
"2 elements should become red",
"Patch status text should become success"
],
"file": "patch/actions_applied.json"
},
{
"title": "Patch on_failed_actions",
"tags": [
"patch"
],
"platforms": [
"web",
"android"
],
"steps": [
"Wait 10 seconds",
"Check items"
],
"expected_results": [
"Patch status text should become fail",
"No other elements hould be changed"
],
"file": "patch/actions_failed.json"
},
{
"title": "State with variable binding",
"tags": [
"DivState"
],
"platforms": [
"web",
"ios"
],
"steps": [
"Press buttons with div-actions."
],
"expected_results": [
"DivState change state."
],
"file": "state_binding.json"
},
{
"title": "Multiple state switching with different root state",
"tags": [
"DivState"
],
"steps": [
"Press button \"STATE 0 (INITIAL)\"",
"Press button \"STATE 1\""
],
"expected_results": [
"Button with text \"STATE 0 (FINAL)\". No crashes at state change."
],
"file": "state/multiple_root_state_switching.json"
},
{
"title": "Input inside pager",
"tags": [
"DivPager",
"DivInput"
],
"steps": [
"Click on a number."
],
"expected_results": [
"A keyboard appears and the number can be edited."
],
"file": "input_inside_pager.json"
},
{
"title": "Input keyboard types",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"DivInput"
],
"expected_results": [
"The keyboard type when clicking on an input field should differ depending on the select"
],
"file": "input_keyboard_types.json"
},
{
"title": "Slider vertical scroll interruption",
"automated": [
"android"
],
"tags": [
"Slider"
],
"steps": [
"Drag slider view up."
],
"expected_results": [
"The entire gallery should be moved upwards."
],
"file": "slider_scroll_vertical.json"
},
{
"title": "Slider horizontal scroll interruption",
"automated": [
"android"
],
"tags": [
"Slider"
],
"steps": [
"Drag slider to the left."
],
"expected_results": [
"Slider should change value, but its view shouldn't be moved."
],
"file": "slider_scroll_horizontal.json"
},
{
"title": "Gesture (extension)",
"platforms": [
"android",
"ios",
"web"
],
"tags": [
"extensions"
],
"steps": [
"Swipe up",
"Swipe down",
"Swipe left",
"Swipe right"
],
"expected_results": [
"Rect turns yellow",
"Rect turns green",
"Rect turns blue",
"Rect turns purple"
],
"file": "gesture.json"
},
{
"title": "Rebind container",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Do\"/\"UnDo\" several times to check that forward and backward rebind works correctly",
"Tap to \"Next\", repeat step 1. Needed to check complex layout rebinds",
"Repeat steps 1 and 2 until you return to the first layout after pressing \"Next\""
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/container/un_added.json"
},
{
"title": "Rebind grid",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Do\"/\"UnDo\" several times to check that forward and backward rebind works correctly",
"Tap to \"Next\", repeat step 1. Needed to check complex layout rebinds",
"Repeat steps 1 and 2 until you return to the first layout after pressing \"Next\""
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/grid/un_added.json"
},
{
"title": "Rebind gallery",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Do\"/\"UnDo\" several times to check that forward and backward rebind works correctly",
"Tap to \"Next\", repeat step 1. Needed to check complex layout rebinds",
"Repeat steps 1 and 2 until you return to the first layout after pressing \"Next\""
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/gallery/un_added.json"
},
{
"title": "Rebind pager",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Do\"/\"UnDo\" several times to check that forward and backward rebind works correctly",
"Tap to \"Next\", repeat step 1. Needed to check complex layout rebinds",
"Repeat steps 1 and 2 until you return to the first layout after pressing \"Next\""
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/pager/un_added.json"
},
{
"title": "Rebind tabs",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Do\"/\"UnDo\" several times to check that forward and backward rebind works correctly",
"Tap to \"Next\", repeat step 1. Needed to check complex layout rebinds",
"Repeat steps 1 and 2 until you return to the first layout after pressing \"Next\""
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/tabs/un_added.json"
},
{
"title": "Container with item_builder",
"platforms": [
"ios",
"web"
],
"tags": [
"actions",
"DivContainer"
],
"steps": [
"Tap to cards. Their description is displayed in the first card."
],
"file": "container/item_builder.json"
},
{
"title": "Container with item_builder and id for each item",
"platforms": [
"ios",
"web",
"android"
],
"tags": [
"actions",
"DivContainer"
],
"steps": [
"Tap on button. Second input should be focused"
],
"file": "container/Item_builder_with_id_override.json"
},
{
"title": "Input password",
"platforms": [
"web",
"android"
],
"tags": [
"DivInput"
],
"steps": [
"Type something inside password",
"Tap the \"toggle\" button"
],
"expected_results": [
"Password inside input shown as dots, text field below input is showing original text",
"Text inside password input became readable"
],
"file": "input_password.json"
},
{
"title": "Disabled input",
"platforms": [
"ios",
"android",
"web"
],
"tags": [
"DivInput"
],
"steps": [
"Tap the \"Disable\" button and try to edit text",
"Tap the \"Enable\" button and try to edit text"
],
"expected_results": [
"Text is not editable",
"Text became editable"
],
"file": "input_is_enabled.json"
},
{
"title": "Vector scale",
"platforms": [
"android",
"web"
],
"tags": [
"Vector"
],
"steps": [
"Move slider"
],
"expected_results": [
"The left image should be rasterized and blurry.",
"The right image should scale perfectly."
],
"file": "svg_scale.json"
},
{
"title": "Rebind custom",
"platforms": [
"android"
],
"unsupported_platforms": {
"web": "Complex Rebind is supported only on Android",
"ios": "Complex Rebind is supported only on Android"
},
"tags": [
"Rebind"
],
"steps": [
"Tap to \"Next\" several times to check that forward and backward rebind works correctly"
],
"expected_results": [
"No crashes, asserts or parsing errors",
"Test behaves the same with and without \"Complex Rebind\" flag activated"
],
"file": "rebind/custom/custom-container.json"
},
{
"title": "Pager page transformation",
"tags": [
"DivPager",
"scroll"
],
"platforms": [
"android",
"ios"
],
"steps": [
"Swipe a bit both of pagers"
],
"expected_results": [
"Content is changes page by page",
"On swipe on the top pager pages change alpha and size",
"On swipe on the bottom pager pages change alpha, size and stack in the middle of screen"
],
"file": "pager/pagers-with-page-transformation.json"
},
{
"title": "Pager accessibility scroll",
"tags": [
"DivPager",
"Accessibility"
],
"steps": [
"Enter accessibility mode",
"Horizontal swipe to left",
"Horizontal swipe to right"
],
"expected_results": [
"Content is changes page by page",
"Page change is logged"
],
"file": "pager/pager.json"
},
{
"title": "Indicator with pager with invisible items",
"tags": [
"DivPager",
"DivIndicator"
],
"platforms": [
"android"
],
"steps": [
"Swipe pages in both directions"
],
"expected_results": [
"There are 6 circles in indicator",
"Only pages with even numbers are shown",
"Active indicator item follows swipe direction"
],
"file": "indicator/indicator_with_invisible_items.json"
},
{
"title": "Indicator with pager with infinite scroll",
"tags": [
"DivPager",
"DivIndicator"
],
"platforms": [
"android"
],
"steps": [
"Swipe forward from 0 to 5 element",
"Swipe forward",
"Swipe backward"
],
"expected_results": [
"There are 6 circles in indicator",
"Page with number 0 appears after the page with number 5",
"Page with number 5 appears before the page with number 0",
"Active indicator item follows swipe direction"
],
"file": "indicator/indicator_with_infinite_scroll.json"
},
{
"title": "Indicator with pager with invisible items and infinite scroll",
"tags": [
"DivPager",
"DivIndicator"
],
"platforms": [
"android"
],
"steps": [
"Swipe forward from 0 to 10 element",
"Swipe forward",
"Swipe backward"
],
"expected_results": [
"There are 6 circles in indicator",
"Only pages with even numbers are shown",
"Page with number 0 appears after the page with number 10",
"Page with number 10 appears before the page with number 0",
"Active indicator item follows swipe direction"
],
"file": "indicator/indicator_with_invisible_items_and_infinite_scroll.json"
}
]
}