aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTatu Lund <tatu@vaadin.com>2020-06-18 08:47:05 +0300
committerGitHub <noreply@github.com>2020-06-18 08:47:05 +0300
commit60d4551b4de57d83dcdd592c09fa7be1dd2e88d6 (patch)
treedb460d1d93fbc10454f91bad171626927c16bb7f
parentd389e77e9f2c7a38143732daf697252495b95e7c (diff)
parentd824efe59a71e2eb3e554873a32d92ca5d34cc5e (diff)
downloadvaadin-framework-fix11576.tar.gz
vaadin-framework-fix11576.zip
Merge branch 'master' into fix11576fix11576
-rw-r--r--README-DEV.md186
-rw-r--r--README.md96
-rw-r--r--all/pom.xml2
-rw-r--r--all/src/main/templates/release-notes.html14
-rw-r--r--bom/pom.xml2
-rw-r--r--client-compiled/pom.xml2
-rw-r--r--client-compiler/pom.xml2
-rw-r--r--client/pom.xml2
-rw-r--r--client/src/main/java/com/vaadin/client/Util.java31
-rw-r--r--client/src/main/java/com/vaadin/client/WidgetUtil.java22
-rw-r--r--client/src/main/java/com/vaadin/client/communication/DefaultConnectionStateHandler.java2
-rw-r--r--client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java63
-rw-r--r--client/src/main/java/com/vaadin/client/ui/ShortcutActionHandler.java42
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VAbstractCalendarPanel.java44
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java3
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VComboBox.java102
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VContextMenu.java2
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VRichTextArea.java4
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VUpload.java73
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VWindow.java14
-rw-r--r--client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java7
-rw-r--r--client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java10
-rw-r--r--client/src/main/java/com/vaadin/client/ui/richtextarea/VRichTextToolbar.java26
-rw-r--r--client/src/main/java/com/vaadin/client/ui/upload/UploadConnector.java49
-rw-r--r--client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java10
-rw-r--r--client/src/main/java/com/vaadin/client/widgets/Escalator.java81
-rwxr-xr-xclient/src/main/java/com/vaadin/client/widgets/Grid.java264
-rw-r--r--compatibility-client-compiled/pom.xml2
-rw-r--r--compatibility-client/pom.xml2
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java19
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java19
-rw-r--r--compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java3
-rwxr-xr-xcompatibility-client/src/main/java/com/vaadin/v7/client/widgets/Escalator.java1
-rwxr-xr-xcompatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java70
-rw-r--r--compatibility-server-gae/pom.xml2
-rw-r--r--compatibility-server/pom.xml2
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java4
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java2
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java36
-rw-r--r--compatibility-shared/pom.xml2
-rw-r--r--compatibility-themes/pom.xml2
-rw-r--r--compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss1
-rw-r--r--documentation/articles/FindingTheCurrentUIAndPageAndVaadinSession.asciidoc1
-rw-r--r--documentation/articles/LettingTheUserDownloadAFile.asciidoc11
-rw-r--r--documentation/components/components-grid.asciidoc7
-rw-r--r--documentation/datamodel/datamodel-forms.asciidoc13
-rw-r--r--liferay-integration/pom.xml2
-rw-r--r--liferay/pom.xml2
-rw-r--r--osgi-integration/pom.xml2
-rw-r--r--pom.xml18
-rw-r--r--push/pom.xml2
-rw-r--r--server/bnd.bnd2
-rw-r--r--server/pom.xml2
-rw-r--r--server/src/main/java/com/vaadin/data/BeanValidationBinder.java7
-rw-r--r--server/src/main/java/com/vaadin/data/Binder.java154
-rw-r--r--server/src/main/java/com/vaadin/data/RequiredFieldConfigurator.java3
-rw-r--r--server/src/main/java/com/vaadin/data/ValueContext.java5
-rw-r--r--server/src/main/java/com/vaadin/data/provider/HierarchicalDataCommunicator.java4
-rw-r--r--server/src/main/java/com/vaadin/data/provider/TreeDataProvider.java15
-rw-r--r--server/src/main/java/com/vaadin/navigator/Navigator.java5
-rw-r--r--server/src/main/java/com/vaadin/server/BootstrapHandler.java6
-rw-r--r--server/src/main/java/com/vaadin/server/Sizeable.java14
-rw-r--r--server/src/main/java/com/vaadin/server/VaadinService.java24
-rw-r--r--server/src/main/java/com/vaadin/server/communication/HeartbeatHandler.java13
-rw-r--r--server/src/main/java/com/vaadin/server/communication/PushHandler.java15
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractComponent.java22
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractDateField.java140
-rw-r--r--server/src/main/java/com/vaadin/ui/ConnectorTracker.java10
-rw-r--r--server/src/main/java/com/vaadin/ui/Grid.java12
-rw-r--r--server/src/main/java/com/vaadin/ui/Tree.java12
-rw-r--r--server/src/main/java/com/vaadin/ui/UI.java9
-rw-r--r--server/src/main/java/com/vaadin/ui/Upload.java95
-rw-r--r--server/src/main/java/com/vaadin/ui/components/grid/GridRowDragger.java6
-rw-r--r--server/src/main/java/com/vaadin/ui/declarative/Design.java4
-rw-r--r--server/src/main/java/com/vaadin/ui/themes/ValoTheme.java5
-rw-r--r--server/src/main/java/com/vaadin/util/TimeZoneUtil.java42
-rw-r--r--server/src/test/java/com/vaadin/data/BinderTest.java79
-rw-r--r--server/src/test/java/com/vaadin/data/provider/TreeDataProviderTest.java53
-rw-r--r--server/src/test/java/com/vaadin/data/provider/hierarchical/HierarchyMapperWithDataTest.java12
-rw-r--r--server/src/test/java/com/vaadin/tests/server/component/grid/GridRowDraggerOneGridTest.java20
-rw-r--r--server/src/test/java/com/vaadin/ui/DateFieldTestCase.java13
-rw-r--r--shared/pom.xml2
-rw-r--r--shared/src/main/java/com/vaadin/shared/ui/dnd/criteria/Criterion.java48
-rw-r--r--shared/src/main/java/com/vaadin/shared/ui/upload/UploadClientRpc.java5
-rw-r--r--shared/src/main/java/com/vaadin/shared/ui/upload/UploadServerRpc.java3
-rw-r--r--shared/src/main/java/com/vaadin/shared/ui/upload/UploadState.java13
-rw-r--r--test/addon-using-init-param-widget-set/pom.xml2
-rw-r--r--test/addon-using-no-defined-widget-set/pom.xml2
-rw-r--r--test/addon-using-own-widget-set/pom.xml2
-rw-r--r--test/bean-api-validation/pom.xml2
-rw-r--r--test/bean-impl-validation/pom.xml2
-rw-r--r--test/cdi/pom.xml2
-rw-r--r--test/default-widget-set/pom.xml2
-rw-r--r--test/dependency-rewrite-addon/pom.xml2
-rw-r--r--test/dependency-rewrite/pom.xml2
-rw-r--r--test/own-widget-set/pom.xml2
-rw-r--r--test/pom.xml2
-rw-r--r--test/servlet-containers/generic-tests/pom.xml2
-rw-r--r--test/servlet-containers/generic-ui/pom.xml2
-rw-r--r--test/servlet-containers/generic/pom.xml2
-rw-r--r--test/servlet-containers/glassfish/pom.xml2
-rw-r--r--test/servlet-containers/jetty8/pom.xml2
-rw-r--r--test/servlet-containers/jetty9/pom.xml2
-rw-r--r--test/servlet-containers/jsp-integration/pom.xml2
-rw-r--r--test/servlet-containers/karaf/karaf-run/pom.xml2
-rw-r--r--test/servlet-containers/karaf/pom.xml2
-rw-r--r--test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml2
-rw-r--r--test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml2
-rw-r--r--test/servlet-containers/liberty-javaee/pom.xml2
-rw-r--r--test/servlet-containers/liberty-microprofile/pom.xml2
-rw-r--r--test/servlet-containers/liberty-webprofile/pom.xml2
-rw-r--r--test/servlet-containers/payara-micro/pom.xml2
-rw-r--r--test/servlet-containers/pom.xml2
-rw-r--r--test/servlet-containers/tomcat7/pom.xml2
-rw-r--r--test/servlet-containers/tomcat80/pom.xml2
-rw-r--r--test/servlet-containers/tomcat85/pom.xml2
-rw-r--r--test/servlet-containers/tomcat9/pom.xml2
-rw-r--r--test/servlet-containers/wildfly-swarm/pom.xml2
-rw-r--r--test/servlet-containers/wildfly10/pom.xml2
-rw-r--r--test/servlet-containers/wildfly11/pom.xml2
-rw-r--r--test/servlet-containers/wildfly12/pom.xml2
-rw-r--r--test/servlet-containers/wildfly13/pom.xml2
-rw-r--r--test/servlet-containers/wildfly8/pom.xml2
-rw-r--r--test/servlet-containers/wildfly9/pom.xml2
-rw-r--r--test/space in directory/pom.xml2
-rw-r--r--test/spring-boot-subcontext/pom.xml2
-rw-r--r--test/spring-boot/pom.xml2
-rw-r--r--test/vaadin7-widget-set/pom.xml2
-rw-r--r--test/vaadinservletconfiguration-widget-set/pom.xml2
-rw-r--r--test/widget-set-testutil/pom.xml2
-rw-r--r--testbench-api/pom.xml2
-rw-r--r--themes/pom.xml2
-rw-r--r--themes/src/main/themes/VAADIN/themes/valo/components/_table.scss1
-rw-r--r--uitest/pom.xml2
-rwxr-xr-xuitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.pngbin18832 -> 18463 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.pngbin38135 -> 38068 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.pngbin33069 -> 33057 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.pngbin33011 -> 33123 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.pngbin32572 -> 32683 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.pngbin33025 -> 33135 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin53964 -> 54121 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin47148 -> 47347 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin52833 -> 52965 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin50457 -> 50701 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin53626 -> 53773 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.pngbin46089 -> 46263 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.pngbin34120 -> 33602 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__uploads.pngbin25437 -> 26036 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin49227 -> 49424 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin43677 -> 43758 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin49121 -> 49247 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin47920 -> 47994 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin49665 -> 49731 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.pngbin42775 -> 42604 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.pngbin30889 -> 30084 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__uploads.pngbin23677 -> 24383 bytes
-rw-r--r--uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.pngbin20652 -> 20251 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.pngbin13105 -> 13103 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.pngbin41781 -> 41610 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.pngbin50883 -> 50807 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.pngbin33464 -> 33256 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.pngbin57486 -> 57327 bytes
-rw-r--r--uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.pngbin54944 -> 54771 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.pngbin13077 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.pngbin13237 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.pngbin26106 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.pngbin13511 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.pngbin13679 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.pngbin27799 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.pngbin141802 -> 141280 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.pngbin45969 -> 45941 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.pngbin45981 -> 45924 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.pngbin46078 -> 46005 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.pngbin35288 -> 35232 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.pngbin45981 -> 45920 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.pngbin44923 -> 44875 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.pngbin14996 -> 14840 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.pngbin14757 -> 14539 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.pngbin17080 -> 16795 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.pngbin16211 -> 15854 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.pngbin15260 -> 14928 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridAlignmentTest-layoutAlignment_ANY_Chrome__alignment.pngbin9829 -> 14463 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridCaptionTest-LayoutCaption_ANY_Chrome__caption.pngbin51133 -> 50558 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__initial.pngbin24410 -> 28162 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.pngbin25383 -> 28849 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.pngbin21500 -> 26924 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.pngbin25341 -> 28855 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.pngbin22019 -> 25172 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.pngbin48245 -> 50365 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridIconTest-LayoutIcon_ANY_Chrome__icon.pngbin68354 -> 67757 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.pngbin21071 -> 22356 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.pngbin22918 -> 24121 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.pngbin22658 -> 24165 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.pngbin21161 -> 22337 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.pngbin22047 -> 25277 bytes
-rw-r--r--uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.pngbin0 -> 25434 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.pngbin22160 -> 25669 bytes
-rw-r--r--uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.pngbin0 -> 25676 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.pngbin22118 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.pngbin0 -> 83717 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.pngbin82120 -> 83719 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.pngbin24410 -> 28069 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.pngbin25383 -> 28978 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.pngbin24601 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize600px.pngbin0 -> 27038 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.pngbin25584 -> 25972 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.pngbin22385 -> 28312 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.pngbin11683 -> 11831 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.pngbin11209 -> 11126 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.pngbin13717 -> 12790 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.pngbin12555 -> 12342 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.pngbin11728 -> 11844 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HAlignmentTest-layoutAlignment_ANY_Chrome__alignment.pngbin10677 -> 15536 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HCaptionTest-LayoutCaption_ANY_Chrome__caption.pngbin25853 -> 24260 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__initial.pngbin16955 -> 20746 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.pngbin20734 -> 25873 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.pngbin17579 -> 22365 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.pngbin20309 -> 25583 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.pngbin21268 -> 25722 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon-scrolled.pngbin0 -> 32514 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon.pngbin37968 -> 23144 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.pngbin17115 -> 18355 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.pngbin18045 -> 19379 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.pngbin18045 -> 19247 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.pngbin17335 -> 18488 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.pngbin19029 -> 18288 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.pngbin0 -> 18973 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.pngbin19489 -> 19016 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.pngbin0 -> 19063 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.pngbin19303 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.pngbin0 -> 29315 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.pngbin0 -> 35719 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.pngbin44030 -> 30040 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.pngbin16955 -> 20746 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.pngbin20734 -> 29463 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.pngbin17579 -> 20303 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.pngbin20309 -> 27529 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.pngbin21268 -> 14411 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.pngbin39820 -> 39743 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.pngbin39824 -> 39756 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.pngbin39829 -> 39763 bytes
-rw-r--r--uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.pngbin39832 -> 39765 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.pngbin48580 -> 49162 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.pngbin48598 -> 48943 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.pngbin35916 -> 36450 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.pngbin12017 -> 11946 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.pngbin13077 -> 13008 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.pngbin13075 -> 13027 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.pngbin24698 -> 24723 bytes
-rw-r--r--uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.pngbin24461 -> 24538 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.pngbin33597 -> 33140 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__uploads.pngbin26115 -> 26831 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.pngbin52099 -> 52039 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.pngbin46424 -> 46553 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.pngbin52507 -> 52425 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.pngbin49226 -> 49311 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.pngbin52312 -> 52354 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.pngbin45777 -> 45747 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.pngbin33783 -> 33167 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/TableTooManyColumnsTest-testDropdownTable_ANY_Chrome__init.pngbin65646 -> 66318 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.pngbin9231 -> 9171 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment-scrolled.pngbin0 -> 18182 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment.pngbin12006 -> 17149 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__initial.pngbin24938 -> 30022 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__scrolled.pngbin0 -> 30022 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.pngbin25958 -> 29978 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.pngbin25428 -> 29924 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.pngbin25742 -> 29786 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.pngbin25353 -> 29856 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VIconTest-LayoutIcon_ANY_Chrome__icon.pngbin65794 -> 68215 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.pngbin20533 -> 21972 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.pngbin25429 -> 28385 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.pngbin25429 -> 28376 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.pngbin25267 -> 28223 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.pngbin21581 -> 25597 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.pngbin0 -> 25750 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.pngbin21656 -> 26004 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.pngbin0 -> 26009 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.pngbin21633 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.pngbin0 -> 41341 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.pngbin80349 -> 52635 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.pngbin24938 -> 29091 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.pngbin25958 -> 29731 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.pngbin25428 -> 28631 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.pngbin25742 -> 29518 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.pngbin25353 -> 29598 bytes
-rwxr-xr-xuitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.pngbin81059 -> 80432 bytes
-rw-r--r--uitest/reference-screenshots/firefox/BaseThemeTest-testTheme_ANY_Firefox__uploads.pngbin22927 -> 28777 bytes
-rw-r--r--uitest/reference-screenshots/firefox/ChameleonThemeTest-testTheme_ANY_Firefox__uploads.pngbin20798 -> 24822 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.pngbin11825 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.pngbin11979 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.pngbin24440 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.pngbin12180 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.pngbin12333 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.pngbin26387 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/FontIconsTest-checkScreenshot_ANY_Firefox__allVaadinIcons.pngbin136242 -> 142662 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.pngbin14761 -> 14830 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.pngbin14440 -> 14505 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.pngbin16850 -> 16770 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.pngbin16091 -> 15841 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.pngbin14984 -> 14924 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridAlignmentTest-layoutAlignment_ANY_Firefox__alignment.pngbin10032 -> 14476 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridCaptionTest-LayoutCaption_ANY_Firefox__caption.pngbin46881 -> 50040 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__initial.pngbin22518 -> 28245 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.pngbin23439 -> 28962 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.pngbin20480 -> 26949 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.pngbin23489 -> 28911 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.pngbin20901 -> 25261 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridIconTest-LayoutIcon_ANY_Firefox__icon.pngbin61735 -> 66924 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.pngbin19010 -> 22180 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.pngbin20791 -> 23908 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.pngbin20728 -> 23964 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.pngbin19141 -> 22090 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.pngbin19816 -> 25349 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.pngbin0 -> 25536 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.pngbin19961 -> 25776 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.pngbin0 -> 25784 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.pngbin19921 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.pngbin72130 -> 78698 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.pngbin22518 -> 28249 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.pngbin23439 -> 29180 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.pngbin22581 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize600px.pngbin0 -> 27037 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.pngbin23590 -> 26068 bytes
-rw-r--r--uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.pngbin21718 -> 28419 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.pngbin11078 -> 11852 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.pngbin10176 -> 11137 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.pngbin12189 -> 12801 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.pngbin11941 -> 12348 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.pngbin11089 -> 11868 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HAlignmentTest-layoutAlignment_ANY_Firefox__alignment.pngbin10684 -> 17330 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HCaptionTest-LayoutCaption_ANY_Firefox__caption.pngbin20427 -> 22580 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__initial.pngbin15848 -> 20636 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.pngbin16719 -> 22882 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.pngbin16538 -> 22257 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.pngbin16800 -> 22600 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.pngbin17358 -> 22764 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HIconTest-LayoutIcon_ANY_Firefox__icon.pngbin33972 -> 22810 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.pngbin15604 -> 18327 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.pngbin16567 -> 19337 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.pngbin16434 -> 19217 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.pngbin15696 -> 18442 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.pngbin15044 -> 18264 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.pngbin0 -> 18951 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.pngbin15627 -> 19000 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.pngbin0 -> 19042 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.pngbin15492 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.pngbin41953 -> 27747 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.pngbin15848 -> 20636 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.pngbin16719 -> 24778 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.pngbin16538 -> 20176 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.pngbin16800 -> 23476 bytes
-rw-r--r--uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.pngbin17358 -> 14336 bytes
-rw-r--r--uitest/reference-screenshots/firefox/ReindeerThemeTest-testTheme_ANY_Firefox__uploads.pngbin23685 -> 26748 bytes
-rw-r--r--uitest/reference-screenshots/firefox/RunoThemeTest-testTheme_ANY_Firefox__uploads.pngbin22473 -> 27048 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.pngbin14706 -> 14899 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.pngbin14382 -> 14634 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.pngbin16690 -> 16924 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.pngbin15916 -> 16013 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.pngbin14811 -> 15061 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VAlignmentTest-layoutAlignment_ANY_Firefox__alignment.pngbin12146 -> 17254 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VCaptionTest-LayoutCaption_ANY_Firefox__caption.pngbin31217 -> 33039 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__initial.pngbin23099 -> 30119 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__scrolled.pngbin0 -> 30119 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.pngbin24057 -> 30059 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.pngbin23663 -> 30007 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.pngbin23877 -> 29878 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.pngbin23601 -> 29942 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VIconTest-LayoutIcon_ANY_Firefox__icon.pngbin59175 -> 67433 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.pngbin18444 -> 21725 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.pngbin22408 -> 28129 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.pngbin22399 -> 28120 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.pngbin22246 -> 27954 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.pngbin19310 -> 25681 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.pngbin0 -> 25854 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.pngbin19361 -> 26106 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.pngbin0 -> 26113 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.pngbin19330 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.pngbin72791 -> 52231 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.pngbin23099 -> 29152 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.pngbin24057 -> 29822 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.pngbin23663 -> 28706 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.pngbin23877 -> 29618 bytes
-rw-r--r--uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.pngbin23601 -> 29684 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/BaseThemeTest-testTheme_Windows_InternetExplorer_11_uploads.pngbin15741 -> 15878 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ChameleonThemeTest-testTheme_Windows_InternetExplorer_11_uploads.pngbin17283 -> 17690 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col2-col3.pngbin6008 -> 6004 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col3.pngbin5465 -> 5509 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col2-col3.pngbin5650 -> 5623 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col3.pngbin4823 -> 4866 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.pngbin10114 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.pngbin10266 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.pngbin19115 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.pngbin10270 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.pngbin10423 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.pngbin20178 -> 0 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/FontIconsTest-checkScreenshot_Windows_InternetExplorer_11_allVaadinIcons.pngbin78400 -> 78186 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.pngbin13046 -> 12917 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.pngbin12733 -> 12585 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.pngbin14084 -> 13797 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.pngbin13715 -> 13416 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.pngbin13306 -> 13003 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.pngbin8454 -> 10602 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.pngbin39975 -> 39532 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.pngbin17582 -> 19246 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin18227 -> 19721 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.pngbin17446 -> 19417 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin18272 -> 19976 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin17422 -> 18587 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.pngbin51457 -> 51362 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.pngbin16658 -> 17916 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.pngbin18463 -> 19189 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.pngbin18229 -> 19170 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.pngbin16763 -> 17397 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.pngbin15986 -> 17356 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.pngbin0 -> 17513 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.pngbin16115 -> 17772 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.pngbin0 -> 17759 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.pngbin16070 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.pngbin0 -> 62976 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.pngbin61180 -> 62616 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.pngbin17582 -> 19209 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin18227 -> 19731 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.pngbin18252 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize600px.pngbin0 -> 19422 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin18746 -> 19006 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin17167 -> 19844 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.pngbin10605 -> 10793 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.pngbin9846 -> 10006 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.pngbin11550 -> 11368 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.pngbin10959 -> 10976 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.pngbin10662 -> 10795 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.pngbin9946 -> 12215 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.pngbin18054 -> 17463 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.pngbin14056 -> 15865 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin14876 -> 17340 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.pngbin14780 -> 16997 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin14925 -> 17143 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin15223 -> 17345 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon-scrolled.pngbin0 -> 22405 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.pngbin31984 -> 18956 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.pngbin14193 -> 14301 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.pngbin15150 -> 15417 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.pngbin15166 -> 15258 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.pngbin14384 -> 14482 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.pngbin15127 -> 14163 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.pngbin0 -> 14882 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.pngbin15748 -> 14925 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.pngbin0 -> 14955 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.pngbin15608 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-End.pngbin0 -> 22054 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-Middle.pngbin0 -> 26631 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.pngbin37909 -> 22926 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.pngbin14056 -> 15865 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin14876 -> 19873 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.pngbin14780 -> 15839 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin14925 -> 18489 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin15223 -> 12061 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ReindeerThemeTest-testTheme_Windows_InternetExplorer_11_uploads.pngbin20846 -> 21180 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_large.pngbin11610 -> 11619 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_small.pngbin6122 -> 7045 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment-scrolled.pngbin0 -> 12501 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.pngbin10148 -> 12255 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.pngbin18248 -> 21605 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_scrolled.pngbin0 -> 21605 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin18777 -> 21722 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.pngbin18921 -> 21674 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin18611 -> 21530 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin18882 -> 21576 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.pngbin49448 -> 51548 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.pngbin16109 -> 16675 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.pngbin18350 -> 19515 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.pngbin18352 -> 19511 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.pngbin18212 -> 19350 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.pngbin15607 -> 17694 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.pngbin0 -> 17840 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.pngbin15660 -> 18081 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.pngbin0 -> 18079 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.pngbin15633 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.pngbin0 -> 26279 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.pngbin59097 -> 41590 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.pngbin18248 -> 20358 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.pngbin18777 -> 20573 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.pngbin18921 -> 19951 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.pngbin18611 -> 20393 bytes
-rwxr-xr-xuitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.pngbin18882 -> 20463 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.pngbin10908 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.pngbin10908 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.pngbin21406 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.pngbin11216 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.pngbin11216 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.pngbin22745 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/GridLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.pngbin17409 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/GridLayoutSizingTest-LayoutSizing_LINUX_PhantomJS_1_setSize350px.pngbin20104 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/HLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.pngbin13954 -> 0 bytes
-rw-r--r--uitest/reference-screenshots/phantomjs/VLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.pngbin16941 -> 0 bytes
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayout.java38
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java45
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxWithinHorizontalLayout.java77
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcut.java47
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChange.java56
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDates.java185
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridScrollDownResize.java34
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSort.java35
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeight.java76
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReplace.java44
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItem.java64
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozen.java40
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridWithFullWidthComponents.java79
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnly.java36
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLink.java38
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java3
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java41
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java86
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/tree/TreeWideContent.java2
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumn.java75
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java64
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/ui/MultiFileUploadTest.java1
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/upload/UploadChangeListener.java31
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/upload/UploadHtmlCaption.java40
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/upload/UploadNoSelection.java20
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowAsync.java122
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocused.java41
-rw-r--r--uitest/src/main/java/com/vaadin/tests/dnd/CriterionSerialization.java59
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java37
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseAlignment.java2
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutExpand.java2
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutForSpacingMargin.java2
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutTestUI.java29
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridAlignment.java3
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridBaseLayoutTestUI.java9
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridComponentSizing.java1
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridIcon.java10
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutExpand.java3
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutMarginSpacing.java4
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegError.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizing.java64
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAddReplaceMove.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAlignment.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HComponentSizing.java25
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HIcon.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutMarginSpacing.java27
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegError.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutSizing.java36
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignment.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizing.java10
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VIcon.java10
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutMarginSpacing.java28
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegError.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutSizing.java13
-rw-r--r--uitest/src/main/java/com/vaadin/tests/tooltip/NestedOverlayTooltip.java120
-rw-r--r--uitest/src/main/java/com/vaadin/tests/widgetset/client/upload/AllowUploadWithoutFilenameConnector.java25
-rw-r--r--uitest/src/main/java/com/vaadin/tests/widgetset/server/upload/AllowUploadWithoutFilenameExtension.java13
-rw-r--r--uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java89
-rw-r--r--uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java4
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/colorpicker/ValoColorPickerInputFormatsTest.java2
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayoutTest.java29
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java26
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcutTest.java39
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldBinderCrossValidationTest.java48
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldFaultyInputNotValidTest.java5
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChangeTest.java57
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldReadOnlyTest.java61
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldReadOnlyTest.java61
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDatesTest.java155
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSortTest.java40
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeightTest.java39
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridEditorFrozenColumnsUITest.java2
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnReplaceTest.java34
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItemTest.java91
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozenTest.java38
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridWithFullWidthComponentsTest.java61
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnlyTest.java206
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java77
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java40
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java48
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java6
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumnTest.java40
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java38
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/ui/MultiFileUploadTestTest.java102
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/upload/InterruptUploadTest.java48
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/upload/UploadChangeListenerTest.java90
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/upload/UploadHtmlCaptionTest.java67
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/upload/UploadNoSelectionTest.java32
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowAsyncTest.java32
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocusedTest.java27
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/window/ClosingWindowWithBrowserFrameShouldntGenerate404Test.java22
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java29
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutMarginSpacingTest.java6
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutSizingTest.java5
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegErrorTest.java23
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizingTest.java7
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HIconTest.java28
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegErrorTest.java41
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignmentTest.java24
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizingTest.java43
-rw-r--r--uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegErrorTest.java24
-rw-r--r--uitest/src/test/java/com/vaadin/tests/tb3/BrowserStackBrowserFactory.java3
-rw-r--r--uitest/src/test/java/com/vaadin/tests/tooltip/NestedOverlayTooltipTest.java73
-rw-r--r--uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java28
600 files changed, 5783 insertions, 657 deletions
diff --git a/README-DEV.md b/README-DEV.md
new file mode 100644
index 0000000000..d787b6ba4a
--- /dev/null
+++ b/README-DEV.md
@@ -0,0 +1,186 @@
+# Development Instructions
+
+To contribute, first refer to [Contributing Code](https://github.com/vaadin/framework/blob/master/CONTRIBUTING.md)
+for general instructions and requirements for contributing code to the Vaadin framework.
+
+We appreciate all contributors and want to make submitting changes as easy as possible. If you find any mistakes, unclear parts or out-of-date instructions, please let us know by submitting an issue or a pull request.
+
+#### Table of Contents
+1. [Building a package](#building-a-package)
+1. [About committing changes](#about-committing-changes)
+1. [Eclipse quick setup](#eclipse-quick-setup)
+1. [IntelliJ IDEA quick setup](#intellij-idea-quick-setup)
+
+## Building a package
+
+The distribution files can be built by running the standard Maven goal `mvn install` in the project root.
+
+## About committing changes
+
+Despite our best efforts the formatting options aren't always entirely consistent between different development environments, and sometimes we miss inconsistent formatting during code review. When you commit your changes for a pull request, try to make sure that the commit _only contains changes that are relevant to your patch,_ or at least closely affiliated with the relevant changes. Random formatting changes all over the changed file(s) make it difficult to grasp the main purpose of your patch.
+
+## Eclipse quick setup
+
+For IntelliJ IDEA users, see [IntelliJ IDEA Quick Setup](#intellij-idea-quick-setup).
+
+1. Decide were you would like your Eclipse workspace to be located.
+ * This project contains multiple modules and uses configurations that might clash with your existing projects, using a separate workspace is recommended.
+ * Eclipse Oxygen is recommended, different versions may treat formatting rules differently.
+ * If you are using Windows, you may wish to keep the workspace path reasonably short (e.g. `C:\dev\<workspaceName>`) to avoid problems with too long file paths.
+1. Start Eclipse with your chosen workspace and set up [workspace preferences](#workspace-preferences).
+1. Clone the repository within your selected workspace using Eclipse's clone wizard, using your favorite Git tool, or in command-line running
+<code>git clone https://github.com/vaadin/framework.git</code> command.
+ * Eclipse's clone wizard can be found within Git perspective (*Window* -> *Perspectives* -> *Open Perspective* -> *Git*). _Only_ clone the project at this stage, do not let the clone wizard import projects as well.
+ * If using Windows, you might also want to add these Git settings: `core.autocrlf=false` and `core.fileMode=false`. You can do this in Eclipse by right-clicking the repository in Git perspective, clicking *Properties*, then *Add Entry...* and using key `core.autocrlf` and value `false` etc.
+ * If too long file paths become a problem you may also need `core.longpaths=true`.
+1. Import the project into Eclipse as a Maven project. Use *File* -> *Import* -> *Maven* -> *Existing Maven Projects*.
+1. Select the *framework* folder (where you cloned the project).
+ * It is not necessary to import all the modules, but it is recommended to include at least the root module, `vaadin-uitest` module, and any modules you may wish to make changes to. You can import more modules when needed by repeating these last steps.
+1. Click “Finish” to complete the import of Vaadin Framework.
+
+### Workspace preferences
+
+The following preferences need to be set to keep the project consistent. You need to do this especially to be able to contribute changes to the project.
+
+#### General
+
+1. Open *Window* -> *Preferences* (Windows) or *Eclipse* -> *Preferences* (Mac)
+1. Go to *General* -> *Workspace*
+ - Set *Text file encoding* to *UTF-8*
+ - Set *New text file line delimiter* to *Unix*
+1. Go to *XML* -> *XML Files* -> *Editor*
+ - Ensure the settings are follows:
+ - Line width: 72
+ - Format comments: true
+ - Join lines: true
+ - Insert whitespace before closing empty end-tags: true
+ - Indent-using spaces: true
+ - Indentation size: 4
+1. Go to *Java* -> *Compiler* -> *Errors*
+ - Switch *Serializable class without serialVersionUID* to *Ignore*
+1. Go to *Java* -> *Installed JREs*
+ - Select a Java 8 JDK as the default
+
+#### Configuration files
+
+1. Open *Window* -> *Preferences* (Windows) or *Eclipse* -> *Preferences* (Mac)
+1. Go to *Java* -> *Code Style* -> *Clean Up*
+ - Import /eclipse/VaadinCleanup.xml
+1. Go to *Java* -> *Code Style* -> *Formatter*
+ - Import /eclipse/VaadinJavaConventions.xml
+
+#### Save actions
+
+1. Open *Window* -> *Preferences* (Windows) or *Eclipse* -> *Preferences* (Mac)
+1. Go to *Java* -> *Editor* -> *Save Actions*
+ - Check *Perform the selected actions on save*
+ - Check *Format source code*
+ - Select *Format edited lines*
+ - Check *Organize imports*
+ - Check *Additional actions*
+ - Click *Configure*
+ 1. In tab *Code Organizing*
+ - Check *Remove trailing whitespace*
+ - Select *All lines*
+ - Uncheck everything else
+ 1. In tab *Code Style*
+ - Check *Use blocks in if/while/for/do statements*
+ - Select *Always*
+ - Uncheck everything else
+ 1. In tab *Member Accesses*
+ - Check *Use 'this' qualifier for field accesses*
+ - Select *Only if necessary*
+ - Check *Use 'this' qualifier for method accesses*
+ - Select *Only if necessary*
+ - Uncheck everything else
+ 1. In tab *Missing Code*
+ - Check *Add missing Annotations*
+ - Check *'@Override'*
+ - Check *Implementations of interface methods (1.6 or higher)*
+ - Check *'@Deprecated'*
+ 1. In tab *Unnecessary Code*
+ - Check *Remove unused imports* and *Remove unnecessary casts*, uncheck everything else.
+ 1. Click *OK*
+
+After that is done, you should have 9 of 28 save actions activated and listed as such:
+
+* Remove 'this' qualifier for non static field accesses
+* Remove 'this' qualifier for non static method accesses
+* Convert control statement bodies to block
+* Remove unused imports
+* Add missing '@Override' annotations
+* Add missing '@Override' annotations to implementations of interface methods
+* Add missing '@Deprecated' annotations
+* Remove unnecessary casts
+* Remove trailing white spaces on all lines
+
+### Getting started
+
+Run <code>install</code> maven goal for the project root to get started.
+In Eclipse this is done by right-clicking on the project root in Project Explorer and choosing *Run As* -> *Maven Build...*. If you choose to skip tests you may need to run the <code>install</code> maven goal for `vaadin-uitest` project separately.
+* Note that the first compilation takes a while to finish as Maven downloads dependencies used in the projects.
+* In some Windows environments the compilation doesn't respect the `core.autocrlf=false` and the workspace preferences listed in the previous section, and running <code>install</code> converts all line endings from six core projects (root, `vaadin-client`, `vaadin-server`, `vaadin-shared`, `vaadin-testbench-api`, `vaadin-uitest`) to Windows-style. As a quick-and-dirty workaround you can change the line endings back through *File* -> *Convert Line Delimiters To* -> *Unix* and comment out references to plugins `net.revelc.code.formatter` and `com.github.dantwining.whitespace-maven-plugin` from each affected module's pom.xml (root project references them twice) to prevent it from happening again. *Do not* include those changes or any files with Windows-style line endings in any pull request. Because you consequently lose the formatting benefits of those plugins, you also need to be more careful about not including irrelevant formatting changes in your commits.
+
+Now the project should compile without further configuration.
+
+### Compiling the default widgetset and themes
+
+* Compile the default widgetset by running <code>install</code> maven goal in `vaadin-client-compiled` module root.
+In Eclipse this is done by right clicking on `vaadin-client-compiled` project in Project Explorer and choosing *Run As* -> *Maven Build...*.
+You don't need to do this separately if you have already run <code>install</code> for the root project after your latest changes.
+* Compile the default themes by running <code>install</code> maven goal in `vaadin-themes` module root.
+In Eclipse this is done by right clicking on `vaadin-themes` project in Project Explorer and choosing *Run As* -> *Maven Build...*.
+You don't need to do this separately if you have already run <code>install</code> for the root project after your latest changes.
+
+### Running a UI test
+
+#### Using DevelopmentServerLauncher (recommended)
+1. In a Project Explorer navigate to *vaadin-uitest/src/main/java/com/vaadin/launcher*
+1. Right-click file DevelopmentServerLauncher.java
+1. Open *Run As* -> *Java Application*
+1. Open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+
+#### Using Jetty
+1. In a Project Explorer right-click *vaadin-uitest*
+1. Open *Run As* -> *Maven build...*
+1. Type in <code>jetty:run-exploded</code> into *Goals* and click *Run*
+1. Open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+
+For full instructions please visit [README-TESTS.md](README-TESTS.md).
+
+## IntelliJ IDEA quick setup
+
+For Eclipse users, see [Eclipse Quick Setup](#eclipse-quick-setup).
+
+1. Install and run IDEA. Ultimate Edition is better but Community Edition should also work.
+1. Ensure if Git and Maven plugins are installed, properly configured and enabled.
+1. Clone the repository, using menu VCS -> Checkout from Version Control -> Git -> Git Repository URL -> https://github.com/vaadin/framework.git.
+ When the repository is cloned, do **NOT** open it as a project.
+ * If you are using Windows, you may wish to keep the workspace path reasonably short (e.g. `C:\dev\<workspaceName>`) to avoid problems with too long file paths.
+1. Open cloned repository as a maven object. Use File -> Open and choose root _pom.xml_ file
+1. Have a coffee break while IDEA is loading dependencies and indexing the project
+1. Run Maven targets <code>clean</code> and <code>install</code> using *Maven Projects* tool window to compile the whole project
+
+Unfortunately there is no easy way to replicate [Eclipse workspace preferences](#workspace-preferences) in their entirety in IDEA, but you can use [Eclipse Code Formatter plugin](https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter) to import /eclipse/VaadinCleanup.xml and /eclipse/VaadinJavaConventions.xml as a starting point.
+
+### Running a specific UI test
+
+1. Open *Maven Projects*
+1. Open *vaadin-uitest* -> *Plugins* -> *jetty* -> *jetty:run-exploded*
+1. Open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+
+For full instructions please visit [README-TESTS.md](README-TESTS.md).
+
+### Running a development server
+
+1. Open *Run* menu and click *Edit Configurations*
+1. Click green ***+*** sign at top left corner, select *Maven* from popup
+1. In the run configuration page, set any name for the configuration, select *vaadin-uitest* project folder as *Working directory*
+1. Type <code>exec:exec@run-development-server</code> into *Command line* and save the configuration
+1. Run the configuration and open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+
+### Running a development server in a debug mode
+
+1. Type <code>exec:exec@debug-development-server</code> into *Command line* and save the configuration
+1. In the same dialog, create new "Remote" debug configuration, using *localhost* and *Port 5005*
+1. Start both configurations and open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
diff --git a/README.md b/README.md
index 588449a09a..c6d7f31b5f 100644
--- a/README.md
+++ b/README.md
@@ -2,97 +2,25 @@
# Vaadin Framework
-*[Vaadin Framework](https://vaadin.com/framework) allows you to build modern web apps efficiently in plain Java, without touching low level web technologies.*
+*[Vaadin](https://vaadin.com) allows you to build modern web apps efficiently in plain Java, without touching low level web technologies.*
-For instructions about _using_ Vaadin to develop applications, please refer to [Vaadin tutorial](https://vaadin.com/docs/-/part/framework/tutorial.html) and other [documentation](https://vaadin.com/docs/).
+This repository contains source code and issue tracking for Vaadin 8 and Vaadin 7, both of which use GWT as the base of client-side implementations. You can find source code and issue tracking for newer, web component based Vaadin versions in [vaadin/platform](https://github.com/vaadin/platform).
-To contribute, first refer to [Contributing Code](https://github.com/vaadin/framework/blob/master/CONTRIBUTING.md)
-for general instructions and requirements for contributing code to the Vaadin framework.
-
-Instructions on how to set up a working environment for developing the Vaadin Framework follow below.
-
-## Building a package
-
-The distribution files can be built by running the standard Maven goal `mvn install` in the project root.
-
-## Eclipse Quick Setup
-
-1. Run
-<code>git clone https://github.com/vaadin/framework.git</code>
-command or clone the repository your favorite Git tool.
-If using Windows, you might want to add these Git settings: `core.autocrlf=false`, `core.fileMode=false` and `core.longpaths=true`.
-1. Run <code>mvn install</code> in the project root.
-Note that the first compilation takes a while to finish as maven downloads dependencies used in the projects.
-1. Start Eclipse with the workspace you would like to use. It is usually a good idea to use the parent folder of the Git repository as the workspace folder.
-1. Import the project into Eclipse as a maven project. Use *File* -> *Import* -> *Maven* -> *Existing Maven Projects*.
-1. Select the *framework* folder (where you cloned the project)
-1. Click “Finish” to complete the import of Vaadin Framework
-
-Now the project should compile without further configuration.
-
-### Compiling the Default Widget Set and Themes
-
-* Compile the default widgetset by running <code>install</code> maven goal in `vaadin-client-compiled` module root.
-In Eclipse this is done by right clicking on vaadin-client-compiled project it and choosing *Run As* -> *Maven Build...*.
-* Compile the default themes by running <code>install</code> maven goal in `vaadin-themes` module root.
-In Eclipse this is done by right clicking on vaadin-themes project it and choosing *Run As* -> *Maven Build...*.
-
-### Set up extra workspace preferences
+Vaadin 8 includes Vaadin 7 compatibility classes and is supported until February 21, 2022 (extended support will be available for ten years after that).
-The following preferences need to be set to keep the project consistent. You need to do this especially to be able to contribute changes to the project.
+Vaadin 7 support has already ended, [extended support](https://vaadin.com/support/vaadin-7-extended-maintenance) is available until February 2029.
-1. Open *Window* -> *Preferences* (Windows) or *Eclipse* -> *Preferences* (Mac)
-1. Go to *General* -> *Workspace*
- 1. Set *Text file encoding* to *UTF-8*
- 1. Set *New text file line delimiter* to *Unix*
-1. Go to XML -> XML Files -> Editor
- 1. Ensure the settings are follows:
+## Using Vaadin 8 to develop applications
- * Line width: 72
- * Format comments: true
- * Join lines: true
- * Insert whitespace before closing empty end-tags: true
- * Indent-using spaces: true
- * Indentation size: 4
+Please refer to [Vaadin tutorial](https://vaadin.com/docs/v8/framework/tutorial.html) and other [documentation](https://vaadin.com/docs/v8/index.html).
+For known issues within Vaadin framework, see [Issue Tracker](https://github.com/vaadin/framework/issues). Comment or react to an existing issue to mark your interest in resolving it. If you don't find an existing report of an issue you are experiencing, [submit a new issue](https://github.com/vaadin/framework/issues/new/choose).
-### Running a UI test
+## Contributing
-1. In a Project Explorer right-click *vaadin-uitest*
-1. Open *Run As* -> *Maven build...*
-1. Type in <code>jetty:run-exploded</code> into *Goals* and click *Run*
-1. Open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
-
-For full instructions please visit [README-TESTS.md](README-TESTS.md).
-
-## Setting up IntelliJ IDEA to Develop Vaadin Framework 8
-
-1. Install and run IDEA. Ultimate Edition is better but Community Edition should also work.
-1. Ensure if Git and Maven plugins are installed, properly configured and enabled.
-1. Clone the repository, using menu VCS -> Checkout from Version Control -> Git -> Git Repository URL -> https://github.com/vaadin/framework.git.
- When the repository is cloned, do **NOT** open it as a project.
-1. Open cloned repository as a maven object. Use File -> Open and choose root _pom.xml_ file
-1. Have a coffee break while IDEA is loading dependencies and indexing the project
-1. Run Maven targets <code>clean</code> and <code>install</code> using *Maven Projects* tool window to compile the whole project
-
-### Running a specific UI test
-
-1. Open *Maven Projects*
-1. Open *vaadin-uitest* -> *Plugins* -> *jetty* -> *jetty:run-exploded*
-1. Open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
-
-For full instructions please visit [README-TESTS.md](README-TESTS.md).
-
-### Running a Development Server
-
-1. Open *Run* menu and click *Edit Configurations*
-1. Click green ***+*** sign at top left corner, select *Maven* from popup
-1. In the run configuration page, set any name for the configuration, select *vaadin-uitest* project folder as *Working directory*
-1. Type <code>exec:exec@run-development-server</code> into *Command line* and save the configuration
-1. Run the configuration and open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+To contribute, first refer to [Contributing Code](CONTRIBUTING.md)
+for general instructions and requirements for contributing code to the Vaadin framework.
-### Running a Development Server in a debug mode
+For instructions on how to set up a working environment for developing the Vaadin framework, please visit [Development Instructions](README-DEV.md). Pay special attention to workspace preferences.
-1. Type <code>exec:exec@debug-development-server</code> into *Command line* and save the configuration
-1. In the same dialog, create new "Remote" debug configuration, using *localhost* and *Port 5005*
-1. Start both configurations and open URL [http://localhost:8888/run/&lt;testUI&gt;](http://localhost:8888/run/<testUI>)
+We appreciate all contributors and want to make submitting changes as easy as possible. If you find any mistakes, unclear parts or out-of-date instructions, please let us know by submitting an issue or a pull request.
diff --git a/all/pom.xml b/all/pom.xml
index 72dd56d37a..daa3f57578 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-all</artifactId>
<name>vaadin-all</name>
diff --git a/all/src/main/templates/release-notes.html b/all/src/main/templates/release-notes.html
index a5a4743ab5..cdc1dbd015 100644
--- a/all/src/main/templates/release-notes.html
+++ b/all/src/main/templates/release-notes.html
@@ -83,28 +83,26 @@
enhancements. Below is a list of the most notable changes:</p>
<ul>
- <li><tt></tt></li>
- <li><tt></tt></li>
- <li></li>
+ <li></li>
</ul>
</p>
<p>
- For enhancements introduced in Vaadin Framework 8.9, see the <a
- href="http://vaadin.com/download/release/8.9/8.9.0/release-notes.html">Release
- Notes for Vaadin Framework 8.9.0</a>.
+ For enhancements introduced in Vaadin Framework 8.11, see the <a
+ href="http://vaadin.com/download/release/8.11/8.11.0/release-notes.html">Release
+ Notes for Vaadin Framework 8.11.0</a>.
For migrating from previous framework versions, see <a href="#incompatible">the list of incompatible changes</a> and <a href="#migrating">how to migrate
to Vaadin Framework 8</a>.
</p>
- <h2 id="incompatible">No Incompatible or Behavior-altering Changes in @version-minor@</h2>
+ <h2 id="incompatible">Incompatible or Behavior-altering Changes in @version-minor@</h2>
<ul>
<li></li>
</ul>
- <h2>For incompatible or behavior-altering changes in 8.9, please see <a href="https://vaadin.com/download/release/8.9/8.9.0/release-notes.html#incompatible">8.9 release notes</a></h2>
+ <h2>For incompatible or behavior-altering changes in 8.11, please see <a href="https://vaadin.com/download/release/8.11/8.11.0/release-notes.html#incompatible">8.11 release notes</a></h2>
<h3 id="knownissues">Known Issues and Limitations</h3>
<ul>
diff --git a/bom/pom.xml b/bom/pom.xml
index a412d3e6b7..7e5b320d57 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -11,7 +11,7 @@
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<packaging>pom</packaging>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
<name>Vaadin Framework (Bill of Materials)</name>
<description>Vaadin Framework (Bill of Materials)</description>
<url>http://vaadin.com</url>
diff --git a/client-compiled/pom.xml b/client-compiled/pom.xml
index 5935c6b799..bccdc07424 100644
--- a/client-compiled/pom.xml
+++ b/client-compiled/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<!-- Needed by a plugin in release build -->
<groupId>com.vaadin</groupId>
diff --git a/client-compiler/pom.xml b/client-compiler/pom.xml
index 270e789119..455a7c4736 100644
--- a/client-compiler/pom.xml
+++ b/client-compiler/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-client-compiler</artifactId>
<name>vaadin-client-compiler</name>
diff --git a/client/pom.xml b/client/pom.xml
index cc0e2281d1..4dd4dac700 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<!-- Needed by a plugin in release build -->
<groupId>com.vaadin</groupId>
diff --git a/client/src/main/java/com/vaadin/client/Util.java b/client/src/main/java/com/vaadin/client/Util.java
index 02c21179bf..02c545f563 100644
--- a/client/src/main/java/com/vaadin/client/Util.java
+++ b/client/src/main/java/com/vaadin/client/Util.java
@@ -579,15 +579,10 @@ public class Util {
}
if (connector != null) {
- // check that inside the rootElement
- while (browseElement != null && browseElement != rootElement) {
- browseElement = browseElement.getParentElement();
- }
- if (browseElement != rootElement) {
- return null;
- } else {
+ if (isConnectedToParent(browseElement, rootElement)) {
return connector;
}
+ return null;
}
browseElement = browseElement.getParentElement();
@@ -606,6 +601,28 @@ public class Util {
}
}
+ private static boolean isConnectedToParent(Element element,
+ Element rootElement) {
+ Element browseElement = element;
+ // check if inside the rootElement
+ while (browseElement != null && browseElement != rootElement) {
+ browseElement = browseElement.getParentElement();
+ }
+ if (browseElement == rootElement) {
+ return true;
+ }
+ // Not inside the root, possibly inside a VOverlay such as
+ // VWindow instead.
+ @SuppressWarnings("deprecation")
+ VOverlay overlay = WidgetUtil.findWidget(element, VOverlay.class,
+ false);
+ if (overlay != null && overlay.getOwner() != null) {
+ browseElement = overlay.getOwner().getElement();
+ return isConnectedToParent(browseElement, rootElement);
+ }
+ return false;
+ }
+
/**
* Will (attempt) to focus the given DOM Element.
*
diff --git a/client/src/main/java/com/vaadin/client/WidgetUtil.java b/client/src/main/java/com/vaadin/client/WidgetUtil.java
index 6906f5fa5e..7a268a0a8a 100644
--- a/client/src/main/java/com/vaadin/client/WidgetUtil.java
+++ b/client/src/main/java/com/vaadin/client/WidgetUtil.java
@@ -42,6 +42,7 @@ import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.shared.ui.ErrorLevel;
import com.vaadin.shared.util.SharedUtil;
@@ -1962,4 +1963,25 @@ public class WidgetUtil {
return indicator;
}
}
+
+ public static void disableBrowserAutocomplete(TextBox textBox) {
+ /*-
+ * Stop the browser from showing its own suggestion popup.
+ *
+ * Using an invalid value instead of "off" as suggested by
+ * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
+ *
+ * Leaving the non-standard Safari options autocapitalize and
+ * autocorrect untouched since those do not interfere in the same
+ * way, and they might be useful in a combo box where new items are
+ * allowed.
+ */
+ if (BrowserInfo.get().isChrome()) {
+ // Chrome supports "off" and random number does not work with
+ // Chrome
+ textBox.getElement().setAttribute("autocomplete", "off");
+ } else {
+ textBox.getElement().setAttribute("autocomplete", Math.random() + "");
+ }
+ }
}
diff --git a/client/src/main/java/com/vaadin/client/communication/DefaultConnectionStateHandler.java b/client/src/main/java/com/vaadin/client/communication/DefaultConnectionStateHandler.java
index 27c7052d30..f0630592be 100644
--- a/client/src/main/java/com/vaadin/client/communication/DefaultConnectionStateHandler.java
+++ b/client/src/main/java/com/vaadin/client/communication/DefaultConnectionStateHandler.java
@@ -146,7 +146,7 @@ public class DefaultConnectionStateHandler implements ConnectionStateHandler {
int statusCode = response.getStatusCode();
getLogger().warning("Heartbeat request returned " + statusCode);
- if (response.getStatusCode() == Response.SC_GONE) {
+ if (response.getStatusCode() == Response.SC_FORBIDDEN) {
// Session expired
getConnection().showSessionExpiredError(null);
stopApplication();
diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java
index 74a584aa5b..ef240e8ba4 100644
--- a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java
+++ b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java
@@ -43,10 +43,13 @@ import com.vaadin.client.annotations.OnStateChange;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.connectors.AbstractListingConnector;
import com.vaadin.client.connectors.grid.ColumnConnector.CustomColumn;
+import com.vaadin.client.data.AbstractRemoteDataSource;
import com.vaadin.client.data.DataSource;
import com.vaadin.client.ui.SimpleManagedLayout;
import com.vaadin.client.widget.escalator.RowContainer;
import com.vaadin.client.widget.grid.CellReference;
+import com.vaadin.client.widget.grid.DataAvailableEvent;
+import com.vaadin.client.widget.grid.DataAvailableHandler;
import com.vaadin.client.widget.grid.EventCellReference;
import com.vaadin.client.widget.grid.events.BodyClickHandler;
import com.vaadin.client.widget.grid.events.BodyDoubleClickHandler;
@@ -93,13 +96,15 @@ public class GridConnector extends AbstractListingConnector
* The scrolling methods must trigger the scrolling only after any potential
* resizing or other similar action triggered from the server side within
* the same round trip has had a chance to happen, so there needs to be a
- * delay. The delay is done with <code>scheduleFinally</code> rather than
- * <code>scheduleDeferred</code> because the latter has been known to cause
- * flickering in Grid.
+ * delay. The delay is done with <code>scheduleDeferred</code> rather than
+ * <code>scheduleFinally</code> because otherwise the order of the
+ * operations isn't guaranteed.
*
*/
private class GridConnectorClientRpc implements GridClientRpc {
private final Grid<JsonObject> grid;
+ private HandlerRegistration dataAvailableHandlerRegistration = null;
+ private boolean recalculateScheduled = false;
private GridConnectorClientRpc(Grid<JsonObject> grid) {
this.grid = grid;
@@ -107,7 +112,7 @@ public class GridConnector extends AbstractListingConnector
@Override
public void scrollToRow(int row, ScrollDestination destination) {
- Scheduler.get().scheduleFinally(() -> {
+ Scheduler.get().scheduleDeferred(() -> {
grid.scrollToRow(row, destination);
// Add details refresh listener and handle possible detail
// for scrolled row.
@@ -121,12 +126,12 @@ public class GridConnector extends AbstractListingConnector
@Override
public void scrollToStart() {
- Scheduler.get().scheduleFinally(() -> grid.scrollToStart());
+ Scheduler.get().scheduleDeferred(() -> grid.scrollToStart());
}
@Override
public void scrollToEnd() {
- Scheduler.get().scheduleFinally(() -> {
+ Scheduler.get().scheduleDeferred(() -> {
grid.scrollToEnd();
addDetailsRefreshCallback(() -> {
if (rowHasDetails(grid.getDataSource().size() - 1)) {
@@ -138,7 +143,51 @@ public class GridConnector extends AbstractListingConnector
@Override
public void recalculateColumnWidths() {
- grid.recalculateColumnWidths();
+ if (recalculateScheduled) {
+ return;
+ }
+
+ // Must be scheduled so that possible refreshAll has time to clear
+ // the cache.
+ recalculateScheduled = true;
+ Scheduler.get().scheduleFinally(() -> {
+ // If cache has been cleared, wait for data to become available.
+ // Don't trigger another attempt if there is already a handler
+ // waiting, that one will trigger the call when calculations are
+ // possible and clear out the registration afterwards.
+ if (((AbstractRemoteDataSource<JsonObject>) getDataSource())
+ .getCachedRange().length() == 0
+ && getDataSource().size() > 0) {
+ if (dataAvailableHandlerRegistration == null) {
+ dataAvailableHandlerRegistration = grid
+ .addDataAvailableHandler(
+ new DataAvailableHandler() {
+
+ @Override
+ public void onDataAvailable(
+ DataAvailableEvent event) {
+ if (event.getAvailableRows()
+ .length() == 0
+ && getDataSource()
+ .size() > 0) {
+ // Cache not populated yet,
+ // wait for next call.
+ return;
+ }
+ grid.recalculateColumnWidths();
+ if (dataAvailableHandlerRegistration != null) {
+ dataAvailableHandlerRegistration
+ .removeHandler();
+ dataAvailableHandlerRegistration = null;
+ }
+ }
+ });
+ }
+ } else if (dataAvailableHandlerRegistration == null) {
+ grid.recalculateColumnWidths();
+ }
+ recalculateScheduled = false;
+ });
}
}
diff --git a/client/src/main/java/com/vaadin/client/ui/ShortcutActionHandler.java b/client/src/main/java/com/vaadin/client/ui/ShortcutActionHandler.java
index 7499779352..1c03a2719d 100644
--- a/client/src/main/java/com/vaadin/client/ui/ShortcutActionHandler.java
+++ b/client/src/main/java/com/vaadin/client/ui/ShortcutActionHandler.java
@@ -126,15 +126,31 @@ public class ShortcutActionHandler {
target = Util.findPaintable(client, et);
}
final ComponentConnector finalTarget = target;
-
event.preventDefault();
-
/*
* The focused component might have unpublished changes, try to
* synchronize them before firing shortcut action.
*/
client.flushActiveConnector();
-
+ /*
+ * Legacy components don't have built-in logic for flushing, they need a
+ * workaround with blur and focus to trigger the value change.
+ */
+ ComponentConnector activeConnector = getActiveConnector(client);
+ if (activeConnector != null) {
+ Class<?> clz = activeConnector.getClass();
+ while (clz != null) {
+ if (clz.getName().equals(
+ "com.vaadin.v7.client.ui.AbstractLegacyComponentConnector")) {
+ shakeTarget(et);
+ Scheduler.get().scheduleDeferred(() -> {
+ shakeTarget(et);
+ });
+ break;
+ }
+ clz = clz.getSuperclass();
+ }
+ }
Scheduler.get().scheduleDeferred(() -> {
if (finalTarget != null) {
client.updateVariable(paintableId, "actiontarget", finalTarget,
@@ -144,6 +160,26 @@ public class ShortcutActionHandler {
});
}
+ /**
+ * We try to fire value change in the component the key combination was
+ * typed. E.g. TextField may contain newly typed text that is expected to be
+ * sent to server before the shortcut action is triggered. This is done by
+ * removing focus and then returning it immediately back to target element.
+ * <p>
+ * This is a hack copied over from V7 in order to keep the compatibility
+ * classes working. Main V8 classes don't require shaking.
+ */
+ private static void shakeTarget(final Element e) {
+ blur(e);
+ focus(e);
+ }
+
+ private static native ComponentConnector getActiveConnector(
+ ApplicationConnection ac)
+ /*-{
+ return ac.@com.vaadin.client.ApplicationConnection::getActiveConnector()();
+ }-*/;
+
private static native void blur(Element e)
/*-{
if (e.blur) {
diff --git a/client/src/main/java/com/vaadin/client/ui/VAbstractCalendarPanel.java b/client/src/main/java/com/vaadin/client/ui/VAbstractCalendarPanel.java
index c049a25a53..ff60fe154d 100644
--- a/client/src/main/java/com/vaadin/client/ui/VAbstractCalendarPanel.java
+++ b/client/src/main/java/com/vaadin/client/ui/VAbstractCalendarPanel.java
@@ -16,6 +16,8 @@
package com.vaadin.client.ui;
+import static com.vaadin.client.DateTimeService.asTwoDigits;
+
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -30,7 +32,6 @@ import com.google.gwt.aria.client.Roles;
import com.google.gwt.aria.client.SelectedValue;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -56,14 +57,11 @@ import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.client.BrowserInfo;
import com.vaadin.client.DateTimeService;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.aria.AriaHelper;
import com.vaadin.shared.util.SharedUtil;
-import static com.vaadin.client.DateTimeService.asTwoDigits;
-
/**
* Abstract calendar panel to show and select a date using a resolution. The
* class is parameterized by the date resolution enumeration type.
@@ -764,8 +762,18 @@ public abstract class VAbstractCalendarPanel<R extends Enum<R>>
return true;
}
+ // If dateStrResolution has more year digits than rangeEnd, we need
+ // to pad it in order to be lexicographically compatible
String dateStrResolution = dateStrResolution(date, minResolution);
- return rangeEnd.substring(0, dateStrResolution.length())
+ String paddedEnd = rangeEnd.substring(0);
+ int yearDigits = dateStrResolution.indexOf("-");
+ if (yearDigits == -1) {
+ yearDigits = dateStrResolution.length();
+ }
+ while (paddedEnd.indexOf("-") < yearDigits) {
+ paddedEnd = "0" + paddedEnd;
+ }
+ return paddedEnd.substring(0, dateStrResolution.length())
.compareTo(dateStrResolution) >= 0;
}
@@ -963,7 +971,13 @@ public abstract class VAbstractCalendarPanel<R extends Enum<R>>
* resolution of the calendar is changed and no date has been
* selected.
*/
+ @SuppressWarnings("rawtypes")
public void renderCalendar(boolean updateDate) {
+ if (parent instanceof VAbstractPopupCalendar
+ && !((VAbstractPopupCalendar) parent).popup.isShowing()) {
+ // a popup that isn't open cannot possibly need a focus change event
+ updateDate = false;
+ }
doRenderCalendar(updateDate);
initialRenderDone = true;
@@ -986,11 +1000,15 @@ public abstract class VAbstractCalendarPanel<R extends Enum<R>>
getDateField().getStylePrimaryName() + "-calendarpanel");
if (focusedDate == null) {
- Date now = new Date();
+ Date date = getDate();
+ if (date == null) {
+ date = new Date();
+ }
// focusedDate must have zero hours, mins, secs, millisecs
- focusedDate = new FocusedDate(now.getYear(), now.getMonth(),
- now.getDate());
- displayedMonth = new FocusedDate(now.getYear(), now.getMonth(), 1);
+ focusedDate = new FocusedDate(date.getYear(), date.getMonth(),
+ date.getDate());
+ displayedMonth = new FocusedDate(date.getYear(), date.getMonth(),
+ 1);
}
if (updateDate && !isDay(getResolution())
@@ -2114,7 +2132,13 @@ public abstract class VAbstractCalendarPanel<R extends Enum<R>>
*/
public void setRangeEnd(String newRangeEnd) {
if (!SharedUtil.equals(rangeEnd, newRangeEnd)) {
- rangeEnd = newRangeEnd;
+ // Dates with year 10000 or more has + prefix, which is not compatible
+ // with format returned by dateStrResolution method
+ if (newRangeEnd.startsWith("+")) {
+ rangeEnd = newRangeEnd.substring(1);
+ } else {
+ rangeEnd = newRangeEnd;
+ }
if (initialRenderDone) {
// Dynamic updates to the range needs to render the calendar to
// update the element stylenames
diff --git a/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java b/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
index bf79fec545..5fd4fe6c55 100644
--- a/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
+++ b/client/src/main/java/com/vaadin/client/ui/VAbstractTextualDate.java
@@ -36,6 +36,7 @@ import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Focusable;
import com.vaadin.client.LocaleNotLoadedException;
import com.vaadin.client.LocaleService;
+import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.aria.AriaHelper;
import com.vaadin.client.ui.aria.HandlesAriaCaption;
import com.vaadin.client.ui.aria.HandlesAriaInvalid;
@@ -90,6 +91,8 @@ public abstract class VAbstractTextualDate<R extends Enum<R>>
if (BrowserInfo.get().isIE()) {
addDomHandler(this, KeyDownEvent.getType());
}
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(text);
add(text);
publishJSHelpers(getElement());
}
diff --git a/client/src/main/java/com/vaadin/client/ui/VComboBox.java b/client/src/main/java/com/vaadin/client/ui/VComboBox.java
index 438234d30b..6ff2f31a9a 100644
--- a/client/src/main/java/com/vaadin/client/ui/VComboBox.java
+++ b/client/src/main/java/com/vaadin/client/ui/VComboBox.java
@@ -81,6 +81,7 @@ import com.vaadin.client.ui.aria.HandlesAriaRequired;
import com.vaadin.client.ui.combobox.ComboBoxConnector;
import com.vaadin.client.ui.menubar.MenuBar;
import com.vaadin.client.ui.menubar.MenuItem;
+import com.vaadin.client.ui.orderedlayout.Slot;
import com.vaadin.shared.AbstractComponentState;
import com.vaadin.shared.ui.ComponentStateUtil;
import com.vaadin.shared.util.SharedUtil;
@@ -899,19 +900,33 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
}
}
- if (offsetWidth + menuMarginBorderPaddingWidth
- + left < VComboBox.this.getAbsoluteLeft()
- + VComboBox.this.getOffsetWidth()) {
- // Popup doesn't reach all the way to the end of the input
- // field, filtering may have changed the popup width.
- left = VComboBox.this.getAbsoluteLeft();
+ int comboBoxLeft = VComboBox.this.getAbsoluteLeft();
+ int comboBoxWidth = VComboBox.this.getOffsetWidth();
+ if (hasParentWithUnadjustedHorizontalPositioning()) {
+ // ComboBox itself may be incorrectly positioned, don't try to
+ // adjust horizontal popup position yet. Earlier width
+ // calculations must be performed anyway to avoid flickering.
+ if (top != topPosition) {
+ // Variable 'left' still contains the original popupLeft,
+ // 'top' has been updated, thus vertical position needs
+ // adjusting.
+ setPopupPosition(left, top);
+ }
+ return;
+ }
+ if (left > comboBoxLeft
+ || offsetWidth + menuMarginBorderPaddingWidth
+ + left < comboBoxLeft + comboBoxWidth) {
+ // Popup is positioned too far right or doesn't reach all the
+ // way to the end of the input field, filtering may have changed
+ // the popup width.
+ left = comboBoxLeft;
}
if (offsetWidth + menuMarginBorderPaddingWidth + left > Window
.getClientWidth()) {
// Popup doesn't fit the view, needs to be opened to the left
// instead.
- left = VComboBox.this.getAbsoluteLeft()
- + VComboBox.this.getOffsetWidth() - offsetWidth
+ left = comboBoxLeft + comboBoxWidth - offsetWidth
- (int) menuMarginBorderPaddingWidth;
}
if (left < 0) {
@@ -919,11 +934,58 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
menu.setWidth(Window.getClientWidth() + "px");
}
- setPopupPosition(left, top);
+ // Only update the position if it has changed.
+ if (top != topPosition || left != getPopupLeft()) {
+ setPopupPosition(left, top);
+ }
menu.scrollSelectionIntoView();
}
/**
+ * Checks whether there are any {@link VHorizontalLayout}s with
+ * incomplete internal position calculations among this VComboBox's
+ * parents.
+ *
+ * @return {@code true} if unadjusted parents found, {@code false}
+ * otherwise
+ */
+ private boolean hasParentWithUnadjustedHorizontalPositioning() {
+ /*
+ * If there are any VHorizontalLayouts among this VComboBox's
+ * parents, any spacing or expand ratio may cause incorrect
+ * intermediate positioning. The status of the layout's internal
+ * positioning can be checked from the first slot's margin-left
+ * style, which will be set to 0px if no spacing or expand ratio
+ * adjustments are needed, and to a negative pixel amount if they
+ * are. If the style hasn't been set at all, calculations are still
+ * underway. Popup position shouldn't be adjusted before such
+ * calculations have been finished.
+ *
+ * VVerticalLayout has the same logic but it only affects the
+ * vertical positioning, which is irrelevant for the calculations
+ * here.
+ */
+ Widget toCheck = VComboBox.this;
+ while (toCheck != null && !(toCheck.getParent() instanceof VUI)) {
+ toCheck = toCheck.getParent();
+ if (toCheck instanceof VHorizontalLayout) {
+ VHorizontalLayout hLayout = (VHorizontalLayout) toCheck;
+ // because hLayout is a parent it must have at least one
+ // child widget
+ Widget slot = hLayout.getWidget(0);
+ if (slot instanceof Slot && slot.getElement().getStyle()
+ .getMarginLeft().isEmpty()) {
+ // margin hasn't been set, layout's internal positioning
+ // is still being adjusted and ComboBox's position may
+ // not be final
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
* Adds in-line CSS rules to the DOM according to the
* suggestionPopupWidth field
*
@@ -1376,24 +1438,7 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
* @since 7.6.4
*/
public FilterSelectTextBox() {
- /*-
- * Stop the browser from showing its own suggestion popup.
- *
- * Using an invalid value instead of "off" as suggested by
- * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
- *
- * Leaving the non-standard Safari options autocapitalize and
- * autocorrect untouched since those do not interfere in the same
- * way, and they might be useful in a combo box where new items are
- * allowed.
- */
- if (BrowserInfo.get().isChrome()) {
- // Chrome supports "off" and random number does not work with
- // Chrome
- getElement().setAttribute("autocomplete", "off");
- } else {
- getElement().setAttribute("autocomplete", Math.random() + "");
- }
+ WidgetUtil.disableBrowserAutocomplete(this);
}
/**
@@ -1983,6 +2028,9 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,
/** For internal use only. May be removed or replaced in the future. */
public void updateReadOnly() {
+ if (readonly) {
+ suggestionPopup.hide();
+ }
debug("VComboBox: updateReadOnly()");
tb.setReadOnly(readonly || !textInputEnabled);
}
diff --git a/client/src/main/java/com/vaadin/client/ui/VContextMenu.java b/client/src/main/java/com/vaadin/client/ui/VContextMenu.java
index a27b93fa40..9ed3fccfe0 100644
--- a/client/src/main/java/com/vaadin/client/ui/VContextMenu.java
+++ b/client/src/main/java/com/vaadin/client/ui/VContextMenu.java
@@ -21,6 +21,7 @@ import java.util.Locale;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.TableRowElement;
import com.google.gwt.dom.client.TableSectionElement;
import com.google.gwt.event.dom.client.BlurEvent;
@@ -155,6 +156,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
setHeight(Window.getClientHeight() + "px");
}
setPopupPosition(menuLeft, menuTop);
+ getElement().getStyle().setPosition(Style.Position.FIXED);
/*
* Move keyboard focus to menu, deferring the focus setting so the
diff --git a/client/src/main/java/com/vaadin/client/ui/VRichTextArea.java b/client/src/main/java/com/vaadin/client/ui/VRichTextArea.java
index 1ed07c4cec..7f35ee4d4d 100644
--- a/client/src/main/java/com/vaadin/client/ui/VRichTextArea.java
+++ b/client/src/main/java/com/vaadin/client/ui/VRichTextArea.java
@@ -365,7 +365,7 @@ public class VRichTextArea extends Composite implements Field, KeyPressHandler,
BrowserInfo browser = BrowserInfo.get();
String result = getValue();
if (browser.isFirefox()) {
- if ("<br>".equals(result)) {
+ if ("<br>".equals(result) || "<div><br></div>".equals(result)) {
result = "";
}
} else if (browser.isWebkit() || browser.isEdge()) {
@@ -373,7 +373,7 @@ public class VRichTextArea extends Composite implements Field, KeyPressHandler,
result = "";
}
} else if (browser.isIE()) {
- if ("<P>&nbsp;</P>".equals(result)) {
+ if ("<P>&nbsp;</P>".equals(result) || "<p><br></p>".equals(result)) {
result = "";
}
} else if (browser.isOpera()) {
diff --git a/client/src/main/java/com/vaadin/client/ui/VUpload.java b/client/src/main/java/com/vaadin/client/ui/VUpload.java
index 2f4b62a47f..543cc1d2e6 100644
--- a/client/src/main/java/com/vaadin/client/ui/VUpload.java
+++ b/client/src/main/java/com/vaadin/client/ui/VUpload.java
@@ -40,6 +40,7 @@ import com.vaadin.client.ConnectorMap;
import com.vaadin.client.StyleConstants;
import com.vaadin.client.ui.upload.UploadConnector;
import com.vaadin.client.ui.upload.UploadIFrameOnloadStrategy;
+import com.vaadin.shared.EventId;
import com.vaadin.shared.ui.upload.UploadServerRpc;
/**
@@ -57,8 +58,7 @@ public class VUpload extends SimplePanel {
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
if (event.getTypeInt() == Event.ONCHANGE) {
- if (isImmediateMode() && fu.getFilename() != null
- && !fu.getFilename().isEmpty()) {
+ if (isImmediateMode() && hasFilename()) {
submit();
}
} else if (BrowserInfo.get().isIE()
@@ -121,6 +121,15 @@ public class VUpload extends SimplePanel {
private boolean immediateMode;
+ /**
+ * Just-in-case option to override the default assumption that if no file
+ * has been selected, no upload attempt should happen. Not part of public
+ * API so can be removed without a warning -- if you have an actual need for
+ * this feature (which is currently only accessible through violator
+ * pattern), let us know.
+ */
+ private boolean allowUploadWithoutFilename = false;
+
private String acceptMimeTypes;
private Hidden maxfilesize = new Hidden();
@@ -143,6 +152,19 @@ public class VUpload extends SimplePanel {
setWidget(panel);
panel.add(maxfilesize);
panel.add(fu);
+ fu.addChangeHandler(event -> {
+ if (!isImmediateMode()) {
+ updateEnabledForSubmitButton();
+ }
+ if (client != null) {
+ UploadConnector connector = ((UploadConnector) ConnectorMap
+ .get(client).getConnector(VUpload.this));
+ if (connector.hasEventListener(EventId.CHANGE)) {
+ connector.getRpcProxy(UploadServerRpc.class)
+ .change(fu.getFilename());
+ }
+ }
+ });
submitButton = new VButton();
submitButton.addClickHandler(event -> {
if (isImmediateMode()) {
@@ -179,6 +201,7 @@ public class VUpload extends SimplePanel {
fu.unsinkEvents(Event.ONCHANGE);
fu.unsinkEvents(Event.ONFOCUS);
}
+ updateEnabledForSubmitButton();
}
setStyleName(getElement(), CLASSNAME + "-immediate", immediateMode);
}
@@ -204,20 +227,20 @@ public class VUpload extends SimplePanel {
/** For internal use only. May be removed or replaced in the future. */
public void disableUpload() {
- setEnabledForSubmitButton(false);
if (!submitted) {
// Cannot disable the fileupload while submitting or the file won't
// be submitted at all
fu.getElement().setPropertyBoolean("disabled", true);
}
enabled = false;
+ updateEnabledForSubmitButton();
}
/** For internal use only. May be removed or replaced in the future. */
public void enableUpload() {
- setEnabledForSubmitButton(true);
fu.getElement().setPropertyBoolean("disabled", false);
enabled = true;
+ updateEnabledForSubmitButton();
if (submitted) {
/*
* An old request is still in progress (most likely cancelled),
@@ -241,9 +264,27 @@ public class VUpload extends SimplePanel {
}
}
- private void setEnabledForSubmitButton(boolean enabled) {
- submitButton.setEnabled(enabled);
- submitButton.setStyleName(StyleConstants.DISABLED, !enabled);
+ /**
+ * Updates the enabled status for submit button. If the widget itself is
+ * disabled, so is the submit button. It must also follow overall enabled
+ * status in immediate mode, otherwise you cannot select a file at all. In
+ * non-immediate mode there is another button for selecting the file, so the
+ * submit button should be disabled until a file has been selected, unless
+ * upload without selection has been specifically allowed.
+ */
+ private void updateEnabledForSubmitButton() {
+ if (enabled && (isImmediateMode() || hasFilename()
+ || allowUploadWithoutFilename)) {
+ submitButton.setEnabled(true);
+ submitButton.setStyleName(StyleConstants.DISABLED, false);
+ } else {
+ submitButton.setEnabled(false);
+ submitButton.setStyleName(StyleConstants.DISABLED, true);
+ }
+ }
+
+ private boolean hasFilename() {
+ return fu.getFilename() != null && !fu.getFilename().isEmpty();
}
/**
@@ -264,6 +305,19 @@ public class VUpload extends SimplePanel {
if (isImmediateMode()) {
fu.sinkEvents(Event.ONCHANGE);
}
+ fu.addChangeHandler(event -> {
+ if (!isImmediateMode()) {
+ updateEnabledForSubmitButton();
+ }
+ if (client != null) {
+ UploadConnector connector = ((UploadConnector) ConnectorMap
+ .get(client).getConnector(VUpload.this));
+ if (connector.hasEventListener(EventId.CHANGE)) {
+ connector.getRpcProxy(UploadServerRpc.class)
+ .change(fu.getFilename());
+ }
+ }
+ });
}
/**
@@ -339,7 +393,10 @@ public class VUpload extends SimplePanel {
.info("Submit cancelled (disabled or already submitted)");
return;
}
- if (fu.getFilename().isEmpty()) {
+ if (!hasFilename()) {
+ if (!allowUploadWithoutFilename) {
+ return;
+ }
getLogger().info("Submitting empty selection (no file)");
}
// flush possibly pending variable changes, so they will be handled
diff --git a/client/src/main/java/com/vaadin/client/ui/VWindow.java b/client/src/main/java/com/vaadin/client/ui/VWindow.java
index e19a13c005..03cb7e16bf 100644
--- a/client/src/main/java/com/vaadin/client/ui/VWindow.java
+++ b/client/src/main/java/com/vaadin/client/ui/VWindow.java
@@ -1014,14 +1014,20 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
// if clicked or key ENTER or SPACE is pressed
} else if (isClosable() && target == closeBox) {
if (type == Event.ONCLICK || (type == Event.ONKEYUP
- && isKeyEnterOrSpace(event.getKeyCode()))) {
- onCloseClick();
+ && (isKeyEnterOrSpace(event.getKeyCode()))
+ || event.getKeyCode() == KeyCodes.KEY_ESCAPE)) {
+ closeWindow();
}
bubble = false;
} else if (target == maximizeRestoreBox) {
+ // if ESC is pressed, close the window
+ if (type == Event.ONKEYUP
+ && event.getKeyCode() == KeyCodes.KEY_ESCAPE) {
+ closeWindow();
+ }
// handled in connector
// if clicked or key ENTER or SPACE is pressed
- if (type != Event.ONCLICK && !(type == Event.ONKEYUP
+ else if (type != Event.ONCLICK && !(type == Event.ONKEYUP
&& isKeyEnterOrSpace(event.getKeyCode()))) {
bubble = false;
}
@@ -1097,7 +1103,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
}
}
- private void onCloseClick() {
+ private void closeWindow() {
// Send the close event to the server
client.updateVariable(id, "close", true, true);
}
diff --git a/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java b/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
index 2422eec8a5..44bae4b4fd 100644
--- a/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
@@ -86,7 +86,12 @@ public class RadioButtonGroupConnector
@OnStateChange("readOnly")
void updateWidgetReadOnly() {
- getWidget().setEnabled(isEnabled() && !isReadOnly());
+ getWidget().setReadonly(isReadOnly());
+ }
+
+ @OnStateChange("enabled")
+ void updateWidgetEnabled() {
+ getWidget().setEnabled(isEnabled());
}
@OnStateChange("selectedItemKey")
diff --git a/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index 5fd8c766b6..20073c468e 100644
--- a/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -570,11 +570,13 @@ public abstract class AbstractOrderedLayoutConnector
}
// Add all necessary listeners
+ boolean listenersAdded = false;
if (needsFixedHeight()) {
slot.setWidgetResizeListener(childComponentResizeListener);
if (slot.hasCaption()) {
slot.setCaptionResizeListener(slotCaptionResizeListener);
}
+ listenersAdded = true;
} else if ((hasChildrenWithRelativeHeight
|| hasChildrenWithRelativeWidth) && slot.hasCaption()) {
/*
@@ -586,6 +588,7 @@ public abstract class AbstractOrderedLayoutConnector
* as the relative size?
*/
slot.setCaptionResizeListener(slotCaptionResizeListener);
+ listenersAdded = true;
}
if (needsExpand()) {
@@ -594,6 +597,13 @@ public abstract class AbstractOrderedLayoutConnector
if (slot.hasSpacing()) {
slot.setSpacingResizeListener(spacingResizeListener);
}
+ listenersAdded = true;
+ }
+
+ if (listenersAdded) {
+ // removing these listeners makes widget unmeasurable and resets the
+ // measured height, measure again if listeners got added back
+ getLayoutManager().setNeedsMeasure(child);
}
}
diff --git a/client/src/main/java/com/vaadin/client/ui/richtextarea/VRichTextToolbar.java b/client/src/main/java/com/vaadin/client/ui/richtextarea/VRichTextToolbar.java
index d0fc5a2396..6da1e71b03 100644
--- a/client/src/main/java/com/vaadin/client/ui/richtextarea/VRichTextToolbar.java
+++ b/client/src/main/java/com/vaadin/client/ui/richtextarea/VRichTextToolbar.java
@@ -242,7 +242,7 @@ public class VRichTextToolbar extends Composite {
final String url = Window.prompt("Enter a link URL:",
"http://");
if (url != null) {
- extended.createLink(url);
+ createLinkViaJSNI(extended, url);
}
} else if (sender == removeLink) {
extended.removeLink();
@@ -273,6 +273,30 @@ public class VRichTextToolbar extends Composite {
updateStatus();
}
}
+
+ private native void createLinkViaJSNI(
+ RichTextArea.ExtendedFormatter formatter, String url)
+ /*-{
+ var elem = formatter.@com.google.gwt.user.client.ui.impl.RichTextAreaImpl::elem;
+ var wnd = elem.contentWindow;
+ var selectedText = "";
+ if (wnd.getSelection) {
+ selectedText = wnd.getSelection().toString();
+ }
+
+ wnd.focus();
+ if (selectedText) {
+ // Add url as the href property of the highlighted text
+ wnd.document.execCommand("createLink", false, url);
+ } else {
+ // Insert url both as a new text and its href-property value
+ var range = wnd.document.getSelection().getRangeAt(0)
+ var node = wnd.document.createElement("a");
+ node.innerHTML = url;
+ node.setAttribute("href", url);
+ range.insertNode(node);
+ }
+ }-*/;
}
private static final RichTextArea.FontSize[] FONT_SIZES_CONSTANTS = {
diff --git a/client/src/main/java/com/vaadin/client/ui/upload/UploadConnector.java b/client/src/main/java/com/vaadin/client/ui/upload/UploadConnector.java
index 400c61a4f5..3986bf3a2a 100644
--- a/client/src/main/java/com/vaadin/client/ui/upload/UploadConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/upload/UploadConnector.java
@@ -19,13 +19,12 @@ package com.vaadin.client.ui.upload;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.Paintable;
import com.vaadin.client.UIDL;
+import com.vaadin.client.annotations.OnStateChange;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractComponentConnector;
import com.vaadin.client.ui.VUpload;
-import com.vaadin.shared.EventId;
import com.vaadin.shared.ui.Connect;
import com.vaadin.shared.ui.upload.UploadClientRpc;
-import com.vaadin.shared.ui.upload.UploadServerRpc;
import com.vaadin.shared.ui.upload.UploadState;
import com.vaadin.ui.Upload;
@@ -38,18 +37,6 @@ public class UploadConnector extends AbstractComponentConnector
}
@Override
- protected void init() {
- super.init();
-
- getWidget().fu.addChangeHandler(event -> {
- if (hasEventListener(EventId.CHANGE)) {
- getRpcProxy(UploadServerRpc.class)
- .change(getWidget().fu.getFilename());
- }
- });
- }
-
- @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -66,17 +53,6 @@ public class UploadConnector extends AbstractComponentConnector
final String action = client
.translateVaadinUri(uidl.getStringVariable("action"));
upload.element.setAction(action);
- if (uidl.hasAttribute("buttoncaption")) {
- upload.submitButton
- .setText(uidl.getStringAttribute("buttoncaption"));
- if (uidl.hasAttribute("buttonstylename")) {
- upload.submitButton.setStyleName(
- uidl.getStringAttribute("buttonstylename"));
- }
- upload.submitButton.setVisible(true);
- } else {
- upload.submitButton.setVisible(false);
- }
upload.fu.setName(upload.paintableId + "_file");
if (!isEnabled()) {
@@ -95,6 +71,29 @@ public class UploadConnector extends AbstractComponentConnector
getWidget().disableTitle(hasTooltip());
}
+ /**
+ * Updates the caption, style name, display mode, and visibility of the
+ * submit button.
+ * <p>
+ * For internal use only. May be removed or replaced in the future.
+ */
+ @OnStateChange({ "buttonCaption", "buttonStyleName",
+ "buttonCaptionAsHtml" })
+ private void updateSubmitButton() {
+ VUpload upload = getWidget();
+ if (getState().buttonCaption != null) {
+ if (getState().buttonCaptionAsHtml) {
+ upload.submitButton.setHtml(getState().buttonCaption);
+ } else {
+ upload.submitButton.setText(getState().buttonCaption);
+ }
+ upload.submitButton.setStyleName(getState().buttonStyleName);
+ upload.submitButton.setVisible(true);
+ } else {
+ upload.submitButton.setVisible(false);
+ }
+ }
+
@Override
public VUpload getWidget() {
return (VUpload) super.getWidget();
diff --git a/client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java b/client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java
index 12ce828f47..9603310e22 100644
--- a/client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java
@@ -433,11 +433,17 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
// This had to be here because we might not know the content size before
// everything is painted into the window
- // centered is this is unset on move/resize
+ // centered if this is unset on move/resize
window.centered = state.centered;
// Ensure centering before setting visible (#16486)
if (window.centered && getState().windowMode != WindowMode.MAXIMIZED) {
- Scheduler.get().scheduleFinally(() -> getWidget().center());
+ Scheduler.get().scheduleFinally(() -> {
+ // the window may have got removed again before this is
+ // triggered, and centering would re-display it
+ if (getWidget().isShowing()) {
+ getWidget().center();
+ }
+ });
}
window.setVisible(true);
}
diff --git a/client/src/main/java/com/vaadin/client/widgets/Escalator.java b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
index e98ae2c578..b4427b2df1 100644
--- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
@@ -37,6 +37,7 @@ import com.google.gwt.animation.client.AnimationScheduler;
import com.google.gwt.animation.client.AnimationScheduler.AnimationCallback;
import com.google.gwt.animation.client.AnimationScheduler.AnimationHandle;
import com.google.gwt.core.client.Duration;
+import com.google.gwt.core.client.JavaScriptException;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.core.client.Scheduler;
@@ -2240,6 +2241,10 @@ public class Escalator extends Widget
TableCellElement cellClone = TableCellElement
.as((Element) cell.cloneNode(withContent));
+ if (!withContent || columnConfiguration
+ .getColumnWidth(cell.getCellIndex()) < 0) {
+ clearRelativeWidthContents(cellClone);
+ }
cellClone.getStyle().clearHeight();
cellClone.getStyle().clearWidth();
@@ -2260,6 +2265,41 @@ public class Escalator extends Widget
}
/**
+ * Contents of an element that is configured to have relative width
+ * shouldn't be taken into consideration when measuring minimum widths.
+ * Thus any such contents within the element hierarchy need to be
+ * cleared out for accurate results. The element itself should remain,
+ * however, in case it has styles that affect the end results.
+ *
+ * @param elem
+ * an element that might have unnecessary content that
+ * interferes with minimum width calculations
+ */
+ private void clearRelativeWidthContents(Element elem) {
+ try {
+ String width = elem.getStyle().getWidth();
+ if (width != null && width.endsWith("%")) {
+ if (elem.hasChildNodes()) {
+ elem.removeAllChildren();
+ // add a fake child so that :empty behavior doesn't
+ // change
+ elem.setInnerHTML("<a/>");
+ } else {
+ elem.setInnerHTML(null);
+ }
+ }
+ } catch (JavaScriptException e) {
+ // no width set, move on
+ }
+ for (int i = 0; i < elem.getChildCount(); ++i) {
+ Node node = elem.getChild(i);
+ if (node instanceof Element) {
+ clearRelativeWidthContents((Element) node);
+ }
+ }
+ }
+
+ /**
* Gets the minimum width needed to display the cell properly.
*
* @param colIndex
@@ -4578,7 +4618,7 @@ public class Escalator extends Widget
// for a gap if a details row is later closed (e.g. by user)
final int addToBottom = Math.min(rowDiff,
getRowCount() - logicalTargetIndex);
- final int addToTop = rowDiff - addToBottom;
+ final int addToTop = Math.max(rowDiff - addToBottom, 0);
if (addToTop > 0) {
fillAndPopulateEscalatorRowsIfNeeded(0,
@@ -4587,8 +4627,30 @@ public class Escalator extends Widget
updateTopRowLogicalIndex(-addToTop);
}
if (addToBottom > 0) {
- fillAndPopulateEscalatorRowsIfNeeded(visualTargetIndex,
- logicalTargetIndex, addToBottom);
+ // take into account that rows may have got added to top as
+ // well, affects visual but not logical indexing
+ fillAndPopulateEscalatorRowsIfNeeded(
+ visualTargetIndex + addToTop, logicalTargetIndex,
+ addToBottom);
+
+ // adding new rows due to resizing may have created a gap in
+ // the middle, check whether the existing rows need moving
+ double rowTop = getRowTop(oldTopRowLogicalIndex);
+ if (rowTop > getRowTop(visualRowOrder.get(addToTop))) {
+ for (int i = addToTop; i < visualTargetIndex; i++) {
+
+ final TableRowElement tr = visualRowOrder.get(i);
+
+ setRowPosition(tr, 0, rowTop);
+ rowTop += getDefaultRowHeight();
+ SpacerContainer.SpacerImpl spacer = spacerContainer
+ .getSpacer(oldTopRowLogicalIndex + i);
+ if (spacer != null) {
+ spacer.setPosition(0, rowTop);
+ rowTop += spacer.getHeight();
+ }
+ }
+ }
}
} else if (rowDiff < 0) {
// rows need to be removed
@@ -7713,14 +7775,11 @@ public class Escalator extends Widget
public void scrollToRowAndSpacer(final int rowIndex,
final ScrollDestination destination, final int padding)
throws IllegalArgumentException {
- // wait for the layout phase to finish
- Scheduler.get().scheduleFinally(() -> {
- if (rowIndex != -1) {
- verifyValidRowIndex(rowIndex);
- }
- body.scrollToRowSpacerOrBoth(rowIndex, destination, padding,
- ScrollType.ROW_AND_SPACER);
- });
+ if (rowIndex != -1) {
+ verifyValidRowIndex(rowIndex);
+ }
+ body.scrollToRowSpacerOrBoth(rowIndex, destination, padding,
+ ScrollType.ROW_AND_SPACER);
}
private static void validateScrollDestination(
diff --git a/client/src/main/java/com/vaadin/client/widgets/Grid.java b/client/src/main/java/com/vaadin/client/widgets/Grid.java
index 977935c9bf..9f36864bc8 100755
--- a/client/src/main/java/com/vaadin/client/widgets/Grid.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Grid.java
@@ -1694,9 +1694,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
}
state = State.ACTIVATING;
- grid.scrollToRow(rowIndex,
- isBuffered() ? ScrollDestination.MIDDLE
- : ScrollDestination.ANY,
+ grid.scrollToRow(rowIndex, ScrollDestination.ANY,
() -> show(rowIndex, columnIndexDOM));
}
@@ -3395,7 +3393,8 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
Scheduler.get().scheduleDeferred(this);
}
} else if (currentDataAvailable.isEmpty()
- && dataSource.isWaitingForData()) {
+ && (dataSource.isWaitingForData()
+ || escalator.getBody().getRowCount() > 0)) {
Scheduler.get().scheduleDeferred(this);
} else {
calculate();
@@ -3408,20 +3407,16 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
/**
* Calculates and applies column widths, taking into account fixed
- * widths and column expand rules
+ * widths and column expand rules.
*
- * @param immediately
- * <code>true</code> if the widths should be executed
- * immediately (ignoring lazy loading completely), or
- * <code>false</code> if the command should be run after a
- * while (duplicate non-immediately invocations are ignored).
* @see Column#setWidth(double)
* @see Column#setExpandRatio(int)
* @see Column#setMinimumWidth(double)
* @see Column#setMaximumWidth(double)
*/
public void schedule() {
- if (!isScheduled && isAttached()) {
+ if (!isScheduled && isAttached() && !(currentDataAvailable.isEmpty()
+ && escalator.getBody().getRowCount() > 0)) {
isScheduled = true;
Scheduler.get().scheduleFinally(calculateCommand);
}
@@ -3436,8 +3431,9 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
// Make SelectAllCheckbox visible
getSelectionColumn().ifPresent(col -> {
- if (getDefaultHeaderRow() == null)
+ if (getDefaultHeaderRow() == null) {
return;
+ }
HeaderCell headerCell = getDefaultHeaderRow().getCell(col);
if (headerCell.getType().equals(GridStaticCellType.WIDGET)) {
// SelectAllCheckbox is present already
@@ -3903,8 +3899,6 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
setParent(detailsWidget, null);
spacerElement.removeAllChildren();
if (getHeightMode() == HeightMode.UNDEFINED) {
- // update spacer height
- escalator.getBody().setSpacer(spacer.getRow(), 0);
setHeightByRows(getEscalator().getBody().getRowCount());
}
}
@@ -4108,15 +4102,25 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
private void setHeightToHeaderCellHeight() {
RowContainer header = grid.escalator.getHeader();
- if (header.getRowCount() == 0
+ if (!WidgetUtil.isDisplayed(header.getElement())
+ || header.getRowCount() == 0
|| !header.getRowElement(0).hasChildNodes()) {
getLogger().info(
"No header cell available when calculating sidebar button height");
- openCloseButton.setHeight(header.getDefaultRowHeight() + "px");
+ // If the Grid is hidden with styles when this is called the
+ // border height will be off, but it's usually only a matter of
+ // a pixel or so. Removing a style name cannot trigger a full
+ // refresh of the layout, it's developer's responsibility to do
+ // that where needed.
+ double height = header.getDefaultRowHeight()
+ - WidgetUtil.measureVerticalBorder(getElement()) / 2;
+ openCloseButton.setHeight(height + "px");
return;
}
+ // Use actual height instead of expected height in case the height
+ // is modified by styles.
Element firstHeaderCell = header.getRowElement(0)
.getFirstChildElement();
double height = WidgetUtil
@@ -4135,8 +4139,6 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
close();
grid.getElement().appendChild(getElement());
Grid.setParent(this, grid);
- // border calculation won't work until attached
- setHeightToHeaderCellHeight();
}
}
@@ -4147,10 +4149,9 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
@Override
protected void onAttach() {
super.onAttach();
- // make sure the button will get correct height if the button should
- // be visible when the grid is rendered the first time.
- Scheduler.get()
- .scheduleDeferred(() -> setHeightToHeaderCellHeight());
+ // Make sure the button will get correct height whenever the Sidebar
+ // is added to the Grid.
+ setHeightToHeaderCellHeight();
}
@Override
@@ -4183,6 +4184,12 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
*/
private boolean hidingColumn;
+ /**
+ * When several columns are set hidable, don't reset the Sidebar for
+ * every column separately.
+ */
+ private boolean toggleUpdateTriggered;
+
private void updateColumnHidable(final Column<?, T> column) {
if (column.isHidable()) {
MenuItem toggle = columnToHidingToggleMap.get(column);
@@ -4228,16 +4235,26 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
}
private void updateTogglesOrder() {
- if (!hidingColumn) {
- int lastIndex = 0;
- for (Column<?, T> column : getColumns()) {
- if (column.isHidable()) {
- final MenuItem menuItem = columnToHidingToggleMap
- .get(column);
- sidebar.menuBar.removeItem(menuItem);
- sidebar.menuBar.insertItem(menuItem, lastIndex++);
+ if (!hidingColumn && !toggleUpdateTriggered) {
+ // This method is called whenever a column is set hidable. If
+ // there are multiple hidable columns, it will get called
+ // separately for all of them. There is no need to update the
+ // order more than once and no other layouting is dependent on
+ // the Sidebar layouting getting finished first, so wait until
+ // all calls have arrived before proceeding further.
+ toggleUpdateTriggered = true;
+ Scheduler.get().scheduleFinally(() -> {
+ int lastIndex = 0;
+ for (Column<?, T> column : getColumns()) {
+ if (column.isHidable()) {
+ final MenuItem menuItem = columnToHidingToggleMap
+ .get(column);
+ sidebar.menuBar.removeItem(menuItem);
+ sidebar.menuBar.insertItem(menuItem, lastIndex++);
+ }
}
- }
+ toggleUpdateTriggered = false;
+ });
}
}
@@ -4370,6 +4387,9 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
private boolean refreshBodyRequested = false;
+ private boolean resizeRequested = false;
+ private boolean resizeRefreshScheduled = false;
+
private DragAndDropHandler.DragAndDropCallback headerCellDndCallback = new DragAndDropCallback() {
private final AutoScrollerCallback autoScrollerCallback = new AutoScrollerCallback() {
@@ -5302,7 +5322,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
} else {
this.hidden = hidden;
- final int columnIndex = grid.getVisibleColumns()
+ int columnIndex = grid.getVisibleColumns()
.indexOf(this);
grid.escalator.getColumnConfiguration()
.insertColumns(columnIndex, 1);
@@ -5311,10 +5331,16 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
// escalator doesn't handle situation where the added column
// would be the last frozen column
int gridFrozenColumns = grid.getFrozenColumnCount();
+ // Correct column index for multiselect mode
+ if (grid.getSelectionColumn().isPresent()) {
+ gridFrozenColumns++;
+ }
int escalatorFrozenColumns = grid.escalator
.getColumnConfiguration().getFrozenColumnCount();
if (gridFrozenColumns > escalatorFrozenColumns
- && escalatorFrozenColumns == columnIndex) {
+ && escalatorFrozenColumns == columnIndex
+ && grid.getColumns()
+ .indexOf(this) < gridFrozenColumns) {
grid.escalator.getColumnConfiguration()
.setFrozenColumnCount(++escalatorFrozenColumns);
}
@@ -7224,6 +7250,8 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
this.dataSource = dataSource;
changeHandler = dataSource
.addDataChangeHandler(new DataChangeHandler() {
+ private boolean recalculateColumnWidthsNeeded = false;
+
@Override
public void dataUpdated(int firstIndex, int numberOfItems) {
escalator.getBody().refreshRows(firstIndex,
@@ -7256,11 +7284,23 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
int numberOfItems) {
currentDataAvailable = Range.withLength(firstIndex,
numberOfItems);
+ if (recalculateColumnWidthsNeeded) {
+ // Ensure that cache has actually been populated or
+ // all rows removed, otherwise wait for next call.
+ if (numberOfItems > 0
+ || getDataSource().size() == 0) {
+ recalculateColumnWidths();
+ recalculateColumnWidthsNeeded = false;
+ }
+ }
fireEvent(new DataAvailableEvent(currentDataAvailable));
}
@Override
public void resetDataAndSize(int newSize) {
+ // It might take a while for new data to arrive,
+ // clear the record of cached rows.
+ currentDataAvailable = Range.emptyRange();
RowContainer body = escalator.getBody();
int oldSize = body.getRowCount();
@@ -7276,8 +7316,9 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
// Need to recalculate column widths when the
// first row is added to a non-header grid,
// otherwise the checkbox will be aligned in a
- // wrong place.
- recalculateColumnWidths();
+ // wrong place. Wait until the cache has been
+ // populated before making the call.
+ recalculateColumnWidthsNeeded = true;
}
body.insertRows(oldSize, newSize - oldSize);
cellFocusHandler.rowsAddedToBody(Range
@@ -7296,8 +7337,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
visibleRowRange.length());
} else {
// We won't expect any data more data updates, so
- // just make
- // the bookkeeping happy
+ // just make the bookkeeping happy.
dataAvailable(0, 0);
}
@@ -7358,8 +7398,17 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
}
private void updateFrozenColumns() {
- escalator.getColumnConfiguration()
- .setFrozenColumnCount(getVisibleFrozenColumnCount());
+ int visibleFrozenColumnCount = getVisibleFrozenColumnCount();
+ ColumnConfiguration columnConfiguration = escalator
+ .getColumnConfiguration();
+ if (columnConfiguration.getColumnCount() < visibleFrozenColumnCount) {
+ // new columns may not have got added yet, delay and check the
+ // correct count again
+ Scheduler.get().scheduleFinally(() -> columnConfiguration
+ .setFrozenColumnCount(getVisibleFrozenColumnCount()));
+ } else {
+ columnConfiguration.setFrozenColumnCount(visibleFrozenColumnCount);
+ }
}
private int getVisibleFrozenColumnCount() {
@@ -7367,7 +7416,15 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
// for the escalator the hidden columns are not in the frozen column
// count, but for grid they are. thus need to convert the index
- for (int i = 0; i < frozenColumnCount; i++) {
+ int limit = getFrozenColumnCount();
+ if (getSelectionColumn().isPresent()) {
+ // If the grid is in MultiSelect mode, getColumn(0) in the following
+ // for loop returns the selection column. Accordingly, verifying
+ // which frozen columns are visible if the selection column is
+ // present should take this fact into account.
+ limit++;
+ }
+ for (int i = 0; i < limit; i++) {
if (i >= getColumnCount() || getColumn(i).isHidden()) {
numberOfColumns--;
}
@@ -7459,15 +7516,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
*/
public void scrollToRow(int rowIndex, ScrollDestination destination,
Runnable callback) {
- waitUntilVisible(rowIndex, destination, () -> {
- Reference<HandlerRegistration> registration = new Reference<>();
- registration.set(addDataAvailableHandler(event -> {
- if (event.getAvailableRows().contains(rowIndex)) {
- registration.get().removeHandler();
- callback.run();
- }
- }));
- });
+ waitUntilVisible(rowIndex, destination, callback);
}
/**
@@ -7533,29 +7582,61 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
*/
private void waitUntilVisible(int rowIndex, ScrollDestination destination,
Runnable whenVisible) {
- final Escalator escalator = getEscalator();
- if (escalator.getVisibleRowRange().contains(rowIndex)) {
- TableRowElement rowElement = escalator.getBody()
- .getRowElement(rowIndex);
- long bottomBorder = Math.round(WidgetUtil.getBorderBottomThickness(
- rowElement.getFirstChildElement()) + 0.5d);
- if (rowElement.getAbsoluteTop() + bottomBorder >= escalator
- .getHeader().getElement().getAbsoluteBottom()
- && rowElement.getAbsoluteBottom() <= escalator.getFooter()
- .getElement().getAbsoluteTop() + bottomBorder) {
- whenVisible.run();
- return;
- }
+ boolean waitForCache = false;
+ if (getDataSource().getRow(rowIndex) == null) {
+ // not yet in cache, wait for this to change
+ waitForCache = true;
+
+ Reference<Registration> registration = new Reference<>();
+ registration.set(getDataSource()
+ .addDataChangeHandler(new DataChangeHandler() {
+ @Override
+ public void resetDataAndSize(int estimatedNewDataSize) {
+ // data set changed, cancel the operation
+ registration.get().remove();
+ }
+
+ @Override
+ public void dataUpdated(int firstRowIndex,
+ int numberOfRows) {
+ // NOP
+ }
+
+ @Override
+ public void dataRemoved(int firstRowIndex,
+ int numberOfRows) {
+ // data set changed, cancel the operation
+ registration.get().remove();
+ }
+
+ @Override
+ public void dataAvailable(int firstRowIndex,
+ int numberOfRows) {
+ // if new available range contains the row,
+ // try again
+ if (Range.withLength(firstRowIndex, numberOfRows)
+ .contains(rowIndex)) {
+ registration.get().remove();
+ waitUntilVisible(rowIndex, destination,
+ whenVisible);
+ }
+ }
+
+ @Override
+ public void dataAdded(int firstRowIndex,
+ int numberOfRows) {
+ // data set changed, cancel the operation
+ registration.get().remove();
+ }
+ }));
}
- Reference<HandlerRegistration> registration = new Reference<>();
- registration.set(addScrollHandler(event -> {
- if (escalator.getVisibleRowRange().contains(rowIndex)) {
- registration.get().removeHandler();
- whenVisible.run();
- }
- }));
scrollToRow(rowIndex, destination);
+
+ if (!waitForCache) {
+ // all necessary adjustments done, time to perform
+ whenVisible.run();
+ }
}
/**
@@ -9244,23 +9325,38 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
/*
* Delay calculation to be deferred so Escalator can do it's magic.
*/
- Scheduler.get().scheduleFinally(() -> {
- if (escalator
- .getInnerWidth() != autoColumnWidthsRecalculator.lastCalculatedInnerWidth) {
- recalculateColumnWidths();
- }
+ resizeRequested = true;
+ if (!resizeRefreshScheduled) {
+ resizeRefreshScheduled = true;
+ Scheduler.get().scheduleFixedDelay(() -> {
+ if (!resizeRequested) {
+ doRefreshOnResize();
+ resizeRefreshScheduled = false;
+ return false;
+ } else {
+ resizeRequested = false;
+ return true;
+ }
+ }, 50);
+ }
+ }
- // Vertical resizing could make editor positioning invalid so it
- // needs to be recalculated on resize
- if (isEditorActive()) {
- editor.updateVerticalScrollPosition();
- }
+ private void doRefreshOnResize() {
+ if (escalator
+ .getInnerWidth() != autoColumnWidthsRecalculator.lastCalculatedInnerWidth) {
+ recalculateColumnWidths();
+ }
- // if there is a resize, we need to refresh the body to avoid an
- // off-by-one error which occurs when the user scrolls all the
- // way to the bottom.
- refreshBody();
- });
+ // Vertical resizing could make editor positioning invalid so it
+ // needs to be recalculated on resize
+ if (isEditorActive()) {
+ editor.updateVerticalScrollPosition();
+ }
+
+ // if there is a resize, we need to refresh the body to avoid an
+ // off-by-one error which occurs when the user scrolls all the
+ // way to the bottom.
+ refreshBody();
}
private double getEscalatorInnerHeight() {
diff --git a/compatibility-client-compiled/pom.xml b/compatibility-client-compiled/pom.xml
index b4f7a60038..33e320df32 100644
--- a/compatibility-client-compiled/pom.xml
+++ b/compatibility-client-compiled/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-client-compiled</artifactId>
<name>vaadin-compatibility-client-compiled</name>
diff --git a/compatibility-client/pom.xml b/compatibility-client/pom.xml
index 3ac053a95d..e423f896a1 100644
--- a/compatibility-client/pom.xml
+++ b/compatibility-client/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-client</artifactId>
<name>vaadin-compatibility-client</name>
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
index 86fa8ed500..d7ae6f3c07 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VFilterSelect.java
@@ -1409,23 +1409,8 @@ public class VFilterSelect extends Composite
* @since 7.6.4
*/
public FilterSelectTextBox() {
- /*-
- * Stop the browser from showing its own suggestion popup.
- *
- * Using an invalid value instead of "off" as suggested by
- * https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
- *
- * Leaving the non-standard Safari options autocapitalize and
- * autocorrect untouched since those do not interfere in the same
- * way, and they might be useful in a combo box where new items are
- * allowed.
- */
- if (BrowserInfo.get().isChrome()) {
- // Chrome supports "off" and random number does not work with Chrome
- getElement().setAttribute("autocomplete", "off");
- } else {
- getElement().setAttribute("autocomplete", Math.random() + "");
- }
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(this);
}
/**
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
index 36b1468bbd..c4294009d2 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java
@@ -349,6 +349,8 @@ public class VScrollTable extends FlowPanel
private SelectMode selectMode = SelectMode.NONE;
+ private boolean multiSelectTouchDetectionEnabled = true;
+
public final HashSet<String> selectedRowKeys = new HashSet<String>();
/*
@@ -1502,6 +1504,10 @@ public class VScrollTable extends FlowPanel
} else {
selectMode = SelectMode.NONE;
}
+ if (uidl.hasAttribute("touchdetection")) {
+ multiSelectTouchDetectionEnabled = uidl
+ .getBooleanAttribute("touchdetection");
+ }
}
}
@@ -1951,9 +1957,10 @@ public class VScrollTable extends FlowPanel
}
private void setMultiSelectMode(int multiselectmode) {
- if (BrowserInfo.get().isTouchDevice()) {
+ if (BrowserInfo.get().isTouchDevice()
+ && multiSelectTouchDetectionEnabled) {
// Always use the simple mode for touch devices that do not have
- // shift/ctrl keys
+ // shift/ctrl keys (unless this feature is explicitly disabled)
this.multiselectmode = MULTISELECT_MODE_SIMPLE;
} else {
this.multiselectmode = multiselectmode;
@@ -3931,10 +3938,12 @@ public class VScrollTable extends FlowPanel
public void onBrowserEvent(Event event) {
if (enabled) {
if (event.getEventTarget().cast() == columnSelector) {
- final int left = DOM.getAbsoluteLeft(columnSelector);
- final int top = DOM.getAbsoluteTop(columnSelector)
+ WidgetUtil.TextRectangle clientRect = WidgetUtil
+ .getBoundingClientRect(columnSelector);
+ final int left = (int) clientRect.getLeft();
+ final int top = (int) (clientRect.getTop()
+ DOM.getElementPropertyInt(columnSelector,
- "offsetHeight");
+ "offsetHeight"));
client.getContextMenu().showAt(this, left, top);
}
}
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
index 4d52e3e4f8..e332e628fd 100644
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextualDate.java
@@ -35,6 +35,7 @@ import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Focusable;
import com.vaadin.client.LocaleNotLoadedException;
import com.vaadin.client.LocaleService;
+import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.SubPartAware;
import com.vaadin.client.ui.aria.AriaHelper;
import com.vaadin.client.ui.aria.HandlesAriaCaption;
@@ -115,6 +116,8 @@ public class VTextualDate extends VDateField
if (BrowserInfo.get().isIE()) {
addDomHandler(this, KeyDownEvent.getType());
}
+ // Stop the browser from showing its own suggestion popup.
+ WidgetUtil.disableBrowserAutocomplete(text);
add(text);
}
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Escalator.java b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Escalator.java
index 3aafe416fc..6af497efb3 100755
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Escalator.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Escalator.java
@@ -3720,6 +3720,7 @@ public class Escalator extends Widget
visualRowOrder.getLast()) + 1;
moveAndUpdateEscalatorRows(Range.withOnly(0),
visualRowOrder.size(), newLogicalIndex);
+ updateTopRowLogicalIndex(1);
}
}
}
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java
index 1d2f88f570..abfe761d4a 100755
--- a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java
+++ b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java
@@ -2145,13 +2145,19 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
// sometimes focus handling twists the editor row out of alignment
// with the grid itself and the position needs to be compensated for
- TableRowElement rowElement = grid.getEscalator().getBody()
- .getRowElement(grid.getEditor().getRow());
- int rowLeft = rowElement.getAbsoluteLeft();
- int editorLeft = cellWrapper.getAbsoluteLeft();
- if (editorLeft != rowLeft + frozenWidth) {
- cellWrapper.getStyle().setLeft(newLeft + rowLeft - editorLeft,
- Unit.PX);
+ try {
+ TableRowElement rowElement = grid.getEscalator().getBody()
+ .getRowElement(grid.getEditor().getRow());
+ int rowLeft = rowElement.getAbsoluteLeft();
+ int editorLeft = cellWrapper.getAbsoluteLeft();
+ if (editorLeft != rowLeft + frozenWidth) {
+ cellWrapper.getStyle().setLeft(newLeft + rowLeft - editorLeft,
+ Unit.PX);
+ }
+ } catch (IllegalStateException e) {
+ // IllegalStateException may occur if user has scrolled Grid so
+ // that Escalator has updated, and row under Editor is no longer
+ // there
}
}
@@ -2934,6 +2940,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
private CheckBox selectAllCheckBox;
private boolean userSelectionAllowed = true;
private boolean enabled = true;
+ private HandlerRegistration headerClickHandler;
SelectionColumn(final Renderer<Boolean> selectColumnRenderer) {
super(selectColumnRenderer);
@@ -2987,24 +2994,28 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
});
selectAllCheckBox.setValue(selected);
- addHeaderClickHandler(new HeaderClickHandler() {
- @Override
- public void onClick(GridClickEvent event) {
- if (!userSelectionAllowed) {
- return;
- }
-
- CellReference<?> targetCell = event.getTargetCell();
- int defaultRowIndex = getHeader().getRows()
- .indexOf(getDefaultHeaderRow());
+ headerClickHandler = addHeaderClickHandler(
+ new HeaderClickHandler() {
+ @Override
+ public void onClick(GridClickEvent event) {
+ if (!userSelectionAllowed) {
+ return;
+ }
- if (targetCell.getColumnIndex() == 0 && targetCell
- .getRowIndex() == defaultRowIndex) {
- selectAllCheckBox.setValue(
- !selectAllCheckBox.getValue(), true);
- }
- }
- });
+ CellReference<?> targetCell = event
+ .getTargetCell();
+ int defaultRowIndex = getHeader().getRows()
+ .indexOf(getDefaultHeaderRow());
+
+ if (targetCell.getColumnIndex() == 0
+ && targetCell
+ .getRowIndex() == defaultRowIndex) {
+ selectAllCheckBox.setValue(
+ !selectAllCheckBox.getValue(),
+ true);
+ }
+ }
+ });
// Select all with space when "select all" cell is active
addHeaderKeyUpHandler(new HeaderKeyUpHandler() {
@@ -3143,6 +3154,13 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
getEscalator().getBody().refreshRows(0,
getEscalator().getBody().getRowCount());
}
+
+ private void cleanup() {
+ if (headerClickHandler != null) {
+ headerClickHandler.removeHandler();
+ headerClickHandler = null;
+ }
+ }
}
/**
@@ -7921,6 +7939,10 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
return;
}
+ if (this.selectionColumn != null) {
+ selectionColumn.cleanup();
+ }
+
if (this.selectColumnRenderer != null) {
if (this.selectColumnRenderer instanceof ComplexRenderer) {
// End of Life for the old selection column renderer.
diff --git a/compatibility-server-gae/pom.xml b/compatibility-server-gae/pom.xml
index ad6ec6751c..3565da2ea6 100644
--- a/compatibility-server-gae/pom.xml
+++ b/compatibility-server-gae/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-server-gae</artifactId>
<name>vaadin-compatibility-server-gae</name>
diff --git a/compatibility-server/pom.xml b/compatibility-server/pom.xml
index aaf45b4978..e7084b60f4 100644
--- a/compatibility-server/pom.xml
+++ b/compatibility-server/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-server</artifactId>
<name>vaadin-compatibility-server</name>
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
index aaccdb8b25..f502aedd8e 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/ComboBox.java
@@ -620,7 +620,9 @@ public class ComboBox extends AbstractSelect
// page length usable for non-null items
int effectivePageLength = pageLength
- (needNullSelectOption && (currentPage == 0) ? 1 : 0);
- return Math.min(size - 1, first + effectivePageLength - 1);
+ // zero pageLength implies infinite page size
+ return pageLength == 0 ? size - 1
+ : Math.min(size - 1, first + effectivePageLength - 1);
}
/**
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
index 20f7acb074..f67bbb4c3e 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
@@ -38,6 +38,7 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.jsoup.Jsoup;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
@@ -3473,6 +3474,7 @@ public class Grid extends AbstractComponent
if (caption == null) {
caption = ""; // Render null as empty
}
+ caption = Jsoup.parse(caption).text();
state.headerCaption = caption;
HeaderRow row = grid.getHeader().getDefaultRow();
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
index 433254aa67..0519e20f75 100644
--- a/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
+++ b/compatibility-server/src/main/java/com/vaadin/v7/ui/Table.java
@@ -588,6 +588,8 @@ public class Table extends AbstractSelect implements Action.Container,
private MultiSelectMode multiSelectMode = MultiSelectMode.DEFAULT;
+ private boolean multiSelectTouchDetectionEnabled = true;
+
private boolean rowCacheInvalidated;
private RowGenerator rowGenerator = null;
@@ -3775,6 +3777,10 @@ public class Table extends AbstractSelect implements Action.Container,
if (isSelectable()) {
target.addAttribute("selectmode",
(isMultiSelect() ? "multi" : "single"));
+ if (isMultiSelect()) {
+ target.addAttribute("touchdetection",
+ isMultiSelectTouchDetectionEnabled());
+ }
} else {
target.addAttribute("selectmode", "none");
}
@@ -5188,7 +5194,10 @@ public class Table extends AbstractSelect implements Action.Container,
* <p>
* Note, that on some clients the mode may not be respected. E.g. on touch
* based devices CTRL/SHIFT base selection method is invalid, so touch based
- * browsers always use the {@link MultiSelectMode#SIMPLE}.
+ * browsers always use the {@link MultiSelectMode#SIMPLE} unless touch multi
+ * select is explicitly disabled.
+ *
+ * @see #setMultiSelectTouchDetectionEnabled(boolean)
*
* @param mode
* The select mode of the table
@@ -5208,6 +5217,31 @@ public class Table extends AbstractSelect implements Action.Container,
}
/**
+ * Default behavior on touch-reporting devices is to switch from CTRL/SHIFT
+ * based multi-selection to simple mode, but you can use this method to
+ * explicitly disable the touch device detection. Thus you can keep using
+ * keyboard-based multi selection on hybrid devices that have both a touch
+ * screen and a keyboard.
+ *
+ * @param multiSelectTouchDetectionEnabled
+ * Whether to enable or disable touch screen detection
+ */
+ public void setMultiSelectTouchDetectionEnabled(
+ boolean multiSelectTouchDetectionEnabled) {
+ this.multiSelectTouchDetectionEnabled = multiSelectTouchDetectionEnabled;
+ markAsDirty();
+ }
+
+ /**
+ * Returns if touch screen detection is used to toggle multi select mode.
+ *
+ * @return If touch screen detection for multi select is enabled
+ */
+ public boolean isMultiSelectTouchDetectionEnabled() {
+ return multiSelectTouchDetectionEnabled;
+ }
+
+ /**
* Lazy loading accept criterion for Table. Accepted target rows are loaded
* from server once per drag and drop operation. Developer must override one
* method that decides on which rows the currently dragged data can be
diff --git a/compatibility-shared/pom.xml b/compatibility-shared/pom.xml
index 69fe1ecf30..3f7a797c1f 100644
--- a/compatibility-shared/pom.xml
+++ b/compatibility-shared/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-shared</artifactId>
<name>vaadin-compatibility-shared</name>
diff --git a/compatibility-themes/pom.xml b/compatibility-themes/pom.xml
index ae8cbab372..a5a7ed20ea 100644
--- a/compatibility-themes/pom.xml
+++ b/compatibility-themes/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-compatibility-themes</artifactId>
<name>vaadin-compatibility-themes</name>
diff --git a/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss b/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
index 22ffdffa4d..64f700c882 100644
--- a/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
+++ b/compatibility-themes/src/main/themes/VAADIN/themes/base/table/table.scss
@@ -137,6 +137,7 @@
}
.#{$primaryStyleName}-body {
border: 1px solid #aaa;
+ overflow-anchor: none; /* In Chrome 56+ */
}
.#{$primaryStyleName}-row-spacer {
height: 10px;
diff --git a/documentation/articles/FindingTheCurrentUIAndPageAndVaadinSession.asciidoc b/documentation/articles/FindingTheCurrentUIAndPageAndVaadinSession.asciidoc
index 5d8778f261..343170fe0f 100644
--- a/documentation/articles/FindingTheCurrentUIAndPageAndVaadinSession.asciidoc
+++ b/documentation/articles/FindingTheCurrentUIAndPageAndVaadinSession.asciidoc
@@ -6,6 +6,7 @@ layout: page
[[finding-the-current-ui-and-page-and-vaadin-session]]
= Finding the current UI and page and vaadin session
+
There are many cases where you need a reference to the active `UI`, `Page`
or `VaadinServiceSession`, for instance for showing notifications in a
click listener. It is possible to get a reference to the component from
diff --git a/documentation/articles/LettingTheUserDownloadAFile.asciidoc b/documentation/articles/LettingTheUserDownloadAFile.asciidoc
index f977b07956..1ede8bd5c0 100644
--- a/documentation/articles/LettingTheUserDownloadAFile.asciidoc
+++ b/documentation/articles/LettingTheUserDownloadAFile.asciidoc
@@ -104,8 +104,15 @@ public class OnDemandFileDownloader extends FileDownloader {
return super.handleConnectorRequest(request, response, path);
}
- private StreamResource getResource () {
- return (StreamResource) this.getResource("dl");
+ private StreamResource getResource() {
+ StreamResource result = null;
+ this.getSession().lock();
+ try {
+ result = (StreamResource) this.getResource("dl");
+ } finally {
+ this.getSession().unlock();
+ }
+ return result;
}
}
....
diff --git a/documentation/components/components-grid.asciidoc b/documentation/components/components-grid.asciidoc
index 32d47097f7..77b44ebf0e 100644
--- a/documentation/components/components-grid.asciidoc
+++ b/documentation/components/components-grid.asciidoc
@@ -721,6 +721,13 @@ yearsCell.setHtml("<b>Years</b>");
You can set a component in a header or footer cell with
[methodname]#setComponent()#. Often, this feature is used to allow filtering.
+[NOTE]
+====
+Note, when you use [methodname]#setComponent(TextField)#, the [classname]#TextField# will be rendered in compact mode
+without caption and icon. If you need to override this behavior, you need to wrap the [classname]#TextField# e.g.
+into [classname]#HorizontalLayout#.
+====
+
////
// commented out until filtering is sorted for 8
[[components.grid.filtering]]
diff --git a/documentation/datamodel/datamodel-forms.asciidoc b/documentation/datamodel/datamodel-forms.asciidoc
index fc4572f97c..0061304c68 100644
--- a/documentation/datamodel/datamodel-forms.asciidoc
+++ b/documentation/datamodel/datamodel-forms.asciidoc
@@ -138,6 +138,7 @@ binder.forField(nameField)
binder.forField(titleField)
// Shorthand for requiring the field to be non-empty
+ // This is conditional on Binding::setAsRequiredEnabled(boolean)
.asRequired("Every employee must have a title")
.bind(Person::getTitle, Person::setTitle);
----
@@ -382,6 +383,11 @@ if (saved) {
----
--
+[NOTE]
+Note, if you need to write the values passing the validation regardless of having one or more failing validators, you can
+use binder.writeBeanAsDraft(person).
+
+
Binder keeps track of which bindings have been updated by the user and which bindings are in an invalid state.
It also fires an event when this status changes.
We can use that event to make the save and reset buttons of our forms become enabled or disabled depending on the current status of the form.
@@ -612,3 +618,10 @@ binder.forField(yearOfBirth)
binder.bindInstanceFields(this);
----
+
+[NOTE]
+If you need to bind nested proprerties with bindInstanceFields method, you need to instantiate the Binder using:
+[source,java]
+----
+Binder<Person> binder = new Binder<>(Person.class,true);
+----
diff --git a/liferay-integration/pom.xml b/liferay-integration/pom.xml
index eafa6af9dd..dabb757db6 100644
--- a/liferay-integration/pom.xml
+++ b/liferay-integration/pom.xml
@@ -9,7 +9,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<properties>
diff --git a/liferay/pom.xml b/liferay/pom.xml
index c323867a60..ca898f3743 100644
--- a/liferay/pom.xml
+++ b/liferay/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-liferay</artifactId>
<name>vaadin-liferay</name>
diff --git a/osgi-integration/pom.xml b/osgi-integration/pom.xml
index 11e3c6a9ed..42be8be39b 100644
--- a/osgi-integration/pom.xml
+++ b/osgi-integration/pom.xml
@@ -9,7 +9,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<properties>
diff --git a/pom.xml b/pom.xml
index 8198ceef6c..b8041e5b16 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
<artifactId>vaadin-root</artifactId>
<name>vaadin-root</name>
<packaging>pom</packaging>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
<prerequisites>
<maven>3.1.0</maven>
@@ -62,6 +62,13 @@
<pluginRepositories>
<pluginRepository>
+ <id>central</id>
+ <url>https://repo.maven.apache.org/maven2/</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ <pluginRepository>
<id>vaadin-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
<releases>
@@ -75,6 +82,13 @@
<repositories>
<repository>
+ <id>central</id>
+ <url>https://repo.maven.apache.org/maven2/</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
<id>vaadin-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
<releases>
@@ -215,7 +229,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
- <version>4.2.0.Final</version>
+ <version>4.3.2.Final</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
diff --git a/push/pom.xml b/push/pom.xml
index 2b72d2b5f7..80dda2cd59 100644
--- a/push/pom.xml
+++ b/push/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-push</artifactId>
<name>vaadin-push</name>
diff --git a/server/bnd.bnd b/server/bnd.bnd
index 13afe50dc7..8bd3431e0c 100644
--- a/server/bnd.bnd
+++ b/server/bnd.bnd
@@ -4,7 +4,7 @@ Bundle-Version: ${osgi.bundle.version}
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0
Import-Package: com.vaadin.sass.*;resolution:=optional,\
- com.liferay.portal.kernel.util;resolution:=optional;version='[7.0.0,10.0.0)',\
+ com.liferay.portal.kernel.util;resolution:=optional;version='[7.0.0,11.0.0)',\
javax.portlet*;resolution:=optional,\
javax.validation*;resolution:=optional;version='${javax.validation.version}',\
org.atmosphere*;resolution:=optional;version='${atmosphere.runtime.version}',\
diff --git a/server/pom.xml b/server/pom.xml
index c0880764fb..f978eb4bb0 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-server</artifactId>
<name>vaadin-server</name>
diff --git a/server/src/main/java/com/vaadin/data/BeanValidationBinder.java b/server/src/main/java/com/vaadin/data/BeanValidationBinder.java
index de67f922bf..44d0e1703f 100644
--- a/server/src/main/java/com/vaadin/data/BeanValidationBinder.java
+++ b/server/src/main/java/com/vaadin/data/BeanValidationBinder.java
@@ -49,7 +49,7 @@ public class BeanValidationBinder<BEAN> extends Binder<BEAN> {
* the bean type to use, not <code>null</code>
*/
public BeanValidationBinder(Class<BEAN> beanType) {
- this(beanType,false);
+ this(beanType, false);
}
/**
@@ -65,8 +65,11 @@ public class BeanValidationBinder<BEAN> extends Binder<BEAN> {
* the bean type to use, not {@code null}
* @param scanNestedDefinitions
* if {@code true}, scan for nested property definitions as well
+ *
+ * @since 8.10
*/
- public BeanValidationBinder(Class<BEAN> beanType, boolean scanNestedDefinitions) {
+ public BeanValidationBinder(Class<BEAN> beanType,
+ boolean scanNestedDefinitions) {
super(beanType, scanNestedDefinitions);
if (!BeanUtil.checkBeanValidationAvailable()) {
throw new IllegalStateException(BeanValidationBinder.class
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java
index cd7b834571..d0ea628986 100644
--- a/server/src/main/java/com/vaadin/data/Binder.java
+++ b/server/src/main/java/com/vaadin/data/Binder.java
@@ -228,28 +228,51 @@ public class Binder<BEAN> implements Serializable {
public Setter<BEAN, TARGET> getSetter();
/**
- * Enable or disable asRequired validator.
- * The validator is enabled by default.
+ * Enable or disable asRequired validator. The validator is enabled by
+ * default.
*
* @see #asRequired(String)
* @see #asRequired(ErrorMessageProvider)
*
* @param asRequiredEnabled
- * {@code false} if asRequired validator should
- * be disabled, {@code true} otherwise (default)
+ * {@code false} if asRequired validator should be disabled,
+ * {@code true} otherwise (default)
+ *
+ * @since 8.10
*/
public void setAsRequiredEnabled(boolean asRequiredEnabled);
/**
- * Returns whether asRequired validator is currently enabled or not
+ * Returns whether asRequired validator is currently enabled or not.
*
* @see #asRequired(String)
* @see #asRequired(ErrorMessageProvider)
*
* @return {@code false} if asRequired validator is disabled
* {@code true} otherwise (default)
+ *
+ * @since 8.10
*/
public boolean isAsRequiredEnabled();
+
+ /**
+ * Define whether validators are disabled or enabled for this
+ * specific binding.
+ *
+ * @param validatorsDisabled A boolean value
+ *
+ * @since 8.11
+ */
+ public void setValidatorsDisabled(boolean validatorsDisabled);
+
+ /**
+ * Returns if validators are currently disabled or not
+ *
+ * @return A boolean value
+ *
+ * @since 8.11
+ */
+ public boolean isValidatorsDisabled();
}
/**
@@ -796,6 +819,7 @@ public class Binder<BEAN> implements Serializable {
private final HasValue<FIELDVALUE> field;
private BindingValidationStatusHandler statusHandler;
private boolean isStatusHandlerChanged;
+ private Binding<BEAN, TARGET> binding;
private boolean bound;
@@ -851,6 +875,7 @@ public class Binder<BEAN> implements Serializable {
bound = true;
getBinder().incompleteBindings.remove(getField());
+ this.binding = binding;
return binding;
}
@@ -885,6 +910,7 @@ public class Binder<BEAN> implements Serializable {
Binding binding = ((BindingBuilder) finalBinding).bind(getter,
setter);
getBinder().boundProperties.put(propertyName, binding);
+ this.binding = binding;
return binding;
} finally {
getBinder().incompleteMemberFieldBindings.remove(getField());
@@ -905,8 +931,17 @@ public class Binder<BEAN> implements Serializable {
checkUnbound();
Objects.requireNonNull(validator, "validator cannot be null");
+ Validator<? super TARGET> wrappedValidator = ((value, context) -> {
+ if (getBinder().isValidatorsDisabled() ||
+ (binding != null && binding.isValidatorsDisabled())) {
+ return ValidationResult.ok();
+ } else {
+ return validator.apply(value, context);
+ }
+ });
+
converterValidatorChain = ((Converter<FIELDVALUE, TARGET>) converterValidatorChain)
- .chain(new ValidatorAsConverter<>(validator));
+ .chain(new ValidatorAsConverter<>(wrappedValidator));
return this;
}
@@ -946,10 +981,11 @@ public class Binder<BEAN> implements Serializable {
this.asRequiredSet = true;
field.setRequiredIndicatorVisible(true);
return withValidator((value, context) -> {
- if (!field.isRequiredIndicatorVisible())
+ if (!field.isRequiredIndicatorVisible()) {
return ValidationResult.ok();
- else
+ } else {
return customRequiredValidator.apply(value, context);
+ }
});
}
@@ -1054,6 +1090,8 @@ public class Binder<BEAN> implements Serializable {
private boolean asRequiredSet;
+ private boolean validatorsDisabled = false;
+
public BindingImpl(BindingBuilderImpl<BEAN, FIELDVALUE, TARGET> builder,
ValueProvider<BEAN, TARGET> getter,
Setter<BEAN, TARGET> setter) {
@@ -1281,7 +1319,8 @@ public class Binder<BEAN> implements Serializable {
* field doesn't accept null rather than throwing for some other
* reason.
*/
- if (convertedValue == null && getField().getEmptyValue() != null) {
+ if (convertedValue == null
+ && getField().getEmptyValue() != null) {
throw new IllegalStateException(String.format(
"A field of type %s didn't accept a null value."
+ " If null values are expected, then configure a null representation for the binding.",
@@ -1322,12 +1361,12 @@ public class Binder<BEAN> implements Serializable {
public void setAsRequiredEnabled(boolean asRequiredEnabled) {
if (!asRequiredSet) {
throw new IllegalStateException(
- "Unable to toggle asRequired validation since "
- + "asRequired has not been set.");
+ "Unable to toggle asRequired validation since "
+ + "asRequired has not been set.");
}
if (asRequiredEnabled != isAsRequiredEnabled()) {
field.setRequiredIndicatorVisible(asRequiredEnabled);
- validate();
+ validate();
}
}
@@ -1335,6 +1374,16 @@ public class Binder<BEAN> implements Serializable {
public boolean isAsRequiredEnabled() {
return field.isRequiredIndicatorVisible();
}
+
+ @Override
+ public void setValidatorsDisabled(boolean validatorsDisabled) {
+ this.validatorsDisabled = validatorsDisabled;
+ }
+
+ @Override
+ public boolean isValidatorsDisabled() {
+ return validatorsDisabled;
+ }
}
/**
@@ -1440,6 +1489,8 @@ public class Binder<BEAN> implements Serializable {
private Set<Binding<BEAN, ?>> changedBindings = new LinkedHashSet<>();
+ private boolean validatorsDisabled = false;
+
/**
* Creates a binder using a custom {@link PropertySet} implementation for
* finding and resolving property names for
@@ -1732,7 +1783,7 @@ public class Binder<BEAN> implements Serializable {
* <p>
* After updating each field, the value is read back from the field and the
* bean's property value is updated if it has been changed from the original
- * value by the field or a converter.
+ * value by the field or a converter.
*
* @see #readBean(Object)
* @see #writeBean(Object)
@@ -1799,8 +1850,9 @@ public class Binder<BEAN> implements Serializable {
// avoid NPE inside initFieldValue. It happens e.g. when
// we unbind a binding in valueChangeListener of another
// field.
- if (binding.getField() != null)
+ if (binding.getField() != null) {
binding.initFieldValue(bean, false);
+ }
});
getValidationStatusHandler().statusChange(
BinderValidationStatus.createUnresolvedStatus(this));
@@ -1851,9 +1903,32 @@ public class Binder<BEAN> implements Serializable {
* @param bean
* the object to which to write the field values, not
* {@code null}
+ *
+ * @since 8.10
*/
public void writeBeanAsDraft(BEAN bean) {
- doWriteDraft(bean, new ArrayList<>(bindings));
+ doWriteDraft(bean, new ArrayList<>(bindings),false);
+ }
+
+ /**
+ * Writes successfully converted changes from the bound fields bypassing
+ * all the Validation, or all fields passing conversion if forced = true.
+ * If the conversion fails, the value written to the bean will be null.
+ *
+ * @see #writeBean(Object)
+ * @see #writeBeanIfValid(Object)
+ * @see #readBean(Object)
+ * @see #setBean(Object)
+ *
+ * @param bean
+ * the object to which to write the field values, not
+ * {@code null}
+ * @param forced
+ * disable all Validators during write
+ * @since 8.11
+ */
+ public void writeBeanAsDraft(BEAN bean, boolean forced) {
+ doWriteDraft(bean, new ArrayList<>(bindings),forced);
}
/**
@@ -1951,13 +2026,23 @@ public class Binder<BEAN> implements Serializable {
* the bean to write field values into
* @param bindings
* the set of bindings to write to the bean
+ * @param forced
+ * disable validators during write if true
*/
- @SuppressWarnings({ "unchecked" })
- private void doWriteDraft(BEAN bean, Collection<Binding<BEAN, ?>> bindings) {
+ private void doWriteDraft(BEAN bean,
+ Collection<Binding<BEAN, ?>> bindings, boolean forced) {
Objects.requireNonNull(bean, "bean cannot be null");
- bindings.forEach(binding -> ((BindingImpl<BEAN, ?, ?>) binding)
+ if (!forced) {
+ bindings.forEach(binding -> ((BindingImpl<BEAN, ?, ?>) binding)
+ .writeFieldValue(bean));
+ } else {
+ boolean isDisabled = isValidatorsDisabled();
+ setValidatorsDisabled(true);
+ bindings.forEach(binding -> ((BindingImpl<BEAN, ?, ?>) binding)
.writeFieldValue(bean));
+ setValidatorsDisabled(isDisabled);
+ }
}
/**
@@ -2027,7 +2112,14 @@ public class Binder<BEAN> implements Serializable {
*/
public Binder<BEAN> withValidator(Validator<? super BEAN> validator) {
Objects.requireNonNull(validator, "validator cannot be null");
- validators.add(validator);
+ Validator<? super BEAN> wrappedValidator = ((value, context) -> {
+ if (isValidatorsDisabled()) {
+ return ValidationResult.ok();
+ } else {
+ return validator.apply(value, context);
+ }
+ });
+ validators.add(wrappedValidator);
return this;
}
@@ -3025,6 +3117,30 @@ public class Binder<BEAN> implements Serializable {
.ifPresent(Binding::unbind);
}
+ /**
+ * Control whether validators including bean level validators are
+ * disabled or enabled globally for this Binder.
+ *
+ * @param validatorsDisabled Boolean value
+ *
+ * @since 8.11
+ */
+ public void setValidatorsDisabled(boolean validatorsDisabled) {
+ this.validatorsDisabled = validatorsDisabled;
+ }
+
+ /**
+ * Returns if the validators including bean level validators
+ * are disabled or enabled for this Binder.
+ *
+ * @return Boolean value
+ *
+ * @since 8.11
+ */
+ public boolean isValidatorsDisabled() {
+ return validatorsDisabled;
+ }
+
private static final Logger getLogger() {
return Logger.getLogger(Binder.class.getName());
}
diff --git a/server/src/main/java/com/vaadin/data/RequiredFieldConfigurator.java b/server/src/main/java/com/vaadin/data/RequiredFieldConfigurator.java
index c4071e9d98..8636c68012 100644
--- a/server/src/main/java/com/vaadin/data/RequiredFieldConfigurator.java
+++ b/server/src/main/java/com/vaadin/data/RequiredFieldConfigurator.java
@@ -50,7 +50,8 @@ public interface RequiredFieldConfigurator
*/
public RequiredFieldConfigurator NOT_EMPTY = annotation -> annotation
.annotationType().getName()
- .equals("org.hibernate.validator.constraints.NotEmpty");
+ .equals("org.hibernate.validator.constraints.NotEmpty") || annotation
+ .annotationType().getName().equals("javax.validation.constraints.NotEmpty");
/**
* Configurator which is aware of {@literal Size} annotation with
diff --git a/server/src/main/java/com/vaadin/data/ValueContext.java b/server/src/main/java/com/vaadin/data/ValueContext.java
index b4a5012179..b332960a1f 100644
--- a/server/src/main/java/com/vaadin/data/ValueContext.java
+++ b/server/src/main/java/com/vaadin/data/ValueContext.java
@@ -17,7 +17,6 @@ package com.vaadin.data;
import java.io.Serializable;
import java.util.Locale;
-import java.util.Objects;
import java.util.Optional;
import com.vaadin.ui.Component;
@@ -67,8 +66,6 @@ public class ValueContext implements Serializable {
*/
@SuppressWarnings("unchecked")
public ValueContext(Component component) {
- Objects.requireNonNull(component,
- "Component can't be null in ValueContext construction");
this.component = component;
if (component instanceof HasValue) {
hasValue = (HasValue<?>) component;
@@ -88,8 +85,6 @@ public class ValueContext implements Serializable {
* @since 8.1
*/
public ValueContext(Component component, HasValue<?> hasValue) {
- Objects.requireNonNull(component,
- "Component can't be null in ValueContext construction");
this.component = component;
this.hasValue = hasValue;
locale = findLocale();
diff --git a/server/src/main/java/com/vaadin/data/provider/HierarchicalDataCommunicator.java b/server/src/main/java/com/vaadin/data/provider/HierarchicalDataCommunicator.java
index 706f0a9391..621cb796d2 100644
--- a/server/src/main/java/com/vaadin/data/provider/HierarchicalDataCommunicator.java
+++ b/server/src/main/java/com/vaadin/data/provider/HierarchicalDataCommunicator.java
@@ -381,11 +381,11 @@ public class HierarchicalDataCommunicator<T> extends DataCommunicator<T> {
}
/**
- * Returns parent index for the row or {@code null}.
+ * Returns parent index for the row or a negative value.
*
* @param item
* the item to find the parent of
- * @return the parent index or {@code null} for top-level items
+ * @return the parent index or a negative value for top-level items
*/
public Integer getParentIndex(T item) {
return mapper.getParentIndex(item);
diff --git a/server/src/main/java/com/vaadin/data/provider/TreeDataProvider.java b/server/src/main/java/com/vaadin/data/provider/TreeDataProvider.java
index 5436685e58..6fcd029003 100644
--- a/server/src/main/java/com/vaadin/data/provider/TreeDataProvider.java
+++ b/server/src/main/java/com/vaadin/data/provider/TreeDataProvider.java
@@ -172,9 +172,20 @@ public class TreeDataProvider<T>
private Stream<T> getFilteredStream(Stream<T> stream,
Optional<SerializablePredicate<T>> queryFilter) {
+ final Optional<SerializablePredicate<T>> combinedFilter;
if (filter != null) {
- stream = stream.filter(filter);
+ combinedFilter = Optional
+ .of(queryFilter.map(filter::and).orElse(filter));
+ } else {
+ combinedFilter = queryFilter;
}
- return queryFilter.map(stream::filter).orElse(stream);
+ return combinedFilter.map(
+ f -> stream.filter(element -> flatten(element).anyMatch(f)))
+ .orElse(stream);
+ }
+
+ private Stream<T> flatten(T element) {
+ return Stream.concat(Stream.of(element), getTreeData()
+ .getChildren(element).stream().flatMap(this::flatten));
}
}
diff --git a/server/src/main/java/com/vaadin/navigator/Navigator.java b/server/src/main/java/com/vaadin/navigator/Navigator.java
index fc22b19c3b..e7dc389d1e 100644
--- a/server/src/main/java/com/vaadin/navigator/Navigator.java
+++ b/server/src/main/java/com/vaadin/navigator/Navigator.java
@@ -900,6 +900,11 @@ public class Navigator implements Serializable {
/**
* Returns the current navigation state reported by this Navigator's
* {@link NavigationStateManager}.
+ * <p>
+ * When the navigation is triggered by the browser (for example by pressing
+ * the back or forward button in the browser), the navigation state may
+ * already have been updated to reflect the new address, before the
+ * {@link #navigateTo(String)} is notified.
*
* @return The navigation state.
*/
diff --git a/server/src/main/java/com/vaadin/server/BootstrapHandler.java b/server/src/main/java/com/vaadin/server/BootstrapHandler.java
index 8f52b67085..5bd1a13155 100644
--- a/server/src/main/java/com/vaadin/server/BootstrapHandler.java
+++ b/server/src/main/java/com/vaadin/server/BootstrapHandler.java
@@ -510,8 +510,7 @@ public abstract class BootstrapHandler extends SynchronizedRequestHandler {
Document document = response.getDocument();
- DocumentType doctype = new DocumentType("html", "", "",
- document.baseUri());
+ DocumentType doctype = new DocumentType("html", "", "");
document.child(0).before(doctype);
Element head = document.head();
@@ -712,8 +711,7 @@ public abstract class BootstrapHandler extends SynchronizedRequestHandler {
appendMainScriptTagContents(context, builder);
builder.append("//]]>");
- mainScriptTag.appendChild(
- new DataNode(builder.toString(), mainScriptTag.baseUri()));
+ mainScriptTag.appendChild(new DataNode(builder.toString()));
fragmentNodes.add(mainScriptTag);
}
diff --git a/server/src/main/java/com/vaadin/server/Sizeable.java b/server/src/main/java/com/vaadin/server/Sizeable.java
index 19780ec375..5485bb6871 100644
--- a/server/src/main/java/com/vaadin/server/Sizeable.java
+++ b/server/src/main/java/com/vaadin/server/Sizeable.java
@@ -255,6 +255,20 @@ public interface Sizeable extends Serializable {
public void setSizeFull();
/**
+ * Sets the width to 100%.
+ *
+ * @since 8.11
+ */
+ public void setWidthFull();
+
+ /**
+ * Sets the height to 100%.
+ *
+ * @since 8.11
+ */
+ public void setHeightFull();
+
+ /**
* Clears any size settings.
*/
public void setSizeUndefined();
diff --git a/server/src/main/java/com/vaadin/server/VaadinService.java b/server/src/main/java/com/vaadin/server/VaadinService.java
index 9503db113f..4f01820868 100644
--- a/server/src/main/java/com/vaadin/server/VaadinService.java
+++ b/server/src/main/java/com/vaadin/server/VaadinService.java
@@ -202,7 +202,7 @@ public abstract class VaadinService implements Serializable {
* @since 8.2
*/
protected VaadinService() {
- this.deploymentConfiguration = null;
+ deploymentConfiguration = null;
}
/**
@@ -1226,13 +1226,17 @@ public abstract class VaadinService implements Serializable {
}
/**
- * Called at the end of a request, after sending the response. Closes
- * inactive UIs in the given session, removes closed UIs from the session,
- * and closes the session if it is itself inactive.
+ * Closes inactive UIs in the given session, removes closed UIs from the
+ * session, and closes the session if it is itself inactive. This operation
+ * should not be performed without first acquiring the session lock. By
+ * default called at the end of each request, after sending the response.
*
* @param session
+ * the session to clean up
+ *
+ * @since 8.10
*/
- void cleanupSession(VaadinSession session) {
+ public void cleanupSession(VaadinSession session) {
if (isSessionActive(session)) {
closeInactiveUIs(session);
removeClosedUIs(session);
@@ -1755,7 +1759,15 @@ public abstract class VaadinService implements Serializable {
* endless loop. This can at least happen if refreshing a
* resource when the session has expired.
*/
- response.sendError(HttpServletResponse.SC_GONE,
+
+ // Ensure that the browser does not cache expired responses.
+ // iOS 6 Safari requires this (#3226)
+ response.setHeader("Cache-Control", "no-cache");
+ // If Content-Type is not set, browsers assume text/html and may
+ // complain about the empty response body (#4167)
+ response.setHeader("Content-Type", "text/plain");
+
+ response.sendError(HttpServletResponse.SC_FORBIDDEN,
"Session expired");
}
} catch (IOException e) {
diff --git a/server/src/main/java/com/vaadin/server/communication/HeartbeatHandler.java b/server/src/main/java/com/vaadin/server/communication/HeartbeatHandler.java
index 07ab402514..8733c7b58c 100644
--- a/server/src/main/java/com/vaadin/server/communication/HeartbeatHandler.java
+++ b/server/src/main/java/com/vaadin/server/communication/HeartbeatHandler.java
@@ -62,10 +62,10 @@ public class HeartbeatHandler extends SynchronizedRequestHandler
if (ui != null) {
ui.setLastHeartbeatTimestamp(System.currentTimeMillis());
// Ensure that the browser does not cache heartbeat responses.
- // iOS 6 Safari requires this (#10370)
+ // iOS 6 Safari requires this (#3226)
response.setHeader("Cache-Control", "no-cache");
// If Content-Type is not set, browsers assume text/html and may
- // complain about the empty response body (#12182)
+ // complain about the empty response body (#4167)
response.setHeader("Content-Type", "text/plain");
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND,
@@ -88,15 +88,14 @@ public class HeartbeatHandler extends SynchronizedRequestHandler
if (!ServletPortletHelper.isHeartbeatRequest(request)) {
return false;
}
-
- // Ensure that the browser does not cache expired response.
- // iOS 6 Safari requires this (#10370)
+ // Ensure that the browser does not cache expired heartbeat responses.
+ // iOS 6 Safari requires this (#3226)
response.setHeader("Cache-Control", "no-cache");
// If Content-Type is not set, browsers assume text/html and may
- // complain about the empty response body (#12182)
+ // complain about the empty response body (#4167)
response.setHeader("Content-Type", "text/plain");
- response.sendError(HttpServletResponse.SC_NOT_FOUND, "Session expired");
+ response.sendError(HttpServletResponse.SC_FORBIDDEN, "Session expired");
return true;
}
}
diff --git a/server/src/main/java/com/vaadin/server/communication/PushHandler.java b/server/src/main/java/com/vaadin/server/communication/PushHandler.java
index 6344f7386f..030d4323ef 100644
--- a/server/src/main/java/com/vaadin/server/communication/PushHandler.java
+++ b/server/src/main/java/com/vaadin/server/communication/PushHandler.java
@@ -198,18 +198,16 @@ public class PushHandler {
* the atmosphere resource for the current request
* @param callback
* the push callback to call when a UI is found and locked
- * @param websocket
- * true if this is a websocket message (as opposed to a HTTP
- * request)
*/
private void callWithUi(final AtmosphereResource resource,
- final PushEventCallback callback, boolean websocket) {
+ final PushEventCallback callback) {
AtmosphereRequest req = resource.getRequest();
VaadinServletRequest vaadinRequest = new VaadinServletRequest(req,
service);
VaadinSession session = null;
- if (websocket) {
+ boolean isWebsocket = resource.transport() == TRANSPORT.WEBSOCKET;
+ if (isWebsocket) {
// For any HTTP request we have already started the request in the
// servlet
service.requestStart(vaadinRequest, null);
@@ -281,7 +279,7 @@ public class PushHandler {
}
} finally {
try {
- if (websocket) {
+ if (isWebsocket) {
service.requestEnd(vaadinRequest, null, session);
}
} catch (Exception e) {
@@ -520,7 +518,7 @@ public class PushHandler {
* The related atmosphere resources
*/
void onConnect(AtmosphereResource resource) {
- callWithUi(resource, establishCallback, false);
+ callWithUi(resource, establishCallback);
}
/**
@@ -531,8 +529,7 @@ public class PushHandler {
* The related atmosphere resources
*/
void onMessage(AtmosphereResource resource) {
- callWithUi(resource, receiveCallback,
- resource.transport() == TRANSPORT.WEBSOCKET);
+ callWithUi(resource, receiveCallback);
}
/**
diff --git a/server/src/main/java/com/vaadin/ui/AbstractComponent.java b/server/src/main/java/com/vaadin/ui/AbstractComponent.java
index d900f34872..17b2b8229e 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractComponent.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractComponent.java
@@ -30,8 +30,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.StringTokenizer;
-import com.vaadin.annotations.Theme;
-import com.vaadin.ui.themes.ValoTheme;
import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
@@ -840,6 +838,26 @@ public abstract class AbstractComponent extends AbstractClientConnector
/*
* (non-Javadoc)
*
+ * @see com.vaadin.server.Sizeable#setWidthFull()
+ */
+ @Override
+ public void setWidthFull() {
+ setWidth(100, Unit.PERCENTAGE);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.server.Sizeable#setHeightFull()
+ */
+ @Override
+ public void setHeightFull() {
+ setHeight(100, Unit.PERCENTAGE);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
* @see com.vaadin.server.Sizeable#setSizeUndefined()
*/
@Override
diff --git a/server/src/main/java/com/vaadin/ui/AbstractDateField.java b/server/src/main/java/com/vaadin/ui/AbstractDateField.java
index cb39cf607b..84a26436c0 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractDateField.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractDateField.java
@@ -179,6 +179,30 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
};
/**
+ * The default start year (inclusive) from which to calculate the
+ * daylight-saving time zone transition dates.
+ */
+ private static final int DEFAULT_START_YEAR = 1980;
+
+ /**
+ * The default value of the number of future years from the current date for
+ * which the daylight-saving time zone transition dates are calculated.
+ */
+ private static final int DEFAULT_YEARS_FROM_NOW = 20;
+
+ /**
+ * The optional user-supplied start year (inclusive) from which to calculate
+ * the daylight-saving time zone transition dates.
+ */
+ private Integer startYear;
+
+ /**
+ * The optional user-supplied end year (inclusive) until which to calculate
+ * the daylight-saving time zone transition dates.
+ */
+ private Integer endYear;
+
+ /**
* Value of the field.
*/
private T value;
@@ -296,6 +320,11 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
* date (taking the resolution into account), the component will not
* validate. If {@code startDate} is set to {@code null}, any value before
* {@code endDate} will be accepted by the range
+ * <p>
+ * Note: Negative, i.e. BC dates are not supported.
+ * <p>
+ * Note: It's usually recommended to use only one of the following at the same
+ * time: Range validator with Binder or DateField's setRangeStart check.
*
* @param startDate
* - the allowed range's start date
@@ -357,6 +386,9 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
* date (taking the resolution into account), the component will not
* validate. If {@code endDate} is set to {@code null}, any value after
* {@code startDate} will be accepted by the range.
+ * <p>
+ * Note: It's usually recommended to use only one of the following at the same
+ * time: Range validator with Binder or DateField's setRangeEnd check.
*
* @param endDate
* the allowed range's end date (inclusive, based on the current
@@ -481,7 +513,7 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
/**
* Sets the {@link ZoneId}, which is used when {@code z} is included inside
- * the {@link #setDateFormat(String)}.
+ * the {@link #setDateFormat(String)} .
*
* @param zoneId
* the zone id
@@ -490,27 +522,82 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
public void setZoneId(ZoneId zoneId) {
if (zoneId != this.zoneId
|| (zoneId != null && !zoneId.equals(this.zoneId))) {
- updateTimeZoneJSON(zoneId, getLocale());
+ updateTimeZoneJSON(zoneId, getLocale(), getStartYear(),
+ getEndYear());
}
this.zoneId = zoneId;
}
- private void updateTimeZoneJSON(ZoneId zoneId, Locale locale) {
+ private void updateTimeZoneJSON(ZoneId zoneId, Locale locale, int startYear,
+ int endYear) {
String timeZoneJSON;
if (zoneId != null && locale != null) {
- timeZoneJSON = TimeZoneUtil.toJSON(zoneId, locale);
+ timeZoneJSON = TimeZoneUtil.toJSON(zoneId, locale, startYear,
+ endYear);
} else {
timeZoneJSON = null;
}
getState().timeZoneJSON = timeZoneJSON;
}
+ /**
+ * Sets {@link startYear} and {@link endYear}: the start and end years (both
+ * inclusive) between which to calculate the daylight-saving time zone
+ * transition dates. Both parameters are used when '{@code z}' is included
+ * inside the {@link #setDateFormat(String)}, they would have no effect
+ * otherwise. Specifically, these parameters determine the range of years in
+ * which zone names are are adjusted to show the daylight saving names.
+ *
+ * If no values are provided, by default {@link startYear} is set to
+ * {@value #DEFAULT_START_YEAR}, and {@link endYear} is set to
+ * {@value #DEFAULT_YEARS_FROM_NOW} years into the future from the current
+ * date.
+ *
+ * @param startYear
+ * the start year of DST transitions
+ * @param endYear
+ * the end year of DST transitions
+ * @since 8.11
+ */
+ public void setDaylightSavingTimeRange(int startYear, int endYear) {
+ if (startYear > endYear) {
+ throw new IllegalArgumentException(
+ "The start year from which to begin calculating the "
+ + "daylight-saving time zone transition dates must"
+ + " be less than or equal to the end year.\n"
+ + startYear + " is greater than " + endYear);
+ }
+ if (this.startYear == null || this.endYear == null
+ || startYear != this.startYear || endYear != this.endYear) {
+ updateTimeZoneJSON(getZoneId(), getLocale(), startYear, endYear);
+ }
+ this.startYear = startYear;
+ this.endYear = endYear;
+ }
+
+ private int getStartYear() {
+ if (startYear == null) {
+ return DEFAULT_START_YEAR;
+ } else {
+ return startYear;
+ }
+ }
+
+ private int getEndYear() {
+ if (endYear == null) {
+ return LocalDate.now().getYear() + DEFAULT_YEARS_FROM_NOW;
+ } else {
+ return endYear;
+ }
+ }
+
@Override
public void setLocale(Locale locale) {
Locale oldLocale = getLocale();
if (locale != oldLocale
|| (locale != null && !locale.equals(oldLocale))) {
- updateTimeZoneJSON(getZoneId(), locale);
+ updateTimeZoneJSON(getZoneId(), locale, getStartYear(),
+ getEndYear());
}
super.setLocale(locale);
}
@@ -616,27 +703,38 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
*
* @param value
* the new value, may be {@code null}
+ * @throws IllegalArgumentException
+ * if the value is not within range bounds
*/
@Override
public void setValue(T value) {
- currentErrorMessage = null;
- /*
- * First handle special case when the client side component have a date
- * string but value is null (e.g. unparsable date string typed in by the
- * user). No value changes should happen, but we need to do some
- * internal housekeeping.
- */
- if (value == null && !getState(false).parsable) {
+ RangeValidator<T> validator = getRangeValidator();
+ ValidationResult result = validator.apply(value,
+ new ValueContext(this, this));
+
+ if (result.isError()) {
+ throw new IllegalArgumentException(
+ "value is not within acceptable range");
+ } else {
+ currentErrorMessage = null;
/*
- * Side-effects of doSetValue clears possible previous strings and
- * flags about invalid input.
+ * First handle special case when the client side component has a date
+ * string but value is null (e.g. unparsable date string typed in by the
+ * user). No value changes should happen, but we need to do some
+ * internal housekeeping.
*/
- doSetValue(null);
-
- markAsDirty();
- return;
+ if (value == null && !getState(false).parsable) {
+ /*
+ * Side-effects of doSetValue clears possible previous strings and
+ * flags about invalid input.
+ */
+ doSetValue(null);
+
+ markAsDirty();
+ return;
+ }
+ super.setValue(value);
}
- super.setValue(value);
}
/**
@@ -783,8 +881,8 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
@Override
protected void doSetValue(T value) {
- this.value = value;
// Also set the internal dateString
+ this.value = value;
if (value == null) {
value = getEmptyValue();
}
diff --git a/server/src/main/java/com/vaadin/ui/ConnectorTracker.java b/server/src/main/java/com/vaadin/ui/ConnectorTracker.java
index b2cb185e0a..b8f0ecde95 100644
--- a/server/src/main/java/com/vaadin/ui/ConnectorTracker.java
+++ b/server/src/main/java/com/vaadin/ui/ConnectorTracker.java
@@ -878,10 +878,12 @@ public class ConnectorTracker implements Serializable {
}
Map<String, StreamVariable> nameToStreamVar = pidToNameToStreamVariable
.get(connectorId);
- StreamVariable streamVar = nameToStreamVar.remove(variableName);
- streamVariableToSeckey.remove(streamVar);
- if (nameToStreamVar.isEmpty()) {
- pidToNameToStreamVariable.remove(connectorId);
+ if (nameToStreamVar != null) {
+ StreamVariable streamVar = nameToStreamVar.remove(variableName);
+ streamVariableToSeckey.remove(streamVar);
+ if (nameToStreamVar.isEmpty()) {
+ pidToNameToStreamVariable.remove(connectorId);
+ }
}
}
diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java
index 1ac71ff984..bba799690d 100644
--- a/server/src/main/java/com/vaadin/ui/Grid.java
+++ b/server/src/main/java/com/vaadin/ui/Grid.java
@@ -1948,13 +1948,19 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
* @param editable
* {@code true} if column is editable; {@code false} if not
* @return this column
+ * @throws IllegalStateException
+ * if editable is true and column has no editor binding or
+ * component defined
*
* @see #setEditorComponent(HasValue, Setter)
* @see #setEditorBinding(Binding)
*/
- public Column<T, V> setEditable(boolean editable) {
- Objects.requireNonNull(editorBinding,
- "Column has no editor binding or component defined");
+ public Column<T, V> setEditable(boolean editable)
+ throws IllegalStateException {
+ if (editable && editorBinding == null) {
+ throw new IllegalStateException(
+ "Column has no editor binding or component defined");
+ }
getState().editable = editable;
return this;
}
diff --git a/server/src/main/java/com/vaadin/ui/Tree.java b/server/src/main/java/com/vaadin/ui/Tree.java
index cf8bb49f2b..9e8030daae 100644
--- a/server/src/main/java/com/vaadin/ui/Tree.java
+++ b/server/src/main/java/com/vaadin/ui/Tree.java
@@ -573,6 +573,18 @@ public class Tree<T> extends Composite
public Registration addSelectionListener(SelectionListener<T> listener) {
return treeGrid.addSelectionListener(listener);
}
+
+ /**
+ * Use this tree as a multi select in {@link Binder}. Throws
+ * {@link IllegalStateException} if the tree is not using
+ * {@link SelectionMode#MULTI}.
+ *
+ * @return the multi select wrapper that can be used in binder
+ * @since 8.11
+ */
+ public MultiSelect<T> asMultiSelect() {
+ return treeGrid.asMultiSelect();
+ }
/**
* Use this tree as a single select in {@link Binder}. Throws
diff --git a/server/src/main/java/com/vaadin/ui/UI.java b/server/src/main/java/com/vaadin/ui/UI.java
index e48390666e..5891addca4 100644
--- a/server/src/main/java/com/vaadin/ui/UI.java
+++ b/server/src/main/java/com/vaadin/ui/UI.java
@@ -1588,10 +1588,11 @@ public abstract class UI extends AbstractSingleComponentContainer
* accessSynchronously. Furthermore, there wasn't an
* ErrorHandlingRunnable that handled the exception.
*/
- getLogger().log(Level.WARNING,
- "access() task ignored because UI got detached after the task was enqueued."
- + " To suppress this message, change the task to implement {} and make it handle {}."
- + " Affected task: {}",
+ getLogger().log(Level.WARNING, "access() task ignored "
+ + "because UI got detached after the task was "
+ + "enqueued. To suppress this message, change "
+ + "the task to implement {0} and make it handle "
+ + "{1}. Affected task: {2}",
new Object[] {
ErrorHandlingRunnable.class.getName(),
UIDetachedException.class.getName(),
diff --git a/server/src/main/java/com/vaadin/ui/Upload.java b/server/src/main/java/com/vaadin/ui/Upload.java
index 018b06e581..c47e5f1451 100644
--- a/server/src/main/java/com/vaadin/ui/Upload.java
+++ b/server/src/main/java/com/vaadin/ui/Upload.java
@@ -98,10 +98,6 @@ public class Upload extends AbstractComponent
private int totalBytes;
- private String buttonCaption = "Upload";
-
- private String buttonStyleName;
-
/**
* ProgressListeners to which information about progress is sent during
* upload
@@ -184,13 +180,6 @@ public class Upload extends AbstractComponent
target.addAttribute("state", isUploading);
- if (buttonCaption != null) {
- target.addAttribute("buttoncaption", buttonCaption);
- if (buttonStyleName != null) {
- target.addAttribute("buttonstylename", buttonStyleName);
- }
- }
-
target.addAttribute("nextid", nextid);
// Post file to this stream variable
@@ -982,17 +971,31 @@ public class Upload extends AbstractComponent
* @return String to be rendered into button that fires uploading
*/
public String getButtonCaption() {
- return buttonCaption;
+ return getState(false).buttonCaption;
}
/**
- * Returns the stylename rendered into button that fires uploading.
+ * Returns the style name rendered into button that fires uploading.
*
- * @return Stylename to be rendered into button that fires uploading
+ * @return Style name to be rendered into button that fires uploading
* @since 8.2
*/
public String getButtonStyleName() {
- return buttonStyleName;
+ return getState(false).buttonStyleName;
+ }
+
+ /**
+ * Checks whether the caption of the button that fires uploading is rendered
+ * as HTML
+ * <p>
+ * The default is {@code false}, i.e. to render that caption as plain text.
+ *
+ * @return {@code true} if the caption is rendered as HTML, {@code false} if
+ * rendered as plain text
+ * @since 8.11
+ */
+ public boolean isButtonCaptionAsHtml() {
+ return getState(false).buttonCaptionAsHtml;
}
/**
@@ -1005,8 +1008,8 @@ public class Upload extends AbstractComponent
* {@link #submitUpload()}.
* <p>
* In case the Upload is used in immediate mode using
- * {@link #setImmediateMode(boolean)}, the file choose (html input with type
- * "file") is hidden and only the button with this text is shown.
+ * {@link #setImmediateMode(boolean)}, the file chooser (HTML input with
+ * type "file") is hidden and only the button with this text is shown.
* <p>
*
* <p>
@@ -1018,41 +1021,63 @@ public class Upload extends AbstractComponent
* text for upload components button.
*/
public void setButtonCaption(String buttonCaption) {
- this.buttonCaption = buttonCaption;
- markAsDirty();
+ getState().buttonCaption = buttonCaption;
}
/**
* In addition to the actual file chooser, upload components have button
- * that starts actual upload progress. This method is used to set a
- * stylename to that button.
+ * that starts actual upload progress. This method is used to set a style
+ * name to that button.
+ * <p>
+ * Note: Unlike {@code Button.setStyleName()} this method overrides all the
+ * styles from the button. If you wish to preserve the default styles, enter
+ * the style name as {@code "v-button yourStyleName"}.
*
* @param buttonStyleName
- * styleName for upload components button.
+ * style name for upload components button.
* @see #setButtonCaption(String) about when the button is shown / hidden.
* @since 8.2
*/
public void setButtonStyleName(String buttonStyleName) {
- this.buttonStyleName = buttonStyleName;
- markAsDirty();
+ getState().buttonStyleName = buttonStyleName;
+ }
+
+ /**
+ * In addition to the actual file chooser, upload components have button
+ * that starts actual upload progress. This method is used to set whether
+ * the caption on that button is rendered as HTML.
+ * <p>
+ * If set to {@code true}, the caption is rendered in the browser as HTML
+ * and the developer is responsible for ensuring no harmful HTML is used. If
+ * set to {@code false}, the caption is rendered in the browser as plain
+ * text.
+ * <p>
+ * The default is {@code false}, i.e. to render the caption as plain text.
+ *
+ * @param buttonCaptionAsHtml
+ * {@code true} if the caption is rendered as HTML, {@code false}
+ * if rendered as plain text
+ * @since 8.11
+ */
+ public void setButtonCaptionAsHtml(boolean buttonCaptionAsHtml) {
+ getState().buttonCaptionAsHtml = buttonCaptionAsHtml;
}
/**
- * Forces the upload the send selected file to the server.
+ * Instructs the upload component to send selected file to the server.
* <p>
* In case developer wants to use this feature, he/she will most probably
- * want to hide the uploads internal submit button by setting its caption to
- * null with {@link #setButtonCaption(String)} method.
+ * want to hide the upload component's internal submit button by setting its
+ * caption to null with {@link #setButtonCaption(String)} method.
* <p>
- * Note, that the upload runs asynchronous. Developer should use normal
- * upload listeners to trac the process of upload. If the field is empty
- * uploaded the file name will be empty string and file length 0 in the
- * upload finished event.
+ * Note that the upload runs asynchronously. Developer should use normal
+ * upload listeners to track the process of upload. If the file name field
+ * is empty, no upload will be triggered.
* <p>
- * Also note, that the developer should not remove or modify the upload in
- * the same user transaction where the upload submit is requested. The
- * upload may safely be hidden or removed once the upload started event is
- * fired.
+ * Also note that the developer should not remove or modify the upload
+ * component in the same user transaction where the upload submit is
+ * requested. The upload component can be safely hidden or removed once the
+ * upload started event has been fired.
*/
public void submitUpload() {
markAsDirty();
diff --git a/server/src/main/java/com/vaadin/ui/components/grid/GridRowDragger.java b/server/src/main/java/com/vaadin/ui/components/grid/GridRowDragger.java
index 56ebe406ca..6b21981f24 100644
--- a/server/src/main/java/com/vaadin/ui/components/grid/GridRowDragger.java
+++ b/server/src/main/java/com/vaadin/ui/components/grid/GridRowDragger.java
@@ -381,7 +381,11 @@ public class GridRowDragger<T> implements Serializable {
}
sourceItems.removeAll(droppedItems);
- listDataProvider.refreshAll();
+
+ // if reordering the same grid, DataProvider's refresh will be done later
+ if (getGridDragSource().getGrid() != getGridDropTarget().getGrid()) {
+ listDataProvider.refreshAll();
+ }
}
private void handleTargetGridDrop(GridDropEvent<T> event, final int index,
diff --git a/server/src/main/java/com/vaadin/ui/declarative/Design.java b/server/src/main/java/com/vaadin/ui/declarative/Design.java
index 0b78a9cbde..a2c698c6bd 100644
--- a/server/src/main/java/com/vaadin/ui/declarative/Design.java
+++ b/server/src/main/java/com/vaadin/ui/declarative/Design.java
@@ -234,14 +234,14 @@ public class Design implements Serializable {
throw new DesignException("Unknown tag: " + tagName);
}
String[] classNameParts = parts[1].split("-");
- String className = "";
+ StringBuilder className = new StringBuilder();
for (String classNamePart : classNameParts) {
// Split will ignore trailing and multiple dashes but that
// should be
// ok
// <vaadin-button--> will be resolved to <vaadin-button>
// <vaadin--button> will be resolved to <vaadin-button>
- className += SharedUtil.capitalize(classNamePart);
+ className.append(SharedUtil.capitalize(classNamePart));
}
String qualifiedClassName = packageName + "." + className;
diff --git a/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java b/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
index 3ec3b66c85..74bde7a781 100644
--- a/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
+++ b/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
@@ -380,6 +380,11 @@ public class ValoTheme {
/**
* Move the default caption icon inside the text field. Can be combined with
* any other TextField style.
+ * <p>
+ * Note: Does not apply in FormLayout
+ * <p>
+ * Note: TextFields with inlined icons in Grid header need to be wrapped into
+ * e.g. HorizontalLayout
*/
public static final String TEXTFIELD_INLINE_ICON = "inline-icon";
diff --git a/server/src/main/java/com/vaadin/util/TimeZoneUtil.java b/server/src/main/java/com/vaadin/util/TimeZoneUtil.java
index 16e8323f9e..2997378de1 100644
--- a/server/src/main/java/com/vaadin/util/TimeZoneUtil.java
+++ b/server/src/main/java/com/vaadin/util/TimeZoneUtil.java
@@ -42,13 +42,14 @@ import elemental.json.impl.JsonUtil;
public final class TimeZoneUtil implements Serializable {
/**
- * The start year used to send the time zone transition dates.
+ * The default start year (inclusive) from which to calculate the
+ * daylight-saving time zone transition dates.
*/
private static final int STARTING_YEAR = 1980;
/**
- * Till how many years from now, should we send the time zone transition
- * dates.
+ * The default value of the number of future years from the current date for
+ * which the daylight-saving time zone transition dates are calculated.
*/
private static final int YEARS_FROM_NOW = 20;
@@ -61,6 +62,12 @@ public final class TimeZoneUtil implements Serializable {
* which is used in
* {@link com.google.gwt.i18n.client.TimeZone#createTimeZone(String)}.
*
+ * This method calculates the JSON string from the year
+ * {@value #STARTING_YEAR} until {@value #YEARS_FROM_NOW} years into the
+ * future from the current date.
+ *
+ * @see #toJSON(ZoneId, Locale, int, int)
+ *
* @param zoneId
* the {@link ZoneId} to get the daylight transitions from
* @param locale
@@ -69,6 +76,32 @@ public final class TimeZoneUtil implements Serializable {
* @return the encoded string
*/
public static String toJSON(ZoneId zoneId, Locale locale) {
+ int endYear = LocalDate.now().getYear() + YEARS_FROM_NOW;
+ return toJSON(zoneId, locale, STARTING_YEAR, endYear);
+ }
+
+ /**
+ * Returns a JSON string of the specified {@code zoneId} and {@link Locale},
+ * which is used in
+ * {@link com.google.gwt.i18n.client.TimeZone#createTimeZone(String)}.
+ *
+ * This method calculates the JSON string from {@code startYear} until
+ * {@code startYear}, both inclusive.
+ *
+ * @param zoneId
+ * the {@link ZoneId} to get the daylight transitions from
+ * @param locale
+ * the locale used to determine the short name of the time zone
+ * @param startYear
+ * the start year of DST transitions
+ * @param endYear
+ * the end year of DST transitions
+ *
+ * @return the encoded string
+ * @since 8.11
+ */
+ public static String toJSON(ZoneId zoneId, Locale locale, int startYear,
+ int endYear) {
if (zoneId == null || locale == null) {
return null;
}
@@ -78,9 +111,8 @@ public final class TimeZoneUtil implements Serializable {
TimeZoneInfo info = new TimeZoneInfo();
- int endYear = LocalDate.now().getYear() + YEARS_FROM_NOW;
if (timeZone.useDaylightTime()) {
- for (int year = STARTING_YEAR; year <= endYear; year++) {
+ for (int year = startYear; year <= endYear; year++) {
ZonedDateTime i = LocalDateTime.of(year, 1, 1, 0, 0)
.atZone(zoneId);
while (true) {
diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java
index b3fe5a8194..b64dee9c6b 100644
--- a/server/src/test/java/com/vaadin/data/BinderTest.java
+++ b/server/src/test/java/com/vaadin/data/BinderTest.java
@@ -274,8 +274,11 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
Binder<Person> binder = new Binder<>();
binder.forField(nameField)
.withValidator((value,context) -> {
- if (value.equals("Mike")) return ValidationResult.ok();
- else return ValidationResult.error("value must be Mike");
+ if (value.equals("Mike")) {
+ return ValidationResult.ok();
+ } else {
+ return ValidationResult.error("value must be Mike");
+ }
})
.bind(Person::getFirstName, Person::setFirstName);
binder.forField(ageField)
@@ -300,6 +303,78 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
// age is written to draft even if firstname validation
// fails
assertEquals(age, person.getAge());
+
+ binder.writeBeanAsDraft(person,true);
+ // name is now written despite validation as write was forced
+ assertEquals(fieldValue, person.getFirstName());
+ }
+
+ @Test
+ public void save_bound_bean_disable_validation_binding() throws ValidationException {
+ Binder<Person> binder = new Binder<>();
+ Binding<Person, String> nameBinding = binder.forField(nameField)
+ .withValidator((value,context) -> {
+ if (value.equals("Mike")) {
+ return ValidationResult.ok();
+ } else {
+ return ValidationResult.error("value must be Mike");
+ }
+ })
+ .bind(Person::getFirstName, Person::setFirstName);
+ binder.forField(ageField)
+ .withConverter(new StringToIntegerConverter(""))
+ .bind(Person::getAge, Person::setAge);
+
+ Person person = new Person();
+
+ String fieldValue = "John";
+ nameField.setValue(fieldValue);
+
+ int age = 10;
+ ageField.setValue("10");
+
+ person.setFirstName("Mark");
+
+ nameBinding.setValidatorsDisabled(true);
+ binder.writeBean(person);
+
+ // name is now written as validation was disabled
+ assertEquals(fieldValue, person.getFirstName());
+ assertEquals(age, person.getAge());
+ }
+
+ @Test
+ public void save_bound_bean_disable_validation_binder() throws ValidationException {
+ Binder<Person> binder = new Binder<>();
+ binder.forField(nameField)
+ .withValidator((value,context) -> {
+ if (value.equals("Mike")) {
+ return ValidationResult.ok();
+ } else {
+ return ValidationResult.error("value must be Mike");
+ }
+ })
+ .bind(Person::getFirstName, Person::setFirstName);
+ binder.forField(ageField)
+ .withConverter(new StringToIntegerConverter(""))
+ .bind(Person::getAge, Person::setAge);
+
+ Person person = new Person();
+
+ String fieldValue = "John";
+ nameField.setValue(fieldValue);
+
+ int age = 10;
+ ageField.setValue("10");
+
+ person.setFirstName("Mark");
+
+ binder.setValidatorsDisabled(true);
+ binder.writeBean(person);
+
+ // name is now written as validation was disabled
+ assertEquals(fieldValue, person.getFirstName());
+ assertEquals(age, person.getAge());
}
@Test
diff --git a/server/src/test/java/com/vaadin/data/provider/TreeDataProviderTest.java b/server/src/test/java/com/vaadin/data/provider/TreeDataProviderTest.java
index 7d5f1c0909..02c3f4508d 100644
--- a/server/src/test/java/com/vaadin/data/provider/TreeDataProviderTest.java
+++ b/server/src/test/java/com/vaadin/data/provider/TreeDataProviderTest.java
@@ -204,6 +204,51 @@ public class TreeDataProviderTest
}
@Test
+ public void filter_is_applied_to_children_provider_filter() {
+ final SerializablePredicate<String> dataProviderFilter = item -> item
+ .contains("Sub");
+ final HierarchicalQuery<String, SerializablePredicate<String>> query = new HierarchicalQuery<>(
+ null, null);
+ filter_is_applied_to_children(dataProviderFilter, query);
+ }
+
+ @Test
+ public void filter_is_applied_to_children_query_filter() {
+ final SerializablePredicate<String> dataProviderFilter = null;
+ final HierarchicalQuery<String, SerializablePredicate<String>> query = new HierarchicalQuery<>(
+ item -> item.contains("Sub"), null);
+ filter_is_applied_to_children(dataProviderFilter, query);
+ }
+
+ @Test
+ public void filter_is_applied_to_children_both_filters() {
+ final SerializablePredicate<String> dataProviderFilter = item -> item
+ .contains("Sub");
+ final HierarchicalQuery<String, SerializablePredicate<String>> query = new HierarchicalQuery<>(
+ dataProviderFilter, null);
+ filter_is_applied_to_children(dataProviderFilter, query);
+ }
+
+ private void filter_is_applied_to_children(
+ final SerializablePredicate<String> dataProviderFilter,
+ final HierarchicalQuery<String, SerializablePredicate<String>> query) {
+ final TreeData<String> stringData = new TreeData<>();
+ final String root1 = "Main";
+ final List<String> children1 = Arrays.asList("Sub1", "Sub2");
+ final String root2 = "Other";
+ final List<String> children2 = Arrays.asList("Foo1", "Foo2");
+ stringData.addRootItems(root1, root2);
+ stringData.addItems(root1, children1);
+ stringData.addItems(root2, children2);
+ final TreeDataProvider<String> provider = new TreeDataProvider<>(
+ stringData);
+ provider.setFilter(dataProviderFilter);
+ assertEquals("Unexpected amount of root items after filtering.", 1,
+ provider.getChildCount(query));
+ assertTrue(provider.fetchChildren(query).allMatch(root1::equals));
+ }
+
+ @Test
public void setFilter() {
getDataProvider().setFilter(item -> item.getValue().equals("Xyz")
|| item.getValue().equals("Baz"));
@@ -214,7 +259,7 @@ public class TreeDataProviderTest
&& !item.getValue().equals("Xyz"));
assertEquals(
- "Previous filter should be replaced when setting a new one", 6,
+ "Previous filter should be replaced when setting a new one", 14,
sizeWithUnfilteredQuery());
getDataProvider().setFilter(null);
@@ -227,7 +272,7 @@ public class TreeDataProviderTest
public void addFilter() {
getDataProvider().addFilter(item -> item.getId() <= 10);
getDataProvider().addFilter(item -> item.getId() >= 5);
- assertEquals(5, sizeWithUnfilteredQuery());
+ assertEquals(8, sizeWithUnfilteredQuery());
}
@Override
@@ -240,7 +285,7 @@ public class TreeDataProviderTest
.size(new HierarchicalQuery<>("Xyz", null)));
assertEquals("No item should match 'Zyx'", 0, strFilterDataProvider
.size(new HierarchicalQuery<>("Zyx", null)));
- assertEquals("Unexpected number of matches for 'Foo'", 3,
+ assertEquals("Unexpected number of matches for 'Foo'", 4,
strFilterDataProvider
.size(new HierarchicalQuery<>("Foo", null)));
assertEquals("No items should've been filtered out", rootData.size(),
@@ -256,7 +301,7 @@ public class TreeDataProviderTest
assertEquals("No item should match 'Zyx'", 0,
dataProvider.size(new HierarchicalQuery<>(
strBean -> strBean.getValue().contains("Zyx"), null)));
- assertEquals("Unexpected number of matches for 'Foo'", 3,
+ assertEquals("Unexpected number of matches for 'Foo'", 4,
getDataProvider()
.size(new HierarchicalQuery<>(fooFilter, null)));
}
diff --git a/server/src/test/java/com/vaadin/data/provider/hierarchical/HierarchyMapperWithDataTest.java b/server/src/test/java/com/vaadin/data/provider/hierarchical/HierarchyMapperWithDataTest.java
index e056b99c21..31c8cdc929 100644
--- a/server/src/test/java/com/vaadin/data/provider/hierarchical/HierarchyMapperWithDataTest.java
+++ b/server/src/test/java/com/vaadin/data/provider/hierarchical/HierarchyMapperWithDataTest.java
@@ -8,6 +8,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.junit.Before;
@@ -195,11 +196,12 @@ public class HierarchyMapperWithDataTest {
expand(expandedNode);
SerializablePredicate<Node> filter = n -> n.getNumber() % 2 == 0;
- List<Node> expectedResult = testData.stream().filter(filter)
- .filter(n -> roots.contains(n)
- || n.getParent().equals(testData.get(0))
- || n.getParent().equals(expandedNode))
- .collect(Collectors.toList());
+
+ // Root nodes plus children of expanded nodes 0 and 4 that match the
+ // filter
+ List<Node> expectedResult = IntStream
+ .of(0, 1, 4, 6, 7, 10, 13, 26, 39, 52).mapToObj(testData::get)
+ .collect(Collectors.toList());
mapper.setFilter(filter);
diff --git a/server/src/test/java/com/vaadin/tests/server/component/grid/GridRowDraggerOneGridTest.java b/server/src/test/java/com/vaadin/tests/server/component/grid/GridRowDraggerOneGridTest.java
index 08b647cdde..6c522abcf9 100644
--- a/server/src/test/java/com/vaadin/tests/server/component/grid/GridRowDraggerOneGridTest.java
+++ b/server/src/test/java/com/vaadin/tests/server/component/grid/GridRowDraggerOneGridTest.java
@@ -128,6 +128,26 @@ public class GridRowDraggerOneGridTest {
}
@Test
+ public void listDataProvider_calledOnlyOnce() {
+
+ final int[] times = new int[1];
+
+ source.setItems("0", "1", "2");
+
+ source.getDataProvider().addDataProviderListener(ev -> times[0]++);
+
+ dragger.setDropIndexCalculator(event -> {
+ return Integer.MAX_VALUE;
+ });
+
+ drop("1", DropLocation.ABOVE, "0");
+
+ verifyDataProvider("1", "2", "0");
+
+ Assert.assertArrayEquals("DataProvider should be invoked only once", new int[] { 1 }, times);
+ }
+
+ @Test
public void noopSourceUpdater() {
source.setItems("0", "1", "2");
diff --git a/server/src/test/java/com/vaadin/ui/DateFieldTestCase.java b/server/src/test/java/com/vaadin/ui/DateFieldTestCase.java
index f50141df66..026388d623 100644
--- a/server/src/test/java/com/vaadin/ui/DateFieldTestCase.java
+++ b/server/src/test/java/com/vaadin/ui/DateFieldTestCase.java
@@ -10,12 +10,17 @@ import java.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
+import org.junit.Rule;
+import org.junit.rules.ExpectedException;
public class DateFieldTestCase {
private AbstractLocalDateField dateField;
private LocalDate date;
+ @Rule
+ public transient ExpectedException exceptionRule = ExpectedException.none();
+
@Before
public void setup() {
dateField = new AbstractLocalDateField() {
@@ -39,9 +44,11 @@ public class DateFieldTestCase {
@Test
public void belowRangeStartIsNotAcceptedAsValue() {
+ LocalDate currentDate = dateField.getValue();
dateField.setRangeStart(date);
+ exceptionRule.expect(IllegalArgumentException.class);
dateField.setValue(date.minusDays(1));
- assertNotNull(dateField.getComponentError());
+ assertThat(dateField.getValue(), is(currentDate));
}
@Test
@@ -60,8 +67,10 @@ public class DateFieldTestCase {
@Test
public void aboveRangeEndIsNotAcceptedAsValue() {
+ LocalDate currentDate = dateField.getValue();
dateField.setRangeEnd(date);
+ exceptionRule.expect(IllegalArgumentException.class);
dateField.setValue(date.plusDays(1));
- assertNotNull(dateField.getComponentError());
+ assertThat(dateField.getValue(), is(currentDate));
}
}
diff --git a/shared/pom.xml b/shared/pom.xml
index efcbd8eb42..5204a1afdb 100644
--- a/shared/pom.xml
+++ b/shared/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-shared</artifactId>
<name>vaadin-shared</name>
diff --git a/shared/src/main/java/com/vaadin/shared/ui/dnd/criteria/Criterion.java b/shared/src/main/java/com/vaadin/shared/ui/dnd/criteria/Criterion.java
index 73c022a033..e734a5edc1 100644
--- a/shared/src/main/java/com/vaadin/shared/ui/dnd/criteria/Criterion.java
+++ b/shared/src/main/java/com/vaadin/shared/ui/dnd/criteria/Criterion.java
@@ -116,10 +116,10 @@ public class Criterion implements Serializable {
*/
private Criterion(String key, ComparisonOperator operator, String value,
Payload.ValueType valueType) {
- this.key = key;
- this.value = value;
- this.valueType = valueType;
- this.operator = operator;
+ setKey(key);
+ setValue(value);
+ setValueType(valueType);
+ setOperator(operator);
}
/**
@@ -132,6 +132,16 @@ public class Criterion implements Serializable {
}
/**
+ * Sets the key of the payload to be compared.
+ *
+ * @param key
+ * key of the payload to be compared
+ */
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ /**
* Gets the value of the payload to be compared.
*
* @return value of the payload to be compared
@@ -141,6 +151,16 @@ public class Criterion implements Serializable {
}
/**
+ * Sets the value of the payload to be compared.
+ *
+ * @param value
+ * value of the payload to be compared
+ */
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ /**
* Gets the type of the payload value to be compared.
*
* @return type of the payload value to be compared
@@ -150,6 +170,16 @@ public class Criterion implements Serializable {
}
/**
+ * Sets the type of the payload value to be compared.
+ *
+ * @param valueType
+ * type of the payload to be compared
+ */
+ public void setValueType(Payload.ValueType valueType) {
+ this.valueType = valueType;
+ }
+
+ /**
* Gets the comparison operator.
*
* @return operator to be used when comparing payload value with criterion
@@ -159,6 +189,16 @@ public class Criterion implements Serializable {
}
/**
+ * Sets the comparison operator.
+ *
+ * @param operator
+ * comparison operator
+ */
+ public void setOperator(ComparisonOperator operator) {
+ this.operator = operator;
+ }
+
+ /**
* Compares this criterion's value to the given payload's value and returns
* whether the result matches the criterion's operator. The comparison is
* done with the payload whose key and value type match the criterion's key
diff --git a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadClientRpc.java b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadClientRpc.java
index 5e29d517b8..1801eb0e72 100644
--- a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadClientRpc.java
+++ b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadClientRpc.java
@@ -17,10 +17,13 @@ package com.vaadin.shared.ui.upload;
import com.vaadin.shared.communication.ClientRpc;
+/**
+ * Server-to-client RPC interface for Upload.
+ */
public interface UploadClientRpc extends ClientRpc {
/**
- * Forces the upload the send selected file to the server.
+ * Instructs the upload component to send the selected file to the server.
*/
void submitUpload();
}
diff --git a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadServerRpc.java b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadServerRpc.java
index 59ebe9c8da..d0e89e8dee 100644
--- a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadServerRpc.java
+++ b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadServerRpc.java
@@ -17,6 +17,9 @@ package com.vaadin.shared.ui.upload;
import com.vaadin.shared.communication.ServerRpc;
+/**
+ * Client-to-server RPC interface for Upload.
+ */
public interface UploadServerRpc extends ServerRpc {
/**
diff --git a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadState.java b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadState.java
index 217946391c..81b4bdf8c4 100644
--- a/shared/src/main/java/com/vaadin/shared/ui/upload/UploadState.java
+++ b/shared/src/main/java/com/vaadin/shared/ui/upload/UploadState.java
@@ -33,7 +33,20 @@ public class UploadState extends AbstractComponentState {
primaryStyleName = "v-upload";
}
+ /** Upload component's list of accepted content-types. */
@DelegateToWidget
@NoLayout
public String acceptMimeTypes;
+
+ /** Caption of the button that fires uploading. */
+ public String buttonCaption = "Upload";
+
+ /** Style name of the button that fires uploading. */
+ public String buttonStyleName = "v-button";
+
+ /**
+ * Should the caption of the button that fires uploading be rendered as
+ * HTML.
+ */
+ public boolean buttonCaptionAsHtml;
}
diff --git a/test/addon-using-init-param-widget-set/pom.xml b/test/addon-using-init-param-widget-set/pom.xml
index b5aae490c2..ae54176bf5 100644
--- a/test/addon-using-init-param-widget-set/pom.xml
+++ b/test/addon-using-init-param-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-addon-using-init-param-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/addon-using-no-defined-widget-set/pom.xml b/test/addon-using-no-defined-widget-set/pom.xml
index 5496df70d1..18efbd56b6 100644
--- a/test/addon-using-no-defined-widget-set/pom.xml
+++ b/test/addon-using-no-defined-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-addon-using-no-defined-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/addon-using-own-widget-set/pom.xml b/test/addon-using-own-widget-set/pom.xml
index 39d15dd5d8..1cb30c0c90 100644
--- a/test/addon-using-own-widget-set/pom.xml
+++ b/test/addon-using-own-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-addon-using-own-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/bean-api-validation/pom.xml b/test/bean-api-validation/pom.xml
index bae42ac783..12824a047e 100644
--- a/test/bean-api-validation/pom.xml
+++ b/test/bean-api-validation/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-bean-api-validation</artifactId>
<packaging>jar</packaging>
diff --git a/test/bean-impl-validation/pom.xml b/test/bean-impl-validation/pom.xml
index cf5e664651..a3412776c4 100644
--- a/test/bean-impl-validation/pom.xml
+++ b/test/bean-impl-validation/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-bean-impl-validation</artifactId>
<packaging>jar</packaging>
diff --git a/test/cdi/pom.xml b/test/cdi/pom.xml
index edcadf48d9..d12541951b 100644
--- a/test/cdi/pom.xml
+++ b/test/cdi/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-cdi</artifactId>
<packaging>war</packaging>
diff --git a/test/default-widget-set/pom.xml b/test/default-widget-set/pom.xml
index fce0d80584..164b108eb1 100644
--- a/test/default-widget-set/pom.xml
+++ b/test/default-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-default-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/dependency-rewrite-addon/pom.xml b/test/dependency-rewrite-addon/pom.xml
index 716eb0aeb9..083ba2bff3 100644
--- a/test/dependency-rewrite-addon/pom.xml
+++ b/test/dependency-rewrite-addon/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-dependency-rewrite-addon</artifactId>
<packaging>jar</packaging>
diff --git a/test/dependency-rewrite/pom.xml b/test/dependency-rewrite/pom.xml
index 48f444c08e..72b1a97c15 100644
--- a/test/dependency-rewrite/pom.xml
+++ b/test/dependency-rewrite/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-dependency-rewrite</artifactId>
<packaging>war</packaging>
diff --git a/test/own-widget-set/pom.xml b/test/own-widget-set/pom.xml
index f73b97cc4e..e3f89cbc8e 100644
--- a/test/own-widget-set/pom.xml
+++ b/test/own-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-own-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/pom.xml b/test/pom.xml
index 6939a30042..4b906413d3 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -5,7 +5,7 @@
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
<name>vaadin-test</name>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
diff --git a/test/servlet-containers/generic-tests/pom.xml b/test/servlet-containers/generic-tests/pom.xml
index 6fb9aed476..012d3a9f8c 100644
--- a/test/servlet-containers/generic-tests/pom.xml
+++ b/test/servlet-containers/generic-tests/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-server-tests</artifactId>
<name>vaadin-test-server-tests</name>
diff --git a/test/servlet-containers/generic-ui/pom.xml b/test/servlet-containers/generic-ui/pom.xml
index 3d42e4df28..6a742616bc 100644
--- a/test/servlet-containers/generic-ui/pom.xml
+++ b/test/servlet-containers/generic-ui/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-server-ui</artifactId>
<name>vaadin-test-server-ui</name>
diff --git a/test/servlet-containers/generic/pom.xml b/test/servlet-containers/generic/pom.xml
index b132725ec5..8f9725faf8 100644
--- a/test/servlet-containers/generic/pom.xml
+++ b/test/servlet-containers/generic/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-generic-integration</artifactId>
<name>vaadin-test-generic-integration</name>
diff --git a/test/servlet-containers/glassfish/pom.xml b/test/servlet-containers/glassfish/pom.xml
index 0917acb1c3..de2996e8a7 100644
--- a/test/servlet-containers/glassfish/pom.xml
+++ b/test/servlet-containers/glassfish/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-glassfish-server</artifactId>
<name>Vaadin Glassfish Test</name>
diff --git a/test/servlet-containers/jetty8/pom.xml b/test/servlet-containers/jetty8/pom.xml
index b9134a62b7..566daf14f7 100644
--- a/test/servlet-containers/jetty8/pom.xml
+++ b/test/servlet-containers/jetty8/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-jetty8-server</artifactId>
<name>Vaadin Jetty 8 Test</name>
diff --git a/test/servlet-containers/jetty9/pom.xml b/test/servlet-containers/jetty9/pom.xml
index c319c55567..35d433148d 100644
--- a/test/servlet-containers/jetty9/pom.xml
+++ b/test/servlet-containers/jetty9/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-jetty9-server</artifactId>
<name>Vaadin Jetty 9 Test</name>
diff --git a/test/servlet-containers/jsp-integration/pom.xml b/test/servlet-containers/jsp-integration/pom.xml
index 8f8758e02e..00c212984f 100644
--- a/test/servlet-containers/jsp-integration/pom.xml
+++ b/test/servlet-containers/jsp-integration/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-jsp-integration</artifactId>
<name>vaadin-test-jsp-integration</name>
diff --git a/test/servlet-containers/karaf/karaf-run/pom.xml b/test/servlet-containers/karaf/karaf-run/pom.xml
index c27a2db417..b3a07b3ca3 100644
--- a/test/servlet-containers/karaf/karaf-run/pom.xml
+++ b/test/servlet-containers/karaf/karaf-run/pom.xml
@@ -5,7 +5,7 @@
<parent>
<artifactId>vaadin-test-karaf</artifactId>
<groupId>com.vaadin</groupId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/test/servlet-containers/karaf/pom.xml b/test/servlet-containers/karaf/pom.xml
index 9f15fc9c4d..401fb0c21c 100644
--- a/test/servlet-containers/karaf/pom.xml
+++ b/test/servlet-containers/karaf/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-karaf</artifactId>
<packaging>pom</packaging>
diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml b/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml
index 5a6df6da4d..f96db5a894 100644
--- a/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml
+++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test-karaf</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-karaf-bundle1</artifactId>
<packaging>jar</packaging>
diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml b/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml
index 5e23493b97..9f07e7930a 100644
--- a/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml
+++ b/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml
@@ -6,7 +6,7 @@
<parent>
<artifactId>vaadin-test-karaf</artifactId>
<groupId>com.vaadin</groupId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-karaf-bundle2</artifactId>
<packaging>jar</packaging>
diff --git a/test/servlet-containers/liberty-javaee/pom.xml b/test/servlet-containers/liberty-javaee/pom.xml
index cdf3094af7..532803c9ca 100644
--- a/test/servlet-containers/liberty-javaee/pom.xml
+++ b/test/servlet-containers/liberty-javaee/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-liberty-javaee-server</artifactId>
<name>Vaadin Liberty JavaEE7 Test</name>
diff --git a/test/servlet-containers/liberty-microprofile/pom.xml b/test/servlet-containers/liberty-microprofile/pom.xml
index 5616c30b88..530a19f8ad 100644
--- a/test/servlet-containers/liberty-microprofile/pom.xml
+++ b/test/servlet-containers/liberty-microprofile/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-liberty-microprofile-server</artifactId>
<name>Vaadin Liberty MicroProfile Test</name>
diff --git a/test/servlet-containers/liberty-webprofile/pom.xml b/test/servlet-containers/liberty-webprofile/pom.xml
index 82075ed2f0..4281b2a980 100644
--- a/test/servlet-containers/liberty-webprofile/pom.xml
+++ b/test/servlet-containers/liberty-webprofile/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-liberty-webprofile-server</artifactId>
<name>Vaadin Liberty WebProfile Test</name>
diff --git a/test/servlet-containers/payara-micro/pom.xml b/test/servlet-containers/payara-micro/pom.xml
index 236f4347ef..358d6ea8c8 100644
--- a/test/servlet-containers/payara-micro/pom.xml
+++ b/test/servlet-containers/payara-micro/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-payara-micro-server</artifactId>
<name>Vaadin Payara Micro Test</name>
diff --git a/test/servlet-containers/pom.xml b/test/servlet-containers/pom.xml
index 4ce32b7c03..dad6f2ef81 100644
--- a/test/servlet-containers/pom.xml
+++ b/test/servlet-containers/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-servlet-containers-test</artifactId>
<name>vaadin-servlet-containers-test</name>
diff --git a/test/servlet-containers/tomcat7/pom.xml b/test/servlet-containers/tomcat7/pom.xml
index 1632b859cc..fd0ecd39dc 100644
--- a/test/servlet-containers/tomcat7/pom.xml
+++ b/test/servlet-containers/tomcat7/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-tomcat7-server</artifactId>
<name>Vaadin Tomcat 7 Test</name>
diff --git a/test/servlet-containers/tomcat80/pom.xml b/test/servlet-containers/tomcat80/pom.xml
index 239ee66ebd..808888cc5c 100644
--- a/test/servlet-containers/tomcat80/pom.xml
+++ b/test/servlet-containers/tomcat80/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-tomcat80-server</artifactId>
<name>Vaadin Tomcat 8.0 Test</name>
diff --git a/test/servlet-containers/tomcat85/pom.xml b/test/servlet-containers/tomcat85/pom.xml
index 3e711e980b..3ffbdfb305 100644
--- a/test/servlet-containers/tomcat85/pom.xml
+++ b/test/servlet-containers/tomcat85/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-tomcat85-server</artifactId>
<name>Vaadin Tomcat 8.5 Test</name>
diff --git a/test/servlet-containers/tomcat9/pom.xml b/test/servlet-containers/tomcat9/pom.xml
index 058fd9c41f..be6f637b71 100644
--- a/test/servlet-containers/tomcat9/pom.xml
+++ b/test/servlet-containers/tomcat9/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-tomcat9-server</artifactId>
<name>Vaadin Tomcat 9 Test</name>
diff --git a/test/servlet-containers/wildfly-swarm/pom.xml b/test/servlet-containers/wildfly-swarm/pom.xml
index b51ce3672d..aa7fdfb453 100644
--- a/test/servlet-containers/wildfly-swarm/pom.xml
+++ b/test/servlet-containers/wildfly-swarm/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly-swarm-server</artifactId>
<name>Vaadin Wildfly Swarm Test</name>
diff --git a/test/servlet-containers/wildfly10/pom.xml b/test/servlet-containers/wildfly10/pom.xml
index 0ce2b73308..9c6d20f35a 100644
--- a/test/servlet-containers/wildfly10/pom.xml
+++ b/test/servlet-containers/wildfly10/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly10-server</artifactId>
<name>Vaadin Wildfly 10 Test</name>
diff --git a/test/servlet-containers/wildfly11/pom.xml b/test/servlet-containers/wildfly11/pom.xml
index aa15505133..4cbec1ef97 100644
--- a/test/servlet-containers/wildfly11/pom.xml
+++ b/test/servlet-containers/wildfly11/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly11-server</artifactId>
<name>Vaadin Wildfly 11 Test</name>
diff --git a/test/servlet-containers/wildfly12/pom.xml b/test/servlet-containers/wildfly12/pom.xml
index 55f3619487..6b3b0bec5c 100644
--- a/test/servlet-containers/wildfly12/pom.xml
+++ b/test/servlet-containers/wildfly12/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly12-server</artifactId>
<name>Vaadin Wildfly 12 Test</name>
diff --git a/test/servlet-containers/wildfly13/pom.xml b/test/servlet-containers/wildfly13/pom.xml
index 8dfa083222..f09ae12cde 100644
--- a/test/servlet-containers/wildfly13/pom.xml
+++ b/test/servlet-containers/wildfly13/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly13-server</artifactId>
<name>Vaadin Wildfly 13 Test</name>
diff --git a/test/servlet-containers/wildfly8/pom.xml b/test/servlet-containers/wildfly8/pom.xml
index 1c704d9b76..f5f22403ee 100644
--- a/test/servlet-containers/wildfly8/pom.xml
+++ b/test/servlet-containers/wildfly8/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly8-server</artifactId>
<name>Vaadin Wildfly 8 Test</name>
diff --git a/test/servlet-containers/wildfly9/pom.xml b/test/servlet-containers/wildfly9/pom.xml
index a7e854ade1..f4b7d336ce 100644
--- a/test/servlet-containers/wildfly9/pom.xml
+++ b/test/servlet-containers/wildfly9/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-servlet-containers-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-wildfly9-server</artifactId>
<name>Vaadin Wildfly 9 Test</name>
diff --git a/test/space in directory/pom.xml b/test/space in directory/pom.xml
index 00df4c2f35..0455da714f 100644
--- a/test/space in directory/pom.xml
+++ b/test/space in directory/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-space-in-directory</artifactId>
<packaging>war</packaging>
diff --git a/test/spring-boot-subcontext/pom.xml b/test/spring-boot-subcontext/pom.xml
index ea24f2f27f..5ed83b1f56 100644
--- a/test/spring-boot-subcontext/pom.xml
+++ b/test/spring-boot-subcontext/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-spring-boot-subcontext</artifactId>
<packaging>jar</packaging>
diff --git a/test/spring-boot/pom.xml b/test/spring-boot/pom.xml
index b9939da2f3..f172378662 100644
--- a/test/spring-boot/pom.xml
+++ b/test/spring-boot/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-spring-boot</artifactId>
<packaging>jar</packaging>
diff --git a/test/vaadin7-widget-set/pom.xml b/test/vaadin7-widget-set/pom.xml
index 70bdad894d..7b5f7b17ae 100644
--- a/test/vaadin7-widget-set/pom.xml
+++ b/test/vaadin7-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-vaadin7-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/vaadinservletconfiguration-widget-set/pom.xml b/test/vaadinservletconfiguration-widget-set/pom.xml
index a5b388264c..40a1079e2c 100644
--- a/test/vaadinservletconfiguration-widget-set/pom.xml
+++ b/test/vaadinservletconfiguration-widget-set/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-test-vaadinservletconfiguration-widget-set</artifactId>
<packaging>war</packaging>
diff --git a/test/widget-set-testutil/pom.xml b/test/widget-set-testutil/pom.xml
index 1325364f15..0a27f4a4b5 100644
--- a/test/widget-set-testutil/pom.xml
+++ b/test/widget-set-testutil/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-test-widget-set-testutil</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
<packaging>jar</packaging>
<!--
This module does not inherit the vaadin-test on purpose. It is done
diff --git a/testbench-api/pom.xml b/testbench-api/pom.xml
index 47341fec2c..7be670a8aa 100644
--- a/testbench-api/pom.xml
+++ b/testbench-api/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-testbench-api</artifactId>
<name>vaadin-testbench-api</name>
diff --git a/themes/pom.xml b/themes/pom.xml
index d1d1df02f7..4393ae88a7 100644
--- a/themes/pom.xml
+++ b/themes/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-themes</artifactId>
<name>vaadin-themes</name>
diff --git a/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss b/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
index 4a88c925ff..8443438fe2 100644
--- a/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
+++ b/themes/src/main/themes/VAADIN/themes/valo/components/_table.scss
@@ -268,6 +268,7 @@ $v-table-background-color: null !default;
.#{$primary-stylename}-body {
border: $v-table-border-width solid $border-color;
+ overflow-anchor: none; /* In Chrome 56+ */
@include user-select(text);
}
diff --git a/uitest/pom.xml b/uitest/pom.xml
index 9fb2799d99..c777a3e577 100644
--- a/uitest/pom.xml
+++ b/uitest/pom.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-root</artifactId>
- <version>8.10-SNAPSHOT</version>
+ <version>8.12-SNAPSHOT</version>
</parent>
<artifactId>vaadin-uitest</artifactId>
<name>vaadin-uitest</name>
diff --git a/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png b/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
index 05b7c48ff3..9071cf2cee 100755
--- a/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
+++ b/uitest/reference-screenshots/chrome/AccordionClipsContentTest-testAccordionClipsContent_ANY_Chrome__button-clicked.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
index 7c1db88863..c712034964 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__buttons.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
index 0057b8d371..edc504c48b 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__labels.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
index 58dfe49490..70fced7498 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-error.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
index db15839709..b4c5bfc067 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-tray.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
index 86e761b4bb..75b3a539b2 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__notification-warning.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index 9698b516f2..d6200f5b2c 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index 03060ea2e1..4d37594740 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 39d648b127..3ddb5309e5 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index 93e14d700b..2e89c0cf4a 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index 41333a42e9..4c835505c4 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
index 0db6a37972..aefe41b047 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
index 1f9a3b273a..f227275a46 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__uploads.png b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__uploads.png
index 54d7cec19e..2a2f46ea9a 100755
--- a/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__uploads.png
+++ b/uitest/reference-screenshots/chrome/BaseThemeTest-testTheme_ANY_Chrome__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index 3bc55a147d..7356b901dd 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index c98e6eca78..b2c29c44b6 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 0513a008d3..4fcda7bff1 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index bb346392f4..c91c7410c2 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index ff20628931..57c81e0c24 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
index a2795ecab6..83c62202e9 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
index 9b0589bdff..8d4c299379 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__uploads.png b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__uploads.png
index 9211a37d67..0c2673c465 100755
--- a/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__uploads.png
+++ b/uitest/reference-screenshots/chrome/ChameleonThemeTest-testTheme_ANY_Chrome__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png b/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
index 81c821bffd..a36be531d5 100644
--- a/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
+++ b/uitest/reference-screenshots/chrome/CheckboxAlignmentWithNoHeaderGridTest-alignments_are_correct_ANY_Chrome__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png b/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
index 8bddc121fc..2f70a50572 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxBorderTest-testComboBoxArrow_ANY_Chrome__arrow.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
index fc968d10c2..6b3ab39a66 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page1.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
index 4e07d0707b..ab1416563a 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-page2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
index bcf031d19f..1e01d508fa 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-16x16-selected-1-3-5-9.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
index d17d4910f2..2d8d4e9aac 100755
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-32x32-page2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
index 5f586d9d7b..5f4e15bc2e 100644
--- a/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
+++ b/uitest/reference-screenshots/chrome/ComboBoxLargeIconsTest-testComboBoxIcons_ANY_Chrome__icons-64x64-page1-highlight-first.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png b/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png
deleted file mode 100755
index 720aabdb77..0000000000
--- a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png b/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png
deleted file mode 100755
index 697a8b604d..0000000000
--- a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png b/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png
deleted file mode 100755
index d015d1559d..0000000000
--- a/uitest/reference-screenshots/chrome/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png b/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png
deleted file mode 100755
index 9b173021f9..0000000000
--- a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png b/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png
deleted file mode 100755
index d815c3ba2c..0000000000
--- a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png b/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png
deleted file mode 100755
index 2b3c5e7474..0000000000
--- a/uitest/reference-screenshots/chrome/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Chrome__readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png b/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
index acb9600269..6b961a0cc4 100644
--- a/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
+++ b/uitest/reference-screenshots/chrome/FontIconsTest-checkScreenshot_ANY_Chrome__allVaadinIcons.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
index 081e0f8183..72ebb93d57 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-a.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
index 40cce20756..34f85f9fa6 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-b.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
index ba19d6e47e..e2a35ad1fe 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col2-col3-c.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
index 50fa639031..15fa969884 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__footer-col1-col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
index 40cce20756..97791471f7 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
index cba14e19de..199b2eb7e0 100755
--- a/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
+++ b/uitest/reference-screenshots/chrome/FooterTest-testFooter_ANY_Chrome__no-footer.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
index 407ba3d50b..99e287e451 100755
--- a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
+++ b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
index 8d38871ead..051910e15b 100755
--- a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
index d835181843..049103f260 100755
--- a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
+++ b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
index 302d103eeb..b7e887f800 100755
--- a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
+++ b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
index 8e13410ab5..31727ab5fb 100755
--- a/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
+++ b/uitest/reference-screenshots/chrome/GridAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png b/uitest/reference-screenshots/chrome/GridAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
index a2f2119ea7..f76b5bd6bb 100755
--- a/uitest/reference-screenshots/chrome/GridAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
+++ b/uitest/reference-screenshots/chrome/GridAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridCaptionTest-LayoutCaption_ANY_Chrome__caption.png b/uitest/reference-screenshots/chrome/GridCaptionTest-LayoutCaption_ANY_Chrome__caption.png
index fd08d0012e..c4ccdfa550 100755
--- a/uitest/reference-screenshots/chrome/GridCaptionTest-LayoutCaption_ANY_Chrome__caption.png
+++ b/uitest/reference-screenshots/chrome/GridCaptionTest-LayoutCaption_ANY_Chrome__caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
index 8ba5a7f2df..065588dc76 100755
--- a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
index a9d157051d..4287701321 100755
--- a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
index 2f216175e1..c8c6f50b96 100755
--- a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
+++ b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
index 6085226f88..8aeb0dbdd1 100755
--- a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
index 39bbb1786c..5fb40dfbc7 100755
--- a/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/GridComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png b/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
index 14916407c2..d88da45c36 100755
--- a/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
+++ b/uitest/reference-screenshots/chrome/GridEditorFrozenColumnsUITest-testEditorWithFrozenColumns_ANY_Chrome__noscroll.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridIconTest-LayoutIcon_ANY_Chrome__icon.png b/uitest/reference-screenshots/chrome/GridIconTest-LayoutIcon_ANY_Chrome__icon.png
index 8af174043b..a8850c77b5 100755
--- a/uitest/reference-screenshots/chrome/GridIconTest-LayoutIcon_ANY_Chrome__icon.png
+++ b/uitest/reference-screenshots/chrome/GridIconTest-LayoutIcon_ANY_Chrome__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
index 8e5465d187..1342c2c57a 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
index 60d0d4dd87..cfa391874b 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
index 13e887d245..1ef52060e7 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
index 0df91512cf..886534c214 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
index d78eed4814..55e0994837 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
new file mode 100644
index 0000000000..57d3ce747c
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
index bb7cf900c2..e27e41ae53 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
new file mode 100644
index 0000000000..6153d28baf
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png b/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
deleted file mode 100755
index 4f8b0375fa..0000000000
--- a/uitest/reference-screenshots/chrome/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
new file mode 100644
index 0000000000..fe5f261b93
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
index 119c303fe6..8fddf7b3a6 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
index 8ba5a7f2df..e5f6fef8f7 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
index a9d157051d..d9f4873bc6 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
deleted file mode 100755
index 4962ab5875..0000000000
--- a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize600px.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize600px.png
new file mode 100644
index 0000000000..1fadc3b973
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize600px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
index 244582e7a6..0d49fe084b 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
index 908f6492da..d545cb2c3d 100755
--- a/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/GridLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
index 81aaa8e9a0..6618ca39bd 100755
--- a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
+++ b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__add.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
index 5cbda6704c..b2d42c7c8f 100755
--- a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
index fc5f94ea20..6639e74b50 100755
--- a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
+++ b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__move.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
index b212a6c48a..ff1e4e4c8f 100755
--- a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
+++ b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
index 7b16f05e58..fd6e0c8178 100755
--- a/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
+++ b/uitest/reference-screenshots/chrome/HAddReplaceMoveTest-LayoutAlignment_ANY_Chrome__replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png b/uitest/reference-screenshots/chrome/HAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
index 708a3177ce..b0bf3054bb 100755
--- a/uitest/reference-screenshots/chrome/HAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
+++ b/uitest/reference-screenshots/chrome/HAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HCaptionTest-LayoutCaption_ANY_Chrome__caption.png b/uitest/reference-screenshots/chrome/HCaptionTest-LayoutCaption_ANY_Chrome__caption.png
index 9ab090be1d..b02afc6563 100755
--- a/uitest/reference-screenshots/chrome/HCaptionTest-LayoutCaption_ANY_Chrome__caption.png
+++ b/uitest/reference-screenshots/chrome/HCaptionTest-LayoutCaption_ANY_Chrome__caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
index e7add3a433..9d99e0b2e3 100755
--- a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
index dff4d574b5..365878113b 100755
--- a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
index 88f7d1b7d9..407d4b5b7a 100755
--- a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
+++ b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
index d6b9c51219..a0bd9cc868 100755
--- a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
index e6dacf6664..9f266e3edb 100755
--- a/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/HComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon-scrolled.png b/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon-scrolled.png
new file mode 100644
index 0000000000..4f01ef13bf
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon-scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon.png b/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon.png
index 3a7164a218..f805fec919 100755
--- a/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon.png
+++ b/uitest/reference-screenshots/chrome/HIconTest-LayoutIcon_ANY_Chrome__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
index 824d4a7806..3fed295bfe 100755
--- a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
+++ b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
index d8b837566e..f801bf05d2 100755
--- a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
+++ b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
index f962af2b38..d6c1c2df55 100755
--- a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
+++ b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
index 1f295b033d..55d98e1dbf 100755
--- a/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/HLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
index cb18db7db6..13061814a2 100755
--- a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
new file mode 100644
index 0000000000..1a4beb8580
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
index 5626e665bc..5cc8272623 100755
--- a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
new file mode 100644
index 0000000000..30bd92228d
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png b/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
deleted file mode 100755
index 4e71c21d49..0000000000
--- a/uitest/reference-screenshots/chrome/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png
new file mode 100644
index 0000000000..c84a5ce01f
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-End.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png
new file mode 100644
index 0000000000..0a03df9b48
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled-Middle.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
index aefae890da..73e61502f4 100755
--- a/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
+++ b/uitest/reference-screenshots/chrome/HLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
index e7add3a433..9d99e0b2e3 100755
--- a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
index dff4d574b5..562eb6e269 100755
--- a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
index 88f7d1b7d9..efe19ea55f 100755
--- a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
+++ b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
index d6b9c51219..e02e28f309 100755
--- a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
index e6dacf6664..2f34a2b88b 100755
--- a/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/HLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
index 87dc378e38..ca542ef976 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-died-at-age.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
index de74d61399..84ac4d7688 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-asc-name.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
index ee77ba1e43..9354254c53 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-died-at-age.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
index 93996dad24..98d174ee5e 100644
--- a/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
+++ b/uitest/reference-screenshots/chrome/HeaderPositionWhenSortingTest-testFooter_ANY_Chrome__sort-desc-name.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
index ac6464c14a..8cbe62218f 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar-second.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
index a789f116da..ddca369580 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__100pct-no-scrollbar.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
index 32cc4cd547..e63c64354c 100755
--- a/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
+++ b/uitest/reference-screenshots/chrome/HeaderSyncOnScrollTest-testFooter_ANY_Chrome__300px-scrolled-right.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
index 4bbb4c8f1b..3b98c20569 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerHidden.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
index e306f14390..ce817daf84 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
index aa62249dc4..9b1ebcebab 100755
--- a/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
+++ b/uitest/reference-screenshots/chrome/HeaderUpdateWhenNoRowsTest-testFooter_ANY_Chrome__headerVisible2.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png b/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
index bf3336b972..c887510210 100755
--- a/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
+++ b/uitest/reference-screenshots/chrome/LabelModesTest-testLabelModes_ANY_Chrome__labelmodes.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png b/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
index 29a140e7c5..7ae4701802 100644
--- a/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
+++ b/uitest/reference-screenshots/chrome/LabelTooltipTest-testLabelToolTipChameleonTheme_ANY_Chrome__tooltipVisible.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
index d2d4f622dd..46daca039a 100755
--- a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__uploads.png b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__uploads.png
index 69eba7b362..ba25aaad46 100755
--- a/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__uploads.png
+++ b/uitest/reference-screenshots/chrome/ReindeerThemeTest-testTheme_ANY_Chrome__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
index c688e3107c..127ff1e9a0 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fifth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
index 47e5c8a29f..aa1833a1bd 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-first-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
index 2f0d47f9f5..10ecc55ac7 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-fourth-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
index 3a0c9feceb..55e07942b2 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-second-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
index 8c43b9e0ec..96b95eb97f 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects-third-open.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
index a7f91f5e7a..7778da28df 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
index 80740cb9cb..9649081efd 100755
--- a/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
+++ b/uitest/reference-screenshots/chrome/RunoThemeTest-testTheme_ANY_Chrome__textfields.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/TableTooManyColumnsTest-testDropdownTable_ANY_Chrome__init.png b/uitest/reference-screenshots/chrome/TableTooManyColumnsTest-testDropdownTable_ANY_Chrome__init.png
index 41b5011265..646555a3c0 100755
--- a/uitest/reference-screenshots/chrome/TableTooManyColumnsTest-testDropdownTable_ANY_Chrome__init.png
+++ b/uitest/reference-screenshots/chrome/TableTooManyColumnsTest-testDropdownTable_ANY_Chrome__init.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png b/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
index 4413b4cad5..7ff210fe23 100755
--- a/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
+++ b/uitest/reference-screenshots/chrome/UndefinedSizeScrollbarsTest-testNoScrollbars_ANY_Chrome__noscrollbars.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment-scrolled.png b/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment-scrolled.png
new file mode 100644
index 0000000000..841d2e1ead
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment-scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png b/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
index 609d847c61..f4793e0f70 100755
--- a/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
+++ b/uitest/reference-screenshots/chrome/VAlignmentTest-layoutAlignment_ANY_Chrome__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
index ec1539923d..8ab31b71aa 100755
--- a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__scrolled.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__scrolled.png
new file mode 100644
index 0000000000..8ab31b71aa
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
index 9c4c671cd4..8483cc4282 100755
--- a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
index 148ee8a48d..9ad4c64cd7 100755
--- a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
index be6e9e9cd8..fa317dc8f4 100755
--- a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
index 8adb1bc17e..85dfedf6f9 100755
--- a/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/VComponentSizingTest-ComponentSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VIconTest-LayoutIcon_ANY_Chrome__icon.png b/uitest/reference-screenshots/chrome/VIconTest-LayoutIcon_ANY_Chrome__icon.png
index ce677cbdf1..a41c2e9b59 100755
--- a/uitest/reference-screenshots/chrome/VIconTest-LayoutIcon_ANY_Chrome__icon.png
+++ b/uitest/reference-screenshots/chrome/VIconTest-LayoutIcon_ANY_Chrome__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
index 4270e4405f..1a7a61ebe9 100755
--- a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
+++ b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
index a052734828..1ba9c22b97 100755
--- a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
+++ b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
index b57263b3e2..894c926f2a 100755
--- a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
+++ b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
index fdfb51a1c8..e153773bb3 100755
--- a/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/VLayoutExpandTest-LayoutExpand_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
index 391202dc57..a990cf08e4 100755
--- a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
new file mode 100644
index 0000000000..df7882e33f
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
index 91c1a7dfe3..ba76ccd675 100755
--- a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
new file mode 100644
index 0000000000..9e785ecb98
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png b/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
deleted file mode 100755
index d84c300f00..0000000000
--- a/uitest/reference-screenshots/chrome/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Chrome__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
new file mode 100644
index 0000000000..ca57d1ed1e
--- /dev/null
+++ b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
index 35609948b8..1cc148974f 100755
--- a/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
+++ b/uitest/reference-screenshots/chrome/VLayoutRegErrorTest-LayoutRegError_ANY_Chrome__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
index ec1539923d..02e9ad22c8 100755
--- a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
+++ b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
index 9c4c671cd4..14fc721316 100755
--- a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
+++ b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
index 148ee8a48d..4c512558d7 100755
--- a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
+++ b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
index be6e9e9cd8..8b7f4d2237 100755
--- a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
+++ b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
index 8adb1bc17e..81739b964f 100755
--- a/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
+++ b/uitest/reference-screenshots/chrome/VLayoutSizingTest-LayoutSizing_ANY_Chrome__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png b/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
index 32158cd04a..e583cdb314 100755
--- a/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
+++ b/uitest/reference-screenshots/chrome/ValoThemeUITest-selects_ANY_Chrome__selects.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/BaseThemeTest-testTheme_ANY_Firefox__uploads.png b/uitest/reference-screenshots/firefox/BaseThemeTest-testTheme_ANY_Firefox__uploads.png
index 8a4094d794..899eb8d3b6 100644
--- a/uitest/reference-screenshots/firefox/BaseThemeTest-testTheme_ANY_Firefox__uploads.png
+++ b/uitest/reference-screenshots/firefox/BaseThemeTest-testTheme_ANY_Firefox__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/ChameleonThemeTest-testTheme_ANY_Firefox__uploads.png b/uitest/reference-screenshots/firefox/ChameleonThemeTest-testTheme_ANY_Firefox__uploads.png
index 59a374ef52..cd5b73151f 100644
--- a/uitest/reference-screenshots/firefox/ChameleonThemeTest-testTheme_ANY_Firefox__uploads.png
+++ b/uitest/reference-screenshots/firefox/ChameleonThemeTest-testTheme_ANY_Firefox__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png b/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png
deleted file mode 100644
index d53b04085d..0000000000
--- a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png b/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png
deleted file mode 100644
index 3ac6d63d90..0000000000
--- a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png b/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png
deleted file mode 100644
index 263e5e8432..0000000000
--- a/uitest/reference-screenshots/firefox/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png b/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png
deleted file mode 100644
index 575cebb5ab..0000000000
--- a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png b/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png
deleted file mode 100644
index 78e41f0c94..0000000000
--- a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png b/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png
deleted file mode 100644
index 8c43c5b11a..0000000000
--- a/uitest/reference-screenshots/firefox/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_ANY_Firefox__readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/FontIconsTest-checkScreenshot_ANY_Firefox__allVaadinIcons.png b/uitest/reference-screenshots/firefox/FontIconsTest-checkScreenshot_ANY_Firefox__allVaadinIcons.png
index d01000881c..0e8f13b3af 100644
--- a/uitest/reference-screenshots/firefox/FontIconsTest-checkScreenshot_ANY_Firefox__allVaadinIcons.png
+++ b/uitest/reference-screenshots/firefox/FontIconsTest-checkScreenshot_ANY_Firefox__allVaadinIcons.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
index d4bae4a85f..6f0c087f7f 100644
--- a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
+++ b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
index 1864c3ccc3..81aca84cfd 100644
--- a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
index ad6d220eb7..2808e8f71f 100644
--- a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
+++ b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
index 9fdab3282c..9c08f2d56b 100644
--- a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
+++ b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
index db79ce4214..91a70664ee 100644
--- a/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
+++ b/uitest/reference-screenshots/firefox/GridAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png b/uitest/reference-screenshots/firefox/GridAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
index b66be515a1..58c4eb5bb9 100644
--- a/uitest/reference-screenshots/firefox/GridAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
+++ b/uitest/reference-screenshots/firefox/GridAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridCaptionTest-LayoutCaption_ANY_Firefox__caption.png b/uitest/reference-screenshots/firefox/GridCaptionTest-LayoutCaption_ANY_Firefox__caption.png
index c553137a02..84958df57d 100644
--- a/uitest/reference-screenshots/firefox/GridCaptionTest-LayoutCaption_ANY_Firefox__caption.png
+++ b/uitest/reference-screenshots/firefox/GridCaptionTest-LayoutCaption_ANY_Firefox__caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
index 20db654ddb..a2823e26dc 100644
--- a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
index e5ccc36b54..081fd2d585 100644
--- a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
index c7de680ef7..edff533777 100644
--- a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
+++ b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
index 5b4376e7a3..d88804d415 100644
--- a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
index 4cdd9a3500..8978f758b3 100644
--- a/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/GridComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridIconTest-LayoutIcon_ANY_Firefox__icon.png b/uitest/reference-screenshots/firefox/GridIconTest-LayoutIcon_ANY_Firefox__icon.png
index b65504fdfd..f716ac43d3 100644
--- a/uitest/reference-screenshots/firefox/GridIconTest-LayoutIcon_ANY_Firefox__icon.png
+++ b/uitest/reference-screenshots/firefox/GridIconTest-LayoutIcon_ANY_Firefox__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
index 83ca16c25a..5d832e4a0e 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
index 62ff9aae1e..4b595ac9da 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
index 1305b09d5f..6f9d8739dc 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
index c280572f33..3419d92b07 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
index 4f0cbe0af0..2428571e57 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
new file mode 100644
index 0000000000..a61490d5b4
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
index 3c174b78f4..d3145552a5 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
new file mode 100644
index 0000000000..cf1e1aec51
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png b/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
deleted file mode 100644
index 8cdc0f99b7..0000000000
--- a/uitest/reference-screenshots/firefox/GridLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png b/uitest/reference-screenshots/firefox/GridLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
index 3a0dfbb641..ad39c04431 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
index 20db654ddb..bead8486e7 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
index e5ccc36b54..7b10614b62 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
deleted file mode 100644
index 0df74e69e1..0000000000
--- a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize600px.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize600px.png
new file mode 100644
index 0000000000..9feb19fd36
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize600px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
index ba7cab6adf..085b1acf08 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
index d6bf07d6a1..09475e59c1 100644
--- a/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/GridLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
index f13581da9f..a30c448e48 100644
--- a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
+++ b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
index f45a486e2a..74caeaea62 100644
--- a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
index 8e7e3ab3e8..79c610159b 100644
--- a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
+++ b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
index df7fc0516c..e2ff772ded 100644
--- a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
+++ b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
index eca320eea3..d6497c5d06 100644
--- a/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
+++ b/uitest/reference-screenshots/firefox/HAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png b/uitest/reference-screenshots/firefox/HAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
index 5c6f8e5f6f..fffa4ab599 100644
--- a/uitest/reference-screenshots/firefox/HAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
+++ b/uitest/reference-screenshots/firefox/HAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HCaptionTest-LayoutCaption_ANY_Firefox__caption.png b/uitest/reference-screenshots/firefox/HCaptionTest-LayoutCaption_ANY_Firefox__caption.png
index 16d94332f5..383ed02e85 100644
--- a/uitest/reference-screenshots/firefox/HCaptionTest-LayoutCaption_ANY_Firefox__caption.png
+++ b/uitest/reference-screenshots/firefox/HCaptionTest-LayoutCaption_ANY_Firefox__caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
index 59db0184d0..399b59fa40 100644
--- a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
index 0354fc742c..6bccc4460b 100644
--- a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
index b8b0f48d82..82180df374 100644
--- a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
+++ b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
index 756bd5979c..0eaa8eccaf 100644
--- a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
index 0cd994d0a5..ae6de14ca2 100644
--- a/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/HComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HIconTest-LayoutIcon_ANY_Firefox__icon.png b/uitest/reference-screenshots/firefox/HIconTest-LayoutIcon_ANY_Firefox__icon.png
index 240afcbc0b..4a77e80d03 100644
--- a/uitest/reference-screenshots/firefox/HIconTest-LayoutIcon_ANY_Firefox__icon.png
+++ b/uitest/reference-screenshots/firefox/HIconTest-LayoutIcon_ANY_Firefox__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
index 1fd117c373..4a3ba13b73 100644
--- a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
+++ b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
index 686f63981a..a28db54a19 100644
--- a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
+++ b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
index 79359a5604..2748044c8b 100644
--- a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
+++ b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
index e2ee1dc02d..ddf6b603d7 100644
--- a/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/HLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
index 4aaaece0c1..594f3b9134 100644
--- a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
new file mode 100644
index 0000000000..7b6b7fe9ec
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
index 99e7fa4aec..8e6e353632 100644
--- a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
new file mode 100644
index 0000000000..982234ef84
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png b/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
deleted file mode 100644
index 65b150fc11..0000000000
--- a/uitest/reference-screenshots/firefox/HLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png b/uitest/reference-screenshots/firefox/HLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
index cd479bdf4c..88c5b8ef35 100644
--- a/uitest/reference-screenshots/firefox/HLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
+++ b/uitest/reference-screenshots/firefox/HLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
index 59db0184d0..399b59fa40 100644
--- a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
index 0354fc742c..633523c721 100644
--- a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
index b8b0f48d82..ad877a4135 100644
--- a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
+++ b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
index 756bd5979c..501591a624 100644
--- a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
index 0cd994d0a5..c80e96e726 100644
--- a/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/HLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/ReindeerThemeTest-testTheme_ANY_Firefox__uploads.png b/uitest/reference-screenshots/firefox/ReindeerThemeTest-testTheme_ANY_Firefox__uploads.png
index ca11795bb5..012e66382c 100644
--- a/uitest/reference-screenshots/firefox/ReindeerThemeTest-testTheme_ANY_Firefox__uploads.png
+++ b/uitest/reference-screenshots/firefox/ReindeerThemeTest-testTheme_ANY_Firefox__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/RunoThemeTest-testTheme_ANY_Firefox__uploads.png b/uitest/reference-screenshots/firefox/RunoThemeTest-testTheme_ANY_Firefox__uploads.png
index 19761b8d53..a48559c4a5 100644
--- a/uitest/reference-screenshots/firefox/RunoThemeTest-testTheme_ANY_Firefox__uploads.png
+++ b/uitest/reference-screenshots/firefox/RunoThemeTest-testTheme_ANY_Firefox__uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
index fb9945bb6f..868cd5afd4 100644
--- a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
+++ b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__add.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
index b1cc7a86d3..2860d12744 100644
--- a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
index b12756592e..28c6cac11a 100644
--- a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
+++ b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__move.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
index cee019e9c4..c007b6af57 100644
--- a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
+++ b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
index 2fd0b5ec05..08b1147a21 100644
--- a/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
+++ b/uitest/reference-screenshots/firefox/VAddReplaceMoveTest-LayoutAlignment_ANY_Firefox__replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png b/uitest/reference-screenshots/firefox/VAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
index 422a79fafd..765369449e 100644
--- a/uitest/reference-screenshots/firefox/VAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
+++ b/uitest/reference-screenshots/firefox/VAlignmentTest-layoutAlignment_ANY_Firefox__alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VCaptionTest-LayoutCaption_ANY_Firefox__caption.png b/uitest/reference-screenshots/firefox/VCaptionTest-LayoutCaption_ANY_Firefox__caption.png
index acfad38d86..c6e6231182 100644
--- a/uitest/reference-screenshots/firefox/VCaptionTest-LayoutCaption_ANY_Firefox__caption.png
+++ b/uitest/reference-screenshots/firefox/VCaptionTest-LayoutCaption_ANY_Firefox__caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
index 3de9e0ef42..a8756cd2c2 100644
--- a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__scrolled.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__scrolled.png
new file mode 100644
index 0000000000..a8756cd2c2
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
index 49b0eb8dc9..e12d57e3a1 100644
--- a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
index 4798e47280..6a0f998633 100644
--- a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
index 2eeb9e30c4..d1beec5b5b 100644
--- a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
index 66e0d0d053..1725b67173 100644
--- a/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/VComponentSizingTest-ComponentSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VIconTest-LayoutIcon_ANY_Firefox__icon.png b/uitest/reference-screenshots/firefox/VIconTest-LayoutIcon_ANY_Firefox__icon.png
index db63cbcc54..7f550a4633 100644
--- a/uitest/reference-screenshots/firefox/VIconTest-LayoutIcon_ANY_Firefox__icon.png
+++ b/uitest/reference-screenshots/firefox/VIconTest-LayoutIcon_ANY_Firefox__icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
index 1b354bd5c0..9cea82a6e2 100644
--- a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
+++ b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
index 6943739286..6571e00d01 100644
--- a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
+++ b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
index 099d5e8cd9..ffc57fa170 100644
--- a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
+++ b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
index 3307eaedcc..204cb5e048 100644
--- a/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/VLayoutExpandTest-LayoutExpand_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
index dc7f8448b2..8e09dd64a1 100644
--- a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
new file mode 100644
index 0000000000..151ce2e1bb
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
index 9f0461ba2c..89949466ef 100644
--- a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
new file mode 100644
index 0000000000..b706b790d7
--- /dev/null
+++ b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png b/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
deleted file mode 100644
index ed6a00ec75..0000000000
--- a/uitest/reference-screenshots/firefox/VLayoutMarginSpacingTest-LayoutMarginSpacing_ANY_Firefox__marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png b/uitest/reference-screenshots/firefox/VLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
index 22a72eccd0..0cde042b5f 100644
--- a/uitest/reference-screenshots/firefox/VLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
+++ b/uitest/reference-screenshots/firefox/VLayoutRegErrorTest-LayoutRegError_ANY_Firefox__RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
index 3de9e0ef42..e3988906f3 100644
--- a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
+++ b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
index 49b0eb8dc9..091710efdc 100644
--- a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
+++ b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
index 4798e47280..e090f27dc8 100644
--- a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
+++ b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
index 2eeb9e30c4..b1877f9e4b 100644
--- a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
+++ b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
index 66e0d0d053..ee249f2c7c 100644
--- a/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
+++ b/uitest/reference-screenshots/firefox/VLayoutSizingTest-LayoutSizing_ANY_Firefox__setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/BaseThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png b/uitest/reference-screenshots/internetexplorer/BaseThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
index 1014b5d2a3..d09e3ab52a 100755
--- a/uitest/reference-screenshots/internetexplorer/BaseThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
+++ b/uitest/reference-screenshots/internetexplorer/BaseThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ChameleonThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png b/uitest/reference-screenshots/internetexplorer/ChameleonThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
index 918ffc0870..e2a2dcfce2 100755
--- a/uitest/reference-screenshots/internetexplorer/ChameleonThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
+++ b/uitest/reference-screenshots/internetexplorer/ChameleonThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col2-col3.png b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col2-col3.png
index 74d13207bb..d1b8332d83 100755
--- a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col2-col3.png
+++ b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col2-col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col3.png b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col3.png
index f0460c43f1..da9073a8d6 100755
--- a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col3.png
+++ b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col1-col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col2-col3.png b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col2-col3.png
index 855a48fcb4..d40f6be8a9 100755
--- a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col2-col3.png
+++ b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col2-col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col3.png b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col3.png
index 7a045ac24f..a19a6b604a 100755
--- a/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col3.png
+++ b/uitest/reference-screenshots/internetexplorer/ColumnCollapsingAndColumnExpansionTest-expandCorrectlyAfterCollapse_Windows_InternetExplorer_11_col3.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png b/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png
deleted file mode 100755
index 2914acda72..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png b/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png
deleted file mode 100755
index 5958e10b90..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png b/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png
deleted file mode 100755
index e4f5432709..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png b/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png
deleted file mode 100755
index 50b5d4a242..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png b/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png
deleted file mode 100755
index 0c5e3be974..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png b/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png
deleted file mode 100755
index 4d7c5191cf..0000000000
--- a/uitest/reference-screenshots/internetexplorer/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_Windows_InternetExplorer_11_readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/FontIconsTest-checkScreenshot_Windows_InternetExplorer_11_allVaadinIcons.png b/uitest/reference-screenshots/internetexplorer/FontIconsTest-checkScreenshot_Windows_InternetExplorer_11_allVaadinIcons.png
index 3054a21f39..a0c77d2970 100755
--- a/uitest/reference-screenshots/internetexplorer/FontIconsTest-checkScreenshot_Windows_InternetExplorer_11_allVaadinIcons.png
+++ b/uitest/reference-screenshots/internetexplorer/FontIconsTest-checkScreenshot_Windows_InternetExplorer_11_allVaadinIcons.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
index 5a2ca28a3c..f836d1951f 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
index 1df3524457..319227b980 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
index 9459e281c6..c136949292 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
index b3c818cf5a..269c5bd650 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
index 407e5c70c8..fc01a18d22 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png b/uitest/reference-screenshots/internetexplorer/GridAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
index aa1f55bfae..858759ba11 100755
--- a/uitest/reference-screenshots/internetexplorer/GridAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
+++ b/uitest/reference-screenshots/internetexplorer/GridAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png b/uitest/reference-screenshots/internetexplorer/GridCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
index 7749c04126..305fbdef96 100755
--- a/uitest/reference-screenshots/internetexplorer/GridCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
+++ b/uitest/reference-screenshots/internetexplorer/GridCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
index def346848b..359514cecd 100755
--- a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
index cd38f17904..6fb771fc89 100755
--- a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
index 49b0c6b267..bcf528b298 100755
--- a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
+++ b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
index bf848004f7..382f5d0986 100755
--- a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
index a6c0716517..d9b08d2cde 100755
--- a/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/GridComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png b/uitest/reference-screenshots/internetexplorer/GridIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
index 6299956545..ad0d8d52ff 100755
--- a/uitest/reference-screenshots/internetexplorer/GridIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
+++ b/uitest/reference-screenshots/internetexplorer/GridIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
index 2999519431..a6dee5e513 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
index c976201a46..2f5d210775 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
index b9fc1bbc88..24a2304875 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
index 454062ee1b..75260de3be 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
index 707d135c2c..408795435b 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
new file mode 100644
index 0000000000..a644afd6a6
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
index 176feaa066..20ec03389e 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
new file mode 100644
index 0000000000..4ceac79eb9
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png b/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
deleted file mode 100755
index 433a40205b..0000000000
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png b/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png
new file mode 100644
index 0000000000..0eb69542c7
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png b/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
index 9cddbd8221..dbad0f670e 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
index def346848b..7188bd9215 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
index cd38f17904..cd593480c1 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
deleted file mode 100755
index 826162a11d..0000000000
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize600px.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize600px.png
new file mode 100644
index 0000000000..16ceec6181
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize600px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
index 78bb6a995f..8569e00973 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
index 0b910f121d..3450f338e5 100755
--- a/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/GridLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
index bcb247e76e..da63530dbb 100755
--- a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
+++ b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_add.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
index 3a2e3230d3..0e8feec7c7 100755
--- a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
index 7eab363904..808bbc2a8d 100755
--- a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
+++ b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_move.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
index 8a1dda31fb..237218825a 100755
--- a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
+++ b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_remove.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
index 43d0d15446..8d5cc3b61e 100755
--- a/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
+++ b/uitest/reference-screenshots/internetexplorer/HAddReplaceMoveTest-LayoutAlignment_Windows_InternetExplorer_11_replace.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png b/uitest/reference-screenshots/internetexplorer/HAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
index 74c8f8e210..54c6aba8b9 100755
--- a/uitest/reference-screenshots/internetexplorer/HAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
+++ b/uitest/reference-screenshots/internetexplorer/HAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png b/uitest/reference-screenshots/internetexplorer/HCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
index 16d1cd1eee..7169da9515 100755
--- a/uitest/reference-screenshots/internetexplorer/HCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
+++ b/uitest/reference-screenshots/internetexplorer/HCaptionTest-LayoutCaption_Windows_InternetExplorer_11_caption.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
index 0f8fc057c8..e6e39fc6ef 100755
--- a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
index 17ef56ab9c..51b9a39dd5 100755
--- a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
index b7f1de8e31..db224f79e9 100755
--- a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
+++ b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
index 5b5e25b311..4d53469956 100755
--- a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
index b392dfd2e2..e1400747bd 100755
--- a/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/HComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon-scrolled.png b/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon-scrolled.png
new file mode 100644
index 0000000000..c3fd6e617b
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon-scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png b/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
index 654f2cbefd..dcb310b4c1 100755
--- a/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
+++ b/uitest/reference-screenshots/internetexplorer/HIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
index 5fdbccde7c..faa56e59f2 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
index beca735579..8796fb424d 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
index 26b84745cf..49c087ee69 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
index 25b4db1ae6..2d8bab614f 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
index cc6fba4c83..4d8b276ea2 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
new file mode 100644
index 0000000000..4cfa7dd4f4
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
index 8e34c3b207..395043a875 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
new file mode 100644
index 0000000000..4b0a6e1f1c
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png b/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
deleted file mode 100755
index b14f852e3f..0000000000
--- a/uitest/reference-screenshots/internetexplorer/HLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-End.png b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-End.png
new file mode 100644
index 0000000000..eb128ecc89
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-End.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-Middle.png b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-Middle.png
new file mode 100644
index 0000000000..4cb2aaee4e
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled-Middle.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
index f39a0f7518..bad2bd1202 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
index 0f8fc057c8..e6e39fc6ef 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
index 17ef56ab9c..58295abdf5 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
index b7f1de8e31..097162da38 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
index 5b5e25b311..69e24b41e7 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
index b392dfd2e2..f0e4d90053 100755
--- a/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/HLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ReindeerThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png b/uitest/reference-screenshots/internetexplorer/ReindeerThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
index 3b2751cad6..4438273a8e 100755
--- a/uitest/reference-screenshots/internetexplorer/ReindeerThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
+++ b/uitest/reference-screenshots/internetexplorer/ReindeerThemeTest-testTheme_Windows_InternetExplorer_11_uploads.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_large.png b/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_large.png
index 412f222d68..44999edb4f 100755
--- a/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_large.png
+++ b/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_large.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_small.png b/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_small.png
index 10b9f31b7a..abfc14bfd1 100755
--- a/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_small.png
+++ b/uitest/reference-screenshots/internetexplorer/ResponsiveLayoutUpdateTest-testWidthAndHeightRanges_Windows_InternetExplorer_11_small.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment-scrolled.png b/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment-scrolled.png
new file mode 100644
index 0000000000..6b27edf13f
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment-scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png b/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
index 6a54afd415..230a034219 100755
--- a/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
+++ b/uitest/reference-screenshots/internetexplorer/VAlignmentTest-layoutAlignment_Windows_InternetExplorer_11_alignment.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
index 652da6720c..ce360b60b4 100755
--- a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_scrolled.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_scrolled.png
new file mode 100644
index 0000000000..ce360b60b4
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
index c9443bcce6..36bd961c80 100755
--- a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
index 6cf294dd9d..3878ae0cec 100755
--- a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
index 3abb766e5b..a82e4a8d44 100755
--- a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
index 25fc1d445c..e7798c6084 100755
--- a/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/VComponentSizingTest-ComponentSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png b/uitest/reference-screenshots/internetexplorer/VIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
index 866e741a05..ecd8a526fd 100755
--- a/uitest/reference-screenshots/internetexplorer/VIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
+++ b/uitest/reference-screenshots/internetexplorer/VIconTest-LayoutIcon_Windows_InternetExplorer_11_icon.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
index 96398824d9..61de59446e 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_100_0.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
index 7780597ffd..e81e0f8968 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_25_75.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
index b7bfad12b0..00603e6718 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_expand_50_50.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
index a851e8dfb0..cdd82eb2d6 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutExpandTest-LayoutExpand_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
index 4ea6ea29d0..b65be38a73 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
new file mode 100644
index 0000000000..5f6b79f769
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOffSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
index a51a59177f..e174174469 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOff.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
new file mode 100644
index 0000000000..0a0802bdf7
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnSpaceOn.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png b/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
deleted file mode 100755
index 5306cd7837..0000000000
--- a/uitest/reference-screenshots/internetexplorer/VLayoutMarginSpacingTest-LayoutMarginSpacing_Windows_InternetExplorer_11_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png b/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png
new file mode 100644
index 0000000000..0cf5f2e431
--- /dev/null
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError-Scrolled.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png b/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
index b846d50f7e..1465e8d72b 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutRegErrorTest-LayoutRegError_Windows_InternetExplorer_11_RegError.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
index 652da6720c..14d266e9a0 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_initial.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
index c9443bcce6..4842ee89be 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize100Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
index 6cf294dd9d..4d795702d8 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize350px.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
index 3abb766e5b..b2a9560b54 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize75Percent.png
Binary files differ
diff --git a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
index 25fc1d445c..e5aef39473 100755
--- a/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
+++ b/uitest/reference-screenshots/internetexplorer/VLayoutSizingTest-LayoutSizing_Windows_InternetExplorer_11_setSize_-1px.png
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png b/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png
deleted file mode 100644
index 2df7757550..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png b/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png
deleted file mode 100644
index 2df7757550..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png b/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png
deleted file mode 100644
index 81dc1e3459..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png b/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png
deleted file mode 100644
index 29cc972d51..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_initial-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png b/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png
deleted file mode 100644
index 29cc972d51..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readonly-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png b/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png
deleted file mode 100644
index c51903b9e1..0000000000
--- a/uitest/reference-screenshots/phantomjs/DateTimeFieldReadOnlyTest-readOnlyDateFieldPopupShouldNotOpen_LINUX_PhantomJS_1_readwrite-popup-date.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/GridLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png b/uitest/reference-screenshots/phantomjs/GridLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
deleted file mode 100644
index 4e2c8e9677..0000000000
--- a/uitest/reference-screenshots/phantomjs/GridLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/GridLayoutSizingTest-LayoutSizing_LINUX_PhantomJS_1_setSize350px.png b/uitest/reference-screenshots/phantomjs/GridLayoutSizingTest-LayoutSizing_LINUX_PhantomJS_1_setSize350px.png
deleted file mode 100644
index 85e2064e31..0000000000
--- a/uitest/reference-screenshots/phantomjs/GridLayoutSizingTest-LayoutSizing_LINUX_PhantomJS_1_setSize350px.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/HLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png b/uitest/reference-screenshots/phantomjs/HLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
deleted file mode 100644
index 3cdd15c551..0000000000
--- a/uitest/reference-screenshots/phantomjs/HLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/reference-screenshots/phantomjs/VLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png b/uitest/reference-screenshots/phantomjs/VLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
deleted file mode 100644
index 4f6ba58d5e..0000000000
--- a/uitest/reference-screenshots/phantomjs/VLayoutMarginSpacingTest-LayoutMarginSpacing_LINUX_PhantomJS_1_marginOnfSpaceOn.png
+++ /dev/null
Binary files differ
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayout.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayout.java
new file mode 100644
index 0000000000..5c619bafc4
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayout.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Arrays;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.HorizontalLayout;
+
+public class ComboBoxAtBottomEdgeWithinHorizontalLayout extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ ComboBox<Integer> comboBox = new ComboBox<>();
+ comboBox.setItems(Arrays.asList(100, 200, 300, 400, 500));
+
+ HorizontalLayout horizontalLayout = new HorizontalLayout();
+ horizontalLayout.addComponent(comboBox);
+
+ getLayout().addComponent(horizontalLayout);
+ getLayout().setComponentAlignment(horizontalLayout,
+ Alignment.BOTTOM_RIGHT);
+ getLayout().setSizeFull();
+ getLayout().getParent().setSizeFull();
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11866;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "ComboBox at bottom edge should open popup above "
+ + "even when within HorizontalLayout.";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java
new file mode 100644
index 0000000000..a174a9a297
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.event.ShortcutListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractReindeerTestUI;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxReadOnlyPopup extends AbstractReindeerTestUI {
+
+ static final String[] ITEMS = { "First", "Second", "Third" };
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ String boxLabel = String
+ .format("Press 'Q' to toggle ComboBox's read-only mode");
+ final ComboBox<String> comboBox = new ComboBox<>(boxLabel);
+
+ comboBox.setItems(ITEMS);
+ comboBox.setSelectedItem(ITEMS[0]);
+
+ ShortcutListener shortcutListener = new ShortcutListener("", null,
+ ShortcutAction.KeyCode.Q) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ comboBox.setReadOnly(!comboBox.isReadOnly());
+ }
+ };
+ comboBox.addShortcutListener(shortcutListener);
+
+ addComponents(comboBox);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "ComboBox that turns to read-only mode while expanded "
+ + "should have its popup set to hidden.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 12021;
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxWithinHorizontalLayout.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxWithinHorizontalLayout.java
new file mode 100644
index 0000000000..4ae8977a8b
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxWithinHorizontalLayout.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+
+public class ComboBoxWithinHorizontalLayout extends AbstractTestUI {
+
+ private ComboBox<String> comboBox;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ comboBox = new ComboBox<>();
+ comboBox.setWidth("100%");
+ comboBox.setPopupWidth(null);
+ populateWithShortItems();
+
+ HorizontalLayout content = new HorizontalLayout(new Button("1"),
+ new Button("2"), comboBox, new Button("3"));
+ content.setWidth("100%");
+ content.setExpandRatio(comboBox, 2.0f);
+ Iterator<Component> i = content.iterator();
+ while (i.hasNext()) {
+ content.setComponentAlignment(i.next(), Alignment.BOTTOM_RIGHT);
+ }
+
+ getLayout().setSpacing(true);
+ addComponent(content);
+ addComponent(new Button("Toggle items", e -> {
+ if ("Short items".equals(comboBox.getCaption())) {
+ populateWithLongItems();
+ } else {
+ populateWithShortItems();
+ }
+ }));
+ addComponent(new Button("Toggle spacing", e -> {
+ content.setSpacing(!content.isSpacing());
+ }));
+ addComponent(new Button("Toggle expand ratio", e -> {
+ if (content.getExpandRatio(comboBox) > 0.0f) {
+ content.setExpandRatio(comboBox, 0.0f);
+ } else {
+ content.setExpandRatio(comboBox, 2.0f);
+ }
+ }));
+ }
+
+ private void populateWithLongItems() {
+ comboBox.setCaption("Long items");
+ comboBox.setItems(Arrays.asList(
+ "First very, very, very, very, very long item to add",
+ "Second very long item to add", "Third very long item to add"));
+ }
+
+ private void populateWithShortItems() {
+ comboBox.setCaption("Short items");
+ comboBox.setItems(Arrays.asList("short1", "short2", "short3"));
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11718;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "ComboBox within HorizontalLayout should not get incorrect "
+ + "intermediate popup positions that cause flickering.";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcut.java b/uitest/src/main/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcut.java
new file mode 100644
index 0000000000..0881ced2fc
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcut.java
@@ -0,0 +1,47 @@
+package com.vaadin.tests.components.datefield;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.event.ShortcutListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Notification;
+import com.vaadin.v7.ui.DateField;
+
+@SuppressWarnings("deprecation")
+public class CompatibilityDateFieldShortcut extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ String dateFormat = "dd/MM/yyyy";
+
+ DateField dateField = new DateField();
+ dateField.setValue(new Date(2018 - 1900, 0, 11));
+ dateField.setDateFormat(dateFormat);
+
+ dateField.addShortcutListener(
+ new ShortcutListener("Enter", KeyCode.ENTER, null) {
+ @Override
+ public void handleAction(Object sender, Object target) {
+ SimpleDateFormat df = new SimpleDateFormat(dateFormat);
+ Notification.show(df.format(dateField.getValue()));
+ }
+ });
+
+ addComponent(dateField);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Modify the date manually (without using the popup element) and"
+ + " then press Enter. The notification should show the modified"
+ + " value instead of the old value.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10854;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChange.java b/uitest/src/main/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChange.java
new file mode 100644
index 0000000000..62ecb8428c
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChange.java
@@ -0,0 +1,56 @@
+package com.vaadin.tests.components.datefield;
+
+import java.time.LocalDate;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.datefield.DateResolution;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.DateField;
+
+public class DateFieldMonthResolutionStatusChange extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ DateField dateField = new DateField();
+ dateField.setResolution(DateResolution.MONTH);
+ dateField.setValue(LocalDate.of(2019, 1, 1));
+ dateField.setReadOnly(true);
+
+ Button dateReadOnlySwitch = new Button("Toggle read-only");
+ dateReadOnlySwitch.setId("readOnly");
+ dateReadOnlySwitch.addClickListener(event -> {
+ dateField.setReadOnly(!dateField.isReadOnly());
+ });
+
+ Button addRangeButton = new Button("Add range");
+ addRangeButton.setId("addRange");
+ addRangeButton.addClickListener(event -> {
+ dateField.setRangeStart(LocalDate.of(2018, 1, 1));
+ dateField.setRangeEnd(LocalDate.of(2020, 1, 1));
+ });
+
+ Button resetValueButton = new Button("Reset value");
+ resetValueButton.setId("resetValue");
+ resetValueButton.addClickListener(event -> {
+ dateField.setValue(LocalDate.now());
+ });
+
+ addComponent(dateField);
+ addComponent(dateReadOnlySwitch);
+ addComponent(addRangeButton);
+ addComponent(resetValueButton);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Changing any field status (e.g. read-only or range) before "
+ + "the DateField popup has been opened should not change "
+ + "the date to current.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11864;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDates.java b/uitest/src/main/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDates.java
new file mode 100644
index 0000000000..f00d1d65fb
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDates.java
@@ -0,0 +1,185 @@
+package com.vaadin.tests.components.datefield;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.Month;
+import java.time.ZoneId;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.stream.Stream;
+
+import com.vaadin.server.UserError;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.DateTimeField;
+
+public class DateTimeFieldZoneIdFutureSummerDates extends AbstractTestUI {
+
+ static final String ZONE_ID = "zoneId";
+ static final String LOCALE_ID = "localeId";
+ static final String START_YEAR_DATEFIELD_ID = "startYearDateFieldID";
+ static final String END_YEAR_DATEFIELD_ID = "endYearDateFieldID";
+ static final String FIXED_RANGE_DATEFIELD_ID = "fixedRangeDateFieldID";
+ static final String VARIABLE_RANGE_DATEFIELD_ID = "variableRangeDateFieldID";
+
+ static final String INITIAL_ZONE_ID = "CET";
+ static final Locale INITIAL_LOCALE = Locale.US;
+ static final LocalDateTime INITIAL_DATE_TIME = LocalDateTime
+ .of(LocalDate.now().getYear() + 21, Month.JULY, 1, 0, 0);
+ static final LocalDate INITIAL_START_DATE = LocalDate
+ .of(INITIAL_DATE_TIME.getYear() - 5, Month.JULY, 1);
+ static final LocalDate INITIAL_END_DATE = LocalDate
+ .of(INITIAL_DATE_TIME.getYear() + 5, Month.JULY, 1);
+ private static final String TARGET_FORMAT_PATTERN = "dd MMM yyyy - z";
+ private static final String RANGE_FORMAT_PATTERN = "yyyy";
+
+ @Override
+ protected String getTestDescription() {
+ return "DateTimeField should correctly show the daylight saving (summer time) zone name "
+ + "of a date that occurs within a user-defined range";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11919;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final ComboBox<String> zoneIdComboBox = getZoneIdComboBox();
+ addComponent(zoneIdComboBox);
+
+ final ComboBox<Locale> localeIdComboBox = getLocaleIdComboBox();
+ addComponent(localeIdComboBox);
+
+ final DateField transitionsStartYear = getDateField(
+ START_YEAR_DATEFIELD_ID, INITIAL_START_DATE,
+ RANGE_FORMAT_PATTERN,
+ "DST Transitions' start year (inclusive):");
+ addComponent(transitionsStartYear);
+
+ final DateField transitionsEndYear = getDateField(END_YEAR_DATEFIELD_ID,
+ INITIAL_END_DATE, RANGE_FORMAT_PATTERN,
+ "DST Transitions' end year (inclusive):");
+ addComponent(transitionsEndYear);
+
+ String captionVarField = "A DateTimeField with custom start"
+ + " and end years between which DST zone names are displayed:";
+ final DateTimeField dateTimeFieldWithCustomRange = getDateTimeField(
+ VARIABLE_RANGE_DATEFIELD_ID, INITIAL_DATE_TIME,
+ TARGET_FORMAT_PATTERN, INITIAL_LOCALE, INITIAL_ZONE_ID,
+ captionVarField);
+ dateTimeFieldWithCustomRange.setDaylightSavingTimeRange(
+ INITIAL_START_DATE.getYear(), INITIAL_END_DATE.getYear());
+
+ addComponent(dateTimeFieldWithCustomRange);
+
+ transitionsStartYear.addValueChangeListener(event -> {
+ int startYear = event.getValue().getYear();
+ int endYear = transitionsEndYear.getValue().getYear();
+ if (startYear > endYear) {
+ showDateRangeError(transitionsStartYear);
+ } else {
+ clearErrors(transitionsStartYear, transitionsEndYear);
+ dateTimeFieldWithCustomRange
+ .setDaylightSavingTimeRange(startYear, endYear);
+ }
+ });
+
+ transitionsEndYear.addValueChangeListener(event -> {
+ int startYear = transitionsStartYear.getValue().getYear();
+ int endYear = event.getValue().getYear();
+ if (startYear > endYear) {
+ showDateRangeError(transitionsEndYear);
+ } else {
+ clearErrors(transitionsStartYear, transitionsEndYear);
+ dateTimeFieldWithCustomRange
+ .setDaylightSavingTimeRange(startYear, endYear);
+ }
+ });
+
+ String captionFixedField = "A default DateTimeField (By default, "
+ + "DST zones are displayed between 1980 and 20 years into the future):";
+ final DateTimeField dateTimeFieldWithDefaultRange = getDateTimeField(
+ FIXED_RANGE_DATEFIELD_ID, INITIAL_DATE_TIME,
+ TARGET_FORMAT_PATTERN, INITIAL_LOCALE, INITIAL_ZONE_ID,
+ captionFixedField);
+ addComponent(dateTimeFieldWithDefaultRange);
+
+ zoneIdComboBox.addValueChangeListener(event -> {
+ final String value = event.getValue();
+ if (value == null) {
+ dateTimeFieldWithCustomRange.setZoneId(null);
+ dateTimeFieldWithDefaultRange.setZoneId(null);
+ } else {
+ dateTimeFieldWithCustomRange.setZoneId(ZoneId.of(value));
+ dateTimeFieldWithDefaultRange.setZoneId(ZoneId.of(value));
+ }
+ });
+
+ localeIdComboBox.addValueChangeListener(event -> {
+ dateTimeFieldWithCustomRange.setLocale(event.getValue());
+ dateTimeFieldWithDefaultRange.setLocale(event.getValue());
+ });
+ }
+
+ private DateTimeField getDateTimeField(String id,
+ LocalDateTime initialDateTime, String dateFormat, Locale locale,
+ String zoneId, String caption) {
+ final DateTimeField dateTimeField = new DateTimeField();
+ dateTimeField.setId(id);
+ dateTimeField.setValue(initialDateTime);
+ dateTimeField.setDateFormat(dateFormat);
+ dateTimeField.setLocale(locale);
+ dateTimeField.setZoneId(ZoneId.of(zoneId));
+ dateTimeField.setCaption(caption);
+ return dateTimeField;
+ }
+
+ private DateField getDateField(String id, LocalDate initialDate,
+ String dateFormat, String caption) {
+ final DateField dateField = new DateField();
+ dateField.setId(id);
+ dateField.setDateFormat(dateFormat);
+ dateField.setCaption(caption);
+ dateField.setValue(initialDate);
+ return dateField;
+ }
+
+ private void clearErrors(DateField transitionStartyear,
+ DateField transitionEndyear) {
+ transitionStartyear.setComponentError(null);
+ transitionEndyear.setComponentError(null);
+ }
+
+ private void showDateRangeError(DateField dateField) {
+ dateField.setComponentError(new UserError(
+ "Start year must be less than or equal to end year!"));
+ }
+
+ private ComboBox<Locale> getLocaleIdComboBox() {
+ final ComboBox<Locale> localeIdComboBox = new ComboBox<>();
+ localeIdComboBox.setId(LOCALE_ID);
+ final Stream<Locale> localeStream = Stream
+ .of(Locale.getAvailableLocales())
+ .sorted((l1, l2) -> l1.toString().compareTo(l2.toString()));
+ localeIdComboBox.setItems(localeStream);
+ localeIdComboBox.setValue(INITIAL_LOCALE);
+ localeIdComboBox.setCaption("Locale:");
+ return localeIdComboBox;
+ }
+
+ private ComboBox<String> getZoneIdComboBox() {
+ final ComboBox<String> zoneIdComboBox = new ComboBox<>();
+ zoneIdComboBox.setId(ZONE_ID);
+ final Set<String> zoneIdSet = new TreeSet<>(
+ ZoneId.getAvailableZoneIds());
+ zoneIdComboBox.setItems(zoneIdSet);
+ zoneIdComboBox.setValue(INITIAL_ZONE_ID);
+ zoneIdComboBox.setCaption("Zone:");
+ return zoneIdComboBox;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridScrollDownResize.java b/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridScrollDownResize.java
new file mode 100644
index 0000000000..973598f18f
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridScrollDownResize.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.minitutorials.v7_4.GridExampleHelper;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.v7.ui.Grid;
+
+public class CompatibilityGridScrollDownResize extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ // container with at least 100 rows
+ final Grid grid = new Grid(GridExampleHelper.createContainer());
+ grid.setSizeFull();
+ addComponent(grid);
+ getLayout().setSizeFull();
+ getLayout().setExpandRatio(grid, 2);
+ ((VerticalLayout) getLayout().getParent()).setSizeFull();
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11893;
+ };
+
+ @Override
+ protected String getTestDescription() {
+ return "Scrolling all the way down, resizing the browser window smaller "
+ + "so that one row gets completely hidden, and scrolling down "
+ + "again should keep the row contents consistent and in expected "
+ + "sequence.";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSort.java b/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSort.java
new file mode 100644
index 0000000000..f62276de2c
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSort.java
@@ -0,0 +1,35 @@
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.minitutorials.v7_4.GridExampleHelper;
+import com.vaadin.ui.Button;
+import com.vaadin.v7.ui.Grid;
+import com.vaadin.v7.ui.Grid.MultiSelectionModel;
+import com.vaadin.v7.ui.Grid.SelectionMode;
+
+public class CompatibilityGridToggleMultiSelectSort extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ // container with at least 100 rows
+ final Grid grid = new Grid(GridExampleHelper.createContainer());
+ grid.setSelectionMode(SelectionMode.MULTI);
+ addComponent(grid);
+
+ Button button = new Button("Toggle multi-select", e -> {
+ if (grid.getSelectionModel() instanceof MultiSelectionModel) {
+ grid.setSelectionMode(SelectionMode.SINGLE);
+ } else {
+ grid.setSelectionMode(SelectionMode.MULTI);
+ }
+ });
+ addComponent(button);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Toggling multi-select off should not break sorting "
+ + "first column to both directions.";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeight.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeight.java
new file mode 100644
index 0000000000..b30211412e
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeight.java
@@ -0,0 +1,76 @@
+package com.vaadin.tests.components.grid;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+import java.util.stream.IntStream;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.grid.HeightMode;
+import com.vaadin.tests.components.AbstractReindeerTestUI;
+import com.vaadin.tests.data.bean.Person;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.SelectionMode;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class GridDetailsAndUndefinedHeight extends AbstractReindeerTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ ArrayList<Person> itemsCollection = new ArrayList<>();
+
+ final Grid<Person> grid = new Grid<Person>() {
+ @Override
+ public void setItems(Collection<Person> items) {
+ itemsCollection.clear();
+ itemsCollection.addAll(items);
+ super.setItems(items);
+ }
+ };
+ addComponent(grid);
+
+ grid.addColumn(Person::getFirstName);
+ grid.addColumn(Person::getLastName);
+ grid.addColumn(Person::getEmail);
+
+ grid.setItems(IntStream.range(0, 5).mapToObj(this::createPerson));
+
+ grid.setWidthFull();
+ grid.setHeightMode(HeightMode.UNDEFINED);
+
+ grid.setSelectionMode(SelectionMode.SINGLE);
+
+ grid.addSelectionListener(event -> {
+ itemsCollection
+ .forEach(item -> grid.setDetailsVisible(item, false));
+ final Set<Person> selections = event.getAllSelectedItems();
+ if (!selections.isEmpty()) {
+ Person selection = selections.iterator().next();
+ grid.setDetailsVisible(selection, true);
+ grid.scrollTo(itemsCollection.indexOf(selection));
+ }
+ });
+ grid.setDetailsGenerator(person -> new VerticalLayout(
+ new Label("Details " + itemsCollection.indexOf(person))));
+ }
+
+ private Person createPerson(int index) {
+ Person person = new Person();
+ person.setFirstName("cell " + index + " 0");
+ person.setLastName("cell " + index + " 1");
+ person.setEmail("cell " + index + " 2");
+ return person;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Second selection should successfully close "
+ + "the details row from the first selection.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11856;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReplace.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReplace.java
new file mode 100644
index 0000000000..7ddb35784a
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReplace.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.SelectionMode;
+
+public class GridFrozenColumnReplace extends SimpleGridUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Grid<String> grid = new Grid<>();
+ grid.addColumn(String::toString).setId("id1").setCaption("Frozen 1");
+ grid.addColumn(String::toString).setId("id2").setCaption("Col 2");
+ grid.setSelectionMode(SelectionMode.MULTI);
+ grid.setFrozenColumnCount(1);
+
+ Button button = new Button("Replace columns");
+ button.addClickListener(e -> {
+ grid.removeAllColumns(); // will change frozenColumnCount to 0
+
+ grid.addColumn(String::toString).setId("id1")
+ .setCaption("New Frozen 1");
+ grid.addColumn(String::toString).setId("id2")
+ .setCaption("New Frozen 2");
+ grid.addColumn(String::toString).setId("id3")
+ .setCaption("New Col 3");
+ grid.setFrozenColumnCount(2);
+ });
+
+ addComponents(grid, button);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "It should be possible to remove and replace columns on same round trip "
+ + "even if some of them are frozen.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11824;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItem.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItem.java
new file mode 100644
index 0000000000..8b4fc044c5
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItem.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.grid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.provider.ListDataProvider;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Grid;
+
+public class GridRecalculateColumnWidthNewItem extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ List<String> testItems = new ArrayList<>();
+ testItems.add("short1");
+ testItems.add("short2");
+
+ Grid<String> grid = new Grid<>();
+ grid.addColumn(String::toString).setCaption("Name");
+ grid.addColumn(item -> "col2").setCaption("Col 2");
+ grid.addColumn(item -> "col3").setCaption("Col 3");
+ grid.setDataProvider(new ListDataProvider<>(testItems));
+
+ final CheckBox recalculateCheckBox = new CheckBox(
+ "Recalculate column widths", true);
+
+ Button addButton = new Button("add row", e -> {
+ testItems.add(
+ "Wiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiide");
+ grid.getDataProvider().refreshAll();
+ if (recalculateCheckBox.getValue()) {
+ grid.recalculateColumnWidths();
+ }
+ });
+ addButton.setId("add");
+
+ Button removeButton = new Button("remove row", e -> {
+ if (testItems.size() > 0) {
+ testItems.remove(testItems.size() - 1);
+ }
+ grid.getDataProvider().refreshAll();
+ if (recalculateCheckBox.getValue()) {
+ grid.recalculateColumnWidths();
+ }
+ });
+ removeButton.setId("remove");
+
+ addComponents(grid, addButton, removeButton, recalculateCheckBox);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Adding or removing a row with wider contents should update "
+ + "column widths if requested but not otherwise.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9996;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozen.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozen.java
new file mode 100644
index 0000000000..e0b65ff8d3
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozen.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Label;
+
+public class GridUnhideColumnsWithFrozen extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Grid<Integer> grid = new Grid<>();
+ for (int i = 0; i < 15; i++) {
+ String columnId = String.valueOf(i);
+ Grid.Column<Integer, Component> column = addColumn(grid, columnId);
+ column.setHidable(true);
+ if (i == 3 || i == 4) {
+ column.setHidden(true);
+ }
+ column.setCaption(columnId);
+ column.setId(columnId);
+ }
+ grid.setFrozenColumnCount(4);
+ grid.setItems(0);
+ addComponent(grid);
+ }
+
+ private Grid.Column<Integer, Component> addColumn(Grid<Integer> grid,
+ String columnId) {
+ return grid.addComponentColumn(i -> new Label(columnId));
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Columns 0-3 have been set frozen, unhiding column 4 before column 3"
+ + " should not make column 4 frozen.";
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridWithFullWidthComponents.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridWithFullWidthComponents.java
new file mode 100644
index 0000000000..233a260984
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridWithFullWidthComponents.java
@@ -0,0 +1,79 @@
+package com.vaadin.tests.components.grid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.provider.DataProvider;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class GridWithFullWidthComponents extends AbstractTestUI {
+ private String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, "
+ + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ getPage().getStyles()
+ .add(".v-grid .v-label, .v-grid .v-csslayout:not(:empty) { "
+ + "background-color: yellow; min-width: 300px; }");
+
+ List<Integer> content = new ArrayList<>();
+ for (int i = 0; i < 100; ++i) {
+ content.add(i);
+ }
+
+ Grid<Integer> grid = new Grid<>(DataProvider.ofCollection(content));
+ grid.setSizeFull();
+ grid.setSelectionMode(Grid.SelectionMode.NONE);
+ grid.setBodyRowHeight(70);
+ grid.addComponentColumn(this::labelResponse).setCaption("Label");
+ grid.addComponentColumn(this::hLayoutResponse)
+ .setCaption("HorizontalLayout");
+ grid.addComponentColumn(this::cssLayoutResponse)
+ .setCaption("CssLayout");
+
+ addComponent(grid);
+ }
+
+ private Label labelResponse(Integer item) {
+ Label label = new Label(s);
+ label.setWidthFull();
+ return label;
+ }
+
+ private HorizontalLayout hLayoutResponse(Integer ite) {
+ HorizontalLayout layout = new HorizontalLayout();
+ layout.setWidthFull();
+ for (int i = 0; i < 5; ++i) {
+ layout.addComponent(new Button("Button" + i));
+ }
+ return layout;
+ }
+
+ private CssLayout cssLayoutResponse(Integer ite) {
+ CssLayout layout = new CssLayout();
+ layout.setWidthFull();
+ for (int i = 0; i < 5; ++i) {
+ layout.addComponent(new Button("Button" + i));
+ }
+ return layout;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "All column contents are components with 100% width, "
+ + "in first and third column the contents are styled "
+ + "to have background color and minimum width of 300px. "
+ + "Initial render and browser resize should behave accordingly.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11973;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnly.java b/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnly.java
new file mode 100644
index 0000000000..3f8fdc4abc
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnly.java
@@ -0,0 +1,36 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.RadioButtonGroup;
+
+public class RadioButtonGroupDisablingAndReadOnly extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ RadioButtonGroup<String> group = new RadioButtonGroup<>();
+ group.setEnabled(false);
+ group.setReadOnly(true);
+ group.setItems("a", "b", "c");
+ addComponent(group);
+
+ addComponent(new Button("Toggle enabled", e -> {
+ group.setEnabled(!group.isEnabled());
+ }));
+
+ addComponent(new Button("Toggle readOnly", e -> {
+ group.setReadOnly(!group.isReadOnly());
+ }));
+
+ addComponent(new Button("Clear selection", e -> {
+ group.setValue(null);
+ }));
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Options should only be selectable when the group is "
+ + "neither disabled nor readOnly";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLink.java b/uitest/src/main/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLink.java
new file mode 100644
index 0000000000..cb89e919e5
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLink.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.ContentMode;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.RichTextArea;
+
+public class RichTextAreaCreateLink extends AbstractTestUI {
+
+ @Override
+ protected String getTestDescription() {
+ return "Test the 'Create Link' button of a rich text area in supported browsers.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11888;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final RichTextArea area = new RichTextArea();
+
+ final Label label = new Label(area.getValue(),
+ ContentMode.PREFORMATTED);
+ label.setCaption("Value recieved from RichTextArea:");
+
+ final Button button = new Button("get area value",
+ event -> label.setValue(area.getValue()));
+
+ addComponent(area);
+ addComponent(button);
+ addComponent(label);
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
index 1713dddde5..0a1a1ab560 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
@@ -10,9 +10,10 @@ import com.vaadin.v7.ui.Table.TableDragMode;
@SuppressWarnings("serial")
public class CtrlShiftMultiselect extends TestBase {
+ protected final Table table = new Table("Multiselectable table");
+
@Override
protected void setup() {
- final Table table = new Table("Multiselectable table");
table.setContainerDataSource(createContainer());
table.setImmediate(true);
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java
new file mode 100644
index 0000000000..318b5954e4
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabled.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Set;
+
+import com.vaadin.v7.data.Property;
+import com.vaadin.v7.ui.Label;
+
+public class CtrlShiftMultiselectTouchDetectionDisabled
+ extends CtrlShiftMultiselect {
+
+ protected Label label;
+
+ @Override
+ protected void setup() {
+ super.setup();
+ label = new Label("0");
+ label.setId("count");
+ label.setCaption("Amount of selected items");
+ table.setMultiSelectTouchDetectionEnabled(false);
+ table.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ Property property = event.getProperty();
+ Set set = (Set) property.getValue();
+ label.setValue("" + set.size());
+ }
+ });
+ addComponent(label);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Allow disabling multi selection's touch screen detection for hybrid devices";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11601;
+ }
+
+} \ No newline at end of file
diff --git a/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java b/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java
new file mode 100644
index 0000000000..8d4ff119ab
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/table/TableScrollsOnRefresh.java
@@ -0,0 +1,86 @@
+package com.vaadin.tests.components.table;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.v7.data.util.BeanItemContainer;
+import com.vaadin.v7.ui.Table;
+
+public class TableScrollsOnRefresh extends AbstractTestUI {
+ private Table table = new Table(
+ "scroll down table, so it loads next page, and then click 'refresh' button");
+ private Button refresh = new Button("refresh");
+ private BeanItemContainer<TableItem> container = new BeanItemContainer<TableItem>(
+ TableItem.class);
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ refresh.addClickListener(new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ table.refreshRowCache();
+ }
+ });
+ table.setSizeFull();
+ addComponents(refresh, table);
+ VerticalLayout vl = getLayout();
+ vl.setExpandRatio(table, 1f);
+ vl.setSizeFull();
+ vl.getParent().setSizeFull();
+ table.setContainerDataSource(container);
+ populateContainer();
+ }
+
+ private void populateContainer() {
+ List<TableItem> items = new ArrayList<TableItem>();
+ for (int i = 0; i < 1000; i++) {
+ items.add(new TableItem("Item " + Integer.toString(i),
+ "Item description " + Integer.toString(i)));
+
+ }
+ container.addAll(items);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Refreshing row cache shouldn't change scroll position.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8707;
+ }
+
+ public class TableItem {
+
+ private String name;
+ private String description;
+
+ public TableItem(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/tree/TreeWideContent.java b/uitest/src/main/java/com/vaadin/tests/components/tree/TreeWideContent.java
index 9e41d9b7c0..34122879c7 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/tree/TreeWideContent.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/tree/TreeWideContent.java
@@ -17,7 +17,7 @@ public class TreeWideContent extends AbstractTestUI {
tree.setWidth("150px");
tree.setHeight("100px");
- TreeData<String> data = new TreeData();
+ TreeData<String> data = new TreeData<>();
data.addItem(null, "Foo");
data.addItem("Foo", "Extra long text content that should be wider"
+ " than the allocated width of the Tree.");
diff --git a/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumn.java b/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumn.java
new file mode 100644
index 0000000000..0e6e650e78
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumn.java
@@ -0,0 +1,75 @@
+package com.vaadin.tests.components.treegrid;
+
+import com.vaadin.data.TreeData;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TreeGrid;
+
+public class TreeGridChangeHierarchyColumn extends AbstractTestUI {
+
+ @Override
+ protected String getTestDescription() {
+ return "TreeGrid in MultiSelect mode should take hiden columns into account when"
+ + " rendering frozen columns after hierarchy-column reset.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 12026;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ TreeGrid<String> treeGrid = new TreeGrid<>();
+ treeGrid.setId("TreeGrid");
+
+ for (int i = 0; i < 20; i++) {
+ String columnId = String.valueOf(i);
+ Grid.Column<String, Component> column = addColumn(treeGrid,
+ columnId);
+ column.setCaption(columnId);
+ column.setId(columnId);
+ }
+
+ TreeData<String> data = treeGrid.getTreeData();
+ data.addItem(null, "child");
+ data.addItem("child", "grandChild");
+
+ treeGrid.setHierarchyColumn(treeGrid.getColumns().get(0));
+
+ Button hideHierCol = new Button("Hide Hierarchy Column");
+ hideHierCol.addClickListener(e -> {
+ treeGrid.getHierarchyColumn().setHidden(true);
+ });
+ hideHierCol.setId("hideHierColButton");
+
+ Button setHierCol = new Button("Set new Hierarchy Column");
+ setHierCol.addClickListener(e -> {
+ treeGrid.getColumns().stream().filter(column -> !column.isHidden())
+ .findFirst().ifPresent(col -> {
+ treeGrid.setHierarchyColumn(col.getId());
+ });
+ });
+ setHierCol.setId("setHierColButton");
+
+ treeGrid.setSelectionMode(Grid.SelectionMode.MULTI);
+ treeGrid.setFrozenColumnCount(1);
+
+ addComponents(treeGrid, hideHierCol, setHierCol);
+ }
+
+ private Grid.Column<String, Component> addColumn(Grid<String> grid,
+ String columnId) {
+ return grid.addComponentColumn(val -> {
+ Label label = new Label(columnId);
+ label.setWidth(50, Unit.PIXELS);
+ return new CssLayout(label);
+ });
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java b/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java
new file mode 100644
index 0000000000..2ceae92ece
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/treetable/TreeTableMultiselect.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.treetable;
+
+import static com.vaadin.server.Sizeable.Unit.PIXELS;
+
+import java.util.Set;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.v7.data.Property;
+import com.vaadin.v7.ui.Label;
+import com.vaadin.v7.ui.TreeTable;
+
+public class TreeTableMultiselect extends AbstractTestUI {
+
+ protected final TreeTable tt = new TreeTable("Multiselectable treetable");
+ protected Label label;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ label = new Label("0");
+ label.setCaption("Amount of selected items");
+ label.setId("count");
+
+ tt.setImmediate(true);
+ tt.addContainerProperty("Foo", String.class, "");
+ tt.setColumnWidth("Foo", 100);
+ tt.addContainerProperty("Bar", String.class, "");
+ tt.setColumnWidth("Bar", 100);
+ tt.setHeight(400, PIXELS);
+ Object item1 = tt.addItem(new Object[] { "Foo", "Bar" }, null);
+ Object item2 = tt.addItem(new Object[] { "Foo2", "Bar2" }, null);
+ Object item3 = tt.addItem(new Object[] { "Foo3", "Bar3" }, null);
+ tt.setParent(item2, item1);
+ tt.setParent(item3, item1);
+ tt.setCollapsed(item1, false);
+ tt.setSelectable(true);
+ tt.setMultiSelect(true);
+ tt.setMultiSelectTouchDetectionEnabled(false);
+ tt.setWidth("400px");
+ tt.setHeight("400px");
+ tt.addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ Property property = event.getProperty();
+ Set set = (Set) property.getValue();
+ label.setValue("" + set.size());
+ }
+ });
+
+ addComponent(tt);
+ addComponent(label);
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "Allow disabling multi selection's touch screen detection for hybrid devices";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11601;
+ }
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/ui/MultiFileUploadTest.java b/uitest/src/main/java/com/vaadin/tests/components/ui/MultiFileUploadTest.java
index 1e97980bc7..b4c0f1c038 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/ui/MultiFileUploadTest.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/ui/MultiFileUploadTest.java
@@ -68,6 +68,7 @@ public class MultiFileUploadTest extends AbstractTestUIWithLog {
private Upload createUpload() {
Upload upload = new Upload();
+ upload.setImmediateMode(false);
upload.addChangeListener(changeListener);
return upload;
}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/upload/UploadChangeListener.java b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadChangeListener.java
new file mode 100644
index 0000000000..14bf1a3bca
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadChangeListener.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.upload;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Upload;
+
+public class UploadChangeListener extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Upload upload = new Upload();
+ upload.setImmediateMode(false);
+ upload.addChangeListener(e -> {
+ log("change");
+ });
+ upload.addFinishedListener(e -> {
+ log("finished");
+ });
+ addComponent(upload);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Change listener should still work after first upload.";
+ };
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10420;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/upload/UploadHtmlCaption.java b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadHtmlCaption.java
new file mode 100644
index 0000000000..b48092d14a
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadHtmlCaption.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.upload;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Upload;
+
+public class UploadHtmlCaption extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Upload upload = new Upload();
+ upload.setImmediateMode(false);
+ upload.setButtonCaption("<b>Submit button</b>");
+ upload.setCaption("This is the caption of the <b>entire</b> component");
+ addComponent(upload);
+
+ Button toggleButtonCaption = new Button("Toggle button caption",
+ e -> upload.setButtonCaptionAsHtml(
+ !upload.isButtonCaptionAsHtml()));
+ toggleButtonCaption.setId("toggleButtonCaption");
+ addComponent(toggleButtonCaption);
+
+ Button toggleComponentCaption = new Button("Toggle component caption",
+ e -> upload.setCaptionAsHtml(!upload.isCaptionAsHtml()));
+ toggleComponentCaption.setId("toggleComponentCaption");
+ addComponent(toggleComponentCaption);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11810;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "It should be possible to set component caption and submit button caption "
+ + "to allow HTML display mode independently of each other.";
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/upload/UploadNoSelection.java b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadNoSelection.java
index 81aeb03e0d..2267dec90f 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/upload/UploadNoSelection.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/upload/UploadNoSelection.java
@@ -3,11 +3,16 @@ package com.vaadin.tests.components.upload;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
+import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.tests.widgetset.server.upload.AllowUploadWithoutFilenameExtension;
+import com.vaadin.ui.Button;
import com.vaadin.ui.Upload;
import com.vaadin.ui.Upload.Receiver;
+@Widgetset(TestingWidgetSet.NAME)
public class UploadNoSelection extends AbstractTestUIWithLog
implements Receiver {
@@ -27,7 +32,10 @@ public class UploadNoSelection extends AbstractTestUIWithLog
@Override
protected String getTestDescription() {
- return "Uploading an empty selection (no file) will trigger FinishedEvent with 0-length file size and empty filename.";
+ return "Uploading an empty selection (no file) should not be possible by "
+ + "default. If the default behavior is overridden with a custom "
+ + "extension the upload attempt will trigger FinishedEvent with "
+ + "0-length file size and empty filename.";
}
@Override
@@ -49,6 +57,16 @@ public class UploadNoSelection extends AbstractTestUIWithLog
log(FILE_LENGTH_PREFIX + " " + event.getLength());
log(FILE_NAME_PREFIX + " " + event.getFilename());
});
+
+ Button progButton = new Button("Upload programmatically",
+ e -> u.submitUpload());
+ progButton.setId("programmatic");
+ addComponent(progButton);
+
+ Button extButton = new Button("Allow upload without filename",
+ e -> AllowUploadWithoutFilenameExtension.wrap(u));
+ extButton.setId("extend");
+ addComponent(extButton);
}
@Override
diff --git a/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowAsync.java b/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowAsync.java
new file mode 100644
index 0000000000..5b600bc306
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowAsync.java
@@ -0,0 +1,122 @@
+package com.vaadin.tests.components.window;
+
+import java.util.concurrent.CompletableFuture;
+
+import com.vaadin.annotations.PreserveOnRefresh;
+import com.vaadin.annotations.Push;
+import com.vaadin.annotations.Theme;
+import com.vaadin.navigator.PushStateNavigation;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.communication.PushMode;
+import com.vaadin.shared.ui.ui.Transport;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.UIDetachedException;
+import com.vaadin.ui.Window;
+
+@Theme("tests-valo-disabled-animations")
+@PreserveOnRefresh
+@Push(value = PushMode.MANUAL, transport = Transport.LONG_POLLING)
+@PushStateNavigation
+public class CloseWindowAsync extends AbstractTestUIWithLog {
+ private final boolean manualPush;
+
+ public CloseWindowAsync() {
+ this(true);
+ }
+
+ public CloseWindowAsync(boolean manualPush) {
+ this.manualPush = manualPush;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final Button button = new Button("Open and directly close busy window");
+ button.addClickListener((Button.ClickListener) event -> {
+ final Window window = createWindow(1);
+ final UI ui = getUI();
+ ui.addWindow(window);
+
+ CompletableFuture.runAsync(() -> {
+ // task duration variable, could be a few ms or longer
+ ui.accessSynchronously(() -> {
+ window.close();
+ if (manualPush) {
+ ui.push();
+ }
+ });
+ });
+ });
+ addComponents(button);
+
+ final Button button2 = new Button(
+ "Open and directly close busy window with error notification");
+ button2.addClickListener((Button.ClickListener) event -> {
+ final Window window = createWindow(2);
+ final UI ui = getUI();
+ ui.addWindow(window);
+
+ CompletableFuture.runAsync(() -> {
+ // task duration variable, could be a few ms or longer
+ ui.accessSynchronously(() -> {
+ window.close();
+ Notification.show("error", Notification.Type.ERROR_MESSAGE);
+ if (manualPush) {
+ ui.push();
+ }
+ });
+ });
+ });
+ addComponents(button2);
+
+ // Reconstructed the issue using the vaadin push training
+ // https://vaadin.com/learn/training/vaadin-push
+
+ final Button button3 = new Button(
+ "Open and directly close busy window (vaadin push training)");
+ button3.addClickListener((Button.ClickListener) event -> {
+ final Window window = createWindow(3);
+ final UI ui = getUI();
+ ui.addWindow(window);
+
+ CompletableFuture.runAsync(() -> {
+ // task duration variable, could be a few ms or longer
+ try {
+ ui.access(() -> {
+ ui.removeWindow(window);
+ if (manualPush) {
+ ui.push();
+ }
+ });
+ } catch (UIDetachedException e) {
+ // browser closed
+ }
+ });
+ });
+ addComponents(button3);
+ }
+
+ private Window createWindow(int index) {
+ final Window window = new Window();
+ window.setCaption("Window");
+ window.setWidth(30, Unit.PERCENTAGE);
+ window.setHeight(30, Unit.PERCENTAGE);
+ window.setModal(true);
+ window.setContent(new Label("Window content"));
+ window.addCloseListener(e -> log("closed " + index));
+ return window;
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11942;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "All buttons should successfully open and close window on all browsers.";
+ }
+} \ No newline at end of file
diff --git a/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocused.java b/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocused.java
new file mode 100644
index 0000000000..d1c0f3aeec
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocused.java
@@ -0,0 +1,41 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.window.WindowMode;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+@Widgetset("com.vaadin.DefaultWidgetSet")
+public class CloseWindowOnEscapeMaximizedButtonFocused extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Label instructions = new Label("Press Maximise button and then ESC. "
+ + " Window should be closed");
+ Button openWindow = new Button("Open Window");
+ openWindow.setId("openW");
+ openWindow.addClickListener(e -> {
+ Window win = new Window("Window test", new Label("Some content"));
+ win.setWindowMode(WindowMode.NORMAL);
+ win.setWidth("300px");
+ win.setHeight("300px");
+ win.center();
+ addWindow(win);
+ });
+ addComponent(instructions);
+ addComponent(openWindow);
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "A window should be closed after the ESC button is pressed, when a maximize button is focused";
+ };
+
+ @Override
+ public Integer getTicketNumber() {
+ return 11838;
+ };
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/dnd/CriterionSerialization.java b/uitest/src/main/java/com/vaadin/tests/dnd/CriterionSerialization.java
new file mode 100644
index 0000000000..3cc508f64b
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/dnd/CriterionSerialization.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.dnd;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.dnd.DragSourceExtension;
+import com.vaadin.ui.dnd.DropTargetExtension;
+
+public class CriterionSerialization extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Button button = new Button();
+ button.setCaption("drag me");
+ button.setId("drag");
+ DragSourceExtension<Button> dragSource = new DragSourceExtension<>(
+ button);
+ dragSource.setPayload("test", "value");
+ dragSource.addDragStartListener(e -> {
+ log("drag started");
+ });
+ dragSource.addDragEndListener(e -> {
+ log("drag ended");
+ });
+
+ Button dropArea1 = new Button();
+ dropArea1.setCaption("drop here works");
+ dropArea1.setId("dropWorks");
+ DropTargetExtension<Button> dropTarget = new DropTargetExtension<>(
+ dropArea1);
+ dropTarget.addDropListener(e -> {
+ log("dropArea1 drop listener invoked (expected to happen)");
+ });
+ dropTarget.setDropCriterion("test", "value");
+
+ Button dropArea2 = new Button();
+ dropArea2.setCaption("drop here fails");
+ dropArea2.setId("dropFails");
+ DropTargetExtension<Button> dropTarget2 = new DropTargetExtension<>(
+ dropArea2);
+ dropTarget2.addDropListener(e -> {
+ log("dropArea2 drop listener invoked (should not happen)");
+ });
+ dropTarget2.setDropCriterion("test", "value2");
+
+ getLayout().addComponents(button, dropArea1, dropArea2);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Dropping the draggable button on the button without matching "
+ + "Criterion should not trigger drop listener.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11909;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java b/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java
new file mode 100644
index 0000000000..3145f546f6
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatio.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.layouts;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.ProgressBar;
+
+public class UpdateComponentWithinExpandRatio extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ ProgressBar progress = new ProgressBar();
+ progress.setWidth(100, Unit.PERCENTAGE);
+ Button button = new Button("Progress", e -> {
+ float value = progress.getValue();
+ value = (value >= 1) ? 0 : value + 0.1f;
+ progress.setValue(value);
+ });
+
+ HorizontalLayout layout = new HorizontalLayout(progress, button);
+ layout.setExpandRatio(progress, 1);
+ layout.setWidth(100, Unit.PERCENTAGE);
+ getLayout().addComponent(layout);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Clicking the button to update the progress bar (expanded) "
+ + "shouldn't push the button (fixed width) to the right";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10734;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseAlignment.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseAlignment.java
index 20cb15240e..fb6c28c352 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseAlignment.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseAlignment.java
@@ -31,7 +31,7 @@ public abstract class BaseAlignment extends BaseLayoutTestUI {
}
layout.setMargin(false);
layout.setSpacing(false);
- layout.setHeight("300px");
+ layout.setHeight("100px");
layout.setWidth("200px");
layout.addComponent(components[i]);
layout.setComponentAlignment(components[i], alignments[i]);
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutExpand.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutExpand.java
index 637019c61f..fa5aee0544 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutExpand.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutExpand.java
@@ -42,8 +42,6 @@ public class BaseLayoutExpand extends BaseLayoutTestUI {
}
Table t1 = getTestTable();
Table t2 = getTestTable();
- t1.setSizeFull();
- t2.setSizeFull();
l2.addComponent(t1);
l2.addComponent(t2);
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutForSpacingMargin.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutForSpacingMargin.java
index b122d48fe3..2331be46fe 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutForSpacingMargin.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutForSpacingMargin.java
@@ -26,8 +26,6 @@ public class BaseLayoutForSpacingMargin extends BaseLayoutTestUI {
private void buildLayout() {
Table t1 = getTestTable();
Table t2 = getTestTable();
- t1.setSizeFull();
- t2.setSizeFull();
l2.addComponent(t1);
l2.setMargin(false);
l2.setSpacing(false);
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutTestUI.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutTestUI.java
index 7ae05f343a..cb08992bf4 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutTestUI.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/BaseLayoutTestUI.java
@@ -28,10 +28,11 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
protected static final String CALENDAR_32_PNG = "../runo/icons/16/calendar.png";
protected static final String LOCK_16_PNG = "../runo/icons/16/lock.png";
protected static final String GLOBE_16_PNG = "../runo/icons/16/globe.png";
- public Alignment[] alignments = { Alignment.TOP_CENTER, Alignment.TOP_LEFT,
- Alignment.TOP_RIGHT, Alignment.BOTTOM_CENTER, Alignment.BOTTOM_LEFT,
- Alignment.BOTTOM_RIGHT, Alignment.MIDDLE_CENTER,
- Alignment.MIDDLE_LEFT, Alignment.MIDDLE_RIGHT };
+ public Alignment[] alignments = new Alignment[] { Alignment.TOP_LEFT,
+ Alignment.TOP_CENTER, Alignment.TOP_RIGHT, Alignment.MIDDLE_LEFT,
+ Alignment.MIDDLE_CENTER, Alignment.MIDDLE_RIGHT,
+ Alignment.BOTTOM_LEFT, Alignment.BOTTOM_CENTER,
+ Alignment.BOTTOM_RIGHT };
public final String[] CAPTIONS = { "", "VeryLongOneWordCaption",
"Very long caption of 50 approximately symbols aaaaaaaaaaaa aaaaaa aaa " };
@@ -74,7 +75,8 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
private void fillComponents() {
for (int i = 0; i < components.length; i++) {
String name = "Field" + i;
- TextField field = new TextField();
+ TextField field = new TextField(alignments[i].getVerticalAlignment()
+ + " " + alignments[i].getHorizontalAlignment());
field.setValue(name);
components[i] = field;
}
@@ -91,9 +93,7 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
l2.setMargin(false);
final AbstractComponent c1 = getTestTable();
- c1.setSizeFull();
final AbstractComponent c2 = getTestTable();
- c2.setSizeFull();
class SetSizeButton extends Button {
SetSizeButton(final String size) {
@@ -106,6 +106,7 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
} else if (compType == "component") {
c2.setHeight(size);
c2.setWidth(size);
+ c2.setCaption("Configured width");
}
});
}
@@ -135,11 +136,13 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
newLabel.setSizeUndefined();
l2.addComponent(newLabel);
});
+ btn2.setCaption(btn2.getCaption() + " + add Label");
}
protected Table getTestTable() {
Table t = new Table();
- t.setPageLength(5);
+ t.setSizeFull();
+ t.setCaption("100% default width");
t.addContainerProperty("test", String.class, null);
t.addItem(new Object[] { "qwertyuiop asdfghjköäxccvbnm,m,." }, 1);
t.addItem(new Object[] { "YGVYTCTCTRXRXRXRX" }, 2);
@@ -207,6 +210,12 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
protected void setup(VaadinRequest request) {
mainLayout.setMargin(false);
mainLayout.setSpacing(false);
+ mainLayout.setSizeUndefined();
+ getLayout().setSizeUndefined();
+ if (getLayout().getParent() instanceof VerticalLayout) {
+ ((VerticalLayout) getLayout().getParent()).setSizeUndefined();
+ }
+
mainLayout.addComponent(l1);
mainLayout.addComponent(l2);
addComponent(mainLayout);
@@ -226,8 +235,8 @@ public abstract class BaseLayoutTestUI extends AbstractReindeerTestUI {
AbstractOrderedLayout l2, String w, String h) {
l1.setWidth(w);
l1.setHeight(h);
- l2.setWidth(h);
- l2.setHeight(w);
+ l2.setWidth(w);
+ l2.setHeight(h);
}
protected void setDefaultForVertical(AbstractOrderedLayout l1,
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridAlignment.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridAlignment.java
index c6da40e878..ea108c8d37 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridAlignment.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridAlignment.java
@@ -8,6 +8,7 @@ public class GridAlignment extends GridBaseLayoutTestUI {
protected void setup(VaadinRequest request) {
buildLayout();
super.setup(request);
+ layout.setSizeFull();
}
/**
@@ -16,8 +17,6 @@ public class GridAlignment extends GridBaseLayoutTestUI {
private void buildLayout() {
layout.setColumns(3);
layout.setRows(3);
- // layout.setHeight("600px");
- // layout.setWidth("900px");
for (int i = 0; i < components.length; i++) {
layout.addComponent(components[i]);
layout.setComponentAlignment(components[i], alignments[i]);
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridBaseLayoutTestUI.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridBaseLayoutTestUI.java
index d808b99bdc..7c5b223d15 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridBaseLayoutTestUI.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridBaseLayoutTestUI.java
@@ -21,8 +21,7 @@ public abstract class GridBaseLayoutTestUI extends BaseLayoutTestUI {
@Override
protected void setup(VaadinRequest request) {
- layout.setMargin(true);
- layout.setSizeFull();
+ layout.setSizeUndefined();
getUI().setContent(layout);
}
@@ -33,9 +32,7 @@ public abstract class GridBaseLayoutTestUI extends BaseLayoutTestUI {
layout.setMargin(false);
final AbstractComponent c1 = getTestTable();
- c1.setSizeFull();
final AbstractComponent c2 = getTestTable();
- c2.setSizeFull();
class SetSizeButton extends Button {
SetSizeButton(final String size) {
@@ -48,11 +45,12 @@ public abstract class GridBaseLayoutTestUI extends BaseLayoutTestUI {
} else if (compType == "component") {
c2.setHeight(size);
c2.setWidth(size);
+ c2.setCaption("Configured width");
}
});
}
}
- Button btn1 = new SetSizeButton("550px");
+ Button btn1 = new SetSizeButton("350px");
Button btn2 = new SetSizeButton("-1px");
Button btn3 = new SetSizeButton("75%");
Button btn4 = new SetSizeButton("100%");
@@ -74,5 +72,6 @@ public abstract class GridBaseLayoutTestUI extends BaseLayoutTestUI {
newLabel.setSizeUndefined();
layout.addComponent(newLabel);
});
+ btn2.setCaption(btn2.getCaption() + " + add Label");
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridComponentSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridComponentSizing.java
index 403fc30305..5b91b78b51 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridComponentSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridComponentSizing.java
@@ -8,5 +8,6 @@ public class GridComponentSizing extends GridBaseLayoutTestUI {
protected void setup(VaadinRequest request) {
getLayoutForLayoutSizing("component");
super.setup(request);
+ layout.setSizeFull();
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridIcon.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridIcon.java
index e952574047..be9e36e96c 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridIcon.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridIcon.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.GridLayout;
import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Link;
@@ -19,4 +20,13 @@ public class GridIcon extends GridBaseLayoutTestUI {
layout.addComponent(createLabelsFields(TabSheet.class, true, ""));
super.setup(request);
}
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "400px", "-1px");
+ l1.setSpacing(true);
+ l2.setSpacing(true);
+ mainLayout.setSpacing(true);
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutExpand.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutExpand.java
index 8578e9f958..bb5be728d6 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutExpand.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutExpand.java
@@ -10,6 +10,7 @@ public class GridLayoutExpand extends GridBaseLayoutTestUI {
protected void setup(VaadinRequest request) {
buildLayout();
super.setup(request);
+ layout.setSizeFull();
}
private void buildLayout() {
@@ -27,8 +28,6 @@ public class GridLayoutExpand extends GridBaseLayoutTestUI {
}
Table t1 = getTestTable();
Table t2 = getTestTable();
- t1.setSizeFull();
- t2.setSizeFull();
layout.setColumns(4);
layout.setRows(4);
layout.addComponent(new ExpandButton(1, 2, 1.0f, 0.0f), 0, 0);
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutMarginSpacing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutMarginSpacing.java
index 1e220cbd69..1b15b435bf 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutMarginSpacing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutMarginSpacing.java
@@ -17,8 +17,8 @@ public class GridLayoutMarginSpacing extends GridBaseLayoutTestUI {
private void buildLayout() {
Table t1 = getTestTable();
Table t2 = getTestTable();
- t1.setSizeFull();
- t2.setSizeFull();
+ t1.setSizeUndefined();
+ t2.setSizeUndefined();
final Button btn1 = new Button("Toggle margin on/off");
btn1.addClickListener(event -> {
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegError.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegError.java
index dcd5c63310..27c82984a2 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegError.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegError.java
@@ -2,6 +2,7 @@ package com.vaadin.tests.layouts.layouttester.GridLayout;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.TestDateField;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Label;
@@ -31,4 +32,10 @@ public class GridLayoutRegError extends GridBaseLayoutTestUI {
layout.addComponent(createLabelsFields(CheckBox.class, true, ""));
}
+
+ @Override
+ protected void setDefaultForVertical(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2) {
+ setLayoutMeasures(l1, l2, "800px", "800px");
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizing.java
index 6074cdae52..671fdf1163 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizing.java
@@ -1,6 +1,12 @@
package com.vaadin.tests.layouts.layouttester.GridLayout;
import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.ContentMode;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
public class GridLayoutSizing extends GridBaseLayoutTestUI {
@@ -8,5 +14,63 @@ public class GridLayoutSizing extends GridBaseLayoutTestUI {
protected void setup(VaadinRequest request) {
getLayoutForLayoutSizing("layout");
super.setup(request);
+ layout.setSizeFull();
+ }
+
+ @Override
+ protected void getLayoutForLayoutSizing(final String compType) {
+
+ layout.setSpacing(false);
+ layout.setMargin(false);
+
+ final AbstractComponent c1 = getTestTable();
+ final AbstractComponent c2 = getTestTable();
+
+ class SetSizeButton extends Button {
+ SetSizeButton(final String size) {
+ super();
+ setCaption("Set size " + size);
+ addClickListener(new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ if (compType == "layout") {
+ layout.setHeight(size);
+ layout.setWidth(size);
+ } else if (compType == "component") {
+ c2.setHeight(size);
+ c2.setWidth(size);
+ } else {
+ }
+
+ }
+ });
+ }
+
+ }
+ Button btn1 = new SetSizeButton("600px");
+ Button btn2 = new SetSizeButton("-1px");
+ Button btn3 = new SetSizeButton("75%");
+ Button btn4 = new SetSizeButton("100%");
+
+ layout.addComponent(btn1);
+ layout.addComponent(btn2);
+ layout.addComponent(btn3);
+ layout.addComponent(btn4);
+ layout.addComponent(c1);
+ layout.addComponent(new Label(
+ "<div style='height: 1px'></div><hr /><div style='height: 1px'></div>",
+ ContentMode.HTML));
+ layout.addComponent(c2);
+ btn2.addClickListener(new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ Label newLabel = new Label("--- NEW LABEL ---");
+ newLabel.setSizeUndefined();
+ layout.addComponent(newLabel);
+ }
+ });
+ btn2.setCaption(btn2.getCaption() + " + add Label");
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAddReplaceMove.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAddReplaceMove.java
index 2a20a751b6..4e666c7ba5 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAddReplaceMove.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAddReplaceMove.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
import com.vaadin.tests.layouts.layouttester.BaseAddReplaceMove;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalLayout;
public class HAddReplaceMove extends BaseAddReplaceMove {
@@ -12,4 +13,10 @@ public class HAddReplaceMove extends BaseAddReplaceMove {
super(HorizontalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "1200px", h);
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAlignment.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAlignment.java
index 6becfc75c5..156d5f21f3 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAlignment.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HAlignment.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
import com.vaadin.tests.layouts.layouttester.BaseAlignment;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalLayout;
public class HAlignment extends BaseAlignment {
@@ -9,4 +10,10 @@ public class HAlignment extends BaseAlignment {
super(HorizontalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "1000px", "200px");
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HComponentSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HComponentSizing.java
index 1c02002631..f107d8c4fc 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HComponentSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HComponentSizing.java
@@ -1,11 +1,36 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
+import java.util.Iterator;
+
+import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.layouts.layouttester.BaseComponentSizing;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
public class HComponentSizing extends BaseComponentSizing {
public HComponentSizing() {
super(HorizontalLayout.class);
}
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ super.setup(request);
+ Iterator<Component> iterator = l2.iterator();
+ while (iterator.hasNext()) {
+ Component component = iterator.next();
+ if (component instanceof Label) {
+ component.setWidth("30px");
+ }
+ }
+ }
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "900px", h);
+ l1.setSizeUndefined();
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HIcon.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HIcon.java
index 772cda2035..9f45c8bbf7 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HIcon.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HIcon.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
import com.vaadin.tests.layouts.layouttester.BaseIcon;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalLayout;
public class HIcon extends BaseIcon {
@@ -9,4 +10,10 @@ public class HIcon extends BaseIcon {
super(HorizontalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "2900px", "200px");
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutMarginSpacing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutMarginSpacing.java
index 760f2d7497..6789650c70 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutMarginSpacing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutMarginSpacing.java
@@ -1,7 +1,14 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
+import java.util.Iterator;
+
+import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.layouts.layouttester.BaseLayoutForSpacingMargin;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.v7.ui.Table;
public class HLayoutMarginSpacing extends BaseLayoutForSpacingMargin {
@@ -9,4 +16,24 @@ public class HLayoutMarginSpacing extends BaseLayoutForSpacingMargin {
super(HorizontalLayout.class);
}
+ @Override
+ protected void setup(VaadinRequest request) {
+ super.setup(request);
+ Iterator<Component> iterator = l2.iterator();
+ while (iterator.hasNext()) {
+ Component component = iterator.next();
+ if (component instanceof Table) {
+ component.setSizeUndefined();
+ } else if (component instanceof Label) {
+ component.setWidth("30px");
+ }
+ }
+ }
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ l1.setSizeUndefined();
+ l2.setSizeUndefined();
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegError.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegError.java
index f78d1d4d6c..e5fda46012 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegError.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegError.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
import com.vaadin.tests.layouts.layouttester.BaseRegError;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalLayout;
public class HLayoutRegError extends BaseRegError {
@@ -8,4 +9,10 @@ public class HLayoutRegError extends BaseRegError {
public HLayoutRegError() {
super(HorizontalLayout.class);
}
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "3200px", "200px");
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutSizing.java
index 37c5e9d9e6..2f9cb29041 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutSizing.java
@@ -1,11 +1,43 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
-import com.vaadin.tests.layouts.layouttester.BaseComponentSizing;
+import java.util.Iterator;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.layouts.layouttester.BaseLayoutSizing;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
-public class HLayoutSizing extends BaseComponentSizing {
+public class HLayoutSizing extends BaseLayoutSizing {
public HLayoutSizing() {
super(HorizontalLayout.class);
}
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ super.setup(request);
+ Iterator<Component> iterator = l2.iterator();
+ while (iterator.hasNext()) {
+ Component component = iterator.next();
+ if (component instanceof Label) {
+ component.setWidth("30px");
+ }
+ }
+ mainLayout.setSizeFull();
+ getLayout().setSizeFull();
+ if (getLayout().getParent() instanceof VerticalLayout) {
+ ((VerticalLayout) getLayout().getParent()).setSizeFull();
+ }
+ mainLayout.setExpandRatio(l2, 2);
+ }
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "900px", h);
+ l1.setSizeUndefined();
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignment.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignment.java
index 3e020b52da..7b512d5b52 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignment.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignment.java
@@ -1,10 +1,17 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
import com.vaadin.tests.layouts.layouttester.BaseAlignment;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.VerticalLayout;
public class VAlignment extends BaseAlignment {
public VAlignment() {
super(VerticalLayout.class);
}
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "400px", "500px");
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizing.java
index 2eb3616623..2fef294c2b 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizing.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
import com.vaadin.tests.layouts.layouttester.BaseComponentSizing;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.VerticalLayout;
public class VComponentSizing extends BaseComponentSizing {
@@ -9,4 +10,13 @@ public class VComponentSizing extends BaseComponentSizing {
super(VerticalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ l1.setWidth("400px");
+ l1.setHeight("-1px");
+ l2.setWidth("400px");
+ l2.setHeight("800px");
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VIcon.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VIcon.java
index 1fa159a2be..4e9e215abc 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VIcon.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VIcon.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
import com.vaadin.tests.layouts.layouttester.BaseIcon;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.VerticalLayout;
public class VIcon extends BaseIcon {
@@ -9,4 +10,13 @@ public class VIcon extends BaseIcon {
super(VerticalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "400px", "-1px");
+ l1.setSpacing(true);
+ l2.setSpacing(true);
+ mainLayout.setSpacing(true);
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutMarginSpacing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutMarginSpacing.java
index 87598cd96c..4eeec256be 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutMarginSpacing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutMarginSpacing.java
@@ -1,7 +1,14 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
+import java.util.Iterator;
+
+import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.layouts.layouttester.BaseLayoutForSpacingMargin;
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
+import com.vaadin.v7.ui.Table;
public class VLayoutMarginSpacing extends BaseLayoutForSpacingMargin {
@@ -9,4 +16,25 @@ public class VLayoutMarginSpacing extends BaseLayoutForSpacingMargin {
super(VerticalLayout.class);
}
+ @Override
+ protected void setup(VaadinRequest request) {
+ super.setup(request);
+ Iterator<Component> iterator = l2.iterator();
+ while (iterator.hasNext()) {
+ Component component = iterator.next();
+ if (component instanceof Table) {
+ component.setSizeUndefined();
+ } else if (component instanceof Label) {
+ component.setWidth("100%");
+ }
+ }
+ }
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ l1.setSizeUndefined();
+ l2.setSizeUndefined();
+ }
+
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegError.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegError.java
index cc64105e85..8990724b45 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegError.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegError.java
@@ -1,6 +1,7 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
import com.vaadin.tests.layouts.layouttester.BaseRegError;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.VerticalLayout;
public class VLayoutRegError extends BaseRegError {
@@ -8,4 +9,10 @@ public class VLayoutRegError extends BaseRegError {
public VLayoutRegError() {
super(VerticalLayout.class);
}
+
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ super.setLayoutMeasures(l1, l2, "400px", "900px");
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutSizing.java b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutSizing.java
index d6d91700c7..3e3f046882 100644
--- a/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutSizing.java
+++ b/uitest/src/main/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutSizing.java
@@ -1,12 +1,21 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
-import com.vaadin.tests.layouts.layouttester.BaseComponentSizing;
+import com.vaadin.tests.layouts.layouttester.BaseLayoutSizing;
+import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.VerticalLayout;
-public class VLayoutSizing extends BaseComponentSizing {
+public class VLayoutSizing extends BaseLayoutSizing {
public VLayoutSizing() {
super(VerticalLayout.class);
}
+ @Override
+ protected void setLayoutMeasures(AbstractOrderedLayout l1,
+ AbstractOrderedLayout l2, String w, String h) {
+ l1.setWidth("400px");
+ l1.setHeight("-1px");
+ l2.setWidth("400px");
+ l2.setHeight("500px");
+ }
}
diff --git a/uitest/src/main/java/com/vaadin/tests/tooltip/NestedOverlayTooltip.java b/uitest/src/main/java/com/vaadin/tests/tooltip/NestedOverlayTooltip.java
new file mode 100644
index 0000000000..9dd23e8dd4
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/tooltip/NestedOverlayTooltip.java
@@ -0,0 +1,120 @@
+package com.vaadin.tests.tooltip;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class NestedOverlayTooltip extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Button openWindowButton = createOpenWindowButton();
+ PopupView openPopUpViewLink = createOpenPopUpViewButton();
+
+ MenuBar menuBar = new MenuBar();
+ MenuItem menuItem = menuBar.addItem("First item");
+ MenuItem firstDropdownItem = menuItem.addItem("Dropdown item");
+ firstDropdownItem.setDescription("Dropdown Item tooltip");
+
+ addComponents(openWindowButton, openPopUpViewLink, menuBar);
+ }
+
+ private Button createOpenWindowButton() {
+ Button openWindowButton = new Button("Open window");
+ openWindowButton.setDescription("Button tooltip");
+ openWindowButton.addClickListener(event -> {
+ Window window = new Window();
+ window.center();
+ window.setWidth("500px");
+ window.setHeight("500px");
+
+ Button openInnerWindowButton = new Button("Open inner window");
+ openInnerWindowButton.setDescription("Button tooltip");
+ openInnerWindowButton.addClickListener(innerEvent -> {
+ Window innerWindow = new Window();
+ innerWindow.center();
+ innerWindow.setWidth("400px");
+ innerWindow.setHeight("400px");
+
+ Button dummyButton = new Button(
+ "This button doesn't do a thing");
+ dummyButton.setDescription("DummyButton tooltip");
+
+ MenuBar innerWindowMenuBar = new MenuBar();
+ innerWindowMenuBar.setDescription("MenuBar tooltip");
+ MenuItem menuItem = innerWindowMenuBar
+ .addItem("First item in inner window");
+ MenuItem firstDropdownItem = menuItem
+ .addItem("Inner window dropdown item");
+ firstDropdownItem
+ .setDescription("Inner window dropdown item tooltip");
+
+ innerWindow.setContent(
+ new VerticalLayout(dummyButton, innerWindowMenuBar));
+ addWindow(innerWindow);
+ });
+
+ MenuBar windowMenuBar = new MenuBar();
+ windowMenuBar.setDescription("MenuBar tooltip");
+ MenuItem menuItem = windowMenuBar.addItem("First item in window");
+ MenuItem firstDropdownItem = menuItem
+ .addItem("Window dropdown item");
+ firstDropdownItem.setDescription("Window dropdown item tooltip");
+
+ window.setContent(
+ new VerticalLayout(openInnerWindowButton, windowMenuBar));
+ addWindow(window);
+ });
+ return openWindowButton;
+ }
+
+ private PopupView createOpenPopUpViewButton() {
+ PopupView dummyView = new PopupView("Open empty popupView",
+ new VerticalLayout());
+ dummyView.setDescription("This dummy popupView has no content");
+
+ MenuBar innerPopupMenuBar = new MenuBar();
+ innerPopupMenuBar.setDescription("MenuBar tooltip");
+ MenuItem innerPopupMenuItem = innerPopupMenuBar
+ .addItem("First item in inner popupView");
+ MenuItem firstDropdownInnerPopupItem = innerPopupMenuItem
+ .addItem("Inner popupView dropdown item");
+ firstDropdownInnerPopupItem
+ .setDescription("Inner popupView dropdown item tooltip");
+
+ PopupView innerView = new PopupView("Open inner popupView",
+ new VerticalLayout(dummyView, innerPopupMenuBar));
+ innerView.setDescription("This inner popupView has content");
+
+ MenuBar popupMenuBar = new MenuBar();
+ popupMenuBar.setDescription("MenuBar tooltip");
+ MenuItem popupMenuItem = popupMenuBar
+ .addItem("First item in popupView");
+ MenuItem firstDropdownPopupItem = popupMenuItem
+ .addItem("PopupView dropdown item");
+ firstDropdownPopupItem
+ .setDescription("PopupView dropdown item tooltip");
+
+ PopupView popupView = new PopupView("Open popupView",
+ new VerticalLayout(innerView, innerView, popupMenuBar));
+ popupView.setDescription("This popupView has content");
+ return popupView;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "MenuItem's tooltip should be visible even when "
+ + "the MenuBar is located within a Window, PopupView, "
+ + "or some other component that extends VOverlay";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11212;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/widgetset/client/upload/AllowUploadWithoutFilenameConnector.java b/uitest/src/main/java/com/vaadin/tests/widgetset/client/upload/AllowUploadWithoutFilenameConnector.java
new file mode 100644
index 0000000000..d8e9b41610
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/widgetset/client/upload/AllowUploadWithoutFilenameConnector.java
@@ -0,0 +1,25 @@
+package com.vaadin.tests.widgetset.client.upload;
+
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.client.ui.VUpload;
+import com.vaadin.client.ui.upload.UploadConnector;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.tests.widgetset.server.upload.AllowUploadWithoutFilenameExtension;
+
+@Connect(AllowUploadWithoutFilenameExtension.class)
+public class AllowUploadWithoutFilenameConnector
+ extends AbstractExtensionConnector {
+
+ @Override
+ protected void extend(ServerConnector target) {
+ UploadConnector connector = ((UploadConnector) target);
+ allowUploadWithoutFilename(connector.getWidget());
+ }
+
+ private native void allowUploadWithoutFilename(VUpload upload)
+ /*-{
+ upload.@com.vaadin.client.ui.VUpload::allowUploadWithoutFilename = true;
+ }-*/;
+
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/widgetset/server/upload/AllowUploadWithoutFilenameExtension.java b/uitest/src/main/java/com/vaadin/tests/widgetset/server/upload/AllowUploadWithoutFilenameExtension.java
new file mode 100644
index 0000000000..8f6620b43b
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/widgetset/server/upload/AllowUploadWithoutFilenameExtension.java
@@ -0,0 +1,13 @@
+package com.vaadin.tests.widgetset.server.upload;
+
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.ui.Upload;
+
+public class AllowUploadWithoutFilenameExtension extends AbstractExtension {
+
+ public static AllowUploadWithoutFilenameExtension wrap(Upload upload) {
+ AllowUploadWithoutFilenameExtension extension = new AllowUploadWithoutFilenameExtension();
+ extension.extend(upload);
+ return extension;
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java b/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java
new file mode 100644
index 0000000000..0bde409332
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilter.java
@@ -0,0 +1,89 @@
+/*
+* Copyright 2000-2020 Vaadin Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License. You may obtain a copy of
+* the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+* License for the specific language governing permissions and limitations under
+* the License.
+*/
+package com.vaadin.v7.tests.components.combobox;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.v7.data.util.BeanContainer;
+import com.vaadin.v7.ui.AbstractSelect.ItemCaptionMode;
+import com.vaadin.v7.ui.ComboBox;
+
+/**
+ * Test for issue #11246 where ComboBox set to render from Property does not
+ * filter correctly when page size is 0
+ *
+ * @author Vaadin Ltd
+ */
+@SuppressWarnings("deprecation")
+public class ComboboxPageLengthZeroFilter extends AbstractTestUI {
+
+ public static class Topping {
+ private int id;
+ private String name;
+
+ public Topping(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ BeanContainer<Integer, Topping> container = new BeanContainer<Integer, Topping>(
+ Topping.class);
+ container.setBeanIdProperty("id");
+ for (int i = 0; i < 12; i++) {
+ container.addBean(new Topping(i, "Topping " + i));
+ }
+
+ final ComboBox comboBox = new ComboBox();
+ comboBox.setPageLength(0);
+ comboBox.setItemCaptionMode(ItemCaptionMode.PROPERTY);
+ comboBox.setItemCaptionPropertyId("name");
+ comboBox.setContainerDataSource(container);
+ comboBox.setInvalidAllowed(false);
+ comboBox.setNullSelectionAllowed(false);
+ comboBox.setTextInputAllowed(true);
+
+ getLayout().addComponent(comboBox);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11246;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Filtering should work even when ComboBox page length is zero.";
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java b/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
index fd49782d67..4fc4106bde 100644
--- a/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/VerifyBrowserVersionTest.java
@@ -25,10 +25,10 @@ public class VerifyBrowserVersionTest extends MultiBrowserTest {
// Chrome version does not necessarily match the desired version
// because of auto updates...
browserIdentifier = getExpectedUserAgentString(
- getDesiredCapabilities()) + "78";
+ getDesiredCapabilities()) + "83";
} else if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
browserIdentifier = getExpectedUserAgentString(
- getDesiredCapabilities()) + "58";
+ getDesiredCapabilities()) + "75";
} else {
browserIdentifier = getExpectedUserAgentString(desiredCapabilities)
+ desiredCapabilities.getVersion();
diff --git a/uitest/src/test/java/com/vaadin/tests/components/colorpicker/ValoColorPickerInputFormatsTest.java b/uitest/src/test/java/com/vaadin/tests/components/colorpicker/ValoColorPickerInputFormatsTest.java
index 5c4207ddc4..c4f8c809c2 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/colorpicker/ValoColorPickerInputFormatsTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/colorpicker/ValoColorPickerInputFormatsTest.java
@@ -148,7 +148,7 @@ public class ValoColorPickerInputFormatsTest extends MultiBrowserTest {
// verify there are errors
assertTrue(previewElement.getColorFieldContainsErrors());
// verify value has not been changed
- assertEquals(previewElement.getColorFieldValue(), "#xyz");
+ assertEquals("#xyz", previewElement.getColorFieldValue());
}
private void setColorpickerValue(String value) {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayoutTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayoutTest.java
new file mode 100644
index 0000000000..f169e56ab5
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxAtBottomEdgeWithinHorizontalLayoutTest.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.components.combobox;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboBoxAtBottomEdgeWithinHorizontalLayoutTest
+ extends MultiBrowserTest {
+
+ @Test
+ public void ensurePopupInView() {
+ openTestURL();
+
+ ComboBoxElement cb = $(ComboBoxElement.class).first();
+ cb.openPopup();
+ WebElement popup = cb.getSuggestionPopup();
+
+ int cbBottom = cb.getLocation().getY() + cb.getSize().getHeight();
+ int popupBottom = popup.getLocation().getY()
+ + popup.getSize().getHeight();
+ assertGreaterOrEqual(String.format(
+ "Popup should not open below the ComboBox at the "
+ + "bottom edge of the viewport. ComboBox: %s, Popup: %s",
+ cbBottom, popupBottom), cbBottom, popupBottom);
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java
new file mode 100644
index 0000000000..578f2b5c84
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.combobox;
+
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboBoxReadOnlyPopupTest extends MultiBrowserTest {
+
+ @Test
+ public void expandedComboBoxSetToReadOnlyShouldHidePopup() {
+ openTestURL();
+
+ ComboBoxElement comboBox = $(ComboBoxElement.class).first();
+ comboBox.openPopup();
+
+ // Calls comboBox.setReadOnly(true);
+ comboBox.sendKeys(String.valueOf('q'));
+
+ assertFalse("Read-only ComboBox's popup should be hidden!",
+ comboBox.isPopupOpen());
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcutTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcutTest.java
new file mode 100644
index 0000000000..8ed2da2b77
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/CompatibilityDateFieldShortcutTest.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.datefield;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.testbench.elements.NotificationElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class CompatibilityDateFieldShortcutTest extends SingleBrowserTest {
+
+ private static final String DATEFIELD_VALUE_ORIGINAL = "11/01/2018";
+ private static final String DATEFIELD_VALUE_MODIFIED = "21/01/2018";
+
+ @Test
+ public void modifyValueAndPressEnter() {
+ openTestURL();
+
+ DateFieldElement dateField = $(DateFieldElement.class).first();
+ WebElement dateFieldText = dateField.findElement(By.tagName("input"));
+
+ assertEquals("DateField value should be \"" + DATEFIELD_VALUE_ORIGINAL
+ + "\"", DATEFIELD_VALUE_ORIGINAL, dateField.getValue());
+
+ dateFieldText.click();
+ dateFieldText.sendKeys(Keys.HOME, Keys.DELETE, "2");
+ dateFieldText.sendKeys(Keys.ENTER);
+
+ assertEquals("DateField value should be \"" + DATEFIELD_VALUE_MODIFIED
+ + "\"", DATEFIELD_VALUE_MODIFIED, dateField.getValue());
+
+ assertEquals(DATEFIELD_VALUE_MODIFIED,
+ $(NotificationElement.class).first().getCaption());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldBinderCrossValidationTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldBinderCrossValidationTest.java
index 77bf68d9a3..4a47f3786a 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldBinderCrossValidationTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldBinderCrossValidationTest.java
@@ -10,6 +10,7 @@ import com.vaadin.testbench.elements.LabelElement;
import com.vaadin.tests.tb3.SingleBrowserTest;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public class DateFieldBinderCrossValidationTest extends SingleBrowserTest {
@@ -29,6 +30,8 @@ public class DateFieldBinderCrossValidationTest extends SingleBrowserTest {
fromFieldText.sendKeys("2019/01/01", Keys.ENTER);
toFieldText.sendKeys("2018/02/02", Keys.ENTER);
+ sleep(200);
+
assertEquals("Error message should contain the information",
EXPECTED_ERROR, label.getText());
@@ -37,4 +40,49 @@ public class DateFieldBinderCrossValidationTest extends SingleBrowserTest {
assertEquals("Error message should be null", EXPECTED_NULL_ERROR,
label.getText());
}
+
+ @Test
+ public void dateFieldRangeYearDigitsIncrease() {
+ openTestURL();
+
+ DateFieldElement toField = $(DateFieldElement.class).id("to-field");
+ // This will set the rangeEnd of the fromField
+ WebElement toFieldText = toField.findElement(By.tagName("input"));
+ toFieldText.sendKeys("9999/12/31", Keys.ENTER);
+
+ DateFieldElement fromField = $(DateFieldElement.class).id("from-field");
+ WebElement fromFieldText = fromField.findElement(By.tagName("input"));
+ // Set year to 9999, next year and next month will be on 10000
+ fromFieldText.sendKeys("9999/12/01", Keys.ENTER);
+ fromField.openPopup();
+ waitForElementPresent(By.className("v-datefield-popup"));
+
+ WebElement monthYearLabel = findElement(By.className("v-datefield-calendarpanel-month"));
+
+ // The next month button should be disabled
+ findElement(By.className("v-button-nextmonth")).click();
+ // Test that year has not changed
+ assertTrue("Month label should contain 9999, contains: "+monthYearLabel.getText(),monthYearLabel.getText().contains("9999"));
+
+ // The next year button should be disabled
+ findElement(By.className("v-button-nextyear")).click();
+ // Test that year has not changed
+ assertTrue("Month label should contain 9999, contains: "+monthYearLabel.getText(),monthYearLabel.getText().contains("9999"));
+ }
+
+ @Test
+ public void dateFieldRangeYearBigNumbersPopupOpens() {
+ openTestURL();
+
+ DateFieldElement toField = $(DateFieldElement.class).id("to-field");
+ // This will set the rangeEnd of the fromField
+ WebElement toFieldText = toField.findElement(By.tagName("input"));
+ toFieldText.sendKeys("10000/12/31", Keys.ENTER);
+ DateFieldElement fromField = $(DateFieldElement.class).id("from-field");
+
+ // Test that popup opens
+ fromField.openPopup();
+ waitForElementPresent(By.className("v-datefield-popup"));
+ assertElementPresent(By.className("v-datefield-popup"));
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldFaultyInputNotValidTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldFaultyInputNotValidTest.java
index 3a3b6cd069..87cb115ae5 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldFaultyInputNotValidTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldFaultyInputNotValidTest.java
@@ -6,7 +6,9 @@ import java.time.LocalDate;
import org.junit.Test;
import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.WebElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.DateFieldElement;
@@ -46,6 +48,7 @@ public class DateFieldFaultyInputNotValidTest extends SingleBrowserTest {
public void testDateOutOfRange() {
openTestURL();
DateFieldElement dateField = $(DateFieldElement.class).first();
+ WebElement dateFieldText = dateField.findElement(By.tagName("input"));
dateField.setDate(LocalDate.now());
$(ButtonElement.class).first().click();
@@ -53,7 +56,7 @@ public class DateFieldFaultyInputNotValidTest extends SingleBrowserTest {
$(NotificationElement.class).first().getText());
$(NotificationElement.class).first().close();
- dateField.setDate(LocalDate.now().minusDays(7));
+ dateFieldText.sendKeys(LocalDate.now().minusDays(7).toString(), Keys.ENTER);
$(ButtonElement.class).first().click();
assertEquals("Last week should not be ok", "Fail",
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChangeTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChangeTest.java
new file mode 100644
index 0000000000..0473a582e8
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldMonthResolutionStatusChangeTest.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.datefield;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class DateFieldMonthResolutionStatusChangeTest
+ extends MultiBrowserTest {
+
+ @Test
+ public void testChangeReadOnly() {
+ openTestURL();
+ DateFieldElement df = $(DateFieldElement.class).first();
+ assertEquals("Unexpected initial date.", "1/19", df.getValue());
+
+ // switch read-only state
+ $(ButtonElement.class).id("readOnly").click();
+
+ assertEquals("Unexpected date change.", "1/19", df.getValue());
+ }
+
+ @Test
+ public void testAddRange() {
+ openTestURL();
+ DateFieldElement df = $(DateFieldElement.class).first();
+ assertEquals("Unexpected initial date.", "1/19", df.getValue());
+
+ // add range
+ $(ButtonElement.class).id("addRange").click();
+
+ assertEquals("Unexpected date change.", "1/19", df.getValue());
+ }
+
+ @Test
+ public void testPopupOpenWithDateNotInRange() {
+ openTestURL();
+ DateFieldElement df = $(DateFieldElement.class).first();
+
+ // switch read-only state
+ $(ButtonElement.class).id("readOnly").click();
+ // set value before range
+ $(ButtonElement.class).id("resetValue").click();
+ // add range, previously set date is not in range
+ $(ButtonElement.class).id("addRange").click();
+
+ // Test that popup still opens
+ df.openPopup();
+ waitForElementPresent(By.className("v-datefield-popup"));
+ assertElementPresent(By.className("v-datefield-popup"));
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldReadOnlyTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldReadOnlyTest.java
index 9418a5011b..c927ed5661 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldReadOnlyTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateFieldReadOnlyTest.java
@@ -1,13 +1,18 @@
package com.vaadin.tests.components.datefield;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import org.junit.Test;
-import org.openqa.selenium.Keys;
+import org.openqa.selenium.ElementNotInteractableException;
+import org.openqa.selenium.WebElement;
import com.vaadin.testbench.By;
-import com.vaadin.testbench.elements.AbstractDateFieldElement;
import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.DateFieldElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
public class DateFieldReadOnlyTest extends MultiBrowserTest {
@@ -17,27 +22,51 @@ public class DateFieldReadOnlyTest extends MultiBrowserTest {
throws IOException, InterruptedException {
openTestURL();
- compareScreen("initial-date");
+ DateFieldElement df = $(DateFieldElement.class).first();
+ WebElement dfButton = df
+ .findElement(By.className("v-datefield-button"));
+
+ // ensure initial read-only state works and pop-up cannot be opened
+ assertTrue(df.hasClassName("v-readonly"));
+ assertEquals("none", dfButton.getCssValue("display"));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
+
+ assertFalse(openPopup(df));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
+
+ // ensure read-only state can be removed and the component is still
+ // functional
toggleReadOnly();
+ assertFalse(df.hasClassName("v-readonly"));
+ assertEquals("inline-block", dfButton.getCssValue("display"));
- openPopup();
- compareScreen("readwrite-popup-date");
+ assertTrue(openPopup(df));
+ assertEquals(1,
+ findElements(By.className("v-datefield-calendarpanel")).size());
- closePopup();
+ // ensure read-only state can be re-applied, pop-up is closed and cannot
+ // be re-opened
toggleReadOnly();
- compareScreen("readonly-date");
- }
+ assertTrue(df.hasClassName("v-readonly"));
+ assertEquals("none", dfButton.getCssValue("display"));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
- private void closePopup() {
- findElement(By.className("v-datefield-calendarpanel"))
- .sendKeys(Keys.RETURN);
+ assertFalse(openPopup(df));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
}
- private void openPopup() {
- // waiting for openPopup() in TB4 beta1:
- // http://dev.vaadin.com/ticket/13766
- $(AbstractDateFieldElement.class).first()
- .findElement(By.tagName("button")).click();
+ private boolean openPopup(DateFieldElement df) {
+ // ensure the hidden button cannot be interacted with
+ try {
+ df.openPopup();
+ return true;
+ } catch (ElementNotInteractableException e) {
+ return false;
+ }
}
private void toggleReadOnly() {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldReadOnlyTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldReadOnlyTest.java
index 668c0a6123..37e5694930 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldReadOnlyTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldReadOnlyTest.java
@@ -1,13 +1,18 @@
package com.vaadin.tests.components.datefield;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import org.junit.Test;
-import org.openqa.selenium.Keys;
+import org.openqa.selenium.ElementNotInteractableException;
+import org.openqa.selenium.WebElement;
import com.vaadin.testbench.By;
-import com.vaadin.testbench.elements.AbstractDateFieldElement;
import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.DateTimeFieldElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
public class DateTimeFieldReadOnlyTest extends MultiBrowserTest {
@@ -17,27 +22,51 @@ public class DateTimeFieldReadOnlyTest extends MultiBrowserTest {
throws IOException, InterruptedException {
openTestURL();
- compareScreen("initial-date");
+ DateTimeFieldElement df = $(DateTimeFieldElement.class).first();
+ WebElement dfButton = df
+ .findElement(By.className("v-datefield-button"));
+
+ // ensure initial read-only state works and pop-up cannot be opened
+ assertTrue(df.hasClassName("v-readonly"));
+ assertEquals("none", dfButton.getCssValue("display"));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
+
+ assertFalse(openPopup(df));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
+
+ // ensure read-only state can be removed and the component is still
+ // functional
toggleReadOnly();
+ assertFalse(df.hasClassName("v-readonly"));
+ assertEquals("inline-block", dfButton.getCssValue("display"));
- openPopup();
- compareScreen("readwrite-popup-date");
+ assertTrue(openPopup(df));
+ assertEquals(1,
+ findElements(By.className("v-datefield-calendarpanel")).size());
- closePopup();
+ // ensure read-only state can be re-applied, pop-up is closed and cannot
+ // be re-opened
toggleReadOnly();
- compareScreen("readonly-date");
- }
+ assertTrue(df.hasClassName("v-readonly"));
+ assertEquals("none", dfButton.getCssValue("display"));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
- private void closePopup() {
- findElement(By.className("v-datefield-calendarpanel"))
- .sendKeys(Keys.RETURN);
+ assertFalse(openPopup(df));
+ assertTrue(findElements(By.className("v-datefield-calendarpanel"))
+ .isEmpty());
}
- private void openPopup() {
- // waiting for openPopup() in TB4 beta1:
- // http://dev.vaadin.com/ticket/13766
- $(AbstractDateFieldElement.class).first()
- .findElement(By.tagName("button")).click();
+ private boolean openPopup(DateTimeFieldElement df) {
+ // ensure the hidden button cannot be interacted with
+ try {
+ df.openPopup();
+ return true;
+ } catch (ElementNotInteractableException e) {
+ return false;
+ }
}
private void toggleReadOnly() {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDatesTest.java b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDatesTest.java
new file mode 100644
index 0000000000..1e7ea8eeef
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/datefield/DateTimeFieldZoneIdFutureSummerDatesTest.java
@@ -0,0 +1,155 @@
+package com.vaadin.tests.components.datefield;
+
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.END_YEAR_DATEFIELD_ID;
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.FIXED_RANGE_DATEFIELD_ID;
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.LOCALE_ID;
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.START_YEAR_DATEFIELD_ID;
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.VARIABLE_RANGE_DATEFIELD_ID;
+import static com.vaadin.tests.components.datefield.DateTimeFieldZoneIdFutureSummerDates.ZONE_ID;
+import static org.junit.Assert.assertTrue;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.Month;
+import java.util.Locale;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.testbench.elements.DateTimeFieldElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class DateTimeFieldZoneIdFutureSummerDatesTest
+ extends SingleBrowserTest {
+
+ private static final String TESTING_ZONE_ID = "CET";
+ private static final String TESTING_LOCALE = Locale.US.toString();
+
+ DateTimeFieldElement dateTimeFieldWithVariableRange;
+ DateTimeFieldElement dateTimeFieldWithDefaultRange;
+
+ DateFieldElement transitionsStartYear;
+ DateFieldElement transitionsEndYear;
+
+ ComboBoxElement zoneIdComboBox;
+ ComboBoxElement localeIdComboBox;
+
+ @Before
+ public void init() {
+ openTestURL();
+
+ dateTimeFieldWithVariableRange = $(DateTimeFieldElement.class)
+ .id(VARIABLE_RANGE_DATEFIELD_ID);
+ dateTimeFieldWithDefaultRange = $(DateTimeFieldElement.class)
+ .id(FIXED_RANGE_DATEFIELD_ID);
+
+ transitionsStartYear = $(DateFieldElement.class)
+ .id(START_YEAR_DATEFIELD_ID);
+ transitionsEndYear = $(DateFieldElement.class).id(END_YEAR_DATEFIELD_ID);
+
+ zoneIdComboBox = $(ComboBoxElement.class).id(ZONE_ID);
+ zoneIdComboBox.selectByText(TESTING_ZONE_ID);
+ localeIdComboBox = $(ComboBoxElement.class).id(LOCALE_ID);
+ localeIdComboBox.selectByText(TESTING_LOCALE);
+ }
+
+ @Test
+ public void dateTimeFieldWithCustomRangeShouldShowDSTWithinRange() {
+ final int testingRangeCentralYear = LocalDate.now().getYear() + 50;
+ final int testingRangeUpperYear = testingRangeCentralYear + 3;
+ final int testingRangeLowerYear = testingRangeCentralYear - 3;
+
+ transitionsEndYear.setDate(LocalDate.of(testingRangeUpperYear, 1, 1));
+ transitionsStartYear.setDate(LocalDate.of(testingRangeLowerYear, 1, 1));
+
+ LocalDateTime testingDateTime = LocalDateTime
+ .of(testingRangeCentralYear, Month.JULY, 1, 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CEST");
+
+ testingDateTime = LocalDateTime.of(testingRangeUpperYear, Month.JULY, 1,
+ 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CEST");
+
+ testingDateTime = LocalDateTime.of(testingRangeLowerYear, Month.JULY, 1,
+ 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CEST");
+ }
+
+ @Test
+ public void dateTimeFieldWithCustomRangeShouldNotShowDSTOutsideRange() {
+ final int testingRangeCentralYear = LocalDate.now().getYear() + 50;
+ final int testingRangeUpperYear = testingRangeCentralYear + 3;
+ final int testingRangeLowerYear = testingRangeCentralYear - 3;
+
+ transitionsEndYear.setDate(LocalDate.of(testingRangeUpperYear, 1, 1));
+ transitionsStartYear.setDate(LocalDate.of(testingRangeLowerYear, 1, 1));
+
+ // This year is out of specified range
+ LocalDateTime testingDateTime = LocalDateTime
+ .of(LocalDate.now().getYear(), Month.JULY, 1, 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CET");
+
+ // One year after the specified range
+ testingDateTime = LocalDateTime.of(testingRangeUpperYear + 1,
+ Month.JULY, 1, 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CET");
+
+ // One year before the specified range
+ testingDateTime = LocalDateTime.of(testingRangeLowerYear - 1,
+ Month.JULY, 1, 0, 0);
+ dateTimeFieldWithVariableRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithVariableRange, "CET");
+ }
+
+ @Test
+ public void dateTimeFieldWithDefaultRangeShouldShowDSTFrom1980Until20FutureYears() {
+ // The 1980 to 20 future years range is the hard-coded default range
+ // for which DST is shown if user doesn't provide a custom range
+
+ final int testingRangeLowerYear = 1980;
+ LocalDateTime testingDateTime = LocalDateTime.of(testingRangeLowerYear,
+ Month.JULY, 1, 0, 0);
+ dateTimeFieldWithDefaultRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithDefaultRange, "CEST");
+
+ final int testingRangeUpperYear = LocalDate.now().getYear() + 20;
+ testingDateTime = LocalDateTime.of(testingRangeUpperYear, Month.JULY, 1,
+ 0, 0);
+ dateTimeFieldWithDefaultRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithDefaultRange, "CEST");
+
+ final int testingCurrYear = LocalDate.now().getYear();
+ testingDateTime = LocalDateTime.of(testingCurrYear, Month.JULY, 1, 0,
+ 0);
+ dateTimeFieldWithDefaultRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithDefaultRange, "CEST");
+ }
+
+ @Test
+ public void dateTimeFieldWithDefaultRangeShouldNotShowDSTBefore1980() {
+ final LocalDateTime testingDateTime = LocalDateTime.of(1979, Month.JULY,
+ 1, 0, 0);
+ dateTimeFieldWithDefaultRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithDefaultRange, "CET");
+ }
+
+ @Test
+ public void dateTimeFieldWithDefaultRangeShouldNotShowDSTAfter20FutureYears() {
+ final LocalDateTime testingDateTime = LocalDateTime
+ .of(LocalDate.now().getYear() + 21, Month.JULY, 1, 0, 0);
+ dateTimeFieldWithDefaultRange.setDateTime(testingDateTime);
+ assertEndsWith(dateTimeFieldWithDefaultRange, "CET");
+ }
+
+ private void assertEndsWith(DateTimeFieldElement element, String suffix) {
+ final String text = element.getValue();
+ assertTrue(text + " should end with " + suffix, text.endsWith(suffix));
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSortTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSortTest.java
new file mode 100644
index 0000000000..e95c3d0792
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSortTest.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.GridElement.GridCellElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class CompatibilityGridToggleMultiSelectSortTest
+ extends SingleBrowserTest {
+
+ @Test
+ public void sortFirstColumnAfterToggle() {
+ openTestURL();
+
+ GridElement grid = $(GridElement.class).first();
+ ButtonElement button = $(ButtonElement.class).first();
+
+ button.click();
+
+ assertEquals("Unexpected initial sorting.", "0",
+ grid.getCell(0, 0).getText());
+
+ GridCellElement headerCell = grid.getHeaderCell(0, 0);
+
+ // sort ascending
+ headerCell.click();
+ assertEquals("Unexpected first sorting.", "0",
+ grid.getCell(0, 0).getText());
+
+ // sort descending
+ headerCell.click();
+ assertEquals("Unexpected second sorting.", "99.9",
+ grid.getCell(0, 0).getText());
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeightTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeightTest.java
new file mode 100644
index 0000000000..c167049eb9
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridDetailsAndUndefinedHeightTest.java
@@ -0,0 +1,39 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridDetailsAndUndefinedHeightTest extends MultiBrowserTest {
+
+ @Test
+ public void changingSelectionClosesOldDetails() {
+ openTestURL();
+ GridElement grid = $(GridElement.class).first();
+ grid.getCell(4, 0).click();
+ waitForElementPresent(By.className("v-grid-spacer"));
+
+ List<WebElement> spacers = grid
+ .findElements(By.className("v-grid-spacer"));
+ assertEquals("Unexpected amount of details rows", 1, spacers.size());
+ assertEquals("Unexpected details row contents", "Details 4",
+ spacers.get(0).findElement(By.className("v-label")).getText());
+
+ // change selection
+ grid.getCell(3, 0).click();
+
+ spacers = grid.findElements(By.className("v-grid-spacer"));
+ assertEquals("Unexpected amount of details rows", 1, spacers.size());
+ assertEquals("Unexpected details row contents", "Details 3",
+ spacers.get(0).findElement(By.className("v-label")).getText());
+
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridEditorFrozenColumnsUITest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridEditorFrozenColumnsUITest.java
index 34ef8847c2..23a747c4ea 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/GridEditorFrozenColumnsUITest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridEditorFrozenColumnsUITest.java
@@ -22,7 +22,7 @@ public class GridEditorFrozenColumnsUITest extends MultiBrowserTest {
openTestURL();
openEditor(10);
- sleep(500);
+ waitForElementPresent(By.className("v-grid-editor"));
compareScreen("noscroll");
scrollGridHorizontallyTo(100);
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnReplaceTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnReplaceTest.java
new file mode 100644
index 0000000000..4ad8a48fa2
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnReplaceTest.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class GridFrozenColumnReplaceTest extends SingleBrowserTest {
+
+ @Test
+ public void testChangingColumns() {
+ openTestURL("debug");
+
+ GridElement grid = $(GridElement.class).first();
+ String caption = grid.getHeaderCell(0, 1).getText();
+ assertFalse("Unexpected column caption: " + caption,
+ caption != null && caption.startsWith("New "));
+
+ $(ButtonElement.class).first().click();
+
+ assertEquals("Unexpected error notifications,", 0,
+ findElements(By.className("v-Notification-error")).size());
+
+ caption = grid.getHeaderCell(0, 1).getText();
+ assertTrue("Unexpected column caption: " + caption,
+ caption != null && caption.startsWith("New "));
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItemTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItemTest.java
new file mode 100644
index 0000000000..6d910208b7
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridRecalculateColumnWidthNewItemTest.java
@@ -0,0 +1,91 @@
+package com.vaadin.tests.components.grid;
+
+import static org.hamcrest.core.IsNot.not;
+import static org.hamcrest.number.IsCloseTo.closeTo;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.CheckBoxElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class GridRecalculateColumnWidthNewItemTest extends SingleBrowserTest {
+
+ GridElement grid;
+ ButtonElement addButton;
+ ButtonElement removeButton;
+
+ @Before
+ public void init() {
+ openTestURL();
+ grid = $(GridElement.class).first();
+ addButton = $(ButtonElement.class).id("add");
+ removeButton = $(ButtonElement.class).id("remove");
+ }
+
+ @Test
+ public void recalculateAfterAddingAndRemovingWorks() throws IOException {
+ assertEquals("CheckBox should be checked.", "checked",
+ $(CheckBoxElement.class).first().getValue());
+
+ int initialWidth = grid.getHeaderCell(0, 0).getSize().width;
+
+ addButton.click();
+ int newWidth = grid.getHeaderCell(0, 0).getSize().width;
+ // ensure the column width has increased significantly
+ assertThat(
+ "Unexpected column width after adding a row and calling recalculate.",
+ (double) newWidth, not(closeTo(initialWidth, 20)));
+
+ removeButton.click();
+ newWidth = grid.getHeaderCell(0, 0).getSize().width;
+ // ensure the column width has decreased significantly (even if it might
+ // not be exactly the original width)
+ assertThat(
+ "Unexpected column width after removing a row and calling recalculate.",
+ (double) newWidth, closeTo(initialWidth, 2));
+ }
+
+ @Test
+ public void addingWithoutRecalculateWorks() throws IOException {
+ CheckBoxElement checkBox = $(CheckBoxElement.class).first();
+ checkBox.click();
+ assertEquals("CheckBox should not be checked.", "unchecked",
+ checkBox.getValue());
+
+ int initialWidth = grid.getHeaderCell(0, 0).getSize().width;
+
+ addButton.click();
+ int newWidth = grid.getHeaderCell(0, 0).getSize().width;
+ // ensure the column width did not change significantly
+ assertThat(
+ "Unexpected column width after adding a row without calling recalculate.",
+ (double) newWidth, closeTo(initialWidth, 2));
+ }
+
+ @Test
+ public void removingWithoutRecalculateWorks() throws IOException {
+ // add a row before unchecking
+ addButton.click();
+
+ CheckBoxElement checkBox = $(CheckBoxElement.class).first();
+ checkBox.click();
+ assertEquals("CheckBox should not be checked.", "unchecked",
+ checkBox.getValue());
+
+ int initialWidth = grid.getHeaderCell(0, 0).getSize().width;
+
+ removeButton.click();
+ int newWidth = grid.getHeaderCell(0, 0).getSize().width;
+ // ensure the column width did not change significantly
+ assertThat(
+ "Unexpected column width after removing a row without calling recalculate.",
+ (double) newWidth, closeTo(initialWidth, 2));
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozenTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozenTest.java
new file mode 100644
index 0000000000..061e1d20e1
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridUnhideColumnsWithFrozenTest.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class GridUnhideColumnsWithFrozenTest extends SingleBrowserTest {
+
+ @Test
+ public void visibleFrozenColumnCount() {
+ openTestURL();
+
+ GridElement grid = $(GridElement.class).first();
+ List<WebElement> frozen = grid.getHeader()
+ .findElements(By.className("frozen"));
+ assertEquals("Unexpected frozen column count before unhiding", 3,
+ frozen.size());
+
+ grid.findElement(By.className("v-grid-sidebar-button")).click();
+ List<WebElement> hidden = findElement(
+ By.className("v-grid-sidebar-content"))
+ .findElements(By.className("hidden"));
+ assertEquals("Unexpected amount of hidden columns", 2, hidden.size());
+ assertEquals("Unexpected hidden column", "4", hidden.get(1).getText());
+ hidden.get(1).click();
+
+ frozen = grid.getHeader().findElements(By.className("frozen"));
+ assertEquals("Unexpected frozen column count after unhiding", 3,
+ frozen.size());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridWithFullWidthComponentsTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridWithFullWidthComponentsTest.java
new file mode 100644
index 0000000000..21285f3ed0
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridWithFullWidthComponentsTest.java
@@ -0,0 +1,61 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridWithFullWidthComponentsTest extends MultiBrowserTest {
+
+ @Test
+ public void testResizeUpAndDown() {
+ openTestURL();
+
+ WebElement hScrollBar = findElement(
+ By.className("v-grid-scroller-horizontal"));
+ assertEquals("Unexpected horizontal scrollbar visibility", "none",
+ hScrollBar.getCssValue("display"));
+
+ // increase the browser size
+ getDriver().manage().window().setSize(new Dimension(2000, 850));
+ sleep(300);
+
+ assertEquals("Unexpected horizontal scrollbar visibility", "none",
+ hScrollBar.getCssValue("display"));
+
+ // scale back again
+ getDriver().manage().window().setSize(new Dimension(1500, 850));
+ sleep(300);
+
+ assertEquals("Unexpected horizontal scrollbar visibility", "none",
+ hScrollBar.getCssValue("display"));
+ }
+
+ @Test
+ public void testResizeDownAndUp() {
+ openTestURL();
+
+ WebElement hScrollBar = findElement(
+ By.className("v-grid-scroller-horizontal"));
+ assertEquals("Unexpected horizontal scrollbar visibility", "none",
+ hScrollBar.getCssValue("display"));
+
+ // decrease the browser size far enough that scrollbars are needed
+ getDriver().manage().window().setSize(new Dimension(800, 850));
+ sleep(300);
+
+ assertEquals("Unexpected horizontal scrollbar visibility", "block",
+ hScrollBar.getCssValue("display"));
+
+ // scale back again
+ getDriver().manage().window().setSize(new Dimension(1500, 850));
+ sleep(300);
+
+ assertEquals("Unexpected horizontal scrollbar visibility", "none",
+ hScrollBar.getCssValue("display"));
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnlyTest.java b/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnlyTest.java
new file mode 100644
index 0000000000..1a2274754c
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupDisablingAndReadOnlyTest.java
@@ -0,0 +1,206 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.AbstractComponentElement.ReadOnlyException;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.RadioButtonGroupElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test styles, selectByText, and selection by clicking for all enabled/readOnly
+ * combinations and how toggling the states affects the selectability. The
+ * styles and behaviour should match for all combinations and selection
+ * attempts.
+ *
+ */
+public class RadioButtonGroupDisablingAndReadOnlyTest extends MultiBrowserTest {
+
+ private RadioButtonGroupElement group;
+ private List<WebElement> options;
+ private ButtonElement toggleEnabled;
+ private ButtonElement toggleReadOnly;
+ private ButtonElement clearSelection;
+
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ openTestURL();
+ group = $(RadioButtonGroupElement.class).first();
+ options = group.getOptionElements();
+ toggleEnabled = $(ButtonElement.class).caption("Toggle enabled")
+ .first();
+ toggleReadOnly = $(ButtonElement.class).caption("Toggle readOnly")
+ .first();
+ clearSelection = $(ButtonElement.class).caption("Clear selection")
+ .first();
+ }
+
+ private void testSelect() {
+ try {
+ group.selectByText("b");
+ } catch (ReadOnlyException e) {
+ // NOP
+ }
+ }
+
+ @Test
+ public void testEnabledToggleWhileReadOnly() {
+ assertTrue(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleEnabled.click();
+
+ assertTrue(group.hasClassName("v-readonly"));
+ assertFalse(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleEnabled.click();
+
+ assertTrue(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+ }
+
+ @Test
+ public void testEnabledToggleWhileNotReadOnly() {
+ toggleReadOnly.click();
+
+ assertFalse(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleEnabled.click();
+
+ assertFalse(group.hasClassName("v-readonly"));
+ assertFalse(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertEquals("b", group.getValue());
+
+ clearSelection.click();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertEquals("b", group.getValue());
+
+ clearSelection.click();
+ assertNull(group.getValue());
+
+ toggleEnabled.click();
+
+ assertFalse(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+ }
+
+ @Test
+ public void testReadOnlyToggleWhileDisabled() {
+ assertTrue(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleReadOnly.click();
+
+ assertFalse(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleReadOnly.click();
+
+ assertTrue(group.hasClassName("v-readonly"));
+ assertTrue(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+ }
+
+ @Test
+ public void testReadOnlyToggleWhileEnabled() {
+ toggleEnabled.click();
+
+ assertTrue(group.hasClassName("v-readonly"));
+ assertFalse(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+
+ toggleReadOnly.click();
+
+ assertFalse(group.hasClassName("v-readonly"));
+ assertFalse(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertEquals("b", group.getValue());
+
+ clearSelection.click();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertEquals("b", group.getValue());
+
+ clearSelection.click();
+ assertNull(group.getValue());
+
+ toggleReadOnly.click();
+
+ assertTrue(group.hasClassName("v-readonly"));
+ assertFalse(group.hasClassName("v-disabled"));
+
+ testSelect();
+ assertNull(group.getValue());
+
+ options.get(1).click();
+ assertNull(group.getValue());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java b/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java
new file mode 100644
index 0000000000..c93079b83e
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java
@@ -0,0 +1,77 @@
+package com.vaadin.tests.components.richtextarea;
+
+import static org.junit.Assert.assertTrue;
+
+import java.time.Duration;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openqa.selenium.Alert;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.NoSuchElementException;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.FluentWait;
+import org.openqa.selenium.support.ui.Wait;
+
+import com.vaadin.testbench.elements.RichTextAreaElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class RichTextAreaCreateLinkTest extends MultiBrowserTest {
+
+ private static final Duration PROMPT_POLLING_INTERVAL = Duration
+ .ofSeconds(5);
+ private static final Duration PROMPT_TIMEOUT_INTERVAL = Duration
+ .ofSeconds(30);
+ private static final String TESTING_URI = "https://vaadin.com/";
+ private static final String TESTING_TEXT = "Vaadin company name";
+
+ RichTextAreaElement rta;
+
+ @Before
+ public void init() {
+ openTestURL();
+ rta = $(RichTextAreaElement.class).first();
+ }
+
+ @Test
+ public void createLinkButtonShouldInsertUriAsTextAndHrefIfNoTextIsHighlighted() {
+ createLinkViaButton(rta, TESTING_URI);
+ String expected = "<a href=\"" + TESTING_URI + "\">" + TESTING_URI
+ + "</a>";
+ assertTrue(String.format(
+ "RichTextArea's expected value is: %s. However, the following value was received: %s.",
+ expected, rta.getValue()), rta.getValue().equals(expected));
+ }
+
+ @Test
+ public void createLinkButtonShouldAddUriAsHrefIfTextIsHighlighted() {
+ rta.setValue(TESTING_TEXT);
+ WebElement textArea = rta.findElement(By.className("gwt-RichTextArea"));
+ textArea.sendKeys(Keys.CONTROL, "a");
+ createLinkViaButton(rta, TESTING_URI);
+ String expected = "<a href=\"" + TESTING_URI + "\">" + TESTING_TEXT
+ + "</a>";
+ assertTrue(String.format(
+ "RichTextArea's expected value is: %s. However, the following value was received: %s.",
+ expected, rta.getValue()), rta.getValue().equals(expected));
+ }
+
+ private void createLinkViaButton(RichTextAreaElement rta, String Uri) {
+ rta.findElement(By.cssSelector("div[title='Create Link']")).click();
+
+ Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
+ .withTimeout(PROMPT_TIMEOUT_INTERVAL)
+ .pollingEvery(PROMPT_POLLING_INTERVAL)
+ .ignoring(NoSuchElementException.class);
+
+ // Wait for the alert to be displayed and store it in a variable
+ Alert alert = wait.until(ExpectedConditions.alertIsPresent());
+ // Type the URI
+ alert.sendKeys(Uri);
+ // Press the OK button
+ alert.accept();
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java b/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java
new file mode 100644
index 0000000000..7066b017f6
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/table/CtrlShiftMultiselectTouchDetectionDisabledTest.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.table;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class CtrlShiftMultiselectTouchDetectionDisabledTest
+ extends SingleBrowserTest {
+
+ @Override
+ protected boolean requireWindowFocusForIE() {
+ return true;
+ }
+
+ @Test
+ public void testSelectedCount() {
+ openTestURL();
+ clickRow(3);
+ new Actions(driver).keyDown(Keys.SHIFT).perform();
+ clickRow(8);
+ new Actions(driver).keyUp(Keys.SHIFT).perform();
+ new Actions(driver).release().perform();
+ LabelElement labelElement = $(LabelElement.class).id("count");
+ assertEquals("Unexpected amount of selected rows", "6",
+ labelElement.getText());
+
+ }
+
+ private void clickRow(int index) {
+ TableElement tableElement = $(TableElement.class).first();
+ tableElement.getRow(index).click();
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java b/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java
new file mode 100644
index 0000000000..b078d00162
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/table/TableScrollsOnRefreshTest.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.table;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TableScrollsOnRefreshTest extends MultiBrowserTest {
+
+ @Test
+ public void ensureNoScrolling() throws InterruptedException {
+ openTestURL();
+ TableElement table = $(TableElement.class).first();
+ table.scroll(10000);
+ sleep(500); // wait for both data requests
+ String firstCellText = getFirstVisibleCell(table).getText();
+
+ ButtonElement refresh = $(ButtonElement.class).first();
+ refresh.click();
+ sleep(500); // wait for both data requests
+ Assert.assertEquals(firstCellText,
+ getFirstVisibleCell(table).getText());
+
+ refresh.click();
+ sleep(500); // wait for both data requests
+ Assert.assertEquals(firstCellText,
+ getFirstVisibleCell(table).getText());
+ }
+
+ private WebElement getFirstVisibleCell(TableElement table) {
+ int tableBodyTop = table.findElement(By.className("v-table-body"))
+ .getLocation().getY();
+ List<WebElement> cells = table
+ .findElements(By.className("v-table-cell-content"));
+ for (WebElement cell : cells) {
+ if (cell.getLocation().getY() > tableBodyTop) {
+ return cell;
+ }
+ }
+ return null;
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
index b145dc99bc..957a3c9b0f 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
@@ -762,7 +762,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertThat("Scroll to 55 didn't scroll as expected",
(double) detailsY + detailsHeight,
- closeTo(wrapperY + wrapperHeight, 1d));
+ closeTo(wrapperY + wrapperHeight, 2d));
$(ButtonElement.class).id(SCROLL_TO_3055).click();
waitUntil(expectedConditionDetails(74, 5, null));
@@ -775,7 +775,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertThat("Scroll to 3055 didn't scroll as expected",
(double) detailsY + detailsHeight,
- closeTo(wrapperY + wrapperHeight, 1d));
+ closeTo(wrapperY + wrapperHeight, 2d));
$(ButtonElement.class).id(SCROLL_TO_END).click();
waitUntil(expectedConditionDetails(99, 9, 2));
@@ -792,7 +792,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertThat("Scroll to end didn't scroll as expected",
(double) detailsY + detailsHeight,
- closeTo(wrapperY + wrapperHeight, 1d));
+ closeTo(wrapperY + wrapperHeight, 2d));
$(ButtonElement.class).id(SCROLL_TO_START).click();
waitUntil(expectedConditionDetails(0, 0, 0));
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumnTest.java b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumnTest.java
new file mode 100644
index 0000000000..77efba9d37
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridChangeHierarchyColumnTest.java
@@ -0,0 +1,40 @@
+package com.vaadin.tests.components.treegrid;
+
+import static org.junit.Assert.assertEquals;
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TreeGridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TreeGridChangeHierarchyColumnTest extends MultiBrowserTest {
+
+ @Test
+ public void renderingFrozenColumnsShouldFactorInHiddenColumns() {
+ openTestURL();
+ waitForElementPresent(By.id("TreeGrid"));
+ waitForElementPresent(By.id("hideHierColButton"));
+ waitForElementPresent(By.id("setHierColButton"));
+
+ TreeGridElement treeGrid = $(TreeGridElement.class).id("TreeGrid");
+ ButtonElement hideHierCol = $(ButtonElement.class)
+ .id("hideHierColButton");
+ ButtonElement setHierCol = $(ButtonElement.class)
+ .id("setHierColButton");
+
+ hideHierCol.click();
+ setHierCol.click();
+
+ // Wait for the new hierarchy column to be rendered
+ waitForElementPresent(By.className("v-treegrid-expander"));
+
+ List<WebElement> frozenCells = treeGrid
+ .findElements(By.className("frozen"));
+
+ assertEquals("Only the MultiSelect column should have frozen cells.", 2,
+ frozenCells.size());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java b/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java
new file mode 100644
index 0000000000..36107f122e
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/treetable/TreeTableMultiselectTest.java
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.treetable;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TreeTableElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class TreeTableMultiselectTest extends SingleBrowserTest {
+
+ @Override
+ protected boolean requireWindowFocusForIE() {
+ return true;
+ }
+
+ @Test
+ public void testSelectedCount() {
+ openTestURL();
+ clickRow(0);
+ new Actions(driver).keyDown(Keys.SHIFT).perform();
+ clickRow(2);
+ new Actions(driver).keyUp(Keys.SHIFT).perform();
+ new Actions(driver).release().perform();
+ LabelElement labelElement = $(LabelElement.class).id("count");
+ assertEquals("Unexpected amount of selected rows", "3",
+ labelElement.getText());
+ }
+
+ private void clickRow(int index) {
+ TreeTableElement treeTable = $(TreeTableElement.class).first();
+ treeTable.getRow(index).click();
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/ui/MultiFileUploadTestTest.java b/uitest/src/test/java/com/vaadin/tests/components/ui/MultiFileUploadTestTest.java
new file mode 100644
index 0000000000..422c7b4f89
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/ui/MultiFileUploadTestTest.java
@@ -0,0 +1,102 @@
+package com.vaadin.tests.components.ui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.internal.WrapsElement;
+import org.openqa.selenium.remote.LocalFileDetector;
+import org.openqa.selenium.remote.RemoteWebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.UploadElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class MultiFileUploadTestTest extends MultiBrowserTest {
+
+ @Test
+ public void changeListenerWorksAfterFirstUpload() throws IOException {
+ openTestURL();
+ ButtonElement upload = $(ButtonElement.class).first();
+
+ File tempFile = createTempFile();
+ fillPathToUploadInput(tempFile.getPath(),
+ $(UploadElement.class).last());
+ tempFile = createTempFile();
+ fillPathToUploadInput(tempFile.getPath(),
+ $(UploadElement.class).last());
+ tempFile = createTempFile();
+ fillPathToUploadInput(tempFile.getPath(),
+ $(UploadElement.class).last());
+
+ assertEquals("Unexpected amount of Upload components.", 4,
+ $(UploadElement.class).all().size());
+
+ upload.click();
+
+ // Last one doesn't have a file selected, and shouldn't trigger an
+ // event.
+ String logRow = getLogRow(0);
+ assertTrue("Unexpected upload log: " + logRow,
+ logRow.startsWith("3. Upload of ")
+ && logRow.endsWith(" complete"));
+ }
+
+ /**
+ * @return The generated temp file handle
+ * @throws IOException
+ */
+ private File createTempFile() throws IOException {
+ File tempFile = File.createTempFile("TestFileUpload", ".txt");
+ BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
+ writer.write(getTempFileContents());
+ writer.close();
+ tempFile.deleteOnExit();
+ return tempFile;
+ }
+
+ private String getTempFileContents() {
+ StringBuilder sb = new StringBuilder("This is a small test file.");
+ sb.append("\n");
+ sb.append("Very small.");
+ return sb.toString();
+ }
+
+ private void fillPathToUploadInput(String tempFileName,
+ UploadElement uploadElement) {
+ // create a valid path in upload input element. Instead of selecting a
+ // file by some file browsing dialog, we use the local path directly.
+ WebElement input = getInput(uploadElement);
+ setLocalFileDetector(input);
+ input.sendKeys(tempFileName);
+ }
+
+ private WebElement getInput(UploadElement uploadElement) {
+ return uploadElement.findElement(By.className("gwt-FileUpload"));
+ }
+
+ private void setLocalFileDetector(WebElement element) {
+ if (getRunLocallyBrowser() != null) {
+ return;
+ }
+
+ if (element instanceof WrapsElement) {
+ element = ((WrapsElement) element).getWrappedElement();
+ }
+ if (element instanceof RemoteWebElement) {
+ ((RemoteWebElement) element)
+ .setFileDetector(new LocalFileDetector());
+ } else {
+ throw new IllegalArgumentException(
+ "Expected argument of type RemoteWebElement, received "
+ + element.getClass().getName());
+ }
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/upload/InterruptUploadTest.java b/uitest/src/test/java/com/vaadin/tests/components/upload/InterruptUploadTest.java
index 8e1d0ba7b3..3d791bd4b8 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/upload/InterruptUploadTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/upload/InterruptUploadTest.java
@@ -7,19 +7,19 @@ import java.io.IOException;
import org.junit.Test;
import org.openqa.selenium.By;
-import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.internal.WrapsElement;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebElement;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.LabelElement;
import com.vaadin.testbench.elements.WindowElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
import com.vaadin.tests.util.LoremIpsum;
-import static org.junit.Assert.assertTrue;
-
public class InterruptUploadTest extends MultiBrowserTest {
private static final String EXPECTED_COUNTER_TEXT = " (counting interrupted at ";
@@ -29,36 +29,42 @@ public class InterruptUploadTest extends MultiBrowserTest {
openTestURL();
File tempFile = createTempFile();
- scheduleUploadCancel();
-
fillPathToUploadInput(tempFile.getPath());
- // Wait for 3 seconds until everything is done.
- Thread.sleep(3000);
-
- String actual = $(LabelElement.class).caption("Line breaks counted")
- .first().getText();
- assertTrue("Line break count note does not match expected (was: "
- + actual + ")", actual.contains(EXPECTED_COUNTER_TEXT));
+ waitForElementPresent(By.className("v-window"));
+ $(ButtonElement.class).caption("Cancel").first().click();
+ waitUntilInterruptionRegistered();
$(WindowElement.class).first().close();
waitForElementNotPresent(By.className("v-window"));
// Check if second upload happens
tempFile = createTempFile();
- scheduleUploadCancel();
fillPathToUploadInput(tempFile.getPath());
- actual = $(LabelElement.class).caption("Line breaks counted").first()
- .getText();
- assertTrue("Line break count note does not match expected (was: "
- + actual + ")", actual.contains(EXPECTED_COUNTER_TEXT));
+ waitForElementPresent(By.className("v-window"));
+ $(ButtonElement.class).caption("Cancel").first().click();
+ waitUntilInterruptionRegistered();
}
- private void scheduleUploadCancel() {
- // Schedule upload cancel in 2 seconds
- ((JavascriptExecutor) getDriver()).executeScript(
- "setTimeout( function () {window.document.querySelector(\".v-window .v-button\").click()},2000)");
+ private void waitUntilInterruptionRegistered() {
+ waitUntil(new ExpectedCondition<Boolean>() {
+ String actual;
+
+ @Override
+ public Boolean apply(WebDriver arg0) {
+ actual = $(LabelElement.class).caption("Line breaks counted")
+ .first().getText();
+ return actual.contains(EXPECTED_COUNTER_TEXT);
+ }
+
+ @Override
+ public String toString() {
+ // Expected condition failed: waiting for ...
+ return "line break count note to mention interruption (was: "
+ + actual + ")";
+ }
+ });
}
/**
diff --git a/uitest/src/test/java/com/vaadin/tests/components/upload/UploadChangeListenerTest.java b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadChangeListenerTest.java
new file mode 100644
index 0000000000..a7e8a4e3ce
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadChangeListenerTest.java
@@ -0,0 +1,90 @@
+package com.vaadin.tests.components.upload;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.internal.WrapsElement;
+import org.openqa.selenium.remote.LocalFileDetector;
+import org.openqa.selenium.remote.RemoteWebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class UploadChangeListenerTest extends MultiBrowserTest {
+
+ @Test
+ public void changeListenerWorksAfterFirstUpload() throws IOException {
+ openTestURL();
+ WebElement upload = findElement(By.className("v-button"));
+
+ File tempFile = createTempFile();
+ fillPathToUploadInput(tempFile.getPath());
+
+ assertEquals("1. change", getLogRow(0));
+
+ upload.click();
+
+ assertEquals("2. finished", getLogRow(0));
+
+ tempFile = createTempFile();
+ fillPathToUploadInput(tempFile.getPath());
+
+ assertEquals("3. change", getLogRow(0));
+ }
+
+ /**
+ * @return The generated temp file handle
+ * @throws IOException
+ */
+ private File createTempFile() throws IOException {
+ File tempFile = File.createTempFile("TestFileUpload", ".txt");
+ BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
+ writer.write(getTempFileContents());
+ writer.close();
+ tempFile.deleteOnExit();
+ return tempFile;
+ }
+
+ private String getTempFileContents() {
+ StringBuilder sb = new StringBuilder("This is a small test file.");
+ sb.append("\n");
+ sb.append("Very small.");
+ return sb.toString();
+ }
+
+ private void fillPathToUploadInput(String tempFileName) {
+ // create a valid path in upload input element. Instead of selecting a
+ // file by some file browsing dialog, we use the local path directly.
+ WebElement input = getInput();
+ setLocalFileDetector(input);
+ input.sendKeys(tempFileName);
+ }
+
+ private WebElement getInput() {
+ return getDriver().findElement(By.className("gwt-FileUpload"));
+ }
+
+ private void setLocalFileDetector(WebElement element) {
+ if (getRunLocallyBrowser() != null) {
+ return;
+ }
+
+ if (element instanceof WrapsElement) {
+ element = ((WrapsElement) element).getWrappedElement();
+ }
+ if (element instanceof RemoteWebElement) {
+ ((RemoteWebElement) element)
+ .setFileDetector(new LocalFileDetector());
+ } else {
+ throw new IllegalArgumentException(
+ "Expected argument of type RemoteWebElement, received "
+ + element.getClass().getName());
+ }
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/upload/UploadHtmlCaptionTest.java b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadHtmlCaptionTest.java
new file mode 100644
index 0000000000..0008e78351
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadHtmlCaptionTest.java
@@ -0,0 +1,67 @@
+package com.vaadin.tests.components.upload;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.UploadElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class UploadHtmlCaptionTest extends MultiBrowserTest {
+
+ @Test
+ public void htmlCaptionToggle() {
+ openTestURL();
+
+ UploadElement upload = $(UploadElement.class).first();
+ WebElement submitButtonCaption = upload
+ .findElement(By.className("v-button-caption"));
+ WebElement componentCaption = findElement(By.className("v-caption"));
+ ButtonElement toggleButtonCaption = $(ButtonElement.class)
+ .id("toggleButtonCaption");
+ ButtonElement toggleComponentCaption = $(ButtonElement.class)
+ .id("toggleComponentCaption");
+
+ assertTrue(
+ "Unexpected submit button caption: "
+ + submitButtonCaption.getText(),
+ submitButtonCaption.getText().contains("<b>"));
+ assertTrue(
+ "Unexpected component caption: " + componentCaption.getText(),
+ componentCaption.getText().contains("<b>"));
+
+ toggleButtonCaption.click();
+
+ assertFalse(
+ "Unexpected submit button caption: "
+ + submitButtonCaption.getText(),
+ submitButtonCaption.getText().contains("<b>"));
+ assertTrue(
+ "Unexpected component caption: " + componentCaption.getText(),
+ componentCaption.getText().contains("<b>"));
+
+ toggleComponentCaption.click();
+
+ assertFalse(
+ "Unexpected submit button caption: "
+ + submitButtonCaption.getText(),
+ submitButtonCaption.getText().contains("<b>"));
+ assertFalse(
+ "Unexpected component caption: " + componentCaption.getText(),
+ componentCaption.getText().contains("<b>"));
+
+ toggleButtonCaption.click();
+
+ assertTrue(
+ "Unexpected submit button caption: "
+ + submitButtonCaption.getText(),
+ submitButtonCaption.getText().contains("<b>"));
+ assertFalse(
+ "Unexpected component caption: " + componentCaption.getText(),
+ componentCaption.getText().contains("<b>"));
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/upload/UploadNoSelectionTest.java b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadNoSelectionTest.java
index 9a4d3b5d1f..35f9577981 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/upload/UploadNoSelectionTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/upload/UploadNoSelectionTest.java
@@ -1,11 +1,13 @@
package com.vaadin.tests.components.upload;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
+import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
public class UploadNoSelectionTest extends MultiBrowserTest {
@@ -17,7 +19,24 @@ public class UploadNoSelectionTest extends MultiBrowserTest {
// empty content is populated by com.vaadin.tests.util.Log
assertEquals(" ", getLogRow(0));
- getSubmitButton().click();
+ WebElement submitButton = getSubmitButton();
+ assertTrue("Upload button should be disabled when no selection.",
+ hasCssClass(submitButton, "v-disabled"));
+
+ submitButton.click();
+
+ // clicking the disabled default button doesn't do a thing
+ assertEquals(" ", getLogRow(0));
+
+ $(ButtonElement.class).id("programmatic").click();
+
+ // neither does triggering upload programmatically
+ assertEquals(" ", getLogRow(0));
+
+ // add an extension that allows upload without filename
+ $(ButtonElement.class).id("extend").click();
+
+ submitButton.click();
// expecting empty file name
assertLogRow(0, 4, UploadNoSelection.FILE_NAME_PREFIX);
@@ -25,6 +44,17 @@ public class UploadNoSelectionTest extends MultiBrowserTest {
assertLogRow(1, 3, UploadNoSelection.FILE_LENGTH_PREFIX + " " + 0);
assertLogRow(2, 2, UploadNoSelection.UPLOAD_FINISHED);
assertLogRow(3, 1, UploadNoSelection.RECEIVING_UPLOAD);
+
+ // and the same programmatically
+ $(ButtonElement.class).id("programmatic").click();
+
+ // expecting empty file name
+ assertLogRow(0, 8, UploadNoSelection.FILE_NAME_PREFIX);
+ // expecting 0-length file
+ assertLogRow(1, 7, UploadNoSelection.FILE_LENGTH_PREFIX + " " + 0);
+ assertLogRow(2, 6, UploadNoSelection.UPLOAD_FINISHED);
+ assertLogRow(3, 5, UploadNoSelection.RECEIVING_UPLOAD);
+
}
private WebElement getSubmitButton() {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowAsyncTest.java b/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowAsyncTest.java
new file mode 100644
index 0000000000..c37d44430d
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowAsyncTest.java
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.window;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.NotificationElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class CloseWindowAsyncTest extends MultiBrowserTest {
+
+ @Test
+ public void testOpeningAndClosing() throws Exception {
+ openTestURL();
+ List<ButtonElement> buttons = $(ButtonElement.class).all();
+ int index = 1;
+ for (ButtonElement button : buttons) {
+ button.click();
+ List<NotificationElement> notifications = $(
+ NotificationElement.class).all();
+ if (!notifications.isEmpty()) {
+ notifications.get(0).close();
+ }
+ assertEquals("Unexpected log contents,",
+ index + ". closed " + index, getLogRow(0));
+ ++index;
+ }
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocusedTest.java b/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocusedTest.java
new file mode 100644
index 0000000000..e4be7413aa
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/window/CloseWindowOnEscapeMaximizedButtonFocusedTest.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.window;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.WindowElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import static org.junit.Assert.assertTrue;
+
+public class CloseWindowOnEscapeMaximizedButtonFocusedTest
+ extends MultiBrowserTest {
+
+ @Test
+ public void windowIsClosed() {
+ openTestURL();
+ ButtonElement openWindow = $(ButtonElement.class).id("openW");
+ openWindow.click();
+
+ WindowElement window = $(WindowElement.class).first();
+ window.maximize();
+ findElement(By.className("v-window-restorebox")).sendKeys(Keys.ESCAPE);
+ waitForElementNotPresent(By.className("v-window"));
+ assertTrue("Window should be removed after ESC key is pressed",
+ driver.findElements(By.className("v-window ")).isEmpty());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/window/ClosingWindowWithBrowserFrameShouldntGenerate404Test.java b/uitest/src/test/java/com/vaadin/tests/components/window/ClosingWindowWithBrowserFrameShouldntGenerate404Test.java
index a0a32cb77b..63dca78976 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/window/ClosingWindowWithBrowserFrameShouldntGenerate404Test.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/window/ClosingWindowWithBrowserFrameShouldntGenerate404Test.java
@@ -1,14 +1,18 @@
package com.vaadin.tests.components.window;
-import com.vaadin.testbench.elements.ButtonElement;
-import com.vaadin.testbench.elements.LabelElement;
-import com.vaadin.testbench.elements.WindowElement;
-import com.vaadin.tests.tb3.MultiBrowserTest;
+import java.util.Arrays;
+import java.util.List;
+
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.logging.LogEntry;
+import org.openqa.selenium.remote.DesiredCapabilities;
-import java.util.List;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.WindowElement;
+import com.vaadin.testbench.parallel.Browser;
+import com.vaadin.tests.tb3.MultiBrowserTest;
public class ClosingWindowWithBrowserFrameShouldntGenerate404Test
extends MultiBrowserTest {
@@ -36,4 +40,12 @@ public class ClosingWindowWithBrowserFrameShouldntGenerate404Test
return !logs.stream().anyMatch(
ClosingWindowWithBrowserFrameShouldntGenerate404Test::contains404);
}
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ // IE driver does not support logging API, see
+ // https://github.com/SeleniumHQ/selenium/issues/6414
+ return Arrays.asList(Browser.CHROME.getDesiredCapabilities(),
+ Browser.FIREFOX.getDesiredCapabilities());
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java
new file mode 100644
index 0000000000..5c28799ba7
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/UpdateComponentWithinExpandRatioTest.java
@@ -0,0 +1,29 @@
+package com.vaadin.tests.layouts;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.ProgressBarElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class UpdateComponentWithinExpandRatioTest extends MultiBrowserTest {
+
+ @Test
+ public void updateProgressShouldNotMoveButton() {
+ openTestURL();
+ ProgressBarElement pb = $(ProgressBarElement.class).first();
+ ButtonElement button = $(ButtonElement.class).first();
+
+ int initialX = button.getLocation().getX();
+ int initialWidth = pb.getSize().getWidth();
+
+ button.click();
+
+ assertEquals("Button's position changed unexpectedly", initialX,
+ button.getLocation().getX());
+ assertEquals("ProgressBar's width changed unexpectedly", initialWidth,
+ pb.getSize().getWidth());
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutMarginSpacingTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutMarginSpacingTest.java
index 3b369a5026..e5aa82ec44 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutMarginSpacingTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutMarginSpacingTest.java
@@ -14,7 +14,8 @@ public abstract class BaseLayoutMarginSpacingTest extends MultiBrowserTest {
openTestURL();
sleep(500);
compareScreen("initial");
- String[] states = { "marginOnSpaceOff", "marginOnfSpaceOn" };
+ String[] states = { "marginOnSpaceOff", "marginOnSpaceOn",
+ "marginOffSpaceOn" };
ButtonElement marginBtn = $(ButtonElement.class).get(0);
ButtonElement spaceBtn = $(ButtonElement.class).get(1);
marginBtn.click();
@@ -23,5 +24,8 @@ public abstract class BaseLayoutMarginSpacingTest extends MultiBrowserTest {
spaceBtn.click();
sleep(1000);
compareScreen(states[1]);
+ marginBtn.click();
+ sleep(1000);
+ compareScreen(states[2]);
}
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutSizingTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutSizingTest.java
index 32d32e0aec..507bead961 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutSizingTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/BaseLayoutSizingTest.java
@@ -9,13 +9,14 @@ import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
public abstract class BaseLayoutSizingTest extends MultiBrowserTest {
+ protected String[] states = new String[] { "setSize350px", "setSize_-1px",
+ "setSize75Percent", "setSize100Percent" };
+
@Test
public void LayoutSizing() throws IOException, InterruptedException {
openTestURL();
sleep(500);
compareScreen("initial");
- String[] states = { "setSize350px", "setSize_-1px", "setSize75Percent",
- "setSize100Percent" };
List<ButtonElement> buttons = $(ButtonElement.class).all();
int index = 0;
// go through all buttons click them and see result
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegErrorTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegErrorTest.java
index 95e4d74e8e..2032694c19 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegErrorTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutRegErrorTest.java
@@ -1,7 +1,30 @@
package com.vaadin.tests.layouts.layouttester.GridLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.CheckBoxElement;
import com.vaadin.tests.layouts.layouttester.BaseLayoutRegErrorTest;
public class GridLayoutRegErrorTest extends BaseLayoutRegErrorTest {
+ @Override
+ public void LayoutRegError() throws IOException {
+ super.LayoutRegError();
+
+ // The layout is too high to fit into one screenshot, we need to scroll
+ // and take another.
+
+ List<CheckBoxElement> checkBoxes = $(CheckBoxElement.class).all();
+ assertEquals(3, checkBoxes.size());
+ CheckBoxElement lastCheckBox = checkBoxes.get(2);
+
+ new Actions(driver).moveToElement(lastCheckBox).build().perform();
+
+ compareScreen("RegError-Scrolled");
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizingTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizingTest.java
index f91f265913..b94f00ddb8 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizingTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/GridLayout/GridLayoutSizingTest.java
@@ -1,7 +1,14 @@
package com.vaadin.tests.layouts.layouttester.GridLayout;
+import java.io.IOException;
+
import com.vaadin.tests.layouts.layouttester.BaseLayoutSizingTest;
public class GridLayoutSizingTest extends BaseLayoutSizingTest {
+ @Override
+ public void LayoutSizing() throws IOException, InterruptedException {
+ states[0] = "setSize600px";
+ super.LayoutSizing();
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HIconTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HIconTest.java
index 776c0c8ae9..eb0e05b9ec 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HIconTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HIconTest.java
@@ -1,6 +1,34 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.HorizontalLayoutElement;
import com.vaadin.tests.layouts.layouttester.BaseIconTest;
public class HIconTest extends BaseIconTest {
+
+ @Override
+ public void LayoutIcon() throws IOException {
+ super.LayoutIcon();
+
+ // The layout is too wide to fit into one screenshot, we need to scroll
+ // and take another.
+
+ List<HorizontalLayoutElement> layouts = $(HorizontalLayoutElement.class)
+ .all();
+ assertEquals(8, layouts.size());
+ HorizontalLayoutElement lastOfRow1 = layouts.get(3);
+ HorizontalLayoutElement lastOfRow2 = layouts.get(7);
+
+ // scroll to both to ensure both contents are fully in view
+ new Actions(driver).moveToElement(lastOfRow1).build().perform();
+ new Actions(driver).moveToElement(lastOfRow2).build().perform();
+
+ compareScreen("icon-scrolled");
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegErrorTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegErrorTest.java
index 8183746103..fdd54c0fe0 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegErrorTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/HLayout/HLayoutRegErrorTest.java
@@ -1,6 +1,47 @@
package com.vaadin.tests.layouts.layouttester.HLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.HorizontalLayoutElement;
import com.vaadin.tests.layouts.layouttester.BaseLayoutRegErrorTest;
public class HLayoutRegErrorTest extends BaseLayoutRegErrorTest {
+
+ @Override
+ public void LayoutRegError() throws IOException {
+ super.LayoutRegError();
+
+ // The layout is too wide to fit into one screenshot, we need to scroll
+ // and take two more.
+
+ List<HorizontalLayoutElement> layouts = $(HorizontalLayoutElement.class)
+ .all();
+ assertEquals(10, layouts.size());
+ HorizontalLayoutElement group2row1 = layouts.get(2);
+ HorizontalLayoutElement group2row2 = layouts.get(7);
+ HorizontalLayoutElement group3row1 = layouts.get(3);
+ HorizontalLayoutElement group3row2 = layouts.get(8);
+ HorizontalLayoutElement lastOfRow1 = layouts.get(4);
+ HorizontalLayoutElement lastOfRow2 = layouts.get(9);
+
+ // scroll to both to ensure both contents are fully in view
+ new Actions(driver).moveToElement(group3row1).build().perform();
+ new Actions(driver).moveToElement(group3row2).build().perform();
+ // scroll back to get the previous group at the left edge
+ new Actions(driver).moveToElement(group2row1).build().perform();
+ new Actions(driver).moveToElement(group2row2).build().perform();
+
+ compareScreen("RegError-Scrolled-Middle");
+
+ // scroll to last ones
+ new Actions(driver).moveToElement(lastOfRow1).build().perform();
+ new Actions(driver).moveToElement(lastOfRow2).build().perform();
+
+ compareScreen("RegError-Scrolled-End");
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignmentTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignmentTest.java
index 48184a0591..d8ab553b7e 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignmentTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VAlignmentTest.java
@@ -1,6 +1,30 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.TextFieldElement;
import com.vaadin.tests.layouts.layouttester.BaseAlignmentTest;
public class VAlignmentTest extends BaseAlignmentTest {
+
+ @Override
+ public void layoutAlignment() throws IOException {
+ super.layoutAlignment();
+
+ // The layout is too high to fit into one screenshot, we need to scroll
+ // and take another.
+
+ List<TextFieldElement> textFields = $(TextFieldElement.class).all();
+ assertEquals(9, textFields.size());
+ TextFieldElement lastTextField = textFields.get(8);
+
+ new Actions(driver).moveToElement(lastTextField).build().perform();
+
+ compareScreen("alignment-scrolled");
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizingTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizingTest.java
index cabb6c3a4b..16925e6339 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizingTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VComponentSizingTest.java
@@ -1,6 +1,49 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.VerticalLayoutElement;
import com.vaadin.tests.layouts.layouttester.BaseComponentSizingTest;
public class VComponentSizingTest extends BaseComponentSizingTest {
+
+ @Override
+ public void ComponentSizing() throws IOException, InterruptedException {
+ openTestURL();
+ sleep(500);
+
+ // The layout is too high to fit into one screenshot, we need to scroll
+ // down to see relevant content. And keep doing it since interacting
+ // with the controls scrolls back up again.
+
+ List<VerticalLayoutElement> layouts = $(VerticalLayoutElement.class)
+ .all();
+ assertEquals(5, layouts.size());
+ VerticalLayoutElement lastLayout = layouts.get(4);
+
+ compareScreen("initial");
+
+ new Actions(driver).moveToElement(lastLayout).build().perform();
+ compareScreen("scrolled");
+
+ String[] states = { "setSize350px", "setSize_-1px", "setSize75Percent",
+ "setSize100Percent" };
+ List<ButtonElement> buttons = $(ButtonElement.class).all();
+ int index = 0;
+ // go through all buttons click them and see result
+ for (ButtonElement btn : buttons) {
+ btn.click();
+ sleep(500);
+ new Actions(driver).moveToElement(lastLayout).build().perform();
+ compareScreen(states[index]);
+
+ index++;
+ }
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegErrorTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegErrorTest.java
index 02e12221d4..eac1dbe31b 100644
--- a/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegErrorTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/layouts/layouttester/VLayout/VLayoutRegErrorTest.java
@@ -1,6 +1,30 @@
package com.vaadin.tests.layouts.layouttester.VLayout;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.CheckBoxElement;
import com.vaadin.tests.layouts.layouttester.BaseLayoutRegErrorTest;
public class VLayoutRegErrorTest extends BaseLayoutRegErrorTest {
+
+ @Override
+ public void LayoutRegError() throws IOException {
+ super.LayoutRegError();
+
+ // The layout is too high to fit into one screenshot, we need to scroll
+ // and take another.
+
+ List<CheckBoxElement> checkBoxes = $(CheckBoxElement.class).all();
+ assertEquals(3, checkBoxes.size());
+ CheckBoxElement lastCheckBox = checkBoxes.get(2);
+
+ new Actions(driver).moveToElement(lastCheckBox).build().perform();
+
+ compareScreen("RegError-Scrolled");
+ }
}
diff --git a/uitest/src/test/java/com/vaadin/tests/tb3/BrowserStackBrowserFactory.java b/uitest/src/test/java/com/vaadin/tests/tb3/BrowserStackBrowserFactory.java
index 05bf9e4c89..ba7237043f 100644
--- a/uitest/src/test/java/com/vaadin/tests/tb3/BrowserStackBrowserFactory.java
+++ b/uitest/src/test/java/com/vaadin/tests/tb3/BrowserStackBrowserFactory.java
@@ -45,6 +45,9 @@ public class BrowserStackBrowserFactory extends DefaultBrowserFactory {
caps.setCapability("ie.ensureCleanSession", true);
caps.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION,
true);
+ // Workaround for an IE11 bug in BrowserStack sendKeys handling, see
+ // https://www.browserstack.com/automate/using-sendkeys-on-remote-IE11
+ caps.setCapability("browserstack.sendKeys", true);
break;
default:
caps = DesiredCapabilities.firefox();
diff --git a/uitest/src/test/java/com/vaadin/tests/tooltip/NestedOverlayTooltipTest.java b/uitest/src/test/java/com/vaadin/tests/tooltip/NestedOverlayTooltipTest.java
new file mode 100644
index 0000000000..c8c5bc1eac
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/tooltip/NestedOverlayTooltipTest.java
@@ -0,0 +1,73 @@
+package com.vaadin.tests.tooltip;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.PopupViewElement;
+import com.vaadin.testbench.elements.UIElement;
+import com.vaadin.testbench.elements.WindowElement;
+import com.vaadin.tests.tb3.TooltipTest;
+
+public class NestedOverlayTooltipTest extends TooltipTest {
+
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ openTestURL();
+ }
+
+ private void openDropDownAndTestTooltip(WebElement base, String firstItem,
+ String tooltip) throws Exception {
+ WebElement menuBar = base.findElement(By.className("v-menubar"));
+ menuBar.findElement(By.vaadin("#" + firstItem)).click();
+ WebElement popup = findElement(By.className("v-menubar-popup"));
+ WebElement item = popup.findElement(By.className("v-menubar-menuitem"));
+ checkTooltip(item, tooltip);
+ }
+
+ @Test
+ public void testMenuItemTooltip() throws Exception {
+ UIElement ui = $(UIElement.class).first();
+ openDropDownAndTestTooltip(ui, "First item", "Dropdown Item tooltip");
+ }
+
+ @Test
+ public void testMenuItemTooltipWithinWindow() throws Exception {
+ $(ButtonElement.class).first().click();
+ WindowElement window = $(WindowElement.class).first();
+ openDropDownAndTestTooltip(window, "First item in window",
+ "Window dropdown item tooltip");
+ }
+
+ @Test
+ public void testMenuItemTooltipWithinNestedWindow() throws Exception {
+ $(ButtonElement.class).first().click();
+ WindowElement window = $(WindowElement.class).first();
+ window.$(ButtonElement.class).first().click();
+ WindowElement subWindow = $(WindowElement.class).get(1);
+ openDropDownAndTestTooltip(subWindow, "First item in inner window",
+ "Inner window dropdown item tooltip");
+ }
+
+ @Test
+ public void testMenuItemTooltipWithinPopupView() throws Exception {
+ $(PopupViewElement.class).first().click();
+ WebElement popup = findElement(By.className("v-popupview-popup"));
+ openDropDownAndTestTooltip(popup, "First item in popupView",
+ "PopupView dropdown item tooltip");
+ }
+
+ @Test
+ public void testMenuItemTooltipWithinNestedPopupView() throws Exception {
+ $(PopupViewElement.class).first().click();
+ WebElement popup = findElement(By.className("v-popupview-popup"));
+ popup.findElement(By.className("v-popupview")).click();
+ WebElement innerPopup = findElements(By.className("v-popupview-popup"))
+ .get(1);
+ openDropDownAndTestTooltip(innerPopup, "First item in inner popupView",
+ "Inner popupView dropdown item tooltip");
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java b/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java
new file mode 100644
index 0000000000..2df375b3e9
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/v7/tests/components/combobox/ComboboxPageLengthZeroFilterTest.java
@@ -0,0 +1,28 @@
+package com.vaadin.v7.tests.components.combobox;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboboxPageLengthZeroFilterTest extends MultiBrowserTest {
+
+ @Test
+ public void testOptionsNotEmpty() {
+ openTestURL();
+
+ List<String> suggestions = getFilterSuggestions("T");
+
+ Assert.assertEquals("All items should be presented!", 12,
+ suggestions.size());
+ }
+
+ private List<String> getFilterSuggestions(String string) {
+ ComboBoxElement comboBox = $(ComboBoxElement.class).first();
+ comboBox.findElement(By.vaadin("#textbox")).sendKeys(string);
+ return comboBox.getPopupSuggestions();
+ }
+}