Author: prabhat.jha(a)jboss.com
Date: 2009-08-26 12:28:57 -0400 (Wed, 26 Aug 2009)
New Revision: 15325
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/README.txt
branches/community/3.3.X/samples/richfaces-demo/functional-test/pom.xml
branches/community/3.3.X/samples/richfaces-demo/functional-test/profiles.xml
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/java/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/java/org/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/java/org/jboss/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/java/org/jboss/richfaces/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/main/java/org/jboss/richfaces/integrationTest/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractDataIterationTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractSeleniumRichfacesTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/actionParameter/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/actionParameter/ActionParameterTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxForm/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxForm/AjaxFormTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxRegion/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxRegion/AjaxRegionTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxSupport/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxSupport/AjaxSupportTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AbstractAjaxValidatorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorHibernatePartTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/beanValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/beanValidator/BeanValidatorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarStylingTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/OrganizerTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/ColorPickerTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/columns/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/columns/ColumnsTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/ComboBoxTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandButton/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandButton/CommandButtonTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandLink/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandLink/CommandLinkTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuImageTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuTableTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataFilterSlider/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataFilterSlider/DataFilterSliderTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataGrid/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataGrid/DataGridTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataList/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataList/DataListTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataScroller/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataScroller/DataScrollerTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/DataTableTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableFilteringTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableSortingTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dragSupport/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dragSupport/DragSupportTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dropDownMenu/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dropDownMenu/HorizontalMenuTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/AdvancedEditorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/SimpleEditorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/extendedDataTable/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/extendedDataTable/ExtendedDataTableTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/FileUploadTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorAfterModelUpdateTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/include/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/include/IncludeTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/InplaceInputTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/InplaceSelectTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/InputNumberSliderTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/jsFunction/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/jsFunction/JSFunctionTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/keepAlive/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/keepAlive/KeepAliveTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/listShuttle/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/listShuttle/ListShuttleTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/log/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/log/LogTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/mediaOutput/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/mediaOutput/MediaOutputTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/ModalPanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/OrderingListTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/outputPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/outputPanel/OutputPanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/Paint2DTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelCustomizationTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/PanelBarTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/PanelMenuTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/PickListTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/poll/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/poll/PollTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/ProgressBarTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/push/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/push/PushTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueSettingsTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/repeat/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/repeat/RepeatTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/script/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/script/ScriptTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/SeparatorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/SimpleTogglePanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/SpacerTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/SpinnerTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/status/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/status/StatusTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/style/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/style/StyleTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/SuggestionBoxTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/TabPanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/TogglePanelTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/ToolBarTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipDataTableTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeNodesAdaptorTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeTestCase.java
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/mac/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/mac/testng.xml
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/unix/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/unix/testng.xml
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/windows/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/windows/testng.xml
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/locators.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/messages.properties
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/user-extensions/
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/user-extensions/rfqa-extensions.js
Log:
import of demo selenium tests from internal svn repo
Added: branches/community/3.3.X/samples/richfaces-demo/functional-test/README.txt
===================================================================
--- branches/community/3.3.X/samples/richfaces-demo/functional-test/README.txt
(rev 0)
+++ branches/community/3.3.X/samples/richfaces-demo/functional-test/README.txt 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,46 @@
+1) Build environment
+
+Needs third-party library selenium-testing-lib library.
+
+You can obtain it from
https://svn.devel.redhat.com/repos/jboss-qa/wfk/trunk/selenium-testing-lib
+(until it is available from maven repositories).
+
+Install it into your local maven repository.
+
+
+2) Running tests
+
+It's necessary to have running web/app server with richfaces-demo deployed on it.
+
+To run tests, you have to set up Maven's property called "browser" which
contains browser
+type and path to its binary if needed. You can specify application's context by
setting Maven properties
+named "context.root" and "context.path".
+
+To set them, either edit profiles.xml or pass runtime arguments to maven, e.g.
+ mvn install -Dbrowser=*firefox
+ mvn install -Dbrowser="*firefox /usr/lib/firefox-3.5.2/firefox"
+ mvn install -Dbrowser=*iexplore -Dcontext.root=http://localhost:8080/
-Dcontext.path=/richfaces-demo
+
+Default values are set in pom.xml.
+
+
+3) Profiles
+
+Since some tests might not be runnable on some platforms, there are separate testng.xml
files in
+src/test/profiles for each platform (unix/windows/mac).
+
+
+4) Properties files
+
+The majority of locators and assert values used in test are externalized in *.properties
files. You can find
+all string belonging to the class in src/test/resources/packagename/locators.properties
or
+src/test/resources/packagename/messages.properties.
+
+
+5) Generating testng.xml
+
+$ find -name "*.java" | grep -v Abstract | sort | tr '/' '.' |
sed -r 's#^..(.*).java$#<test
name="\1">\n\t<classes>\n\t\t<class name="\1"
/>\n\t</classes>\n</test>\n#'
+
+
+
+
Added: branches/community/3.3.X/samples/richfaces-demo/functional-test/pom.xml
===================================================================
--- branches/community/3.3.X/samples/richfaces-demo/functional-test/pom.xml
(rev 0)
+++ branches/community/3.3.X/samples/richfaces-demo/functional-test/pom.xml 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,249 @@
+<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jboss.richfaces.integrationTest</groupId>
+ <artifactId>selenium-test</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>selenium-test</name>
+ <url>http://maven.apache.org</url>
+ <repositories>
+ <repository>
+ <id>openqa</id>
+ <name>OpenQA Repository</name>
+ <
url>http://archiva.openqa.org/repository/releases</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>codehaus.org</id>
+ <name>CodeHaus Plugin Snapshots</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ <properties>
+ <resources.dir>${project.build.directory}/test-classes</resources.dir>
+ <extensions.dir>${resources.dir}/user-extensions</extensions.dir>
+ <browser></browser>
+ <context.root>http://localhost:8080/</context.root>
+ <context.path>/richfaces-demo</context.path>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <selenium.port>8444</selenium.port>
+ </properties>
+ <build>
+ <finalName>seleniumTest</finalName>
+ <testResources>
+ <testResource>
+ <directory>src/test/profiles/${os.family}</directory>
+ <filtering>true</filtering>
+ </testResource>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <includes>
+ <include>**/*.properties</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <directory>src/test/resources/user-extensions</directory>
+ <targetPath>user-extensions</targetPath>
+ <includes>
+ <include>**/*.js</include>
+ </includes>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack-user-extensions</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeGroupIds>org.jboss.test</includeGroupIds>
+ <includeArtifactIds>selenium</includeArtifactIds>
+ <includes>jbossqa-extensions.js</includes>
+ <outputDirectory>${extensions.dir}</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>concatenate-extensions</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <concat destfile="${resources.dir}/custom-extensions.js"
+ fixlastline="yes">
+ <!-- space-separated list of files -->
+ <filelist dir="${extensions.dir}"
+ files="jbossqa-extensions.js rfqa-extensions.js" />
+ </concat>
+ <delete
dir="${project.build.directory}/test-classes/user-extensions" />
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ <configuration>
+ <!--
+ Skip the normal tests, we'll run them in the integration-test
+ phase
+ -->
+ <skip>true</skip>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <skip>false</skip>
+ <suiteXmlFiles>
+ <suiteXmlFile>${resources.dir}/testng.xml</suiteXmlFile>
+ </suiteXmlFiles>
+ <argLine>-Dbrowser='${browser}'
-Dcontext.root='${context.root}' -Dcontext.path='${context.path}'
-Dselenium.port='${selenium.port}'</argLine>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>integration-test</id>
+ <activation>
+ <property>
+ <name>!maven.test.skip</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start-server</goal>
+ </goals>
+ <configuration>
+ <background>true</background>
+ <debug>false</debug>
+ <port>${selenium.port}</port>
+ <userExtensions>${resources.dir}/custom-extensions.js</userExtensions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>unix</id>
+ <activation>
+ <os>
+ <family>unix</family>
+ </os>
+ </activation>
+ <properties>
+ <os.family>unix</os.family>
+ </properties>
+ </profile>
+ <profile>
+ <id>windows</id>
+ <activation>
+ <os>
+ <family>windows</family>
+ </os>
+ </activation>
+ <properties>
+ <os.family>windows</os.family>
+ </properties>
+ </profile>
+ <profile>
+ <id>mac</id>
+ <activation>
+ <os>
+ <family>mac</family>
+ </os>
+ </activation>
+ <properties>
+ <os.family>mac</os.family>
+ </properties>
+ </profile>
+ </profiles>
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.8</version>
+ <scope>test</scope>
+ <classifier>jdk15</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ <version>1.0.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.server</groupId>
+ <artifactId>selenium-server-coreless</artifactId>
+ <version>1.0.1</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>jetty</groupId>
+ <artifactId>org.mortbay.jetty</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.test</groupId>
+ <artifactId>selenium</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Added: branches/community/3.3.X/samples/richfaces-demo/functional-test/profiles.xml
===================================================================
--- branches/community/3.3.X/samples/richfaces-demo/functional-test/profiles.xml
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/profiles.xml 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,33 @@
+<profilesXml
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+
http://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <profiles>
+ <profile>
+ <id>localEnvironment</id>
+ <!-- set local environment specific properties here -->
+ <properties>
+ <!-- *** browser: the type of web browser (and path to its binary if needed)
-->
+ <!--<browser>*firefox</browser>-->
+ <!--<browser>*firefox /usr/lib/firefox-3.5.2/firefox</browser>-->
+ <!--<browser>*chrome</browser>-->
+ <!--<browser>*chrome /usr/lib/firefox-3.5.2/firefox</browser>-->
+ <!--<browser>*iexplore</browser>-->
+ <!--<browser>*iexplore c:\\program files\\internet
explorer\\iexplore.exe</browser>-->
+ <!--<browser>*konqueror /usr/bin/konqueror</browser>-->
+ <!--<browser>*safari</browser>-->
+
+ <!--*** context.root: HTTP protocol URL to testing server ***-->
+ <!--<context.root>http://localhost:8080/</context.root>-->
+
+ <!--*** context.path: Context root of application in context of server ***-->
+ <!--<context.path>/richfaces-demo</context.path>-->
+
+ <!--*** selenium.port: specifies on which port should run selenium server
(default: 8444) ***-->
+ <!--<selenium.port>8446</selenium.port>-->
+ </properties>
+ </profile>
+ </profiles>
+ <activeProfiles>
+ <activeProfile>localEnvironment</activeProfile>
+ </activeProfiles>
+</profilesXml>
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractDataIterationTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractDataIterationTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractDataIterationTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,146 @@
+package org.jboss.richfaces.integrationTest;
+
+import java.util.Properties;
+
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AbstractDataIterationTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+
+ protected Properties getMessagesProperties() {
+ Properties childProperties = super.getMessagesProperties();
+ Properties dataIterationCommonProperties = getNamedPropertiesForClass(
+ AbstractSeleniumRichfacesTestCase.class,
+ "data-iteration--messages");
+ dataIterationCommonProperties.putAll(childProperties);
+ return dataIterationCommonProperties;
+ }
+
+ protected Properties getLocatorsProperties() {
+ Properties childProperties = super.getLocatorsProperties();
+ Properties dataIterationCommonProperties = getNamedPropertiesForClass(
+ AbstractSeleniumRichfacesTestCase.class,
+ "data-iteration--locators");
+ dataIterationCommonProperties.putAll(childProperties);
+ return dataIterationCommonProperties;
+ }
+
+ protected final String table = getLoc("data-table-common--table");
+ protected final String buttonFirstPage =
getLoc("data-scroller--button--first-page");
+ protected final String buttonLastPage =
getLoc("data-scroller--button--last-page");
+ protected final String buttonNextPage =
getLoc("data-scroller--button--next-page");
+ protected final String buttonPreviousPage =
getLoc("data-scroller--button--previous-page");
+ protected final String buttonPagePreformatted =
getLoc("data-scroller--button--numbered-page-preformatted");
+ protected final String outputActivePage =
getLoc("data-scroller--output--active-page");
+
+ protected void gotoPage(String button) {
+ final String previousPage = getActivePage().toString();
+ if (previousPage.equals(selenium.getText(button))) {
+ return;
+ }
+ if (previousPage.equals("1")
+ && (buttonFirstPage.equals(button) || buttonPreviousPage
+ .equals(button))) {
+ return;
+ }
+ if (previousPage.equals(getLastVisiblePage().toString())
+ && (buttonLastPage.equals(button) || buttonNextPage
+ .equals(button))) {
+ return;
+ }
+ selenium.click(button);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !previousPage.equals(getActivePage().toString());
+ }
+ });
+ }
+
+ protected Integer getActivePage() {
+ return Integer.valueOf(selenium.getText(outputActivePage));
+ }
+
+ protected Integer getLastVisiblePage() {
+ Number pages = selenium
+ .getXpathCount(format(buttonPagePreformatted, 0));
+ String lastVisiblePage = selenium.getText(format(
+ buttonPagePreformatted, pages));
+ return Integer.valueOf(lastVisiblePage);
+ }
+
+ protected String getTableText() {
+ return selenium.getText(table);
+ }
+
+ protected void checkSorting(String columnPreformatted) {
+ checkSortingForColumnOrder(columnPreformatted);
+ }
+
+ protected void checkSortingForColumnOrder(String... columnsPreformatted) {
+ final boolean navigationEnabled = selenium
+ .isElementPresent(buttonFirstPage);
+
+ if (navigationEnabled)
+ gotoPage(buttonFirstPage);
+
+ final int columns = columnsPreformatted.length;
+
+ String[] lastText = new String[columns];
+ Boolean[] sortedAscending = new Boolean[columns];
+
+ while ((!navigationEnabled && lastText[0] == null)
+ || (navigationEnabled && getActivePage() < getLastVisiblePage())) {
+ if (navigationEnabled && lastText[0] != null) {
+ gotoPage(buttonNextPage);
+ }
+
+ final int rows = selenium.getXpathCount(
+ format(columnsPreformatted[0], 0)).intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ for (int column = 0; column < columns; column++) {
+ String text = selenium.getText(format(
+ columnsPreformatted[column], row));
+ if (lastText[column] != null) {
+ int comparison = text.compareTo(lastText[column]);
+ try {
+ Double number = Double.parseDouble(text);
+ Double lastNumber = Double
+ .parseDouble(lastText[column]);
+ comparison = number.compareTo(lastNumber);
+ } catch (NumberFormatException e) {
+ }
+ if (sortedAscending[column] == null) {
+ if (comparison > 0) {
+ sortedAscending[column] = true;
+ break;
+ } else if (comparison < 0) {
+ sortedAscending[column] = false;
+ break;
+ }
+ } else {
+ if (sortedAscending[column]) {
+ if (comparison < 0) {
+ Assert.fail();
+ }
+ break;
+ } else {
+ if (comparison > 0) {
+ Assert.fail();
+ }
+ break;
+ }
+ }
+ }
+ lastText[column] = text;
+ }
+ }
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractSeleniumRichfacesTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractSeleniumRichfacesTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/AbstractSeleniumRichfacesTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,461 @@
+package org.jboss.richfaces.integrationTest;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.jboss.test.selenium.AbstractSeleniumTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.jboss.test.selenium.waiting.Wait.Waiting;
+import org.testng.ITestContext;
+import org.testng.ITestListener;
+import org.testng.ITestResult;
+import org.testng.TestRunner;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Parameters;
+
+import com.thoughtworks.selenium.DefaultSelenium;
+
+/**
+ *
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>, <a
+ * href="mailto:pjha@redhat.com">Prabhat Jha</a>
+ * @version $Revision$
+ *
+ */
+
+public class AbstractSeleniumRichfacesTestCase extends AbstractSeleniumTestCase {
+
+ /**
+ * context root can be used to obtaining full URL paths, is set to actual
+ * tested application's context root
+ */
+ protected String contextRoot;
+
+ /**
+ * ContextPath will be used to retrieve pages from right URL. Don't hesitate
+ * to use it in cases of building absolute URLs.
+ */
+ protected String contextPath;
+
+ /**
+ * predefined waitings to use in inheritors
+ */
+ protected Waiting waitModelUpdate = Wait.interval(100).timeout(10000);
+
+ /**
+ * Initializes context before each class run.
+ *
+ * Parameters will be obtained from TestNG.
+ *
+ * @param contextRoot
+ * server's context root, e.g.
http://localhost:8080/
+ * @param contextPath
+ * context path to application in context of server's root (e.g.
+ * /myapp)
+ * @param browser
+ * used browser (e.g. "*firefox", see selenium reference API)
+ * @param seleniumPort
+ * specifies on which port should selenium server run
+ */
+ @BeforeClass
+ @Parameters( { "context.root", "context.path",
"browser", "selenium.port" })
+ public void initializeContext(String contextRoot, String contextPath, String browser,
String seleniumPort) {
+ this.contextRoot = contextRoot;
+ this.contextPath = contextPath;
+ selenium = new DefaultSelenium("localhost",
Integer.valueOf(seleniumPort), browser, contextRoot);
+ selenium.start();
+ allowInitialXpath();
+ }
+
+ protected void allowInitialXpath() {
+ selenium.allowNativeXpath("false");
+ }
+
+ /**
+ * Finalize context after each class run.
+ */
+ @AfterClass
+ public void finalizeContext() {
+ selenium.stop();
+ selenium = null;
+ contextPath = null;
+ }
+
+ /**
+ * Default implementation of obtaining properties for each class.
+ *
+ * @see AbstractSeleniumTestCase (method getLoc(String,String))
+ */
+ @Override
+ protected Properties getLocatorsProperties() {
+ return getNamedPropertiesForClass(this.getClass(), "locators");
+ }
+
+ /**
+ * Default implementation of obtaining properties for each class.
+ *
+ * @see AbstractSeleniumTestCase (method getMess(String,String))
+ */
+ @Override
+ protected Properties getMessagesProperties() {
+ return getNamedPropertiesForClass(this.getClass(), "messages");
+ }
+
+ /**
+ * Add test listener to get advanced logging and other possibilities.
+ *
+ * @param context
+ * will be injected by TestNG
+ */
+ @BeforeTest
+ protected void addTestListeners(ITestContext context) {
+ TestRunner runner = (TestRunner) context;
+ runner.addTestListener(testListener);
+ }
+
+ /**
+ * Implementation of listener, which will trigger each test run.
+ */
+ private ITestListener testListener = new ITestListener() {
+
+ /**
+ * Will print to log name of test before each test run.
+ */
+ public void onTestStart(ITestResult result) {
+ String methodName = result.getMethod().toString();
+ Matcher matcher =
Pattern.compile(".*\\.(.*\\..*)").matcher(methodName);
+
+ if (matcher.lookingAt()) {
+ methodName = matcher.group(1);
+ }
+
+ String hashes = "##########";
+ System.out.println(String.format("%s %s %s", hashes, methodName,
hashes));
+ }
+
+ public void onFinish(ITestContext context) {
+ }
+
+ public void onStart(ITestContext context) {
+ }
+
+ public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
+ }
+
+ public void onTestFailure(ITestResult result) {
+ }
+
+ public void onTestSkipped(ITestResult result) {
+ }
+
+ public void onTestSuccess(ITestResult result) {
+ }
+ };
+
+ /**
+ * Abstract test for testing source code of examples. Deprecated -- use
+ * abstractTestSource(int, String, String) instead of this method.
+ *
+ * @param fieldset
+ * @param index
+ * @param first
+ * @param second
+ */
+ @Deprecated
+ protected void abstractTestSource(int fieldset, int index, String first, String
second) {
+ String xpathPrefix = String.format("//fieldset[%d]/div/div[%d]",
fieldset, index);
+ String text = null;
+
+ scrollIntoView(xpathPrefix, true);
+
+ text = selenium.getAttribute(xpathPrefix + "/div@style");
+ assertTrue(text.contains("display: none;"),
+ "Source should not be visible -- it has to contain 'display:
none;'.");
+
+ // click on 'View xxx Source'
+ waitForElement(xpathPrefix + "/span[2]");
+ selenium.click(xpathPrefix + "/span[2]");
+
+ waitForElement(xpathPrefix + "/div/div[2]");
+
+ text = selenium.getAttribute(xpathPrefix + "/div@id");
+ assertFalse(text.contains("display: none;"),
+ "Source should be visible -- it should not contain 'display:
none;'");
+
+ text = selenium.getText(xpathPrefix + "/div/div[2]/div/div/span[1]");
+ assertEquals(text, first, "The code should start with '" + first +
"'.");
+
+ text = selenium.getText(xpathPrefix + "/div/div[2]/div/div/span[2]");
+ assertEquals(text, second);
+
+ // click on 'Hide'
+ selenium.click(xpathPrefix + "/span[1]");
+
+ // wait while 'style' attribute changes
+ for (int i = 0; i * 100 <= 10000; i++) {
+ text = selenium.getAttribute(xpathPrefix + "/div@style");
+ if (text.contains("display: none;")) {
+ break;
+ }
+ waitFor(100);
+ }
+
+ assertTrue(text.contains("display: none;"), "Source should be
hidden.");
+ }
+
+ /**
+ * An abstract implementation of test for testing source code of examples.
+ *
+ * @param fieldset
+ * the number of the example
+ * @param linkLabel
+ * the label of link, e.g. "View Source"
+ * @param expected
+ * an array of strings that should be in the snippet
+ */
+ protected void abstractTestSource(int fieldset, String linkLabel, String[] expected)
{
+ final String xpathPrefix =
String.format("//fieldset[%d]/div/div/span[contains(text(), '%s')]/..",
fieldset,
+ linkLabel);
+ String text = null;
+
+ scrollIntoView(xpathPrefix, true);
+
+ text = selenium.getAttribute(xpathPrefix + "/div@style");
+ assertTrue(text.contains("display: none;"),
+ "Source should not be visible -- it has to contain 'display:
none;'.");
+
+ // click on 'View xxx Source'
+ waitForElement(xpathPrefix + "/span[2]");
+ selenium.click(xpathPrefix + "/span[2]");
+
+ waitForElement(xpathPrefix + "/div/div[2]");
+
+ text = selenium.getAttribute(xpathPrefix + "/div@id");
+ assertFalse(text.contains("display: none;"),
+ "Source should be visible -- it should not contain 'display:
none;'");
+
+ text = selenium.getText(xpathPrefix + "/div/div[2]/div/div");
+
+ for (String str : expected) {
+ assertTrue(text.contains(str), "The code should contain \"" +
str + "\".");
+ }
+
+ // click on 'Hide'
+ selenium.click(xpathPrefix + "/span[1]");
+
+ // wait while 'style' attribute changes
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return selenium.getAttribute(xpathPrefix +
"/div(a)style").contains("display: none;");
+ }
+ });
+
+ text = selenium.getAttribute(xpathPrefix + "/div@style");
+ assertTrue(text.contains("display: none;"), "Source should be
hidden.");
+ }
+
+ /**
+ * <p>
+ * <b>Deprecated.</b> <i>This method is replaced by method
+ * {@link #openComponent(String)} and {{@link #openTab(String)}</i>
+ * </p>
+ *
+ * Loads the page defined in contextPath. There is a 5-second timeout.
+ *
+ * @param group
+ * ID of div element that represents a group of menu items in
+ * main menu, e.g. ajaxSupport,richInputs, richValidators, etc.
+ * @param index
+ * which menu item from the group should be clicked, numbered
+ * from 1
+ * @param text
+ * wait while the specified text appears on the page; it does not
+ * wait if the text is null
+ */
+ // TODO: remove this @deprecated method
+ @Deprecated
+ protected void loadPage(String group, int index, String text) {
+ loadPage(group, index, 1, text);
+ }
+
+ /**
+ * <p>
+ * <b>Deprecated.</b> <i>This method is replaced by method
+ * {@link #openComponent(String)} and {{@link #openTab(String)}</i>
+ * </p>
+ *
+ * Loads the page defined in contextPath. There is a 5-second timeout.
+ *
+ * @param group
+ * ID of div element that represents a group of menu items in
+ * main menu, e.g. ajaxSupport,richInputs, richValidators, etc.
+ * @param index
+ * which menu item from the group should be clicked, numbered
+ * from 1
+ * @param tab
+ * the number of the tab
+ * @param text
+ * wait while the specified text appears on the page; it does not
+ * wait if the text is null
+ */
+ // TODO: remove this @deprecated method
+ @Deprecated
+ protected void loadPage(String group, int index, int tab, String text) {
+
+ selenium.open(contextPath);
+ selenium.waitForPageToLoad("5000");
+
+ String menuItem =
String.format("//div[@id='%s']/div[3]/table/tbody/tr/td/table/tbody/tr[%d]/td[2]/a",
group,
+ index);
+
+ // click the group
+ selenium.click(group);
+ // click the menu item
+ selenium.click(menuItem);
+
+
waitForElement("//table[@class='content_container']/tbody/tr/td[2]/table/tbody/tr[1]/td/form/table/tbody/tr/td["
+ + (tab * 2) + "]/table");
+ selenium
+
.click("//table[@class='content_container']/tbody/tr/td[2]/table/tbody/tr[1]/td/form/table/tbody/tr/td["
+ + (tab * 2) + "]/table");
+
+ if (text != null) {
+ waitForText(text);
+ }
+ }
+
+ /**
+ * <p>
+ * Opens new page on contextPath's location and then selects in menu the
+ * item specified by componentName and waits for Component's page is opened.
+ * </p>
+ *
+ * <p>
+ * If componen's page is already opened, skip phase of menu selection.
+ * </p>
+ *
+ * <p>
+ * For opening specified tab of Component's page use
+ * {@link #openTab(String)}.
+ * </p>
+ *
+ * @param componentName
+ * name of component given from components' menu on the left of
+ * RF Live Demo application
+ */
+ protected void openComponent(final String componentName) {
+
+ final String LOC_MENU_ITEM = format(
+ "//table[@class='left_menu']//td[contains(@class,
'text')]//a/span[normalize-space(text())='{0}']",
+ componentName);
+
+ // TODO needs to open clean page, see {@link
+ //
https://jira.jboss.org/jira/browse/RF-7640}
+ selenium.getEval("selenium.doDeleteAllVisibleCookies()");
+
+ // open context path of application
+ selenium.open(contextPath);
+
+ // wait for new page is opened
+ selenium.waitForPageToLoad("5000");
+
+ // if component's page is already opened, skin selecting from menu
+ if (isComponentPageActive(componentName)) {
+ return;
+ }
+
+ // click the menu item
+ selenium.click(LOC_MENU_ITEM);
+
+ // wait for component's page opened
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return isComponentPageActive(componentName);
+ }
+ });
+ }
+
+ private boolean isComponentPageActive(String componentName) {
+ final String LOC_OUTPUT_COMPONENT_NAME =
"//body/table[@class='left_menu']//*[contains(@class,'panel_documents')]//strong";
+ return componentName.equals(getTextOrNull(LOC_OUTPUT_COMPONENT_NAME));
+ }
+
+ /**
+ * <p>
+ * Opens specified tab on the Component's page.
+ * </p>
+ *
+ * <p>
+ * If tab is already opened, skip phase of tab selection.
+ * </p>
+ *
+ * <p>
+ * Use this method after opening page by {@link #openComponent(String)}.
+ * </p>
+ *
+ * @param tabTitle
+ * title on the tab header, which should be opened.
+ */
+ protected void openTab(String tabTitle) {
+
+ final String LOC_TAB = format(
+ "//form[contains(@id,
':_form')]//td[contains(@class,'rich-tab-header') and
text()='{0}']", tabTitle);
+
+ if (belongsClass("rich-tab-active", LOC_TAB)) {
+ return;
+ }
+
+ waitForElement(LOC_TAB);
+ selenium.click(LOC_TAB);
+
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return belongsClass("rich-tab-active", LOC_TAB);
+ }
+ });
+ }
+
+ /**
+ * Controls that for each method should be started new browser session.
+ *
+ * It means that after each method except last is browser session stopped
+ * and before each method except first is started clean browser session.
+ */
+ protected void setCleanSessionForEachMethod(boolean cleanSessionForEachMethod) {
+ this.cleanSessionForEachMethod = cleanSessionForEachMethod;
+ }
+
+ private boolean cleanSessionForEachMethod = false;
+
+ @BeforeMethod
+ public void startBrowserIfNotFirstTestMethod(ITestContext context) {
+ if (cleanSessionForEachMethod) {
+ if (0 < getRunnedTestCount(context)) {
+ selenium.start();
+ }
+ }
+ }
+
+ @AfterMethod
+ public void stopBrowserIfNotLastTestMethod(ITestContext context) {
+ if (cleanSessionForEachMethod) {
+ if (getRunnedTestCount(context) + 1 < context.getAllTestMethods().length)
{
+ selenium.stop();
+ }
+ }
+ }
+
+ private int getRunnedTestCount(ITestContext context) {
+ return context.getPassedTests().size() + context.getSkippedTests().size() +
context.getFailedTests().size();
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/actionParameter/ActionParameterTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/actionParameter/ActionParameterTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/actionParameter/ActionParameterTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,108 @@
+package org.jboss.richfaces.integrationTest.actionParameter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class ActionParameterTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/actionparam.jsf?c=actionparam&tab=usage");
+ }
+
+ @Test
+ public void selectingNames() {
+ openPage();
+
+ String prefix = getMess("selected-name--prefix");
+ final String selectedName = formatLoc("selected-name--text", prefix);
+
+ Assert.assertEquals(prefix, selenium.getText(selectedName));
+
+ String[] guys = new String[] { getMess("first-guy"),
+ getMess("second-guy") };
+
+ for (String guy : guys) {
+ String button = formatLoc("selected-name--button", guy);
+ final String expect = formatMess("selected-name--pattern", prefix,
+ guy);
+
+ selenium.click(button);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return expect.equals(selenium.getText(selectedName));
+ }
+ });
+ }
+ }
+
+ @Test
+ @SuppressWarnings("serial")
+ public void selectingSkin() {
+ openPage();
+
+ final String changeSkinLabel = getLoc("change-skin--label");
+
+ Map<String, String> skins = new HashMap<String, String>() {
+ {
+ put(getMess("skin-1-name"), getMess("skin-1-color"));
+ put(getMess("skin-2-name"), getMess("skin-2-color"));
+ }
+ };
+
+ for (String skin : skins.keySet()) {
+ final String expected = skins.get(skin);
+
+ String skinAnchor = formatLoc("change-skin--link-relative",
+ changeSkinLabel, skin);
+
+ selenium.click(skinAnchor);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ String actual = getStyle(changeSkinLabel,
+ "background-color");
+ return expected.equals(actual);
+ }
+ });
+ }
+ }
+
+ @Test
+ public void showScreenSize() {
+ openPage();
+
+ String screenSizeButton = getLoc("screen-size--button");
+
+ final String widthText = formatLoc("screen-size--width--text-relative",
+ screenSizeButton);
+ final String heightText = formatLoc(
+ "screen-size--height--text-relative", screenSizeButton);
+
+ final String expectedWidth = selenium.getEval("screen.width");
+ final String expectedHeight = selenium.getEval("screen.height");
+
+ selenium.click(screenSizeButton);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return expectedWidth.equals(selenium.getText(widthText))
+ && expectedHeight.equals(selenium.getText(heightText));
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxForm/AjaxFormTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxForm/AjaxFormTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxForm/AjaxFormTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,76 @@
+package org.jboss.richfaces.integrationTest.ajaxForm;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.thoughtworks.selenium.Wait;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AjaxFormTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/form.jsf?c=form&tab=usage");
+
+ scrollIntoView(header, true);
+ }
+
+ private String header = "//legend[text()='AjaxForm Demo']";
+ private String ajaxButton = getLoc("ajax-form--ajax-button");
+ private String nonAjaxButton = getLoc("ajax-form--non-ajax-button");
+ private String textRelative = "ajax-form--text-relative";
+ private String ajaxText = formatLoc(textRelative, ajaxButton);
+ private String nonAjaxText = formatLoc(textRelative, nonAjaxButton);
+
+ @Test
+ public void testNonAjaxSubmit() {
+ openPage();
+ nonAjaxSubmit();
+ }
+
+ @Test
+ public void testAjaxSubmit() {
+ openPage();
+ ajaxSubmit();
+ }
+
+ @Test
+ public void testInterleaving() {
+ openPage();
+ ajaxSubmit();
+ nonAjaxSubmit();
+ ajaxSubmit();
+ nonAjaxSubmit();
+ }
+
+ public void nonAjaxSubmit() {
+ String expected = getMess("ajax-form--non-ajax-result");
+
+ selenium.click(nonAjaxButton);
+ selenium.waitForPageToLoad(String.valueOf(Wait.DEFAULT_TIMEOUT));
+ scrollIntoView(header, true);
+
+ String actual = selenium.getText(ajaxText);
+ Assert.assertEquals(actual, expected);
+
+ actual = selenium.getText(nonAjaxText);
+ Assert.assertEquals(actual, expected);
+ }
+
+ public void ajaxSubmit() {
+ String expected = getMess("ajax-form--ajax-result");
+
+ String startingNonAjaxText = selenium.getText(nonAjaxText);
+
+ selenium.click(ajaxButton);
+ waitForTextEquals(ajaxText, expected);
+
+ String actual = selenium.getText(nonAjaxText);
+ Assert.assertEquals(actual, startingNonAjaxText);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxRegion/AjaxRegionTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxRegion/AjaxRegionTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxRegion/AjaxRegionTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,155 @@
+package org.jboss.richfaces.integrationTest.ajaxRegion;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Not;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AjaxRegionTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/region.jsf?c=region&tab=usage");
+ }
+
+ private String input = getMess("ajax-region--input");
+ private String firedEvent = getMess("ajax-region--fired-event");
+ private String name1 = formatLoc("ajax-region--input", 1, 1, 1);
+ private String job1 = formatLoc("ajax-region--input", 1, 1, 2);
+ private String name2 = formatLoc("ajax-region--input", 1, 2, 1);
+ private String name3 = formatLoc("ajax-region--input", 2, 1, 1);
+ private String name4 = formatLoc("ajax-region--input", 2, 2, 1);
+ private String messages = getLoc("ajax-region--messages");
+ private String outname = formatLoc("ajax-region--typed-name", "");
+ private String outname2 = formatLoc("ajax-region--typed-name",
"2");
+ private String textDisappears = formatLoc("ajax-region--influenced-text", 3);
+ private String textNotDisappears = formatLoc("ajax-region--influenced-text",
4);
+
+ @Test
+ public void testName1DontPassValidation() {
+ openPage();
+ name1DontPassValidation();
+ }
+
+ @Test
+ public void testJob1ChangeDontInfluenceName1ValidationError() {
+ testName1DontPassValidation();
+ job1ChangeInfluenceName1Validation();
+ }
+
+ @Test
+ public void testName1CanBeChangedAnywayIfJob1IsNotBlank() {
+ testJob1ChangeDontInfluenceName1ValidationError();
+ name1CanBeChangedAnywayIfJob1IsNotBlank();
+ }
+
+ @Test
+ public void test2CanBeChangedAnyway() {
+ openPage();
+ trySomeInputs(name2);
+ }
+
+ @Test
+ public void textWillDisappear() {
+ openPage();
+
+ Assert.assertTrue(StringUtils.isNotBlank(selenium.getText(textDisappears)));
+
+ selenium.type(name3, input);
+ selenium.fireEvent(name3, "keyup");
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return formatMess("ajax-region--typed-name",
input(input)).equals(selenium.getText(outname2));
+ }
+ });
+
+ Assert.assertTrue(StringUtils.isBlank(selenium.getText(textDisappears)));
+ }
+
+ @Test
+ public void textWillNotDisappear() {
+ openPage();
+
+ Assert.assertTrue(StringUtils.isNotBlank(selenium.getText(textNotDisappears)));
+
+ selenium.type(name4, input);
+ selenium.fireEvent(name4, "keyup");
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return formatMess("ajax-region--typed-name",
input(input)).equals(selenium.getText(outname2));
+ }
+ });
+
+ Assert.assertTrue(StringUtils.isNotBlank(selenium.getText(textNotDisappears)));
+ }
+
+ public void name1DontPassValidation() {
+ selenium.type(name1, input);
+ selenium.fireEvent(name1, firedEvent);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ if (!selenium.isElementPresent(messages)) return false;
+ return
selenium.getText(messages).contains(getMess("ajax-region--value-is-required"));
+ }
+ });
+
+ Assert.assertEquals(selenium.getText(outname),
formatMess("ajax-region--typed-name", ""));
+ }
+
+ public void job1ChangeInfluenceName1Validation() {
+ Assert.assertTrue(selenium.getText(messages).contains(getMess("ajax-region--value-is-required")));
+
+ selenium.type(job1, input);
+ selenium.fireEvent(name1, "keyup");
+
+ Wait.until(new Not() {
+ public boolean not() {
+ return selenium.isElementPresent(messages);
+ }
+ });
+
+ Assert.assertEquals(selenium.getText(outname),
formatMess("ajax-region--typed-name", input(input)));
+ }
+
+ public void name1CanBeChangedAnywayIfJob1IsNotBlank() {
+ Assert.assertFalse(selenium.isElementPresent(messages));
+ Assert.assertTrue(StringUtils.isNotBlank(selenium.getValue(job1)));
+
+ trySomeInputs(name1);
+ }
+
+ public void trySomeInputs(String locator) {
+ for (final String enter : new String[]{"", input}) {
+ selenium.type(locator, enter);
+ selenium.fireEvent(locator, "keyup");
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return formatMess("ajax-region--typed-name",
input(enter)).equals(selenium.getText(outname));
+ }
+ });
+
+ Assert.assertFalse(selenium.isElementPresent(messages));
+ }
+ }
+
+ public String input(String input) {
+ if (StringUtils.isBlank(input)) {
+ return "";
+ } else {
+ return " " + input;
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxSupport/AjaxSupportTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxSupport/AjaxSupportTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxSupport/AjaxSupportTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,60 @@
+package org.jboss.richfaces.integrationTest.ajaxSupport;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AjaxSupportTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/support.jsf?c=support&tab=usage");
+ }
+
+ private String textInput = getLoc("ajax-support--input");
+ private String relativeText = formatLoc("ajax-support--text-relative",
+ textInput);
+ private String nonEmpty = getMess("ajax-support--non-empty");
+ private String inputEvent = getMess("ajax-support--input-event");
+
+ @Test
+ public void testNonEmpty() {
+ openPage();
+ nonEmpty();
+ }
+
+ @Test
+ public void testEmpty() {
+ openPage();
+ empty();
+ }
+
+ @Test
+ public void testInterleaving() {
+ openPage();
+ nonEmpty();
+ empty();
+ nonEmpty();
+ empty();
+ }
+
+ public void nonEmpty() {
+ selenium.type(textInput, nonEmpty);
+ selenium.fireEvent(textInput, inputEvent);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ waitForTextEquals(relativeText, nonEmpty);
+ }
+
+ public void empty() {
+ selenium.type(textInput, "");
+ selenium.fireEvent(textInput, inputEvent);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ waitForTextEquals(textInput, "");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AbstractAjaxValidatorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AbstractAjaxValidatorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AbstractAjaxValidatorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,45 @@
+package org.jboss.richfaces.integrationTest.ajaxValidator;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.Assert;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AbstractAjaxValidatorTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/ajaxValidator.jsf?c=ajaxValidator&tab=usage");
+ }
+
+ /**
+ * Fires selenium actions "type input" with given value and
+ * "blur from element" on specified locator.
+ *
+ * @param locator
+ * the locator where should be fired actions
+ * @param value
+ * the value which should be typed in "type input" action
+ */
+ public void typeAndBlur(String locator, String value) {
+ selenium.type(locator, value);
+ selenium.fireEvent(locator, "blur");
+ }
+
+ /**
+ * Get locator of message box for element given by locator
+ *
+ * @param locator
+ * for which element should be find message box
+ * @return locator of message box for element given by locator
+ */
+ public String getMessageFor(String locator) {
+ return String.format(getLoc("relativeMessageLink"), locator);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorHibernatePartTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorHibernatePartTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorHibernatePartTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,130 @@
+package org.jboss.richfaces.integrationTest.ajaxValidator;
+
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AjaxValidatorHibernatePartTestCase extends
+ AbstractAjaxValidatorTestCase {
+
+ /* COMPONENTS */
+
+ private final String name = getLoc("hibernateName");
+ private final String age = getLoc("hibernateAge");
+ private final String email = getLoc("hibernateEmail");
+
+ /* TESTS */
+
+ @Test
+ public void nameValueRequired() {
+ openPage();
+ typeAndBlur(name, "");
+ waitForTextEquals(getMessageFor(name), formatMess("value-required",
+ name));
+ }
+
+ @Test
+ public void nameMinimumLength() {
+ openPage();
+ typeAndBlur(name, getMess("less-than-minimum--enter"));
+ waitForTextEquals(getMessageFor(name), getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameMaximumLength() {
+ openPage();
+ typeAndBlur(name, getMess("greater-than-maximum--enter"));
+ waitForTextEquals(getMessageFor(name), getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameOnlySpacesPattern() {
+ openPage();
+ typeAndBlur(name, " ");
+ waitForTextEquals(getMessageFor(name), getMess("bean-name--not-empty"));
+ }
+
+ @Test
+ public void nameMessageDisappers() {
+ nameValueRequired();
+ typeAndBlur(name, getMess("bean-name--valid-input"));
+ waitForTextEquals(getMessageFor(name), "");
+ }
+
+ @Test
+ public void ageValueRequired() {
+ openPage();
+ typeAndBlur(age, "");
+ waitForTextEquals(getMessageFor(age), getMess("may-not-be-null"));
+ }
+
+ @Test
+ public void ageMinimumValue() {
+ openPage();
+ typeAndBlur(age, getMess("long-range--bellow"));
+ waitForTextEquals(getMessageFor(age), getMess("bean-age--min"));
+ }
+
+ @Test
+ public void ageMaximumValue() {
+ openPage();
+ typeAndBlur(age, getMess("bean-age--max--enter"));
+ waitForTextEquals(getMessageFor(age), getMess("bean-age--max"));
+ }
+
+ @Test
+ public void ageIntegerOnly() {
+ openPage();
+ typeAndBlur(age, formatMess("age-integer-only--enter", age));
+ waitForTextEquals(getMessageFor(age), formatMess(
+ "bean-age--integer-only", age));
+ }
+
+ @Test
+ public void ageMessageDisappers() {
+ ageValueRequired();
+ typeAndBlur(age, getMess("valid-age"));
+ waitForTextEquals(getMessageFor(age), "");
+ }
+
+ @Test
+ public void emailMayNotBeNullOrEmpty() {
+ openPage();
+ typeAndBlur(email, "");
+ waitForTextEquals(getMessageFor(email),
+ getMess("may-not-be-null-or-empty"));
+ }
+
+ @Test
+ public void emailOnlySpaces() {
+ openPage();
+ typeAndBlur(email, " ");
+ waitForTextEquals(getMessageFor(email),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad1() {
+ openPage();
+ typeAndBlur(email, getMess("bad-email-1"));
+ waitForTextEquals(getMessageFor(email),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad2() {
+ openPage();
+ typeAndBlur(email, getMess("bad-email-2"));
+ waitForTextEquals(getMessageFor(email),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailMessageDisappers() {
+ emailMayNotBeNullOrEmpty();
+ typeAndBlur(email, getMess("well-formed-email"));
+ waitForTextEquals(getMessageFor(email), "");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/ajaxValidator/AjaxValidatorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,86 @@
+package org.jboss.richfaces.integrationTest.ajaxValidator;
+
+import java.text.MessageFormat;
+
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class AjaxValidatorTestCase extends AbstractAjaxValidatorTestCase {
+
+ /* COMPONENTS */
+
+ private final String name = getLoc("name");
+ private final String age = getLoc("age");
+
+ /* TESTS */
+
+ @Test
+ public void nameValueRequired() {
+ openPage();
+ typeAndBlur(name, "");
+ waitForTextEquals(getMessageFor(name), formatMess("value-required",
+ name));
+ }
+
+ @Test
+ public void nameMinimumLength() {
+ openPage();
+ typeAndBlur(name, getMess("less-than-minimum--enter"));
+ waitForTextEquals(getMessageFor(name), formatMess("less-than-minimum",
+ name));
+ }
+
+ @Test
+ public void nameMaximumLength() {
+ openPage();
+ typeAndBlur(name, getMess("greater-than-maximum--enter"));
+ waitForTextEquals(getMessageFor(name), formatMess(
+ "greater-than-maximum", name));
+ }
+
+ @Test
+ public void nameMessageDisappers() {
+ nameValueRequired(); // violates validation message
+ typeAndBlur(name, getMess("valid-name"));
+ waitForTextEquals(getMessageFor(name), "");
+ }
+
+ @Test
+ public void ageValueRequired() {
+ openPage();
+ typeAndBlur(age, "");
+ waitForTextEquals(getMessageFor(age), formatMess("value-required", age));
+ }
+
+ @Test
+ public void ageMinimumValue() {
+ openPage();
+ typeAndBlur(age, getMess("long-range--bellow"));
+ waitForTextEquals(getMessageFor(age), formatMess("long-range", age));
+ }
+
+ @Test
+ public void ageMaximumValue() {
+ openPage();
+ typeAndBlur(age, getMess("long-range--above"));
+ waitForTextEquals(getMessageFor(age), formatMess("long-range", age));
+ }
+
+ @Test
+ public void ageIntegerOnly() {
+ openPage();
+ typeAndBlur(age, getMess("age-integer-only--enter"));
+ waitForTextEquals(getMessageFor(age), formatMess("age-integer-only",
+ age));
+ }
+
+ @Test
+ public void ageMessageDisappers() {
+ ageValueRequired();
+ typeAndBlur(age, getMess("valid-age"));
+ waitForTextEquals(getMessageFor(age), "");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/beanValidator/BeanValidatorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/beanValidator/BeanValidatorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/beanValidator/BeanValidatorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,150 @@
+package org.jboss.richfaces.integrationTest.beanValidator;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class BeanValidatorTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/beanValidator.jsf?c=beanValidator&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("bean-validator--header");
+ private String buttonSubmit = getLoc("bean-validator--button--submit");
+ private String inputName = getLoc("bean-validator--input--name");
+ private String inputEmail = getLoc("bean-validator--input--email");
+ private String inputAge = getLoc("bean-validator--input--age");
+ private String relativeValidationMessage =
getLoc("bean-validator--relative--validation-message");
+
+ private void typeAndSubmit(String locator, String value) {
+ selenium.type(locator, value);
+ selenium.click(buttonSubmit);
+ }
+
+ public String getMessageFor(String locator) {
+ return format(relativeValidationMessage, locator);
+ }
+
+ @Test
+ public void nameValueRequired() {
+ openPage();
+ typeAndSubmit(inputName, "");
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("may-not-be-null-or-empty"));
+ }
+
+ @Test
+ public void nameMinimumLength() {
+ openPage();
+ typeAndSubmit(inputName, getMess("less-than-minimum--enter"));
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameMaximumLength() {
+ openPage();
+ typeAndSubmit(inputName, getMess("greater-than-maximum--enter"));
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameOnlySpacesPattern() {
+ openPage();
+ typeAndSubmit(inputName, " ");
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("bean-name--not-empty"));
+ }
+
+ @Test
+ public void nameMessageDisappers() {
+ nameValueRequired();
+ typeAndSubmit(inputName, getMess("bean-name--valid-input"));
+ waitForTextEquals(getMessageFor(inputName), "");
+ }
+
+ @Test
+ public void ageValueRequired() {
+ openPage();
+ typeAndSubmit(inputAge, "");
+ waitForTextEquals(getMessageFor(inputAge), getMess("may-not-be-null"));
+ }
+
+ @Test
+ public void ageMinimumValue() {
+ openPage();
+ typeAndSubmit(inputAge, getMess("long-range--bellow"));
+ waitForTextEquals(getMessageFor(inputAge), getMess("bean-age--min"));
+ }
+
+ @Test
+ public void ageMaximumValue() {
+ openPage();
+ typeAndSubmit(inputAge, getMess("bean-age--max--enter"));
+ waitForTextEquals(getMessageFor(inputAge), getMess("bean-age--max"));
+ }
+
+ @Test
+ public void ageIntegerOnly() {
+ openPage();
+ typeAndSubmit(inputAge, formatMess("age-integer-only--enter", inputAge));
+ waitForTextEquals(getMessageFor(inputAge), formatMess(
+ "bean-age--integer-only", selenium.getAttribute(format(
+ "{0}/@id", inputAge))));
+ }
+
+ @Test
+ public void ageMessageDisappers() {
+ ageValueRequired();
+ typeAndSubmit(inputAge, getMess("valid-age"));
+ waitForTextEquals(getMessageFor(inputAge), "");
+ }
+
+ @Test
+ public void emailMayNotBeNullOrEmpty() {
+ openPage();
+ typeAndSubmit(inputEmail, "");
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("may-not-be-null-or-empty"));
+ }
+
+ @Test
+ public void emailOnlySpaces() {
+ openPage();
+ typeAndSubmit(inputEmail, " ");
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad1() {
+ openPage();
+ typeAndSubmit(inputEmail, getMess("bad-email-1"));
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad2() {
+ openPage();
+ typeAndSubmit(inputEmail, getMess("bad-email-2"));
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailMessageDisappers() {
+ emailMayNotBeNullOrEmpty();
+ typeAndSubmit(inputEmail, getMess("well-formed-email"));
+ waitForTextEquals(getMessageFor(inputEmail), "");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarStylingTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarStylingTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarStylingTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,77 @@
+package org.jboss.richfaces.integrationTest.calendar;
+
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests styling in calendar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class CalendarStylingTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION_3 =
getMsg("COMPONENT_DESCRIPTION_3");
+ private final String MSG_EVERY_THIRD_CELL = getMsg("EVERY_THIRD_CELL");
+
+ // locators
+ private final String LOC_STYLING_FIELDSET = getLoc("STYLING_FIELDSET");
+ private final String LOC_STYLING_CELL_X_Y = getLoc("STYLING_CELL_X_Y");
+ private final String LOC_STYLING_CALENDAR_BUTTON =
getLoc("STYLING_CALENDAR_BUTTON");
+ private final String LOC_STYLING_RIGHT_ARROW =
getLoc("STYLING_RIGHT_ARROW");
+
+ /**
+ * Tests the styling functionality of the calendar. It goes through all days
+ * of a month and checks that each day that is a multiple of 3 is either
+ * disabled (boundary dates) or is styled (days from selected month).
+ */
+ @Test
+ public void testStyling() {
+ selenium.click(LOC_STYLING_CALENDAR_BUTTON);
+ selenium.click(LOC_STYLING_RIGHT_ARROW);
+ selenium.click(LOC_STYLING_RIGHT_ARROW);
+
+ String text = null;
+ int date = 0;
+
+ for (int i = 3; i < 9; i++) {
+ for (int j = 2; j < 9; j++) {
+ text = selenium.getText(String.format(LOC_STYLING_CELL_X_Y, i, j));
+ date = Integer.parseInt(text);
+ if (date % 3 == 0) {
+ text = selenium.getAttribute(String.format(LOC_STYLING_CELL_X_Y, i,
j) + "@class");
+ assertTrue(text.contains("everyThirdDay") ||
text.contains("rich-calendar-boundary-dates"),
+ MSG_EVERY_THIRD_CELL);
+ }
+ }
+ }
+ }
+
+ /**
+ * Tests the "View Source" in the first example. It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"", ".everyThirdDay{",
+ "background-color:gray;", "<script
type=\"text/javascript\">", "function
disablementFunction(day){",
+ "if (day.isWeekend) return false;", "function
disabledClassesProv(day){",
+ "if (day.day%3==0) res+='everyThirdDay';", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 1, 3, MSG_COMPONENT_DESCRIPTION_3);
+ scrollIntoView(LOC_STYLING_FIELDSET, true);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,359 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.calendar;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Calendar;
+import java.util.Locale;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the calendar component. It tests the "Usage" tab.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class CalendarTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // components on the page
+ private final String LOC_CALENDAR_HEADER = getLoc("CALENDAR_HEADER");
+ private final String LOC_DATE_INPUT = getLoc("DATE_INPUT");
+ private final String LOC_DATE_BUTTON = getLoc("DATE_BUTTON");
+ private final String LOC_INPUTS = getLoc("INPUTS");
+ private final String LOC_POPUP_MODE_CHECKBOX =
getLoc("POPUP_MODE_CHECKBOX");
+ private final String LOC_APPLY_BUTTON_CHECKBOX =
getLoc("APPLY_BUTTON_CHECKBOX");
+ private final String LOC_LOCALE_SELECT = getLoc("LOCALE_SELECT");
+ private final String LOC_DATE_PATTERN_SELECT =
getLoc("DATE_PATTERN_SELECT");
+
+ // components in the calendar
+ private final String LOC_CALENDAR = getLoc("CALENDAR");
+ private final String LOC_DOUBLE_LEFT_ARROW = getLoc("DOUBLE_LEFT_ARROW");
+ private final String LOC_LEFT_ARROW = getLoc("LEFT_ARROW");
+ private final String LOC_MONTH_YEAR_LABEL = getLoc("MONTH_YEAR_LABEL");
+ private final String LOC_RIGHT_ARROW = getLoc("RIGHT_ARROW");
+ private final String LOC_DOUBLE_RIGHT_ARROW =
getLoc("DOUBLE_RIGHT_ARROW");
+ private final String LOC_CLOSE_BUTTON = getLoc("CLOSE_BUTTON");
+ private final String LOC_CLEAN_BUTTON = getLoc("CLEAN_BUTTON");
+ private final String LOC_TODAY_BUTTON = getLoc("TODAY_BUTTON");
+ private final String LOC_APPLY_BUTTON = getLoc("APPLY_BUTTON");
+ private final String LOC_RANDOM_DAY = getLoc("RANDOM_DAY");
+
+ private enum Month {
+
+ JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER,
NOVEMBER, DECEMBER;
+
+ public static Month previous(Month month) {
+ return month == Month.JANUARY ? Month.DECEMBER :
Month.values()[month.ordinal() - 1];
+ }
+
+ public static Month following(Month month) {
+ return month == Month.DECEMBER ? Month.JANUARY :
Month.values()[month.ordinal() + 1];
+ }
+ };
+
+ /**
+ * Tests basic functionality. It checks that the calendar is not visible at
+ * the beginning, then it clicks into input field, and checks the visibility
+ * of the calendar. At the end, it clicks into input field again and checks
+ * the visibility of component. The component should be invisible at the
+ * beginning, then visible, and it should hide on second click.
+ */
+ @Test
+ public void testClickIntoDateInput() {
+ assertFalse(isDisplayed(LOC_CALENDAR), "The calendar component should not be
visible at the beginning.");
+
+ selenium.click(LOC_DATE_INPUT);
+ assertTrue(isDisplayed(LOC_CALENDAR), "The calendar component should be
visible after clicking to date input.");
+
+ selenium.click(LOC_DATE_INPUT);
+ assertFalse(isDisplayed(LOC_CALENDAR),
+ "The calendar component should not be visible after second click to
date input.");
+ }
+
+ /**
+ * Tests basic functionality. It checks that the calendar is not visible at
+ * the beginning, then it clicks on button next to date input field, and
+ * checks the visibility of the calendar. At the end, it clicks on the
+ * button again and checks the visibility of component. The component should
+ * be invisible at the beginning, then visible, and it should hide on second
+ * click.
+ */
+ @Test
+ public void testClickOnDateButton() {
+ assertFalse(isDisplayed(LOC_CALENDAR), "The calendar component should not be
visible at the beginning.");
+
+ selenium.click(LOC_DATE_BUTTON);
+ assertTrue(isDisplayed(LOC_CALENDAR),
+ "The calendar component should be visible after clicking on calendar
button.");
+
+ selenium.click(LOC_DATE_BUTTON);
+ assertFalse(isDisplayed(LOC_CALENDAR),
+ "The calendar component should not be visible after second click on
calendar button.");
+ }
+
+ /**
+ * Tests navigation in calendar. At first it click left double arrow to
+ * change year and checks that the year changed (e.g. 2009 -> 2008). Then it
+ * clicks the simple left arrow to change month and verifies that the month
+ * changed (e.g. May -> April). In the next step, it click the "Today"
+ * button. Then it performs the same steps for right arrow and double right
+ * arrow. In the end it clicks on the "Close" button and verify that the
+ * calendar is not visible.
+ */
+ @Test
+ public void testNavigation() {
+ selenium.click(LOC_DATE_BUTTON);
+
+ // LOC_MONTH_YEAR_LABEL contains e.g. "August, 2009"
+ Month month =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ int year =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+
+ selenium.click(LOC_DOUBLE_LEFT_ARROW);
+ int newYear =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+ assertEquals(newYear, year - 1,
+ "Calendar should show the previous year after clicking on the left
double arrow.");
+
+ selenium.click(LOC_LEFT_ARROW);
+ Month newMonth =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ assertEquals(newMonth, Month.previous(month),
+ "Calendar should show the previous month after clicking on the left
arrow.");
+
+ selenium.click(LOC_TODAY_BUTTON);
+ newMonth =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ assertEquals(newMonth, month, "Calendar should show today's month after
clicking on \"today\".");
+ newYear =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+ assertEquals(newYear, year, "Calendar should show today's month after
clicking on \"today\".");
+
+ // TODO check also the day
+
+ selenium.click(LOC_DOUBLE_RIGHT_ARROW);
+ newYear =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+ assertEquals(newYear, year + 1,
+ "Calendar should show the following year after clicking on the right
double arrow.");
+
+ selenium.click(LOC_RIGHT_ARROW);
+ newMonth =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ assertEquals(newMonth, Month.following(month),
+ "Calendar should show the following month after clicking on the
right arrow.");
+
+ selenium.click(LOC_CLOSE_BUTTON);
+ assertFalse(isDisplayed(LOC_CALENDAR),
+ "The calendar component should not be visible after second click on
calendar button.");
+ }
+
+ /**
+ * Tests choosing a date in calendar and cleaning selection. At first, it
+ * selects a day on 4th line and 2nd column, clicks "Apply" and verifies
+ * that input field changed. Then it clicks "Clean" followed by
"Apply" and
+ * checks that the input field is empty.
+ */
+ @Test
+ public void testChooseDateAndClean() {
+ selenium.click(LOC_DATE_BUTTON);
+ Month month =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ int year =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+
+ String date = selenium.getText(LOC_RANDOM_DAY);
+ assertFalse(belongsClass("rich-calendar-select", LOC_RANDOM_DAY),
format(
+ "The date {0} should not be selected.", date));
+
+ selenium.click(LOC_RANDOM_DAY);
+ selenium.click(LOC_APPLY_BUTTON);
+
+ date = selenium.getText(LOC_RANDOM_DAY);
+ assertTrue(belongsClass("rich-calendar-select", LOC_RANDOM_DAY),
format("The date {0} should be selected.",
+ date));
+
+ selenium.click(LOC_APPLY_BUTTON);
+ String dateTime = selenium.getValue(LOC_DATE_INPUT);
+ StringBuilder expected = new StringBuilder(date);
+ expected.append("/");
+ expected.append(month.ordinal() + 1);
+ expected.append("/");
+ expected.append(String.format("%02d", year % 100));
+ expected.append(" 12:00");
+ assertEquals(dateTime, expected.toString(), "Date and time should appear in
input field.");
+
+ selenium.click(LOC_DATE_BUTTON);
+ selenium.click(LOC_CLEAN_BUTTON);
+ selenium.click(LOC_APPLY_BUTTON);
+ dateTime = selenium.getText(LOC_DATE_INPUT);
+ assertEquals(dateTime, "", "Date input field should be
empty.");
+ }
+
+ /**
+ * Tests the "Popup Mode" checkbox. It unchecks the checkbox and waits for
+ * calendar to change. Then it checks that both calendar's input field and
+ * button are invisible.
+ */
+ @Test
+ public void testPopupModeCheckbox() {
+ String attr = selenium.getAttribute(LOC_CALENDAR + "@style");
+ selenium.click(LOC_POPUP_MODE_CHECKBOX);
+ waitForAttributeChanges(LOC_CALENDAR + "@style", attr);
+
+ assertFalse(isDisplayed(LOC_DATE_INPUT), "Date input field should be
hidden.");
+ assertFalse(isDisplayed(LOC_INPUTS), "Calendar's button should be
hidden.");
+ }
+
+ /**
+ * Tests the "Apply Button" checkbox. It selects a day from the calendar,
+ * checks that cell's class attribute has changed to
"rich-calendar-select",
+ * and checks that the date and time appeared in the input field
+ * immediately.
+ */
+ @Test
+ public void testApplyButtonCheckbox() {
+ selenium.click(LOC_APPLY_BUTTON_CHECKBOX);
+ waitFor(1000);
+ selenium.click(LOC_DATE_INPUT);
+
+ // LOC_MONTH_YEAR_LABEL contains e.g. "August, 2009"
+ Month month =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ int year =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+
+ String date = selenium.getText(LOC_RANDOM_DAY);
+ selenium.click(LOC_RANDOM_DAY);
+ assertTrue(belongsClass("rich-calendar-select", LOC_RANDOM_DAY),
format("The date {0} should be selected.",
+ date));
+
+ String dateTime = selenium.getValue(LOC_DATE_INPUT);
+ StringBuilder expected = new StringBuilder(date);
+ expected.append("/");
+ expected.append(month.ordinal() + 1);
+ expected.append("/");
+ expected.append(String.format("%02d", year % 100));
+ expected.append(" 12:00");
+ assertEquals(dateTime, expected.toString(), "Date and time should appear in
input field.");
+ }
+
+ /**
+ * Tests localization of calendar. It selects German locale from the select
+ * on the right, checks the name of the month, and the name of the second
+ * day in week. In the end it changes the locale back to US English.
+ */
+ @Test
+ public void testLocale() {
+ // choose German localization
+ selenium.click(LOC_LOCALE_SELECT + "/td[2]/input");
+
+ waitFor(1000);
+ selenium.click(LOC_DATE_BUTTON);
+ selenium.click(LOC_RANDOM_DAY);
+
+ String month1 = Month.values()[Calendar.getInstance(new
Locale("de")).get(Calendar.MONTH)].toString();
+ String month2 =
selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim();
+
+ assertTrue(month1.equalsIgnoreCase(month2), "The name of the month is not
localized.");
+
+ String text = selenium.getText(LOC_CALENDAR + "/tbody/tr[2]/td[3]");
+ assertTrue(!"Mon".equalsIgnoreCase(text), "The name of the second
day is not localized.");
+
+ // TODO find out whether the following strings should be translated
+ // text = selenium.getText(cleanButton);
+ // assertTrue(!"Clean".equalsIgnoreCase(text),
+ // "The \"Clean\" button is not localized.");
+ //
+ // text = selenium.getText(todayButton);
+ // assertTrue(!"Today".equalsIgnoreCase(text),
+ // "The \"Today\" button is not localized.");
+ //
+ // text = selenium.getText(applyButton);
+ // assertTrue(!"Apply".equalsIgnoreCase(text),
+ // "The \"Apply\" button is not localized.");
+ //
+ // selenium.click(timeInput);
+ //
+ // text = selenium.getText(okButton);
+ // assertTrue(!"OK".equalsIgnoreCase(text),
+ // "The \"OK\" button is not localized.");
+ //
+ // text = selenium.getText(cancelButton);
+ // assertTrue(!"Cancel".equalsIgnoreCase(text),
+ // "The \"Cancel\" button is not localized.");
+ }
+
+ /**
+ * Tests date patterns. It selects the second pattern (dd/M/yy hh:mm a),
+ * clicks a day in calendar, and clicks "Apply". Then it verifies that the
+ * date and time in the input field match the selected pattern.
+ */
+ @Test
+ public void testDataPatternSelect() {
+ selenium.select(LOC_DATE_PATTERN_SELECT, "index=1");
+
+ waitFor(1000);
+ selenium.click(LOC_DATE_BUTTON);
+ selenium.click(LOC_RANDOM_DAY);
+ selenium.click(LOC_APPLY_BUTTON);
+
+ // LOC_MONTH_YEAR_LABEL contains e.g. "August, 2009"
+ Month month =
Month.valueOf(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[0].trim().toUpperCase());
+ int year =
Integer.parseInt(selenium.getText(LOC_MONTH_YEAR_LABEL).split(",")[1].trim());
+
+ String date = selenium.getText(LOC_RANDOM_DAY);
+
+ String dateTime = selenium.getValue(LOC_DATE_INPUT);
+ StringBuilder expected = new StringBuilder(date);
+ expected.append("/");
+ expected.append(month.ordinal() + 1);
+ expected.append("/");
+ expected.append(String.format("%02d", year % 100));
+ expected.append(" 12:00 PM");
+ assertEquals(dateTime, expected.toString(), "Date and time does not have
right format.");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ ".rich-calendar-tool-btn{",
+ "<a4j:outputPanel id=\"calendar\"
layout=\"block\">",
+ "<rich:calendar
value=\"#{calendarBean.selectedDate}\"",
+ "locale=\"#{calendarBean.locale}\"",
+ "popup=\"#{calendarBean.popup}\"",
+ "datePattern=\"#{calendarBean.pattern}\"",
+ "showApplyButton=\"#{calendarBean.showApply}\"
cellWidth=\"24px\" cellHeight=\"22px\"
style=\"width:200px\"/>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Calendar");
+ scrollIntoView(LOC_CALENDAR_HEADER, true);
+ }
+
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/CalendarTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/OrganizerTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/OrganizerTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/OrganizerTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,286 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+package org.jboss.richfaces.integrationTest.calendar;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Calendar;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the calendar used as an organizer.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class OrganizerTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMsg("COMPONENT_DESCRIPTION");
+ private final String MSG_CLASS_ATTRIBUTE_TODAY =
getMsg("CLASS_ATTRIBUTE_TODAY");
+ private final String MSG_CLASS_ATTRIBUTE_GREY =
getMsg("CLASS_ATTRIBUTE_GREY");
+ private final String MSG_DIALOG_VISIBLE = getMsg("DIALOG_VISIBLE");
+ private final String MSG_DIALOG_NOT_VISIBLE =
getMsg("DIALOG_NOT_VISIBLE");
+ private final String MSG_CELL_X_Y_NOTE = getMsg("CELL_X_Y_NOTE");
+ private final String MSG_CELL_X_Y_DESC = getMsg("CELL_X_Y_DESC");
+
+ // locators
+ private final String LOC_FIELDSET = getLoc("FIELDSET");
+
+ private final String LOC_CELL_X_Y = getLoc("CELL_X_Y");
+ private final String LOC_CELL_X_Y_DATE = getLoc("CELL_X_Y_DATE");
+ private final String LOC_CELL_X_Y_DESC = getLoc("CELL_X_Y_DESC");
+ private final String LOC_CELL_X_Y_NOTE = getLoc("CELL_X_Y_NOTE");
+
+ private final String LOC_DIALOG = getLoc("DIALOG");
+ private final String LOC_DIALOG_DESCRIPTION =
getLoc("DIALOG_DESCRIPTION");
+ private final String LOC_DIALOG_NOTE = getLoc("DIALOG_NOTE");
+ private final String LOC_DIALOG_STORE_BUTTON =
getLoc("DIALOG_STORE_BUTTON");
+ private final String LOC_DIALOG_CANCEL_BUTTON =
getLoc("DIALOG_CANCEL_BUTTON");
+ private final String LOC_DIALOG_CROSS_BUTTON =
getLoc("DIALOG_CROSS_BUTTON");
+
+ /**
+ * Tests that today's cell is highlighted. It goes through the table until
+ * it finds today's date.
+ */
+ @Test
+ public void testTodayIsHighlighted() {
+ String today =
Integer.toString(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
+ String text = null;
+
+ int fromLine = 3;
+ if (Integer.parseInt(today) > 15) {
+ fromLine = 5;
+ }
+
+ for (int i = fromLine; i < 9; i++) {
+ for (int j = 1; j < 8; j++) {
+ text = selenium.getText(String.format(LOC_CELL_X_Y_DATE, i, j));
+ if (today.equals(text)) {
+ text = selenium.getAttribute(String.format(LOC_CELL_X_Y, i, j) +
"@class");
+ assertTrue(text.contains("rich-calendar-today"),
MSG_CLASS_ATTRIBUTE_TODAY);
+ return;
+ }
+ }
+ }
+ }
+
+ /**
+ * Tests the last cell of the table. The last line is usually empty and the
+ * last cell of the last row has to be disabled.
+ */
+ @Test
+ public void testLastDayIsGrey() {
+ String attr = selenium.getAttribute(String.format(LOC_CELL_X_Y, 8, 7) +
"@class");
+ assertTrue(attr.contains("rich-calendar-boundary-dates"),
MSG_CLASS_ATTRIBUTE_GREY);
+ }
+
+ /**
+ * Tests adding a new note to the organizer. First it checks the text of the
+ * selected cell (2nd week, 3rd day), checks that the dialog is hidden,
+ * clicks into the cell, and checks that the dialog is shown. Then it enters
+ * values into description and note fields and clicks the store button. In
+ * the end it checks that the organizer was changed.
+ */
+ @Test
+ public void testSaveNote() {
+ String text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 4, 3));
+ assertEquals(text, "Nothing planned", String.format(MSG_CELL_X_Y_DESC,
4, 3));
+
+ assertFalse(isDisplayed(LOC_DIALOG), MSG_DIALOG_NOT_VISIBLE);
+
+ selenium.click(String.format(LOC_CELL_X_Y, 4, 3));
+
+ // wait for JavaScript to show the dialog
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isDisplayed(LOC_DIALOG);
+ }
+ });
+
+ assertTrue(isDisplayed(LOC_DIALOG), MSG_DIALOG_VISIBLE);
+
+ selenium.type(LOC_DIALOG_DESCRIPTION, "some description");
+ selenium.type(LOC_DIALOG_NOTE, "note note note note note");
+ selenium.click(LOC_DIALOG_STORE_BUTTON);
+
+ // wait for JavaScript to change the organizer
+ Wait.until(new Condition() {
+
+ public boolean isTrue() {
+ return !"Nothing
planned".equals(selenium.getText(String.format(LOC_CELL_X_Y_DESC, 4, 3)));
+ }
+
+ });
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 4, 3));
+ assertEquals(text, "some description", String.format(MSG_CELL_X_Y_DESC,
2, 3));
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_NOTE, 4, 3));
+ assertEquals(text, "note note note note note",
String.format(MSG_CELL_X_Y_NOTE, 2, 3));
+ }
+
+ /**
+ * Tests the cancel button. First it checks the content of the cell in the
+ * 3rd week, 3rd day. Then it clicks into the cell, enters the description
+ * and note, and clicks the cancel button. In the end it verifies that the
+ * organizer was not changed.
+ */
+ @Test
+ public void testCancelNoteCancelButton() {
+ String text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 5, 3));
+ assertEquals(text, "Nothing planned", String.format(MSG_CELL_X_Y_DESC,
3, 3));
+
+ assertFalse(isDisplayed(LOC_DIALOG), MSG_DIALOG_NOT_VISIBLE);
+
+ selenium.click(String.format(LOC_CELL_X_Y, 5, 3));
+
+ // wait for JavaScript to show the dialog
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isDisplayed(LOC_DIALOG);
+ }
+ });
+
+ assertTrue(isDisplayed(LOC_DIALOG), MSG_DIALOG_VISIBLE);
+
+ selenium.type(LOC_DIALOG_DESCRIPTION, "some description");
+ selenium.type(LOC_DIALOG_NOTE, "note note note note note");
+ selenium.click(LOC_DIALOG_CANCEL_BUTTON);
+
+ // wait for JavaScript to finish - nothing should change
+ waitFor(3000);
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 5, 3));
+ assertEquals(text, "Nothing planned", String.format(MSG_CELL_X_Y_DESC,
3, 3));
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_NOTE, 5, 3));
+ assertEquals(text, "", String.format(MSG_CELL_X_Y_NOTE, 3, 3));
+ }
+
+ /**
+ * Tests the cross button in the corner of the dialog. First it checks the
+ * content of the cell in the 3rd week, 3rd day. Then it clicks into the
+ * cell, enters the description and note, and clicks the cancel button. In
+ * the end it verifies that the organizer was not changed.
+ */
+ @Test
+ public void testCancelNoteCrossButton() {
+ String text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 5, 5));
+ assertEquals(text, "Nothing planned", String.format(MSG_CELL_X_Y_DESC,
3, 5));
+
+ assertFalse(isDisplayed(LOC_DIALOG), MSG_DIALOG_NOT_VISIBLE);
+
+ selenium.click(String.format(LOC_CELL_X_Y, 5, 5));
+
+ // wait for JavaScript to show the dialog
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isDisplayed(LOC_DIALOG);
+ }
+ });
+
+ assertTrue(isDisplayed(LOC_DIALOG), MSG_DIALOG_VISIBLE);
+
+ selenium.type(LOC_DIALOG_DESCRIPTION, "some description");
+ selenium.type(LOC_DIALOG_NOTE, "note note note note note");
+ selenium.click(LOC_DIALOG_CROSS_BUTTON);
+
+ // wait for JavaScript to finish - nothing should change
+ waitFor(3000);
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_DESC, 5, 5));
+ assertEquals(text, "Nothing planned", String.format(MSG_CELL_X_Y_DESC,
3, 5));
+
+ text = selenium.getText(String.format(LOC_CELL_X_Y_NOTE, 5, 5));
+ assertEquals(text, "", String.format(MSG_CELL_X_Y_NOTE, 3, 5));
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:messages/>",
+ "<a4j:jsFunction name=\"ajaxSubmit\"
oncomplete=\"#{rich:component('panel')}.show()\"
reRender=\"editContent\" />",
+ "<rich:calendar
value=\"#{calendarBean.selectedDate}\"",
+ "cellWidth=\"100px\"
cellHeight=\"100px\"",
+ "dataModel=\"#{calendarDataModel}\" onchanged=\"if
(event.rich.date) {ajaxSubmit();}\" oncurrentdateselect=\"return
false\"",
+ "<a4j:outputPanel layout=\"block\"
id=\"cell\"
onclick=\"#{rich:component('organizer')}.resetSelectedDate()\"
style=\"height: 100%;\">",
+ "<rich:modalPanel id=\"panel\"
resizeable=\"false\">", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the source of CalendarDataModelImpl.java. It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testDataModelSource() {
+ String[] strings = new String[] {
+ "package org.richfaces.demo.calendar.modelImpl;",
+ "import org.richfaces.model.CalendarDataModelItem;",
+ "private CalendarDataModelItem[] items;",
+ "public CalendarDataModelItem[] getData(Date[] dateArray) {",
+ "protected CalendarDataModelItem createDataModelItem(Date date)
{",
+ "item.setDay(c.get(Calendar.DAY_OF_MONTH));",
+
"setCurrentDescription((String)((HashMap)items[calendar.get(Calendar.DAY_OF_MONTH)-1].getData()).get(\"description\"));",
+ "public String getCurrentShortDescription() {", };
+
+ abstractTestSource(1, "CalendarDataModelImpl.java", strings);
+ }
+
+ /**
+ * Tests the source of CalendarDataModelItemImpl.java. It checks that the
+ * source code is not visible, clicks on the link, and checks 8 lines of
+ * source code.
+ */
+ @Test
+ public void testDataModelItemSource() {
+ String[] strings = new String[] { "package
org.richfaces.demo.calendar.modelImpl;",
+ "public class CalendarDataModelItemImpl implements
CalendarDataModelItem {", "private Object data;",
+ "private boolean enabled = true;", "public Object
getData() {",
+ "public void setStyleClass(String styleClass) {",
"this.styleClass = styleClass;",
+ "public void setToolTip(Object toolTip) {", };
+
+ abstractTestSource(1, "CalendarDataModelItemImpl.java", strings);
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Calendar");
+ openTab("Organizer Creation");
+ scrollIntoView(LOC_FIELDSET, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/calendar/OrganizerTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/ColorPickerTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/ColorPickerTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/ColorPickerTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,587 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.colorPicker;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotSame;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.awt.Color;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * A test case for color picker component.
+ * <ul>
+ * <li><b>TODO</b>try decimals, negative integers, integers greater
than 100,
+ * 255 or 360</li>
+ * <li><b>TODO</b>check the type of cursor</li>
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ColorPickerTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // components on the page
+ private final String LOC_COMPONENT_HEADER = getLoc("COMPONENT_HEADER");
+ private final String LOC_IMAGE = getLoc("IMAGE");
+ private final String LOC_COLOR_INPUT = getLoc("COLOR_INPUT");
+ private final String LOC_COLOR_BUTTON = getLoc("COLOR_BUTTON");
+
+ private final String LOC_COLOR_AREA = getLoc("COLOR_AREA");
+ private final String LOC_CURSOR = getLoc("CURSOR");
+ private final String LOC_RED_VALUE = getLoc("RED_VALUE");
+ private final String LOC_GREEN_VALUE = getLoc("GREEN_VALUE");
+ private final String LOC_BLUE_VALUE = getLoc("BLUE_VALUE");
+ private final String LOC_HUE_VALUE = getLoc("HUE_VALUE");
+ private final String LOC_SATURATION_VALUE = getLoc("SATURATION_VALUE");
+ private final String LOC_BRIGHTNESS_VALUE = getLoc("BRIGHTNESS_VALUE");
+ private final String LOC_CURRENT_COLOR_BOX = getLoc("CURRENT_COLOR_BOX");
+ private final String LOC_ORIGINAL_COLOR_BOX =
getLoc("ORIGINAL_COLOR_BOX");
+ private final String LOC_RAINBOW = getLoc("RAINBOW");
+ private final String LOC_HEX_COLOR = getLoc("HEX_COLOR");
+ private final String LOC_APPLY_BUTTON = getLoc("APPLY_BUTTON");
+ private final String LOC_CANCEL_BUTTON = getLoc("CANCEL_BUTTON");
+
+ private final int MSG_VALUES_CHANGE_RED_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_RED_1"));
+ private final int MSG_VALUES_CHANGE_GREEN_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_GREEN_1"));
+ private final int MSG_VALUES_CHANGE_BLUE_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_BLUE_1"));
+ private final int MSG_VALUES_CHANGE_HUE_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_HUE_1"));
+ private final int MSG_VALUES_CHANGE_SATURATION_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_SATURATION_1"));
+ private final int MSG_VALUES_CHANGE_BRIGHTNESS_1 =
Integer.parseInt(getMsg("VALUES_CHANGE_BRIGHTNESS_1"));
+ private final String MSG_VALUES_CHANGE_HEXCOLOR_1 =
getMsg("VALUES_CHANGE_HEXCOLOR_1");
+ private final int MSG_VALUES_CHANGE_RED_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_RED_2"));
+ private final int MSG_VALUES_CHANGE_GREEN_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_GREEN_2"));
+ private final int MSG_VALUES_CHANGE_BLUE_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_BLUE_2"));
+ private final int MSG_VALUES_CHANGE_HUE_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_HUE_2"));
+ private final int MSG_VALUES_CHANGE_SATURATION_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_SATURATION_2"));
+ private final int MSG_VALUES_CHANGE_BRIGHTNESS_2 =
Integer.parseInt(getMsg("VALUES_CHANGE_BRIGHTNESS_2"));
+ private final String MSG_VALUES_CHANGE_HEXCOLOR_2 =
getMsg("VALUES_CHANGE_HEXCOLOR_2");
+
+ private final String MSG_SET_RGB_NUMBERS_HEXCOLOR =
getMsg("SET_RGB_NUMBERS_HEXCOLOR");
+ private final String MSG_SET_HSB_NUMBERS_HEXCOLOR =
getMsg("SET_HSB_NUMBERS_HEXCOLOR");
+
+ private final int MSG_SET_MAX_VALUE_RED =
Integer.parseInt(getMsg("SET_MAX_VALUE_RED"));
+ private final int MSG_SET_MAX_VALUE_GREEN =
Integer.parseInt(getMsg("SET_MAX_VALUE_GREEN"));
+ private final int MSG_SET_MAX_VALUE_BLUE =
Integer.parseInt(getMsg("SET_MAX_VALUE_BLUE"));
+ private final int MSG_SET_MAX_VALUE_HUE =
Integer.parseInt(getMsg("SET_MAX_VALUE_HUE"));
+ private final int MSG_SET_MAX_VALUE_SATURATION =
Integer.parseInt(getMsg("SET_MAX_VALUE_SATURATION"));
+ private final int MSG_SET_MAX_VALUE_BRIGHTNESS =
Integer.parseInt(getMsg("SET_MAX_VALUE_BRIGHTNESS"));
+
+ private final int MSG_SET_NEGATIVE_VALUE_RED =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_RED"));
+ private final int MSG_SET_NEGATIVE_VALUE_GREEN =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_GREEN"));
+ private final int MSG_SET_NEGATIVE_VALUE_BLUE =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_BLUE"));
+ private final int MSG_SET_NEGATIVE_VALUE_HUE =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_HUE"));
+ private final int MSG_SET_NEGATIVE_VALUE_SATURATION =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_SATURATION"));
+ private final int MSG_SET_NEGATIVE_VALUE_BRIGHTNESS =
Integer.parseInt(getMsg("SET_NEGATIVE_VALUE_BRIGHTNESS"));
+
+ private final String MSG_SLIDER_HEXCOLOR_1 = getMsg("SLIDER_HEXCOLOR_1");
+ private final String MSG_SLIDER_HEXCOLOR_2 = getMsg("SLIDER_HEXCOLOR_2");
+ private final int MSG_SLIDER_RED_VALUE_1 =
Integer.parseInt(getMsg("SLIDER_RED_VALUE_1"));
+ private final int MSG_SLIDER_GREEN_VALUE_1 =
Integer.parseInt(getMsg("SLIDER_GREEN_VALUE_1"));
+ private final int MSG_SLIDER_BLUE_VALUE_1 =
Integer.parseInt(getMsg("SLIDER_BLUE_VALUE_1"));
+ private final int MSG_SLIDER_RED_VALUE_2 =
Integer.parseInt(getMsg("SLIDER_RED_VALUE_2"));
+ private final int MSG_SLIDER_GREEN_VALUE_2 =
Integer.parseInt(getMsg("SLIDER_GREEN_VALUE_2"));
+ private final int MSG_SLIDER_BLUE_VALUE_2 =
Integer.parseInt(getMsg("SLIDER_BLUE_VALUE_2"));
+ private final int MSG_SLIDER_RED_VALUE_3 =
Integer.parseInt(getMsg("SLIDER_RED_VALUE_3"));
+ private final int MSG_SLIDER_GREEN_VALUE_3 =
Integer.parseInt(getMsg("SLIDER_GREEN_VALUE_3"));
+ private final int MSG_SLIDER_BLUE_VALUE_3 =
Integer.parseInt(getMsg("SLIDER_BLUE_VALUE_3"));
+
+ /**
+ * Tests the initial state of color picker. It checks that the color of
+ * letters in the image, the color defined in the input field, and the color
+ * of the button are the same.
+ */
+ @Test
+ public void testInitialState() {
+ String url = selenium.getAttribute(LOC_IMAGE + "@src");
+
+ // get color of the pixel from the image
+ Color imageColor = getPixelColor(url, 18, 97);
+ // get color from the input field
+ Color inputColor = createColor(selenium.getValue(LOC_COLOR_INPUT).substring(1));
+
+ assertEquals(imageColor, inputColor, "Image should have the same color as
the one defined in input field.");
+
+ // get color of the button
+ String attr = getStyle(LOC_COLOR_BUTTON,
"background-color").replace("rgb(",
"").replace(")", "");
+
+ int[] values = new int[3];
+ for (int i = 0; i < 3; i++) {
+ values[i] = Integer.parseInt(attr.split(",")[i].trim());
+ }
+
+ assertEquals(imageColor, new Color(values[0], values[1], values[2]),
+ "Image should have the same color as the button.");
+ }
+
+ /**
+ * It clicks to the color area of color picker, clicks on the apply button,
+ * and gets the color of pixel [18,97] from the image.
+ */
+ @Test
+ public void testClickToColorArea() {
+ selenium.click(LOC_COLOR_BUTTON);
+ selenium.mouseDownAt(LOC_COLOR_AREA, "50,50");
+ selenium.click(LOC_APPLY_BUTTON);
+ waitFor(500);
+
+ String url = selenium.getAttribute(LOC_IMAGE + "@src");
+
+ Color imageColor = getPixelColor(url, 18, 97);
+ Color inputColor = createColor(selenium.getValue(LOC_COLOR_INPUT).substring(1));
+
+ assertEquals(imageColor, inputColor, "Image should have the same color as
the one defined in input field.");
+ }
+
+ /**
+ * Tests input fields with RGB and HSB values and color number. It clicks on
+ * [0,0] into color area and checks that all values changed.
+ */
+ @Test
+ public void testValuesChange() {
+ selenium.click(LOC_COLOR_BUTTON);
+
+ int red = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ int green = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ int blue = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+ int hue = Integer.parseInt(selenium.getValue(LOC_HUE_VALUE));
+ int saturation = Integer.parseInt(selenium.getValue(LOC_SATURATION_VALUE));
+ int brightness = Integer.parseInt(selenium.getValue(LOC_BRIGHTNESS_VALUE));
+ String hexColor = selenium.getValue(LOC_HEX_COLOR);
+
+ assertEquals(red, MSG_VALUES_CHANGE_RED_1, "Red before click.");
+ assertEquals(green, MSG_VALUES_CHANGE_GREEN_1, "Green before click.");
+ assertEquals(blue, MSG_VALUES_CHANGE_BLUE_1, "Blue before click.");
+ assertEquals(hue, MSG_VALUES_CHANGE_HUE_1, "Hue before click.");
+ assertEquals(saturation, MSG_VALUES_CHANGE_SATURATION_1, "Saturation before
click.");
+ assertEquals(brightness, MSG_VALUES_CHANGE_BRIGHTNESS_1, "Brightness before
click.");
+ assertEquals(hexColor, MSG_VALUES_CHANGE_HEXCOLOR_1, "Hex value of color
before click.");
+
+ selenium.clickAt(LOC_COLOR_AREA, "0,0");
+
+ red = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ green = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ blue = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+ hue = Integer.parseInt(selenium.getValue(LOC_HUE_VALUE));
+ saturation = Integer.parseInt(selenium.getValue(LOC_SATURATION_VALUE));
+ brightness = Integer.parseInt(selenium.getValue(LOC_BRIGHTNESS_VALUE));
+ hexColor = selenium.getValue(LOC_HEX_COLOR);
+
+ assertEquals(red, MSG_VALUES_CHANGE_RED_2, "Red component after white was
selected (top left corner).");
+ assertEquals(green, MSG_VALUES_CHANGE_GREEN_2, "Green component after white
was selected (top left corner).");
+ assertEquals(blue, MSG_VALUES_CHANGE_BLUE_2, "Blue component after white was
selected (top left corner).");
+ assertTrue(Math.abs(hue - MSG_VALUES_CHANGE_HUE_2) < 2, format(
+ "Hue should be {0} (+-6) after white was selected (top left
corner).", MSG_VALUES_CHANGE_HUE_2));
+ assertTrue(Math.abs(saturation - MSG_VALUES_CHANGE_SATURATION_2) < 2, format(
+ "Saturation should be {0} (+-6) after white was selected (top left
corner).",
+ MSG_VALUES_CHANGE_SATURATION_2));
+ assertTrue(Math.abs(brightness - MSG_VALUES_CHANGE_BRIGHTNESS_2) < 2, format(
+ "Brightness should be 100 (+-6) after white was selected (top left
corner).",
+ MSG_VALUES_CHANGE_BRIGHTNESS_2));
+ assertEquals(hexColor, MSG_VALUES_CHANGE_HEXCOLOR_2,
+ "Hex value of color after white was selected (top left
corner).");
+ }
+
+ /**
+ * Tests the position of the cursor after clicking into color area.
+ */
+ @Test
+ public void testCursorPosition() {
+ selenium.click(LOC_COLOR_BUTTON);
+ selenium.mouseDownAt(LOC_COLOR_AREA, "50,20");
+ selenium.mouseUp(LOC_COLOR_AREA);
+
+ int x = Integer.parseInt(getStyle(LOC_CURSOR,
"left").replace("px", ""));
+ int y = Integer.parseInt(getStyle(LOC_CURSOR,
"top").replace("px", ""));
+ assertTrue(Math.abs(x - 50) < 7, format("Cursor should move 50+-6px right
(was {0}).", x));
+ assertTrue(Math.abs(y - 20) < 7, format("Cursor should move 20+-6px down
(was {0}).", y));
+ }
+
+ /**
+ * Tests typing valid values into input fields for RGB.
+ */
+ @Test
+ public void testSetRGBNumbers() {
+ String hex1 = selenium.getValue(LOC_HEX_COLOR);
+ String hue1 = selenium.getValue(LOC_HUE_VALUE);
+ String saturation1 = selenium.getValue(LOC_SATURATION_VALUE);
+ String brightness1 = selenium.getValue(LOC_BRIGHTNESS_VALUE);
+
+ // change color to dark blue
+ selenium.type(LOC_RED_VALUE, "36");
+ selenium.type(LOC_GREEN_VALUE, "36");
+ selenium.type(LOC_BLUE_VALUE, "99");
+
+ String hex2 = selenium.getValue(LOC_HEX_COLOR);
+ String hue2 = selenium.getValue(LOC_HUE_VALUE);
+ String saturation2 = selenium.getValue(LOC_SATURATION_VALUE);
+ String brightness2 = selenium.getValue(LOC_BRIGHTNESS_VALUE);
+
+ assertFalse(hex1.equals(hex2), "Hex value of the selected color should have
changed.");
+ assertEquals(hex2, MSG_SET_RGB_NUMBERS_HEXCOLOR, "Hex value of the selected
color should have changed.");
+
+ assertFalse(hue1.equals(hue2), "Hue should change.");
+ assertFalse(saturation1.equals(saturation2), "Saturation should have
changed.");
+ assertFalse(brightness1.equals(brightness2), "Brightness should have
changed.");
+ }
+
+ /**
+ * Tests typing valid values into input fields for HSB.
+ */
+ @Test
+ public void testSetHSBNumbers() {
+ String hex1 = selenium.getValue(LOC_HEX_COLOR);
+ String red1 = selenium.getValue(LOC_RED_VALUE);
+ String green1 = selenium.getValue(LOC_GREEN_VALUE);
+ String blue1 = selenium.getValue(LOC_BLUE_VALUE);
+
+ // change color to light orange
+ selenium.type(LOC_HUE_VALUE, "36");
+ selenium.type(LOC_SATURATION_VALUE, "36");
+ selenium.type(LOC_BRIGHTNESS_VALUE, "99");
+
+ String hex2 = selenium.getValue(LOC_HEX_COLOR);
+ String red2 = selenium.getValue(LOC_RED_VALUE);
+ String green2 = selenium.getValue(LOC_GREEN_VALUE);
+ String blue2 = selenium.getValue(LOC_BLUE_VALUE);
+
+ assertFalse(hex1.equals(hex2), "Hex value of the selected color should have
changed.");
+ assertEquals(hex2, MSG_SET_HSB_NUMBERS_HEXCOLOR, "Hex value of the selected
color should have changed.");
+
+ assertFalse(red1.equals(red2), "Red should have changed.");
+ assertFalse(green1.equals(green2), "Green should have changed.");
+ assertFalse(blue1.equals(blue2), "Blue should have changed.");
+ }
+
+ /**
+ * Test typing invalid values into input fields for RGB and HSB. It tries to
+ * type 500 for all components. R, G and B should change to 255, H should
+ * change to 360, S and B to 100.
+ */
+ @Test
+ public void testSetMaxValueRGBHSB() {
+ selenium.type(LOC_RED_VALUE, "500");
+ int number = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_RED, "Red should be set to 255 if
bigger number was typed.");
+
+ selenium.type(LOC_GREEN_VALUE, "500");
+ number = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_GREEN, "Green should be set to 255 if
bigger number was typed.");
+
+ selenium.type(LOC_BLUE_VALUE, "500");
+ number = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_BLUE, "Blue should be set to 255 if
bigger number was typed.");
+
+ selenium.type(LOC_HUE_VALUE, "500");
+ number = Integer.parseInt(selenium.getValue(LOC_HUE_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_HUE, "Hue should be set to 360 if
bigger number was typed.");
+
+ selenium.type(LOC_SATURATION_VALUE, "500");
+ number = Integer.parseInt(selenium.getValue(LOC_SATURATION_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_SATURATION,
+ "Saturation should be set to 100 if bigger number was
typed.");
+
+ selenium.type(LOC_BRIGHTNESS_VALUE, "500");
+ number = Integer.parseInt(selenium.getValue(LOC_BRIGHTNESS_VALUE));
+ assertEquals(number, MSG_SET_MAX_VALUE_BRIGHTNESS,
+ "Brightness should be set to 100 if bigger number was
typed.");
+ }
+
+ /**
+ * Test typing invalid values into input fields for RGB and HSB. It tries to
+ * type -2 for all components. All should change to 0.
+ */
+ @Test
+ public void testSetNegativeValueRGBHSB() {
+ selenium.type(LOC_RED_VALUE, "-2");
+ int number = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_RED, "Red should be set to 0 if
lower number was typed.");
+
+ selenium.type(LOC_GREEN_VALUE, "-2");
+ number = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_GREEN, "Green should be set to 0
if lower number was typed.");
+
+ selenium.type(LOC_BLUE_VALUE, "-2");
+ number = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_BLUE, "Blue should be set to 0
if lower number was typed.");
+
+ selenium.type(LOC_HUE_VALUE, "-2");
+ number = Integer.parseInt(selenium.getValue(LOC_HUE_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_HUE, "Hue should be set to 0 if
lower number was typed.");
+
+ selenium.type(LOC_SATURATION_VALUE, "-2");
+ number = Integer.parseInt(selenium.getValue(LOC_SATURATION_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_SATURATION,
+ "Saturation should be set to 0 if lower number was typed.");
+
+ selenium.type(LOC_BRIGHTNESS_VALUE, "-2");
+ number = Integer.parseInt(selenium.getValue(LOC_BRIGHTNESS_VALUE));
+ assertEquals(number, MSG_SET_NEGATIVE_VALUE_BRIGHTNESS,
+ "Brightness should be set to 0 if lower number was typed.");
+ }
+
+ /**
+ * Tests the 'Cancel' button. It types 100, 255, 100 for RGB, clicks on
+ * cancel, and checks that the color defined in the input field and color of
+ * the image did not change.
+ */
+ @Test
+ public void testCancelButton() {
+ Color original = createColor(selenium.getValue(LOC_COLOR_INPUT).substring(1));
+ selenium.click(LOC_COLOR_BUTTON);
+
+ selenium.type(LOC_RED_VALUE, "100");
+ selenium.type(LOC_GREEN_VALUE, "255");
+ selenium.type(LOC_BLUE_VALUE, "100");
+
+ selenium.click(LOC_CANCEL_BUTTON);
+ Color newColor = createColor(selenium.getValue(LOC_COLOR_INPUT).substring(1));
+ assertEquals(newColor, original, "Color in input should not change after
clicking on \"Cancel\"");
+
+ String url = selenium.getAttribute(LOC_IMAGE + "@src");
+ Color imageColor = getPixelColor(url, 18, 97);
+ assertEquals(imageColor, original, "Color of image should not change after
clicking on \"Cancel\"");
+ }
+
+ /**
+ * Tests slider. It clicks into the rainbow on [0,0] and checks that values
+ * of RGB changed. Then it clicks at the bottom of rainbow and checks values
+ * of RGB. In the end, it clicks in the middle of the rainbow and checks RGB
+ * values. There is tolerance of 2.
+ */
+ @Test
+ public void testSlider() {
+ selenium.click(LOC_COLOR_BUTTON);
+ selenium.mouseDownAt(LOC_RAINBOW, "0,0");
+ selenium.mouseUp(LOC_RAINBOW);
+
+ String newColor = selenium.getValue(LOC_HEX_COLOR);
+ assertEquals(newColor, MSG_SLIDER_HEXCOLOR_1, "Color should change to dark
red after clicking on [0,0].");
+
+ int red = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ int green = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ int blue = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+
+ assertTrue(Math.abs(red - MSG_SLIDER_RED_VALUE_1) < 7, format(
+ "Red should be {0}+-6 (was {1}) when the slider is at the
top.", MSG_SLIDER_RED_VALUE_1, red));
+ assertTrue(Math.abs(green - MSG_SLIDER_GREEN_VALUE_1) < 7, format(
+ "Green should be {0}+-6 (was {1}) when the slider is at the
top.", MSG_SLIDER_GREEN_VALUE_1, green));
+ assertTrue(Math.abs(blue - MSG_SLIDER_BLUE_VALUE_1) < 7, format(
+ "Blue should be {0}+-6 (was {1}) when the slider is at the
top.", MSG_SLIDER_BLUE_VALUE_1, blue));
+
+ selenium.mouseDownAt(LOC_RAINBOW, "0,151");
+ selenium.mouseUp(LOC_RAINBOW);
+
+ newColor = selenium.getValue(LOC_HEX_COLOR);
+ assertEquals(newColor, MSG_SLIDER_HEXCOLOR_2, "Color should change to dark
red after clicking on [0,150].");
+
+ red = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ green = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ blue = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+
+ assertTrue(Math.abs(red - MSG_SLIDER_RED_VALUE_2) < 7, format(
+ "Red should be {0}+-6 (was {1}) when the slider is at the
bottom.", MSG_SLIDER_RED_VALUE_2, red));
+ assertTrue(Math.abs(green - MSG_SLIDER_GREEN_VALUE_2) < 7, format(
+ "Green should be {0}+-6 (was {1}) when the slider is at the
bottom.", MSG_SLIDER_GREEN_VALUE_2, green));
+ assertTrue(Math.abs(blue - MSG_SLIDER_BLUE_VALUE_2) < 7, format(
+ "Blue should be {0}+-6 (was {1}) when the slider is at the
bottom.", MSG_SLIDER_BLUE_VALUE_2, blue));
+
+ selenium.mouseDownAt(LOC_RAINBOW, "0,75");
+ selenium.mouseUp(LOC_RAINBOW);
+
+ red = Integer.parseInt(selenium.getValue(LOC_RED_VALUE));
+ green = Integer.parseInt(selenium.getValue(LOC_GREEN_VALUE));
+ blue = Integer.parseInt(selenium.getValue(LOC_BLUE_VALUE));
+
+ assertTrue(Math.abs(red - MSG_SLIDER_RED_VALUE_3) < 7, format(
+ "Red should be {0}+-6 (was {1}) when the slider is in the
middle.", MSG_SLIDER_RED_VALUE_3, red));
+ assertTrue(Math.abs(green - MSG_SLIDER_GREEN_VALUE_3) < 7, format(
+ "Green should be {0}+-6 (was {1}) when the slider is in the
middle.", MSG_SLIDER_GREEN_VALUE_3, green));
+ assertTrue(Math.abs(blue - MSG_SLIDER_BLUE_VALUE_3) < 7, format(
+ "Green should be {0}+-6 (was {1}) when the slider is in the
middle.", MSG_SLIDER_BLUE_VALUE_3, blue));
+
+ assertTrue(Math.abs(red - MSG_SLIDER_RED_VALUE_3) < 7, format(
+ "Red should be 0 (+-6) when the slider is in the middle (was
{0}).", red));
+ assertTrue(Math.abs(green - MSG_SLIDER_GREEN_VALUE_3) < 7, format(
+ "Green should be 230 (+-6) when the slider is in the middle (was
{0}).", green));
+ assertTrue(Math.abs(blue - MSG_SLIDER_BLUE_VALUE_3) < 7, format(
+ "Blue should be 230 (+-6) when the slider is at the bottom (was
{0}).", blue));
+ }
+
+ /**
+ * Tests the color box on the left. It changes RGB values to 100, 100, 100
+ * and checks that the color of the box changed.
+ */
+ @Test
+ public void testLeftColorBox() {
+ String attr = getStyle(LOC_CURRENT_COLOR_BOX,
"background-color").replace("rgb(",
"").replace(")", "");
+
+ int red = Integer.parseInt(attr.split(",")[0].trim());
+ int green = Integer.parseInt(attr.split(",")[1].trim());
+ int blue = Integer.parseInt(attr.split(",")[2].trim());
+
+ Color leftBoxColor = new Color(red, green, blue);
+ Color expectedColor = createColor(selenium.getValue(LOC_HEX_COLOR));
+
+ assertEquals(leftBoxColor, expectedColor, "At the beginning box should be of
color from input field.");
+
+ selenium.type(LOC_RED_VALUE, "100");
+ selenium.type(LOC_GREEN_VALUE, "100");
+ selenium.type(LOC_BLUE_VALUE, "100");
+
+ attr = getStyle(LOC_CURRENT_COLOR_BOX,
"background-color").replace("rgb(",
"").replace(")", "");
+
+ red = Integer.parseInt(attr.split(",")[0].trim());
+ green = Integer.parseInt(attr.split(",")[1].trim());
+ blue = Integer.parseInt(attr.split(",")[2].trim());
+
+ leftBoxColor = new Color(red, green, blue);
+ expectedColor = createColor(selenium.getValue(LOC_HEX_COLOR));
+
+ assertEquals(leftBoxColor, expectedColor, "Color of the box should change
afted a color was chosen.");
+ }
+
+ /**
+ * Tests the color box on the right. It changes RGB values to 100, 100, 100
+ * and checks that the color of the box did not change.
+ */
+ @Test
+ public void testRightColorBox() {
+ String attr = getStyle(LOC_ORIGINAL_COLOR_BOX,
"background-color").replace("rgb(",
"").replace(")", "");
+
+ int red = Integer.parseInt(attr.split(",")[0].trim());
+ int green = Integer.parseInt(attr.split(",")[1].trim());
+ int blue = Integer.parseInt(attr.split(",")[2].trim());
+
+ Color rightBoxColor = new Color(red, green, blue);
+ Color expectedColor = createColor(selenium.getValue(LOC_HEX_COLOR));
+
+ assertEquals(rightBoxColor, expectedColor, "At the beginning box should be
of color from input field.");
+
+ selenium.type(LOC_RED_VALUE, "100");
+ selenium.type(LOC_GREEN_VALUE, "100");
+ selenium.type(LOC_BLUE_VALUE, "100");
+
+ attr = getStyle(LOC_ORIGINAL_COLOR_BOX,
"background-color").replace("rgb(",
"").replace(")", "");
+
+ red = Integer.parseInt(attr.split(",")[0].trim());
+ green = Integer.parseInt(attr.split(",")[1].trim());
+ blue = Integer.parseInt(attr.split(",")[2].trim());
+
+ rightBoxColor = new Color(red, green, blue);
+ expectedColor = createColor(selenium.getValue(LOC_HEX_COLOR));
+
+ assertNotSame(rightBoxColor, expectedColor, "Color of the box should change
afted a color was chosen.");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"", "<h:form>",
+ "<h:panelGrid columns=\"1\">",
"<rich:paint2D id=\"painter\" width=\"300\"
height=\"120\"",
+ "data=\"#{paintData}\" format=\"png\"
paint=\"#{paintBean.paint}\" >", "</rich:paint2D>",
+ "<h:outputText value=\"Change text color \"
/>",
+ "<rich:colorPicker colorMode=\"hex\"
value=\"#{paintData.color}\">", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Returns the color of the pixel with specified coordinates.
+ *
+ * @param url
+ * relative URL of the image
+ * @param x
+ * the horizontal coordinate of the pixel
+ * @param y
+ * the vertical coordinate of the pixel
+ * @return color of the pixel
+ */
+ private Color getPixelColor(String url, int x, int y) {
+ // the index of first '/' not counting http://
+ int index = selenium.getLocation().indexOf('/', 7);
+ url = selenium.getLocation().substring(0, index) + url;
+
+ BufferedImage image = null;
+ try {
+ image = ImageIO.read(new URL(url));
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ fail("Could not create an URL object.");
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Could not read image.");
+ }
+ int c = image.getRGB(18, 97);
+ int red = (c & 0x00ff0000) >> 16;
+ int green = (c & 0x0000ff00) >> 8;
+ int blue = c & 0x000000ff;
+
+ return new Color(red, green, blue);
+ }
+
+ /**
+ * Creates a Color object from the string. The string has to contain
+ * hexadecimal representation of an RGB color without leading hash
+ * character, e.g. ffffff, 0ab3c4.
+ *
+ * @param color
+ * hexadecimal representation of an RGB color
+ * @return a Color object
+ */
+ private Color createColor(String color) {
+ if (color.length() != 6) {
+ throw new IllegalArgumentException("color");
+ }
+
+ int red = Integer.parseInt(color.substring(0, 2), 16);
+ int green = Integer.parseInt(color.substring(2, 4), 16);
+ int blue = Integer.parseInt(color.substring(4, 6), 16);
+
+ return new Color(red, green, blue);
+ }
+
+ /**
+ * Loads the page containing the color picker component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Color Picker");
+ scrollIntoView(LOC_COMPONENT_HEADER, true);
+ }
+
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/colorPicker/ColorPickerTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/columns/ColumnsTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/columns/ColumnsTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/columns/ColumnsTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,138 @@
+package org.jboss.richfaces.integrationTest.columns;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class ColumnsTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE = "richfaces/columns.jsf?c=columns&tab=usage";
+ private final String table = getLoc("columns--table");
+ private final String header = table;
+ private final String cellHeaders =
getLoc("columns--table-cell-header--preformatted");
+ private final String cells = getLoc("columns--table-cell--preformatted");
+ private final Pattern patternPrice = Pattern.compile(".*\\s(\\d+)\\$$");
+
+ @Test
+ public void simpleSortingTest() {
+ openPage();
+
+ final int sortColumn = 2;
+
+ String[][] map = getMapOfCells();
+
+ final String contextBeforeChange = selenium.getText(table);
+
+ selenium.click(format(cellHeaders, sortColumn));
+
+ sortByColumn(map, sortColumn, false);
+
+ Wait.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ return !contextBeforeChange.equals(selenium.getText(table));
+ }
+ });
+
+ String[][] newMap = getMapOfCells();
+
+ for (int i = 0; i < newMap.length; i++) {
+ Assert.assertTrue(Arrays.equals(map[i], newMap[i]));
+ }
+ }
+
+ @Test
+ public void reverseOrderSortingTest() {
+ openPage();
+
+ final int sortColumn = 4;
+
+ String[][] map = getMapOfCells();
+
+ final String contextBeforeChange = selenium.getText(table);
+
+ selenium.click(format(cellHeaders, sortColumn));
+
+ sortByColumn(map, sortColumn, true);
+
+ Wait.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ return !contextBeforeChange.equals(selenium.getText(table));
+ }
+ });
+
+ selenium.click(format(cellHeaders, sortColumn));
+
+ Wait.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ return !contextBeforeChange.equals(selenium.getText(table));
+ }
+ });
+
+ String[][] newMap = getMapOfCells();
+
+ for (int i = 0; i < newMap.length; i++) {
+ Assert.assertTrue(Arrays.equals(map[i], newMap[i]));
+ }
+ }
+
+ private String[][] getMapOfCells() {
+ final int columns = selenium.getXpathCount(format(cells, 1, 0))
+ .intValue();
+ final int rows = selenium.getXpathCount(format(cells, 0, 1)).intValue();
+
+ String[][] map = new String[rows][columns];
+
+ for (int row = 1; row <= rows; row++) {
+ map[row - 1] = new String[columns];
+ for (int column = 1; column <= columns; column++) {
+ String cell = format(cells, row, column);
+ map[row - 1][column - 1] = selenium.getText(cell);
+ }
+ }
+ return map;
+ }
+
+ private void sortByColumn(final String[][] map, final int column,
+ final boolean reverseOrder) {
+ Arrays.sort(map, new Comparator<String[]>() {
+ public int compare(String[] o1, String[] o2) {
+ String s1 = o1[column - 1];
+ String s2 = o2[column - 1];
+
+ Matcher m1 = patternPrice.matcher(s1);
+ m1.find();
+ int i1 = Integer.valueOf(m1.group(1));
+
+ Matcher m2 = patternPrice.matcher(s2);
+ m2.find();
+ int i2 = Integer.valueOf(m2.group(1));
+
+ if (reverseOrder) {
+ return i2 - i1;
+ } else {
+ return i1 - i2;
+ }
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/ComboBoxTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/ComboBoxTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/ComboBoxTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,264 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.comboBox;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertEqualsNoOrder;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the combo box component.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ComboBoxTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String firstComboInput =
"//fieldset[1]/div/div[1]/div/div[2]/input[1]";
+ private final String firstComboButton =
"//fieldset[1]/div/div[1]/div/div[2]/input[3]";
+ private final String firstComboConcreteSuggestion =
"//body//div[@class='rich-combobox-list-scroll']/span[{0}]";
+ private final String firstComboSuggestions =
"//body//div[@class='rich-combobox-list-scroll']/span";
+
+ private final String secondComboInput =
"//fieldset[2]/div/div[1]/div/div[2]/input[1]";
+ private final String secondComboButton =
"//fieldset[2]/div/div[1]/div/div[2]/input[3]";
+ private final String secondComboConcreteSuggestion =
"//body//div[@class='rich-combobox-list-scroll']/span[{0}]";
+ private final String secondComboSuggestions =
"//body//div[@class='rich-combobox-list-scroll']/span";
+
+ private final String thirdComboInput =
"//fieldset[3]/div/div[1]/div/div[2]/input[1]";
+ private final String thirdComboButton =
"//fieldset[3]/div/div[1]/div/div[2]/input[3]";
+ private final String thirdComboConcreteSuggestion =
"//body//div[@class='rich-combobox-list-scroll']/span[{0}]";
+ private final String thirdComboSuggestions =
"//body//div[@class='rich-combobox-list-scroll']/span";
+
+ /**
+ * Tests the initial state of the page. It checks that there are all
+ * necessary component and that all combo boxes contain the string
+ * "Enter some value".
+ */
+ @Test
+ public void testInitialState() {
+ assertTrue(selenium.isElementPresent(firstComboInput), "First combo's
input is not present.");
+ assertTrue(selenium.isElementPresent(firstComboButton), "First combo's
button is not present.");
+ assertTrue(selenium.isElementPresent(secondComboInput), "Second combo's
input is not present.");
+ assertTrue(selenium.isElementPresent(secondComboInput), "Second combo's
button is not present.");
+ assertTrue(selenium.isElementPresent(thirdComboInput), "Third combo's
input is not present.");
+ assertTrue(selenium.isElementPresent(thirdComboInput), "Third combo's
button is not present.");
+
+ String text = selenium.getValue(firstComboInput);
+ assertEquals(text, "Enter some value", "Text in the first combo
box.");
+
+ text = selenium.getValue(secondComboInput);
+ assertEquals(text, "Enter some value", "Text in the second combo
box.");
+
+ text = selenium.getValue(thirdComboInput);
+ assertEquals(text, "Enter some value", "Text in the third combo
box.");
+ }
+
+ /**
+ * Tests the first combo box. It clicks on combo's button and checks the
+ * count of all suggestions. Then it types "su", checks the number of
+ * suggestions and the content of all suggestions. In the end, it clicks on
+ * the third suggestion and verifies the combo box's input field.
+ *
+ * <ul>
+ * <li><b>FIXME</b>the div containing suggestions moves out of
fieldset</li>
+ * <li><b>FIXME</b>"su " has to be clicked instead of
"su"</li>
+ * <li><b>FIXME</b>it is not possible to click on the third
suggestion</li>
+ * </ul>
+ */
+ @Test
+ public void testSuggestionsFirstComboBox() {
+ scrollIntoView(firstComboButton, true);
+
+ selenium.click(firstComboButton);
+ waitForElement(format(firstComboConcreteSuggestion, 1));
+ int count = selenium.getXpathCount(firstComboSuggestions).intValue();
+ assertEquals(count, 5, "Number of suggestions after after clicking on
button.");
+
+ selenium.click(firstComboInput);
+ selenium.typeKeys(firstComboInput, "su");
+ // FIXME why is this necessary?
+ selenium.typeKeys(firstComboInput, " ");
+
+ count = selenium.getXpathCount(firstComboSuggestions).intValue();
+ assertEquals(count, 5, "Number of suggestions after typing
'su'.");
+
+ String[] suggestions = new String[5];
+ for (int i = 0; i < 5; i++) {
+ suggestions[i] = selenium.getText(format(firstComboConcreteSuggestion, i +
1));
+ }
+
+ String[] expected = new String[] { "suggestion 1", "suggestion
2", "suggestion 3", "suggestion 4",
+ "suggestion 5", };
+
+ assertEqualsNoOrder(suggestions, expected, "Suggestions after typing
'sa'.");
+
+ try {
+ selenium.clickAt(format(firstComboConcreteSuggestion, 3), "");
+ } catch (Exception ex) {
+ // TODO why the exception is thrown?
+ }
+ waitFor(1000);
+ String text = selenium.getValue(firstComboInput);
+ assertEquals(text, "suggestion 3", "Third suggestion was
chosen.");
+ }
+
+ /**
+ * Tests the second combo box. It clicks on combo's button and checks the
+ * count of all suggestions. Then it types "sa", checks the number of
+ * suggestions and the content of all suggestions. In the end, it clicks on
+ * the third suggestion and verifies the combo box's input field.
+ *
+ * <ul>
+ * <li><b>FIXME</b>the div containing suggestions moves out of
fieldset</li>
+ * <li><b>FIXME</b>"sa " has to be clicked instead of
"sa"</li>
+ * </ul>
+ */
+ @Test
+ public void testSuggestionsSecondComboBox() {
+ scrollIntoView(secondComboButton, true);
+
+ selenium.click(secondComboButton);
+ waitForElement(format(secondComboConcreteSuggestion, 1));
+ int count = selenium.getXpathCount(secondComboSuggestions).intValue();
+ assertEquals(count, 50, "Number of suggestions after after clicking on
button.");
+
+ selenium.click(secondComboInput);
+ selenium.typeKeys(secondComboInput, "sa");
+ // FIXME why is this necessary?
+ selenium.typeKeys(secondComboInput, " ");
+
+ count = selenium.getXpathCount(secondComboSuggestions).intValue();
+ assertEquals(count, 4, "Number of suggestions after typing
'sa'.");
+
+ String[] suggestions = new String[4];
+ for (int i = 0; i < 4; i++) {
+ suggestions[i] = selenium.getText(format(secondComboConcreteSuggestion, i +
1));
+ }
+
+ String[] expected = new String[] { "Sacramento", "Santa Fe",
"Salem", "Salt Lake City" };
+
+ assertEqualsNoOrder(suggestions, expected, "Suggestions after typing
'sa'.");
+
+ try {
+ selenium.clickAt(format(secondComboConcreteSuggestion, 3), "");
+ } catch (Exception ex) {
+ // TODO why the exception is thrown?
+ }
+
+ waitFor(1000);
+ String text = selenium.getValue(secondComboInput);
+ assertEquals(text, "Salem", "Third suggestion was chosen.");
+ }
+
+ /**
+ * Tests the third combo box. It clicks on combo's button and checks the
+ * count of all suggestions. Then it types "sa", checks the number of
+ * suggestions and the content of all suggestions. In the end, it clicks on
+ * the third suggestion and verifies the combo box's input field.
+ *
+ * <ul>
+ * <li><b>FIXME</b>the div containing suggestions moves out of
fieldset</li>
+ * <li><b>FIXME</b>"sa " has to be clicked instead of
"sa"</li>
+ * </ul>
+ */
+ @Test
+ public void testSuggestionsThirdComboBox() {
+ selenium.click(thirdComboButton);
+
+ waitForElement(format(thirdComboConcreteSuggestion, 1));
+ int count = selenium.getXpathCount(thirdComboSuggestions).intValue();
+ assertEquals(count, 50, "Number of suggestions after after clicking on
button.");
+
+ selenium.click(thirdComboInput);
+ selenium.typeKeys(thirdComboInput, "sa");
+ // FIXME why is this necessary?
+ selenium.typeKeys(thirdComboInput, " ");
+
+ count = selenium.getXpathCount(thirdComboSuggestions).intValue();
+ assertEquals(count, 4, "Number of suggestions after typing
'sa'.");
+
+ String[] suggestions = new String[4];
+ for (int i = 0; i < 4; i++) {
+ suggestions[i] = selenium.getText(format(thirdComboConcreteSuggestion, i +
1));
+ }
+
+ String[] expected = new String[] { "Sacramento", "Santa Fe",
"Salem", "Salt Lake City" };
+
+ assertEqualsNoOrder(suggestions, expected, "Suggestions after typing
'sa'.");
+
+ try {
+ selenium.clickAt(format(thirdComboConcreteSuggestion, 4), "");
+ } catch (Exception ex) {
+ // TODO why the exception is thrown?
+ }
+
+ waitFor(1000);
+ String text = selenium.getValue(thirdComboInput);
+ assertEquals(text, "Salt Lake City", "Third suggestion was
chosen.");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testFirstComboBoxSource() {
+ // index has to be 2 because the combo box is in a div element
+ abstractTestSource(1, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testSecondComboBoxSource() {
+ // index has to be 2 because the combo box is in a div element
+ abstractTestSource(2, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testThirdComboBoxSource() {
+ // index has to be 2 because the combo box is in a div element
+ abstractTestSource(3, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 3, "The component provides editable
combobox element on the page.");
+ }
+
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/comboBox/ComboBoxTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandButton/CommandButtonTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandButton/CommandButtonTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandButton/CommandButtonTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,66 @@
+package org.jboss.richfaces.integrationTest.commandButton;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class CommandButtonTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/commandButton.jsf?c=commandButton&tab=usage");
+ }
+
+ private String textInput = getLoc("ajax-support--input");
+ private String textOutput = formatLoc("command-button--text", 2);
+ private String helloOutput = formatLoc("command-button--text", 1);
+ private String exclamationOutput = formatLoc("command-button--text", 3);
+ private String hello = formatMess("command-button--hello");
+ private String exclamation = formatMess("command-button--exclamation");
+ private String commandButton = getLoc("command-button--button");
+ private String nonEmpty = getMess("ajax-support--non-empty");
+
+ @Test
+ public void testNonEmpty() {
+ openPage();
+ nonEmpty();
+ }
+
+ @Test
+ public void testEmpty() {
+ openPage();
+ empty();
+ }
+
+ @Test
+ public void testInterleaving() {
+ openPage();
+ nonEmpty();
+ empty();
+ nonEmpty();
+ empty();
+ }
+
+ public void nonEmpty() {
+ selenium.type(textInput, nonEmpty);
+ selenium.click(commandButton);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ waitForTextEquals(textOutput, nonEmpty);
+ Assert.assertEquals(selenium.getText(helloOutput), hello);
+ Assert.assertEquals(selenium.getText(exclamationOutput), exclamation);
+ }
+
+ public void empty() {
+ selenium.type(textInput, "");
+ selenium.click(commandButton);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ Assert.assertFalse(selenium.isElementPresent(textOutput));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandLink/CommandLinkTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandLink/CommandLinkTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/commandLink/CommandLinkTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,66 @@
+package org.jboss.richfaces.integrationTest.commandLink;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class CommandLinkTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/commandLink.jsf?c=commandLink&tab=usage");
+ }
+
+ private String textInput = getLoc("ajax-support--input");
+ private String textOutput = formatLoc("command-button--text", 2);
+ private String helloOutput = formatLoc("command-button--text", 1);
+ private String exclamationOutput = formatLoc("command-button--text", 3);
+ private String hello = formatMess("command-button--hello");
+ private String exclamation = formatMess("command-button--exclamation");
+ private String commandLink = getLoc("command-link--link");
+ private String nonEmpty = getMess("ajax-support--non-empty");
+
+ @Test
+ public void testNonEmpty() {
+ openPage();
+ nonEmpty();
+ }
+
+ @Test
+ public void testEmpty() {
+ openPage();
+ empty();
+ }
+
+ @Test
+ public void testInterleaving() {
+ openPage();
+ nonEmpty();
+ empty();
+ nonEmpty();
+ empty();
+ }
+
+ public void nonEmpty() {
+ selenium.type(textInput, nonEmpty);
+ selenium.click(commandLink);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ waitForTextEquals(textOutput, nonEmpty);
+ Assert.assertEquals(selenium.getText(helloOutput), hello);
+ Assert.assertEquals(selenium.getText(exclamationOutput), exclamation);
+ }
+
+ public void empty() {
+ selenium.type(textInput, "");
+ selenium.click(commandLink);
+ waitFor(Wait.DEFAULT_INTERVAL);
+ Assert.assertFalse(selenium.isElementPresent(textOutput));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuImageTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuImageTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuImageTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,179 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Copyright 2009, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+package org.jboss.richfaces.integrationTest.contextMenu;
+
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Tests context menu in the first example.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ContextMenuImageTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String LOC_HEADER = getLoc("HEADER");
+ private final String LOC_IMAGE = getLoc("IMAGE");
+ private final String LOC_CONTEXT_MENU = getLoc("CONTEXT_MENU");
+ private final String LOC_ZOOM_IN = getLoc("ZOOM_IN");
+ private final String LOC_ZOOM_OUT = getLoc("ZOOM_OUT");
+
+ /**
+ * Clicks into image and verifies that the context menu is displayed.
+ */
+ @Test
+ public void testImageContextMenu() {
+ // open context menu
+ selenium.fireEvent(LOC_IMAGE, "contextmenu");
+
+ // check that context menu is visible
+ waitForElement(LOC_CONTEXT_MENU);
+ assertTrue(isDisplayed(LOC_CONTEXT_MENU), "Context menu should be
visible.");
+ }
+
+ /**
+ * Tests zooming in. It gets width and height of the image, then opens the
+ * context menu and zooms in four times. Then it gets image's width and
+ * height again and checks that the image got bigger.
+ */
+ @Test
+ public void testZoomIn() {
+ // get the size of image at the beginning
+ int originalWidth = selenium.getElementWidth(LOC_IMAGE).intValue();
+ int originalHeight = selenium.getElementHeight(LOC_IMAGE).intValue();
+
+ // open context menu
+ selenium.fireEvent(LOC_IMAGE, "contextmenu");
+ waitForElement(LOC_ZOOM_IN);
+
+ // zoom in
+ selenium.click(LOC_ZOOM_IN);
+ selenium.click(LOC_ZOOM_IN);
+ selenium.click(LOC_ZOOM_IN);
+ selenium.click(LOC_ZOOM_IN);
+
+ // get the size of image after zooming in
+ int width = selenium.getElementWidth(LOC_IMAGE).intValue();
+ assertTrue(width > originalWidth, format(
+ "After zooming in, the image should be bigger (width {0}px ->
{1}px).", originalWidth, width));
+
+ int height = selenium.getElementHeight(LOC_IMAGE).intValue();
+ assertTrue(height > originalHeight, format(
+ "After zooming in, the image should be bigger (height {0}px ->
{1}px).", originalHeight, height));
+ }
+
+ /**
+ * Tests zooming out. It gets width and height of the image, then opens the
+ * context menu and zooms out four times. Then it gets image's width and
+ * height again and checks that the image got smaller.
+ */
+ @Test
+ void testZoomOut() {
+ // get the size of image at the beginning
+ int originalWidth = selenium.getElementWidth(LOC_IMAGE).intValue();
+ int originalHeight = selenium.getElementHeight(LOC_IMAGE).intValue();
+
+ // open context menu
+ selenium.fireEvent(LOC_IMAGE, "contextmenu");
+ waitForElement(LOC_ZOOM_OUT);
+
+ // zoom out
+ selenium.click(LOC_ZOOM_OUT);
+ selenium.click(LOC_ZOOM_OUT);
+ selenium.click(LOC_ZOOM_OUT);
+ selenium.click(LOC_ZOOM_OUT);
+
+ // get the size of image after zooming out
+ int width = selenium.getElementWidth(LOC_IMAGE).intValue();
+ assertTrue(originalWidth > width, format(
+ "After zooming out, the image should be smaller (width {0}px ->
{1}px).", originalWidth, width));
+
+ int height = selenium.getElementHeight(LOC_IMAGE).intValue();
+ assertTrue(originalHeight > height, format(
+ "After zooming out, the image should be smaller (height {0}px ->
{1}px).", originalHeight, height));
+ }
+
+ /**
+ * Tests zooming in and out. It gets width and height of the image, then
+ * opens the context menu and zooms in and out. Then it gets image's width
+ * and height again and checks that the image has the same proportions as at
+ * start.
+ */
+ @Test
+ void testZoomInZoomOut() {
+ // get the size of image at the beginning
+ int originalWidth = selenium.getElementWidth(LOC_IMAGE).intValue();
+ int originalHeight = selenium.getElementHeight(LOC_IMAGE).intValue();
+
+ // open context menu
+ selenium.fireEvent(LOC_IMAGE, "contextmenu");
+ waitForElement(LOC_ZOOM_IN);
+
+ selenium.click(LOC_ZOOM_IN);
+ selenium.click(LOC_ZOOM_OUT);
+
+ // get the size of image after zooming in and out
+ // it does not zoom accurately so there has to be some tolerance
+ int width = selenium.getElementWidth(LOC_IMAGE).intValue();
+ assertTrue(Math.abs(width - originalWidth) < 3, format(
+ "After zooming in and out, the image should have the same size
(width {0}px -> {1}px).", originalWidth,
+ width));
+
+ int height = selenium.getElementHeight(LOC_IMAGE).intValue();
+ assertTrue(Math.abs(height - originalHeight) < 3, format(
+ "After zooming in and out, the image should have the same size
(height {0}px -> {1}px).",
+ originalHeight, height));
+ }
+
+ /**
+ * Tests the "View Source" link. It checks that the source code is not
+ * visible, clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<a4j:loadScript
src=\"/scripts/picturesUtils.js\"/>",
+ "<h:panelGrid columns=\"1\"
columnClasses=\"cent\">",
+ "<h:panelGroup id=\"picture\">",
+ "<h:graphicImage
value=\"/richfaces/jQuery/images/pic1.jpg\" id=\"pic\"
style=\"border : 5px solid #E4EAEF\"/>",
+ "<rich:contextMenu event=\"oncontextmenu\"
attachTo=\"pic\" submitMode=\"none\">",
+ "<rich:menuItem value=\"Zoom In\"
onclick=\"enlarge('pic');\"
id=\"zin\"></rich:menuItem>",
+ "<rich:menuItem value=\"Zoom Out\"
onclick=\"decrease('pic');\"
id=\"zout\"></rich:menuItem>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Context Menu");
+
+ // XXX: context menu opens in top left corner so it isn't visible if it
+ // scrolls down
+ // scrollIntoView(LOC_HEADER, true);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuTableTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuTableTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/contextMenu/ContextMenuTableTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,161 @@
+package org.jboss.richfaces.integrationTest.contextMenu;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.fail;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ContextMenuTableTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private String xpathPrefix;
+
+ @Test
+ public void testTableContextMenu() {
+ xpathPrefix = "//fieldset[2]/div/form";
+
+ // check that the context menu is not visible
+ boolean present = selenium.isElementPresent(xpathPrefix + "/div/div");
+ assertFalse(present, "Context menu should be invisible at start.");
+
+ // check that the 'Last Menu Action' is empty
+ String text = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[2]/span/div/div[2]");
+ assertEquals(text, "", "Last menu action should be empty.");
+
+ // open context menu on third line, first column
+ selenium.click(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]");
+ waitForElement(xpathPrefix + "/div/div/div[1]");
+ text = selenium.getAttribute(xpathPrefix + "/div/div/div[1]@style");
+ assertFalse(text.contains("display: none;"),
+ "Context menu should be visible after clicking on first column.");
+
+ // open context menu on sixth line, second column
+ selenium.click(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[6]/td[2]");
+ waitForElement(xpathPrefix + "/div/div/div[1]");
+ text = selenium.getAttribute(xpathPrefix + "/div/div/div[1]@style");
+ assertFalse(text.contains("display: none;"),
+ "Context menu should be visible after clicking on second column.");
+
+ // open context menu on first line, third column (16773)
+ selenium.click(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[1]/td[3]");
+ waitForElement(xpathPrefix + "/div/div/div[1]");
+ text = selenium.getAttribute(xpathPrefix + "/div/div/div[1]@style");
+ assertFalse(text.contains("display: none;"),
+ "Context menu should be visible after clicking on third column.");
+ }
+
+ @Test
+ public void testClickOnCarDetails() {
+ xpathPrefix = "//fieldset[2]/div/form";
+ String text = null;
+
+ String producer = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]");
+ String model = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[2]");
+
+ // open context menu on third line, first column
+ selenium.click(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]");
+ waitForElement(xpathPrefix + "/div/div/div[1]");
+ text = selenium.getAttribute(xpathPrefix + "/div/div/div[1]@style");
+ assertFalse(text.contains("display: none;"),
+ "Context menu should be visible after clicking on first column.");
+
+ // click '<car> details'
+ selenium.click(xpathPrefix + "/div/div/div[1]/div/div[1]/span[2]");
+ waitFor(400);
+ text = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[2]/span/div/div[2]");
+ assertEquals(text, producer + " " + model + " details",
+ "Details of car:");
+ }
+
+ @Test
+ public void testClickOnPutCarToBasket() {
+ clickAction(1);
+ }
+
+ @Test
+ public void testClickOnReadComments() {
+ clickAction(2);
+ }
+
+ @Test
+ public void testClickOnGoToProducerSite() {
+ clickAction(3);
+ }
+
+ @Test
+ public void testContextMenuTableSource() {
+ abstractTestSource(2, 1, "<", "f:subview");
+ }
+
+ private void clickAction(int index) {
+ xpathPrefix = "//fieldset[2]/div/form";
+ String text = null;
+
+ String producer = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]");
+ String model = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[2]");
+
+ // open context menu on third line, first column
+ selenium.click(xpathPrefix
+ + "/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]");
+ waitForElement(xpathPrefix + "/div/div/div[1]");
+ text = selenium.getAttribute(xpathPrefix + "/div/div/div[1]@style");
+ assertFalse(text.contains("display: none;"),
+ "Context menu should be visible after clicking on first column.");
+
+ // click 'Actions'
+ selenium.click(xpathPrefix + "/div/div/div[2]");
+ waitFor(400);
+
+ // click 'Put <car> To Basket'
+ selenium.click(xpathPrefix + "/div/div/div[2]/div/div[" + index
+ + "]/span[2]");
+ waitFor(400);
+ text = selenium.getText(xpathPrefix
+ + "/table/tbody/tr/td[2]/span/div/div[2]");
+
+ switch (index) {
+ case 1:
+ assertEquals(text, "Put " + producer + " " + model + " To
Basket",
+ "Action put to basket:");
+ break;
+ case 2:
+ assertEquals(text, "Read Comments", "Action read comments:");
+ break;
+ case 3:
+ assertEquals(text, "Go to " + producer + " site",
+ "Action go to site:");
+ break;
+ default:
+ fail("Wrong index.");
+ }
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super
+ .loadPage(
+ "richMenu",
+ 1,
+ "RichFaces Context menu is a component that allows to organize the
hierarchical context menus");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataFilterSlider/DataFilterSliderTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataFilterSlider/DataFilterSliderTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataFilterSlider/DataFilterSliderTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,149 @@
+package org.jboss.richfaces.integrationTest.dataFilterSlider;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DataFilterSliderTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE =
"richfaces/dataFilterSlider.jsf?c=dataFilterSlider&tab=usage";
+ private final String header = getLoc("data-filter-slider--header");
+ private final String cellsMileage =
getLoc("data-filter-slider--table-cells--mileage-preformatted");
+ private final String cellsBrand =
getLoc("data-filter-slider--table-cells--brand-preformatted");
+ private final int maxRowCount = Integer
+ .valueOf(getMess("data-filter-slider--count--max-rows-in-table"));
+ private final String brands = getMess("data-filter-slider--choices--brands");
+ private final String percentages =
getMess("data-filter-slider--choices--slider-percentages");
+ private final String percentagesInterleaving =
getMess("data-filter-slider--choices--slider-percentages-interleaving");
+ private final String percentageSimple =
getMess("data-filter-slider--simple-slider-percentage");
+
+ @Test
+ public void simpleBrandTest() {
+ openPage();
+ testBrand(format(brands, 0));
+ }
+
+ @Test
+ public void simpleSliderTest() {
+ openPage();
+ testSlider(percentageSimple);
+ }
+
+ @Test
+ public void complexSliderTest() {
+ openPage();
+
+ List<Integer> lowMileages = testSlider(format(percentages, 0));
+ List<Integer> highMileages = testSlider(format(percentages, 1));
+ List<Integer> lowestMileages = testSlider(format(percentages, 2));
+ List<Integer> allMileages = testSlider(format(percentages, 3));
+
+ // check that each state of table contains all mileages in states with
+ // lesser specified max mileage (don't try to check tables that have
+ // maxRowCount and more rows, because tables are constrained by
+ // maxRowCount per table and so don't have to include all lesser tables)
+ Assert.assertTrue(allMileages.size() >= maxRowCount
+ || allMileages.containsAll(highMileages));
+ Assert.assertTrue(highMileages.size() >= maxRowCount
+ || highMileages.containsAll(lowMileages));
+ Assert.assertTrue(lowMileages.size() >= maxRowCount
+ || lowMileages.containsAll(lowestMileages));
+ // check that there is at least one mileage greater than slider minimum
+ Assert.assertFalse(lowestMileages.isEmpty());
+ }
+
+ @Test
+ public void interleavingMethodsTest() {
+ openPage();
+ testSlider(format(percentagesInterleaving, 0));
+ testBrand(format(brands, 0));
+ testSlider(format(percentagesInterleaving, 1));
+ testBrand(format(brands, 1));
+ testSlider(format(percentagesInterleaving, 2));
+ }
+
+ private void testBrand(String brand) {
+ final String table = getLoc("data-table-common--table");
+ final String linkBrandPreformatted =
getLoc("data-filter-slider--link--brand-preformatted");
+
+ String linkBrand = format(linkBrandPreformatted, brand);
+
+ final String tableText = selenium.getText(table);
+ selenium.click(linkBrand);
+
+ Wait.dontFail().timeout(5000).until(new Condition() {
+ public boolean isTrue() {
+ return !tableText.equals(selenium.getText(table));
+ }
+ });
+
+ for (int row = 1; row <= selenium.getXpathCount(format(cellsBrand, 0))
+ .intValue(); row++) {
+ String rowBrand = selenium.getText(format(cellsBrand, row));
+ Assert.assertEquals(brand, rowBrand);
+ }
+ }
+
+ private List<Integer> testSlider(String percentage) {
+ clickSliderAtPercent(Integer.valueOf(percentage));
+ int maxMileage = getCurrentMileageFromInput();
+ return checkAllMileagesMaxAndReturnItsList(maxMileage);
+ }
+
+ private List<Integer> checkAllMileagesMaxAndReturnItsList(int maxMileage) {
+ List<Integer> list = new LinkedList<Integer>();
+ int rowCount = selenium.getXpathCount(format(cellsMileage, 0)).intValue();
+ for (int row = 1; row <= rowCount; row++) {
+ int rowMileage = Double.valueOf(
+ selenium.getText(format(cellsMileage, row))).intValue();
+ Assert.assertTrue(rowMileage <= maxMileage);
+ list.add(rowMileage);
+ }
+ return list;
+ }
+
+ private int getCurrentMileageFromInput() {
+ final String inputPrice = getLoc("data-filter-slider--input--price");
+ return Integer.valueOf(selenium.getValue(inputPrice));
+ }
+
+ private void clickSliderAtPercent(double percent) {
+ final String handle = getLoc("data-filter-slider--handle");
+ final String track = getLoc("data-filter-slider--track");
+
+ final Number handlePosition = selenium.getElementPositionLeft(handle);
+
+ int width = selenium.getElementWidth(track).intValue();
+ int height = selenium.getElementHeight(track).intValue();
+ String coords = format("{0,number,integer},{1}", width * percent / 100,
+ height / 2);
+
+ selenium.mouseDownAt(track, coords);
+ selenium.mouseUpAt(track, coords);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !handlePosition.equals(selenium
+ .getElementPositionLeft(handle));
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataGrid/DataGridTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataGrid/DataGridTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataGrid/DataGridTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,65 @@
+package org.jboss.richfaces.integrationTest.dataGrid;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DataGridTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(table, true);
+ }
+
+ private final String PAGE =
"richfaces/dataGrid.jsf?c=dataGrid&tab=usage";
+ private final String grid = getLoc("data-grid--cells--preformatted");
+ private final int cellsPerColumn = Integer
+ .valueOf(getMess("data-grid--cells-per-column"));
+ private final int cellsPerPage = Integer
+ .valueOf(getMess("data-grid--cells-per-page"));
+
+ @Test
+ public void functionalityTest() {
+ openPage();
+
+ final Set<String> cellTexts = new HashSet<String>();
+
+ while (getActivePage() < getLastVisiblePage()) {
+ if (!cellTexts.isEmpty()) {
+ gotoPage(buttonNextPage);
+ }
+
+ int cells = selenium.getXpathCount(format(grid, 0, 0)).intValue();
+ Assert.assertTrue(cells > 0 && cells <= cellsPerPage);
+
+ int rows = selenium.getXpathCount(format(grid, 0, 1)).intValue();
+
+
+ for (int row = 1; row <= rows; row++) {
+ int columns = selenium.getXpathCount(format(grid, row, 0))
+ .intValue();
+ Assert.assertTrue(columns > 0 && columns <= cellsPerColumn);
+
+ for (int column = 1; column <= columns; column++) {
+ String cellText = selenium
+ .getText(format(grid, row, column));
+ if (cellTexts.contains(cellText)) {
+ Assert.fail();
+ }
+ cellTexts.add(cellText);
+ }
+ }
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataList/DataListTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataList/DataListTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataList/DataListTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,33 @@
+package org.jboss.richfaces.integrationTest.dataList;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DataListTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE =
"richfaces/dataLists.jsf?c=dataList&tab=usage";
+ private final String header = getLoc("data-list--header");
+
+ @Test
+ public void staticContentTest() {
+ openPage();
+
+ Assert.assertTrue(selenium.isTextPresent(getMess("data-list--part1")));
+ Assert.assertTrue(selenium.isTextPresent(getMess("data-list--part2")));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataScroller/DataScrollerTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataScroller/DataScrollerTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataScroller/DataScrollerTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,146 @@
+package org.jboss.richfaces.integrationTest.dataScroller;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DataScrollerTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE =
"richfaces/dataTableScroller.jsf?c=dataTableScroller&tab=usage";
+ private final String header = getLoc("data-scroller--header");
+ private final String[] numberedPages =
StringUtils.split(getMess("data-scroller--numbered-pages"), ',');
+
+ @Test
+ public void numberedPageTest() {
+ openPage();
+ String tableText = getTableText();
+ for (String page : numberedPages) {
+ gotoPage(format(buttonPagePreformatted, Integer.valueOf(page)));
+ tableText = checkThatTextDiffersAndReturn(tableText);
+ }
+ gotoFirstPage();
+ checkThatTextDiffersAndReturn(tableText);
+ checkFirstPage();
+ }
+
+ @Test(dependsOnMethods = "numberedPageTest")
+ public void remembersActivePage() {
+ openPage();
+ gotoFirstPage();
+ Integer page = 2;
+ gotoPage(format(buttonPagePreformatted, page));
+ selenium.refresh();
+ Assert.assertTrue(page.equals(getActivePage()));
+ openPage();
+ Assert.assertTrue(page.equals(getActivePage()));
+ }
+
+ @Test(dependsOnMethods = "numberedPageTest")
+ public void lastPageTest() {
+ openPage();
+ gotoFirstPage();
+ String tableText = getTableText();
+ gotoPage(buttonLastPage);
+ checkThatTextDiffersAndReturn(tableText);
+ checkLastPage();
+ }
+
+ @Test(dependsOnMethods = "lastPageTest")
+ public void firstPageTest() {
+ openPage();
+ gotoFirstPage();
+ gotoPage(buttonLastPage);
+ String tableText = getTableText();
+ gotoPage(buttonFirstPage);
+ checkThatTextDiffersAndReturn(tableText);
+ checkFirstPage();
+ }
+
+ @Test(dependsOnMethods = "numberedPageTest")
+ public void nextPageTest() {
+ openPage();
+ gotoFirstPage();
+ String tableText = getTableText();
+ for (int page = 2; page < getLastVisiblePage(); page++) {
+ gotoPage(buttonNextPage);
+ checkNonExtremePage();
+ tableText = checkThatTextDiffersAndReturn(tableText);
+ }
+ gotoPage(buttonNextPage);
+ checkThatTextDiffersAndReturn(tableText);
+ checkLastPage();
+ }
+
+ @Test(dependsOnMethods = "lastPageTest")
+ public void previousPageTest() {
+ openPage();
+ gotoFirstPage();
+ gotoPage(buttonLastPage);
+ String tableText = getTableText();
+ for (int page = getActivePage() - 1; page > 1; page--) {
+ gotoPage(buttonPreviousPage);
+ checkNonExtremePage();
+ tableText = checkThatTextDiffersAndReturn(tableText);
+ }
+ gotoPage(buttonPreviousPage);
+ checkThatTextDiffersAndReturn(tableText);
+ checkFirstPage();
+ }
+
+ private void checkFirstPage() {
+ Assert.assertTrue(belongsClass("rich-datascr-button-dsbld",
+ buttonFirstPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button-dsbld",
+ buttonPreviousPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonNextPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonLastPage));
+ Assert.assertTrue("1".equals(selenium.getText(outputActivePage)));
+ }
+
+ private void checkNonExtremePage() {
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonFirstPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button",
+ buttonPreviousPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonNextPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonLastPage));
+ String activePage = selenium.getText(outputActivePage);
+ Assert.assertFalse("1".equals(activePage));
+ Assert.assertFalse(getLastVisiblePage().toString().equals(activePage));
+ }
+
+ private void checkLastPage() {
+ Assert.assertTrue(belongsClass("rich-datascr-button", buttonFirstPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button",
+ buttonPreviousPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button-dsbld",
+ buttonNextPage));
+ Assert.assertTrue(belongsClass("rich-datascr-button-dsbld",
+ buttonLastPage));
+ Assert.assertTrue(getLastVisiblePage().toString().equals(
+ selenium.getText(outputActivePage)));
+ }
+
+ private void gotoFirstPage() {
+ gotoPage(buttonFirstPage);
+ }
+
+ private String checkThatTextDiffersAndReturn(String lastTableText) {
+ String tableText = getTableText();
+ Assert.assertFalse(lastTableText.equals(tableText));
+ return tableText;
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/DataTableTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/DataTableTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/DataTableTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,353 @@
+package org.jboss.richfaces.integrationTest.dataTable;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DataTableTestCase extends AbstractDataIterationTestCase {
+ {
+ // each test will be ran in separated browser session
+ setCleanSessionForEachMethod(true);
+ }
+
+ /**
+ * Opens specified page
+ */
+ private void openPage(final String tabTitle,
+ String scrollToLocator) {
+ openComponent("Column");
+ openTab(tabTitle);
+ scrollIntoView(scrollToLocator, true);
+ }
+
+ private final String modifiableTableCells =
getLoc("data-table-modifiable--table-cell--preformatted-locators");
+
+ @Test
+ public void wholeDataTableContentTest() {
+ openPage(getMsg("data-table--open-tab"),
getLoc("data-table--header"));
+
+ String expected = getMess("data-table--text--whole-table");
+ String text = selenium
+ .getText(getLoc("data-table--output--whole-table"));
+
+ Assert.assertEquals(expected, text);
+ }
+
+ @Test
+ public void extendedDataTableTest() throws ParseException {
+
+ String actual;
+ final String tableCellHighestBid =
getLoc("data-table-extended--table-cell--highest-bid");
+ final String tableCellAmount =
getLoc("data-table-extended--table-cell--amount");
+ final String inputYoutBid = getLoc("data-table-extended--input--your-bid");
+ final String linkPlaceBid = getLoc("data-table-extended--link--place-bid");
+
+ final String header = buttonNextPage;
+
+ // opens tab
+ openPage(getMsg("data-table-extended--open-tab"), header);
+
+ // get a actual value of highest bid in specified row
+ actual = selenium.getText(tableCellHighestBid);
+ NumberFormat numberFormat = DecimalFormat.getInstance();
+ final double highestBid = numberFormat.parse(actual.replace("$",
""))
+ .doubleValue();
+
+ // asserts blank value of "amount" cell
+ Assert.assertTrue(StringUtils
+ .isBlank(selenium.getText(tableCellAmount)));
+
+ // fill new highest bid like a number smaller than actual highest bid
+ selenium.type(inputYoutBid, Double.toString(highestBid - 1));
+ selenium.click(linkPlaceBid);
+
+ // waits for validation fails message
+ waitForText(getMess("data-table-extended--message--lower-bid"));
+
+ // fix your bid to number greater than actual bid
+ selenium.type(inputYoutBid, Double.toString(highestBid + 1));
+ selenium.click(linkPlaceBid);
+
+ // test that amount was saved as a highest bid
+ final String yourBid = formatMess(
+ "data-table-extended--format--amount", highestBid + 1);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ String actual = selenium.getText(tableCellAmount);
+ if (StringUtils.isNotBlank(actual)) {
+ Assert.assertEquals(yourBid, actual);
+ return true;
+ }
+ return false;
+ }
+ });
+ Assert.assertEquals(yourBid, selenium.getText(tableCellHighestBid));
+
+ // relocate on second page
+ selenium.click(buttonNextPage);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "2".equals(selenium.getText(outputActivePage));
+ }
+ });
+
+ // relocate on first page
+ selenium.click(buttonPreviousPage);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "1".equals(selenium.getText(outputActivePage));
+ }
+ });
+
+ // check if all things stay changed
+ actual = selenium.getText(tableCellAmount);
+ Assert.assertEquals(yourBid, actual);
+ actual = selenium.getText(tableCellHighestBid);
+ Assert.assertEquals(yourBid, actual);
+ }
+
+ @Test
+ public void modifiableDataModelSortingTest() {
+ // opens tab
+ openPage(getMsg("data-table-modifiable--open-tab"), table);
+
+ final String tableHeaderCellKey =
getLoc("data-table-modifiable--table-header-cell--key");
+
+ // clicks on "key" column-header to sort table by keys
+ final String tableContentBeforeSorting = selenium.getText(table);
+ selenium.click(tableHeaderCellKey);
+ Wait.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ return !tableContentBeforeSorting.equals(selenium
+ .getText(table));
+ }
+ });
+
+ // check if keys on all pages are sorted in right way
+ int pageCount = selenium.getXpathCount(
+ format(buttonPagePreformatted, 0)).intValue();
+ String lastText = null; // remembers last cell text
+ for (int i = 1; i <= pageCount; i++) {
+ // switch on the wanted page
+ final String buttonPage = format(buttonPagePreformatted, i);
+ selenium.click(buttonPage);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return belongsClass("rich-datascr-act", buttonPage);
+ }
+ });
+
+ // count how many rows (cells in one column) table have
+ int cellCount = selenium.getXpathCount(
+ format(modifiableTableCells, 0)).intValue();
+
+ // checks that columns are correctly sorted
+ for (int j = 1; j <= cellCount; j++) {
+ String cell = format(modifiableTableCells, j);
+ String cellText = selenium.getText(cell);
+ if (lastText != null && cellText.compareToIgnoreCase(lastText) <= 0) {
+ Assert.fail();
+ }
+ lastText = cellText;
+ }
+ }
+ }
+
+ @Test
+ public void modifiableDataModelSearchingTest() {
+ // opens tab
+ openPage(getMsg("data-table-modifiable--open-tab"), table);
+
+ String expected, actual;
+ final String inputAssignee =
getLoc("data-table-modifiable--input--assignee");
+ final String assigneeName =
getMess("data-model-modifiable--input--assignee-name");
+
+ // types a name to the assignee column input
+ final String tableContentBeforeSorting = selenium.getText(table);
+ selenium.type(inputAssignee, assigneeName);
+ selenium.fireEvent(inputAssignee, Event.KEYUP);
+ Wait.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ return !tableContentBeforeSorting.equals(selenium
+ .getText(table));
+ }
+ });
+
+ // check how many pages should be displayed
+ expected = getMess("data-model-modifiable--count--assignee-table-pages");
+ String pageCount = selenium.getXpathCount(
+ format(buttonPagePreformatted, 0)).toString();
+ Assert.assertEquals(expected, pageCount);
+
+ // checks how many columns should be displayed
+ expected = getMess("data-model-modifiable--count--assignee-table-rows");
+ String cellCount = selenium.getXpathCount(
+ format(modifiableTableCells, 0)).toString();
+ Assert.assertEquals(expected, cellCount);
+
+ // checks that assignee column contains assignee name
+ actual = selenium
+ .getText(getLoc("data-table-modifiable--table-cell--assignee"));
+ Assert.assertTrue(actual.contains(assigneeName));
+ }
+
+ @Test
+ public void editableTableWithModalPanelEditTest() {
+ final int row = 2;
+ final String linkEdit = formatLoc("data-table-editable--link--edit",
+ row);
+ final String panelEdit = getLoc("data-table-editable--panel--edit");
+ final String outputPrice = formatLoc(
+ "data-table-editable--output--price", row);
+ final String inputPrice = getLoc("data-table-editable--input--price");
+ final String buttonStore = getLoc("data-table-editable--button--store");
+
+ // opens tab
+ openPage(getMsg("data-table-editable--open-tab"), table);
+
+ // get a initial value of selected row
+ int value = Integer.valueOf(selenium.getText(outputPrice));
+
+ // open and wait for editation modal panel
+ selenium.click(linkEdit);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !"none".equals(getStyle(panelEdit, "display"));
+ }
+ });
+
+ // check that value in input is same like initial
+ Assert.assertEquals(selenium.getValue(inputPrice), Integer
+ .toString(value));
+
+ // increase price in input
+ value += 2;
+ selenium.type(inputPrice, Integer.toString(value));
+
+ // store new price and wait for modal panel disappears
+ selenium.click(buttonStore);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(panelEdit, "display"));
+ }
+ });
+
+ // check that new price was stored successfully
+ Assert.assertEquals(selenium.getText(outputPrice), Integer
+ .toString(value));
+
+ // goto next page and then back to first
+ gotoNextAndThenBack();
+
+ // check that new price is shown right after page movement
+ Assert.assertEquals(selenium.getText(outputPrice), Integer
+ .toString(value));
+ }
+
+ @Test
+ public void editableTableWithModalPanelDeleteTest() {
+ final int row = 2;
+ final String linkDelete = formatLoc(
+ "data-table-editable--link--delete", row);
+ final String panelDelete = getLoc("data-table-editable--panel--delete");
+ final String outputPrice = formatLoc(
+ "data-table-editable--output--price", row);
+ final String outputPriceAbove = formatLoc(
+ "data-table-editable--output--price", row - 1);
+ final String outputPriceBelow = formatLoc(
+ "data-table-editable--output--price", row + 1);
+ final String buttonYes = getLoc("data-table-editable--button--yes");
+ final String buttonCancel = getLoc("data-table-editable--button--cancel");
+
+ // opens tab
+ openPage(getMsg("data-table-editable--open-tab"), table);
+
+ // get a initial value of selected row and its neighbour
+ String value = selenium.getText(outputPrice);
+ String valueAbove = selenium.getText(outputPriceAbove);
+ String valueBelow = selenium.getText(outputPriceBelow);
+
+ // open delete modal panel
+ selenium.click(linkDelete);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !"none".equals(getStyle(panelDelete, "display"));
+ }
+ });
+
+ // try to cancel delete action
+ selenium.click(buttonCancel);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(panelDelete, "display"));
+ }
+ });
+
+ // check that nothing happened with data model
+ Assert.assertEquals(value, selenium.getText(outputPrice));
+ Assert.assertEquals(valueAbove, selenium.getText(outputPriceAbove));
+ Assert.assertEquals(valueBelow, selenium.getText(outputPriceBelow));
+
+ // try to open delete modal panel again
+ selenium.click(linkDelete);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !"none".equals(getStyle(panelDelete, "display"));
+ }
+ });
+
+ // try to cancel delete action
+ selenium.click(buttonYes);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(panelDelete, "display"));
+ }
+ });
+
+ // check that value below moved to place where was value
+ // and that nothing happened with value above
+ Assert.assertEquals(valueBelow, selenium.getText(outputPrice));
+ Assert.assertEquals(valueAbove, selenium.getText(outputPriceAbove));
+
+ // goto next page and then back to first
+ gotoNextAndThenBack();
+
+ // check that value below moved to place where was value
+ // and that nothing happened with value above
+ Assert.assertEquals(valueBelow, selenium.getText(outputPrice));
+ Assert.assertEquals(valueAbove, selenium.getText(outputPriceAbove));
+ }
+
+ private void gotoNextAndThenBack() {
+ Assert.assertEquals("1", selenium.getText(outputActivePage));
+
+ // go to next page
+ selenium.click(buttonNextPage);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "2".equals(selenium.getText(outputActivePage));
+ }
+ });
+
+ // go back to previous page
+ selenium.click(buttonPreviousPage);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "1".equals(selenium.getText(outputActivePage));
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableFilteringTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableFilteringTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableFilteringTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,134 @@
+package org.jboss.richfaces.integrationTest.dataTable;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Retrieve;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class TableFilteringTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage(String page) {
+ selenium.open(format("{0}/{1}", contextPath, page));
+
+ scrollIntoView(table, true);
+ }
+
+ private final String inputState =
getLoc("table-filtering--input--state-name");
+ private final String inputCapital =
getLoc("table-filtering--input--state-capital");
+ private final String cellsState =
getLoc("table-filtering--table-cell--state-name-preformatted");
+ private final String cellsCapital =
getLoc("table-filtering--table-cell--state-capital-preformatted");
+ private final String[] statePrefixes = StringUtils.splitPreserveAllTokens(
+ getMess("table-filtering--input--state-prefixes"), ',');
+ private final String[] capitalPrefixes = StringUtils
+ .splitPreserveAllTokens(
+ getMess("table-filtering--input--capital-prefixes"), ',');
+ private final String selectTimezone =
getLoc("table-filtering-external--select--timezone");
+ private final String optionTimezoneSelected =
getLoc("table-filtering-external--option--selected");
+ private final String cellsTimezone = cellsCapital;
+ private final String outputTimezonePreformatted =
getMess("data-filtering-external--output--timezone-preformatted");
+ private final String[] pairs = StringUtils.splitPreserveAllTokens(
+ getMess("table-filtering-external--input--pairs"), '|');
+
+ @Test
+ public void builtInFilteringTest() {
+ openPage("richfaces/filteringFeature.jsf?c=filtering&tab=usage");
+
+ Assert.assertTrue(statePrefixes.length == capitalPrefixes.length);
+
+ for (int i = 0; i < statePrefixes.length; i++) {
+ final String statePrefix = statePrefixes[i];
+ final String capitalPrefix = capitalPrefixes[i];
+
+ String tableText = selenium.getText(table);
+ selenium.type(inputState, statePrefix);
+ selenium.fireEvent(inputState, Event.KEYUP);
+ waitForTextChanges(table, tableText);
+ checkFiltering();
+
+ tableText = selenium.getText(table);
+ selenium.type(inputCapital, capitalPrefix);
+ selenium.fireEvent(inputCapital, Event.KEYUP);
+ waitForTextChanges(table, tableText);
+ checkFiltering();
+ }
+ }
+
+ @Test
+ public void externalFilteringTest() {
+ openPage("richfaces/filteringFeature.jsf?c=filtering&tab=ex-usage");
+
+ for (int i = 0; i < pairs.length; i++) {
+ String[] pair = StringUtils.splitPreserveAllTokens(pairs[i], ':');
+
+ String tableText = selenium.getText(table);
+ selenium.type(inputState, pair[0]);
+ selenium.fireEvent(inputState, Event.KEYUP);
+ Wait.dontFail().timeout(5000).waitForChange(tableText, retrieveTableText);
+ checkExternalFiltering();
+
+ tableText = selenium.getText(table);
+ selenium.select(selectTimezone, pair[1]);
+ selenium.fireEvent(selectTimezone, Event.CHANGE);
+ Wait.dontFail().timeout(5000).waitForChange(tableText, retrieveTableText);
+ checkExternalFiltering();
+ }
+ }
+
+ Retrieve<String> retrieveTableText = new Retrieve<String>() {
+ public String retrieve() {
+ return selenium.getText(table);
+ }
+ };
+
+ private void checkFiltering() {
+ String statePrefix = selenium.getValue(inputState);
+ String capitalPrefix = selenium.getValue(inputCapital);
+
+ int rows = selenium.getXpathCount(format(cellsState, 0)).intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ if (statePrefix.length() > 0) {
+ String state = selenium.getText(format(cellsState, row));
+ Assert.assertTrue(state.startsWith(statePrefix));
+ }
+ if (capitalPrefix.length() > 0) {
+ String capital = selenium.getText(format(cellsCapital, row));
+ Assert.assertTrue(capital.startsWith(capitalPrefix));
+ }
+ }
+ }
+
+ private void checkExternalFiltering() {
+ String statePrefix = selenium.getValue(inputState);
+ String selectedTimezone = selenium.getText(optionTimezoneSelected);
+
+ int rows = selenium.getXpathCount(format(cellsState, 0)).intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ if (statePrefix.length() > 0) {
+ String state = selenium.getText(format(cellsState, row));
+ Assert.assertTrue(state.startsWith(statePrefix));
+ }
+ String actualTimezone = selenium
+ .getText(format(cellsTimezone, row));
+ if (StringUtils.isNotBlank(selectedTimezone)) {
+ String expected = format(outputTimezonePreformatted,
+ selectedTimezone);
+ Assert.assertEquals(expected, actualTimezone);
+ } else {
+ String prefix = format(outputTimezonePreformatted, "");
+ actualTimezone.startsWith(prefix);
+ }
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableSortingTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableSortingTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dataTable/TableSortingTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,96 @@
+package org.jboss.richfaces.integrationTest.dataTable;
+
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class TableSortingTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage(String page) {
+ selenium.open(format("{0}/{1}", contextPath, page));
+
+ scrollIntoView(table, true);
+ }
+
+ private final String table = getLoc("data-table-common--table");
+ private final String headerCellState =
getLoc("table-sorting--header-cell--state");
+ private final String headerCellCapital =
getLoc("table-sorting--header-cell--capital");
+ private final String srcSortIconRelative =
getLoc("table-sorting--image-src--sort-icon-relative");
+ private final String srcSortIconState = format(srcSortIconRelative,
+ headerCellState);
+ private final String srcSortIconCapital = format(srcSortIconRelative,
+ headerCellCapital);
+ private final String cellsState =
getLoc("table-sorting--cells--state-preformatted");
+ private final String cellsCapital =
getLoc("table-sorting--cells--capital-preformatted");
+
+ @Test
+ public void builtInSortingTest() {
+ openPage("richfaces/sortingFeature.jsf?c=sorting&tab=usage");
+
+ String iconSrc = selenium.getAttribute(srcSortIconState);
+ selenium.click(headerCellState);
+ iconSrc = waitForAttributeChangesAndReturn(srcSortIconState, iconSrc);
+ checkSorting(cellsState);
+
+ selenium.click(headerCellState);
+ waitForAttributeChanges(srcSortIconState, iconSrc);
+ checkSorting(cellsState);
+
+ iconSrc = selenium.getAttribute(srcSortIconCapital);
+ selenium.click(headerCellCapital);
+ iconSrc = waitForAttributeChangesAndReturn(srcSortIconCapital, iconSrc);
+ checkSorting(cellsCapital);
+
+ selenium.click(headerCellCapital);
+ waitForAttributeChanges(srcSortIconCapital, iconSrc);
+ checkSorting(cellsCapital);
+ }
+
+ private final String buttonSort =
getLoc("table-sorting-external--button--sort");
+ private final String selectColumn =
getLoc("table-sorting-external--select--column");
+ private final String selectOrder =
getLoc("table-sorting-external--select--order");
+ private final String[] externalSortingColumns = StringUtils
+ .splitPreserveAllTokens(getMess("table-sorting-external--columns"),
+ '#');
+ private final String[] externalColumns = new String[] {
+ getLoc("table-sorting-external--cells--column1-preformatted"),
+ getLoc("table-sorting-external--cells--column2-preformatted"),
+ getLoc("table-sorting-external--cells--column3-preformatted") };
+
+ @Test
+ public void externalSortingTest() {
+ openPage("richfaces/sortingFeature.jsf?c=sorting&tab=ex-usage");
+
+ final int columns = externalSortingColumns.length;
+
+ for (int column = 0; column < columns; column++) {
+ String[] trio = StringUtils.splitPreserveAllTokens(
+ externalSortingColumns[column], '|');
+ selenium.select(format(selectColumn, trio[0]), trio[1]);
+ selenium.select(format(selectOrder, trio[0]), trio[2]);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(format("{0}/@disabled",
+ buttonSort));
+ }
+ });
+ }
+
+ String tableText = getTableText();
+ selenium.click(buttonSort);
+ waitForTextChanges(table, tableText);
+
+ checkSortingForColumnOrder(externalColumns);
+ }
+
+
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dragSupport/DragSupportTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dragSupport/DragSupportTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dragSupport/DragSupportTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,183 @@
+package org.jboss.richfaces.integrationTest.dragSupport;
+
+import java.util.regex.Pattern;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.actions.Drag;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class DragSupportTestCase extends AbstractSeleniumRichfacesTestCase {
+ {
+ // each test will be ran in separated browser session
+ setCleanSessionForEachMethod(true);
+ }
+
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/dragSupport.jsf?c=dragSupport&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("drag-support--header");
+ private String indicator = getLoc("drag-support--div--indicator");
+ private String classIndicator = getLoc("drag-support--class--indicator");
+ private String imageSourceIndicator =
getLoc("drag-support--image-source--indicator");
+ private String itemTexts = getMess("drag-support--text--items");
+ private String itemPattern = getLoc("drag-support--div--item");
+ private String targets = getLoc("drag-support--div--targets");
+ private String relativeFirstInsertedItem =
getLoc("drag-support--relative--first-inserted-item");
+ private String regexpMovingClass =
getMess("drag-support--regexp--moving--class");
+ private String regexpMovingImageSource =
getMess("drag-support--regexp--moving--image-source");
+ private String regexpAcceptingClass =
getMess("drag-support--regexp--accepting--class");
+ private String regexpAcceptingImageSource =
getMess("drag-support--regexp--accepting--image-source");
+ private String regexpRejectingClass =
getMess("drag-support--regexp--rejecting--class");
+ private String regexpRejectingImageSource =
getMess("drag-support--regexp--rejecting--image-source");
+
+ @Test
+ public void testMoving() {
+ accepting(0);
+ }
+
+ @Test
+ public void testAcceptingEnter() {
+ accepting(1);
+ }
+
+ @Test
+ public void testAcceptingDrop() {
+ accepting(2);
+ }
+
+ @Test
+ public void testRejectingEnter() {
+ rejecting(1);
+ }
+
+ @Test
+ public void testRejectingDrop() {
+ rejecting(2);
+ }
+
+ private void accepting(int phase) {
+ openPage();
+
+ String itemText = format(itemTexts, 1);
+ String item = format(itemPattern, itemText);
+ String target = format(targets, 1);
+
+ if (phase == 0) {
+ Assert.assertTrue(selenium.isElementPresent(indicator));
+ Assert.assertEquals("none", getStyle(indicator, "display"));
+ }
+
+ Drag drag = new Drag(selenium, item, target);
+
+ drag.move();
+
+ if (phase == 0) {
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "block".equals(getStyle(indicator, "display"));
+ }
+ });
+
+ Assert.assertTrue(Pattern.matches(regexpMovingClass, selenium
+ .getAttribute(classIndicator)));
+ Assert.assertTrue(Pattern.matches(regexpMovingImageSource, selenium
+ .getAttribute(imageSourceIndicator)));
+ }
+
+ drag.enter();
+
+ if (phase == 1) {
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "block".equals(getStyle(indicator, "display"));
+ }
+ });
+
+ Assert.assertEquals("block", getStyle(indicator, "display"));
+ Assert.assertTrue(Pattern.matches(regexpAcceptingClass, selenium
+ .getAttribute(classIndicator)));
+ Assert.assertTrue(Pattern.matches(regexpAcceptingImageSource,
+ selenium.getAttribute(imageSourceIndicator)));
+ }
+
+ String firstInsertedItem = format(relativeFirstInsertedItem, target);
+
+ if (phase == 2) {
+ Assert.assertFalse(selenium.isElementPresent(firstInsertedItem));
+ }
+
+ drag.drop();
+
+ if (phase == 2) {
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(indicator, "display"));
+ }
+ });
+
+ Assert.assertTrue(selenium.isElementPresent(firstInsertedItem));
+ Assert.assertFalse(selenium.isElementPresent(item));
+
+ String actual = selenium.getText(firstInsertedItem);
+ Assert.assertEquals(itemText, actual);
+ }
+ }
+
+ private void rejecting(int phase) {
+ openPage();
+
+ String itemText = format(itemTexts, 1);
+ String item = format(itemPattern, itemText);
+ String target = format(targets, 2);
+
+ Drag drag = new Drag(selenium, item, target);
+ drag.move();
+ drag.enter();
+
+ if (phase == 1) {
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "block".equals(getStyle(indicator, "display"));
+ }
+ });
+
+ Assert.assertTrue(Pattern.matches(regexpRejectingClass, selenium
+ .getAttribute(classIndicator)));
+ Assert.assertTrue(Pattern.matches(regexpRejectingImageSource,
+ selenium.getAttribute(imageSourceIndicator)));
+ }
+
+ String firstInsertedItem = format(relativeFirstInsertedItem, target);
+
+ if (phase == 2) {
+ Assert.assertFalse(selenium.isElementPresent(firstInsertedItem));
+ }
+
+ drag.drop();
+
+ if (phase == 2) {
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(indicator, "display"));
+ }
+ });
+
+ Assert.assertFalse(selenium.isElementPresent(firstInsertedItem));
+ Assert.assertTrue(selenium.isElementPresent(item));
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dropDownMenu/HorizontalMenuTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dropDownMenu/HorizontalMenuTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/dropDownMenu/HorizontalMenuTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,123 @@
+package org.jboss.richfaces.integrationTest.dropDownMenu;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class HorizontalMenuTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private String xpathPrefix;
+
+ @Test
+ public void testHorizontalMenu() {
+ xpathPrefix = "//fieldset[1]/div/form/table/tbody/tr/td[1]";
+
+ String text = selenium.getAttribute(xpathPrefix
+ + "/div/div[2]/div[1]@style");
+ assertTrue(text.contains("display: none;"),
+ "Menu should not be expanded at start.");
+
+ // FIXME menu does not show after click or fireEvent
+ // click on 'File'
+ // selenium.click(xpathPrefix + "/div/div[1]/img");
+ // selenium.fireEvent(xpathPrefix + "/div/div[1]/img", "click");
+ // waitFor(1000);
+ // text = selenium.getAttribute(xpathPrefix +
+ // "/div/div[2]/div[1]@style");
+ // System.out.println("------------- " + text + "
------------------");
+ // assertFalse(text.contains("display: none;"),
+ // "Menu should be expanded after clicking on File.");
+
+ // check that the 'Last Menu Action' is empty
+ text = selenium.getText("//fieldset[1]/div/span[1]/span[1]");
+ assertEquals(text, "", "Last menu action should be empty.");
+ }
+
+ @Test
+ public void testMenuItem() {
+ xpathPrefix =
"//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div[2]/div/div/div[1]";
+ String text = null;
+
+ selenium.click(xpathPrefix);
+ waitFor(400);
+
+ text = selenium.getText("//fieldset[1]/div/span/span");
+ assertEquals(text, "New", "Text shown in 'Current
Selection:'");
+ }
+
+ @Test
+ public void testMenuGroup() {
+ xpathPrefix =
"//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div[2]/div[2]/div/div[2]";
+ String text = null;
+
+ selenium.click(xpathPrefix);
+ waitFor(400);
+
+ text = selenium.getText("//fieldset[1]/div/span/span");
+ assertEquals(text, "Save All", "Text shown in 'Current
Selection:'");
+ }
+
+ @Test
+ public void testSeparator() {
+ xpathPrefix =
"//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div[2]/div[1]/div/div[5]";
+ String text = null;
+
+ text = selenium.getAttribute(xpathPrefix + "@class");
+ assertTrue(text.equals("rich-menu-separator"),
+ "There should be a separator in the menu.");
+ }
+
+ @Test
+ public void testIcon() {
+ xpathPrefix = "//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div[1]/img";
+
+ int width = selenium.getElementWidth(xpathPrefix).intValue();
+ int height = selenium.getElementHeight(xpathPrefix).intValue();
+
+ assertTrue(width > 0,
+ "Menu item 'File' should have a visible icon (width > 0).");
+ assertTrue(height > 0,
+ "Menu item 'File' should have a visible icon (height > 0).");
+ }
+
+ @Test
+ public void testLinkRFHomePage() {
+ xpathPrefix =
"//fieldset[1]/div/form/table/tbody/tr/td[2]/div/div[2]/div/div/div[1]/span[2]/a";
+
+ String location = selenium.getAttribute(xpathPrefix + "@href");
+ assertTrue(location.contains("http://"), "Href has to contain
http://");
+ }
+
+ @Test
+ public void testLinkRFForum() {
+ xpathPrefix =
"//fieldset[1]/div/form/table/tbody/tr/td[2]/div/div[2]/div/div/div[2]/span[2]/a";
+
+ String location = selenium.getAttribute(xpathPrefix + "@href");
+ assertTrue(location.contains("http://"), "Href has to contain
http://");
+ }
+
+ @Test
+ public void testListShuttleSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super
+ .loadPage(
+ "richMenu",
+ 2,
+ "RichFaces Drop Down menu is a component that allows to organize the
hierarchical menu");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/AdvancedEditorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/AdvancedEditorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/AdvancedEditorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,863 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.editor;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the advanced version of the editor.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class AdvancedEditorTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_STRINGS_SHOULD_BE_BOLD =
getMsg("STRINGS_SHOULD_BE_BOLD");
+ private final String MSG_STRINGS_SHOULD_BE_ITALIC =
getMsg("STRINGS_SHOULD_BE_ITALIC");
+ private final String MSG_STRINGS_SHOULD_BE_UNDERLINED =
getMsg("STRINGS_SHOULD_BE_UNDERLINED");
+ private final String MSG_STRINGS_SHOULD_HAVE_A_LINE_THROUGH =
getMsg("STRINGS_SHOULD_HAVE_A_LINE_THROUGH");
+ private final String MSG_CONTENT_OF_THE_EDITOR =
getMsg("CONTENT_OF_THE_EDITOR");
+ private final String MSG_EDITOR_SHOULD_CONTAIN_OL =
getMsg("EDITOR_SHOULD_CONTAIN_OL");
+ private final String MSG_EDITOR_SHOULD_CONTAIN_UL =
getMsg("EDITOR_SHOULD_CONTAIN_UL");
+ private final String MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH =
getMsg("TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH");
+ private final String MSG_TWO_LINES_IN_THE_EDITOR =
getMsg("TWO_LINES_IN_THE_EDITOR");
+ private final String MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS =
getMsg("LIST_SHOULD_CONTAIN_THREE_ITEMS");
+ private final String MSG_PARAGRAPH_ALIGNED_TO_THE_SIDE_S =
getMsg("PARAGRAPH_ALIGNED_TO_THE_SIDE_S");
+ private final String MSG_PARAGRAPH_JUSTIFIED =
getMsg("PARAGRAPH_JUSTIFIED");
+ private final String MSG_PARAGRAPH_SHOULD_HAVE_NO_STYLE =
getMsg("PARAGRAPH_SHOULD_HAVE_NO_STYLE");
+ private final String MSG_PARAGRAPHS_CLASS_ATTRIBUTE =
getMsg("PARAGRAPHS_CLASS_ATTRIBUTE");
+ private final String MSG_TAG_S_SHOULD_BE_IN_EDITOR =
getMsg("TAG_S_SHOULD_BE_IN_EDITOR");
+ private final String MSG_TAG_S_SHOULD_NOT_BE_IN_EDITOR =
getMsg("TAG_S_SHOULD_NOT_BE_IN_EDITOR");
+ private final String MSG_CONTENT_OF_TAG_S = getMsg("CONTENT_OF_TAG_S");
+ private final String MSG_PARAGRAPH_INDENTED_BY_N_PX =
getMsg("PARAGRAPH_INDENTED_BY_N_PX");
+ private final String MSG_NUMBER_OF_RULERS = getMsg("NUMBER_OF_RULERS");
+ private final String MSG_TEXT_IN_SUBSCRIPT = getMsg("TEXT_IN_SUBSCRIPT");
+ private final String MSG_TEXT_IN_SUPERSCRIPT =
getMsg("TEXT_IN_SUPERSCRIPT");
+ private final String MSG_LABEL_OF_LINK = getMsg("LABEL_OF_LINK");
+ private final String MSG_LINK_ATTRIBUTE_S = getMsg("LINK_ATTRIBUTE_S");
+ private final String MSG_CLASS_ATTRIBUTE = getMsg("CLASS_ATTRIBUTE");
+ private final String MSG_IMG_ATTRIBUTE_S = getMsg("IMG_ATTRIBUTE_S");
+
+ private final String LOC_ADVANCED_BUTTON = getLoc("ADVANCED_BUTTON");
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+
+ // editor
+ private final String LOC_TEXT_AREA = getLoc("TEXT_AREA");
+ private final String LOC_IFRAME = getLoc("IFRAME");
+ private final String LOC_ADV_DIALOG_IFRAME = getLoc("ADV_DIALOG_IFRAME");
+
+ private final String LOC_TEXT_AREA_P = getLoc("TEXT_AREA_P");
+ private final String LOC_TEXT_AREA_P_A = getLoc("TEXT_AREA_P_A");
+ private final String LOC_TEXT_AREA_P_IMG = getLoc("TEXT_AREA_P_IMG");
+ private final String LOC_TEXT_AREA_P_SPAN = getLoc("TEXT_AREA_P_SPAN");
+ private final String LOC_TEXT_AREA_P_HR = getLoc("TEXT_AREA_P_HR");
+ private final String LOC_TEXT_AREA_P_SUB = getLoc("TEXT_AREA_P_SUB");
+ private final String LOC_TEXT_AREA_P_SUP = getLoc("TEXT_AREA_P_SUP");
+ private final String LOC_TEXT_AREA_P2 = getLoc("TEXT_AREA_P2");
+ private final String LOC_TEXT_AREA_P2_B = getLoc("TEXT_AREA_P2_B");
+ private final String LOC_TEXT_AREA_P2_I = getLoc("TEXT_AREA_P2_I");
+ private final String LOC_TEXT_AREA_P2_U = getLoc("TEXT_AREA_P2_U");
+ private final String LOC_TEXT_AREA_P2_STRIKE =
getLoc("TEXT_AREA_P2_STRIKE");
+ private final String LOC_TEXT_AREA_OL = getLoc("TEXT_AREA_OL");
+ private final String LOC_TEXT_AREA_OL_LI = getLoc("TEXT_AREA_OL_LI");
+ private final String LOC_TEXT_AREA_UL = getLoc("TEXT_AREA_UL");
+ private final String LOC_TEXT_AREA_UL_LI = getLoc("TEXT_AREA_UL_LI");
+ private final String LOC_TEXT_AREA_ADDRESS = getLoc("TEXT_AREA_ADDRESS");
+ private final String LOC_TEXT_AREA_PRE = getLoc("TEXT_AREA_PRE");
+ private final String LOC_TEXT_AREA_HN = getLoc("TEXT_AREA_HN");
+
+ // simple editor buttons
+ private final String LOC_BOLD_BUTTON = getLoc("BOLD_BUTTON");
+ private final String LOC_ITALIC_BUTTON = getLoc("ITALIC_BUTTON");
+ private final String LOC_UNDERLINE_BUTTON = getLoc("UNDERLINE_BUTTON");
+ private final String LOC_STRIKETHROUGH_BUTTON =
getLoc("STRIKETHROUGH_BUTTON");
+ private final String LOC_UNDO_BUTTON = getLoc("UNDO_BUTTON");
+ private final String LOC_REDO_BUTTON = getLoc("REDO_BUTTON");
+
+ // advanced editor buttons
+ private final String LOC_ADV_UNORDERED_LIST_BUTTON =
getLoc("ADV_UNORDERED_LIST_BUTTON");
+ private final String LOC_ADV_ORDERED_LIST_BUTTON =
getLoc("ADV_ORDERED_LIST_BUTTON");
+ private final String LOC_ADV_ALIGN_LEFT_BUTTON =
getLoc("ADV_ALIGN_LEFT_BUTTON");
+ private final String LOC_ADV_ALIGN_RIGHT_BUTTON =
getLoc("ADV_ALIGN_RIGHT_BUTTON");
+ private final String LOC_ADV_ALIGN_CENTER_BUTTON =
getLoc("ADV_ALIGN_CENTER_BUTTON");
+ private final String LOC_ADV_ALIGN_FULL_BUTTON =
getLoc("ADV_ALIGN_FULL_BUTTON");
+ private final String LOC_ADV_STYLE_SELECT_BUTTON =
getLoc("ADV_STYLE_SELECT_BUTTON");
+ private final String LOC_ADV_FORMAT_SELECT_BUTTON =
getLoc("ADV_FORMAT_SELECT_BUTTON");
+ private final String LOC_ADV_STYLE_N = getLoc("ADV_STYLE_N");
+ private final String LOC_ADV_FORMAT_N = getLoc("ADV_FORMAT_N");
+ private final String LOC_ADV_INDENT_BUTTON = getLoc("ADV_INDENT_BUTTON");
+ private final String LOC_ADV_OUTDENT_BUTTON =
getLoc("ADV_OUTDENT_BUTTON");
+ private final String LOC_ADV_HORIZONTAL_RULER_BUTTON =
getLoc("ADV_HORIZONTAL_RULER_BUTTON");
+ private final String LOC_ADV_REMOVE_FORMATTING_BUTTON =
getLoc("ADV_REMOVE_FORMATTING_BUTTON");
+ private final String LOC_ADV_SUBSCRIPT_BUTTON =
getLoc("ADV_SUBSCRIPT_BUTTON");
+ private final String LOC_ADV_SUPERSCRIPT_BUTTON =
getLoc("ADV_SUPERSCRIPT_BUTTON");
+ private final String LOC_ADV_LINK_DLG_URL = getLoc("ADV_LINK_DLG_URL");
+ private final String LOC_ADV_LINK_DLG_TARGET_N =
getLoc("ADV_LINK_DLG_TARGET_N");
+ private final String LOC_ADV_LINK_DLG_TITLE =
getLoc("ADV_LINK_DLG_TITLE");
+ private final String LOC_ADV_LINK_DLG_CLASS_N =
getLoc("ADV_LINK_DLG_CLASS_N");
+ private final String LOC_ADV_LINK_DLG_UPDATE =
getLoc("ADV_LINK_DLG_UPDATE");
+ private final String LOC_ADV_LINK_BUTTON = getLoc("ADV_LINK_BUTTON");
+ private final String LOC_ADV_UNLINK_BUTTON = getLoc("ADV_UNLINK_BUTTON");
+ private final String LOC_ADV_TOGGLE_INVISIBLE_BUTTON =
getLoc("ADV_TOGGLE_INVISIBLE_BUTTON");
+ private final String LOC_ADV_ANCHOR_BUTTON = getLoc("ADV_ANCHOR_BUTTON");
+ private final String LOC_ADV_ANCHOR_DLG_NAME =
getLoc("ADV_ANCHOR_DLG_NAME");
+ private final String LOC_ADV_ANCHOR_DLG_INSERT_BUTTON =
getLoc("ADV_ANCHOR_DLG_INSERT_BUTTON");
+ private final String LOC_ADV_IMAGE_BUTTON = getLoc("ADV_IMAGE_BUTTON");
+ private final String LOC_ADV_IMAGE_DLG_URL = getLoc("ADV_IMAGE_DLG_URL");
+ private final String LOC_ADV_IMAGE_DLG_DESCRIPTION =
getLoc("ADV_IMAGE_DLG_DESCRIPTION");
+ private final String LOC_ADV_IMAGE_DLG_ALIGNMENT =
getLoc("ADV_IMAGE_DLG_ALIGNMENT");
+ private final String LOC_ADV_IMAGE_DLG_WIDTH =
getLoc("ADV_IMAGE_DLG_WIDTH");
+ private final String LOC_ADV_IMAGE_DLG_HEIGHT =
getLoc("ADV_IMAGE_DLG_HEIGHT");
+ private final String LOC_ADV_IMAGE_DLG_BORDER =
getLoc("ADV_IMAGE_DLG_BORDER");
+ private final String LOC_ADV_IMAGE_DLG_VSPACE =
getLoc("ADV_IMAGE_DLG_VSPACE");
+ private final String LOC_ADV_IMAGE_DLG_HSPACE =
getLoc("ADV_IMAGE_DLG_HSPACE");
+ private final String LOC_ADV_IMAGE_DLG_INSERT_BUTTON =
getLoc("ADV_IMAGE_DLG_INSERT_BUTTON");
+ private final String LOC_ADV_CUSTOM_CHAR_BUTTON =
getLoc("ADV_CUSTOM_CHAR_BUTTON");
+ private final String LOC_ADV_CUSTOM_CHAR_DLG_M_N =
getLoc("ADV_CUSTOM_CHAR_DLG_M_N");
+
+ /**
+ * Tests the bold button. It types "aaaa", presses enter followed by the
+ * bold button, and types "bbbb ". Then again bold button, "cccc
", bold
+ * button and "dddd ". Then it checks that the editor's text area
contains
+ * the entered text. After that, it checks that there are two lines of text
+ * in the editor and that the second line contains two bold strings.
+ */
+ @Test
+ public void testBoldButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // bold text
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // bold text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_B).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_BOLD);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the italic button. It types "aaaa", presses enter followed by the
+ * italic button, and types "bbbb ". Then again italic button, "cccc
",
+ * italic button and "dddd ". Then it checks that the editor's text
area
+ * contains the entered text. After that, it checks that there are two lines
+ * of text in the editor and that the second line contains two italic
+ * strings.
+ */
+ @Test
+ public void testItalicButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // italic text
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // italic text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_I).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_ITALIC);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the underline button. It types "aaaa", presses enter followed by
+ * the underline button, and types "bbbb ". Then again underline button,
+ * "cccc ", underline button and "dddd ". Then it checks that the
editor's
+ * text area contains the entered text. After that, it checks that there are
+ * two lines of text in the editor and that the second line contains two
+ * underlined strings.
+ */
+ @Test
+ public void testUnderlineButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // underlined text
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // underlined text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_U).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_UNDERLINED);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the strikethrough button. It types "aaaa", presses enter followed
+ * by the strikethrough button, and types "bbbb ". Then again
strikethrough
+ * button, "cccc ", strikethrough button and "dddd ". Then it
checks that
+ * the editor's text area contains the entered text. After that, it checks
+ * that there are two lines of text in the editor and that the second line
+ * contains two strings having a line through.
+ */
+ @Test
+ public void testStrikethroughButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // text with line through
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // text with line through
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_STRIKE).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_HAVE_A_LINE_THROUGH);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests both the undo and redo buttons. It types into text area, checks the
+ * content of the editor, reverts changes by clicking on the undo button,
+ * and checks the content of the editor again. Then, it clicks on the redo
+ * button and checks the text area.
+ */
+ @Test
+ public void testUndoRedo() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaabbbb");
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaabbbb", MSG_CONTENT_OF_THE_EDITOR);
+
+ // small hack to enable the undo button
+ selenium.click(LOC_UNDO_BUTTON);
+ selenium.click(LOC_TEXT_AREA);
+
+ selenium.click(LOC_UNDO_BUTTON);
+
+ text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "", MSG_CONTENT_OF_THE_EDITOR);
+
+ selenium.click(LOC_REDO_BUTTON);
+ text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaabbbb", MSG_CONTENT_OF_THE_EDITOR);
+ }
+
+ /**
+ * Tests the unordered list button. It types a normal string, then clicks on
+ * the unordered list button, types three strings, clicks on the unordered
+ * list button, and types one more string. Then it checks that the text area
+ * contains all strings, then checks that there are two paragraphs, presence
+ * of unordered list, and the number of list's items.
+ */
+ @Test
+ public void testUnorderedList() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_ADV_UNORDERED_LIST_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.click(LOC_ADV_UNORDERED_LIST_BUTTON);
+
+ selenium.typeKeys(LOC_TEXT_AREA, "eeee");
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbbccccddddeeee",
MSG_CONTENT_OF_THE_EDITOR);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH);
+
+ boolean isPresent = selenium.isElementPresent(LOC_TEXT_AREA_UL);
+ assertTrue(isPresent, MSG_EDITOR_SHOULD_CONTAIN_UL);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_UL_LI).intValue();
+ assertEquals(count, 3, MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the ordered list button. It types a normal string, then clicks on
+ * the ordered list button, types three strings, clicks on the ordered list
+ * button, and types one more string. Then it checks that the text area
+ * contains all strings, then checks that there are two paragraphs, presence
+ * of ordered list, and the number of list's items.
+ */
+ @Test
+ public void testOrderedList() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_ADV_ORDERED_LIST_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.click(LOC_ADV_ORDERED_LIST_BUTTON);
+
+ selenium.typeKeys(LOC_TEXT_AREA, "eeee");
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbbccccddddeeee",
MSG_CONTENT_OF_THE_EDITOR);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH);
+
+ boolean isPresent = selenium.isElementPresent(LOC_TEXT_AREA_OL);
+ assertTrue(isPresent, MSG_EDITOR_SHOULD_CONTAIN_OL);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_OL_LI).intValue();
+ assertEquals(count, 3, MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests aligning paragraphs. First it types long text into editor, then it
+ * checks the style attribute of the paragraph. Then it tries to align the
+ * paragraph to the left, right, center and justify it.
+ */
+ @Test
+ public void testAlignParagraph() {
+ for (int i = 0; i < 5; i++) {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa bbb ccc ddd eee fff ggg ");
+ }
+
+ String attr = null;
+ try {
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ fail(MSG_PARAGRAPH_SHOULD_HAVE_NO_STYLE);
+ } catch (Exception e) {
+ // OK - there is no attribute
+ }
+
+ selenium.click(LOC_ADV_ALIGN_LEFT_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "text-align: left;",
String.format(MSG_PARAGRAPH_ALIGNED_TO_THE_SIDE_S, "left"));
+
+ selenium.click(LOC_ADV_ALIGN_RIGHT_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "text-align: right;",
String.format(MSG_PARAGRAPH_ALIGNED_TO_THE_SIDE_S, "right"));
+
+ selenium.click(LOC_ADV_ALIGN_CENTER_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "text-align: center;",
String.format(MSG_PARAGRAPH_ALIGNED_TO_THE_SIDE_S, "center"));
+
+ selenium.click(LOC_ADV_ALIGN_FULL_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "text-align: justify;", MSG_PARAGRAPH_JUSTIFIED);
+ }
+
+ /**
+ * Tests all styles of the text. It goes through all options from the Styles
+ * select.
+ */
+ @Test
+ public void testStyles() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa bbb ccc ddd eee fff ggg");
+
+ String attr = null;
+ try {
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ fail(MSG_PARAGRAPH_SHOULD_HAVE_NO_STYLE);
+ } catch (Exception e) {
+ // OK - there is no attribute
+ }
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 2));
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ assertEquals(attr, "bold-larger", MSG_PARAGRAPHS_CLASS_ATTRIBUTE);
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 3));
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ assertEquals(attr, "bold-smaller", MSG_PARAGRAPHS_CLASS_ATTRIBUTE);
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 4));
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ assertEquals(attr, "red-bold", MSG_PARAGRAPHS_CLASS_ATTRIBUTE);
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 5));
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ assertEquals(attr, "red-bold-larger", MSG_PARAGRAPHS_CLASS_ATTRIBUTE);
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 6));
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ assertEquals(attr, "red-bold-smaller",
MSG_PARAGRAPHS_CLASS_ATTRIBUTE);
+
+ selenium.click(LOC_ADV_STYLE_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_STYLE_N, 1));
+ try {
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@class");
+ fail(MSG_PARAGRAPH_SHOULD_HAVE_NO_STYLE);
+ } catch (Exception e) {
+ // OK - there is no attribute
+ }
+ }
+
+ /**
+ * Tests various formats of the paragraph. It goes through all options from
+ * Format select.
+ */
+ @Test
+ public void testFormat() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa bbb ccc ddd eee fff ggg");
+
+ // initial state
+ selenium.selectFrame(LOC_IFRAME);
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"p"));
+ String text = selenium.getText(LOC_TEXT_AREA_P);
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "p"));
+ selenium.selectFrame("relative=top");
+
+ // address
+ selenium.click(LOC_ADV_FORMAT_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_FORMAT_N, 3));
+ selenium.selectFrame(LOC_IFRAME);
+ count = selenium.getXpathCount(LOC_TEXT_AREA_ADDRESS).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"address"));
+ text = selenium.getText(LOC_TEXT_AREA_ADDRESS);
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "address"));
+ selenium.selectFrame("relative=top");
+
+ // paragraph
+ selenium.click(LOC_ADV_FORMAT_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_FORMAT_N, 2));
+ selenium.selectFrame(LOC_IFRAME);
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"p"));
+ text = selenium.getText(LOC_TEXT_AREA_P);
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "p"));
+ selenium.selectFrame("relative=top");
+
+ // preformatted
+ selenium.click(LOC_ADV_FORMAT_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_FORMAT_N, 4));
+ selenium.selectFrame(LOC_IFRAME);
+ count = selenium.getXpathCount(LOC_TEXT_AREA_PRE).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"pre"));
+ text = selenium.getText(LOC_TEXT_AREA_PRE);
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "pre"));
+ selenium.selectFrame("relative=top");
+
+ // change back to the initial state by clicking on "Format"
+ selenium.click(LOC_ADV_FORMAT_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_FORMAT_N, 1));
+ selenium.selectFrame(LOC_IFRAME);
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"p"));
+ text = selenium.getText(LOC_TEXT_AREA_P);
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "p"));
+ selenium.selectFrame("relative=top");
+
+ // heading 1-6
+ for (int i = 1; i < 7; i++) {
+ selenium.click(LOC_ADV_FORMAT_SELECT_BUTTON);
+ selenium.click(String.format(LOC_ADV_FORMAT_N, 4 + i));
+ selenium.selectFrame(LOC_IFRAME);
+ count = selenium.getXpathCount(String.format(LOC_TEXT_AREA_HN,
i)).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"h" + i));
+ text = selenium.getText(String.format(LOC_TEXT_AREA_HN, i));
+ assertEquals(text, "aaa bbb ccc ddd eee fff ggg",
String.format(MSG_CONTENT_OF_TAG_S, "h" + i));
+ selenium.selectFrame("relative=top");
+ }
+ }
+
+ /**
+ * Tests indenting and outdenting. It click the indent button and checks
+ * indenting. Then it clicks it second time and again checks the style
+ * attribute. Then it outdents the paragraph twice and checks the padding
+ * after each click.
+ */
+ @Test
+ public void testIndentOutdent() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa bbb ccc ddd eee fff ggg");
+
+ selenium.click(LOC_ADV_INDENT_BUTTON);
+ String attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "padding-left: 30px;",
String.format(MSG_PARAGRAPH_INDENTED_BY_N_PX, 30));
+
+ selenium.click(LOC_ADV_INDENT_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "padding-left: 60px;",
String.format(MSG_PARAGRAPH_INDENTED_BY_N_PX, 60));
+
+ selenium.click(LOC_ADV_OUTDENT_BUTTON);
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ assertEquals(attr, "padding-left: 30px;",
String.format(MSG_PARAGRAPH_INDENTED_BY_N_PX, 30));
+
+ selenium.click(LOC_ADV_OUTDENT_BUTTON);
+ try {
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P + "@style");
+ fail(String.format(MSG_PARAGRAPH_INDENTED_BY_N_PX, 0));
+ } catch (Exception e) {
+ // OK - no attribute
+ }
+ }
+
+ /**
+ * Tests inserting horizontal lines. First it clicks on ruler button three
+ * times. Then it checks that there are 3 rulers in the editor.
+ */
+ @Test
+ public void testInsertHorizontalRuler() {
+ selenium.click(LOC_ADV_HORIZONTAL_RULER_BUTTON);
+ selenium.click(LOC_ADV_HORIZONTAL_RULER_BUTTON);
+ selenium.click(LOC_ADV_HORIZONTAL_RULER_BUTTON);
+
+ selenium.selectFrame(LOC_IFRAME);
+
+ Wait.failWith(MSG_NUMBER_OF_RULERS).interval(3000).until(new Condition() {
+ public boolean isTrue() {
+ return selenium.getXpathCount(LOC_TEXT_AREA_P_HR).intValue() == 3;
+ }
+ });
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests removing formatting from selected text. First it types two lines of
+ * text, from which the second is in bold. Then it presses Ctrl+A to select
+ * the content of the editor and clicks the "Remove formatting" button.
Then
+ * it checks that formatting was removed.
+ */
+ @Test
+ public void testRemoveFormatting() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbb");
+
+ selenium.selectFrame(LOC_IFRAME);
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P2_B).intValue();
+ assertEquals(count, 1, String.format(MSG_TAG_S_SHOULD_BE_IN_EDITOR,
"b"));
+ String text = selenium.getText(LOC_TEXT_AREA_P2_B);
+ assertEquals(text, "bbb", String.format(MSG_CONTENT_OF_TAG_S,
"b"));
+
+ // press Ctrl+A to select content of the editor
+ selenium.controlKeyDown();
+ selenium.keyPress("//body", "a");
+ selenium.controlKeyUp();
+
+ selenium.selectFrame("relative=top");
+ selenium.click(LOC_ADV_REMOVE_FORMATTING_BUTTON);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_B).intValue();
+ assertEquals(count, 0, String.format(MSG_TAG_S_SHOULD_NOT_BE_IN_EDITOR,
"b"));
+ text = selenium.getText(LOC_TEXT_AREA_P2);
+ assertEquals(text, "bbb", String.format(MSG_CONTENT_OF_TAG_S,
"b"));
+ }
+
+ /**
+ * Test subscript and superscript. First it types a string containg normal
+ * font, subscript, and superscript. Then it verifies that the editor
+ * contains whole string and checks the subscript and superscript part.
+ */
+ @Test
+ public void testSubscriptSuperscript() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa"); // normal
+ selenium.click(LOC_ADV_SUBSCRIPT_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbb"); // subscript
+ selenium.click(LOC_ADV_SUBSCRIPT_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "ccc"); // normal
+ selenium.click(LOC_ADV_SUPERSCRIPT_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "ddd"); // superscript
+ selenium.click(LOC_ADV_SUPERSCRIPT_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "eee"); // normal
+
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA_P);
+ assertEquals(text, "aaabbbcccdddeee", MSG_CONTENT_OF_THE_EDITOR);
+
+ text = selenium.getText(LOC_TEXT_AREA_P_SUB);
+ assertEquals(text, "bbb", MSG_TEXT_IN_SUBSCRIPT);
+
+ text = selenium.getText(LOC_TEXT_AREA_P_SUP);
+ assertEquals(text, "ddd", MSG_TEXT_IN_SUPERSCRIPT);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests inserting link and unlinking. First it types "aaa" into editor,
+ * presses Ctrl+A to select the text and makes a link from this string. Then
+ * it checks that proper tag with all settings was generated.
+ */
+ @Test
+ public void testInsertLinkUnlink() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaa");
+
+ // press Ctrl+A to select content of the editor
+ // XXX why is it necessary to do it twice - a bug in Selenium?
+ selenium.click(LOC_TEXT_AREA_P);
+ selenium.controlKeyDown();
+ selenium.keyPress("//body", "a");
+ selenium.controlKeyUp();
+ selenium.click(LOC_TEXT_AREA_P);
+ selenium.controlKeyDown();
+ selenium.keyPress("//body", "a");
+ selenium.controlKeyUp();
+
+ waitForElement(LOC_ADV_LINK_BUTTON);
+ selenium.click(LOC_ADV_LINK_BUTTON);
+
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+
+ waitForElement(LOC_ADV_LINK_DLG_URL);
+ selenium.type(LOC_ADV_LINK_DLG_URL, "http://www.redhat.com");
+ selenium.select(LOC_ADV_LINK_DLG_TARGET_N, "Open link in a new
window");
+ selenium.type(LOC_ADV_LINK_DLG_TITLE, "title title");
+ selenium.select(LOC_ADV_LINK_DLG_CLASS_N, "red-bold");
+ selenium.click(LOC_ADV_LINK_DLG_UPDATE);
+
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA_P_A);
+ assertEquals(text, "aaa", MSG_LABEL_OF_LINK);
+ text = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@class");
+ assertEquals(text, "red-bold", String.format(MSG_LINK_ATTRIBUTE_S,
"class"));
+ text = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@href");
+ assertEquals(text, "http://www.redhat.com",
String.format(MSG_LINK_ATTRIBUTE_S, "href"));
+ text = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@title");
+ assertEquals(text, "title title", String.format(MSG_LINK_ATTRIBUTE_S,
"title"));
+ text = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@target");
+ assertEquals(text, "_blank", String.format(MSG_LINK_ATTRIBUTE_S,
"target"));
+
+ selenium.selectFrame("relative=top");
+
+ // press Ctrl+A to select content of the editor
+ selenium.click(LOC_TEXT_AREA_P);
+ selenium.controlKeyDown();
+ selenium.keyPress("//body", "a");
+ selenium.controlKeyUp();
+ selenium.click(LOC_TEXT_AREA_P);
+ selenium.controlKeyDown();
+ selenium.keyPress("//body", "a");
+ selenium.controlKeyUp();
+
+ selenium.click(LOC_ADV_UNLINK_BUTTON);
+
+ selenium.selectFrame(LOC_IFRAME);
+
+ text = selenium.getText(LOC_TEXT_AREA_P_SPAN);
+ assertEquals(text, "aaa", String.format(MSG_CONTENT_OF_TAG_S,
"span"));
+ text = selenium.getAttribute(LOC_TEXT_AREA_P_SPAN + "@class");
+ assertEquals(text, "red-bold", MSG_CLASS_ATTRIBUTE);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests inserting an anchor and hiding it in the editor.
+ */
+ @Test
+ public void testToggleInvisibleElementsAndAnchor() {
+ selenium.click(LOC_ADV_ANCHOR_BUTTON);
+
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+
+ selenium.type(LOC_ADV_ANCHOR_DLG_NAME, "aaa");
+ selenium.click(LOC_ADV_ANCHOR_DLG_INSERT_BUTTON);
+
+ String attr = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@name");
+ assertEquals(attr, "aaa", String.format(MSG_LINK_ATTRIBUTE_S,
"name"));
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@class");
+ assertEquals(attr, "mceItemAnchor", String.format(MSG_LINK_ATTRIBUTE_S,
"class"));
+
+ selenium.click(LOC_ADV_TOGGLE_INVISIBLE_BUTTON);
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@name");
+ assertEquals(attr, "aaa", String.format(MSG_LINK_ATTRIBUTE_S,
"name"));
+
+ try {
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_A + "@class");
+ fail(String.format(MSG_LINK_ATTRIBUTE_S, "class"));
+ } catch (Exception e) {
+ // OK -- there is no class attribute
+ }
+ }
+
+ /**
+ * Tests inserting an image into editor. It tries to insert the "Editor"
+ * image that is on the page. It sets the URL, alternative text, alignment,
+ * width, height, border, vertical space, and horizontal space.
+ */
+ @Test
+ public void testInsertImage() {
+ selenium.click(LOC_ADV_IMAGE_BUTTON);
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+
+ int index = selenium.getLocation().indexOf('/', 7);
+ String url = selenium.getLocation().substring(0, index);
+ url += "/richfaces-demo/images/cn_Editor.gif";
+
+ selenium.type(LOC_ADV_IMAGE_DLG_URL, url);
+ selenium.type(LOC_ADV_IMAGE_DLG_DESCRIPTION, "Editor");
+ selenium.select(LOC_ADV_IMAGE_DLG_ALIGNMENT, "Right");
+ selenium.type(LOC_ADV_IMAGE_DLG_WIDTH, "192");
+ selenium.type(LOC_ADV_IMAGE_DLG_HEIGHT, "62");
+ selenium.type(LOC_ADV_IMAGE_DLG_BORDER, "3");
+ selenium.type(LOC_ADV_IMAGE_DLG_VSPACE, "10");
+ selenium.type(LOC_ADV_IMAGE_DLG_HSPACE, "8");
+
+ selenium.click(LOC_ADV_IMAGE_DLG_INSERT_BUTTON);
+
+ waitForElement(LOC_TEXT_AREA_P_IMG);
+ String attr = selenium.getAttribute(LOC_TEXT_AREA_P_IMG + "@src");
+ assertEquals(attr, "../images/cn_Editor.gif",
String.format(MSG_IMG_ATTRIBUTE_S, "src"));
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_IMG + "@alt");
+ assertEquals(attr, "Editor", String.format(MSG_IMG_ATTRIBUTE_S,
"alt"));
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_IMG + "@style");
+ assertTrue(attr.contains("float: right;"),
String.format(MSG_IMG_ATTRIBUTE_S, "style"));
+ assertTrue(attr.contains("border: 3px solid black;"),
String.format(MSG_IMG_ATTRIBUTE_S, "style"));
+ assertTrue(attr.contains("margin: 10px 8px"),
String.format(MSG_IMG_ATTRIBUTE_S, "style"));
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_IMG + "@width");
+ assertEquals(attr, "192", String.format(MSG_IMG_ATTRIBUTE_S,
"width"));
+
+ attr = selenium.getAttribute(LOC_TEXT_AREA_P_IMG + "@height");
+ assertEquals(attr, "62", String.format(MSG_IMG_ATTRIBUTE_S,
"height"));
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests inserting custom character. It tries to insert euro sign, upper
+ * case omega, and a symbol for heart suite.
+ */
+ @Test
+ public void testInsertCustomCharacter() {
+ selenium.click(LOC_ADV_CUSTOM_CHAR_BUTTON);
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+ waitForElement(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 1, 5));
+ // euro sign
+ selenium.click(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 1, 5));
+
+ selenium.click(LOC_ADV_CUSTOM_CHAR_BUTTON);
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+ waitForElement(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 9, 5));
+ // Omega
+ selenium.click(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 9, 5));
+
+ selenium.click(LOC_ADV_CUSTOM_CHAR_BUTTON);
+ waitForElement(LOC_ADV_DIALOG_IFRAME);
+ selenium.selectFrame(LOC_ADV_DIALOG_IFRAME);
+ waitForElement(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 10, 18));
+ // heart suite
+ selenium.click(String.format(LOC_ADV_CUSTOM_CHAR_DLG_M_N, 10, 18));
+
+ String text = selenium.getText(LOC_TEXT_AREA_P);
+ assertEquals(text, "€Ω♥", MSG_CONTENT_OF_THE_EDITOR);
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Editor");
+
+ // wait for iframe to load
+ selenium.click(LOC_ADVANCED_BUTTON);
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return selenium.isElementPresent(LOC_ADV_ANCHOR_BUTTON);
+ }
+ });
+
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/AdvancedEditorTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/SimpleEditorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/SimpleEditorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/SimpleEditorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,320 @@
+package org.jboss.richfaces.integrationTest.editor;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the editor component.
+ * <ul>
+ * <li><b>TODO</b> implement the test for cleaning up</li>
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SimpleEditorTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_STRINGS_SHOULD_BE_BOLD =
getMess("STRINGS_SHOULD_BE_BOLD");
+ private final String MSG_STRINGS_SHOULD_BE_ITALIC =
getMess("STRINGS_SHOULD_BE_ITALIC");
+ private final String MSG_STRINGS_SHOULD_BE_UNDERLINED =
getMess("STRINGS_SHOULD_BE_UNDERLINED");
+ private final String MSG_STRINGS_SHOULD_HAVE_A_LINE_THROUGH =
getMess("STRINGS_SHOULD_HAVE_A_LINE_THROUGH");
+ private final String MSG_CONTENT_OF_THE_EDITOR =
getMess("CONTENT_OF_THE_EDITOR");
+ private final String MSG_EDITOR_SHOULD_CONTAIN_OL =
getMess("EDITOR_SHOULD_CONTAIN_OL");
+ private final String MSG_EDITOR_SHOULD_CONTAIN_UL =
getMess("EDITOR_SHOULD_CONTAIN_UL");
+ private final String MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH =
getMess("TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH");
+ private final String MSG_TWO_LINES_IN_THE_EDITOR =
getMess("TWO_LINES_IN_THE_EDITOR");
+ private final String MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS =
getMess("LIST_SHOULD_CONTAIN_THREE_ITEMS");
+
+ // editor
+ private final String LOC_TEXT_AREA = getLoc("TEXT_AREA");
+ private final String LOC_IFRAME = getLoc("IFRAME");
+ private final String LOC_TEXT_AREA_P = getLoc("TEXT_AREA_P");
+ private final String LOC_TEXT_AREA_P2_B = getLoc("TEXT_AREA_P2_B");
+ private final String LOC_TEXT_AREA_P2_I = getLoc("TEXT_AREA_P2_I");
+ private final String LOC_TEXT_AREA_P2_U = getLoc("TEXT_AREA_P2_U");
+ private final String LOC_TEXT_AREA_P2_STRIKE = getLoc("TEXT_AREA_P2_STRIKE");
+ private final String LOC_TEXT_AREA_OL = getLoc("TEXT_AREA_OL");
+ private final String LOC_TEXT_AREA_OL_LI = getLoc("TEXT_AREA_OL_LI");
+ private final String LOC_TEXT_AREA_UL = getLoc("TEXT_AREA_UL");
+ private final String LOC_TEXT_AREA_UL_LI = getLoc("TEXT_AREA_UL_LI");
+
+ // buttons in simple mode
+ private final String LOC_BOLD_BUTTON = getLoc("BOLD_BUTTON");
+ private final String LOC_ITALIC_BUTTON = getLoc("ITALIC_BUTTON");
+ private final String LOC_UNDERLINE_BUTTON = getLoc("UNDERLINE_BUTTON");
+ private final String LOC_STRIKETHROUGH_BUTTON =
getLoc("STRIKETHROUGH_BUTTON");
+ private final String LOC_UNDO_BUTTON = getLoc("UNDO_BUTTON");
+ private final String LOC_REDO_BUTTON = getLoc("REDO_BUTTON");
+ private final String LOC_UNORDERED_LIST_BUTTON =
getLoc("UNORDERED_LIST_BUTTON");
+ private final String LOC_ORDERED_LIST_BUTTON = getLoc("ORDERED_LIST_BUTTON");
+
+ /**
+ * Tests the bold button. It types "aaaa", presses enter followed by the
+ * bold button, and types "bbbb ". Then again bold button, "cccc ",
bold
+ * button and "dddd ". Then it checks that the editor's text area
contains
+ * the entered text. After that, it checks that there are two lines of text
+ * in the editor and that the second line contains two bold strings.
+ */
+ @Test
+ public void testBoldButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // bold text
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_BOLD_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // bold text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_B).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_BOLD);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the italic button. It types "aaaa", presses enter followed by the
+ * italic button, and types "bbbb ". Then again italic button, "cccc
",
+ * italic button and "dddd ". Then it checks that the editor's text area
+ * contains the entered text. After that, it checks that there are two lines
+ * of text in the editor and that the second line contains two italic
+ * strings.
+ */
+ @Test
+ public void testItalicButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // italic text
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_ITALIC_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // italic text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_I).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_ITALIC);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the underline button. It types "aaaa", presses enter followed by
+ * the underline button, and types "bbbb ". Then again underline button,
+ * "cccc ", underline button and "dddd ". Then it checks that the
editor's
+ * text area contains the entered text. After that, it checks that there are
+ * two lines of text in the editor and that the second line contains two
+ * underlined strings.
+ */
+ @Test
+ public void testUnderlineButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // underlined text
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_UNDERLINE_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // underlined text
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_U).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_BE_UNDERLINED);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the strikethrough button. It types "aaaa", presses enter followed
+ * by the strikethrough button, and types "bbbb ". Then again strikethrough
+ * button, "cccc ", strikethrough button and "dddd ". Then it checks
that
+ * the editor's text area contains the entered text. After that, it checks
+ * that there are two lines of text in the editor and that the second line
+ * contains two strings having a line through.
+ */
+ @Test
+ public void testStrikethroughButton() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa"); // normal text
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb "); // text with line through
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc "); // normal text
+ selenium.click(LOC_STRIKETHROUGH_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd "); // text with line through
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbb cccc dddd", MSG_CONTENT_OF_THE_EDITOR);
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_IN_THE_EDITOR);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_P2_STRIKE).intValue();
+ assertEquals(count, 2, MSG_STRINGS_SHOULD_HAVE_A_LINE_THROUGH);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests both the undo and redo buttons. It types into text area, checks the
+ * content of the editor, reverts changes by clicking on the undo button,
+ * and checks the content of the editor again. Then, it clicks on the redo
+ * button and checks the text area.
+ */
+ @Test
+ public void testUndoRedo() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaabbbb");
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaabbbb", MSG_CONTENT_OF_THE_EDITOR);
+
+ selenium.click(LOC_UNDO_BUTTON);
+ text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "", MSG_CONTENT_OF_THE_EDITOR);
+
+ selenium.click(LOC_REDO_BUTTON);
+ text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaabbbb", MSG_CONTENT_OF_THE_EDITOR);
+ }
+
+ /**
+ * Tests the unordered list button. It types a normal string, then clicks on
+ * the unordered list button, types three strings, clicks on the unordered
+ * list button, and types one more string. Then it checks that the text area
+ * contains all strings, then checks that there are two paragraphs, presence
+ * of unordered list, and the number of list's items.
+ */
+ @Test
+ public void testUnorderedList() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_UNORDERED_LIST_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.click(LOC_UNORDERED_LIST_BUTTON);
+
+ selenium.typeKeys(LOC_TEXT_AREA, "eeee");
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbbccccddddeeee", MSG_CONTENT_OF_THE_EDITOR);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH);
+
+ boolean isPresent = selenium.isElementPresent(LOC_TEXT_AREA_UL);
+ assertTrue(isPresent, MSG_EDITOR_SHOULD_CONTAIN_UL);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_UL_LI).intValue();
+ assertEquals(count, 3, MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the ordered list button. It types a normal string, then clicks on
+ * the ordered list button, types three strings, clicks on the ordered list
+ * button, and types one more string. Then it checks that the text area
+ * contains all strings, then checks that there are two paragraphs, presence
+ * of ordered list, and the number of list's items.
+ */
+ @Test
+ public void testOrderedList() {
+ selenium.typeKeys(LOC_TEXT_AREA, "aaaa");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+
+ selenium.click(LOC_ORDERED_LIST_BUTTON);
+ selenium.typeKeys(LOC_TEXT_AREA, "bbbb");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "cccc");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.typeKeys(LOC_TEXT_AREA, "dddd");
+ selenium.keyPress(LOC_TEXT_AREA, "13"); // press <Enter>
+ selenium.click(LOC_ORDERED_LIST_BUTTON);
+
+ selenium.typeKeys(LOC_TEXT_AREA, "eeee");
+
+ // select the iframe for Selenium to be able to get iframe's content
+ selenium.selectFrame(LOC_IFRAME);
+
+ String text = selenium.getText(LOC_TEXT_AREA);
+ assertEquals(text, "aaaa\nbbbbccccddddeeee", MSG_CONTENT_OF_THE_EDITOR);
+
+ int count = selenium.getXpathCount(LOC_TEXT_AREA_P).intValue();
+ assertEquals(count, 2, MSG_TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH);
+
+ boolean isPresent = selenium.isElementPresent(LOC_TEXT_AREA_OL);
+ assertTrue(isPresent, MSG_EDITOR_SHOULD_CONTAIN_OL);
+
+ count = selenium.getXpathCount(LOC_TEXT_AREA_OL_LI).intValue();
+ assertEquals(count, 3, MSG_LIST_SHOULD_CONTAIN_THREE_ITEMS);
+
+ selenium.selectFrame("relative=top");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testEditorSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 4, MSG_COMPONENT_DESCRIPTION);
+ // wait for iframe to load
+ waitFor(1000);
+ scrollIntoView(LOC_TEXT_AREA, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/editor/SimpleEditorTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/extendedDataTable/ExtendedDataTableTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/extendedDataTable/ExtendedDataTableTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/extendedDataTable/ExtendedDataTableTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,468 @@
+package org.jboss.richfaces.integrationTest.extendedDataTable;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.actions.Drag;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.utils.array.ArrayTransform;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class ExtendedDataTableTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ openComponent("Extended Data Table");
+ openTab("Usage");
+
+ scrollIntoView(table, true);
+ }
+
+ @BeforeClass
+ public void allowNativeXPath() {
+ selenium.allowNativeXpath("true");
+ }
+
+ @AfterClass
+ public void allowInitialXPath() {
+ selenium.allowNativeXpath("false");
+ }
+
+ private final String table = getLoc("extended-data-table--table");
+ private final String cells = getLoc("extended-data-table--cells");
+ private final String selectSortMode =
getLoc("extended-data-table--select--sort");
+ private final String selectSelectionMode =
getLoc("extended-data-table--select--selection");
+ private final String columnHeaderState =
getLoc("extended-data-table--column-header--state");
+ private final String columnHeaderCapital =
getLoc("extended-data-table--column-header--capital");
+ private final String columnHeaderTimeZone =
getLoc("extended-data-table--column-header--time-zone");
+ private final String columnHeaderFlag =
getLoc("extended-data-table--column-header--flag");
+ private final String[] columnHeadersSorting = new String[] {
+ columnHeaderState, columnHeaderCapital };
+ private final String[] columnHeadersDragging = new String[] {
+ columnHeaderState, columnHeaderCapital, columnHeaderFlag,
+ columnHeaderTimeZone };
+ private final String relativeColumnHeaderToItsLabel =
getLoc("extended-data-table--relative-column-header--from-label");
+
+ @Test
+ public void groupingTest() {
+ openPage();
+
+ final String columnHeader = format(relativeColumnHeaderToItsLabel,
+ columnHeaderState);
+ final String buttonContextMenu = formatLoc(
+ "extended-data-table--relative-div--context-menu-button",
+ columnHeader);
+ final String menuItemGroupByColumn =
getLoc("extended-data-table--menu-item--group-by-column");
+ final String groupTextsPreformatted =
getLoc("extended-data-table--table-row--group-text-preformatted");
+ final String rowsPreformatted =
getLoc("extended-data-table--table-row--regular-row-preformatted");
+ final String rowClass = getMess("extended-data-table--class--group-row");
+
+ selenium.fireEvent(columnHeader, Event.MOUSEOVER);
+ selenium.clickAt(buttonContextMenu, "1,1");
+ waitForElement(menuItemGroupByColumn);
+ selenium.click(menuItemGroupByColumn);
+ waitForSplash();
+
+ final int rows = selenium.getXpathCount(format(rowsPreformatted, 0))
+ .intValue();
+ String expected = null;
+ for (int row = 1, group = 0, tabular = 0; row <= rows; row++) {
+ if (belongsClass(rowClass, format(rowsPreformatted, row))) {
+ group++;
+ expected = selenium.getText(format(groupTextsPreformatted,
+ group));
+ } else {
+ tabular++;
+ Assert
+ .assertNotNull(
+ expected,
+ format(
+ "First row in grouped table has to belong to class '{0}'",
+ rowClass));
+ String actual = selenium.getText(format(
+ preformatColumn(columnHeader), tabular));
+ Assert.assertEquals(actual, expected, format(
+ "Cell ('{0}', row {1}) doesn't belong to group
'{2}'",
+ actual, row, expected));
+ }
+ }
+ }
+
+ @Test
+ public void draggingTest() {
+ openPage();
+
+ Assert.assertEquals(1, getColumnIndex(columnHeaderFlag));
+ Assert.assertEquals(2, getColumnIndex(columnHeaderState));
+ Assert.assertEquals(3, getColumnIndex(columnHeaderCapital));
+ Assert.assertEquals(4, getColumnIndex(columnHeaderTimeZone));
+
+ String inputFilterState = getInputFilterState();
+ selenium
+ .type(
+ inputFilterState,
+ getMess("extended-data-table--input--sorting-letter-in-dragging"));
+ selenium.fireEvent(inputFilterState, Event.KEYUP);
+ waitForSplash();
+
+ int associationHash = getAssociationMap().hashCode();
+
+ selenium.click(columnHeaderCapital);
+ waitForSplash();
+
+ Assert.assertEquals(associationHash, getAssociationMap().hashCode());
+
+ new Drag(selenium, columnHeaderTimeZone, formatLoc(
+ "extended-data-table--relative-div--drop-zone-left",
+ columnHeaderState)).drop();
+ waitForSplash();
+
+ Assert.assertEquals(associationHash, getAssociationMap().hashCode());
+
+ Assert.assertEquals(1, getColumnIndex(columnHeaderFlag));
+ Assert.assertEquals(2, getColumnIndex(columnHeaderTimeZone));
+ Assert.assertEquals(3, getColumnIndex(columnHeaderState));
+ Assert.assertEquals(4, getColumnIndex(columnHeaderCapital));
+
+ new Drag(selenium, columnHeaderState, formatLoc(
+ "extended-data-table--relative-div--drop-zone-right",
+ columnHeaderCapital)).drop();
+ waitForSplash();
+
+ Assert.assertEquals(associationHash, getAssociationMap().hashCode());
+
+ Assert.assertEquals(1, getColumnIndex(columnHeaderFlag));
+ Assert.assertEquals(2, getColumnIndex(columnHeaderTimeZone));
+ Assert.assertEquals(3, getColumnIndex(columnHeaderCapital));
+ Assert.assertEquals(4, getColumnIndex(columnHeaderState));
+ }
+
+ @Test
+ public void filteringTest() {
+ openPage();
+
+ final String[] statePrefixes = StringUtils.splitPreserveAllTokens(
+ getMess("extended-data-table--input--state-prefixes"), ',');
+ final String[] capitalPrefixes = StringUtils.splitPreserveAllTokens(
+ getMess("extended-data-table--input--capital-prefixes"), ',');
+ final String inputFilterState = preformatFilterInput(columnHeaderState);
+ final String inputFilterCapital = preformatFilterInput(columnHeaderCapital);
+
+ Assert.assertTrue(statePrefixes.length == capitalPrefixes.length);
+
+ for (int i = 0; i < statePrefixes.length; i++) {
+ final String statePrefix = statePrefixes[i];
+ final String capitalPrefix = capitalPrefixes[i];
+
+ selenium.type(inputFilterState, statePrefix);
+ selenium.fireEvent(inputFilterState, Event.KEYUP);
+ waitForSplash();
+ checkFiltering();
+
+ selenium.type(inputFilterCapital, capitalPrefix);
+ selenium.fireEvent(inputFilterCapital, Event.KEYUP);
+ waitForSplash();
+ checkFiltering();
+ }
+ }
+
+ @Test
+ public void sortingModeSingleTest() {
+ openPage();
+
+ final String singleSortMode =
getMess("extended-data-table--option--sort-single");
+ selectMode(selectSortMode, singleSortMode);
+
+ for (String columnHeader : columnHeadersSorting) {
+ // two iterations -- one for ascending and one for descending order
+ for (int i = 0; i < 2; i++) {
+ selenium.click(columnHeader);
+ waitForSplash();
+
+ String columnPreformatted = preformatColumn(columnHeader);
+ checkSorting(columnPreformatted);
+ }
+ }
+ }
+
+ @Test
+ public void sortingModeMultiTest() {
+ openPage();
+
+ final String multiSortMode =
getMess("extended-data-table--option--sort-multi");
+ selectMode(selectSortMode, multiSortMode);
+
+ Assert.assertTrue(columnHeadersSorting.length == 2);
+
+ String[] columnsPreformatted = new String[] {
+ preformatColumn(columnHeadersSorting[0]),
+ preformatColumn(columnHeadersSorting[1]) };
+
+ // two iterations -- one for ascending and one for descending order
+ for (int i = 0; i < 2; i++) {
+ selenium.click(columnHeadersSorting[0]);
+ waitForSplash();
+
+ // two iterations -- one for ascending and one for descending order
+ for (int j = 0; j < 2; j++) {
+ selenium.click(columnHeadersSorting[1]);
+ waitForSplash();
+
+ checkSortingForColumnOrder(columnsPreformatted);
+ }
+ }
+ }
+
+ @Test
+ public void selectionModeNoneTest() {
+ final String noneSelectionMode =
getMess("extended-data-table--option--selection-none");
+
+ openPage();
+ selectMode(selectSelectionMode, noneSelectionMode);
+
+ int[] rows, selectedRows;
+
+ rows = getRowSelection("extended-data-table--input--single-row");
+ multiSelection(rows);
+ selectedRows = getRowSelection("extended-data-table--output--mode-none");
+ checkSelection(selectedRows);
+
+ openPage();
+ selectMode(selectSelectionMode, noneSelectionMode);
+
+ rows = getRowSelection("extended-data-table--input--multiple-rows");
+ multiSelection(rows);
+ selectedRows = getRowSelection("extended-data-table--output--mode-none");
+ checkSelection(selectedRows);
+ }
+
+ @Test
+ public void selectionModeSingleTest() {
+ final String singleSelectionMode =
getMess("extended-data-table--option--selection-single");
+
+ openPage();
+ selectMode(selectSelectionMode, singleSelectionMode);
+
+ int[] rows, selectedRows;
+
+ rows = getRowSelection("extended-data-table--input--single-row");
+ multiSelection(rows);
+ selectedRows =
getRowSelection("extended-data-table--output--mode-single--single-row");
+ checkSelection(selectedRows);
+
+ openPage();
+ selectMode(selectSelectionMode, singleSelectionMode);
+
+ rows = getRowSelection("extended-data-table--input--multiple-rows");
+ multiSelection(rows);
+ selectedRows =
getRowSelection("extended-data-table--output--mode-single--multiple-rows");
+ checkSelection(selectedRows);
+ }
+
+ @Test
+ public void selectionModeMultiTest() {
+ final String multiSelectionMode =
getMess("extended-data-table--option--selection-multi");
+
+ openPage();
+ selectMode(selectSelectionMode, multiSelectionMode);
+
+ int[] rows, selectedRows;
+
+ rows = getRowSelection("extended-data-table--input--single-row");
+ multiSelection(rows);
+ selectedRows =
getRowSelection("extended-data-table--output--mode-multi--single-row");
+ checkSelection(selectedRows);
+
+ openPage();
+ selectMode(selectSelectionMode, multiSelectionMode);
+
+ rows = getRowSelection("extended-data-table--input--multiple-rows");
+ multiSelection(rows);
+ selectedRows =
getRowSelection("extended-data-table--output--mode-multi--multiple-rows");
+ checkSelection(selectedRows);
+ }
+
+ private void selectMode(String selectLocator, String selectionMode) {
+ if (!selectionMode.equals(selenium.getValue(selectLocator))) {
+ selenium
+ .select(
+ selectLocator,
+ formatMess(
+ "extended-data-table--option-value--selection-mode-preformatted",
+ selectionMode));
+ waitForSplash();
+ }
+ }
+
+ private int[] getRowSelection(String messageKey) {
+ String message = getMess(messageKey);
+ String[] tokens = StringUtils.splitPreserveAllTokens(message, ',');
+ int[] rows = new int[tokens.length];
+
+ for (int i = 0; i < tokens.length; i++) {
+ rows[i] = Integer.valueOf(tokens[i]);
+ }
+
+ return rows;
+ }
+
+ private void multiSelection(int[] rows) {
+ int column = 2;
+
+ for (int i = 0; i < rows.length; i++) {
+ final int row = rows[i];
+ String cell = format(cells, row, column);
+
+ if (i > 0) {
+ selenium.controlKeyDown();
+ }
+
+ selenium.click(cell);
+
+ if (i > 0) {
+ selenium.controlKeyUp();
+ }
+ }
+ }
+
+ private void checkSelection(int[] rows) {
+ checkSelection(rows, true);
+ checkSelection(rows, false);
+ }
+
+ private void checkSelection(int[] rows, boolean positiveComparison) {
+ final String selectedRow = getLoc("extended-data-table--selected-row");
+
+ String comparison = (positiveComparison) ? "position()="
+ : "position()!=";
+ String conjuction = (positiveComparison) ? " or " : " and ";
+
+ String condition = " and ("
+ + comparison
+ + StringUtils.join(ArrayUtils.toObject(rows), conjuction
+ + comparison) + ")";
+
+ if (rows.length == 0) {
+ condition = "";
+ }
+
+ int count = selenium.getXpathCount(format(selectedRow, condition))
+ .intValue();
+
+ Assert.assertTrue(positiveComparison ? count == rows.length
+ : count == 0);
+ }
+
+ private void waitForSplash() {
+ final String splashScreen = getLoc("extended-data-table--splash-screen");
+ Wait.dontFail().interval(1).timeout(2000).until(new Condition() {
+ public boolean isTrue() {
+ return selenium.isElementPresent(splashScreen);
+ }
+ });
+ Wait.interval(1).timeout(2000).until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(splashScreen);
+ }
+ });
+ }
+
+ private String preformatColumn(String columnHeader) {
+ int columnIndex = getColumnIndex(columnHeader);
+ String columnPreformatted = format(cells, Integer.MAX_VALUE,
+ columnIndex);
+ return columnPreformatted.replaceFirst(format("\\[{0,number}\\]",
+ Integer.MAX_VALUE), "{0,choice,0#|1#[{0}]}");
+ }
+
+ private String preformatFilterInput(String columnHeader) {
+ final String inputFilterPreformatted =
getLoc("extended-data-table--input--filter-column");
+ int columnIndex = getColumnIndex(columnHeader);
+ return format(inputFilterPreformatted, columnIndex);
+ }
+
+ private int getColumnIndex(String columnHeader) {
+ return 1 + selenium.getElementIndex(
+ format(relativeColumnHeaderToItsLabel, columnHeader))
+ .intValue();
+ }
+
+ private void checkFiltering() {
+ final String inputFilterState = preformatFilterInput(columnHeaderState);
+ final String inputFilterCapital = preformatFilterInput(columnHeaderCapital);
+ final String cellsState = preformatColumn(columnHeaderState);
+ final String cellsCapital = preformatColumn(columnHeaderCapital);
+
+ String statePrefix = selenium.getValue(inputFilterState);
+ String capitalPrefix = selenium.getValue(inputFilterCapital);
+
+ int rows = selenium.getXpathCount(format(cellsState, 0)).intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ if (statePrefix.length() > 0) {
+ String state = selenium.getText(format(cellsState, row));
+ Assert.assertTrue(state.startsWith(statePrefix));
+ }
+ if (capitalPrefix.length() > 0) {
+ String capital = selenium.getText(format(cellsCapital, row));
+ Assert.assertTrue(capital.startsWith(capitalPrefix));
+ }
+ }
+ }
+
+ private String getImgSrcOrText(String locator) {
+ String imgSrc = formatLoc(
+ "extended-data-table--relative-image-src--flag", locator);
+ if (selenium.isElementPresent(imgSrc)) {
+ return selenium.getAttribute(imgSrc);
+ } else {
+ return selenium.getText(locator);
+ }
+ }
+
+ private HashMap<String, Vector<String>> getAssociationMap() {
+ HashMap<String, Vector<String>> association = new HashMap<String,
Vector<String>>();
+
+ String[] columnsPreformatted = new ArrayTransform<String, String>(String.class)
{
+ public String transformation(String columnHeaderDragging) {
+ return preformatColumn(columnHeaderDragging);
+ }
+ }.transform(columnHeadersDragging);
+
+ int rows = selenium.getXpathCount(format(columnsPreformatted[0], 0))
+ .intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ String key = selenium.getText(format(columnsPreformatted[0], row));
+ Vector<String> values = new Vector<String>(
+ columnsPreformatted.length - 1);
+ for (int column = 1; column < columnsPreformatted.length; column++) {
+ String columnsContentDiv = formatLoc(
+ "extended-data-table--relative-div--column-to-its-content",
+ columnsPreformatted[column]);
+ String value = getImgSrcOrText(format(columnsContentDiv, row));
+ values.add(column - 1, value);
+ }
+ association.put(key, values);
+ }
+
+ return association;
+ }
+
+ private String getInputFilterState() {
+ return preformatFilterInput(columnHeaderState);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/FileUploadTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/FileUploadTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/FileUploadTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,534 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.fileUpload;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the component for uploading files. Before test it
+ * generates 6 images, each with size 128x128px with solid color - one of red,
+ * blue, cyan, yellow, orange, or green as defined in the java.awt.Color. It
+ * saves the images in temporary directory. After test it deletes all files.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class FileUploadTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private static final String FILE_RED = "/tmp/selenium-test" +
Color.RED.getRGB() + ".jpg";
+ private static final String FILE_BLUE = "/tmp/selenium-test" +
Color.BLUE.getRGB() + ".jpg";
+ private static final String FILE_CYAN = "/tmp/selenium-test" +
Color.CYAN.getRGB() + ".jpg";
+ private static final String FILE_YELLOW = "/tmp/selenium-test" +
Color.YELLOW.getRGB() + ".jpg";
+ private static final String FILE_ORANGE = "/tmp/selenium-test" +
Color.ORANGE.getRGB() + ".jpg";
+ private static final String FILE_BIG = "/tmp/selenium-test" +
Color.GREEN.getRGB() + ".jpg";
+
+ // messages
+ private final String MSG_COULD_NOT_CREATE_IMAGE =
getMsg("COULD_NOT_CREATE_IMAGE");
+ private final String MSG_PROVIDED_URL_NOT_VALID =
getMsg("PROVIDED_URL_NOT_VALID");
+ private final String MSG_COULD_NOT_READ_IMAGE =
getMsg("COULD_NOT_READ_IMAGE");
+
+ private final String MSG_LEFT_PANEL_NUMBER_OF_ITEMS =
getMsg("LEFT_PANEL_NUMBER_OF_ITEMS");
+ private final String MSG_LEFT_PANEL_NAME_N = getMsg("LEFT_PANEL_NAME_N");
+ private final String MSG_LEFT_PANEL_CANCEL_N =
getMsg("LEFT_PANEL_CANCEL_N");
+ private final String MSG_LEFT_PANEL_DONE_N = getMsg("LEFT_PANEL_DONE_N");
+
+ private final String MSG_RIGHT_PANEL_CONTENT =
getMsg("RIGHT_PANEL_CONTENT");
+ private final String MSG_RIGHT_PANEL_NUMBER_OF_ITEMS =
getMsg("RIGHT_PANEL_NUMBER_OF_ITEMS");
+ private final String MSG_RIGHT_PANEL_NAME_N =
getMsg("RIGHT_PANEL_NAME_N");
+ private final String MSG_RIGHT_PANEL_SIZE_N =
getMsg("RIGHT_PANEL_SIZE_N");
+ private final String MSG_RIGHT_PANEL_COLOR_N_X_Y =
getMsg("RIGHT_PANEL_COLOR_N_X_Y");
+
+ private final String MSG_ADD_BUTTON_ENABLED =
getMsg("ADD_BUTTON_ENABLED");
+ private final String MSG_ADD_BUTTON_NOT_ENABLED =
getMsg("ADD_BUTTON_NOT_ENABLED");
+ private final String MSG_UPLOAD_BUTTON_VISIBLE =
getMsg("UPLOAD_BUTTON_VISIBLE");
+ private final String MSG_UPLOAD_BUTTON_NOT_VISIBLE =
getMsg("UPLOAD_BUTTON_NOT_VISIBLE");
+ private final String MSG_CLEAR_ALL_BUTTON_VISIBLE =
getMsg("CLEAR_ALL_BUTTON_VISIBLE");
+ private final String MSG_CLEAR_ALL_BUTTON_NOT_VISIBLE =
getMsg("CLEAR_ALL_BUTTON_NOT_VISIBLE");
+ private final String MSG_CLEAR_UPLOADED_DATA_BUTTON_VISIBLE =
getMsg("CLEAR_UPLOADED_DATA_BUTTON_VISIBLE");
+ private final String MSG_CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE =
getMsg("CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_ADD_BUTTON_N = getLoc("ADD_BUTTON_N");
+ private final String LOC_ADD_BUTTON_CLASS = getLoc("ADD_BUTTON_CLASS");
+ private final String LOC_UPLOAD_BUTTON = getLoc("UPLOAD_BUTTON");
+ private final String LOC_UPLOAD_BUTTON_STYLE =
getLoc("UPLOAD_BUTTON_STYLE");
+ private final String LOC_CLEAR_ALL_BUTTON = getLoc("CLEAR_ALL_BUTTON");
+ private final String LOC_CLEAR_ALL_BUTTON_STYLE =
getLoc("CLEAR_ALL_BUTTON_STYLE");
+ private final String LOC_CLEAR_UPLOADED_DATA_BUTTON =
getLoc("CLEAR_UPLOADED_DATA_BUTTON");
+
+ private final String LOC_NOT_UPLOADED_LIST_TR =
getLoc("NOT_UPLOADED_LIST_TR");
+ private final String LOC_NOT_UPLOADED_LIST_N_NAME =
getLoc("NOT_UPLOADED_LIST_N_NAME");
+ private final String LOC_NOT_UPLOADED_LIST_N_DONE =
getLoc("NOT_UPLOADED_LIST_N_DONE");
+ private final String LOC_NOT_UPLOADED_LIST_N_CANCEL =
getLoc("NOT_UPLOADED_LIST_N_CANCEL");
+
+ private final String LOC_UPLOADED_FILES_INFO =
getLoc("UPLOADED_FILES_INFO");
+ private final String LOC_UPLOADED_LIST_TR = getLoc("UPLOADED_LIST_TR");
+ private final String LOC_UPLOADED_LIST_N_IMG =
getLoc("UPLOADED_LIST_N_IMG");
+ private final String LOC_UPLOADED_LIST_N_NAME =
getLoc("UPLOADED_LIST_N_NAME");
+ private final String LOC_UPLOADED_LIST_N_SIZE =
getLoc("UPLOADED_LIST_N_SIZE");
+
+ private final String LOC_AUTOMATIC_UPLOAD = getLoc("AUTOMATIC_UPLOAD");
+ private final String LOC_FLASH = getLoc("FLASH");
+
+ /**
+ * Tests uploading one file. First it checks that the component is empty,
+ * add button is enabled and that upload button and clear all buttons are
+ * disabled. Then it checks that button for clearing uploaded data is not
+ * visible. After that it attaches yellow picture and verifies that it
+ * appeared in left part of component. It checks all buttons again and
+ * clicks the upload button. Then it checks all button third time.
+ */
+ @Test
+ public void testUploadOneFile() {
+ String text = selenium.getText(LOC_UPLOADED_FILES_INFO);
+ assertEquals(text, "No files currently uploaded",
MSG_RIGHT_PANEL_CONTENT);
+
+ int count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ assertTrue(!belongsClass("rich-fileupload-button-dis",
LOC_ADD_BUTTON_CLASS), MSG_ADD_BUTTON_ENABLED);
+ assertFalse(isDisplayed(LOC_UPLOAD_BUTTON_STYLE),
MSG_UPLOAD_BUTTON_NOT_VISIBLE);
+ assertFalse(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_NOT_VISIBLE);
+
+ boolean isPresent = selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON);
+ assertFalse(isPresent, MSG_CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE);
+
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+
+ count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 1, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ assertTrue(!belongsClass("rich-fileupload-button-dis",
LOC_ADD_BUTTON_CLASS), MSG_ADD_BUTTON_ENABLED);
+ assertTrue(isDisplayed(LOC_UPLOAD_BUTTON_STYLE), MSG_UPLOAD_BUTTON_VISIBLE);
+ assertFalse(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_NOT_VISIBLE);
+
+ isPresent = selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON);
+ assertFalse(isPresent, MSG_CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE);
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+ waitFor(2000);
+
+ assertTrue(!belongsClass("rich-fileupload-button-dis",
LOC_ADD_BUTTON_CLASS), MSG_ADD_BUTTON_ENABLED);
+ assertFalse(isDisplayed(LOC_UPLOAD_BUTTON_STYLE),
MSG_UPLOAD_BUTTON_NOT_VISIBLE);
+ assertTrue(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_VISIBLE);
+
+ isPresent = selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON);
+ assertTrue(isPresent, MSG_CLEAR_UPLOADED_DATA_BUTTON_VISIBLE);
+ }
+
+ /**
+ * Tests information in the left list. First it attaches 2 files -- yellow
+ * and blue. Then it verifies that these two files appeared in left list. It
+ * verifies the name of the file in the list and checks that the cancel
+ * button is visible. Then it clicks upload button and verifies that there
+ * are two files in the right list. Then it checks the left list again.
+ */
+ @Test
+ void testFilesToBeUploadedInfo() {
+ int count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_BLUE);
+
+ count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 2, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ String text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 1));
+ assertEquals(text, "selenium-test" + Color.YELLOW.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 2));
+ assertEquals(text, "selenium-test" + Color.BLUE.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 2));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 1));
+ assertEquals(text, "Cancel", String.format(MSG_LEFT_PANEL_CANCEL_N,
1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 2));
+ assertEquals(text, "Cancel", String.format(MSG_LEFT_PANEL_CANCEL_N,
2));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 1));
+ assertEquals(text, "", String.format(MSG_LEFT_PANEL_DONE_N, 1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 2));
+ assertEquals(text, "", String.format(MSG_LEFT_PANEL_DONE_N, 1));
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+ waitFor(2000);
+
+ count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 2, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 1));
+ assertEquals(text, "selenium-test" + Color.YELLOW.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 2));
+ assertEquals(text, "selenium-test" + Color.BLUE.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 2));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 1));
+ assertEquals(text, "Clear", String.format(MSG_LEFT_PANEL_CANCEL_N,
1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 2));
+ assertEquals(text, "Clear", String.format(MSG_LEFT_PANEL_CANCEL_N,
1));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 1));
+ assertEquals(text, "Done", String.format(MSG_LEFT_PANEL_DONE_N, 1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 2));
+ assertEquals(text, "Done", String.format(MSG_LEFT_PANEL_DONE_N, 1));
+ }
+
+ /**
+ * Tests information in the right part of the component. First it uploads
+ * two files -- cyan and orange. Then it checks the name and size of both
+ * files in the right list.
+ */
+ @Test
+ public void testUploadedFilesInfo() {
+ int count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_CYAN);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_ORANGE);
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+
+ count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+
+ waitForElement(String.format(LOC_UPLOADED_LIST_N_NAME, 1));
+
+ String text = selenium.getText(String.format(LOC_UPLOADED_LIST_N_NAME, 1));
+ assertEquals(text, "selenium-test" + Color.CYAN.getRGB() +
".jpg", String.format(MSG_RIGHT_PANEL_NAME_N, 1));
+ text = selenium.getText(String.format(LOC_UPLOADED_LIST_N_NAME, 2));
+ assertEquals(text, "selenium-test" + Color.ORANGE.getRGB() +
".jpg", String.format(MSG_RIGHT_PANEL_NAME_N, 2));
+
+ long size1 =
Long.parseLong(selenium.getText(String.format(LOC_UPLOADED_LIST_N_SIZE, 1)));
+ long size2 = new File(FILE_CYAN).length();
+ assertEquals(size1, size2, String.format(MSG_RIGHT_PANEL_SIZE_N, 1));
+
+ size1 = Long.parseLong(selenium.getText(String.format(LOC_UPLOADED_LIST_N_SIZE,
2)));
+ size2 = new File(FILE_ORANGE).length();
+ assertEquals(size1, size2, String.format(MSG_RIGHT_PANEL_SIZE_N, 1));
+
+ // FIXME it cannot download the image
+ // String url =
+ // selenium.getAttribute(String.format(LOC_UPLOADED_LIST_N_IMG, 1) +
+ // "@src");
+ // assertImageColorEquals(url, Color.CYAN);
+ //
+ // url = selenium.getAttribute(String.format(LOC_UPLOADED_LIST_N_IMG, 2)
+ // + "@src");
+ // assertImageColorEquals(url, Color.BLUE);
+ }
+
+ /**
+ * Tests automatic upload. First it clicks the button activating automatic
+ * upload and attaches the cyan image. Then it waits for the right list to
+ * update.
+ */
+ @Test
+ public void testAutomaticUpload() {
+ selenium.click(LOC_AUTOMATIC_UPLOAD);
+
+ int count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_CYAN);
+
+ waitForElement(LOC_UPLOADED_LIST_TR);
+ count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 1, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+ }
+
+ /**
+ * Tests uploading maximal allowed number of files -- 5.
+ */
+ @Test
+ public void testUploadFiveFiles() {
+ assertTrue(!belongsClass("rich-fileupload-button-dis",
LOC_ADD_BUTTON_CLASS), MSG_ADD_BUTTON_ENABLED);
+
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_BLUE);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 3), "file://" +
FILE_CYAN);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 4), "file://" +
FILE_ORANGE);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 5), "file://" +
FILE_RED);
+
+ assertFalse(!belongsClass("rich-fileupload-button-dis",
LOC_ADD_BUTTON_CLASS), MSG_ADD_BUTTON_NOT_ENABLED);
+ }
+
+ /**
+ * Tests uploading a file with size that is bigger than allowed maximum.
+ * First it attaches yellow image, then the big image and clicks the upload
+ * button. Then it checks properties of files in the left list.
+ */
+ @Test
+ public void testUploadBigFile() {
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_BIG);
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+ waitFor(2000);
+
+ String text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 1));
+ assertEquals(text, "selenium-test" + Color.YELLOW.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_NAME, 2));
+ assertEquals(text, "selenium-test" + Color.GREEN.getRGB() +
".jpg", String.format(MSG_LEFT_PANEL_NAME_N, 2));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 1));
+ assertEquals(text, "Clear", String.format(MSG_LEFT_PANEL_CANCEL_N,
1));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_CANCEL, 2));
+ assertEquals(text, "Cancel", String.format(MSG_LEFT_PANEL_CANCEL_N,
2));
+
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 1));
+ assertEquals(text, "Done", String.format(MSG_LEFT_PANEL_DONE_N, 2));
+ text = selenium.getText(String.format(LOC_NOT_UPLOADED_LIST_N_DONE, 2));
+ assertEquals(text, "File size restricted",
String.format(MSG_LEFT_PANEL_DONE_N, 2));
+
+ int count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 1, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+ }
+
+ /**
+ * Tests the "Clear All" button. It uploads two files -- yellow and cyan,
+ * verifies that the clear all button is visible, and clicks it. Then it
+ * checks that the button disappeared and that the left list is empty.
+ */
+ @Test
+ public void testClearAllButton() {
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_CYAN);
+
+ assertFalse(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_NOT_VISIBLE);
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+ waitForElement(LOC_UPLOADED_LIST_TR);
+
+ assertTrue(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_VISIBLE);
+
+ selenium.click(LOC_CLEAR_ALL_BUTTON);
+
+ assertFalse(isDisplayed(LOC_CLEAR_ALL_BUTTON_STYLE),
MSG_CLEAR_ALL_BUTTON_NOT_VISIBLE);
+
+ int count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+ }
+
+ /**
+ * Tests the "Clear Up Uploaded Data" button. First it verifies that the
+ * button is hidden and then uploads two images - yellow and cyan. Then it
+ * checks that the button is visible now and clicks it. After that it checks
+ * that button disappeared again. At the end it verifies that both left and
+ * right lists are empty.
+ */
+ @Test
+ public void testClearUploadedDataButton() {
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 1), "file://" +
FILE_YELLOW);
+ selenium.attachFile(String.format(LOC_ADD_BUTTON_N, 2), "file://" +
FILE_CYAN);
+
+ assertFalse(selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON),
+ MSG_CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE);
+
+ waitFor(2000);
+
+ selenium.click(LOC_UPLOAD_BUTTON);
+ waitForElement(LOC_UPLOADED_LIST_TR);
+
+ assertTrue(selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON),
MSG_CLEAR_UPLOADED_DATA_BUTTON_VISIBLE);
+
+ selenium.click(LOC_CLEAR_UPLOADED_DATA_BUTTON);
+
+ // wait for JavaScript to finish its work
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(LOC_UPLOADED_LIST_TR);
+ }
+ });
+
+ assertFalse(selenium.isElementPresent(LOC_CLEAR_UPLOADED_DATA_BUTTON),
+ MSG_CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE);
+
+ int count = selenium.getXpathCount(LOC_NOT_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_LEFT_PANEL_NUMBER_OF_ITEMS);
+
+ count = selenium.getXpathCount(LOC_UPLOADED_LIST_TR).intValue();
+ assertEquals(count, 0, MSG_RIGHT_PANEL_NUMBER_OF_ITEMS);
+ }
+
+ // /**
+ // * TODO Test the Flash version of the component.
+ // */
+ // @Test
+ // public void testFlash() {
+ //
+ // }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:panelGrid columns=\"2\"
columnClasses=\"top,top\">",
+ "<rich:fileUpload
fileUploadListener=\"#{fileUploadBean.listener}\"",
+
"maxFilesQuantity=\"#{fileUploadBean.uploadsAvailable}\"",
"id=\"upload\"",
+ "immediateUpload=\"#{fileUploadBean.autoUpload}\"",
+ "acceptedTypes=\"jpg, gif, png, bmp\"
allowFlash=\"#{fileUploadBean.useFlash}\">",
+ "<a4j:support event=\"onuploadcomplete\"
reRender=\"info\" />", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View FileUploadBean.java Source". It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testBeanSource() {
+ String[] strings = new String[] { "package
org.richfaces.demo.fileUpload;", "public FileUploadBean() {",
+ "public void paint(OutputStream stream, Object object) throws
IOException {",
+ "public void listener(UploadEvent event) throws Exception{",
"public String clearUploadData() {",
+ "public long getTimeStamp(){", "public
ArrayList<File> getFiles() {",
+ "public void setFiles(ArrayList<File> files) { ", };
+
+ abstractTestSource(1, "View FileUploadBean.java Source", strings);
+ }
+
+ /**
+ * Creates an image of given width, height, and color.
+ *
+ * @param c
+ * color of the image to be created
+ * @param width
+ * width of the image to be created
+ * @param height
+ * height of the image to be created
+ */
+ private void createImage(Color c, int width, int height) {
+ BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics = image.createGraphics();
+ graphics.setColor(c);
+ graphics.fillRect(0, 0, width, height);
+ try {
+ ImageIO.write(image, "JPEG", new
File("/tmp/selenium-test" + c.getRGB() + ".jpg"));
+ } catch (IOException e) {
+ fail(MSG_COULD_NOT_CREATE_IMAGE);
+ }
+ }
+
+ /**
+ * Asserts that the image's color equals the one from method's parameter.
+ *
+ * @param url
+ * relative url of the image
+ * @param expecteColor
+ * expected color of the image
+ */
+ private void assertImageColorEquals(String url, Color expecteColor) {
+ assertEquals(getPixelColor(url, 0, 0), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 0, 0));
+ assertEquals(getPixelColor(url, 10, 18), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 10, 18));
+ assertEquals(getPixelColor(url, 120, 4), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 120, 4));
+ assertEquals(getPixelColor(url, 5, 9), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 5, 9));
+ assertEquals(getPixelColor(url, 84, 84), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 84, 84));
+ assertEquals(getPixelColor(url, 71, 55), expecteColor,
String.format(MSG_RIGHT_PANEL_COLOR_N_X_Y, 71, 55));
+ }
+
+ /**
+ * Returns the color of the pixel with specified coordinates.
+ *
+ * @param url
+ * relative URL of the image
+ * @param x
+ * the horizontal coordinate of the pixel
+ * @param y
+ * the vertical coordinate of the pixel
+ * @return color of the pixel
+ */
+ private Color getPixelColor(String url, int x, int y) {
+ // the index of first '/' not counting http://
+ int index = selenium.getLocation().indexOf('/', 7);
+ url = selenium.getLocation().substring(0, index) + url;
+
+ BufferedImage image = null;
+ try {
+ image = ImageIO.read(new URL(url));
+ } catch (MalformedURLException e) {
+ fail(MSG_PROVIDED_URL_NOT_VALID);
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(MSG_COULD_NOT_READ_IMAGE);
+ }
+ int c = image.getRGB(18, 97);
+ int red = (c & 0x00ff0000) >> 16;
+ int green = (c & 0x0000ff00) >> 8;
+ int blue = c & 0x000000ff;
+
+ return new Color(red, green, blue);
+ }
+
+ @BeforeClass
+ private void createImages() {
+ createImage(Color.RED, 128, 128);
+ createImage(Color.BLUE, 128, 128);
+ createImage(Color.CYAN, 128, 128);
+ createImage(Color.YELLOW, 128, 128);
+ createImage(Color.ORANGE, 128, 128);
+ createImage(Color.GREEN, 2000, 3500);
+ }
+
+ @AfterClass
+ private void cleanUpImages() {
+ new File(FILE_RED).delete();
+ new File(FILE_BLUE).delete();
+ new File(FILE_CYAN).delete();
+ new File(FILE_YELLOW).delete();
+ new File(FILE_ORANGE).delete();
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("File Upload");
+ openTab("Usage");
+
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/fileUpload/FileUploadTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorAfterModelUpdateTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorAfterModelUpdateTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorAfterModelUpdateTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,103 @@
+package org.jboss.richfaces.integrationTest.graphValidator;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class GraphValidatorAfterModelUpdateTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/graphValidator.jsf?c=graphValidator&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("graph-validator--header2");
+ private String buttonSubmit = getLoc("graph-validator--button--submit2");
+ private String validationMessage =
getLoc("graph-validator--output--validation-message");
+ private String validationMessageClass =
getLoc("graph-validator--attribute--validation-message-class");
+ private String activityTimes =
getLoc("graph-validator--input--activity-times");
+ private String validMessageClass =
getMess("graph-validator--attribute--class-valid");
+ private String invalidMessageClass =
getMess("graph-validator--attribute--class-invalid");
+
+ @Test
+ public void noChangeIntoFormTest() {
+ openPage();
+
+ submitAndWaitForMessageAppears();
+
+ validateMessages(
+ invalidMessageClass,
+ getMess("graph-validator--message--please-fill-at-least-one-entry"));
+ }
+
+ @Test
+ public void changeStoredSuccessfullyTest() {
+ openPage();
+
+ typeAndSubmit(format(activityTimes, 1),
+ getMess("graph-validator--input--ok"));
+
+ validateMessages(
+ validMessageClass,
+ getMess("graph-validator--message--changes-stored-successfully"));
+ }
+
+ @Test
+ public void oneValueTooGreatTest() {
+ openPage();
+
+ typeAndSubmit(format(activityTimes, 1),
+ getMess("graph-validator--input--too-great"));
+
+ validateMessages(invalidMessageClass,
+ getMess("graph-validator--message--invalid-values"));
+ }
+
+ @Test
+ public void sumOfValuesTooGreatTest() {
+ openPage();
+
+ for (int i = 1; i <= 3; i++) {
+ selenium.type(format(activityTimes, i),
+ getMess("graph-validator--input--sum-too-great"));
+ }
+ submitAndWaitForMessageAppears();
+
+ validateMessages(invalidMessageClass,
+ getMess("graph-validator--message--sum-too-great"));
+ }
+
+ /* HELP METHODS */
+
+ private void typeAndSubmit(String locator, String text) {
+ selenium.type(locator, text);
+ submitAndWaitForMessageAppears();
+ }
+
+ private void submitAndWaitForMessageAppears() {
+ selenium.click(buttonSubmit);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return selenium.isElementPresent(validationMessage);
+ }
+ });
+ }
+
+ private void validateMessages(String className, String text) {
+ Assert.assertEquals(className, selenium
+ .getAttribute(validationMessageClass));
+ Assert.assertEquals(text, selenium.getText(validationMessage));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/graphValidator/GraphValidatorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,151 @@
+package org.jboss.richfaces.integrationTest.graphValidator;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class GraphValidatorTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/graphValidator.jsf?c=graphValidator&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("graph-validator--header1");
+ private String buttonSubmit = getLoc("graph-validator--button--submit1");
+ private String inputName = getLoc("graph-validator--input--name");
+ private String inputEmail = getLoc("graph-validator--input--email");
+ private String inputAge = getLoc("graph-validator--input--age");
+ private String relativeValidationMessage =
getLoc("graph-validator--relative--validation-message");
+
+ private void typeAndSubmit(String locator, String value) {
+ selenium.type(locator, value);
+ selenium.click(buttonSubmit);
+ }
+
+ public String getMessageFor(String locator) {
+ return format(relativeValidationMessage, locator);
+ }
+
+ @Test
+ public void nameValueRequired() {
+ openPage();
+ typeAndSubmit(inputName, "");
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("may-not-be-null-or-empty"));
+ }
+
+ @Test
+ public void nameMinimumLength() {
+ openPage();
+ typeAndSubmit(inputName, getMess("less-than-minimum--enter"));
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameMaximumLength() {
+ openPage();
+ typeAndSubmit(inputName, getMess("greater-than-maximum--enter"));
+ waitForTextEquals(getMessageFor(inputName),
+ getMess("bean-name--length"));
+ }
+
+ @Test
+ public void nameOnlySpacesPattern() {
+ openPage();
+ typeAndSubmit(inputName, " ");
+ waitForTextEquals(getMessageFor(inputName), formatMess(
+ "less-than-minimum-of-2", selenium.getAttribute(format(
+ "{0}/@id", inputName))));
+ }
+
+ @Test
+ public void nameMessageDisappers() {
+ nameValueRequired();
+ typeAndSubmit(inputName, getMess("bean-name--valid-input"));
+ waitForTextEquals(getMessageFor(inputName), "");
+ }
+
+ @Test
+ public void ageValueRequired() {
+ openPage();
+ typeAndSubmit(inputAge, "");
+ waitForTextEquals(getMessageFor(inputAge), getMess("may-not-be-null"));
+ }
+
+ @Test
+ public void ageMinimumValue() {
+ openPage();
+ typeAndSubmit(inputAge, getMess("long-range--bellow"));
+ waitForTextEquals(getMessageFor(inputAge), getMess("bean-age--min"));
+ }
+
+ @Test
+ public void ageMaximumValue() {
+ openPage();
+ typeAndSubmit(inputAge, getMess("bean-age--max--enter"));
+ waitForTextEquals(getMessageFor(inputAge), getMess("bean-age--max"));
+ }
+
+ @Test
+ public void ageIntegerOnly() {
+ openPage();
+ typeAndSubmit(inputAge, formatMess("age-integer-only--enter", inputAge));
+ waitForTextEquals(getMessageFor(inputAge), formatMess(
+ "bean-age--integer-only", selenium.getAttribute(format(
+ "{0}/@id", inputAge))));
+ }
+
+ @Test
+ public void ageMessageDisappers() {
+ ageValueRequired();
+ typeAndSubmit(inputAge, getMess("valid-age"));
+ waitForTextEquals(getMessageFor(inputAge), "");
+ }
+
+ @Test
+ public void emailMayNotBeNullOrEmpty() {
+ openPage();
+ typeAndSubmit(inputEmail, "");
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("may-not-be-null-or-empty"));
+ }
+
+ @Test
+ public void emailOnlySpaces() {
+ openPage();
+ typeAndSubmit(inputEmail, " ");
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad1() {
+ openPage();
+ typeAndSubmit(inputEmail, getMess("bad-email-1"));
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailBad2() {
+ openPage();
+ typeAndSubmit(inputEmail, getMess("bad-email-2"));
+ waitForTextEquals(getMessageFor(inputEmail),
+ getMess("not-well-formed-email"));
+ }
+
+ @Test
+ public void emailMessageDisappers() {
+ emailMayNotBeNullOrEmpty();
+ typeAndSubmit(inputEmail, getMess("well-formed-email"));
+ waitForTextEquals(getMessageFor(inputEmail), "");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/include/IncludeTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/include/IncludeTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/include/IncludeTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,193 @@
+package org.jboss.richfaces.integrationTest.include;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class IncludeTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/include.jsf?c=include&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("include--header");
+ private String buttonNext = getLoc("include--button--next");
+ private String buttonPrevious = getLoc("include--button--previous");
+ private String inputFirstName = getLoc("include--input--first-name");
+ private String inputLastName = getLoc("include--input--last-name");
+ private String inputCompany = getLoc("include--input--company");
+ private String inputNotes = getLoc("include--input--notes");
+ private String outputFirstName = getLoc("include--output--first-name");
+ private String outputLastName = getLoc("include--output--last-name");
+ private String outputCompany = getLoc("include--output--company");
+ private String outputNotes = getLoc("include--output--notes");
+ private String sample = getMess("include--input--sample");
+
+ @Test
+ public void goThroughStepsTest() {
+ openPage();
+
+ goThroughSteps();
+ }
+
+ @Test(dependsOnMethods = { "goThroughStepsTest" })
+ public void goThroughStepsBackTest() {
+ openPage();
+
+ goThroughSteps();
+ goThroughStepsBack();
+ }
+
+ @Test
+ public void tryFailedValidationTest() {
+ openPage();
+
+ Assert.assertTrue(isFirstPage());
+
+ selenium.type(inputFirstName, format(sample, 1));
+ selenium.type(inputLastName, format(sample, 2));
+ selenium.click(buttonNext);
+
+ waitForText(getMess("include--message--company-required"));
+
+ selenium.type(inputCompany, format(sample, 3));
+ selenium.click(buttonNext);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isSecondPage();
+ }
+ });
+
+ selenium.click(buttonPrevious);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isFirstPage();
+ }
+ });
+
+ selenium.type(inputLastName, "");
+ selenium.click(buttonNext);
+
+ waitForText(getMess("include--message--last-name-required"));
+
+ selenium.type(inputLastName, format(sample, 2));
+ selenium.click(buttonNext);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isSecondPage();
+ }
+ });
+
+ selenium.click(buttonNext);
+
+ waitForText(getMess("include--message--notes-required"));
+
+ selenium.type(inputNotes, format(sample, 4));
+ selenium.click(buttonNext);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isLastPage();
+ }
+ });
+
+ Assert.assertEquals(format(sample, 1), selenium
+ .getText(outputFirstName));
+ Assert
+ .assertEquals(format(sample, 2), selenium
+ .getText(outputLastName));
+ Assert.assertEquals(format(sample, 3), selenium.getText(outputCompany));
+ Assert.assertEquals(format(sample, 4), selenium.getText(outputNotes));
+ }
+
+ public void goThroughSteps() {
+ Assert.assertTrue(isFirstPage());
+
+ selenium.type(inputFirstName, format(sample, 1));
+ selenium.type(inputLastName, format(sample, 2));
+ selenium.type(inputCompany, format(sample, 3));
+ selenium.click(buttonNext);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isSecondPage();
+ }
+ });
+
+ selenium.type(inputNotes, format(sample, 4));
+ selenium.click(buttonNext);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isLastPage();
+ }
+ });
+
+ Assert.assertEquals(format(sample, 1), selenium
+ .getText(outputFirstName));
+ Assert
+ .assertEquals(format(sample, 2), selenium
+ .getText(outputLastName));
+ Assert.assertEquals(format(sample, 3), selenium.getText(outputCompany));
+ Assert.assertEquals(format(sample, 4), selenium.getText(outputNotes));
+ }
+
+ private void goThroughStepsBack() {
+ selenium.click(buttonPrevious);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isSecondPage();
+ }
+ });
+
+ Assert.assertEquals(format(sample, 4), selenium.getValue(inputNotes));
+
+ selenium.click(buttonPrevious);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return isFirstPage();
+ }
+ });
+
+ Assert.assertEquals(format(sample, 1), selenium
+ .getValue(inputFirstName));
+ Assert
+ .assertEquals(format(sample, 2), selenium
+ .getValue(inputLastName));
+ Assert.assertEquals(format(sample, 3), selenium.getValue(inputCompany));
+ }
+
+ private boolean isFirstPage() {
+ return isButtonsPresent(false, true);
+ }
+
+ private boolean isSecondPage() {
+ return isButtonsPresent(true, true);
+ }
+
+ private boolean isLastPage() {
+ return isButtonsPresent(true, false);
+ }
+
+ private boolean isButtonsPresent(boolean previousPresent,
+ boolean nextPresent) {
+ return (previousPresent == selenium.isElementPresent(buttonPrevious))
+ && (nextPresent == selenium.isElementPresent(buttonNext));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/InplaceInputTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/InplaceInputTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/InplaceInputTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,286 @@
+package org.jboss.richfaces.integrationTest.inplaceInput;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the inplace input component.
+ * <ul>
+ * <li><b>TODO</b> create tests for the fourth example (table)
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class InplaceInputTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_INITIAL_VALUE_NAME = getMess("INITIAL_VALUE_NAME");
+ private final String MSG_INITIAL_VALUE_EMAIL =
getMess("INITIAL_VALUE_EMAIL");
+ private final String MSG_NAME_JOHN_SMITH = getMess("NAME_JOHN_SMITH");
+ private final String MSG_EMAIL_JOHN_SMITH = getMess("EMAIL_JOHN_SMITH");
+ private final String MSG_RICH_INPLACE_VIEW = getMess("RICH_INPLACE_VIEW");
+ private final String MSG_RICH_INPLACE_CHANGED =
getMess("RICH_INPLACE_CHANGED");
+ private final String MSG_NOT_RICH_INPLACE_CHANGED =
getMess("NOT_RICH_INPLACE_CHANGED");
+ private final String MSG_RICH_INPLACE_EDIT = getMess("RICH_INPLACE_EDIT");
+ private final String MSG_NOT_RICH_INPLACE_EDIT =
getMess("NOT_RICH_INPLACE_EDIT");
+
+ // locators
+ private final String LOC_FIRST_NAME = getLoc("FIRST_NAME");
+ private final String LOC_FIRST_NAME_INPUT = getLoc("FIRST_NAME_INPUT");
+ private final String LOC_FIRST_EMAIL = getLoc("FIRST_EMAIL");
+ private final String LOC_FIRST_EMAIL_INPUT = getLoc("FIRST_EMAIL_INPUT");
+ private final String LOC_SECOND_NAME = getLoc("SECOND_NAME");
+ private final String LOC_SECOND_NAME_INPUT = getLoc("SECOND_NAME_INPUT");
+ private final String LOC_SECOND_NAME_OK = getLoc("SECOND_NAME_OK");
+ private final String LOC_SECOND_NAME_CANCEL = getLoc("SECOND_NAME_CANCEL");
+ private final String LOC_SECOND_EMAIL = getLoc("SECOND_EMAIL");
+ private final String LOC_SECOND_EMAIL_INPUT = getLoc("SECOND_EMAIL_INPUT");
+ private final String LOC_SECOND_EMAIL_OK = getLoc("SECOND_EMAIL_OK");
+ private final String LOC_SECOND_EMAIL_CANCEL = getLoc("SECOND_EMAIL_CANCEL");
+ private final String LOC_THIRD = getLoc("THIRD");
+ private final String LOC_THIRD_INPUT = getLoc("THIRD_INPUT");
+ private final String LOC_THIRD_SAVE = getLoc("THIRD_SAVE");
+ private final String LOC_THIRD_CANCEL = getLoc("THIRD_CANCEL");
+
+ /**
+ * Tests the input for name in the first example. First it checks the attribute
+ * "class" of the input. Then it clicks on text, edits the text and fires the
+ * event "blur" so that the text is changed permanently. After that, it
+ * checks the attribute "class" and verifies that the text was changed.
+ */
+ @Test
+ public void testFirstName() {
+ scrollIntoView(LOC_FIRST_NAME, true);
+
+ String attr = selenium.getAttribute(LOC_FIRST_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-view"), MSG_RICH_INPLACE_VIEW);
+ assertFalse(attr.contains("rich-inplace-changed"),
+ MSG_NOT_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ String text = selenium.getText(LOC_FIRST_NAME);
+ assertTrue(text.endsWith("click to enter your name"),
+ MSG_INITIAL_VALUE_NAME);
+
+ selenium.click(LOC_FIRST_NAME);
+
+ attr = selenium.getAttribute(LOC_FIRST_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-edit"), MSG_RICH_INPLACE_EDIT);
+
+ selenium.type(LOC_FIRST_NAME_INPUT, "John Smith");
+ selenium.fireEvent(LOC_FIRST_NAME_INPUT, "blur");
+
+ attr = selenium.getAttribute(LOC_FIRST_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-changed"),
+ MSG_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ text = selenium.getText(LOC_FIRST_NAME);
+ assertTrue(text.endsWith("John Smith"), MSG_NAME_JOHN_SMITH);
+ }
+
+ /**
+ * Tests the input for email in the first example. First it checks the attribute
+ * "class" of the input. Then it clicks on text, edits the text and fires the
+ * event "blur" so that the text is changed permanently. After that, it
+ * checks the attribute "class" and verifies that the text was changed.
+ */
+ @Test
+ public void testFirstEmail() {
+ scrollIntoView(LOC_FIRST_EMAIL, true);
+
+ String attr = selenium.getAttribute(LOC_FIRST_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-view"), MSG_RICH_INPLACE_VIEW);
+ assertFalse(attr.contains("rich-inplace-changed"),
+ MSG_NOT_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ String text = selenium.getText(LOC_FIRST_EMAIL);
+ assertTrue(text.endsWith("click to enter your email"),
+ MSG_INITIAL_VALUE_EMAIL);
+
+ selenium.click(LOC_FIRST_EMAIL);
+
+ attr = selenium.getAttribute(LOC_FIRST_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-edit"), MSG_RICH_INPLACE_EDIT);
+
+ selenium.type(LOC_FIRST_EMAIL_INPUT, "john(a)smith.name");
+ selenium.fireEvent(LOC_FIRST_EMAIL_INPUT, "blur");
+
+ attr = selenium.getAttribute(LOC_FIRST_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-changed"),
+ MSG_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ text = selenium.getText(LOC_FIRST_EMAIL);
+ assertTrue(text.endsWith("john(a)smith.name"), MSG_EMAIL_JOHN_SMITH);
+ }
+
+ /**
+ * Tests the input for name in the second example. First it checks the attribute
+ * "class" of the input. Then it clicks on text, edits the text and
+ * clicks on the button so that the text is changed permanently. After that, it
+ * checks the attribute "class" and verifies that the text was changed.
+ */
+ @Test
+ public void testSecondName() {
+ scrollIntoView(LOC_SECOND_NAME, true);
+
+ String attr = selenium.getAttribute(LOC_SECOND_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-view"), MSG_RICH_INPLACE_VIEW);
+ assertFalse(attr.contains("rich-inplace-changed"),
+ MSG_NOT_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ String text = selenium.getText(LOC_SECOND_NAME);
+ assertTrue(text.endsWith("click to enter your name"),
+ MSG_INITIAL_VALUE_NAME);
+
+ selenium.click(LOC_SECOND_NAME);
+
+ attr = selenium.getAttribute(LOC_SECOND_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-edit"), MSG_RICH_INPLACE_EDIT);
+
+ selenium.type(LOC_SECOND_NAME_INPUT, "John Smith");
+ // TODO check that the button is visible
+ selenium.fireEvent(LOC_SECOND_NAME_OK, Event.MOUSEDOWN);
+
+ attr = selenium.getAttribute(LOC_SECOND_NAME + "@class");
+ assertTrue(attr.contains("rich-inplace-changed"),
+ MSG_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ text = selenium.getText(LOC_SECOND_NAME);
+ assertTrue(text.endsWith("John Smith"), MSG_NAME_JOHN_SMITH);
+ }
+
+ /**
+ * Tests the input for email in the second example. First it checks the attribute
+ * "class" of the input. Then it clicks on text, edits the text and
+ * clicks on the button so that the text is changed permanently. After that, it
+ * checks the attribute "class" and verifies that the text was changed.
+ */
+ @Test
+ public void testSecondEmail() {
+ scrollIntoView(LOC_SECOND_EMAIL, true);
+
+ String attr = selenium.getAttribute(LOC_SECOND_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-view"), MSG_RICH_INPLACE_VIEW);
+ assertFalse(attr.contains("rich-inplace-changed"),
+ MSG_NOT_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ String text = selenium.getText(LOC_SECOND_EMAIL);
+ assertTrue(text.endsWith("click to enter your email"),
+ MSG_INITIAL_VALUE_EMAIL);
+
+ selenium.click(LOC_SECOND_EMAIL);
+
+ attr = selenium.getAttribute(LOC_SECOND_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-edit"), MSG_RICH_INPLACE_EDIT);
+
+ selenium.type(LOC_SECOND_EMAIL_INPUT, "john(a)smith.name");
+ // TODO check that the button is visible
+ selenium.fireEvent(LOC_SECOND_EMAIL_OK, Event.MOUSEDOWN);
+
+ attr = selenium.getAttribute(LOC_SECOND_EMAIL + "@class");
+ assertTrue(attr.contains("rich-inplace-changed"),
+ MSG_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ text = selenium.getText(LOC_SECOND_EMAIL);
+ assertTrue(text.endsWith("john(a)smith.name"), MSG_EMAIL_JOHN_SMITH);
+ }
+
+ /**
+ * Tests the input in the third example. First it checks the attribute
+ * "class" of the input. Then it clicks on text, edits the text and
+ * clicks on the "Save" button so that the text is changed permanently.
+ * After that, it checks the attribute "class" and verifies that the text was
changed.
+ */
+ @Test
+ public void testThird() {
+ scrollIntoView(LOC_THIRD, true);
+
+ String attr = selenium.getAttribute(LOC_THIRD + "@class");
+ assertTrue(attr.contains("rich-inplace-view"), MSG_RICH_INPLACE_VIEW);
+ assertFalse(attr.contains("rich-inplace-changed"),
+ MSG_NOT_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ String text = selenium.getText(LOC_THIRD);
+ assertTrue(text.endsWith("Click here to edit"), MSG_INITIAL_VALUE_EMAIL);
+
+ selenium.click(LOC_THIRD);
+
+ attr = selenium.getAttribute(LOC_THIRD + "@class");
+ assertTrue(attr.contains("rich-inplace-edit"), MSG_RICH_INPLACE_EDIT);
+
+ selenium.type(LOC_THIRD_INPUT, "John Smith");
+ // TODO check that the button is visible
+ selenium.fireEvent(LOC_THIRD_SAVE, Event.MOUSEDOWN);
+
+ attr = selenium.getAttribute(LOC_THIRD + "@class");
+ assertTrue(attr.contains("rich-inplace-changed"),
+ MSG_RICH_INPLACE_CHANGED);
+ assertFalse(attr.contains("rich-inplace-edit"),
+ MSG_NOT_RICH_INPLACE_EDIT);
+
+ text = selenium.getText(LOC_THIRD);
+ assertTrue(text.endsWith("John Smith"), MSG_NAME_JOHN_SMITH);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testFirstInputSource() {
+ abstractTestSource(1, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testSecondInputSource() {
+ abstractTestSource(2, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testThirdInputSource() {
+ abstractTestSource(3, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 6, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceInput/InplaceInputTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/InplaceSelectTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/InplaceSelectTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/InplaceSelectTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,226 @@
+package org.jboss.richfaces.integrationTest.inplaceSelect;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.awt.event.KeyEvent;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the inplace select component.
+ * <ul>
+ * <li><b>TODO</b> test cancel buttons
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class InplaceSelectTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_CLICK_HERE_TO_EDIT = getMess("CLICK_HERE_TO_EDIT");
+ private final String MSG_DOUBLE_CLICK_TO_EDIT =
getMess("DOUBLE_CLICK_TO_EDIT");
+ private final String MSG_READ_ONLY = getMess("READ_ONLY");
+ private final String MSG_DISPLAY_NONE = getMess("DISPLAY_NONE");
+ private final String MSG_OPTION4_SELECTED = getMess("OPTION4_SELECTED");
+ private final String MSG_ARKANSAS_SELECTED = getMess("ARKANSAS_SELECTED");
+ private final String MSG_LITTLE_ROCK = getMess("LITTLE_ROCK");
+ private final String MSG_COUNT_OF_ITEMS = getMess("COUNT_OF_ITEMS");
+
+ // locators
+ private final String LOC_FIRST = getLoc("FIRST");
+ private final String LOC_FIRST_INPUT_1 = getLoc("FIRST_INPUT_1");
+ private final String LOC_FIRST_INPUT_2 = getLoc("FIRST_INPUT_2");
+ private final String LOC_FIRST_SELECT_VIEW = getLoc("FIRST_SELECT_VIEW");
+ private final String LOC_FIRST_LIST_SPAN = getLoc("FIRST_LIST_SPAN");
+ private final String LOC_FIRST_LIST_SPAN_N = getLoc("FIRST_LIST_SPAN_N");
+ private final String LOC_SECOND_OK_BUTTON = getLoc("SECOND_OK_BUTTON");
+
+ private final String LOC_SECOND = getLoc("SECOND");
+ private final String LOC_SECOND_INPUT_1 = getLoc("SECOND_INPUT_1");
+ private final String LOC_SECOND_INPUT_2 = getLoc("SECOND_INPUT_2");
+ private final String LOC_SECOND_LIST_SPAN = getLoc("SECOND_LIST_SPAN");
+ private final String LOC_SECOND_LIST_SPAN_N = getLoc("SECOND_LIST_SPAN_N");
+
+ private final String LOC_THIRD = getLoc("THIRD");
+ private final String LOC_THIRD_INPUT_1 = getLoc("THIRD_INPUT_1");
+ private final String LOC_THIRD_INPUT_2 = getLoc("THIRD_INPUT_2");
+ private final String LOC_THIRD_LIST_SPAN = getLoc("THIRD_LIST_SPAN");
+ private final String LOC_THIRD_LIST_SPAN_N = getLoc("THIRD_LIST_SPAN_N");
+ private final String LOC_THIRD_CAPITAL = getLoc("THIRD_CAPITAL");
+ private final String LOC_THIRD_SAVE_BUTTON = getLoc("THIRD_SAVE_BUTTON");
+
+ /**
+ * Tests the first example. It checks the "readonly" and "style"
attribute
+ * of the inplace select. Then it clicks into and out of the component and
+ * verifies that nothing changed. Consequently it checks the number of items
+ * in the component. In the end it selects the fourth item from the inplace
+ * select and checks the text.
+ */
+ @Test
+ public void testFirstInput() {
+ scrollIntoView(LOC_FIRST, true);
+
+ String text = selenium.getText(LOC_FIRST);
+ assertTrue(text.equals("Click here to edit"), MSG_CLICK_HERE_TO_EDIT);
+
+ String attr = selenium.getAttribute(LOC_FIRST_INPUT_1 + "@readonly");
+ assertTrue(attr.equals("readonly"), MSG_READ_ONLY);
+
+ attr = selenium.getAttribute(LOC_FIRST_INPUT_2 + "@style");
+ assertTrue(attr.contains("display: none;"), MSG_DISPLAY_NONE);
+
+ // expand and collapse the inplace select
+ selenium.click(LOC_FIRST_INPUT_1);
+ selenium.click(LOC_FIRST_INPUT_2);
+
+ text = selenium.getText(LOC_FIRST);
+ assertTrue(text.equals("Click here to edit"), MSG_CLICK_HERE_TO_EDIT);
+
+ // expand the component and select "Option 4"
+ selenium.click(LOC_FIRST);
+
+ int count = selenium.getXpathCount(LOC_FIRST_LIST_SPAN).intValue();
+ assertEquals(count, 5, MSG_COUNT_OF_ITEMS);
+
+ selenium.mouseMove(String.format(LOC_FIRST_LIST_SPAN_N, 4));
+
+ // TODO explore whether this isn't too low-level
+ selenium.getEval(format("selenium.browserbot.findElement(\"{0}\").component.save()",
LOC_FIRST_SELECT_VIEW));
+
+ // another way to select it
+ // selenium.selectWindow(null); // select the main window
+ // selenium.windowFocus();
+ // selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER));
+
+ text = selenium.getText(LOC_FIRST);
+ assertTrue(text.equals("Option 4"), MSG_OPTION4_SELECTED);
+ }
+
+ /**
+ * Tests the second example. It checks the "readonly" and "style"
attribute
+ * of the inplace select. Then it clicks into and out of the component and
+ * verifies that nothing changed. Consequently it checks the number of items
+ * in the component. In the end it selects the fourth item from the inplace
+ * select and checks the text.
+ */
+ @Test
+ public void testSecondInput() {
+ scrollIntoView(LOC_SECOND, true);
+
+ String text = selenium.getText(LOC_SECOND);
+ assertTrue(text.equals("Double Click to edit"),
+ MSG_DOUBLE_CLICK_TO_EDIT);
+
+ String attr = selenium.getAttribute(LOC_SECOND_INPUT_1 + "@readonly");
+ assertTrue(attr.equals("readonly"), MSG_READ_ONLY);
+
+ attr = selenium.getAttribute(LOC_SECOND_INPUT_2 + "@style");
+ assertTrue(attr.contains("display: none;"), MSG_DISPLAY_NONE);
+
+ // expand and collapse the inplace select
+ selenium.click(LOC_SECOND_INPUT_1);
+ selenium.click(LOC_SECOND_INPUT_2);
+
+ int count = selenium.getXpathCount(LOC_SECOND_LIST_SPAN).intValue();
+ assertEquals(count, 50, MSG_COUNT_OF_ITEMS);
+
+ text = selenium.getText(LOC_SECOND);
+ assertTrue(text.equals("Double Click to edit"),
+ MSG_DOUBLE_CLICK_TO_EDIT);
+
+ // expand the inplace select and click "Arkansas"
+ selenium.mouseMove(String.format(LOC_SECOND_LIST_SPAN_N, 4));
+ selenium.mouseDown(LOC_SECOND_OK_BUTTON);
+
+ text = selenium.getText(LOC_SECOND);
+ assertTrue(text.equals("Arkansas"), MSG_ARKANSAS_SELECTED);
+ }
+
+ /**
+ * Tests the third example. It checks the "readonly" and "style"
attribute
+ * of the inplace select. Then it clicks into and out of the component and
+ * verifies that nothing changed. Consequently it checks the number of items
+ * in the component. In the end it selects the fourth item from the inplace
+ * select and checks the text.
+ */
+ @Test
+ public void testThirdInput() {
+ scrollIntoView(LOC_THIRD, true);
+
+ String text = selenium.getText(LOC_THIRD);
+ assertTrue(text.equals("Click here to edit"), MSG_CLICK_HERE_TO_EDIT);
+
+ String attr = selenium.getAttribute(LOC_THIRD_INPUT_1 + "@readonly");
+ assertTrue(attr.equals("readonly"), MSG_READ_ONLY);
+
+ attr = selenium.getAttribute(LOC_THIRD_INPUT_2 + "@style");
+ assertTrue(attr.contains("display: none;"), MSG_DISPLAY_NONE);
+
+ // expand and collapse the inplace select
+ selenium.click(LOC_THIRD_INPUT_1);
+ selenium.click(LOC_THIRD_INPUT_2);
+
+ int count = selenium.getXpathCount(LOC_THIRD_LIST_SPAN).intValue();
+ assertEquals(count, 50, MSG_COUNT_OF_ITEMS);
+
+ text = selenium.getText(LOC_THIRD);
+ assertTrue(text.endsWith("Click here to edit"), MSG_CLICK_HERE_TO_EDIT);
+
+ // remember for waiting
+ text = selenium.getText(LOC_THIRD_CAPITAL);
+
+ // select "Arkansas"
+ selenium.mouseMove(String.format(LOC_THIRD_LIST_SPAN_N, 4));
+ selenium.mouseDown(LOC_THIRD_SAVE_BUTTON);
+
+ // wait for remembered value change
+ text = waitForTextChangesAndReturn(LOC_THIRD_CAPITAL, text);
+ assertTrue(text.endsWith("Little Rock"), MSG_LITTLE_ROCK);
+
+ text = selenium.getText(LOC_THIRD);
+ assertTrue(text.equals("Arkansas"), MSG_ARKANSAS_SELECTED);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testFirstInputSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testSecondInputSource() {
+ abstractTestSource(2, 2, "<", "ui:composition");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testThirdInputSource() {
+ abstractTestSource(3, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 7, 1, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inplaceSelect/InplaceSelectTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/InputNumberSliderTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/InputNumberSliderTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/InputNumberSliderTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,310 @@
+package org.jboss.richfaces.integrationTest.inputNumberSlider;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the input number slider.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class InputNumberSliderTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_HANDLE_N_PX = getMess("HANDLE_N_PX");
+ private final String MSG_TIP_N_PX = getMess("TIP_N_PX");
+ private final String MSG_TIP_SHOULD_BE_VISIBLE =
getMess("TIP_SHOULD_BE_VISIBLE");
+ private final String MSG_TIP_SHOULD_NOT_BE_VISIBLE =
getMess("TIP_SHOULD_NOT_BE_VISIBLE");
+ private final String MSG_OFFSETS_SHOULD_BE_THE_SAME =
getMess("OFFSETS_SHOULD_BE_THE_SAME");
+ private final String MSG_TIP_FIRST_HALF = getMess("TIP_FIRST_HALF");
+ private final String MSG_TIP_SECOND_HALF = getMess("TIP_SECOND_HALF");
+ private final String MSG_HANDLE_FIRST_HALF = getMess("HANDLE_FIRST_HALF");
+ private final String MSG_HANDLE_SECOND_HALF = getMess("HANDLE_SECOND_HALF");
+ private final String MSG_VALUE_IN_INPUT = getMess("VALUE_IN_INPUT");
+
+ // locators
+ private final String LOC_FIRST = String.format(getLoc("SLIDER_N"), 1);
+ private final String LOC_FIRST_HANDLE = String.format(
+ getLoc("SLIDER_N_HANDLE"), 1);
+ private final String LOC_FIRST_TIP = String.format(getLoc("SLIDER_N_TIP"),
+ 1);
+ private final String LOC_FIRST_INPUT = String.format(
+ getLoc("SLIDER_N_INPUT"), 1);
+
+ private final String LOC_SECOND = String.format(getLoc("SLIDER_N"), 2);
+ private final String LOC_SECOND_HANDLE = String.format(
+ getLoc("SLIDER_N_HANDLE"), 2);
+ private final String LOC_SECOND_TIP = String.format(getLoc("SLIDER_N_TIP"),
+ 2);
+ private final String LOC_SECOND_INPUT = String.format(
+ getLoc("SLIDER_N_INPUT"), 2);
+
+ private final String LOC_THIRD = String.format(getLoc("SLIDER_N"), 3);
+ private final String LOC_THIRD_HANDLE = String.format(
+ getLoc("SLIDER_N_HANDLE"), 3);
+ private final String LOC_THIRD_TIP = String.format(getLoc("SLIDER_N_TIP"),
+ 3);
+ private final String LOC_THIRD_INPUT = String.format(
+ getLoc("SLIDER_N_INPUT"), 3);
+
+ /**
+ * Tests clicking on the first slider. First, it checks the offset of the handler and
+ * tip box and checks that tip is hidden. Then it clics to the first half of the slider
+ * and verifies that the tip is visible while the mouse button is pressed.
+ * In the end it verifies that the handler and tip box moved.
+ */
+ @Test
+ public void testFirstSliderMouse() {
+ scrollIntoView(LOC_FIRST, true);
+
+ // TODO find out why it isn't offset by 75px but 74px
+ assertTrue(Math.abs(getOffset(LOC_FIRST_HANDLE + "@style") - 75) < 2,
+ String.format(MSG_HANDLE_N_PX, 75));
+
+ assertTrue(Math.abs(getOffset(LOC_FIRST_TIP + "@style") - 75) < 2,
+ String.format(MSG_TIP_N_PX, 75));
+
+ String attr = selenium.getAttribute(LOC_FIRST_TIP + "@style");
+ assertFalse(!attr.contains("display: none;"),
+ MSG_TIP_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.mouseDownAt(LOC_FIRST, "20,3");
+
+ attr = selenium.getAttribute(LOC_FIRST_TIP + "@style");
+ assertTrue(!attr.contains("display: none;"), MSG_TIP_SHOULD_BE_VISIBLE);
+
+ selenium.mouseUp(LOC_FIRST);
+
+ int tipOffset = getOffset(LOC_FIRST_TIP + "@style");
+ int handleOffset = getOffset(LOC_FIRST_HANDLE + "@style");
+ int value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - value * 1.5) < 5, MSG_TIP_FIRST_HALF);
+ assertTrue(handleOffset < 75, MSG_HANDLE_FIRST_HALF);
+ }
+
+ /**
+ * Tests typing into first slider's input box. First it checks the position of the
tip box and
+ * handle. Then it types a number from the first and second half of slider and checks
+ * the position of tip and
+ * handle. Then it clicks min value, max value, negative integer, an integer bigger than
+ * maximum, and decimal number and checks that the value of the input box changes to
the
+ * right value.
+ */
+ @Test
+ public void testFirstSliderKeyboard() {
+ scrollIntoView(LOC_FIRST, true);
+
+ selenium.type(LOC_FIRST_INPUT, "10");
+ int tipOffset = getOffset(LOC_FIRST_TIP + "@style");
+ int handleOffset = getOffset(LOC_FIRST_HANDLE + "@style");
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - 10 * 1.5) < 5, MSG_TIP_FIRST_HALF);
+ assertTrue(handleOffset < 75, MSG_HANDLE_FIRST_HALF);
+
+ selenium.type(LOC_FIRST_INPUT, "90");
+ tipOffset = getOffset(LOC_FIRST_TIP + "@style");
+ handleOffset = getOffset(LOC_FIRST_HANDLE + "@style");
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - 90 * 1.5) < 5, MSG_TIP_SECOND_HALF);
+ assertTrue(handleOffset > 75, MSG_HANDLE_SECOND_HALF);
+
+ selenium.type(LOC_FIRST_INPUT, "0");
+ int value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+ assertEquals(value, 0, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_FIRST_INPUT, "100");
+ value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+ assertEquals(value, 100, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_FIRST_INPUT, "-10");
+ value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+ assertEquals(value, 0, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_FIRST_INPUT, "130");
+ value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+ assertEquals(value, 100, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_FIRST_INPUT, "1.30");
+ value = Integer.parseInt(selenium.getValue(LOC_FIRST_INPUT));
+ assertEquals(value, 1, MSG_VALUE_IN_INPUT);
+ }
+
+ /**
+ * Tests clicking on the second slider. First, it checks the offset of the handler and
+ * tip box and checks that tip is hidden. Then it clics to the first half of the slider
+ * and verifies that the tip is invisible while the mouse button is pressed.
+ * In the end it verifies that the handler and tip box moved.
+ */
+ @Test
+ public void testSecondSlider() {
+ scrollIntoView(LOC_SECOND, true);
+
+ // TODO find out why it isn't offset by 96px
+ assertTrue(Math.abs(getOffset(LOC_SECOND_HANDLE + "@style") - 96) < 2,
+ String.format(MSG_HANDLE_N_PX, 96));
+
+ assertTrue(Math.abs(getOffset(LOC_SECOND_TIP + "@style") - 96) < 2,
+ String.format(MSG_TIP_N_PX, 96));
+
+ String attr = selenium.getAttribute(LOC_SECOND_TIP + "@style");
+ assertFalse(!attr.contains("display: none;"),
+ MSG_TIP_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.mouseDownAt(LOC_SECOND, "20,3");
+
+ attr = selenium.getAttribute(LOC_SECOND_TIP + "@style");
+ // it is a slider without tip so it cannot be visible
+ assertFalse(!attr.contains("display: none;"),
+ MSG_TIP_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.mouseUp(LOC_SECOND);
+
+ int tipOffset = getOffset(LOC_SECOND_TIP + "@style");
+ int handleOffset = getOffset(LOC_SECOND_HANDLE + "@style");
+ int value = Integer.parseInt(selenium.getValue(LOC_SECOND_INPUT));
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - value * 1.5) < 5, MSG_TIP_FIRST_HALF);
+ assertTrue(handleOffset < 75, MSG_HANDLE_FIRST_HALF);
+ }
+
+ /**
+ * Tests clicking on the third slider. First, it checks the offset of the handler and
+ * tip box and checks that tip is hidden. Then it clics to the first half of the slider
+ * and verifies that the tip is invisible while the mouse button is pressed.
+ * In the end it verifies that the handler and tip box moved.
+ */
+ @Test
+ public void testThirdSliderMouse() {
+ scrollIntoView(LOC_THIRD, true);
+
+ // TODO find out why it isn't offset by 75px but 74px
+ assertTrue(Math.abs(getOffset(LOC_THIRD_HANDLE + "@style") - 225) < 2,
+ String.format(MSG_HANDLE_N_PX, 225));
+
+ assertTrue(Math.abs(getOffset(LOC_THIRD_TIP + "@style") - 225) < 2,
+ String.format(MSG_TIP_N_PX, 225));
+
+ String attr = selenium.getAttribute(LOC_THIRD_TIP + "@style");
+ assertFalse(!attr.contains("display: none;"),
+ MSG_TIP_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.mouseDownAt(LOC_THIRD, "20,3");
+
+ attr = selenium.getAttribute(LOC_THIRD_TIP + "@style");
+ // slider does not use the tip so it has to be invisible
+ assertFalse(!attr.contains("display: none;"),
+ MSG_TIP_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.mouseUp(LOC_THIRD);
+
+ int tipOffset = getOffset(LOC_THIRD_TIP + "@style");
+ int handleOffset = getOffset(LOC_THIRD_HANDLE + "@style");
+ int value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - value * 0.46) < 12, MSG_TIP_FIRST_HALF);
+ assertTrue(handleOffset < 75, MSG_HANDLE_FIRST_HALF);
+ }
+
+ /**
+ * Tests typing into third slider's input box. First it checks the position of the
tip box and
+ * handle. Then it types a number from the first and second half of the slider
+ * and checks the position of tip and
+ * handle. Then it clicks min value, max value, negative integer, an integer bigger than
+ * maximum, and decimal number and checks that the value of the input box changes to
the
+ * right value. In the end it tries a number that should be rounded up and a number
+ * that should be rounded down.
+ */
+ @Test
+ public void testThirdSliderKeyboard() {
+ scrollIntoView(LOC_THIRD, true);
+
+ selenium.type(LOC_THIRD_INPUT, "10"); // 10 -> 0
+ int tipOffset = getOffset(LOC_THIRD_TIP + "@style");
+ int handleOffset = getOffset(LOC_THIRD_HANDLE + "@style");
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(tipOffset < 5, MSG_TIP_FIRST_HALF);
+ assertTrue(handleOffset < 75, MSG_HANDLE_FIRST_HALF);
+
+ selenium.type(LOC_THIRD_INPUT, "690"); // 690 -> 700
+ tipOffset = getOffset(LOC_THIRD_TIP + "@style");
+ handleOffset = getOffset(LOC_THIRD_HANDLE + "@style");
+
+ assertEquals(tipOffset, handleOffset, MSG_OFFSETS_SHOULD_BE_THE_SAME);
+ assertTrue(Math.abs(tipOffset - 0.69 * 450) < 5, MSG_TIP_SECOND_HALF);
+ assertTrue(handleOffset > 75, MSG_HANDLE_SECOND_HALF);
+
+ selenium.type(LOC_THIRD_INPUT, "0");
+ int value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 0, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "1000");
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 1000, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "-10"); // -10 -> 0
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 0, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "1200"); // 1200 -> 1000
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 1000, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "1.30"); // 1.30 -> 0
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 0, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "524"); // 524 -> 500
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 500, MSG_VALUE_IN_INPUT);
+
+ selenium.type(LOC_THIRD_INPUT, "525"); // 525 -> 500
+ value = Integer.parseInt(selenium.getValue(LOC_THIRD_INPUT));
+ assertEquals(value, 550, MSG_VALUE_IN_INPUT);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testSliderSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Returns the offset of the element. It requires a locator for an
+ * attribute, e.g. //div@style. It returns the 'left' attribute, e.g. for
+ * style="visibility: visible; left: 51px;" would return 51.
+ */
+ private int getOffset(String locator) {
+ StringBuilder attr = new StringBuilder(selenium.getAttribute(locator));
+ attr = attr.delete(0, attr.indexOf("left: "));
+ attr = attr.delete(0, 6);
+ attr = attr.delete(attr.indexOf("px;"), attr.length());
+ return Integer.parseInt(attr.toString());
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 8, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/inputNumberSlider/InputNumberSliderTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/jsFunction/JSFunctionTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/jsFunction/JSFunctionTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/jsFunction/JSFunctionTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,52 @@
+package org.jboss.richfaces.integrationTest.jsFunction;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class JSFunctionTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/jsFunction.jsf?c=jsFunction&tab=usage");
+ }
+
+ @Test
+ public void hoveringNames() {
+ openPage();
+
+ final String showName = getLoc("js-function--show-name");
+ String[] names = new String[] {getMess("js-function--name1"),
getMess("js-function--name2"), getMess("js-function--name3")};
+
+ for (final String name : names) {
+ String span = formatLoc("js-function--active-span", name);
+
+ Assert.assertTrue(StringUtils.isBlank(selenium.getText(showName)));
+
+ selenium.fireEvent(span, Event.MOUSEOVER);
+
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return name.equals(selenium.getText(showName));
+ }
+ });
+
+ selenium.fireEvent(span, Event.MOUSEOUT);
+
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return StringUtils.isBlank(selenium.getText(showName));
+ }
+ });
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/keepAlive/KeepAliveTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/keepAlive/KeepAliveTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/keepAlive/KeepAliveTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,103 @@
+package org.jboss.richfaces.integrationTest.keepAlive;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class KeepAliveTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/keepAlive.jsf?c=keepAlive&tab=usage");
+ }
+
+ private String header = getLoc("keep-alive--header");
+ private String inputIncorrect1 = getLoc("keep-alive--input--incorrect1");
+ private String inputIncorrect2 = getLoc("keep-alive--input--incorrect2");
+ private String buttonIncorrect = getLoc("keep-alive--button--incorrect");
+ private String outputIncorrect = getLoc("keep-alive--output--incorrect");
+ private String inputCorrect1 = getLoc("keep-alive--input--correct1");
+ private String inputCorrect2 = getLoc("keep-alive--input--correct2");
+ private String buttonCorrect = getLoc("keep-alive--button--correct");
+ private String outputCorrect = getLoc("keep-alive--output--correct");
+ private String firstNumber = getMess("keep-alive--input--first-number");
+ private String secondNumber = getMess("keep-alive--input--second-number");
+ private String expectedResultNumber =
getMess("keep-alive--output--expected-result-number");
+
+ @Test
+ public void usingIncorrectWay() {
+ openPage();
+ scrollIntoView(header, true);
+
+ // fill first two summands
+ selenium.type(inputIncorrect1, firstNumber);
+ selenium.fireEvent(inputIncorrect1, Event.KEYUP);
+ selenium.type(inputIncorrect2, secondNumber);
+ selenium.fireEvent(inputIncorrect2, Event.KEYUP);
+
+ // wait for "equal sign" button became enabled (lost disabled status)
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ boolean result = selenium.isElementPresent(format(
+ "{0}/@disabled", buttonIncorrect));
+ return !result;
+
+ }
+ });
+
+ // try to count result
+ selenium.click(buttonIncorrect);
+
+ // TODO: try to find exact way to catch "progress done" event
+ // waiting for summarization is processed
+ waitFor(5000);
+
+ // get a result and validate it
+ String result = selenium.getText(outputIncorrect);
+ Assert.assertTrue(StringUtils.isBlank(result));
+ }
+
+ @Test
+ public void usingCorrectWay() {
+ openPage();
+ scrollIntoView(header, true);
+
+ // fill first two summands
+ selenium.type(inputCorrect1, firstNumber);
+ selenium.fireEvent(inputCorrect1, Event.KEYUP);
+ selenium.type(inputCorrect2, secondNumber);
+ selenium.fireEvent(inputCorrect2, Event.KEYUP);
+
+ // wait for "equal sign" button became enabled (lost disabled status)
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ boolean result = selenium.isElementPresent(format(
+ "{0}/@disabled", buttonCorrect));
+ return !result;
+
+ }
+ });
+
+ // try to count result
+ selenium.click(buttonCorrect);
+
+ // waiting for result became right - If this not happen, waiting timeouts and test
fail
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ String result = selenium.getText(outputCorrect);
+ return expectedResultNumber.equals(result);
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/listShuttle/ListShuttleTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/listShuttle/ListShuttleTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/listShuttle/ListShuttleTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,361 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.listShuttle;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ListShuttleTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String toolbar =
"//fieldset[1]/div/form/table[1]/tbody/tr[1]";
+ private final String leftTable =
"//fieldset[1]/div/form/table[2]/tbody/tr[2]/td[1]/div/table/tbody/tr/td/div/div/table/tbody";
+ private final String leftButtons =
"//fieldset[1]/div/form/table[2]/tbody/tr[2]/td[2]/div";
+ private final String rightTable =
"//fieldset[1]/div/form/table[2]/tbody/tr[2]/td[3]/div/table/tbody/tr/td/div/div/table/tbody";
+ private final String rightButtons =
"//fieldset[1]/div/form/table[2]/tbody/tr[2]/td[4]/div";
+
+ @Test
+ public void testCopyButton() {
+ // get the count of items in left table
+ int leftCount = selenium.getXpathCount(leftTable + "/tr").intValue();
+ // get the count of items in right table
+ int rightCount = selenium.getXpathCount(rightTable +
"/tr").intValue();
+
+ // click the first item in left table
+ selenium.click(leftTable + "/tr[1]");
+
+ // check that the copy button is enabled
+ try {
+ String text = selenium.getAttribute(leftButtons +
"/div[3]@style");
+ assertFalse(text.contains("display: none;"), "Copy button
should not have style 'display: none;'");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // click 'Copy' button
+ selenium.click(leftButtons + "/div[3]");
+
+ int tmpInt = selenium.getXpathCount(leftTable + "/tr").intValue();
+ assertEquals(tmpInt, leftCount - 1, "In left table, one item should be
removed.");
+
+ tmpInt = selenium.getXpathCount(rightTable + "/tr").intValue();
+ assertEquals(tmpInt, rightCount + 1, "In right table, one item should be
added.");
+
+ // check that it was added also to the toolbar
+ tmpInt = selenium.getXpathCount(toolbar +
"/td[contains((a)class,'rich-toolbar-item')]").intValue();
+ assertEquals(tmpInt, rightCount + 1, "Number of items in toolbar.");
+ }
+
+ // @Test
+ // public void testCopyWithShift() {
+ // fail("TODO");
+ // }
+
+ // @Test
+ // public void testCopyWithCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testCopyAllButton() {
+ // click 'Remove All' button
+ selenium.click(leftButtons + "/div[7]");
+
+ // get the count of items in left table
+ int leftCount = selenium.getXpathCount(leftTable + "/tr").intValue();
+ // get the count of items in right table
+ int rightCount = selenium.getXpathCount(rightTable +
"/tr").intValue();
+
+ // check that the 'Copy All' button is enabled
+ try {
+ String text = selenium.getAttribute(leftButtons +
"/div[1]@style");
+ assertFalse(text.contains("display: none;"), "Copy all button
should not have style 'display: none;'");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // click 'Copy All' button
+ selenium.click(leftButtons + "/div[1]");
+
+ int count = selenium.getXpathCount(leftTable + "/tr").intValue();
+ assertEquals(count, 0, "All items from left table should be
removed.");
+
+ count = selenium.getXpathCount(rightTable + "/tr").intValue();
+ assertEquals(count, rightCount + leftCount, "All items should be added to
the right table.");
+
+ // check that they were added also to the toolbar
+ count = selenium.getXpathCount(toolbar +
"/td[contains((a)class,'rich-toolbar-item')]").intValue();
+ assertEquals(count, rightCount + leftCount, "Number of items in
toolbar.");
+ }
+
+ @Test
+ public void testRemoveButton() {
+ // get the count of items in left table
+ int leftCount = selenium.getXpathCount(leftTable + "/tr").intValue();
+ // get the count of items in right table
+ int rightCount = selenium.getXpathCount(rightTable +
"/tr").intValue();
+
+ // click the first item in the right table
+ selenium.click(rightTable + "/tr[1]");
+
+ // check that the 'Remove' button is enabled
+ try {
+ String text = selenium.getAttribute(leftButtons +
"/div[5]@style");
+ assertFalse(text.contains("display: none;"), "Remove button
should not have style 'display: none;'");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // click 'Remove' button
+ selenium.click(leftButtons + "/div[5]");
+
+ int tmpInt = selenium.getXpathCount(leftTable + "/tr").intValue();
+ assertEquals(tmpInt, leftCount + 1, "One item should be added to the left
table.");
+
+ tmpInt = selenium.getXpathCount(rightTable + "/tr").intValue();
+ assertEquals(tmpInt, rightCount - 1, "One item should be removed from the
right table.");
+
+ // check that one item was removed from toolbar
+ tmpInt = selenium.getXpathCount(toolbar +
"/td[contains((a)class,'rich-toolbar-item')]").intValue();
+ assertEquals(tmpInt, rightCount - 1, "Number of items in toolbar.");
+ }
+
+ // @Test
+ // public void testRemoveWithShift() {
+ // fail("TODO");
+ // }
+
+ // @Test
+ // public void testRemoveWithCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testRemoveAllButton() {
+ // get the count of items in left table
+ int leftCount = selenium.getXpathCount(leftTable + "/tr").intValue();
+ // get the count of items in right table
+ int rightCount = selenium.getXpathCount(rightTable +
"/tr").intValue();
+
+ // check that the 'Remove All' button is enabled
+ try {
+ String text = selenium.getAttribute(leftButtons +
"/div[7]@style");
+ assertFalse(text.contains("display: none;"), "Remove all
button should not have style 'display: none;'");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // click 'Remove All' button
+ selenium.click(leftButtons + "/div[7]");
+
+ int tmpInt = selenium.getXpathCount(leftTable + "/tr").intValue();
+ assertEquals(tmpInt, leftCount + rightCount, "All items should be added to
the left table.");
+
+ tmpInt = selenium.getXpathCount(rightTable + "/tr").intValue();
+ assertEquals(tmpInt, 0, "All items from right table should be
removed.");
+
+ // check that everything was removed from toolbar
+ tmpInt = selenium.getXpathCount(toolbar +
"/td[contains((a)class,'rich-toolbar-item')]").intValue();
+ assertEquals(tmpInt, 0, "Number of items in toolbar.");
+ }
+
+ @Test
+ public void testUpButton() {
+ // click 'Copy All' button
+ selenium.click(leftButtons + "/div[1]");
+
+ String firstItemFromTable = selenium.getText(rightTable +
"/tr[1]/td[2]");
+ String firstItemFromToolbar = selenium.getText(toolbar + "/td[1]");
+ String secondItemFromTable = selenium.getText(rightTable +
"/tr[2]/td[2]");
+ String secondItemFromToolbar = selenium.getText(toolbar + "/td[3]");
+
+ assertEquals(secondItemFromToolbar, secondItemFromTable,
+ "The second item in right table and toolbar should be the
same.");
+
+ // click the second item in the right table
+ selenium.click(rightTable + "/tr[2]");
+ // click the 'Up' button
+ selenium.click(rightButtons + "/div[3]");
+
+ // check items in the table
+ String tmpString = selenium.getText(rightTable + "/tr[1]/td[2]");
+ assertEquals(tmpString, secondItemFromTable, "The first and the second item
in the table should be swapped.");
+ tmpString = selenium.getText(rightTable + "/tr[2]/td[2]");
+ assertEquals(tmpString, firstItemFromTable, "The first and the second item
in the table should be swapped.");
+
+ // check items in the toolbar
+ tmpString = selenium.getText(toolbar + "/td[1]");
+ assertEquals(tmpString, secondItemFromToolbar,
+ "The first and the second item in the toolbar should be
swapped.");
+ tmpString = selenium.getText(toolbar + "/td[3]");
+ assertEquals(tmpString, firstItemFromToolbar, "The first and the second item
in the toolbar should be swapped.");
+ }
+
+ // @Test
+ // public void testUpWithShift() {
+ // fail("TODO");
+ // }
+
+ // @Test
+ // public void testUpWithCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testFirstButton() {
+ // click 'Copy All' button
+ selenium.click(leftButtons + "/div[1]");
+
+ String firstItemFromTable = selenium.getText(rightTable +
"/tr[1]/td[2]");
+ String firstItemFromToolbar = selenium.getText(toolbar + "/td[1]");
+ String secondItemFromTable = selenium.getText(rightTable +
"/tr[2]/td[2]");
+ String secondItemFromToolbar = selenium.getText(toolbar + "/td[3]");
+ String thirdItemFromTable = selenium.getText(rightTable +
"/tr[3]/td[2]");
+ String thirdItemFromToolbar = selenium.getText(toolbar + "/td[5]");
+
+ assertEquals(secondItemFromToolbar, secondItemFromTable,
+ "The second item in right table and toolbar should be the
same.");
+
+ // click the third item in the right table
+ selenium.click(rightTable + "/tr[3]");
+ // click the 'First' button
+ selenium.click(rightButtons + "/div[1]");
+
+ // check items in the table
+ String tmpString = selenium.getText(rightTable + "/tr[2]/td[2]");
+ assertEquals(tmpString, firstItemFromTable, "The first item from the table
should be now the second.");
+ tmpString = selenium.getText(rightTable + "/tr[3]/td[2]");
+ assertEquals(tmpString, secondItemFromTable, "The second item from the table
should be now the third.");
+ tmpString = selenium.getText(rightTable + "/tr[1]/td[2]");
+ assertEquals(tmpString, thirdItemFromTable, "The third item from the table
should be now the first.");
+
+ // check items in the toolbar
+ tmpString = selenium.getText(toolbar + "/td[3]");
+ assertEquals(tmpString, firstItemFromToolbar, "The first item from the
toolbar should be now the second.");
+ tmpString = selenium.getText(toolbar + "/td[5]");
+ assertEquals(tmpString, secondItemFromToolbar, "The second item from the
toolbar should be now the third.");
+ tmpString = selenium.getText(toolbar + "/td[1]");
+ assertEquals(tmpString, thirdItemFromToolbar, "The third item from the
toolbar should be now the first.");
+ }
+
+ @Test
+ public void testDownButton() {
+ // click 'Copy All' button
+ selenium.click(leftButtons + "/div[1]");
+
+ String firstItemFromTable = selenium.getText(rightTable +
"/tr[1]/td[2]");
+ String firstItemFromToolbar = selenium.getText(toolbar + "/td[1]");
+ String secondItemFromTable = selenium.getText(rightTable +
"/tr[2]/td[2]");
+ String secondItemFromToolbar = selenium.getText(toolbar + "/td[3]");
+
+ assertEquals(secondItemFromToolbar, secondItemFromTable,
+ "The second item in right table and toolbar should be the
same.");
+
+ // click the first item in the right table
+ selenium.click(rightTable + "/tr[1]");
+ // click the 'Down' button
+ selenium.click(rightButtons + "/div[5]");
+
+ // check items in the table
+ String tmpString = selenium.getText(rightTable + "/tr[1]/td[2]");
+ assertEquals(tmpString, secondItemFromTable, "The first and the second item
in the table should be swapped.");
+ tmpString = selenium.getText(rightTable + "/tr[2]/td[2]");
+ assertEquals(tmpString, firstItemFromTable, "The first and the second item
in the table should be swapped.");
+
+ // check items in the toolbar
+ tmpString = selenium.getText(toolbar + "/td[1]");
+ assertEquals(tmpString, secondItemFromToolbar,
+ "The first and the second item in the toolbar should be
swapped.");
+ tmpString = selenium.getText(toolbar + "/td[3]");
+ assertEquals(tmpString, firstItemFromToolbar, "The first and the second item
in the toolbar should be swapped.");
+ }
+
+ // @Test
+ // public void testDownWithShift() {
+ // fail("TODO");
+ // }
+
+ // @Test
+ // public void testDownWithCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testLastButton() {
+ // click 'Copy All' button
+ selenium.click(leftButtons + "/div[1]");
+
+ String firstItemFromTable = selenium.getText(rightTable +
"/tr[1]/td[2]");
+ String firstItemFromToolbar = selenium.getText(toolbar + "/td[1]");
+ String secondItemFromTable = selenium.getText(rightTable +
"/tr[2]/td[2]");
+ String secondItemFromToolbar = selenium.getText(toolbar + "/td[3]");
+ String thirdItemFromTable = selenium.getText(rightTable +
"/tr[3]/td[2]");
+ String thirdItemFromToolbar = selenium.getText(toolbar + "/td[5]");
+
+ assertEquals(secondItemFromToolbar, secondItemFromTable,
+ "The second item in right table and toolbar should be the
same.");
+
+ // click the first item in the right table
+ selenium.click(rightTable + "/tr[1]");
+ // click the 'Last' button
+ selenium.click(rightButtons + "/div[7]");
+
+ // check items in the table
+ String tmpString = selenium.getText(rightTable + "/tr[7]/td[2]");
+ assertEquals(tmpString, firstItemFromTable, "The first item from the table
should be now last.");
+ tmpString = selenium.getText(rightTable + "/tr[1]/td[2]");
+ assertEquals(tmpString, secondItemFromTable, "The second item from the table
should be now the first.");
+ tmpString = selenium.getText(rightTable + "/tr[2]/td[2]");
+ assertEquals(tmpString, thirdItemFromTable, "The third item from the table
should be now the second.");
+
+ // check items in the toolbar
+ tmpString = selenium.getText(toolbar + "/td[13]");
+ assertEquals(tmpString, firstItemFromToolbar, "The first item from the
toolbar should be now last.");
+ tmpString = selenium.getText(toolbar + "/td[1]");
+ assertEquals(tmpString, secondItemFromToolbar, "The second item from the
toolbar should be now the first.");
+ tmpString = selenium.getText(toolbar + "/td[3]");
+ assertEquals(tmpString, thirdItemFromToolbar, "The third item from the
toolbar should be now the second.");
+ }
+
+ @Test
+ public void testListShuttleSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richSelect", 1, "listShuttle component allows to
select items using two lists");
+ openComponent("List Shuttle");
+ scrollIntoView("//fieldset[1]/legend", true);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/log/LogTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/log/LogTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/log/LogTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,104 @@
+package org.jboss.richfaces.integrationTest.log;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class LogTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/log.jsf?c=log&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("log--header");
+ private String inputText = getLoc("log--input--text");
+ private String buttonClear = getLoc("log--button--clear");
+ private String outputText = getLoc("log--output--text");
+ private String outputDivs = getLoc("log--output--divs");
+ private String messageSample = getMess("log--input--sample");
+ private String messageDebug = getMess("log--output--debug");
+ private String messageClear = getMess("log--output--clear");
+
+ @Test
+ public void testFillLog() {
+ openPage();
+
+ fillLog();
+ }
+
+ @Test
+ public void testClearLog() {
+ openPage();
+
+ fillLog();
+ waitForLogStabilize();
+ clearLog();
+ }
+
+ @Test
+ public void testRepeatingFillAndClear() {
+ openPage();
+
+ fillLog();
+ waitForLogStabilize();
+ clearLog();
+ waitForLogStabilize();
+ fillLog();
+ waitForLogStabilize();
+ clearLog();
+ }
+
+ public void waitForLogStabilize() {
+ Wait.interval(3000).timeout(9000).until(new Condition() {
+ long count = -1;
+
+ public boolean isTrue() {
+ long actual = selenium.getXpathCount(outputDivs).longValue();
+ if (actual == count) {
+ return true;
+ }
+ count = actual;
+ return false;
+ }
+ });
+ }
+
+ public void fillLog() {
+ final long startCount = selenium.getXpathCount(outputDivs).longValue();
+
+ selenium.type(inputText, messageSample);
+ selenium.fireEvent(inputText, Event.KEYUP);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return selenium.getXpathCount(outputDivs).longValue() > startCount;
+ }
+ });
+
+ String output = selenium.getText(outputText);
+ Assert.assertTrue(output.contains(messageDebug));
+ }
+
+ public void clearLog() {
+ selenium.click(buttonClear);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ String output = selenium.getText(outputText);
+ return messageClear.equals(StringUtils.trim(output));
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/mediaOutput/MediaOutputTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/mediaOutput/MediaOutputTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/mediaOutput/MediaOutputTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,63 @@
+package org.jboss.richfaces.integrationTest.mediaOutput;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.utils.URLUtils;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class MediaOutputTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE =
"richfaces/mediaOutput.jsf?c=mediaOutput&tab=usage";
+
+ private String header = getLoc("media-output--header");
+
+ @Test
+ public void imageMd5DigestTest() throws IOException,
+ NoSuchAlgorithmException {
+ openPage();
+
+ waitForElement(getLoc("media-output--attribute--image-src"),
Wait.DEFAULT_TIMEOUT);
+
+ String imageSrc = selenium
+ .getAttribute(getLoc("media-output--attribute--image-src"));
+
+ String url = URLUtils
+ .buildUrl(contextRoot, contextPath, PAGE, imageSrc);
+
+ Assert.assertEquals(getMess("media-output--md5-digest--image"),
+ URLUtils.resourceMd5Digest(url));
+ }
+
+ @Test
+ public void flashMd5DigestTest() throws IOException,
+ NoSuchAlgorithmException {
+ openPage();
+
+ waitForElement(getLoc("media-output--attribute--flash-object-data"),
Wait.DEFAULT_TIMEOUT);
+
+ String flashData = selenium
+ .getAttribute(getLoc("media-output--attribute--flash-object-data"));
+
+ String url = URLUtils.buildUrl(contextRoot, contextPath, PAGE,
+ flashData);
+
+ Assert.assertEquals(getMess("media-output--md5-digest--flash"),
+ URLUtils.resourceMd5Digest(url));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/ModalPanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/ModalPanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/ModalPanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,266 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.modalPanel;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests modal panels.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ModalPanelTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMsg("COMPONENT_DESCRIPTION");
+
+ private final String MSG_FIRST_PANEL_NOT_VISIBLE =
getMsg("FIRST_PANEL_NOT_VISIBLE");
+ private final String MSG_FIRST_PANEL_VISIBLE = getMsg("FIRST_PANEL_VISIBLE");
+ private final String MSG_FIRST_PANEL_WRONG_CONTENT =
getMsg("FIRST_PANEL_WRONG_CONTENT");
+ private final String MSG_FIRST_PANEL_WRONG_HEADER =
getMsg("FIRST_PANEL_WRONG_HEADER");
+
+ private final String MSG_SECOND_PANEL_NOT_VISIBLE =
getMsg("SECOND_PANEL_NOT_VISIBLE");
+ private final String MSG_SECOND_PANEL_VISIBLE =
getMsg("SECOND_PANEL_VISIBLE");
+ private final String MSG_SECOND_PANEL_WRONG_CONTENT =
getMsg("SECOND_PANEL_WRONG_CONTENT");
+ private final String MSG_SECOND_PANEL_WRONG_HEADER =
getMsg("SECOND_PANEL_WRONG_HEADER");
+
+ // locators
+ private final String LOC_FIRST_EXAMPLE_HEADER =
getLoc("FIRST_EXAMPLE_HEADER");
+ private final String LOC_FIRST_PANEL = getLoc("FIRST_PANEL");
+ private final String LOC_FIRST_PANEL_POSITION =
getLoc("FIRST_PANEL_POSITION");
+ private final String LOC_FIRST_PANEL_OPEN = getLoc("FIRST_PANEL_OPEN");
+ private final String LOC_FIRST_PANEL_CLOSE = getLoc("FIRST_PANEL_CLOSE");
+ private final String LOC_FIRST_PANEL_HEADER = getLoc("FIRST_PANEL_HEADER");
+ private final String LOC_FIRST_PANEL_CONTENT = getLoc("FIRST_PANEL_CONTENT");
+
+ private final String LOC_SECOND_EXAMPLE_HEADER =
getLoc("SECOND_EXAMPLE_HEADER");
+ private final String LOC_SECOND_PANEL = getLoc("SECOND_PANEL");
+ private final String LOC_SECOND_PANEL_POSITION =
getLoc("SECOND_PANEL_POSITION");
+ private final String LOC_SECOND_PANEL_OPEN = getLoc("SECOND_PANEL_OPEN");
+ private final String LOC_SECOND_PANEL_CLOSE = getLoc("SECOND_PANEL_CLOSE");
+ private final String LOC_SECOND_PANEL_HEADER = getLoc("SECOND_PANEL_HEADER");
+ private final String LOC_SECOND_PANEL_CONTENT =
getLoc("SECOND_PANEL_CONTENT");
+
+ /**
+ * Tests the first panel. First it checks that the panel is invisible
+ * initially, then opens the panel and verifies it is visible. Then it
+ * checks the content of the panel's header and its content. In the end it
+ * closes the panel.
+ */
+ @Test
+ public void testFirstPanelOpenClose() {
+ String tmp = selenium.getAttribute(LOC_FIRST_PANEL + "@style");
+ assertFalse(!tmp.contains("display: none;"),
+ MSG_FIRST_PANEL_NOT_VISIBLE);
+
+ selenium.click(LOC_FIRST_PANEL_OPEN);
+
+ tmp = selenium.getAttribute(LOC_FIRST_PANEL + "@style");
+ assertTrue(!tmp.contains("display: none;"), MSG_FIRST_PANEL_VISIBLE);
+
+ tmp = selenium.getText(LOC_FIRST_PANEL_HEADER);
+ assertEquals(tmp, "Modal Panel", MSG_FIRST_PANEL_WRONG_HEADER);
+
+ tmp = selenium.getText(LOC_FIRST_PANEL_CONTENT);
+ assertEquals(
+ tmp,
+ "This panel is called using Component Control Component \n"
+ + "Closure link (X) works also through Component Control",
+ MSG_FIRST_PANEL_WRONG_CONTENT);
+
+ selenium.click(LOC_FIRST_PANEL_CLOSE);
+
+ tmp = selenium.getAttribute(LOC_FIRST_PANEL + "@style");
+ assertFalse(!tmp.contains("display: none;"),
+ MSG_FIRST_PANEL_NOT_VISIBLE);
+ }
+
+ /**
+ * Tests moving the panel. It opens the panel, gets panel's position on the
+ * page, and moves it 20px right, 20px down. Then it verifies the position,
+ * closes the panel, and opens it again. Then it verifies that the panel is
+ * locatet on the new position.
+ */
+ @Test
+ public void testFirstPanelMove() {
+ selenium.click(LOC_FIRST_PANEL_OPEN);
+
+ int firstX = getPosition("left", LOC_FIRST_PANEL_POSITION);
+ int firstY = getPosition("top", LOC_FIRST_PANEL_POSITION);
+
+ for (int i = 0; i < 40; i++) {
+ if (i % 2 == 0) {
+ selenium.dragAndDrop(LOC_FIRST_PANEL_HEADER, "+1,0");
+ } else {
+ selenium.dragAndDrop(LOC_FIRST_PANEL_HEADER, "0,+1");
+ }
+ }
+
+ int secondX = getPosition("left", LOC_FIRST_PANEL_POSITION);
+ int secondY = getPosition("top", LOC_FIRST_PANEL_POSITION);
+
+ assertEquals(secondX, firstX + 20, "sdlkfj");
+ assertEquals(secondY, firstY + 20, "skldfjsk");
+
+ selenium.click(LOC_FIRST_PANEL_CLOSE);
+ selenium.click(LOC_FIRST_PANEL_OPEN);
+
+ int thirdX = getPosition("left", LOC_FIRST_PANEL_POSITION);
+ int thirdY = getPosition("top", LOC_FIRST_PANEL_POSITION);
+
+ assertEquals(thirdX, secondX, "sdsdflkfj");
+ assertEquals(thirdY, secondY, "skldfsdfjsk");
+ }
+
+ /**
+ * Tests the second panel. First it checks that the panel is invisible
+ * initially, then opens the panel and verifies it is visible. Then it
+ * checks the content of the panel's header and its content. In the end it
+ * closes the panel.
+ */
+ @Test
+ public void testSecondPanelOpenClose() {
+ String tmp = selenium.getAttribute(LOC_SECOND_PANEL + "@style");
+ assertFalse(!tmp.contains("display: none;"),
+ MSG_SECOND_PANEL_NOT_VISIBLE);
+
+ selenium.click(LOC_SECOND_PANEL_OPEN);
+
+ tmp = selenium.getAttribute(LOC_SECOND_PANEL + "@style");
+ assertTrue(!tmp.contains("display: none;"), MSG_SECOND_PANEL_VISIBLE);
+
+ tmp = selenium.getText(LOC_SECOND_PANEL_HEADER);
+ assertEquals(tmp, "Modal Panel Title", MSG_SECOND_PANEL_WRONG_HEADER);
+
+ tmp = selenium.getText(LOC_SECOND_PANEL_CONTENT);
+ assertTrue(tmp.contains("Any JSF content might be inside the panel."),
+ MSG_SECOND_PANEL_WRONG_CONTENT);
+
+ selenium.click(LOC_SECOND_PANEL_CLOSE);
+
+ tmp = selenium.getAttribute(LOC_SECOND_PANEL + "@style");
+ assertFalse(!tmp.contains("display: none;"),
+ MSG_SECOND_PANEL_NOT_VISIBLE);
+ }
+
+ /**
+ * Tests moving the panel. It opens the panel, gets panel's position on the
+ * page, and moves it 20px right, 20px down. Then it verifies the position,
+ * closes the panel, and opens it again. Then it verifies that the panel is
+ * locatet on the new position.
+ */
+ @Test
+ public void testSecondPanelMove() {
+ selenium.click(LOC_SECOND_PANEL_OPEN);
+
+ int firstX = getPosition("left", LOC_SECOND_PANEL_POSITION);
+ int firstY = getPosition("top", LOC_SECOND_PANEL_POSITION);
+
+ for (int i = 0; i < 40; i++) {
+ if (i % 2 == 0) {
+ selenium.dragAndDrop(LOC_SECOND_PANEL_HEADER, "+1,0");
+ } else {
+ selenium.dragAndDrop(LOC_SECOND_PANEL_HEADER, "0,+1");
+ }
+ }
+
+ int secondX = getPosition("left", LOC_SECOND_PANEL_POSITION);
+ int secondY = getPosition("top", LOC_SECOND_PANEL_POSITION);
+
+ assertEquals(secondX, firstX + 20, "sdlkfj");
+ assertEquals(secondY, firstY + 20, "skldfjsk");
+
+ selenium.click(LOC_SECOND_PANEL_CLOSE);
+ selenium.click(LOC_SECOND_PANEL_OPEN);
+
+ int thirdX = getPosition("left", LOC_SECOND_PANEL_POSITION);
+ int thirdY = getPosition("top", LOC_SECOND_PANEL_POSITION);
+
+ assertEquals(thirdX, secondX, "sdsdflkfj");
+ assertEquals(thirdY, secondY, "skldfsdfjsk");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testFirstSource() {
+ String [] strings = new String [] {
+ "<rich:modalPanel id=\"panel\" width=\"350\"
height=\"100\">",
+ "<f:facet name=\"header\">",
+ "<h:graphicImage value=\"/images/modal/close.png\"
styleClass=\"hidelink\" id=\"hidelink\"/>",
+ "<h:outputText value=\"This panel is called using Component
Control Component\"></h:outputText>",
+ "<h:outputLink value=\"#\"
id=\"link\">",
+ };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testSecondSource() {
+ String [] strings = new String [] {
+ "function getRightTop(ref) {",
+ "<h:outputText value=\"Modal Panel Title\" />",
+ "<p>Any JSF content might be inside the panel. In case of using ",
+ "<a href=\"#\"
onclick=\"#{rich:component('mp')}.hide()\">hide this
panel</a>:",
+ "<f:verbatim>#</f:verbatim>{rich:component('mp')}.hide()</p>",
+ };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Returns one component of the position from the attribute "style".
+ *
+ * @param which
+ * one of left, right, top, bottom
+ * @param locator
+ * locator of the style attribute
+ * @return the value of the attribute in pixels
+ */
+ private int getPosition(String which, String locator) {
+ String attr = selenium.getAttribute(locator);
+ attr = attr.substring(attr.indexOf(which));
+ attr = attr.substring(which.length() + 2, attr.indexOf("px;"));
+ return Integer.parseInt(attr);
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Modal Panel");
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/modalPanel/ModalPanelTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/OrderingListTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/OrderingListTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/OrderingListTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,483 @@
+package org.jboss.richfaces.integrationTest.orderingList;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertEqualsNoOrder;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * <ul>
+ * <li><b>TODO</b> check that the number of lines does not change on
Up, Down,
+ * First, Last (+Ctrl/Shift)</li>
+ * <li><b>TODO</b> check that all buttons are disabled if no lines
selected</li>
+ * <li><b>TODO</b> refactor tests so that the common functionality is
in one
+ * method</li>
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class OrderingListTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String table =
"//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr[2]/td[1]/div/div[2]/table/tbody";
+ private final String buttons =
"//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr[2]/td[2]/div";
+ private final String selection =
"//fieldset[1]/div/form/table/tbody/tr/td[2]/div/div[2]";
+
+ @Test
+ public void testOrderingList() {
+ int count = selenium.getXpathCount(table + "/tr").intValue();
+ assertTrue(count > 0, "There are no lines in the table.");
+
+ waitFor(1000);
+ String text = selenium.getText(selection);
+ assertEquals(text, "No Songs Selected",
+ "Selection should not contain any name of song.");
+
+ }
+
+ @Test
+ public void testClickSingleFile() {
+ selenium.click(table + "/tr[1]");
+ String text = selenium.getText(table + "/tr[1]/td[1]");
+
+ waitFor(1000);
+ String text2 = selenium.getText(selection);
+
+ assertEquals(text2, text,
+ "Selected song is not shown in the selection panel.");
+ }
+
+ @Test
+ public void testClickMultipleFilesCtrl() {
+ String[] fromTable = new String[3];
+ String[] fromPanel = new String[3];
+
+ // click lines nr. 1, 3, and 5 in the table
+ selenium.click(table + "/tr[1]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[3]");
+ selenium.click(table + "/tr[5]");
+ selenium.controlKeyUp();
+
+ fromTable[0] = selenium.getText(table + "/tr[1]/td[1]");
+ fromTable[1] = selenium.getText(table + "/tr[3]/td[1]");
+ fromTable[2] = selenium.getText(table + "/tr[5]/td[1]");
+
+ waitFor(1000);
+
+ // get all selections from the panel on the right
+ for (int i = 0; i < 3; i++) {
+ fromPanel[i] = selenium.getText(selection + "/ul/li[" + (i + 1)
+ + "]");
+ }
+
+ assertEqualsNoOrder(fromPanel, fromTable,
+ "Items chosen in table should be also in the right panel.");
+ }
+
+ @Test
+ public void testClickMultipleFilesShift() {
+ String[] fromTable = new String[3];
+ String[] fromPanel = new String[3];
+
+ // click lines nr. 1 and 3 in the table
+ selenium.click(table + "/tr[1]");
+ selenium.shiftKeyDown();
+ selenium.click(table + "/tr[3]");
+ selenium.shiftKeyUp();
+
+ fromTable[0] = selenium.getText(table + "/tr[1]/td[1]");
+ fromTable[1] = selenium.getText(table + "/tr[2]/td[1]");
+ fromTable[2] = selenium.getText(table + "/tr[3]/td[1]");
+
+ waitFor(1000);
+
+ // get all selections from the panel on the right
+ for (int i = 0; i < 3; i++) {
+ fromPanel[i] = selenium.getText(selection + "/ul/li[" + (i + 1)
+ + "]");
+ }
+
+ assertEqualsNoOrder(fromPanel, fromTable,
+ "Items chosen in table should be also in the right panel.");
+ }
+
+ @Test
+ public void testUpSingleFile() {
+ String[] before = new String[2];
+ String[] after = new String[2];
+
+ before[0] = selenium.getText(table + "/tr[5]/td[1]");
+ before[1] = selenium.getText(table + "/tr[6]/td[1]");
+
+ // click line nr. 6 in the table
+ selenium.click(table + "/tr[6]");
+ // click the 'Up' button
+ selenium.click(buttons + "/div[3]");
+
+ after[0] = selenium.getText(table + "/tr[5]/td[1]");
+ after[1] = selenium.getText(table + "/tr[6]/td[1]");
+
+ assertEquals(after[0], before[1], "The sixth line should be now fifth.");
+ assertEquals(after[1], before[0], "The fifth line should be now sixth.");
+ }
+
+ @Test
+ public void testUpMultipleFilesShift() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+
+ before[0] = selenium.getText(table + "/tr[5]/td[1]");
+ before[1] = selenium.getText(table + "/tr[6]/td[1]");
+ before[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ // click line nr. 6 and 7 in the table
+ selenium.click(table + "/tr[6]");
+ selenium.shiftKeyDown();
+ selenium.click(table + "/tr[7]");
+ selenium.shiftKeyUp();
+
+ // click the 'Up' button (5,6,7 -> 6,7,5)
+ selenium.click(buttons + "/div[3]");
+
+ after[0] = selenium.getText(table + "/tr[5]/td[1]");
+ after[1] = selenium.getText(table + "/tr[6]/td[1]");
+ after[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ assertEquals(after[0], before[1], "The sixth line should be now fifth.");
+ assertEquals(after[1], before[2],
+ "The seventh line should be now sixth.");
+ assertEquals(after[2], before[0],
+ "The fifth line should be now seventh.");
+ }
+
+ @Test
+ public void testUpMultipleFilesCtrl() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+
+ before[0] = selenium.getText(table + "/tr[5]/td[1]");
+ before[1] = selenium.getText(table + "/tr[6]/td[1]");
+ before[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ // click line nr. 6 and 7 in the table
+ selenium.click(table + "/tr[6]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[7]");
+ selenium.controlKeyUp();
+
+ // click the 'Up' button (5,6,7 -> 6,7,5)
+ selenium.click(buttons + "/div[3]");
+
+ after[0] = selenium.getText(table + "/tr[5]/td[1]");
+ after[1] = selenium.getText(table + "/tr[6]/td[1]");
+ after[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ assertEquals(after[0], before[1], "The sixth line should be now fifth.");
+ assertEquals(after[1], before[2],
+ "The seventh line should be now sixth.");
+ assertEquals(after[2], before[0],
+ "The fifth line should be now seventh.");
+ }
+
+ @Test
+ public void testDownSingleFile() {
+ String[] before = new String[2];
+ String[] after = new String[2];
+
+ before[0] = selenium.getText(table + "/tr[6]/td[1]");
+ before[1] = selenium.getText(table + "/tr[7]/td[1]");
+
+ // click line nr. 6 in the table
+ selenium.click(table + "/tr[6]");
+ // click the 'Up' button
+ selenium.click(buttons + "/div[5]");
+
+ after[0] = selenium.getText(table + "/tr[6]/td[1]");
+ after[1] = selenium.getText(table + "/tr[7]/td[1]");
+
+ assertEquals(after[0], before[1],
+ "The sixth line should be now seventh.");
+ assertEquals(after[1], before[0],
+ "The seventh line should be now sixth.");
+ }
+
+ @Test
+ public void testDownMultipleFilesShift() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+
+ before[0] = selenium.getText(table + "/tr[5]/td[1]");
+ before[1] = selenium.getText(table + "/tr[6]/td[1]");
+ before[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ // click line nr. 5 and 6 in the table
+ selenium.click(table + "/tr[5]");
+ selenium.shiftKeyDown();
+ selenium.click(table + "/tr[6]");
+ selenium.shiftKeyUp();
+
+ // click the 'Up' button (5,6,7 -> 7,5,6)
+ selenium.click(buttons + "/div[5]");
+
+ after[0] = selenium.getText(table + "/tr[5]/td[1]");
+ after[1] = selenium.getText(table + "/tr[6]/td[1]");
+ after[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ assertEquals(after[0], before[2],
+ "The seventh line should be now fifth.");
+ assertEquals(after[1], before[0], "The fifth line should be now sixth.");
+ assertEquals(after[2], before[1],
+ "The sixth line should be now seventh.");
+ }
+
+ @Test
+ public void testDownMultipleFilesCtrl() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+
+ before[0] = selenium.getText(table + "/tr[5]/td[1]");
+ before[1] = selenium.getText(table + "/tr[6]/td[1]");
+ before[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ // click line nr. 5 and 6 in the table
+ selenium.click(table + "/tr[5]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[6]");
+ selenium.controlKeyUp();
+
+ // click the 'Up' button (5,6,7 -> 7,5,6)
+ selenium.click(buttons + "/div[5]");
+
+ after[0] = selenium.getText(table + "/tr[5]/td[1]");
+ after[1] = selenium.getText(table + "/tr[6]/td[1]");
+ after[2] = selenium.getText(table + "/tr[7]/td[1]");
+
+ assertEquals(after[0], before[2],
+ "The seventh line should be now fifth.");
+ assertEquals(after[1], before[0], "The fifth line should be now sixth.");
+ assertEquals(after[2], before[1],
+ "The sixth line should be now seventh.");
+ }
+
+ @Test
+ public void testLastSingleFile() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[2]/td[1]");
+ before[2] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click line nr. 1 in the table
+ selenium.click(table + "/tr[1]");
+ // click the 'Last' button (1,2,..,last-1,last --> 2,..,last,1)
+ selenium.click(buttons + "/div[7]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ after[2] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[1],
+ "The second line should be now first.");
+ assertEquals(after[1], before[2],
+ "The last line should be now last but one.");
+ assertEquals(after[2], before[0], "The first line should be now last.");
+ }
+
+ @Test
+ public void testLastMultipleFilesShift() {
+ String[] before = new String[4];
+ String[] after = new String[4];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[2]/td[1]");
+ before[2] = selenium.getText(table + "/tr[3]/td[1]");
+ before[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click line nr. 1 and 2 in the table
+ selenium.click(table + "/tr[1]");
+ selenium.shiftKeyDown();
+ selenium.click(table + "/tr[2]");
+ selenium.shiftKeyUp();
+
+ // click the 'Last' button (1,2,3,..,last --> 3,..,last,1,2)
+ selenium.click(buttons + "/div[7]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[" + (countOfLines - 2)
+ + "]/td[1]");
+ after[2] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ after[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[2], "The third line should be now first.");
+ assertEquals(after[1], before[3],
+ "The last line should be now last but two.");
+ assertEquals(after[2], before[0],
+ "The first line should be now last but one.");
+ assertEquals(after[3], before[1], "The second line should be now last.");
+ }
+
+ @Test
+ public void testLastMultipleFilesCtrl() {
+ String[] before = new String[4];
+ String[] after = new String[4];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[2]/td[1]");
+ before[2] = selenium.getText(table + "/tr[3]/td[1]");
+ before[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click line nr. 1 and 2 in the table
+ selenium.click(table + "/tr[1]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[2]");
+ selenium.controlKeyUp();
+
+ // click the 'Last' button (1,2,3,..,last --> 3,..,last,1,2)
+ selenium.click(buttons + "/div[7]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[" + (countOfLines - 2)
+ + "]/td[1]");
+ after[2] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ after[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[2], "The third line should be now first.");
+ assertEquals(after[1], before[3],
+ "The last line should be now last but two.");
+ assertEquals(after[2], before[0],
+ "The first line should be now last but one.");
+ assertEquals(after[3], before[1], "The second line should be now last.");
+ }
+
+ @Test
+ public void testFirstSingleFile() {
+ String[] before = new String[3];
+ String[] after = new String[3];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ before[2] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click the last line in the table
+ selenium.click(table + "/tr[" + countOfLines + "]");
+ // click the 'First' button (1...last-1,last --> last,1...last-1)
+ selenium.click(buttons + "/div[1]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[2]/td[1]");
+ after[2] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[2],
+ "The second line should be now first.");
+ assertEquals(after[1], before[0],
+ "The first line should be now second.");
+ assertEquals(after[2], before[1],
+ "The last but one line should be now last.");
+ }
+
+ @Test
+ public void testFirstMultipleFilesShift() {
+ String[] before = new String[4];
+ String[] after = new String[4];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[" + (countOfLines - 2)
+ + "]/td[1]");
+ before[2] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ before[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click last 2 lines in the table
+ selenium.click(table + "/tr[" + (countOfLines - 1) + "]");
+ selenium.shiftKeyDown();
+ selenium.click(table + "/tr[" + countOfLines + "]");
+ selenium.shiftKeyUp();
+
+ // click the 'First' button (1...last-2,last-1,last -->
+ // last-1,last,1...last-2)
+ selenium.click(buttons + "/div[1]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[2]/td[1]");
+ after[2] = selenium.getText(table + "/tr[3]/td[1]");
+ after[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[2],
+ "The last but one line should be now first.");
+ assertEquals(after[1], before[3], "The last line should be now second.");
+ assertEquals(after[2], before[0], "The first line should be now third.");
+ assertEquals(after[3], before[1],
+ "The last but two line should be now last.");
+ }
+
+ @Test
+ public void testFirstMultipleFilesCtrl() {
+ String[] before = new String[4];
+ String[] after = new String[4];
+ int countOfLines = selenium.getXpathCount(table + "/tr").intValue();
+
+ before[0] = selenium.getText(table + "/tr[1]/td[1]");
+ before[1] = selenium.getText(table + "/tr[" + (countOfLines - 2)
+ + "]/td[1]");
+ before[2] = selenium.getText(table + "/tr[" + (countOfLines - 1)
+ + "]/td[1]");
+ before[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ // click last 2 lines in the table
+ selenium.click(table + "/tr[" + (countOfLines - 1) + "]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[" + countOfLines + "]");
+ selenium.controlKeyUp();
+
+ // click the 'First' button (1...last-2,last-1,last -->
+ // last-1,last,1...last-2)
+ selenium.click(buttons + "/div[1]");
+
+ after[0] = selenium.getText(table + "/tr[1]/td[1]");
+ after[1] = selenium.getText(table + "/tr[2]/td[1]");
+ after[2] = selenium.getText(table + "/tr[3]/td[1]");
+ after[3] = selenium.getText(table + "/tr[" + countOfLines +
"]/td[1]");
+
+ assertEquals(after[0], before[2],
+ "The last but one line should be now first.");
+ assertEquals(after[1], before[3], "The last line should be now second.");
+ assertEquals(after[2], before[0], "The first line should be now third.");
+ assertEquals(after[3], before[1],
+ "The last but two line should be now last.");
+ }
+
+ @Test
+ public void testOrderingListSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the needed page and makes us sure that no lines are selected.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richSelect", 2,
+ "orderingList component allows to reorder items in a list.");
+
+ // ensure that no lines will be selected
+ selenium.click(table + "/tr[1]");
+ selenium.controlKeyDown();
+ selenium.click(table + "/tr[1]");
+ selenium.controlKeyUp();
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/orderingList/OrderingListTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/outputPanel/OutputPanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/outputPanel/OutputPanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/outputPanel/OutputPanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,83 @@
+package org.jboss.richfaces.integrationTest.outputPanel;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class OutputPanelTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/outputPanel.jsf?c=outputPanel&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("output-panel--header");
+ private String inputFail = getLoc("output-panel--input--fail");
+ private String inputSuccess = getLoc("output-panel--input--success");
+ private String textCorrect = getMess("output-panel--input--correct");
+ private String textWrong = getMess("output-panel--input--wrong");
+ private String textValidationError =
getMess("output-panel--output--validation-error");
+ private String formatMessage = getLoc("output-panel--output--message");
+
+ Condition isApprovedTextPresent = new Condition() {
+ public boolean isTrue() {
+ return true;
+ }
+ };
+
+ @Test
+ public void correctTextIntoFailInputTest() {
+ textIntoInput(inputFail, textCorrect, false, false);
+ }
+
+ @Test
+ public void wrongTextIntoFailInputTest() {
+ textIntoInput(inputFail, textWrong, false, false);
+ }
+
+ @Test
+ public void correctTextIntoSuccessInputTest() {
+ textIntoInput(inputSuccess, textCorrect, true, false);
+ }
+
+ @Test
+ public void wrongTextIntoSuccessInputTest() {
+ textIntoInput(inputSuccess, textWrong, false, true);
+ }
+
+ public void textIntoInput(String input, final String text,
+ final boolean textAppears, final boolean errorAppears) {
+ openPage();
+
+ selenium.type(input, text);
+ selenium.fireEvent(input, Event.KEYUP);
+
+ waitModelUpdate.dontFail().until(new Condition() {
+ public boolean isTrue() {
+ if (errorAppears || textAppears) {
+ return selenium.getXpathCount(format(formatMessage, text))
+ .intValue() > 0
+ || selenium.getXpathCount(
+ format(formatMessage, textValidationError))
+ .intValue() > 0;
+ }
+ return false;
+ }
+ });
+
+ Assert.assertEquals(textAppears ? 1 : 0, selenium.getXpathCount(format(
+ formatMessage, text)));
+ Assert.assertEquals(errorAppears ? 1 : 0, selenium
+ .getXpathCount(format(formatMessage, textValidationError)));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/Paint2DTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/Paint2DTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/Paint2DTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,281 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.paint2d;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.utils.URLUtils;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests Paint2D.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class Paint2DTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_TEXT_IN_IMAGE = getMsg("TEXT_IN_IMAGE");
+ private final String MSG_COLOR_OF_IMAGE = getMsg("COLOR_OF_IMAGE");
+ private final String MSG_SHADOW_SIZE = getMsg("SHADOW_SIZE");
+ private final String MSG_POSITION_OF_SLIDERS_HANDLE =
getMsg("POSITION_OF_SLIDERS_HANDLE");
+ private final String MSG_IMAGE_HASH = getMsg("IMAGE_HASH");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_INPUT_TEXT = getLoc("INPUT_TEXT");
+ private final String LOC_INPUT_COLOR = getLoc("INPUT_COLOR");
+ private final String LOC_BUTTON_APPLY_COLOR =
getLoc("BUTTON_APPLY_COLOR");
+ private final String LOC_SHADOW_SLIDER = getLoc("SHADOW_SLIDER");
+ private final String LOC_SHADOW_SLIDER_HANDLE =
getLoc("SHADOW_SLIDER_HANDLE");
+ private final String LOC_IMAGE = getLoc("IMAGE");
+
+ /**
+ * Tests all component on the page as they appear after the page is loaded.
+ * It checks the value in the text input, color, position of the slider, and
+ * hash code of the displayed image.
+ */
+ @Test
+ public void testInitialState() {
+ String text = selenium.getValue(LOC_INPUT_TEXT);
+ assertEquals(text, "Paint 2D", MSG_TEXT_IN_IMAGE);
+
+ text = selenium.getValue(LOC_INPUT_COLOR);
+ assertEquals(text, "0003e8", MSG_COLOR_OF_IMAGE);
+
+ int position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 127, MSG_SHADOW_SIZE);
+
+ assertImageHash("da54ff0e62ee33804e270a863d7001a4");
+ }
+
+ /**
+ * Tests changing text that should be in the image.
+ */
+ @Test
+ public void testChangeText() {
+ selenium.type(LOC_INPUT_TEXT, "XoXoXoXoX");
+ selenium.typeKeys(LOC_INPUT_TEXT, " "); // why is this necessary?
+ waitFor(1500);
+ assertImageHash("490d3b23e3f8c19290d3fbe351409be");
+
+ selenium.type(LOC_INPUT_TEXT, "Red Hat");
+ selenium.typeKeys(LOC_INPUT_TEXT, " "); // why is this necessary?
+ waitFor(1500);
+ assertImageHash("f56c23afa5207cfdea008d298480c750");
+ }
+
+ /**
+ * Tests changing color of the image.
+ */
+ @Test
+ public void testChangeColor() {
+ selenium.type(LOC_INPUT_COLOR, "fbff00");
+ selenium.click(LOC_BUTTON_APPLY_COLOR);
+
+ waitFor(1500);
+ assertImageHash("8f71bfc38cf5a26cdd548d3bb0f67291");
+
+ selenium.type(LOC_INPUT_COLOR, "00ffbb");
+ selenium.click(LOC_BUTTON_APPLY_COLOR);
+
+ waitFor(1500);
+ assertImageHash("6623c69f0397e00a955ed6bbb41e68e1");
+ }
+
+ /**
+ * Tests 3 positions of the slider. Verifies that the image changed.
+ */
+ @Test
+ public void testChangeShadow() {
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "0,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ int position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 0, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("6f15cab627ffd32528a66ef9731990a2");
+
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "96,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 96, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("19063b8ea31e2939699abd7dc92cf23e");
+
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "191,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 191, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("d9e5b2f628d230b7dc41b8ece16a83ff");
+ }
+
+ /**
+ * Tests changing text and color at the same time.
+ */
+ @Test
+ public void testChangeTextAndColor() {
+ selenium.type(LOC_INPUT_TEXT, "RichFaces");
+
+ selenium.type(LOC_INPUT_COLOR, "894bd6");
+ selenium.click(LOC_BUTTON_APPLY_COLOR);
+
+ waitFor(1500);
+ assertImageHash("a18ff3c5c86154fc1c3ca2a59e60bbbf");
+ }
+
+ /**
+ * Tests changing text and shadow at the same time.
+ */
+ @Test
+ public void testChangeTextAndShadow() {
+ selenium.type(LOC_INPUT_TEXT, "RichFaces");
+
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "159,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ int position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 159, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("74e992e595303a2f16c72a178a116189");
+ }
+
+ /**
+ * Tests changing color and shadow at the same time.
+ */
+ @Test
+ public void testChangeColorAndShadow() {
+ selenium.type(LOC_INPUT_COLOR, "6bab57");
+ selenium.click(LOC_BUTTON_APPLY_COLOR);
+
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "96,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ int position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 96, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("fd6a4503b768b0a197851b78948b497c");
+ }
+
+ /**
+ * Tests changing text, color and size of shadow.
+ */
+ @Test
+ public void testChangeAll() {
+ selenium.type(LOC_INPUT_TEXT, "RichFaces");
+
+ selenium.type(LOC_INPUT_COLOR, "e8a54c");
+ selenium.click(LOC_BUTTON_APPLY_COLOR);
+
+ selenium.mouseDownAt(LOC_SHADOW_SLIDER, "127,0");
+ selenium.mouseUp(LOC_SHADOW_SLIDER);
+ int position = Integer.parseInt(getStyle(LOC_SHADOW_SLIDER_HANDLE,
"left").replace("px", ""));
+ assertEquals(position, 127, MSG_POSITION_OF_SLIDERS_HANDLE);
+
+ waitFor(1500);
+ assertImageHash("f2016d2528b7d288f752bdaaefc7a666");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:panelGrid columns=\"3\"
width=\"100%\">", "<h:inputText
value=\"#{paintData.text}\">",
+ "<a4j:support event=\"onchange\"
reRender=\":painter\" />",
+ "<rich:inputNumberSlider showInput=\"false\"", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View PaintBean.java Source". It checks that the source code
is
+ * not visible, clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testPaintBeanSource() {
+ String[] strings = new String[] { "package
org.richfaces.demo.paint2d;", "import java.awt.Graphics2D;",
+ "public void paint(Graphics2D g2d, Object obj) {", "int
testLenght = data.text.length();",
+ "g2d.setPaint(new Color(color.getRed(),color.getGreen(),
color.getBlue(), 30));", };
+
+ abstractTestSource(1, "View PaintBean.java Source", strings);
+ }
+
+ /**
+ * Tests the "View PaintData.java Source". It checks that the source code
is
+ * not visible, clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testPaintDataSource() {
+ String[] strings = new String[] { "package
org.richfaces.demo.paint2d;",
+ "public class PaintData implements Serializable{", "public
int getColor() {", "return color;",
+ "public void setText(String text) {", };
+
+ abstractTestSource(1, "View PaintData.java Source", strings);
+ }
+
+ /**
+ * Verifies the hash code of the displayed image.
+ *
+ * @param hashCode
+ * expected hash code of the image
+ */
+ private void assertImageHash(String hashCode) {
+ // create URL of the image
+ int index = selenium.getLocation().indexOf('/', 7);
+ String tmp = selenium.getLocation().substring(0, index);
+ tmp += selenium.getAttribute(LOC_IMAGE + "@src");
+
+ try {
+ tmp = URLUtils.resourceMd5Digest(tmp);
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+
+ assertEquals(tmp, hashCode, MSG_IMAGE_HASH);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Paint2D");
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/paint2d/Paint2DTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelCustomizationTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelCustomizationTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelCustomizationTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,106 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.panel;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests customization of panels.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class PanelCustomizationTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_CUST_PANEL_HEADER = getMsg("CUST_PANEL_HEADER");
+ private final String MSG_CUST_CLASS_HEADER = getMsg("CUST_CLASS_HEADER");
+ private final String MSG_CUST_THIRD_HEADER = getMsg("CUST_THIRD_HEADER");
+ private final String MSG_CUST_THIRD_BODY = getMsg("CUST_THIRD_BODY");
+ private final String MSG_CUST_FOURTH_PANEL_BODY_SCROLLABLE =
getMsg("CUST_FOURTH_PANEL_BODY_SCROLLABLE");
+ private final String MSG_CUST_FIFTH_PANEL_NO_HEADER =
getMsg("CUST_FIFTH_PANEL_NO_HEADER");
+
+ // locators
+ private final String LOC_CUST_FIRST_PANEL_HEADER =
getLoc("CUST_FIRST_PANEL_HEADER");
+ private final String LOC_CUST_SECOND_PANEL_HEADER =
getLoc("CUST_SECOND_PANEL_HEADER");
+ private final String LOC_CUST_THIRD_PANEL_HEADER =
getLoc("CUST_THIRD_PANEL_HEADER");
+ private final String LOC_CUST_THIRD_PANEL_BODY =
getLoc("CUST_THIRD_PANEL_BODY");
+ private final String LOC_CUST_FOURTH_PANEL_BODY =
getLoc("CUST_FOURTH_PANEL_BODY");
+ private final String LOC_CUST_FOURTH_PANEL_HEADER =
getLoc("CUST_FOURTH_PANEL_HEADER");
+ private final String LOC_CUST_FIFTH_PANEL_PARTS =
getLoc("CUST_FIFTH_PANEL_PARTS");
+
+ @Test
+ public void testFirstPanel() {
+ String text = selenium.getText(LOC_CUST_FIRST_PANEL_HEADER);
+ assertEquals(text, "Panel #1. Changing Style Synchronously",
MSG_CUST_PANEL_HEADER);
+
+ text = selenium.getAttribute(LOC_CUST_FIRST_PANEL_HEADER + "@class");
+ assertTrue(text.contains("rich-panel-header"), MSG_CUST_CLASS_HEADER);
+ }
+
+ @Test
+ public void testSecondPanel() {
+ String text = selenium.getText(LOC_CUST_SECOND_PANEL_HEADER);
+ assertEquals(text, "Panel #2. Changing Style Synchronously",
MSG_CUST_PANEL_HEADER);
+
+ text = selenium.getAttribute(LOC_CUST_SECOND_PANEL_HEADER + "@class");
+ assertTrue(text.contains("rich-panel-header"), MSG_CUST_CLASS_HEADER);
+ }
+
+ @Test
+ public void testThirdPanel() {
+ String text = selenium.getAttribute(LOC_CUST_THIRD_PANEL_HEADER +
"@class");
+ assertTrue(text.contains("head2"), MSG_CUST_THIRD_HEADER);
+
+ text = selenium.getAttribute(LOC_CUST_THIRD_PANEL_BODY + "@class");
+ assertTrue(text.contains("body3"), MSG_CUST_THIRD_BODY);
+ }
+
+ @Test
+ public void testFourthPanel() {
+ String text = selenium.getText(LOC_CUST_FOURTH_PANEL_HEADER);
+ assertEquals(text, "Scrolling Text Panel", MSG_CUST_PANEL_HEADER);
+
+ text = selenium.getAttribute(LOC_CUST_FOURTH_PANEL_BODY + "@class");
+ assertTrue(text.contains("body3"),
MSG_CUST_FOURTH_PANEL_BODY_SCROLLABLE);
+ }
+
+ @Test
+ public void testFifthPanel() {
+ int count = selenium.getXpathCount(LOC_CUST_FIFTH_PANEL_PARTS).intValue();
+ assertEquals(count, 1, MSG_CUST_FIFTH_PANEL_NO_HEADER);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Panel");
+ openTab("Look Customization");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,168 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.panel;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests panels.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class PanelTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_FIRST_PANEL_TWO_PARTS =
getMsg("FIRST_PANEL_TWO_PARTS");
+ private final String MSG_FIRST_HEADER = getMsg("FIRST_HEADER");
+ private final String MSG_SECOND_PANEL_NO_HEADER =
getMsg("SECOND_PANEL_NO_HEADER");
+ private final String MSG_THIRD_PANEL_TWO_PARTS =
getMsg("THIRD_PANEL_TWO_PARTS");
+ private final String MSG_SHOULD_BE_TWO_NESTED_PANELS =
getMsg("SHOULD_BE_TWO_NESTED_PANELS");
+ private final String MSG_SIX_ITEMS_IN_LIST_LEFT =
getMsg("SIX_ITEMS_IN_LIST_LEFT");
+ private final String MSG_SIX_ITEMS_IN_LIST_RIGHT =
getMsg("SIX_ITEMS_IN_LIST_RIGHT");
+ private final String MSG_THIRD_HEADER = getMsg("THIRD_HEADER");
+
+ // locators
+ private final String LOC_FIRST_DIVS = getLoc("FIRST_DIVS");
+ private final String LOC_FIRST_HEADER = getLoc("FIRST_HEADER");
+ private final String LOC_SECOND_DIVS = getLoc("SECOND_DIVS");
+ private final String LOC_THIRD_DIVS = getLoc("THIRD_DIVS");
+ private final String LOC_THIRD_HEADER = getLoc("THIRD_HEADER");
+ private final String LOC_THIRD_NESTED_PANELS = getLoc("THIRD_NESTED_PANELS");
+ private final String LOC_LEFT_NESTED_PANEL_LIST_LI =
getLoc("LEFT_NESTED_PANEL_LIST_LI");
+ private final String LOC_RIGHT_NESTED_PANEL_LIST_LI =
getLoc("RIGHT_NESTED_PANEL_LIST_LI");
+
+ /**
+ * Tests the first example. It verifies that there are both header and body of the
panel.
+ * Then it checks the content of the header.
+ */
+ @Test
+ public void testFirstExample() {
+ int count = selenium.getXpathCount(LOC_FIRST_DIVS).intValue();
+ assertEquals(count, 2, MSG_FIRST_PANEL_TWO_PARTS);
+
+ String text = selenium.getText(LOC_FIRST_HEADER);
+ assertEquals(
+ text,
+ "Write your own custom rich components with built-in AJAX support",
+ MSG_FIRST_HEADER);
+ }
+
+ /**
+ * Tests the second example. It verifies that there is no header.
+ */
+ @Test
+ public void testSecondExample() {
+ int count = selenium.getXpathCount(LOC_SECOND_DIVS).intValue();
+ assertEquals(count, 1, MSG_SECOND_PANEL_NO_HEADER);
+ }
+
+ /**
+ * Tests the third example. Verifies that the main panel has both header and body and
checks
+ * its header. Then it checks the count of nested panels. For both left and right
nested
+ * panel it checks that there are 6 items in lists.
+ */
+ @Test
+ public void testThirdExample() {
+ int count = selenium.getXpathCount(LOC_THIRD_DIVS).intValue();
+ assertEquals(count, 2, MSG_THIRD_PANEL_TWO_PARTS);
+
+ String text = selenium.getText(LOC_THIRD_HEADER);
+ assertEquals(text, "", MSG_THIRD_HEADER);
+
+ count = selenium.getXpathCount(LOC_THIRD_NESTED_PANELS).intValue();
+ assertEquals(count, 2, MSG_SHOULD_BE_TWO_NESTED_PANELS);
+
+ count = selenium.getXpathCount(LOC_LEFT_NESTED_PANEL_LIST_LI)
+ .intValue();
+ assertEquals(count, 6, MSG_SIX_ITEMS_IN_LIST_LEFT);
+
+ count = selenium.getXpathCount(LOC_RIGHT_NESTED_PANEL_LIST_LI)
+ .intValue();
+ assertEquals(count, 6, MSG_SIX_ITEMS_IN_LIST_RIGHT);
+ }
+
+ /**
+ * Tests the "View Source" of the first example. It checks that the source
+ * code is not visible, clicks on the link, and checks 7 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:panel>",
+ "<f:facet name=\"header\">",
+ "Write your own custom rich components with built-in AJAX support",
+ "The CDK includes a code-generation facility and a",
+ "</rich:panel>", "</ui:composition>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" of the second example. It checks that the source
+ * code is not visible, clicks on the link, and checks 6 lines of source
+ * code.
+ */
+ @Test
+ public void testSecondExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "xmlns:a4j=\"http://richfaces.org/a4j\"",
+ "<rich:panel bodyClass=\"rich-laguna-panel-no-header\">",
+ "RichFaces is a library for adding rich user interface features to JSF",
+ "</rich:panel>", "</ui:composition>", };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" of the third example. It checks that the source
+ * code is not visible, clicks on the link, and checks 7 lines of source
+ * code.
+ */
+ @Test
+ public void testThirdExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:panel style=\"padding:0\"
headerClass=\"outpanelHeader\">",
+ "<f:facet name=\"header\">",
+ "<h2 align=\"center\"><h:outputText value=\"Benefits of
Using Ajax4jsf\" /></h2>",
+ "<rich:panel bodyClass=\"inpanelBody\">",
+ "<li>Production quality Open Source</li>",
"</ui:composition>", };
+
+ abstractTestSource(3, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Panel");
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panel/PanelTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/PanelBarTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/PanelBarTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/PanelBarTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,122 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.panelBar;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests panel bar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class PanelBarTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_HEADER_N = getMsg("HEADER_N");
+ private final String MSG_PANEL_N_SHOULD_BE_VISIBLE =
getMsg("PANEL_N_SHOULD_BE_VISIBLE");
+ private final String MSG_PANEL_N_SHOULD_NOT_BE_VISIBLE =
getMsg("PANEL_N_SHOULD_NOT_BE_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_HEADER_1_N = getLoc("HEADER_1_N");
+ private final String LOC_HEADER_2_N = getLoc("HEADER_2_N");
+ private final String LOC_CONTENT_N = getLoc("CONTENT_N");
+
+ /**
+ * Tests all components as they appear after page is loaded.
+ */
+ @Test
+ public void testInitialState() {
+ String[] headers = new String[] {
+ "Leverage the whole set of JSF benefits while working with AJAX",
+ "Add AJAX capability to existing JSF applications",
+ "Write your own custom rich components with built-in AJAX support",
+ "Package resources with the application's Java classes",
+ "Easily generate images on-the-fly",
+ "Create a modern rich user interface look-and-feel with skins-based
technology",
+ "Test the components, actions, listeners, and pages as you are creating
them" };
+
+ String text = selenium.getText(format(LOC_HEADER_2_N, 1));
+ assertEquals(text, headers[0], format(MSG_HEADER_N, 1));
+ assertTrue(isDisplayed(format(LOC_CONTENT_N, 1)), format(MSG_PANEL_N_SHOULD_BE_VISIBLE,
1));
+
+ for (int i = 2; i < 8; i++) {
+ text = selenium.getText(format(LOC_HEADER_1_N, i));
+ assertEquals(text, headers[i - 1], format(MSG_HEADER_N, i));
+ assertFalse(isDisplayed(format(LOC_CONTENT_N, i)),
format(MSG_PANEL_N_SHOULD_NOT_BE_VISIBLE, i));
+ }
+ }
+
+ /**
+ * Tests expanding each panel. It verifies that the clicked panel is visible
+ * and that none of the other panels is visible.
+ */
+ @Test
+ public void testExpanding() {
+ for (int i = 7; i > 0; i--) {
+ selenium.click(format(LOC_HEADER_1_N, i));
+
+ // check that clicked panel is visible
+ assertTrue(isDisplayed(format(LOC_CONTENT_N, i)),
format(MSG_PANEL_N_SHOULD_BE_VISIBLE, i));
+
+ // check that other panel are not visible
+ for (int j = 1; j < 8; j++) {
+ if (j == i) {
+ continue;
+ }
+ assertFalse(isDisplayed(format(LOC_CONTENT_N, j)),
format(MSG_PANEL_N_SHOULD_NOT_BE_VISIBLE, i));
+ }
+ }
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 6 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:panelBar height=\"400\" width=\"500\">",
+ "label=\"Leverage the whole set of JSF benefits while working with
AJAX\">",
+ "</rich:panelBarItem>", "</rich:panelBar>",
+ "</ui:composition>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Panel Bar");
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelBar/PanelBarTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/PanelMenuTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/PanelMenuTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/PanelMenuTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,274 @@
+package org.jboss.richfaces.integrationTest.panelMenu;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests panel menu.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class PanelMenuTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_CONTENT_OF_PANEL_ON_LOAD =
getMess("CONTENT_OF_PANEL_ON_LOAD");
+ private final String MSG_CONTENT_OF_PANEL = getMess("CONTENT_OF_PANEL");
+ private final String MSG_IMAGE_BEFORE_GROUP_NAME =
getMess("IMAGE_BEFORE_GROUP_NAME");
+ private final String MSG_NAME_OF_GROUP = getMess("NAME_OF_GROUP");
+ private final String MSG_IMAGE_AFTER_GROUP_NAME_DOWN =
getMess("IMAGE_AFTER_GROUP_NAME_DOWN");
+ private final String MSG_IMAGE_AFTER_GROUP_NAME_UP =
getMess("IMAGE_AFTER_GROUP_NAME_UP");
+ private final String MSG_IMAGE_AFTER_GROUP_NAME_SPACER =
getMess("IMAGE_AFTER_GROUP_NAME_SPACER");
+ private final String MSG_ITEM_M_N_NOT_VISIBLE =
getMess("ITEM_M_N_NOT_VISIBLE");
+ private final String MSG_ITEM_M_N_VISIBLE = getMess("ITEM_M_N_VISIBLE");
+ private final String MSG_IMAGE_BEFORE_ITEM_GRID =
getMess("IMAGE_BEFORE_ITEM_GRID");
+ private final String MSG_DISK_BEFORE_GROUP_NAME =
getMess("DISK_BEFORE_GROUP_NAME");
+ private final String MSG_SUBITEM_M_NOT_VISIBLE =
getMess("SUBITEM_M_NOT_VISIBLE");
+ private final String MSG_SUBITEM_M_VISIBLE = getMess("SUBITEM_M_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_PANEL = getLoc("PANEL");
+
+ private final String LOC_GROUP_N_IMAGE_BEFORE =
getLoc("GROUP_N_IMAGE_BEFORE");
+ private final String LOC_GROUP_N_IMAGE_AFTER = getLoc("GROUP_N_IMAGE_AFTER");
+ private final String LOC_GROUP_N_TEXT = getLoc("GROUP_N_TEXT");
+
+ private final String LOC_ITEM_M_N_IMAGE_BEFORE =
getLoc("ITEM_M_N_IMAGE_BEFORE");
+ private final String LOC_ITEM_M_N_IMAGE_AFTER =
getLoc("ITEM_M_N_IMAGE_AFTER");
+ private final String LOC_ITEM_M_N_TEXT = getLoc("ITEM_M_N_TEXT");
+ private final String LOC_ITEM_M_N_STYLE = getLoc("ITEM_M_N_STYLE");
+
+ private final String LOC_SUBITEM_GROUP = getLoc("SUBITEM_GROUP");
+ private final String LOC_SUBITEM_M_IMAGE_BEFORE =
formatLoc("SUBITEM_M_IMAGE_BEFORE_RELATIVE_TO_GROUP", LOC_SUBITEM_GROUP);
+ private final String LOC_SUBITEM_M_TEXT =
formatLoc("SUBITEM_M_TEXT_RELATIVE_TO_GROUP", LOC_SUBITEM_GROUP);
+ private final String LOC_SUBITEM_M_STYLE =
formatLoc("SUBITEM_M_STYLE_RELATIVE_TO_GROUP", LOC_SUBITEM_GROUP);
+
+ /**
+ * Tests the first group. First it checks the image before group name, group
+ * name, and image after group name. Then it checks that all items from the
+ * group are hidden. Then it expands the group and verifies that the image
+ * right of group name changed and that all items are visible. In the end it
+ * checks that there is a grid in front of each item.
+ */
+ @Test
+ public void testFirstGroup() {
+ abstractTestGroupN(1);
+ }
+
+ /**
+ * Tests the second group. First it checks the image before group name,
+ * group name, and image after group name. Then it checks that all items
+ * from the group are hidden. Then it expands the group and verifies that
+ * the image right of group name changed and that all items are visible. In
+ * the end it checks that there is a grid in front of each item.
+ */
+ @Test
+ public void testSecondGroup() {
+ abstractTestGroupN(2);
+ }
+
+ /**
+ * Tests the third group. First it checks the image before group name, group
+ * name, and image after group name. Then it checks that all items from the
+ * group are hidden. Then it expands the group and verifies that the image
+ * right of group name changed and that all items are visible. In the end it
+ * checks that there is a grid in front of each item.
+ */
+ @Test
+ public void testThirdGroup() {
+ abstractTestGroupN(3);
+ }
+
+ /**
+ * Tests subgroup (2.4). First it checks the image before group name, group
+ * name, and image after group name. Then it checks that all items from the
+ * group are hidden. Then it expands the group and verifies that the image
+ * right of group name is the same and that all items are visible. In the
+ * end it checks that there is a grid in front of each item.
+ */
+ @Test
+ public void testSubgroup() {
+ String text = null;
+
+ selenium.click(String.format(LOC_GROUP_N_TEXT, 2));
+
+ // image before subgroup name
+ text = selenium.getAttribute(String.format(LOC_ITEM_M_N_IMAGE_BEFORE, 2, 4));
+ assertTrue(text.contains("PanelMenuIconDisc"),
+ MSG_DISK_BEFORE_GROUP_NAME);
+
+ // subgroup name
+ text = selenium.getText(String.format(LOC_ITEM_M_N_TEXT, 2, 4));
+ assertEquals(text, "Group 2.4", MSG_NAME_OF_GROUP);
+
+ // image after subgroup name
+ text = selenium.getAttribute(String.format(LOC_ITEM_M_N_IMAGE_AFTER, 2,
+ 4));
+ assertTrue(text.contains("PanelMenuIconSpacer"),
+ MSG_IMAGE_AFTER_GROUP_NAME_SPACER);
+
+ for (int i = 1; i < 4; i++) {
+ text = selenium.getAttribute(String.format(LOC_SUBITEM_M_STYLE, i));
+ assertFalse(!text.contains("display: none;"), String.format(
+ MSG_SUBITEM_M_NOT_VISIBLE, i));
+ }
+
+ // click Group 2.4
+ selenium.click(String.format(LOC_ITEM_M_N_TEXT, 2, 4));
+
+ // image after subgroup name
+ text = selenium.getAttribute(String.format(LOC_ITEM_M_N_IMAGE_AFTER, 2,
+ 4));
+ assertTrue(text.contains("PanelMenuIconSpacer"),
+ MSG_IMAGE_AFTER_GROUP_NAME_SPACER);
+
+ for (int i = 1; i < 4; i++) {
+ // check that items are not hidden
+ try {
+ text = selenium.getAttribute(String.format(LOC_SUBITEM_M_STYLE,
+ i));
+ assertTrue(!text.contains("display: none;"), String.format(
+ MSG_SUBITEM_M_VISIBLE, i));
+ } catch (Exception e) {
+ // OK -- there is no style attribute
+ }
+
+ // check the image left of the item
+ System.out.println("--------------"
+ + String.format(LOC_SUBITEM_M_IMAGE_BEFORE, i) + "-----");
+ text = selenium.getAttribute(String.format(
+ LOC_SUBITEM_M_IMAGE_BEFORE, i));
+ System.out.println("--------------" + text + "-----");
+ assertTrue(text.contains("PanelMenuIconGrid"),
+ MSG_IMAGE_BEFORE_ITEM_GRID);
+ }
+ }
+
+ /**
+ * Tests content of the panel. First it verifies the default string in the
+ * panel. Then it goes through first three items from each group and
+ * verifies the text in the panel. After that it clicks all items in group
+ * 2.4 and checks content of the panel again.
+ */
+ @Test
+ public void testPanel() {
+ String text = selenium.getText(LOC_PANEL);
+ assertEquals(text, "Nothing selected", MSG_CONTENT_OF_PANEL_ON_LOAD);
+
+ // check items on the first level (1.1, 1.2, etc.)
+ for (int i = 1; i < 4; i++) {
+ selenium.click(String.format(LOC_GROUP_N_TEXT, i));
+ for (int j = 1; j < 4; j++) {
+ selenium.click(String.format(LOC_ITEM_M_N_TEXT, i, j));
+ waitFor(500); // it use Ajax mode
+ text = selenium.getText(LOC_PANEL);
+ assertEquals(text, String.format("Item %d.%d selected", i, j),
+ MSG_CONTENT_OF_PANEL);
+ }
+ }
+
+ // check items on the second level (2.4.1, 2.4.2, 2.4.3)
+ selenium.click(String.format(LOC_ITEM_M_N_TEXT, 2, 4));
+ for (int i = 1; i < 4; i++) {
+ selenium.click(String.format(LOC_SUBITEM_M_TEXT, i));
+ waitFor(500); // it use Ajax mode
+ text = selenium.getText(LOC_PANEL);
+ assertEquals(text, String.format("Item 2.4.%d selected", i),
+ MSG_CONTENT_OF_PANEL);
+ }
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 7 lines of source code.
+ */
+ @Test
+ public void testExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form id=\"form\">",
+ "iconExpandedTopGroup=\"chevronUp\"
iconGroupTopPosition=\"right\"",
+ "<f:param name=\"current\" value=\"Item
1.1\"/>",
+ "<rich:panel bodyClass=\"rich-laguna-panel-no-header\">",
+ "<h:outputText value=\"#{panelMenu.current} selected\"
id=\"current\"/>",
+ "</ui:composition>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests one group.
+ *
+ * @param index
+ * number of group to be tested
+ */
+ private void abstractTestGroupN(int index) {
+ String text = null;
+
+ // spacer before group name
+ text = selenium.getAttribute(String.format(LOC_GROUP_N_IMAGE_BEFORE,
+ index));
+ assertTrue(text.contains("PanelMenuIconSpacer"),
+ MSG_IMAGE_BEFORE_GROUP_NAME);
+
+ // group name
+ text = selenium.getText(String.format(LOC_GROUP_N_TEXT, index));
+ assertEquals(text, "Group " + index, MSG_NAME_OF_GROUP);
+
+ // image after group name
+ text = selenium.getAttribute(String.format(LOC_GROUP_N_IMAGE_AFTER,
+ index));
+ assertTrue(text.contains("PanelMenuIconChevronDown"),
+ MSG_IMAGE_AFTER_GROUP_NAME_DOWN);
+
+ for (int i = 1; i < 4; i++) {
+ text = selenium.getAttribute(String.format(LOC_ITEM_M_N_STYLE,
+ index, i));
+ assertFalse(!text.contains("display: none;"), String.format(
+ MSG_ITEM_M_N_NOT_VISIBLE, index, i));
+ }
+
+ selenium.click(String.format(LOC_GROUP_N_TEXT, index));
+
+ // image after group name
+ text = selenium.getAttribute(String.format(LOC_GROUP_N_IMAGE_AFTER,
+ index));
+ assertTrue(text.contains("PanelMenuIconChevronUp"),
+ MSG_IMAGE_AFTER_GROUP_NAME_UP);
+
+ for (int i = 1; i < 4; i++) {
+ // check that items are not hidden
+ try {
+ text = selenium.getAttribute(String.format(LOC_ITEM_M_N_STYLE,
+ index, i));
+ assertTrue(!text.contains("display: none;"), String.format(
+ MSG_ITEM_M_N_VISIBLE, index, i));
+ } catch (Exception e) {
+ // OK -- there is no style attribute
+ }
+
+ // check the image left of the item
+ text = selenium.getAttribute(String.format(
+ LOC_ITEM_M_N_IMAGE_BEFORE, index, i));
+ assertTrue(text.contains("PanelMenuIconGrid"),
+ MSG_IMAGE_BEFORE_ITEM_GRID);
+ }
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+// selenium.allowNativeXpath("true");
+ super.loadPage("richOutputs", 5, 1, MSG_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/panelMenu/PanelMenuTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/PickListTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/PickListTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/PickListTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,274 @@
+package org.jboss.richfaces.integrationTest.pickList;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * <ul>
+ * <li><b>TODO</b> check that buttons are enabled and disabled
properly</li>
+ * <li><b>TODO</b> implement tests for multiple files with shift and
control key
+ * </li>
+ * <li><b>TODO</b> check not only one table, but both</li>
+ * <li><b>TODO</b> check the header of panel with capitals</li>
+ * </ul>
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class PickListTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String leftUpperTable =
"//fieldset[1]/div/table/tbody/tr/td[1]/div/table/tbody/tr/td/div/div/table/tbody";
+ private final String upperButtons =
"//fieldset[1]/div/table/tbody/tr/td[2]/div";
+ private final String rightUpperTable =
"//fieldset[1]/div/table/tbody/tr/td[3]/div/table/tbody/tr/td/div/div/table/tbody";
+
+ private final String leftLowerTable =
"//fieldset[2]/div/form/table/tbody/tr/td[1]/table/tbody/tr/td[1]/div/table/tbody/tr/td/div/div/table/tbody";
+ private final String lowerButtons =
"//fieldset[2]/div/form/table/tbody/tr/td[1]/table/tbody/tr/td[2]/div";
+ private final String rightLowerTable =
"//fieldset[2]/div/form/table/tbody/tr/td[1]/table/tbody/tr/td[3]/div/table/tbody/tr/td/div/div/table/tbody";
+ private final String chosenOptions =
"//fieldset[2]/div/form/table/tbody/tr/td[2]/div/div[2]";
+
+ @Test
+ public void testUpperPickList() {
+ int count = selenium.getXpathCount(leftUpperTable + "/tr").intValue();
+ assertTrue(count > 0, "There are no lines in the upper left table.");
+
+ count = selenium.getXpathCount(rightUpperTable + "/tr").intValue();
+ assertEquals(count, 0,
+ "There should be no lines in the upper right table.");
+ }
+
+ @Test
+ public void testUpperCopySingleFile() {
+ int count = selenium.getXpathCount(leftUpperTable + "/tr").intValue();
+
+ // click the first line
+ selenium.click(leftUpperTable + "/tr[1]");
+ // click 'Copy'
+ selenium.click(upperButtons + "/div[3]");
+
+ int newCount = selenium.getXpathCount(leftUpperTable + "/tr")
+ .intValue();
+ assertEquals(newCount, count - 1,
+ "There should be less lines in the left table.");
+ }
+
+ // @Test
+ // public void testUpperCopyMultipleFilesShift() {
+ // fail("TODO");
+ // }
+ //
+ // @Test
+ // public void testUpperCopyMultipleFilesCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testUpperCopyAll() {
+ int count = selenium.getXpathCount(leftUpperTable + "/tr").intValue();
+
+ // click 'Copy All'
+ selenium.click(upperButtons + "/div[1]");
+
+ int newCount = selenium.getXpathCount(leftUpperTable + "/tr")
+ .intValue();
+ assertEquals(newCount, 0, "There should be no lines in the left table.");
+
+ newCount = selenium.getXpathCount(rightUpperTable + "/tr").intValue();
+ assertEquals(newCount, count,
+ "All items from left table should be now in the right table.");
+ }
+
+ @Test
+ public void testUpperRemoveSingleFile() {
+ // click 'Copy All'
+ selenium.click(upperButtons + "/div[1]");
+
+ int count = selenium.getXpathCount(rightUpperTable + "/tr").intValue();
+
+ // click the first line
+ selenium.click(rightUpperTable + "/tr[1]");
+ // click 'Remove'
+ selenium.click(upperButtons + "/div[5]");
+
+ int newCount = selenium.getXpathCount(rightUpperTable + "/tr")
+ .intValue();
+ assertEquals(newCount, count - 1,
+ "There should be less lines in the right table.");
+ }
+
+ // @Test
+ // public void testUpperRemoveMultipleFilesShift() {
+ // fail("TODO");
+ // }
+ //
+ // @Test
+ // public void testUpperRemoveMultipleFilesCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testUpperRemoveAll() {
+ int count = selenium.getXpathCount(leftUpperTable + "/tr").intValue();
+
+ // click 'Copy All'
+ selenium.click(upperButtons + "/div[1]");
+
+ // click 'Remove All'
+ selenium.click(upperButtons + "/div[7]");
+
+ int newCount = selenium.getXpathCount(rightUpperTable + "/tr")
+ .intValue();
+ assertEquals(newCount, 0,
+ "There should be no lines in the right table.");
+
+ newCount = selenium.getXpathCount(leftUpperTable + "/tr").intValue();
+ assertEquals(newCount, count,
+ "All items from right table should be now in the left table.");
+ }
+
+ @Test
+ public void testLowerPickList() {
+ int count = selenium.getXpathCount(leftLowerTable + "/tr").intValue();
+ assertTrue(count > 0, "There are no lines in the lower left table.");
+
+ count = selenium.getXpathCount(rightLowerTable + "/tr").intValue();
+ assertEquals(count, 0,
+ "There should be no lines in the lower right table.");
+
+ boolean empty = !selenium.isElementPresent(chosenOptions + "/ul");
+ assertTrue(empty, "Chosen options should not contain any items.");
+ }
+
+ @Test
+ public void testLowerCopySingleFile() {
+ int count = selenium.getXpathCount(leftLowerTable + "/tr").intValue();
+
+ // click the first line
+ selenium.click(leftLowerTable + "/tr[1]");
+ // click 'Copy'
+ selenium.click(lowerButtons + "/div[3]");
+
+ int newCount = selenium.getXpathCount(leftLowerTable + "/tr")
+ .intValue();
+ assertEquals(newCount, count - 1,
+ "There should be less lines in the left table.");
+
+ count = selenium.getXpathCount(chosenOptions + "/ul/li").intValue();
+ assertEquals(count, 1, "There should be only one capital city.");
+
+ String capital = selenium.getText(chosenOptions + "/ul/li[1]");
+ assertEquals(capital, "Montgomery", "Capital of Alaska.");
+ }
+
+ // @Test
+ // public void testLowerCopyMultipleFilesShift() {
+ // fail("TODO");
+ // }
+ //
+ // @Test
+ // public void testLowerCopyMultipleFilesCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testLowerCopyAll() {
+ int count = selenium.getXpathCount(leftLowerTable + "/tr").intValue();
+
+ // click 'Copy All'
+ selenium.click(lowerButtons + "/div[1]");
+
+ int newCount = selenium.getXpathCount(leftLowerTable + "/tr")
+ .intValue();
+ assertEquals(newCount, 0, "There should be no lines in the left table.");
+
+ newCount = selenium.getXpathCount(rightLowerTable + "/tr").intValue();
+ assertEquals(newCount, count,
+ "All items from left table should be now in the right table.");
+
+ newCount = selenium.getXpathCount(chosenOptions + "/ul/li").intValue();
+ assertEquals(newCount, count,
+ "Not all capital cities were displayed in the panel.");
+ }
+
+ @Test
+ public void testLowerRemoveSingleFile() {
+ // click 'Copy All'
+ selenium.click(lowerButtons + "/div[1]");
+
+ int count = selenium.getXpathCount(rightLowerTable + "/tr").intValue();
+
+ // click the first line
+ selenium.click(rightLowerTable + "/tr[1]");
+ // click 'Remove'
+ selenium.click(lowerButtons + "/div[5]");
+
+ int newCount = selenium.getXpathCount(rightLowerTable + "/tr")
+ .intValue();
+ assertEquals(newCount, count - 1,
+ "There should be less lines in the right table.");
+
+ newCount = selenium.getXpathCount(chosenOptions + "/ul/li").intValue();
+ assertEquals(newCount, count - 1,
+ "The capital city was not removed from panel.");
+ }
+
+ // @Test
+ // public void testLowerRemoveMultipleFilesShift() {
+ // fail("TODO");
+ // }
+ //
+ // @Test
+ // public void testLowerRemoveMultipleFilesCtrl() {
+ // fail("TODO");
+ // }
+
+ @Test
+ public void testLowerRemoveAll() {
+ int count = selenium.getXpathCount(leftLowerTable + "/tr").intValue();
+
+ // click 'Copy All'
+ selenium.click(lowerButtons + "/div[1]");
+
+ // click 'Remove All'
+ selenium.click(lowerButtons + "/div[7]");
+
+ int newCount = selenium.getXpathCount(rightLowerTable + "/tr")
+ .intValue();
+ assertEquals(newCount, 0,
+ "There should be no lines in the right table.");
+
+ newCount = selenium.getXpathCount(leftLowerTable + "/tr").intValue();
+ assertEquals(newCount, count,
+ "All items from right table should be now in the left table.");
+
+ count = selenium.getXpathCount(chosenOptions + "/ul/li").intValue();
+ assertEquals(count, 0, "All capitals from the panel should be removed.");
+ }
+
+ @Test
+ public void testUpperPickListSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ @Test
+ public void testLowerPickListSource() {
+ abstractTestSource(2, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richSelect", 3,
+ "Pick List component is a simple selection component");
+
+ // click 'Remove All'
+ selenium.click(upperButtons + "/div[7]");
+ selenium.click(lowerButtons + "/div[7]");
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/pickList/PickListTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/poll/PollTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/poll/PollTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/poll/PollTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,93 @@
+package org.jboss.richfaces.integrationTest.poll;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class PollTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/poll.jsf?c=poll&tab=usage");
+ }
+
+ private String status = getLoc("poll--status");
+ private String control = getLoc("poll--control");
+ private String serverDate = getLoc("poll--server-date");
+
+ @Test
+ public void testPollingProgress() {
+ openPage();
+
+ setPollingStatus(true);
+
+ pollingProgress();
+ }
+
+ @Test
+ public void testPollingStop() {
+ openPage();
+
+ setPollingStatus(false);
+
+ pollingStopped();
+ }
+
+ @Test
+ public void testPollingStopAndStart() {
+ openPage();
+
+ setPollingStatus(false);
+
+ pollingStopped();
+
+ setPollingStatus(true);
+
+ pollingProgress();
+ }
+
+ public void pollingProgress() {
+ final String old = selenium.getText(serverDate);
+
+ Wait.timeout(3000).until(new Condition() {
+ public boolean isTrue() {
+ String actual = selenium.getText(serverDate);
+
+ return !old.equals(actual);
+ }
+ });
+ }
+
+ public void pollingStopped() {
+ Assert.assertEquals(selenium.getText(status),
+ getMess("poll--polling-inactive"));
+
+ String expected = selenium.getText(serverDate);
+ waitFor(2000);
+ String actual = selenium.getText(serverDate);
+
+ Assert.assertEquals(actual, expected);
+ }
+
+ public void setPollingStatus(final boolean pollingActive) {
+ if (pollingActive != getMess("poll--polling-active").equals(
+ selenium.getText(status))) {
+
+ selenium.click(control);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return pollingActive == getMess("poll--polling-active")
+ .equals(selenium.getText(status));
+ }
+ });
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/ProgressBarTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/ProgressBarTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/ProgressBarTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,200 @@
+package org.jboss.richfaces.integrationTest.progressBar;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests progress bar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ProgressBarTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_BUTTON_SHOULD_BE_PRESENT =
getMess("BUTTON_SHOULD_BE_PRESENT");
+ private final String MSG_BUTTON_SHOULD_NOT_BE_PRESENT =
getMess("BUTTON_SHOULD_NOT_BE_PRESENT");
+ private final String MSG_FIRST_PROGRESS_BAR_LABEL =
getMess("FIRST_PROGRESS_BAR_LABEL");
+ private final String MSG_SECOND_PROGRESS_BAR_UPLOAD =
getMess("SECOND_PROGRESS_BAR_UPLOAD");
+ private final String MSG_SECOND_PB_INITIAL_LABEL_SHOULD_BE_VISIBLE =
getMess("SECOND_PB_INITIAL_LABEL_SHOULD_BE_VISIBLE");
+ private final String MSG_SECOND_PB_INITIAL_LABEL_SHOULD_NOT_BE_VISIBLE =
getMess("SECOND_PB_INITIAL_LABEL_SHOULD_NOT_BE_VISIBLE");
+ private final String MSG_SECOND_PB_FINISHED_LABEL_SHOULD_BE_VISIBLE =
getMess("SECOND_PB_FINISHED_LABEL_SHOULD_BE_VISIBLE");
+ private final String MSG_SECOND_PB_FINISHED_LABEL_SHOULD_NOT_BE_VISIBLE =
getMess("SECOND_PB_FINISHED_LABEL_SHOULD_NOT_BE_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_1_HEADER = getLoc("EXAMPLE_1_HEADER");
+ private final String LOC_EXAMPLE_2_HEADER = getLoc("EXAMPLE_2_HEADER");
+ private final String LOC_FIRST_BUTTON = getLoc("FIRST_BUTTON");
+ private final String LOC_FIRST_PROGRESS_BAR_LABEL =
getLoc("FIRST_PROGRESS_BAR_LABEL");
+ private final String LOC_FIRST_PROGRESS_BAR_STYLE =
getLoc("FIRST_PROGRESS_BAR_STYLE");
+ private final String LOC_SECOND_BUTTON = getLoc("SECOND_BUTTON");
+ private final String LOC_SECOND_LABEL_FINISHED =
getLoc("SECOND_LABEL_FINISHED");
+ private final String LOC_SECOND_LABEL_INITIAL =
getLoc("SECOND_LABEL_INITIAL");
+ private final String LOC_SECOND_PROGRESS_BAR_STYLE =
getLoc("SECOND_PROGRESS_BAR_STYLE");
+
+ /**
+ * Tests the first example. It checks that the button is visible and then it
+ * click on the button. The process starts and the test checks 3 times that
+ * the label of the progress bar and its "width" attribute equal.
+ */
+ @Test
+ public void testFirstExample() {
+ scrollIntoView(LOC_EXAMPLE_1_HEADER, true);
+
+ boolean present = selenium.isElementPresent(LOC_FIRST_BUTTON);
+ assertTrue(present, MSG_BUTTON_SHOULD_BE_PRESENT);
+
+ selenium.click(LOC_FIRST_BUTTON);
+
+ waitFor(500);
+ present = selenium.isElementPresent(LOC_FIRST_BUTTON);
+ assertFalse(present, MSG_BUTTON_SHOULD_NOT_BE_PRESENT);
+
+ int value1 = 0;
+ int value2 = 0;
+
+ for (int i = 0; i < 4; i++) {
+ value1 = getValue(LOC_FIRST_PROGRESS_BAR_STYLE);
+ value2 = Integer.parseInt(selenium.getText(
+ LOC_FIRST_PROGRESS_BAR_LABEL).replace(" %", ""));
+ assertEquals(value1, value2, MSG_FIRST_PROGRESS_BAR_LABEL);
+ waitFor(6000);
+ }
+ }
+
+ /**
+ * Tests the second example. First it checks the displayed label. Then it
+ * clicks on the button and verifies several times that the progress bar is
+ * moving right. Then it waits for process to finish and checks that a label
+ * was displayed.
+ */
+ @Test
+ public void testSecondExample() {
+ scrollIntoView(LOC_EXAMPLE_2_HEADER, true);
+
+ String text = null;
+ try {
+ text = selenium.getAttribute(LOC_SECOND_LABEL_INITIAL + "@style");
+ assertTrue(!text.contains("display: none;"),
+ MSG_SECOND_PB_INITIAL_LABEL_SHOULD_BE_VISIBLE);
+ } catch (Exception e) {
+ // OK -- there is no style attribute
+ }
+ text = selenium.getAttribute(LOC_SECOND_LABEL_FINISHED + "@style");
+ assertFalse(!text.contains("display: none;"),
+ MSG_SECOND_PB_FINISHED_LABEL_SHOULD_NOT_BE_VISIBLE);
+
+ selenium.click(LOC_SECOND_BUTTON);
+
+ int current = 0;
+ int previous = 0;
+ waitFor(2200);
+
+ for (int i = 0; i < 10; i++) {
+ waitFor(2000);
+ current = getValue(LOC_SECOND_PROGRESS_BAR_STYLE);
+ assertTrue(current >= previous, MSG_SECOND_PROGRESS_BAR_UPLOAD);
+ previous = current;
+ }
+
+ waitFor(82000);
+
+ text = selenium.getAttribute(LOC_SECOND_LABEL_INITIAL + "@style");
+ assertFalse(!text.contains("display: none;"),
+ MSG_SECOND_PB_INITIAL_LABEL_SHOULD_NOT_BE_VISIBLE);
+ try {
+ text = selenium.getAttribute(LOC_SECOND_LABEL_FINISHED + "@style");
+ assertTrue(!text.contains("display: none;"),
+ MSG_SECOND_PB_FINISHED_LABEL_SHOULD_BE_VISIBLE);
+ } catch (Exception e) {
+ // OK -- there is no style attribute
+ }
+
+ }
+
+ /**
+ * Tests the "View Source" in the first example. It checks that the source
+ * code is not visible, clicks on the link, and checks 7 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<a4j:outputPanel id=\"progressPanel\">",
+ "<rich:progressBar
value=\"#{progressBarBean.currentValue}\"",
+ "interval=\"2000\" label=\"#{progressBarBean.currentValue}
%\"",
+ "enabled=\"#{progressBarBean.enabled}\" minValue=\"-1\"
maxValue=\"100\"",
+ "reRenderAfterComplete=\"progressPanel\">",
+ "<a4j:commandButton
action=\"#{progressBarBean.startProcess}\"", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Java Bean Source" in the first example. It checks that
+ * the source code is not visible, clicks on the link, and checks 7 lines of
+ * source code.
+ */
+ @Test
+ public void testFirstExampleBeanSource() {
+ String[] strings = new String[] {
+ "package org.richfaces.demo.progressBar;",
+ "public class ProgressBarBean {",
+ "private boolean buttonRendered = true;",
+ "setStartTime(new Date().getTime());",
+ "Long current = (new Date().getTime() - startTime)/1000;",
+ "public void setEnabled(boolean enabled) {",
+ "this.buttonRendered = buttonRendered;", };
+
+ abstractTestSource(1, "View Java Bean Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the second example. It checks that the source
+ * code is not visible, clicks on the link, and checks 7 lines of source
+ * code.
+ */
+ @Test
+ public void testSecondExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "$('form:progressBar').component.setValue(counter*5);",
+ "document.getElementById('button').disabled=false;",
+ "<h:form id=\"form\">",
+ "</f:facet>",
+ "</rich:progressBar>",
+ "<rich:progressBar mode=\"client\"
id=\"progressBar\">",
+ "<button type=\"button\" onclick=\"startProgress();\"
style=\"margin: 9px 0px 5px;\" id=\"button\">Start
Progress</button>", };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Returns the value of progress bar from the style attribute.
+ *
+ * @param locator
+ * locator of the style attribute
+ * @return the value of the attribute style (%)
+ */
+ private int getValue(String locator) {
+ String attr = selenium.getAttribute(locator);
+ attr = attr.substring(attr.indexOf("width"));
+ attr = attr.substring(7, attr.indexOf("%;"));
+ return (int) Double.parseDouble(attr);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richOutputs", 6, 1, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/progressBar/ProgressBarTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/push/PushTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/push/PushTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/push/PushTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,106 @@
+package org.jboss.richfaces.integrationTest.push;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class PushTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/push.jsf?c=push&tab=usage");
+
+ scrollIntoView(control, false);
+ }
+
+ private String control = getLoc("push--control");
+ private String outputText = getLoc("push--output-text");
+
+ @Test
+ public void testPushingProgress() {
+ openPage();
+
+ setPushingStatus(true);
+
+ pushingProgress();
+ }
+
+ @Test
+ public void testPushingStop() {
+ openPage();
+
+ setPushingStatus(false);
+
+ pushingStopped();
+ }
+
+ @Test
+ public void testPushingStopAndStart() {
+ openPage();
+
+ setPushingStatus(false);
+
+ pushingStopped();
+
+ setPushingStatus(true);
+
+ pushingProgress();
+ }
+
+ public void pushingProgress() {
+ Assert.assertTrue(isPushingActive());
+
+ final String old = selenium.getText(outputText);
+
+ Wait.interval(2500).timeout(20000).until(new Condition() {
+ public boolean isTrue() {
+ String actual = selenium.getText(outputText);
+
+ return !old.equals(actual);
+ }
+ });
+
+ String uuid = StringUtils.removeStart(selenium.getText(outputText),
+ getMess("push--active"));
+
+ Assert.assertTrue(StringUtils.isNotBlank(uuid));
+ }
+
+ public void pushingStopped() {
+ Assert.assertFalse(isPushingActive());
+
+ String expected = getMess("push--inactive");
+
+ for (int i = 0; i < 7; i++) {
+ if (i > 0) waitFor(2500);
+ String actual = selenium.getText(outputText);
+
+ Assert.assertEquals(actual, expected);
+ }
+ }
+
+ public void setPushingStatus(final boolean pushingActive) {
+ if (pushingActive != isPushingActive()) {
+
+ selenium.click(control);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return pushingActive == isPushingActive();
+ }
+ });
+ }
+ }
+
+ public boolean isPushingActive() {
+ return !getMess("push--inactive").equals(selenium.getText(outputText));
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueSettingsTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueSettingsTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueSettingsTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,180 @@
+package org.jboss.richfaces.integrationTest.queue;
+
+import junit.framework.Assert;
+
+import org.apache.commons.lang.StringUtils;
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.utils.array.ArrayTransform;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class QueueSettingsTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.allowNativeXpath("true");
+
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE =
"richfaces/queue.jsf?c=queue&tab=queueSettings";
+ private final String header = getLoc("queue-settings--header");
+ private final String inputText = getLoc("queue-settings--input--text");
+ private final String outputText = getLoc("queue-settings--output--text");
+ private final String outputEventsCount =
getLoc("queue-settings--output--events-count");
+ private final String outputRequestsCount =
getLoc("queue-settings--output--requests-count");
+ private final String outputDOMUpdatesCount =
getLoc("queue-settings--output--dom-updates-count");
+
+// @Test
+ public void disabledQueueTest() {
+ openPage();
+
+ setQueue(10, false, true);
+ fastTyping();
+
+ int eventsCount = Integer.valueOf(selenium.getText(outputEventsCount));
+ int requestsCount = Integer.valueOf(selenium
+ .getText(outputRequestsCount));
+ int domUpdatesCount = Integer.valueOf(selenium
+ .getText(outputDOMUpdatesCount));
+
+ Assert.assertEquals(eventsCount, domUpdatesCount);
+ Assert.assertEquals(0, requestsCount);
+ }
+
+ @Test
+ public void dontIgnoreDuplicatedResponsesTest() {
+ openPage();
+
+ setQueue(10, false, false);
+ fastTyping();
+
+ int eventsCount = Integer.valueOf(selenium.getText(outputEventsCount));
+ int requestsCount = Integer.valueOf(selenium
+ .getText(outputRequestsCount));
+ int domUpdatesCount = Integer.valueOf(selenium
+ .getText(outputDOMUpdatesCount));
+
+ Assert.assertTrue(requestsCount <= eventsCount);
+ Assert.assertEquals(requestsCount, domUpdatesCount);
+ }
+
+// @Test
+ public void ignoreDuplicatedResponsesTest() {
+ openPage();
+
+ setQueue(10, true, false);
+
+ fastTyping();
+
+ int eventsCount = Integer.valueOf(selenium.getText(outputEventsCount));
+ int requestsCount = Integer.valueOf(selenium
+ .getText(outputRequestsCount));
+ int domUpdatesCount = Integer.valueOf(selenium
+ .getText(outputDOMUpdatesCount));
+
+ Assert.assertTrue(domUpdatesCount <= requestsCount);
+ Assert.assertTrue(requestsCount <= eventsCount);
+ }
+
+// @Test
+ public void requestDelayTest() {
+ openPage();
+
+ Integer[] delays = new ArrayTransform<String, Integer>(Integer.class) {
+ public Integer transformation(String source) {
+ return Integer.valueOf(source);
+ }
+ }.transform(StringUtils.splitPreserveAllTokens(
+ getMess("queue-settings--delays"), ','));
+
+ for (final int delay : delays) {
+ setQueue(delay, false, false);
+
+ int count = 1;
+ final long start = currentTime();
+ long end = start + 10000;
+ final StringBuffer text = new StringBuffer();
+
+ while (count <= 3 || (count <= 100 && currentTime() < end)) {
+ final String lastText = text.toString();
+ text.append(Integer.toString(count % 10));
+ selenium.type(inputText, text.toString());
+ final long eventTime = currentTime();
+ selenium.fireEvent(inputText, Event.KEYUP);
+ Wait.dontFail().interval(delay / 4).timeout(delay).until(
+ new Condition() {
+ public boolean isTrue() {
+ String actualText = selenium
+ .getText(outputText);
+ long currentTime = currentTime();
+ Assert.assertTrue(currentTime >= eventTime
+ + delay
+ || lastText.equals(actualText));
+ return currentTime >= eventTime + delay;
+ }
+ });
+ waitForTextEquals(outputText, text.toString());
+
+ String actualCount = Integer.toString(count);
+ Assert.assertEquals(actualCount, selenium
+ .getText(outputEventsCount));
+ Assert.assertEquals(actualCount, selenium
+ .getText(outputRequestsCount));
+ Assert.assertEquals(actualCount, selenium
+ .getText(outputDOMUpdatesCount));
+
+ count++;
+ }
+ }
+ }
+
+ private final long currentTime() {
+ return System.currentTimeMillis();
+ }
+
+ private void setQueue(int delay, boolean ignoreDuplicatedResponses,
+ boolean disableQueue) {
+ final String inputRequestDelay =
getLoc("queue-settings--input--request-delay");
+ final String checkboxIgnoreDupResponces =
getLoc("queue-settings--checkbox--ignore-dup-responses");
+ final String checkboxDisableQueue =
getLoc("queue-settings--checkbox--disable-queue");
+ final String buttonApply = getLoc("queue-settings--button--apply");
+
+ selenium.type(inputRequestDelay, Integer.toString(delay));
+ check(checkboxIgnoreDupResponces, ignoreDuplicatedResponses);
+ check(checkboxDisableQueue, disableQueue);
+ selenium.click(buttonApply);
+ selenium.waitForPageToLoad(Long.toString(Wait.DEFAULT_TIMEOUT));
+ scrollIntoView(header, true);
+ }
+
+ private void check(String locator, boolean check) {
+ if (check) {
+ selenium.check(locator);
+ } else {
+ selenium.uncheck(locator);
+ }
+ }
+
+ private void fastTyping() {
+ StringBuffer text = new StringBuffer();
+ final String charToType = getMess("queue-settings--char-to-type");
+
+ for (int i = 1; i <= 75; i++) {
+ text.append(charToType);
+ selenium.type(inputText, text.toString());
+ selenium.fireEvent(inputText, Event.KEYUP);
+ }
+
+ waitModelUpdate.waitForTimeout();
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/queue/QueueTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,39 @@
+package org.jboss.richfaces.integrationTest.queue;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class QueueTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath + "/richfaces/queue.jsf?c=queue&tab=usage");
+ }
+
+ private String tableHeader = getLoc("queue--table-header");
+
+ @Test
+ public void simpleQueueImagesTest() {
+ openPage();
+
+ scrollIntoView(tableHeader, true);
+
+ int[] order = new int[] { 3, 7, 15, 3, 15 };
+
+ for (int i = 0; i < order.length; i++) {
+ selenium.click(formatLoc("queue--image-button", order[i]));
+
+ waitFor(1000);
+
+ Assert.assertTrue(selenium.isElementPresent(formatLoc(
+ "queue--item", order[i])));
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/repeat/RepeatTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/repeat/RepeatTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/repeat/RepeatTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,100 @@
+package org.jboss.richfaces.integrationTest.repeat;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractDataIterationTestCase;
+import org.jboss.test.selenium.waiting.*;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class RepeatTestCase extends AbstractDataIterationTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.allowNativeXpath("true");
+
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE = "richfaces/repeat.jsf?c=repeat&tab=usage";
+ private final String header = getLoc("repeat--header");
+ private final String inputsProposedPrice =
getLoc("repeat--inputs--proposed-price");
+ private final String selectsReason = getLoc("repeat--selects--reason");
+ private final String outputsSalesCost =
getLoc("repeat--outputs--sales-cost");
+ private final String outputsGrossMargin =
getLoc("repeat--outputs--gross-margin");
+
+ @Test
+ public void functionalTest() {
+ openPage();
+
+ int rows = selenium.getXpathCount(format(inputsProposedPrice, 0)).intValue();
+
+ String[] grossMargins = new String[rows];
+ // two run through all rows
+ for (int instance = 0; instance < rows * 2; instance++) {
+ final boolean isFirstIteration = (instance < rows);
+ final int row = 1 + (instance % rows);
+ final String inputProposedPrice = format(inputsProposedPrice, row);
+ final String selectReason = format(selectsReason, row);
+ final String outputGrossMargin = format(outputsGrossMargin, row);
+
+ int difference = (row%2==0 ? 1 : -1) * (instance%3);
+
+ double salesCost = Double.parseDouble(selenium.getText(format(outputsSalesCost,
row)));
+ double proposedPrice = salesCost + difference;
+
+ String grossMarginString = selenium.getText(outputGrossMargin);
+
+ if (!isFirstIteration) {
+ Assert.assertEquals(grossMarginString, grossMargins[row-1]);
+ }
+
+ selenium.type(inputProposedPrice, Double.toString(proposedPrice));
+ if (isFirstIteration) {
+ Wait.waitForChange("", new Retrieve<String>() {
+ public String retrieve() {
+ return selenium.getValue(selectReason);
+ }
+ });
+ } else {
+ waitForTextChanges(outputGrossMargin, grossMarginString);
+ }
+
+ int options = selenium.getXpathCount(selectReason +
"/*[(a)value]").intValue();
+ Assert.assertTrue(options > 0);
+ selenium.select(selectReason, format("index={0}", row % options));
+
+ grossMarginString = selenium.getText(outputGrossMargin);
+
+ double grossMargin = parseGrossMargin(grossMarginString);
+
+ if (difference > 0) {
+ Assert.assertTrue(grossMargin > 0);
+ } else if (difference < 0) {
+ Assert.assertTrue(grossMargin < 0);
+ } else {
+ Assert.assertTrue(grossMargin == 0);
+ }
+
+ grossMargins[row-1] = grossMarginString;
+ }
+
+ for (int row = 1; row <= rows; row++) {
+ final String outputGrossMargin = format(outputsGrossMargin, row);
+
+ String grossMarginString = selenium.getText(outputGrossMargin);
+ Assert.assertTrue(grossMarginString.equals(grossMargins[row-1]));
+ }
+ }
+
+ private double parseGrossMargin(String string) {
+ string = string.replaceFirst("\\$", "");
+ return Double.parseDouble(string);
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/script/ScriptTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/script/ScriptTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/script/ScriptTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,126 @@
+package org.jboss.richfaces.integrationTest.script;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class ScriptTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/script.jsf?c=loadScript&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("script--header");
+ private String buttonHide = getLoc("script--button--hide");
+ private String buttonShow = getLoc("script--button--show");
+ private String inputName = getLoc("script--input--name");
+ private String inputJob = getLoc("script--input--job");
+ private String buttonSubmit = getLoc("script--button--submit");
+ private String outputName = getLoc("script--output--name");
+ private String outputJob = getLoc("script--output--job");
+ private String panelMyPanel = getLoc("script--panel--mypanel");
+ private String messName = getMess("script--input--name");
+ private String messJob = getMess("script--input--job");
+ private String prefixName = getMess("script--regexp--name-prefix");
+ private String prefixJob = getMess("script--regexp--job-prefix");
+
+ @Test
+ public void testHide() {
+ openPage();
+
+ hide();
+ }
+
+ @Test
+ public void testHideAndShow() {
+ openPage();
+
+ hide();
+ show();
+ }
+
+ @Test
+ public void testFillIn() {
+ openPage();
+
+ fillIn();
+ submit();
+ validateOutput();
+ }
+
+ @Test
+ public void testFillInHideAndShow() {
+ testFillIn();
+ hide();
+ show();
+ validateOutput();
+ submit();
+ validateOutput();
+ }
+
+ private void fillIn() {
+ selenium.type(inputName, messName);
+ selenium.type(inputJob, messJob);
+ }
+
+ private void submit() {
+ // remember output values before submit
+ final String name = getName();
+ final String job = getJob();
+
+ // click on Submit
+ selenium.click(buttonSubmit);
+
+ // wait until output changes or 5 sec
+ Wait.dontFail().timeout(5000).until(new Condition() {
+ public boolean isTrue() {
+ // name or job changes
+ return !name.equals(getName()) || !job.equals(getJob());
+ }
+ });
+ }
+
+ private void validateOutput() {
+ Assert.assertEquals(messName, getName());
+ Assert.assertEquals(messJob, getJob());
+ }
+
+ private String getName() {
+ return selenium.getText(outputName).replaceFirst(prefixName, "");
+ }
+
+ private String getJob() {
+ return selenium.getText(outputJob).replaceFirst(prefixJob, "");
+ }
+
+ private void hide() {
+ selenium.click(buttonHide);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "none".equals(getStyle(panelMyPanel, "display"));
+ }
+ });
+ }
+
+ private void show() {
+ selenium.click(buttonShow);
+
+ Wait.until(new Condition() {
+ public boolean isTrue() {
+ return "block".equals(getStyle(panelMyPanel, "display"));
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/SeparatorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/SeparatorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/SeparatorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,177 @@
+package org.jboss.richfaces.integrationTest.separator;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.utils.URLUtils;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests progress bar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SeparatorTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_HEIGHT_OF_SEPARATOR =
getMess("HEIGHT_OF_SEPARATOR");
+ private final String MSG_WIDTH_OF_SEPARATOR = getMess("WIDTH_OF_SEPARATOR");
+ private final String MSG_HASH_CODE = getMess("HASH_CODE");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_SEPARATOR_N = getLoc("SEPARATOR_N");
+
+ /**
+ * Tests the first separator. It checks both height of the separator and
+ * hash code of the image used in separator.
+ */
+ @Test
+ public void testFirstSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 1), "height");
+ assertEquals(text, "6px", MSG_HEIGHT_OF_SEPARATOR);
+
+ text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 1) + "@style");
+ assertEquals(text, "c8568515d1a22227648977798c87cfb0", MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the second separator. It checks height of the separator, width of
+ * the separator, and hash code of the image used in separator.
+ */
+ @Test
+ public void testSecondSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 2), "height");
+ assertEquals(text, "8px", MSG_HEIGHT_OF_SEPARATOR);
+
+ double widthFull = Double.parseDouble(getStyle(
+ String.format(LOC_SEPARATOR_N, 1), "width").replace("px",
""));
+ double width75 = Double.parseDouble(getStyle(
+ String.format(LOC_SEPARATOR_N, 2), "width").replace("px",
""));
+
+ assertEquals(width75, widthFull * 0.75, MSG_WIDTH_OF_SEPARATOR);
+
+ text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 2) + "@style");
+ assertEquals(text, "350f395b0570f1c1cb528ef18299dd5d", MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the third separator. It checks both height of the separator and
+ * hash code of the image used in separator.
+ */
+ @Test
+ public void testThirdSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 3), "height");
+ assertEquals(text, "2px", MSG_HEIGHT_OF_SEPARATOR);
+
+ // FIXME the hash code is not valid
+ // text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 3) +
+ // "@style");
+ // assertEquals(text, "0bf81058de26083a10657f2db675e3ea",
+ // MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the fourth separator. It checks both height of the separator and
+ * hash code of the image used in separator.
+ */
+ @Test
+ public void testFourthSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 4), "height");
+ assertEquals(text, "2px", MSG_HEIGHT_OF_SEPARATOR);
+
+ text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 4) + "@style");
+ assertEquals(text, "94779ca2ce53f57796d3704454cabb2f", MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the fifth separator. It checks both height of the separator and
+ * hash code of the image used in separator.
+ */
+ @Test
+ public void testFifthSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 5), "height");
+ assertEquals(text, "4px", MSG_HEIGHT_OF_SEPARATOR);
+
+ text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 5) + "@style");
+ assertEquals(text, "14c1dfe353747b738a586a51070f631a", MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the sixth separator. It checks both height of the separator and
+ * hash code of the image used in separator.
+ */
+ @Test
+ public void testSixthSeparator() {
+ String text = getStyle(String.format(LOC_SEPARATOR_N, 6), "height");
+ assertEquals(text, "2px", MSG_HEIGHT_OF_SEPARATOR);
+
+ text = getSeparatorHash(String.format(LOC_SEPARATOR_N, 6) + "@style");
+ assertEquals(text, "6ab8ba31211c2a0ecbbeff9cc61bc950", MSG_HASH_CODE);
+ }
+
+ /**
+ * Tests the "View Source" in the example. It checks that the source code is
+ * not visible, clicks on the link, and checks 7 lines of source code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:separator/>",
+ "<rich:separator lineType=\"beveled\" height=\"8\"
width=\"75%\" align=\"center\"/>",
+ "<rich:separator height=\"2\"
lineType=\"dotted\"/><br/>",
+ "<rich:separator height=\"2\"
lineType=\"dashed\"/><br/>",
+ "<rich:separator height=\"4\"
lineType=\"double\"/><br/>",
+ "<rich:separator height=\"2\"
lineType=\"solid\"/><br/>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Returns hash code of the separator's image.
+ *
+ * @param locator
+ * style attribute of the separator
+ */
+ private String getSeparatorHash(String locator) {
+ // create URL of the image
+ String tmp = selenium.getAttribute(locator);
+
+ int index = tmp.indexOf("background-image:");
+ tmp = tmp.substring(index + 22);
+ tmp = tmp.substring(0, tmp.indexOf(");"));
+
+ index = selenium.getLocation().indexOf('/', 7);
+ String url = selenium.getLocation().substring(0, index);
+ url += tmp;
+
+ try {
+ tmp = URLUtils.resourceMd5Digest(url);
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+
+ return tmp;
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richOutputs", 7, 1, MSG_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/separator/SeparatorTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/SimpleTogglePanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/SimpleTogglePanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/SimpleTogglePanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,188 @@
+package org.jboss.richfaces.integrationTest.simpleTogglePanel;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests simple toggle bar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SimpleTogglePanelTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_PANEL_HEADER = getMess("PANEL_HEADER");
+ private final String MSG_LEFT_ARROWS_SHOULD_BE_VISIBLE =
getMess("LEFT_ARROWS_SHOULD_BE_VISIBLE");
+ private final String MSG_LEFT_ARROWS_SHOULD_NOT_BE_VISIBLE =
getMess("LEFT_ARROWS_SHOULD_NOT_BE_VISIBLE");
+ private final String MSG_RIGHT_ARROWS_SHOULD_BE_VISIBLE =
getMess("RIGHT_ARROWS_SHOULD_BE_VISIBLE");
+ private final String MSG_RIGHT_ARROWS_SHOULD_NOT_BE_VISIBLE =
getMess("RIGHT_ARROWS_SHOULD_NOT_BE_VISIBLE");
+ private final String MSG_BODY_SHOULD_BE_VISIBLE =
getMess("BODY_SHOULD_BE_VISIBLE");
+ private final String MSG_BODY_SHOULD_NOT_BE_VISIBLE =
getMess("BODY_SHOULD_NOT_BE_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_1_HEADER = getLoc("EXAMPLE_1_HEADER");
+ private final String LOC_EXAMPLE_2_HEADER = getLoc("EXAMPLE_2_HEADER");
+ private final String LOC_FIRST_EXAMPLE_HEADER =
getLoc("FIRST_EXAMPLE_HEADER");
+ private final String LOC_FIRST_EXAMPLE_ARROWS_LEFT =
formatLoc("FIRST_EXAMPLE_ARROWS_LEFT_RELATIVE_TO_HEADER",
LOC_FIRST_EXAMPLE_HEADER);
+ private final String LOC_FIRST_EXAMPLE_ARROWS_RIGHT =
formatLoc("FIRST_EXAMPLE_ARROWS_RIGHT_RELATIVE_TO_HEADER",
LOC_FIRST_EXAMPLE_HEADER);
+ private final String LOC_FIRST_EXAMPLE_BODY = getLoc("FIRST_EXAMPLE_BODY");
+ private final String LOC_SECOND_EXAMPLE_N_HEADER =
getLoc("SECOND_EXAMPLE_N_HEADER");
+ private final String LOC_SECOND_EXAMPLE_N_ARROWS_LEFT =
formatLoc("SECOND_EXAMPLE_N_ARROWS_LEFT_RELATIVE_TO_HEADER",
LOC_SECOND_EXAMPLE_N_HEADER);
+ private final String LOC_SECOND_EXAMPLE_N_ARROWS_RIGHT =
formatLoc("SECOND_EXAMPLE_N_ARROWS_RIGHT_RELATIVE_TO_HEADER",
LOC_SECOND_EXAMPLE_N_HEADER);
+ private final String LOC_SECOND_EXAMPLE_N_BODY =
getLoc("SECOND_EXAMPLE_N_BODY");
+
+ /**
+ * Tests the first example. It verifies header's text and checks that there
+ * are right arrows displayed in the right side. Then it checks that the
+ * panel's content is displayed and clicks header to toggle panel. Then it
+ * checks again arrows and verifies that the content is hidden.
+ */
+ @Test
+ public void testFirstExample() {
+ scrollIntoView(LOC_EXAMPLE_1_HEADER, true);
+ String header = "Add AJAX capability to existing JSF applications";
+
+ String text = selenium.getText(LOC_FIRST_EXAMPLE_HEADER);
+ assertTrue(text.contains(header), String.format(MSG_PANEL_HEADER,
+ header));
+
+ assertTrue(isDisplayed(LOC_FIRST_EXAMPLE_ARROWS_LEFT),
+ MSG_LEFT_ARROWS_SHOULD_BE_VISIBLE);
+ assertFalse(isDisplayed(LOC_FIRST_EXAMPLE_ARROWS_RIGHT),
+ MSG_RIGHT_ARROWS_SHOULD_NOT_BE_VISIBLE);
+ assertTrue(isDisplayed(LOC_FIRST_EXAMPLE_BODY),
+ MSG_BODY_SHOULD_BE_VISIBLE);
+
+ selenium.click(LOC_FIRST_EXAMPLE_HEADER);
+
+ assertFalse(isDisplayed(LOC_FIRST_EXAMPLE_ARROWS_LEFT),
+ MSG_LEFT_ARROWS_SHOULD_NOT_BE_VISIBLE);
+ assertTrue(isDisplayed(LOC_FIRST_EXAMPLE_ARROWS_RIGHT),
+ MSG_RIGHT_ARROWS_SHOULD_BE_VISIBLE);
+ assertFalse(isDisplayed(LOC_FIRST_EXAMPLE_BODY),
+ MSG_BODY_SHOULD_NOT_BE_VISIBLE);
+ }
+
+ /**
+ * Tests the second example -- server switch type. It verifies header's text
+ * and checks that there are right arrows displayed in the right side. Then
+ * it checks that the panel's content is displayed and clicks header to
+ * toggle panel. Then it checks again arrows and verifies that the content
+ * is hidden.
+ */
+ @Test
+ public void testSecondExampleServerSwitch() {
+ abstractTestPanelInSecondExample(1, "Server Switch Type");
+ }
+
+ /**
+ * Tests the second example -- ajax switch type. It verifies header's text
+ * and checks that there are right arrows displayed in the right side. Then
+ * it checks that the panel's content is displayed and clicks header to
+ * toggle panel. Then it checks again arrows and verifies that the content
+ * is hidden.
+ */
+ @Test
+ public void testSecondExampleAjaxSwitch() {
+ abstractTestPanelInSecondExample(2, "Ajax Switch Type");
+ }
+
+ /**
+ * Tests the second example -- client switch type. It verifies header's text
+ * and checks that there are right arrows displayed in the right side. Then
+ * it checks that the panel's content is displayed and clicks header to
+ * toggle panel. Then it checks again arrows and verifies that the content
+ * is hidden.
+ */
+ @Test
+ public void testSecondExampleClientSwitch() {
+ abstractTestPanelInSecondExample(3, "Client Switch Type");
+ }
+
+ /**
+ * Tests the "View Source" in the first example. It checks that the source
+ * code is not visible, clicks on the link, and checks 5 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:simpleTogglePanel switchType=\"client\" label=\"Add
AJAX capability to existing JSF applications\">",
+ "The framework is implemented by using a component library. The library",
+ "</rich:simpleTogglePanel>", "</ui:composition>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the second example. It checks that the source
+ * code is not visible, clicks on the link, and checks 7 lines of source
+ * code.
+ */
+ @Test
+ public void testSecondExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form>",
+ "<h:panelGrid columns=\"3\" width=\"100%\"
columnClasses=\"tpanels,tpanels,tpanels\">",
+ "<rich:simpleTogglePanel switchType=\"server\" label=\"Server
Switch Type\" height=\"90px\">",
+ "<rich:simpleTogglePanel switchType=\"ajax\" label=\"Ajax
Switch Type\" height=\"90px\">",
+ "<rich:simpleTogglePanel switchType=\"client\" label=\"Client
Switch Type\" height=\"90px\">",
+ "</rich:simpleTogglePanel>", };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Abstract method that is parametrized in tests.
+ *
+ * @param index
+ * which panel should be tested
+ * @param header
+ * a string appearing in panel's header
+ */
+ private void abstractTestPanelInSecondExample(int index, String header) {
+ scrollIntoView(LOC_EXAMPLE_2_HEADER, true);
+
+ String text = selenium.getText(String.format(
+ LOC_SECOND_EXAMPLE_N_HEADER, index));
+ assertTrue(text.contains(header), String.format(MSG_PANEL_HEADER,
+ header));
+
+ assertTrue(isDisplayed(String.format(LOC_SECOND_EXAMPLE_N_ARROWS_LEFT,
+ index)), MSG_LEFT_ARROWS_SHOULD_BE_VISIBLE);
+ assertFalse(isDisplayed(String.format(
+ LOC_SECOND_EXAMPLE_N_ARROWS_RIGHT, index)),
+ MSG_RIGHT_ARROWS_SHOULD_NOT_BE_VISIBLE);
+ // client type is a bit different
+ assertTrue(isDisplayed(String.format(LOC_SECOND_EXAMPLE_N_BODY, index,
+ index == 3 ? 3 : 2)), MSG_BODY_SHOULD_BE_VISIBLE);
+
+ selenium.click(String.format(LOC_SECOND_EXAMPLE_N_HEADER, index));
+ waitFor(2000);
+
+ assertFalse(isDisplayed(String.format(LOC_SECOND_EXAMPLE_N_ARROWS_LEFT,
+ index)), MSG_LEFT_ARROWS_SHOULD_NOT_BE_VISIBLE);
+ assertTrue(isDisplayed(String.format(LOC_SECOND_EXAMPLE_N_ARROWS_RIGHT,
+ index)), MSG_RIGHT_ARROWS_SHOULD_BE_VISIBLE);
+ // client type is a bit different
+ assertFalse(isDisplayed(String.format(LOC_SECOND_EXAMPLE_N_BODY, index,
+ index == 3 ? 3 : 2)), MSG_BODY_SHOULD_NOT_BE_VISIBLE);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richOutputs", 8, 1, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/simpleTogglePanel/SimpleTogglePanelTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/SpacerTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/SpacerTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/SpacerTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,79 @@
+package org.jboss.richfaces.integrationTest.spacer;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests spacer.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SpacerTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_SPACER_HEIGHT = getMess("SPACER_HEIGHT");
+ private final String MSG_SPACER_WIDTH = getMess("SPACER_WIDTH");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_FIRST_SPACER_HEIGHT = getLoc("FIRST_SPACER_HEIGHT");
+ private final String LOC_FIRST_SPACER_WIDTH = getLoc("FIRST_SPACER_WIDTH");
+ private final String LOC_SECOND_SPACER_HEIGHT =
getLoc("SECOND_SPACER_HEIGHT");
+ private final String LOC_SECOND_SPACER_WIDTH = getLoc("SECOND_SPACER_WIDTH");
+
+ /**
+ * Tests the first spacer. Verifies its width and height.
+ */
+ @Test
+ public void testFirstSpacer() {
+ int num = Integer.parseInt(selenium
+ .getAttribute(LOC_FIRST_SPACER_HEIGHT));
+ assertEquals(num, 10, MSG_SPACER_HEIGHT);
+
+ num = Integer.parseInt(selenium.getAttribute(LOC_FIRST_SPACER_WIDTH));
+ assertEquals(num, 100, MSG_SPACER_WIDTH);
+ }
+
+ /**
+ * Tests the second spacer. Verifies its width and height.
+ */
+ @Test
+ public void testSecondSpacer() {
+ int num = Integer.parseInt(selenium
+ .getAttribute(LOC_SECOND_SPACER_HEIGHT));
+ assertEquals(num, 5, MSG_SPACER_HEIGHT);
+
+ num = Integer.parseInt(selenium.getAttribute(LOC_SECOND_SPACER_WIDTH));
+ assertEquals(num, 1, MSG_SPACER_WIDTH);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "background-color: #{a4jSkin.panelBorderColor};",
+ "There is a spacer 100x10<rich:spacer width=\"100\"
height=\"10\" title=\"Here is a spacer...\"/>before this.",
+ "<div class=\"div_near_spacer\" />",
+ "<rich:spacer width=\"1\" height=\"5\" title=\"Here
is a spacer...\"/>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richOutputs", 9, 1, MSG_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spacer/SpacerTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/SpinnerTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/SpinnerTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/SpinnerTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,256 @@
+package org.jboss.richfaces.integrationTest.spinner;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the spinner component.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SpinnerTestCase extends
+ AbstractSeleniumRichfacesTestCase {
+
+ // upper spinner
+ private final String upperInput =
"//fieldset[1]/div/form/table[1]/tbody/tr/td[1]/input";
+ private final String upperUpArrow =
"//fieldset[1]/div/form/table[1]/tbody/tr/td[2]/table/tbody/tr[1]/td/input";
+ private final String upperDownArrow =
"//fieldset[1]/div/form/table[1]/tbody/tr/td[2]/table/tbody/tr[2]/td/input";
+
+ // lower spinner
+ private final String lowerInput =
"//fieldset[1]/div/form/table[2]/tbody/tr/td[1]/input";
+ private final String lowerUpArrow =
"//fieldset[1]/div/form/table[2]/tbody/tr/td[2]/table/tbody/tr[1]/td/input";
+ private final String lowerDownArrow =
"//fieldset[1]/div/form/table[2]/tbody/tr/td[2]/table/tbody/tr[2]/td/input";
+
+ /**
+ * Tests the initial state of both spinners. Both should be set to 50.
+ */
+ @Test
+ public void testInitialState() {
+ assertTrue(selenium.isElementPresent(upperInput),
+ "Upper input field is not present.");
+ assertTrue(selenium.isElementPresent(upperUpArrow),
+ "Upper arrow up is not present.");
+ assertTrue(selenium.isElementPresent(upperDownArrow),
+ "Upper arrow down is not present.");
+ assertTrue(selenium.isElementPresent(lowerInput),
+ "Lower input field is not present.");
+ assertTrue(selenium.isElementPresent(lowerUpArrow),
+ "Lower arrow up is not present.");
+ assertTrue(selenium.isElementPresent(lowerDownArrow),
+ "Lower arrow down is not present.");
+
+ int number = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(number, 50, "Content of upper spinner.");
+
+ number = Integer.parseInt(selenium.getValue(lowerInput));
+ assertEquals(number, 50, "Content of lower spinner.");
+ }
+
+ /**
+ * Tests clicking on the up arrow of the upper spinner.
+ */
+ @Test
+ public void testUpperClickUp() {
+ int oldValue = Integer.parseInt(selenium.getValue(upperInput));
+
+ selenium.clickAt(upperUpArrow, "0,0");
+
+ int newValue = Integer.parseInt(selenium.getValue(upperInput));
+
+ assertEquals(newValue, oldValue + 1,
+ "The value should increase by 1 after clicking on up arrow.");
+ }
+
+ /**
+ * Tests clicking on the down arrow of the upper spinner.
+ */
+ @Test
+ public void testUpperClickDown() {
+ int oldValue = Integer.parseInt(selenium.getValue(upperInput));
+
+ selenium.clickAt(upperDownArrow, "0,0");
+
+ int newValue = Integer.parseInt(selenium.getValue(upperInput));
+
+ assertEquals(newValue, oldValue - 1,
+ "The value should decrease by 1 after clicking on down arrow.");
+
+ }
+
+ /**
+ * Tests clicking on the up arrow of the lower spinner.
+ */
+ @Test
+ public void testLowerClickUp() {
+ int oldValue = Integer.parseInt(selenium.getValue(lowerInput));
+
+ selenium.clickAt(lowerUpArrow, "0,0");
+
+ int newValue = Integer.parseInt(selenium.getValue(lowerInput));
+
+ assertEquals(newValue, oldValue + 10,
+ "The value should increase by 10 after clicking on up arrow.");
+ }
+
+ /**
+ * Tests clicking on the down arrow of the lower spinner.
+ */
+ @Test
+ public void testLowerClickDown() {
+ int oldValue = Integer.parseInt(selenium.getValue(lowerInput));
+
+ selenium.clickAt(lowerDownArrow, "0,0");
+
+ int newValue = Integer.parseInt(selenium.getValue(lowerInput));
+
+ assertEquals(newValue, oldValue - 10,
+ "The value should decrease by 10 after clicking on down arrow.");
+ }
+
+ /**
+ * Tests typing into the upper spinner. In the beginning it tries valid
+ * value (20), then a value bigger than maximum (2000), a value lower than
+ * minimum (-23), a decimal value (34.5), and a string ("aaa").
+ */
+ @Test
+ public void testTypeToUpper() {
+ selenium.type(upperInput, "20");
+ Number newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 20, "Value in the input field did not change.");
+
+ selenium.type(upperInput, "2000");
+ newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 100,
+ "Input field should contain 100 after 2000 was typed.");
+
+ selenium.type(upperInput, "-23");
+ newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 0,
+ "Input field should contain 0 after -23 was typed.");
+
+ selenium.type(upperInput, "34.5");
+ newValue = Double.parseDouble(selenium.getValue(upperInput));
+ assertEquals(newValue, 34.5,
+ "Input field should contain 34.5 after 34.5 was typed.");
+
+ Number oldValue = Double.parseDouble(selenium.getValue(upperInput));
+ selenium.type(upperInput, "aaa");
+ newValue = Double.parseDouble(selenium.getValue(upperInput));
+ assertEquals(newValue, oldValue, "Input field should contain "
+ + oldValue + " after 'aaa' was typed.");
+ }
+
+ /**
+ * Tests typing into the lower spinner. In the beginning it tries valid
+ * value (20), then a value bigger than maximum (2000), a value lower than
+ * minimum (-23), a decimal value (34.5), and a string ("aaa").
+ */
+ @Test
+ public void testTypeToLower() {
+ selenium.type(upperInput, "20");
+ Number newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 20, "Value in the input field did not change.");
+
+ selenium.type(upperInput, "2000");
+ newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 100,
+ "Input field should contain 100 after 2000 was typed.");
+
+ selenium.type(upperInput, "-23");
+ newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 0,
+ "Input field should contain 0 after -23 was typed.");
+
+ selenium.type(upperInput, "34.5");
+ newValue = Double.parseDouble(selenium.getValue(upperInput));
+ assertEquals(newValue, 34.5,
+ "Input field should contain 34.5 after 34.5 was typed.");
+
+ Number oldValue = Double.parseDouble(selenium.getValue(upperInput));
+ selenium.type(upperInput, "aaa");
+ newValue = Double.parseDouble(selenium.getValue(upperInput));
+ assertEquals(newValue, oldValue, "Input field should contain "
+ + oldValue + " after 'aaa' was typed.");
+ }
+
+ /**
+ * Tests value overflow. It clicks 51 times on the up button of the upper
+ * spinner and verifies that the value changed to 0. Then it clicks 6 times
+ * on the up button of the lower spinner and checks that the value changed
+ * to 0.
+ */
+ @Test
+ public void testOverflow() {
+ // it starts at 50, maximum is 100, increment 1, it will try to click 51
+ // times
+ for (int i = 0; i < 51; i++) {
+ selenium.clickAt(upperUpArrow, "0,0");
+ }
+
+ int newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 0, "The value should change to 0 at overflow.");
+
+ // it starts at 50, maximum is 100, increment 10, it will try to click 6
+ // times
+ for (int i = 0; i < 6; i++) {
+ selenium.clickAt(lowerUpArrow, "0,0");
+ }
+
+ newValue = Integer.parseInt(selenium.getValue(lowerInput));
+ assertEquals(newValue, 0, "The value should change to 0 at overflow.");
+ }
+
+ /**
+ * Tests value underflow. It clicks 51 times on the down button of the lower
+ * spinner and verifies that the value changed to 100. Then it clicks 6
+ * times on the down button of the lower spinner and checks that the value
+ * changed to 100.
+ */
+ @Test
+ public void testUnderflow() {
+ // it starts at 50, minimum is 0, increment 1, it will try to click 51
+ // times
+ for (int i = 0; i < 51; i++) {
+ selenium.clickAt(upperDownArrow, "0,0");
+ }
+
+ int newValue = Integer.parseInt(selenium.getValue(upperInput));
+ assertEquals(newValue, 100,
+ "The value should change to 100 at underflow.");
+
+ // it starts at 50, minimum is 0, increment 10, it will try to click 6
+ // times
+ for (int i = 0; i < 6; i++) {
+ selenium.clickAt(lowerDownArrow, "0,0");
+ }
+
+ newValue = Integer.parseInt(selenium.getValue(lowerInput));
+ assertEquals(newValue, 100,
+ "The value should change to 100 at underflow.");
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks the first 2 components of source code,
+ * i.e. that the source code begins with "<ui:composition".
+ */
+ @Test
+ public void testSpinnerSource() {
+ abstractTestSource(1, 1, "<", "ui:composition");
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 9,
+ "InputNumberSpinner is a highly customizable component");
+ }
+
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/spinner/SpinnerTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/status/StatusTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/status/StatusTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/status/StatusTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,214 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this test suite; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+package org.jboss.richfaces.integrationTest.status;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.dom.Event;
+import org.jboss.test.selenium.waiting.Condition;
+import static org.testng.Assert.*;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class StatusTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.allowNativeXpath("true");
+
+ openComponent("Status");
+ openTab("Usage");
+ }
+
+ private final String LOC_FIELDSET_PAGE_PART_PREFORMATTED =
getLoc("FIELDSET_PAGE_PART_PREFORMATTED");
+ private final String LOC_OUTPUT_STATUS_MESSAGE_PREFORMATTED =
getLoc("OUTPUT_STATUS_MESSAGE_PREFORMATTED");
+ private final String LOC_BUTTON_REQUEST_PREFORMATTED =
getLoc("BUTTON_REQUEST_PREFORMATTED");
+ private final String LOC_INPUT_NAME = getLoc("INPUT_NAME");
+ private final String LOC_INPUT_JOB = getLoc("INPUT_JOB");
+ private final String LOC_OUTPUT_TEXT = getLoc("OUTPUT_TEXT");
+
+ private final String MSG_STYLE_DISPLAY = getMsg("STYLE_DISPLAY");
+ private final String MSG_PATTERN_NAME_JOB = getMsg("PATTERN_NAME_JOB");
+
+ /**
+ * <p>
+ * This test requests update by pressing button, waiting for processing
+ * (indicates by status message's change) and finally waiting to be
+ * completed (status changes to initial state).
+ * </p>
+ *
+ * <p>
+ * This version using text like a status message for user.
+ * </p>
+ */
+ @Test
+ public void testTextStatus() {
+ doStatusTesting(1);
+ }
+
+ /**
+ * <p>
+ * For description see {@link #testTextStatus()}
+ * </p>
+ *
+ * <p>
+ * This version using image like a status message for user.
+ * </p>
+ */
+ @Test
+ public void testImageStatus() {
+ doStatusTesting(2);
+ }
+
+ /**
+ * <p>
+ * Implementation for two tests distinguished by testNumber.
+ * </p>
+ *
+ * @param testNumber
+ * version of test (1 or 2)
+ */
+ private void doStatusTesting(final int testNumber) {
+ openPage();
+ scrollIntoView(format(LOC_FIELDSET_PAGE_PART_PREFORMATTED, testNumber), true);
+
+ // PAGE COMPONENTS
+ final String locOutputStatusMessage = format(LOC_OUTPUT_STATUS_MESSAGE_PREFORMATTED,
testNumber);
+ final String locButtonRequest = format(LOC_BUTTON_REQUEST_PREFORMATTED, testNumber);
+
+ // get a initial style of status field
+ final String initialStyle = getStyle(locOutputStatusMessage, MSG_STYLE_DISPLAY);
+
+ selenium.click(locButtonRequest);
+
+ // wait for style is changed to "processing" state indicates that
+ // request is in progress
+ waitModelUpdate.interval(10).failWith("Test timeouted when waiting for request
moves to processing state.")
+ .until(new Condition() {
+ public boolean isTrue() {
+ String actualStyle = getStyle(locOutputStatusMessage, MSG_STYLE_DISPLAY);
+ return !initialStyle.equals(actualStyle);
+ }
+ });
+
+ // wait for style is changed back to initial state after request is
+ // complete
+ waitModelUpdate.interval(10).failWith("Timeout when waiting for request moves to
complete state.").until(
+ new Condition() {
+ public boolean isTrue() {
+ String actual = getStyle(locOutputStatusMessage, MSG_STYLE_DISPLAY);
+ return initialStyle.equals(actual);
+ }
+ });
+ }
+
+ /**
+ * <p>
+ * Alternates with typing 30 characters into two inputs and waiting for
+ * status to change properly.
+ * </p>
+ *
+ * <p>
+ * Watches the correct output value.
+ * </p>
+ */
+ @Test
+ public void testInputsStatus() {
+ openPage();
+ scrollIntoView(format(LOC_FIELDSET_PAGE_PART_PREFORMATTED, 3), true);
+
+ // PAGE CONTROLS
+ final String locOutputStatusMessage = format(LOC_OUTPUT_STATUS_MESSAGE_PREFORMATTED,
3);
+
+ // init buffers for typed text for each input
+ StringBuilder textName = new StringBuilder();
+ StringBuilder textJob = new StringBuilder();
+
+ // init pattern for getting name and job from output
+ Pattern patternNameJob = Pattern.compile(MSG_PATTERN_NAME_JOB);
+
+ // get a initial value of status message's style
+ final String initialStyle = getStyle(locOutputStatusMessage, MSG_STYLE_DISPLAY);
+
+ // cycle over 30 chars and alternating between two inputs
+ for (int counter = 1; counter <= 30; counter++) {
+ // select input and it's buffered text by state of counter
+ final String selectedInput = (counter % 3 == 0) ? LOC_INPUT_NAME : LOC_INPUT_JOB;
+ final StringBuilder selectedText = (counter % 3 == 0) ? textName : textJob;
+
+ // add one char according to chars [0-9] given by cycle counter
+ selectedText.append(counter % 10);
+
+ selenium.type(selectedInput, selectedText.toString());
+ selenium.fireEvent(selectedInput, Event.KEYUP);
+
+ // wait for display-style changes to value different than initial
+ waitForDisplayChanges(locOutputStatusMessage, initialStyle, false);
+
+ // wait for display-style changes to initial value
+ waitForDisplayChanges(locOutputStatusMessage, initialStyle, true);
+
+ String outputText = selenium.getText(LOC_OUTPUT_TEXT);
+
+ // matches output to pattern declared above?
+ Matcher matcher = patternNameJob.matcher(outputText);
+ if (matcher.matches()) {
+ // output matches, name is in group(1) and job in group(2)
+ assertEquals(matcher.group(1), textName.toString(), format(
+ "Name output '{0}' doesn't equal to typed value
'{1}'", matcher.group(1), textName));
+ assertEquals(matcher.group(2), textJob.toString(), format(
+ "Job output '{0}' doesn't equal to typed value
'{1}'", matcher.group(2), textJob));
+ } else {
+ fail(format("Output '{0}' doesn't matches to Name/Job pattern
'{1}'", outputText, patternNameJob
+ .toString()));
+ }
+ }
+ }
+
+ /**
+ * Wait for display-style changes to specified initial (resp. other than
+ * initial) value depending on what we want.
+ *
+ * @param locator
+ * of element we want watch
+ * @param initialStyle
+ * initial display-style value
+ * @param shouldEqualOldValue
+ * if true, wait for element's display-style became initialStyle;
+ * if false, wait for element's display-style became other than
+ * initialStyle
+ */
+ private void waitForDisplayChanges(final String locator, final String initialStyle,
+ final boolean shouldEqualOldValue) {
+ waitModelUpdate.interval(10).until(new Condition() {
+ public boolean isTrue() {
+ String actualStyle = getStyle(locator, MSG_STYLE_DISPLAY);
+ return !shouldEqualOldValue ^ initialStyle.equals(actualStyle);
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/style/StyleTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/style/StyleTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/style/StyleTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,57 @@
+package org.jboss.richfaces.integrationTest.style;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class StyleTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ private void openPage() {
+ selenium.open(contextPath
+ + "/richfaces/style.jsf?c=loadStyle&tab=usage");
+ scrollIntoView(header, true);
+ }
+
+ private String header = getLoc("style--header");
+ private String linkDeepMarine = getLoc("style--link--deep-marine");
+ private String linkBlueSky = getLoc("style--link--blue-sky");
+ private String linkJapanCherry = getLoc("style--link--japan-cherry");
+ private String tableOutput = getLoc("style--table--output");
+ private String colorDeepMarine = getMess("style--color--deep-marine");
+ private String colorBlueSky = getMess("style--color--blue-sky");
+ private String colorJapanCherry = getMess("style--color--japan-cherry");
+
+ Map<String, String> relation = new LinkedHashMap<String, String>() {
+ {
+ put(linkDeepMarine, colorDeepMarine);
+ put(linkBlueSky, colorBlueSky);
+ put(linkJapanCherry, colorJapanCherry);
+ }
+ };
+
+ @Test
+ public void testBackgroundColor() {
+ openPage();
+
+ for (final String link : relation.keySet()) {
+ final String color = relation.get(link);
+
+ selenium.click(link);
+ selenium.waitForPageToLoad(Long.toString(Wait.DEFAULT_TIMEOUT));
+ scrollIntoView(header, true);
+
+ Assert.assertEquals(color, getStyle(tableOutput, "background-color"));
+ }
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/SuggestionBoxTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/SuggestionBoxTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/SuggestionBoxTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,502 @@
+package org.jboss.richfaces.integrationTest.suggestionBox;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests the suggestion box.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class SuggestionBoxTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMsg("COMPONENT_DESCRIPTION");
+ private final String MSG_TABLE_M_N = getMsg("TABLE_M_N");
+ private final String MSG_NO_CAPITALS_FOUND = getMsg("NO_CAPITALS_FOUND");
+ private final String MSG_SUGGESTION_BOX_BORDER =
getMsg("SUGGESTION_BOX_BORDER");
+ private final String MSG_SUGGESTION_BOX_WIDTH =
getMsg("SUGGESTION_BOX_WIDTH");
+ private final String MSG_SUGGESTION_BOX_HEIGHT =
getMsg("SUGGESTION_BOX_HEIGHT");
+ private final String MSG_SUGGESTION_BOX_SHADOW_DEPTH =
getMsg("SUGGESTION_BOX_SHADOW_DEPTH");
+ private final String MSG_SUGGESTION_BOX_SHADOW_OPACITY =
getMsg("SUGGESTION_BOX_SHADOW_OPACITY");
+ private final String MSG_SUGGESTION_BOX_CELLPADDING =
getMsg("SUGGESTION_BOX_CELLPADDING");
+ private final String MSG_COUNT_OF_ALL_SUGGESTIONS =
getMsg("COUNT_OF_ALL_SUGGESTIONS");
+ private final String MSG_AUGUSTA_MAINE = getMsg("AUGUSTA_MAINE");
+ private final String MSG_AUGUSTA_MADISON_MAINE_WISCONSIN =
getMsg("AUGUSTA_MADISON_MAINE_WISCONSIN");
+
+ // locators
+ private final String LOC_FIRST_SUGGESTION_BOX_N =
getLoc("FIRST_SUGGESTION_BOX_N");
+ private final String LOC_FIRST_TOWN_TABLE_M_N =
getLoc("FIRST_TOWN_TABLE_M_N");
+
+ private final String LOC_FIRST_INPUT = getLoc("FIRST_INPUT");
+ private final String LOC_FIRST_BORDER_INPUT = getLoc("FIRST_BORDER_INPUT");
+ private final String LOC_FIRST_WIDTH_INPUT = getLoc("FIRST_WIDTH_INPUT");
+ private final String LOC_FIRST_HEIGHT_INPUT = getLoc("FIRST_HEIGHT_INPUT");
+ private final String LOC_FIRST_SHADOW_DEPTH_INPUT =
getLoc("FIRST_SHADOW_DEPTH_INPUT");
+ private final String LOC_FIRST_SHADOW_OPACITY_INPUT =
getLoc("FIRST_SHADOW_OPACITY_INPUT");
+ private final String LOC_FIRST_CELLPADDING_INPUT =
getLoc("FIRST_CELLPADDING_INPUT");
+
+ private final String LOC_FIRST_BORDER_STYLE = getLoc("FIRST_BORDER_STYLE");
+ private final String LOC_FIRST_WIDTH_STYLE = getLoc("FIRST_WIDTH_STYLE");
+ private final String LOC_FIRST_HEIGHT_STYLE = getLoc("FIRST_HEIGHT_STYLE");
+ private final String LOC_FIRST_SHADOW_DEPTH_STYLE =
getLoc("FIRST_SHADOW_DEPTH_STYLE");
+ private final String LOC_FIRST_SHADOW_OPACITY_STYLE =
getLoc("FIRST_SHADOW_OPACITY_STYLE");
+ private final String LOC_FIRST_CELLPADDING = getLoc("FIRST_CELLPADDING");
+
+ private final String LOC_SECOND_INPUT = getLoc("SECOND_INPUT");
+ private final String LOC_SECOND_BUTTON = getLoc("SECOND_BUTTON");
+ private final String LOC_SECOND_SUGGESTION_LINES =
getLoc("SECOND_SUGGESTION_LINES");
+ private final String LOC_SECOND_SUGGESTION_BOX_N =
getLoc("SECOND_SUGGESTION_BOX_N");
+ private final String LOC_SECOND_STATE = getLoc("SECOND_STATE");
+
+ /**
+ * Tests inputting two cities separated by a comma. First it chooses Atlanta and
Madison. Then
+ * it checks all items in the table on the right.
+ */
+ @Test
+ public void testCommaSeparatedTowns() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ // select Atlanta
+ selenium.typeKeys(LOC_FIRST_INPUT, "at");
+ waitForElement(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ selenium.click(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ // select Madison
+ selenium.typeKeys(LOC_FIRST_INPUT, ",ma");
+
+ waitForTextEquals(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1),
+ "MadisonWisconsin");
+ selenium.click(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ String text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N,
+ 1, 1));
+ assertEquals(text, "Georgia", String.format(MSG_TABLE_M_N, 1, 1));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 2));
+ assertEquals(text, "Atlanta", String.format(MSG_TABLE_M_N, 1, 2));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 3));
+ assertEquals(text, "Augusta", String.format(MSG_TABLE_M_N, 1, 3));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 4));
+ assertEquals(text, "Columbus", String.format(MSG_TABLE_M_N, 1, 4));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 1));
+ assertEquals(text, "Wisconsin", String.format(MSG_TABLE_M_N, 2, 1));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 2));
+ assertEquals(text, "Milwaukee", String.format(MSG_TABLE_M_N, 2, 2));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 3));
+ assertEquals(text, "Madison", String.format(MSG_TABLE_M_N, 2, 3));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 4));
+ assertEquals(text, "Green Bay", String.format(MSG_TABLE_M_N, 2, 4));
+ }
+
+ /**
+ * Tests inputting two cities separated by square brackets. First it chooses Atlanta and
Madison. Then
+ * it checks all items in the table on the right.
+ */
+ @Test
+ public void testSquareBracketsSeparatedTowns() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ // select Atlanta
+ selenium.typeKeys(LOC_FIRST_INPUT, "[at");
+ waitForElement(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ selenium.click(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+ selenium.typeKeys(LOC_FIRST_INPUT, "]");
+
+ // select Madison
+ selenium.typeKeys(LOC_FIRST_INPUT, "[ma");
+ waitForTextEquals(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1),
+ "MadisonWisconsin");
+ selenium.click(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+ selenium.typeKeys(LOC_FIRST_INPUT, "]");
+
+ String text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N,
+ 1, 1));
+ assertEquals(text, "Georgia", String.format(MSG_TABLE_M_N, 1, 1));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 2));
+ assertEquals(text, "Atlanta", String.format(MSG_TABLE_M_N, 1, 2));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 3));
+ assertEquals(text, "Augusta", String.format(MSG_TABLE_M_N, 1, 3));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 1, 4));
+ assertEquals(text, "Columbus", String.format(MSG_TABLE_M_N, 1, 4));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 1));
+ assertEquals(text, "Wisconsin", String.format(MSG_TABLE_M_N, 2, 1));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 2));
+ assertEquals(text, "Milwaukee", String.format(MSG_TABLE_M_N, 2, 2));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 3));
+ assertEquals(text, "Madison", String.format(MSG_TABLE_M_N, 2, 3));
+
+ text = selenium.getText(String.format(LOC_FIRST_TOWN_TABLE_M_N, 2, 4));
+ assertEquals(text, "Green Bay", String.format(MSG_TABLE_M_N, 2, 4));
+ }
+
+ /**
+ * Tests typing in a non-existing city ('aaa'). It checks that the string
"No capitals found" is shown.
+ */
+ @Test
+ public void testNonExisting() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ // select aaa
+ selenium.typeKeys(LOC_FIRST_INPUT, "aaa");
+
+ waitForElement(String.format(LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ String text = selenium.getText(String.format(
+ LOC_FIRST_SUGGESTION_BOX_N, 1));
+
+ assertEquals(text, "No capitals found", MSG_NO_CAPITALS_FOUND);
+ }
+
+ /**
+ * Tests the "Border" slider. It tests values 3, 5, and 7.
+ */
+ @Test
+ public void testBorder() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_BORDER_INPUT, "3");
+ waitFor(1500);
+ int width = getValue(LOC_FIRST_BORDER_STYLE, "border-width");
+ assertEquals(width, 3, String.format(MSG_SUGGESTION_BOX_BORDER, 3));
+
+ selenium.type(LOC_FIRST_BORDER_INPUT, "5");
+ waitFor(1500);
+ width = getValue(LOC_FIRST_BORDER_STYLE, "border-width");
+ assertEquals(width, 5, String.format(MSG_SUGGESTION_BOX_BORDER, 5));
+
+ selenium.type(LOC_FIRST_BORDER_INPUT, "7"); // 7 -> 5
+ waitFor(1500);
+ width = getValue(LOC_FIRST_BORDER_STYLE, "border-width");
+ assertEquals(width, 5, String.format(MSG_SUGGESTION_BOX_BORDER, 7));
+ }
+
+ /**
+ * Tests the "Width" slider. It tests values 150, 350, 400, and 176.
+ */
+ @Test
+ public void testWidth() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_WIDTH_INPUT, "150");
+ waitFor(1500);
+ int width = getValue(LOC_FIRST_WIDTH_STYLE, "width");
+ assertEquals(width, 150, String.format(MSG_SUGGESTION_BOX_WIDTH, 150));
+
+ selenium.type(LOC_FIRST_WIDTH_INPUT, "350");
+ waitFor(1500);
+ width = getValue(LOC_FIRST_WIDTH_STYLE, "width");
+ assertEquals(width, 350, String.format(MSG_SUGGESTION_BOX_WIDTH, 350));
+
+ selenium.type(LOC_FIRST_WIDTH_INPUT, "400"); // 400 -> 350
+ waitFor(1500);
+ width = getValue(LOC_FIRST_WIDTH_STYLE, "width");
+ assertEquals(width, 350, String.format(MSG_SUGGESTION_BOX_WIDTH, 400));
+
+ selenium.type(LOC_FIRST_WIDTH_INPUT, "176"); // 176 -> 200
+ waitFor(1500);
+ width = getValue(LOC_FIRST_WIDTH_STYLE, "width");
+ assertEquals(width, 200, String.format(MSG_SUGGESTION_BOX_WIDTH, 176));
+ }
+
+ /**
+ * Tests the "Height" slider. It tests values 100, 300, 400, and 176.
+ */
+ @Test
+ public void testHeight() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_HEIGHT_INPUT, "100");
+ waitFor(1500);
+ int height = getValue(LOC_FIRST_HEIGHT_STYLE, "height");
+ assertEquals(height, 100, String.format(MSG_SUGGESTION_BOX_HEIGHT, 100));
+
+ selenium.type(LOC_FIRST_HEIGHT_INPUT, "300");
+ waitFor(1500);
+ height = getValue(LOC_FIRST_HEIGHT_STYLE, "height");
+ assertEquals(height, 300, String.format(MSG_SUGGESTION_BOX_HEIGHT, 300));
+
+ selenium.type(LOC_FIRST_HEIGHT_INPUT, "400"); // 400 -> 300
+ waitFor(1500);
+ height = getValue(LOC_FIRST_HEIGHT_STYLE, "height");
+ assertEquals(height, 300, String.format(MSG_SUGGESTION_BOX_HEIGHT, 400));
+
+ selenium.type(LOC_FIRST_HEIGHT_INPUT, "176"); // 176 -> 200
+ waitFor(1500);
+ height = getValue(LOC_FIRST_HEIGHT_STYLE, "height");
+ assertEquals(height, 200, String.format(MSG_SUGGESTION_BOX_HEIGHT, 176));
+ }
+
+ /**
+ * Tests the "Shadow Depth" slider. It tests values 3, 5, 6, and 7. It test
both top and left offset.
+ */
+ @Test
+ public void testShadowDepth() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_SHADOW_DEPTH_INPUT, "3");
+ waitFor(1500);
+ int top = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "top");
+ assertEquals(top, 3, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 3));
+ int left = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "left");
+ assertEquals(left, 3, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 3));
+
+ selenium.type(LOC_FIRST_SHADOW_DEPTH_INPUT, "5");
+ waitFor(1500);
+ top = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "top");
+ assertEquals(top, 5, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 5));
+ left = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "left");
+ assertEquals(left, 5, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 5));
+
+ selenium.type(LOC_FIRST_SHADOW_DEPTH_INPUT, "6");
+ waitFor(1500);
+ top = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "top");
+ assertEquals(top, 6, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 6));
+ left = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "left");
+ assertEquals(left, 6, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 6));
+
+ selenium.type(LOC_FIRST_SHADOW_DEPTH_INPUT, "7"); // 7 -> 6
+ waitFor(1500);
+ top = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "top");
+ assertEquals(top, 6, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 7));
+ left = getValue(LOC_FIRST_SHADOW_DEPTH_STYLE, "left");
+ assertEquals(left, 6, String.format(MSG_SUGGESTION_BOX_SHADOW_DEPTH, 7));
+ }
+
+ /**
+ * Tests the "Shadow Opacity" slider. It tests values 1, 5, 9, and 11.
+ */
+ @Test
+ public void testShadowOpacity() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_SHADOW_OPACITY_INPUT, "1");
+ waitFor(1500);
+ double opacity = getOpacity(LOC_FIRST_SHADOW_OPACITY_STYLE);
+ assertEquals(opacity, 0.1, String.format(
+ MSG_SUGGESTION_BOX_SHADOW_OPACITY, 1));
+
+ selenium.type(LOC_FIRST_SHADOW_OPACITY_INPUT, "5");
+ waitFor(1500);
+ opacity = getOpacity(LOC_FIRST_SHADOW_OPACITY_STYLE);
+ assertEquals(opacity, 0.5, String.format(
+ MSG_SUGGESTION_BOX_SHADOW_OPACITY, 5));
+
+ selenium.type(LOC_FIRST_SHADOW_OPACITY_INPUT, "9");
+ waitFor(1500);
+ opacity = getOpacity(LOC_FIRST_SHADOW_OPACITY_STYLE);
+ assertEquals(opacity, 0.9, String.format(
+ MSG_SUGGESTION_BOX_SHADOW_OPACITY, 9));
+
+ selenium.type(LOC_FIRST_SHADOW_OPACITY_INPUT, "11"); // 11 -> 9
+ waitFor(1500);
+ opacity = getOpacity(LOC_FIRST_SHADOW_OPACITY_STYLE);
+ assertEquals(opacity, 0.9, String.format(
+ MSG_SUGGESTION_BOX_SHADOW_OPACITY, 11));
+ }
+
+ /**
+ * Tests the "Cellpadding" slider. It tests values 1, 10, 20, and 25.
+ */
+ @Test
+ public void testCellpadding() {
+ scrollIntoView(LOC_FIRST_INPUT, true);
+
+ selenium.type(LOC_FIRST_CELLPADDING_INPUT, "1");
+ waitFor(1500);
+ int cellpadding = Integer.parseInt(selenium
+ .getAttribute(LOC_FIRST_CELLPADDING));
+ assertEquals(cellpadding, 1, String.format(
+ MSG_SUGGESTION_BOX_CELLPADDING, 1));
+
+ selenium.type(LOC_FIRST_CELLPADDING_INPUT, "10");
+ waitFor(1500);
+ cellpadding = Integer.parseInt(selenium
+ .getAttribute(LOC_FIRST_CELLPADDING));
+ assertEquals(cellpadding, 10, String.format(
+ MSG_SUGGESTION_BOX_CELLPADDING, 10));
+
+ selenium.type(LOC_FIRST_CELLPADDING_INPUT, "20");
+ waitFor(1500);
+ cellpadding = Integer.parseInt(selenium
+ .getAttribute(LOC_FIRST_CELLPADDING));
+ assertEquals(cellpadding, 20, String.format(
+ MSG_SUGGESTION_BOX_CELLPADDING, 20));
+
+ selenium.type(LOC_FIRST_CELLPADDING_INPUT, "25"); // 25 -> 20
+ waitFor(1500);
+ cellpadding = Integer.parseInt(selenium
+ .getAttribute(LOC_FIRST_CELLPADDING));
+ assertEquals(cellpadding, 20, String.format(
+ MSG_SUGGESTION_BOX_CELLPADDING, 25));
+ }
+
+ /**
+ * Tests the button with arrow in the second example. It checks that there are 50
suggestions.
+ */
+ @Test
+ void testSecondExampleButton() {
+ scrollIntoView(LOC_SECOND_INPUT, true);
+
+ selenium.click(LOC_SECOND_BUTTON);
+ waitForElement(LOC_SECOND_SUGGESTION_LINES);
+
+ int count = selenium.getXpathCount(LOC_SECOND_SUGGESTION_LINES)
+ .intValue();
+ assertEquals(count, 50, MSG_COUNT_OF_ALL_SUGGESTIONS);
+ }
+
+ /**
+ * Tests inputting one city in the second example. It presses 'a' and clicks on
the second suggestion.
+ */
+ @Test
+ public void testSecondExampleOneCity() {
+ scrollIntoView(LOC_SECOND_INPUT, true);
+
+ selenium.typeKeys(LOC_SECOND_INPUT, "a");
+ waitForElement(String.format(LOC_SECOND_SUGGESTION_BOX_N, 2));
+ selenium.click(String.format(LOC_SECOND_SUGGESTION_BOX_N, 2)); // Augusta
+
+ String state = selenium.getText(LOC_SECOND_STATE);
+ assertEquals(state, "Maine", MSG_AUGUSTA_MAINE);
+ }
+
+ /**
+ * Tests inputting two cities separated by a comma in the second example. It presses
'a', clicks
+ * on the second suggestion, presses ',' and 'm' and clicks on the third
suggestion (Augusta and Madison).
+ * Then it checks that states belonging to these cities are shown below the combo box.
+ */
+ @Test
+ public void testSecondExampleMoreCities() {
+ scrollIntoView(LOC_SECOND_INPUT, true);
+
+ selenium.typeKeys(LOC_SECOND_INPUT, "a");
+ waitForElement(String.format(LOC_SECOND_SUGGESTION_BOX_N, 2));
+ selenium.click(String.format(LOC_SECOND_SUGGESTION_BOX_N, 2)); // Augusta
+
+ selenium.typeKeys(LOC_SECOND_INPUT, ",m");
+ waitForTextEquals(String.format(LOC_SECOND_SUGGESTION_BOX_N, 3),
+ "Madison");
+ selenium.click(String.format(LOC_SECOND_SUGGESTION_BOX_N, 3)); // Madison
+
+ waitFor(700);
+ String state = selenium.getText(LOC_SECOND_STATE);
+ assertEquals(state, "Maine,Wisconsin",
+ MSG_AUGUSTA_MADISON_MAINE_WISCONSIN);
+ }
+
+ /**
+ * Tests the "View Page Source" in the first example. It checks that the
source
+ * code is not visible, clicks on the link, and checks 10 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExamplePageSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<script
type=\"text/javascript\">//<![CDATA[",
+ "\"<tr><td>State</td><td>1st
City</td><td>2nd City</td><td>3rd
City</td></tr>\" +",
+ "vertical-align: top;",
+ "<h:panelGrid columns=\"2\"
columnClasses=\"sb_test_column1,sb_test_column2\"
width=\"100%\">",
+ "<rich:suggestionbox id=\"suggestionBoxId\"
for=\"text\" tokens=\",[]\"",
+ " rules=\"#{suggestionBox.rules}\"",
+ "suggestionAction=\"#{capitalsBean.autocomplete}\"
var=\"result\"",
+ "height=\"#{suggestionBox.height}\"",
+ "nothingLabel=\"No capitals found\"
columnClasses=\"center\"",
+ };
+
+ abstractTestSource(1, "View Page Source", strings);
+ }
+
+ /**
+ * Tests the "View CapitalsBean.java Source" in the first example. It
checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExampleBeanSource() {
+ String[] strings = new String[] {
+ "package org.richfaces.demo.capitals;",
+ "import javax.faces.FacesException;",
+ "public class CapitalsBean {",
+ "public List<Capital> autocomplete(Object suggest) {",
+ "if ((elem.getName() != null &&
elem.getName().toLowerCase().indexOf(pref.toLowerCase()) == 0) ||
\"\".equals(pref))",
+ "URL rulesUrl =
getClass().getResource(\"capitals-rules.xml\");",
+
"digester.parse(getClass().getResourceAsStream(\"capitals.xml\"));",
+ "public ArrayList<Capital> getCapitals() {",
+ };
+
+ abstractTestSource(1, "View CapitalsBean.java Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the second example. It checks that the
source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testSecondExamplePageSource() {
+ String[] strings = new String[] {
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0
Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">",
+ "<h:form id=\"form\">",
+ "<h:panelGrid columns=\"2\">",
+ "<rich:suggestionbox height=\"200\"
width=\"200\"",
+ "usingSuggestObjects=\"true\"",
+
"onobjectchange=\"printObjectsSelected(#{rich:element('objects')},
#{rich:component('suggestion')});\"",
+ "suggestionAction=\"#{capitalsBean.autocomplete}\"
var=\"cap\"",
+ "for=\"statesinput\" fetchValue=\"#{cap.name}\"
id=\"suggestion\" tokens=\",\">",
+ };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Pulls out the value of the specified attribute from the specified location.
+ * @param loc an attribute locator
+ * @param attr an 'subattribute' whose value we want (e.g. <div
style="left: 4px;"/>, then loc=//div@style and attr=left
+ * @return the value of the subattribute
+ */
+ private int getValue(String loc, String attr) {
+ String tmp = selenium.getAttribute(loc);
+ int firstIdx = tmp.indexOf(attr) + 2 + attr.length();
+ int secondIdx = tmp.indexOf("px;", firstIdx);
+ return Integer.parseInt(tmp.substring(firstIdx, secondIdx));
+ }
+
+ /**
+ * Pulls out opacity from the specified attribute.
+ * @param loc an attribute locator
+ * @return the value of opacity
+ */
+ private double getOpacity(String loc) {
+ String tmp = selenium.getAttribute(loc);
+ int firstIdx = tmp.indexOf("opacity") + 9;
+ int secondIdx = tmp.indexOf(";", firstIdx);
+ return Double.parseDouble(tmp.substring(firstIdx, secondIdx));
+ }
+
+ /**
+ * Loads the page containing the calendar component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richInputs", 10, 1, MSG_COMPONENT_DESCRIPTION);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/suggestionBox/SuggestionBoxTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/TabPanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/TabPanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/TabPanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,191 @@
+package org.jboss.richfaces.integrationTest.tabPanel;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests tab panel. Tests all three tabs -- usage, customization,
+ * and deletion.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class TabPanelTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages -- Usage
+ private final String MSG_USAGE_COMPONENT_DESCRIPTION =
getMess("USAGE_COMPONENT_DESCRIPTION");
+ private final String MSG_USAGE_CONTENT_OF_PANEL_N =
getMess("USAGE_CONTENT_OF_PANEL_N");
+ private final String MSG_USAGE_SECOND_TAB_SHOULD_BE_DISABLED =
getMess("USAGE_SECOND_TAB_SHOULD_BE_DISABLED");
+
+ // messages -- Look Customization
+ private final String MSG_CUST_COMPONENT_DESCRIPTION =
getMess("CUST_COMPONENT_DESCRIPTION");
+ private final String MSG_CUST_TABS_RIGHT_ALIGNED =
getMess("CUST_TABS_RIGHT_ALIGNED");
+
+ // messages -- Tabs Deletion
+ private final String MSG_DELET_COMPONENT_DESCRIPTION =
getMess("DELET_COMPONENT_DESCRIPTION");
+ private final String MSG_DELET_NUMBER_OF_TABS =
getMess("DELET_NUMBER_OF_TABS");
+
+ // locators -- Usage
+ private final String LOC_USAGE_EXAMPLE_HEADER =
getLoc("USAGE_EXAMPLE_HEADER");
+ private final String LOC_USAGE_PANEL_N_TAB_M = getLoc("USAGE_PANEL_N_TAB_M");
+ private final String LOC_USAGE_PANEL_N_TEXT = getLoc("USAGE_PANEL_N_TEXT");
+ private final String LOC_USAGE_PANEL_3_N_TEXT =
getLoc("USAGE_PANEL_3_N_TEXT");
+
+ // locators -- Look Customization
+ private final String LOC_CUST_EXAMPLE_HEADER = getLoc("CUST_EXAMPLE_HEADER");
+ private final String LOC_CUST_TABS_ALIGN = getLoc("CUST_TABS_ALIGN");
+ private final String LOC_CUST_PANEL_TEXT = getLoc("CUST_PANEL_TEXT");
+ private final String LOC_CUST_PANEL_TAB_N = getLoc("CUST_PANEL_TAB_N");
+
+ // locators -- Tabs Deletion
+ private final String LOC_DELET_EXAMPLE_HEADER =
getLoc("DELET_EXAMPLE_HEADER");
+ private final String LOC_DELET_PANEL_TABS = getLoc("DELET_PANEL_TABS");
+ private final String LOC_DELET_PANEL_TAB_N_CLOSE =
getLoc("DELET_PANEL_TAB_N_CLOSE");
+ private final String LOC_DELET_RESET_BUTTON = getLoc("DELET_RESET_BUTTON");
+
+ /**
+ * Tests three tab panels from the usage tab. It click on each tab and
+ * verifies that the content of panel changed appropriately.
+ */
+ @Test
+ public void testTabPanelExample() {
+ super.loadPage("richOutputs", 10, 1, MSG_USAGE_COMPONENT_DESCRIPTION);
+ String text;
+
+ // test the first tab panel
+ for (int i = 3; i > 0; i--) {
+ scrollIntoView(LOC_USAGE_EXAMPLE_HEADER, true); // scrolling is
+ // forgotten after
+ // page reload
+ selenium.click(String.format(LOC_USAGE_PANEL_N_TAB_M, 1, i));
+ waitFor(2000);
+ text = selenium.getText(String.format(LOC_USAGE_PANEL_N_TEXT, 1));
+ assertEquals(text, "Here is tab #" + i, String.format(
+ MSG_USAGE_CONTENT_OF_PANEL_N, 1));
+ }
+
+ // test the second tab panel
+ scrollIntoView(LOC_USAGE_EXAMPLE_HEADER, true);
+ selenium.click(String.format(LOC_USAGE_PANEL_N_TAB_M, 2, 3));
+ waitFor(2000);
+ text = selenium.getText(String.format(LOC_USAGE_PANEL_N_TEXT, 2));
+ assertEquals(text, "Here is tab #" + 3, String.format(
+ MSG_USAGE_CONTENT_OF_PANEL_N, 2));
+
+ selenium.click(String.format(LOC_USAGE_PANEL_N_TAB_M, 2, 1));
+ waitFor(2000);
+ text = selenium.getText(String.format(LOC_USAGE_PANEL_N_TEXT, 2));
+ assertEquals(text, "Here is tab #" + 1, String.format(
+ MSG_USAGE_CONTENT_OF_PANEL_N, 2));
+
+ // test the disabled tab
+ boolean isEnabled = true;
+ try {
+ selenium.getAttribute(
+ String.format(LOC_USAGE_PANEL_N_TAB_M, 2, 2) + "@class")
+ .contains("rich-tab-diabled");
+ assertFalse(isEnabled, MSG_USAGE_SECOND_TAB_SHOULD_BE_DISABLED);
+ } catch (Exception e) {
+ // OK - there is no class attribute
+ }
+ selenium.click(String.format(LOC_USAGE_PANEL_N_TAB_M, 2, 2));
+ waitFor(2000);
+ text = selenium.getText(String.format(LOC_USAGE_PANEL_N_TEXT, 2));
+ assertEquals(text, "Here is tab #1", String.format(
+ MSG_USAGE_CONTENT_OF_PANEL_N, 2));
+
+ // test the third tab panel -- client type work different
+ scrollIntoView(LOC_USAGE_EXAMPLE_HEADER, true);
+ for (int i = 3; i > 0; i--) {
+ selenium.click(String.format(LOC_USAGE_PANEL_N_TAB_M, 3, i));
+ waitFor(2000);
+ for (int j = 1; j < 4; j++) {
+ if (i == j) {
+ assertTrue(isDisplayed(String.format(
+ LOC_USAGE_PANEL_3_N_TEXT, j)));
+ } else {
+ assertFalse(isDisplayed(String.format(
+ LOC_USAGE_PANEL_3_N_TEXT, j)));
+ }
+ }
+ }
+ }
+
+ /**
+ * Tests tab panel customization. It clicks every tab and verifies that the
+ * content of panel changed. Then it checks that the tabs are aligned to the
+ * right.
+ */
+ @Test
+ public void testCustomization() {
+ super.loadPage("richOutputs", 10, 2, MSG_CUST_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_CUST_EXAMPLE_HEADER, true);
+
+ String text;
+
+ for (int i = 3; i > 0; i--) {
+ selenium.click(String.format(LOC_CUST_PANEL_TAB_N, i));
+ waitFor(2000);
+ for (int j = 1; j < 4; j++) {
+ if (i == j) {
+ assertTrue(isDisplayed(String
+ .format(LOC_CUST_PANEL_TEXT, j)));
+ } else {
+ assertFalse(isDisplayed(String.format(LOC_CUST_PANEL_TEXT,
+ j)));
+ }
+ }
+ }
+
+ text = selenium.getAttribute(LOC_CUST_TABS_ALIGN);
+ assertEquals(text, "right", MSG_CUST_TABS_RIGHT_ALIGNED);
+ }
+
+ /**
+ * Tests tabs deletion. First it check that there are 3 tabs, then deletes
+ * the third, the second, and the first tab. After each deletion it verifies
+ * the number of remaining tabs. In the end it clicks the reset button and
+ * checks that all tabs were restored.
+ */
+ @Test
+ public void testTabsDeletion() {
+ super.loadPage("richOutputs", 10, 3, MSG_DELET_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_DELET_EXAMPLE_HEADER, true);
+
+ int count = selenium.getXpathCount(LOC_DELET_PANEL_TABS).intValue();
+ assertEquals(count - 4, 3, MSG_DELET_NUMBER_OF_TABS);
+
+ for (int i = 3; i > 0; i--) {
+ selenium.click(String.format(LOC_DELET_PANEL_TAB_N_CLOSE, i));
+ waitFor(2000);
+ count = selenium.getXpathCount(LOC_DELET_PANEL_TABS).intValue();
+ assertEquals(count / 2, i - 1, MSG_DELET_NUMBER_OF_TABS);
+ }
+
+ selenium.click(LOC_DELET_RESET_BUTTON);
+ waitFor(2000);
+ count = selenium.getXpathCount(LOC_DELET_PANEL_TABS).intValue();
+ assertEquals(count - 4, 3, MSG_DELET_NUMBER_OF_TABS);
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 5 lines of source code.
+ */
+ @Test
+ public void testUsageTabExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:tabPanel>", "<rich:tab
label=\"First\">",
+ "Here is tab #2", "<rich:tabPanel
switchType=\"ajax\">",
+ "<rich:tab label=\"Second\" disabled=\"true\">",
+ "<rich:tabPanel switchType=\"client\">", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tabPanel/TabPanelTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/TogglePanelTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/TogglePanelTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/TogglePanelTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,172 @@
+package org.jboss.richfaces.integrationTest.togglePanel;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests toggle panel.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class TogglePanelTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_COMPONENT_DESCRIPTION =
getMess("COMPONENT_DESCRIPTION");
+ private final String MSG_CLICK_ME_BUTTON_VISIBLE =
getMess("CLICK_ME_BUTTON_VISIBLE");
+ private final String MSG_CLICK_ME_BUTTON_NOT_VISIBLE =
getMess("CLICK_ME_BUTTON_NOT_VISIBLE");
+ private final String MSG_PANEL_N_VISIBLE = getMess("PANEL_N_VISIBLE");
+ private final String MSG_PANEL_N_NOT_VISIBLE =
getMess("PANEL_N_NOT_VISIBLE");
+
+ // locators
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_CLICK_ME_BUTTON = getLoc("CLICK_ME_BUTTON");
+ private final String LOC_CLICK_ME_BUTTON_A =
formatLoc("CLICK_ME_BUTTON_A_RELATIVE", LOC_CLICK_ME_BUTTON);
+ private final String LOC_CLOSE_BUTTON = getLoc("CLOSE_BUTTON");
+ private final String LOC_PANEL_N = getLoc("PANEL_N");
+ private final String LOC_PREVIOUS_BUTTON_N = getLoc("PREVIOUS_BUTTON_N");
+ private final String LOC_NEXT_BUTTON_N = getLoc("NEXT_BUTTON_N");
+
+ /**
+ * Tests opening and closing the panel. It verifies that the "Click Me"
+ * button and all panels are in proper state.
+ */
+ @Test
+ public void testOpenClosePanel() {
+ assertTrue(isDisplayed(LOC_CLICK_ME_BUTTON),
+ MSG_CLICK_ME_BUTTON_VISIBLE);
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+
+ // open the panel
+ selenium.click(LOC_CLICK_ME_BUTTON_A);
+ assertFalse(isDisplayed(LOC_CLICK_ME_BUTTON),
+ MSG_CLICK_ME_BUTTON_NOT_VISIBLE);
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+
+ // close the panel
+ selenium.click(LOC_CLOSE_BUTTON);
+ assertTrue(isDisplayed(LOC_CLICK_ME_BUTTON),
+ MSG_CLICK_ME_BUTTON_VISIBLE);
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+ }
+
+ /**
+ * Tests navigating between panels. First it opens the toggle panel and then
+ * click next twice and previous twice. After each click it verifies that
+ * only necessary elements are visible.
+ */
+ @Test
+ public void testNavigation() {
+ // open the panel
+ selenium.click(LOC_CLICK_ME_BUTTON_A);
+
+ // 1st panel is open
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+
+ // click next -- move to the 2nd panel
+ selenium.click(String.format(LOC_NEXT_BUTTON_N, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 1));
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+
+ // click next -- move to the 3rd panel
+ selenium.click(String.format(LOC_NEXT_BUTTON_N, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_VISIBLE, 3));
+
+ // click previous -- move to the 2nd panel
+ selenium.click(String.format(LOC_PREVIOUS_BUTTON_N, 3));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 1));
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+
+ // click previous -- move to the 1st panel
+ selenium.click(String.format(LOC_PREVIOUS_BUTTON_N, 2));
+ assertTrue(isDisplayed(String.format(LOC_PANEL_N, 1)), String.format(
+ MSG_PANEL_N_VISIBLE, 1));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 2)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 2));
+ assertFalse(isDisplayed(String.format(LOC_PANEL_N, 3)), String.format(
+ MSG_PANEL_N_NOT_VISIBLE, 3));
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 8 lines of source code.
+ */
+ @Test
+ public void testComponentSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ ".infopanel { border:2px solid #{richSkin.panelBorderColor}; }",
+ "<rich:togglePanel value=\"#{toggleBean.skinChooserState1}\"
switchType=\"client\"",
+ "stateOrder=\"closed,tip1, tip2,tip3\">",
+ "<h:graphicImage id=\"pic\" style=\"border-width:0\"
value=\"/richfaces/togglePanel/picture/clickme.gif\" />",
+ "<f:facet name=\"tip1\">",
+ "<ui:include
src=\"/richfaces/togglePanel/examples/tipBlock.xhtml\">",
+ "<ui:param name=\"tip\" value=\"rich:toggleControl might bre
located inside of outside", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View TipBlock.xhtml Source". It checks that the source code is
+ * not visible, clicks on the link, and checks 7 lines of source code.
+ */
+ @Test
+ public void testXhtmlSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<f:subview>",
+ "<h:panelGrid styleClass=\"infopanel\"
cellpadding=\"0\" cellspacing=\"0\"
columnClasses=\"col\"",
+ "<h:outputText value=\"#{tip}\" />",
+ "<rich:separator height=\"1\" />",
+ "<h:panelGrid columns=\"3\">",
+ "<rich:toggleControl switchToState=\"#{previous}\"
value=\"#{empty previous? '': '« Previous'}\"
/>", };
+
+ abstractTestSource(1, "View TipBlock.xhtml Source", strings);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ super.loadPage("richOutputs", 11, 1, MSG_COMPONENT_DESCRIPTION);
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/togglePanel/TogglePanelTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/ToolBarTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/ToolBarTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/ToolBarTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,263 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.toolBar;
+
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.*;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test case that tests tool bar.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class ToolBarTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ // messages
+ private final String MSG_ITEM_CLASS_ATTRIBUTE =
getMsg("ITEM_CLASS_ATTRIBUTE");
+ private final String MSG_GROUP_SEPARATOR = getMsg("GROUP_SEPARATOR");
+ private final String MSG_ITEM_SEPARATOR = getMsg("GROUP_SEPARATOR");
+ private final String MSG_ITEM_IMAGE_S = getMsg("ITEM_IMAGE_S");
+ private final String MSG_THERE_IS_NO_GROUP_SEPARATOR =
getMsg("THERE_IS_NO_GROUP_SEPARATOR");
+ private final String MSG_THERE_IS_GROUP_SEPARATOR =
getMsg("THERE_IS_GROUP_SEPARATOR");
+ private final String MSG_THERE_IS_NO_ITEM_SEPARATOR =
getMsg("THERE_IS_NO_ITEM_SEPARATOR");
+ private final String MSG_THERE_IS_ITEM_SEPARATOR =
getMsg("THERE_IS_ITEM_SEPARATOR");
+ private final String MSG_GROUP_SEPARATOR_S = getMsg("GROUP_SEPARATOR_S");
+ private final String MSG_ITEM_SEPARATOR_S = getMsg("ITEM_SEPARATOR_S");
+
+ // locators
+ private final String LOC_EXAMPLE_N_HEADER = getLoc("EXAMPLE_N_HEADER");
+ private final String LOC_FIRST_TOOLBAR_ITEM_N =
getLoc("FIRST_TOOLBAR_ITEM_N");
+ private final String LOC_SECOND_TOOLBAR_ITEM_N =
getLoc("SECOND_TOOLBAR_ITEM_N");
+ private final String LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N =
getLoc("THIRD_TOOLBAR_GROUP_SEPARATOR_N");
+ private final String LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N =
getLoc("THIRD_TOOLBAR_ITEM_SEPARATOR_N");
+ private final String LOC_GROUP_SEPARATOR_IMG =
getLoc("GROUP_SEPARATOR_IMG");
+ private final String LOC_ITEM_SEPARATOR_IMG =
getLoc("ITEM_SEPARATOR_IMG");
+
+ /**
+ * Tests the first tool bar. It checks the class attribute of three items
+ * from toolbar, align attribute of the group separator, and style attribute
+ * of the big separator. Then it checks that three chosen items display
+ * necessary image.
+ */
+ @Test
+ public void testFirstToolBar() {
+ scrollIntoView(format(LOC_EXAMPLE_N_HEADER, 1), true);
+
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_FIRST_TOOLBAR_ITEM_N, 1)), MSG_ITEM_CLASS_ATTRIBUTE);
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_FIRST_TOOLBAR_ITEM_N, 5)), MSG_ITEM_CLASS_ATTRIBUTE);
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_FIRST_TOOLBAR_ITEM_N, 9)), MSG_ITEM_CLASS_ATTRIBUTE);
+
+ String text = selenium.getAttribute(format(LOC_FIRST_TOOLBAR_ITEM_N, 4) +
"@align");
+ assertTrue(text.contains("center"), MSG_GROUP_SEPARATOR);
+
+ text = selenium.getAttribute(format(LOC_FIRST_TOOLBAR_ITEM_N, 1) +
"/img@src");
+ assertTrue(text.contains("create_doc.gif"), format(MSG_ITEM_IMAGE_S,
"create_doc.gif"));
+
+ text = selenium.getAttribute(format(LOC_FIRST_TOOLBAR_ITEM_N, 2) +
"/img@src");
+ assertTrue(text.contains("create_folder.gif"), format(MSG_ITEM_IMAGE_S,
"create_folder.gif"));
+
+ text = selenium.getAttribute(format(LOC_FIRST_TOOLBAR_ITEM_N, 6) +
"/img@src");
+ assertTrue(text.contains("save_as.gif"), format(MSG_ITEM_IMAGE_S,
"save_as.gif"));
+ }
+
+ /**
+ * Tests the second tool bar. It checks the class attribute of three items
+ * from toolbar, align attribute of the item separator, and style attribute
+ * of the big separator. Then it checks that two chosen items display
+ * necessary image.
+ */
+ @Test
+ public void testSecondToolBar() {
+ scrollIntoView(format(LOC_EXAMPLE_N_HEADER, 2), true);
+
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_SECOND_TOOLBAR_ITEM_N, 1)), MSG_ITEM_CLASS_ATTRIBUTE);
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_SECOND_TOOLBAR_ITEM_N, 4)), MSG_ITEM_CLASS_ATTRIBUTE);
+ assertTrue(belongsClass("rich-toolbar-item",
format(LOC_SECOND_TOOLBAR_ITEM_N, 7)), MSG_ITEM_CLASS_ATTRIBUTE);
+
+ String text = selenium.getAttribute(format(LOC_SECOND_TOOLBAR_ITEM_N, 3) +
"@align");
+ assertTrue(text.contains("center"), MSG_ITEM_SEPARATOR);
+
+ text = selenium.getAttribute(format(LOC_SECOND_TOOLBAR_ITEM_N, 1) +
"/img@src");
+ assertTrue(text.contains("edit.gif"), format(MSG_ITEM_IMAGE_S,
"edit.gif"));
+
+ text = selenium.getAttribute(format(LOC_SECOND_TOOLBAR_ITEM_N, 4) +
"/img@src");
+ assertTrue(text.contains("find.gif"), format(MSG_ITEM_IMAGE_S,
"find.gif"));
+ }
+
+ /**
+ * Tests all types of group separators in the third tool bar.
+ */
+ @Test
+ public void testThirdToolBarGroupSeparators() {
+ scrollIntoView(format(LOC_EXAMPLE_N_HEADER, 3), true);
+ String text;
+
+ // select line
+ selenium.click(format(LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N, 1));
+ waitForElement(LOC_GROUP_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_GROUP_SEPARATOR_IMG),
MSG_THERE_IS_NO_GROUP_SEPARATOR);
+ text = selenium.getAttribute(LOC_GROUP_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("LineSeparatorImage"),
format(MSG_GROUP_SEPARATOR_S, "LineSeparatorImage"));
+
+ // select grid
+ selenium.click(format(LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N, 2));
+ waitForElement(LOC_GROUP_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_GROUP_SEPARATOR_IMG),
MSG_THERE_IS_NO_GROUP_SEPARATOR);
+ text = selenium.getAttribute(LOC_GROUP_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("GridSeparatorImage"),
format(MSG_GROUP_SEPARATOR_S, "GridSeparatorImage"));
+
+ // select disc
+ selenium.click(format(LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N, 3));
+ waitForElement(LOC_GROUP_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_GROUP_SEPARATOR_IMG),
MSG_THERE_IS_NO_GROUP_SEPARATOR);
+ text = selenium.getAttribute(LOC_GROUP_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("DotSeparatorImage"),
format(MSG_GROUP_SEPARATOR_S, "DotSeparatorImage"));
+
+ // select square
+ selenium.click(format(LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N, 4));
+ waitForElement(LOC_GROUP_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_GROUP_SEPARATOR_IMG),
MSG_THERE_IS_NO_GROUP_SEPARATOR);
+ text = selenium.getAttribute(LOC_GROUP_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("SquareSeparatorImage"),
format(MSG_GROUP_SEPARATOR_S, "SquareSeparatorImage"));
+
+ // select none
+ selenium.click(format(LOC_THIRD_TOOLBAR_GROUP_SEPARATOR_N, 5));
+ Wait.failWith(MSG_THERE_IS_GROUP_SEPARATOR).until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(LOC_GROUP_SEPARATOR_IMG);
+ }
+ });
+ }
+
+ /**
+ * Tests all types of item separators in the third tool bar.
+ */
+ @Test
+ public void testToolBarItemSeparators() {
+ scrollIntoView(format(LOC_EXAMPLE_N_HEADER, 3), true);
+ String text;
+
+ // select line
+ selenium.click(format(LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N, 1));
+ waitForElement(LOC_ITEM_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_ITEM_SEPARATOR_IMG),
MSG_THERE_IS_NO_ITEM_SEPARATOR);
+ text = selenium.getAttribute(LOC_ITEM_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("LineSeparatorImage"),
format(MSG_ITEM_SEPARATOR_S, "LineSeparatorImage"));
+
+ // select grid
+ selenium.click(format(LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N, 2));
+ waitForElement(LOC_ITEM_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_ITEM_SEPARATOR_IMG),
MSG_THERE_IS_NO_ITEM_SEPARATOR);
+ text = selenium.getAttribute(LOC_ITEM_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("GridSeparatorImage"),
format(MSG_ITEM_SEPARATOR_S, "GridSeparatorImage"));
+
+ // select disc
+ selenium.click(format(LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N, 3));
+ waitForElement(LOC_ITEM_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_ITEM_SEPARATOR_IMG),
MSG_THERE_IS_NO_ITEM_SEPARATOR);
+ text = selenium.getAttribute(LOC_ITEM_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("DotSeparatorImage"),
format(MSG_ITEM_SEPARATOR_S, "DotSeparatorImage"));
+
+ // select square
+ selenium.click(format(LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N, 4));
+ waitForElement(LOC_ITEM_SEPARATOR_IMG);
+ assertTrue(selenium.isElementPresent(LOC_ITEM_SEPARATOR_IMG),
MSG_THERE_IS_NO_ITEM_SEPARATOR);
+ text = selenium.getAttribute(LOC_ITEM_SEPARATOR_IMG + "@src");
+ assertTrue(text.contains("SquareSeparatorImage"),
format(MSG_ITEM_SEPARATOR_S, "SquareSeparatorImage"));
+
+ // select none
+ selenium.click(format(LOC_THIRD_TOOLBAR_ITEM_SEPARATOR_N, 5));
+ Wait.failWith(MSG_THERE_IS_ITEM_SEPARATOR).until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(LOC_ITEM_SEPARATOR_IMG);
+ }
+ });
+ }
+
+ /**
+ * Tests the "View Source" in the first example. It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testFirstExampleSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "margin-bottom: -4px;", "<rich:toolBar
height=\"26\" itemSeparator=\"grid\">",
"<rich:toolBarGroup>",
+ "<h:graphicImage value=\"/images/icons/create_doc.gif\"
styleClass=\"pic\"/>",
+ "<h:graphicImage
value=\"/images/icons/create_folder.gif\"
styleClass=\"pic\"/>",
+ "<h:graphicImage value=\"/images/icons/save.gif\"
styleClass=\"pic\"/>",
+ "<h:graphicImage value=\"/images/icons/filter.gif\"
styleClass=\"pic\"/>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the second example. It checks that the
source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testSecondExampleSource() {
+ String[] strings = new String[] { "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<rich:toolBar height=\"34\"
itemSeparator=\"line\">", "<rich:toolBarGroup>",
+ "<h:graphicImage id=\"edit\"
value=\"/images/icons/edit.gif\" />",
+ "<h:outputLabel value=\"Edit\" for=\"edit\"
/>", "<rich:toolBarGroup location=\"right\">",
+ "<h:inputText styleClass=\"barsearch\" />",
+ "<h:commandButton styleClass=\"barsearchbutton\"
onclick=\"return false;\" value=\"Search\" />", };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the third example. It checks that the source
+ * code is not visible, clicks on the link, and checks 10 lines of source
+ * code.
+ */
+ @Test
+ public void testThirdExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:panelGrid columns=\"3\" width=\"100%\"
cellpadding=\"0\" cellspacing=\"0\" style=\"margin-bottom :
4px\">",
+ "<h:panelGrid columns=\"8\">",
"<a4j:commandLink value=\"Line\" reRender=\"bar\">",
+ "<a4j:actionparam name=\"gs\" value=\"line\"
assignTo=\"#{tbBean.groupSeparator}\" />",
+ "<h:panelGroup style=\"padding-left : 4px\">",
+ "<rich:panel
bodyClass=\"rich-laguna-panel-no-header\">",
+ "<h:outputText value=\"Group Item Separator:\"
/>",
+ "<rich:toolBar id=\"bar\" height=\"30\"
itemSeparator=\"#{tbBean.groupSeparator}\">",
+ "<rich:toolBarGroup
itemSeparator=\"#{tbBean.groupItemSeparator}\">", };
+
+ abstractTestSource(3, "View Source", strings);
+ }
+
+ /**
+ * Loads the page containing the component.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Tool Bar");
+ }
+}
Property changes on:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/toolBar/ToolBarTestCase.java
___________________________________________________________________
Name: svn:executable
+ *
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipDataTableTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipDataTableTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipDataTableTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,90 @@
+package org.jboss.richfaces.integrationTest.tooltip;
+
+import junit.framework.Assert;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class TooltipDataTableTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.allowNativeXpath("true");
+
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(table, true);
+ }
+
+ private static class Column {
+ public static final int MAKE = 0;
+ public static final int MODEL = 1;
+ public static final int YEAR = 2;
+ }
+
+ private final String PAGE = "richfaces/toolTip.jsf?c=toolTip&tab=table";
+ private final String table = getLoc("data-table--table");
+ private final String cells = getLoc("data-table--cells-preformatted");
+ private final String coords = getMess("data-table--coords--event-at-cell");
+ private final String itemsOnTooltip = getLoc("data-table--items-on-tooltip");
+ private final String outputTooltipMake = format(itemsOnTooltip, Column.MAKE);
+ private final String outputTooltipModel = format(itemsOnTooltip,
+ Column.MODEL);
+ private final String outputTooltipYear = format(itemsOnTooltip, Column.YEAR);
+
+ @Test
+ public void iterateThroughTableTest() {
+ openPage();
+
+ int rows = selenium.getXpathCount(format(cells, 0, Column.MAKE))
+ .intValue();
+
+ for (int row = 1; row <= rows; row++) {
+ final String cellMake = format(cells, row, Column.MAKE);
+ final String cellModel = format(cells, row, Column.MODEL);
+ final String cellYear = format(cells, row, Column.YEAR);
+ final String activeTooltipArea = formatLoc(
+ "data-table--relative--cell-make-to-its-active-tooltip-area",
+ cellMake);
+
+ if (row == 1)
+ selenium.mouseMoveAt(activeTooltipArea, coords);
+ mouseOverAt(activeTooltipArea, coords);
+ waitForElementAppears(outputTooltipMake);
+
+ Assert.assertEquals(selenium.getText(outputTooltipMake), selenium
+ .getText(formatLoc(
+ "data-table--relative--cell-make-to-its-label",
+ cellMake)));
+ Assert.assertEquals(selenium.getText(outputTooltipModel), selenium
+ .getText(cellModel));
+ Assert.assertEquals(selenium.getText(outputTooltipYear), selenium
+ .getText(cellYear));
+
+ selenium.mouseOut(activeTooltipArea);
+ waitForElementDisappears(outputTooltipMake);
+ }
+ }
+
+ private void waitForElementAppears(final String locator) {
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return selenium.isElementPresent(locator);
+ }
+ });
+ }
+
+ private void waitForElementDisappears(final String locator) {
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(locator);
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tooltip/TooltipTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,164 @@
+package org.jboss.richfaces.integrationTest.tooltip;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.*;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class TooltipTestCase extends AbstractSeleniumRichfacesTestCase {
+ /**
+ * Opens specified page
+ */
+ public void openPage() {
+ selenium.allowNativeXpath("true");
+
+ selenium.open(format("{0}/{1}", contextPath, PAGE));
+
+ scrollIntoView(header, true);
+ }
+
+ private final String PAGE = "richfaces/toolTip.jsf?c=toolTip&tab=usage";
+ private final String header = getLoc("header");
+
+ private final String coords = getMess("coords--event-at-panel");
+ private final String tooltip =
getLoc("tooltip--text-part--tooltips-requested");
+ private final String toolTipWait = getMess("output--tooltip3-4-wait");
+ private final String toolTipText = getMess("output--tooltip3-4-text-part");
+ private final Pattern pattern =
Pattern.compile(getMess("regexp--tooltips-requested"));
+
+ @Test
+ public void defaultToolTipTest() {
+ openPage();
+
+ final String panel = getLoc("panel--sample1");
+ final String toolTipText = getMess("output--tooltip1-text-part");
+
+ for (int i = 0; i < 3; i++) {
+ Assert.assertFalse(selenium.isTextPresent(toolTipText));
+
+ if (i == 0) /*
+ * satisfies that mouseOverAt will work as expected -
+ * without this mouseOverAt do nothing
+ */
+ selenium.mouseMoveAt(panel, coords);
+ mouseOverAt(panel, coords);
+
+ waitForText(toolTipText);
+
+ selenium.mouseOut(panel);
+ waitForTextDisappears(toolTipText);
+ }
+ }
+
+ @Test
+ public void followMouseDelayedTest() {
+ openPage();
+
+ final String panel = getLoc("panel--sample2");
+ final String toolTipText = getMess("output--tooltip2-text-part");
+
+ for (int i = 0; i < 3; i++) {
+ Assert.assertFalse(selenium.isTextPresent(toolTipText));
+
+ if (i == 0)
+ selenium.mouseMoveAt(panel, coords);
+ mouseOverAt(panel, coords);
+
+ waitForText(toolTipText);
+
+ selenium.mouseOut(panel);
+ waitForTextDisappears(toolTipText);
+ }
+ }
+
+ @Test
+ public void separateServerRequestsTest() {
+ openPage();
+
+ final String panel = getLoc("panel--sample3");
+ Integer tooltipsRequested = null;
+
+ for (int i = 0; i < 3; i++) {
+ Assert.assertFalse(selenium.isTextPresent(toolTipWait));
+ Assert.assertFalse(selenium.isTextPresent(toolTipText));
+
+ if (i == 0)
+ selenium.mouseMoveAt(panel, coords);
+ mouseOverAt(panel, coords);
+
+ tooltipsRequested = waitForTooltipChanges(tooltipsRequested, i == 0);
+
+ selenium.mouseOut(panel);
+ waitForTextDisappears(toolTipText);
+ }
+ }
+
+ @Test
+ public void mouseClickActivationTest() {
+ openPage();
+
+ final String panel = getLoc("panel--sample4");
+ Integer tooltipsRequested = null;
+
+ for (int i = 0; i < 3; i++) {
+ Assert.assertFalse(selenium.isTextPresent(toolTipWait));
+ Assert.assertFalse(selenium.isTextPresent(toolTipText));
+
+ selenium.clickAt(panel, coords);
+
+ tooltipsRequested = waitForTooltipChanges(tooltipsRequested, i == 0);
+
+ selenium.mouseOut(panel);
+ waitForTextDisappears(toolTipText);
+ }
+ }
+
+ private Integer waitForTooltipChanges(Integer tooltipsRequestedOld, boolean firstLoop)
{
+ Integer tooltipsRequested = null;
+
+ if (firstLoop) {
+ waitForText(toolTipWait);
+ waitForText(toolTipText);
+ tooltipsRequested = retrieveRequestedTooltips.retrieve();
+ } else {
+ waitForText(toolTipText);
+ tooltipsRequested = Wait.waitForChangeAndReturn(tooltipsRequestedOld,
retrieveRequestedTooltips);
+
+ if (tooltipsRequestedOld != null) {
+ Assert.assertEquals(tooltipsRequested, Integer.valueOf(tooltipsRequestedOld + 1));
+ }
+ }
+
+ return tooltipsRequested;
+ }
+
+ private Retrieve<Integer> retrieveRequestedTooltips = new
Retrieve<Integer>() {
+ public Integer retrieve() {
+ String text = Wait.interval(20).timeout(2000).waitForChangeAndReturn(null, new
Retrieve<String>() {
+ public String retrieve() {
+ return getTextOrNull(tooltip);
+ }
+ });
+ Matcher matcher = pattern.matcher(text);
+ if (!matcher.matches()) {
+ Assert.fail();
+ }
+ return Integer.valueOf(matcher.group(1));
+ }
+ };
+
+ private void waitForTextDisappears(final String text) {
+ waitModelUpdate.until(new Condition() {
+ public boolean isTrue() {
+ return !selenium.isElementPresent(text);
+ }
+ });
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeNodesAdaptorTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeNodesAdaptorTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeNodesAdaptorTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,182 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.tree;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.jboss.test.selenium.waiting.Condition;
+import org.jboss.test.selenium.waiting.Wait;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test for tree nodes adaptors.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class TreeNodesAdaptorTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String LOC_EXAMPLE_HEADER = getLoc("EXAMPLE_HEADER");
+ private final String LOC_TABLE_SUBNODES = getLoc("TABLE_SUBNODES");
+ private final String LOC_DEMO_NODE = getLoc("DEMO_NODE");
+ private final String LOC_DIV_SUBNODES_PREFORMATTED =
getLoc("DIV_SUBNODES_PREFORMATTED");
+
+ private final int MSG_CHILDREN_COUNT =
Integer.parseInt(getMsg("CHILDREN_COUNT"));
+
+ /**
+ * Tests tree on the page. First it clicks on "org/richfaces/demo" to
expand
+ * it. Then it verifies that the node was expanded and that its siblings are
+ * collapsed. After that it clicks on "org/richfaces/demo" again and
checks
+ * that tha node and all its siblings are collapsed.
+ */
+ @Test
+ public void testTreeNodesAdaptor() {
+ scrollIntoView(LOC_EXAMPLE_HEADER, true);
+
+ int count = selenium.getXpathCount(LOC_TABLE_SUBNODES).intValue();
+ assertEquals(count, MSG_CHILDREN_COUNT, "Nodes in org/richfaces.");
+
+ // click "demo"
+ selenium.click(LOC_DEMO_NODE);
+
+ // wait until the node is expanded
+ Wait.failWith("The node org/richfaces/demo should be
expanded.").until(new Condition() {
+ public boolean isTrue() {
+ return isDisplayed(format(LOC_DIV_SUBNODES_PREFORMATTED, 1));
+ }
+ });
+
+ // check that all siblings of node "demo" are collapsed
+ for (int i = 2; i < 5; i++) {
+ assertFalse(isDisplayed(format(LOC_DIV_SUBNODES_PREFORMATTED, i)), format(
+ "Node nr. {0} in /org/richfaces should be collapsed.",
i));
+ }
+
+ // click "demo" (to collapse node)
+ selenium.click(LOC_DEMO_NODE);
+
+ // wait until the node is collapsed
+ Wait.failWith("The node org/richfaces/demo should be
collapsed.").until(new Condition() {
+ public boolean isTrue() {
+ return !isDisplayed(format(LOC_DIV_SUBNODES_PREFORMATTED, 1));
+ }
+ });
+
+ // check that all siblings of node "demo" are collapsed
+ for (int i = 2; i < 5; i++) {
+ assertFalse(isDisplayed(format(LOC_DIV_SUBNODES_PREFORMATTED, i)), format(
+ "Node nr. {0} in /org/richfaces should be collapsed.",
i));
+ }
+ }
+
+ /**
+ * Tests the "View Source". It checks that the source code is not visible,
+ * clicks on the link, and checks 7 lines of source code.
+ */
+ @Test
+ public void testPageSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form> ",
+ "<rich:tree style=\"width:300px\"
switchType=\"ajax\"
stateAdvisor=\"#{treeDemoStateAdvisor}\">",
+ "<rich:recursiveTreeNodesAdaptor
roots=\"#{fileSystemBean.sourceRoots}\" var=\"item\"
nodes=\"#{item.nodes}\" />",
+ "</rich:tree>", "</h:form>",
"</ui:composition>", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View FileSystemBean.java Source". It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testFileSystemBeanSource() {
+ String[] strings = new String[] { "package
org.richfaces.treemodeladaptor;", "public class FileSystemBean {",
+ "private static String SRC_PATH = \"/WEB-INF/src\";",
"private FileSystemNode[] srcRoots;",
+ "public synchronized FileSystemNode[] getSourceRoots() {",
"if (srcRoots == null) {",
+ "srcRoots = new FileSystemNode(SRC_PATH).getNodes();",
"return srcRoots;", };
+
+ abstractTestSource(1, "View FileSystemBean.java Source", strings);
+ }
+
+ /**
+ * Tests the "View FileSystemNode.java Source". It checks that the source
+ * code is not visible, clicks on the link, and checks 8 lines of source
+ * code.
+ */
+ @Test
+ public void testFileSystemNodeSource() {
+ String[] strings = new String[] { "package
org.richfaces.treemodeladaptor;", "public class FileSystemNode {",
+ "public FileSystemNode(String path) {", "public
synchronized FileSystemNode[] getNodes() {",
+ "FacesContext facesContext =
FacesContext.getCurrentInstance();",
+ "ExternalContext externalContext =
facesContext.getExternalContext();",
+ "Set resourcePaths =
externalContext.getResourcePaths(this.path);",
+ "Object[] nodes = (Object[]) resourcePaths.toArray();", };
+
+ abstractTestSource(1, "View FileSystemNode.java Source", strings);
+ }
+
+ /**
+ * Tests the "View PostbackPhaseListener.java Source". It checks that the
+ * source code is not visible, clicks on the link, and checks 8 lines of
+ * source code.
+ */
+ @Test
+ public void testPostbackPhaseListenerSource() {
+ String[] strings = new String[] { "package
org.richfaces.treemodeladaptor;",
+ "public class PostbackPhaseListener implements PhaseListener
{",
+ "public static final String POSTBACK_ATTRIBUTE_NAME =
PostbackPhaseListener.class.getName();",
+ "public void afterPhase(PhaseEvent event) {", "public void
beforePhase(PhaseEvent event) {",
+ "FacesContext facesContext = event.getFacesContext();",
"public PhaseId getPhaseId() {",
+ "public static boolean isPostback() {", };
+
+ abstractTestSource(1, "View PostbackPhaseListener.java Source",
strings);
+ }
+
+ /**
+ * Tests the "View TreeDemoStateAdvisor.java Source". It checks that the
+ * source code is not visible, clicks on the link, and checks 8 lines of
+ * source code.
+ */
+ @Test
+ public void testTreeDemoStateAdvisorSource() {
+ String[] strings = new String[] { "package
org.richfaces.treemodeladaptor;",
+ "public class TreeDemoStateAdvisor implements TreeStateAdvisor
{",
+ "public Boolean adviseNodeOpened(UITree tree) {", "if
(!PostbackPhaseListener.isPostback()) {",
+ "Object key = tree.getRowKey();", "TreeRowKey treeRowKey =
(TreeRowKey) key;",
+ "if (treeRowKey == null || treeRowKey.depth() <= 2) {",
"return Boolean.TRUE;", };
+
+ abstractTestSource(1, "View TreeDemoStateAdvisor.java Source",
strings);
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Tree Adaptor");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeTestCase.java
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeTestCase.java
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/java/org/jboss/richfaces/integrationTest/tree/TreeTestCase.java 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,214 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.jboss.richfaces.integrationTest.tree;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.jboss.richfaces.integrationTest.AbstractSeleniumRichfacesTestCase;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Test the first tab of tree component page.
+ *
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @version $Revision$
+ */
+public class TreeTestCase extends AbstractSeleniumRichfacesTestCase {
+
+ private final String LOC_HEADER_PREFORMATTED =
getLoc("HEADER_PREFORMATTED");
+ private final String LOC_NODE_1_LINK_PREFORMATTED =
getLoc("NODE_1_LINK_PREFORMATTED");
+ private final String LOC_NODE_1_1_LABEL_PREFORMATTED =
getLoc("NODE_1_1_LABEL_PREFORMATTED");
+ private final String LOC_NODE_1_1_IMAGE_FIRST_PREFORMATTED =
getLoc("NODE_1_1_IMAGE_FIRST_PREFORMATTED");
+ private final String LOC_NODE_1_1_IMAGE_SECOND_PREFORMATTED =
getLoc("NODE_1_1_IMAGE_SECOND_PREFORMATTED");
+ private final String LOC_NODE_1_1_LINK_PREFORMATTED =
getLoc("NODE_1_1_LINK_PREFORMATTED");
+ private final String LOC_NODE_1_1_4_LABEL_PREFORMATTED =
getLoc("NODE_1_1_4_LABEL_PREFORMATTED");
+ private final String LOC_NODE_1_1_N_LABEL_PREFORMATTED =
getLoc("NODE_1_1_N_LABEL_PREFORMATTED");
+ private final String LOC_NODE_N_PREFORMATTED =
getLoc("NODE_N_PREFORMATTED");
+ private final String LOC_CHILDREN_1_1_PREFORMATTED =
getLoc("CHILDREN_1_1_PREFORMATTED");
+ private final String LOC_CHILDREN_1_PREFORMATTED =
getLoc("CHILDREN_1_PREFORMATTED");
+
+ private final String[] MSG_NODE_1_1_N_LABEL = new String[] {
getMsg("NODE_1_1_1_LABEL"),
+ getMsg("NODE_1_1_2_LABEL"), getMsg("NODE_1_1_3_LABEL"),
getMsg("NODE_1_1_4_LABEL"),
+ getMsg("NODE_1_1_5_LABEL"), getMsg("NODE_1_1_6_LABEL"),
getMsg("NODE_1_1_7_LABEL"),
+ getMsg("NODE_1_1_8_LABEL"), getMsg("NODE_1_1_9_LABEL"),
getMsg("NODE_1_1_10_LABEL"),
+ getMsg("NODE_1_1_11_LABEL"), };
+ private final String MSG_NODE_1_1_LABEL = getMsg("NODE_1_1_LABEL");
+ private final int MSG_CHILDREN_COUNT_1_1 =
Integer.parseInt(getMsg("CHILDREN_COUNT_1_1"));
+ private final int MSG_CHILDREN_COUNT_TOP =
Integer.parseInt(getMsg("CHILDREN_COUNT_TOP"));
+
+ /**
+ * Tests the first example.
+ *
+ * @see org.jboss.richfaces.integrationTest.tree.TreeTestCase#abstractTestTree
+ * abstractTestTree
+ */
+ @Test
+ public void testTreeAjax() {
+ abstractTestTree(1);
+ }
+
+ /**
+ * Tests the second example.
+ *
+ * @see org.jboss.richfaces.integrationTest.tree.TreeTestCase#abstractTestTree
+ * abstractTestTree
+ */
+ @Test
+ public void testTreeClient() {
+ abstractTestTree(2);
+ }
+
+ /**
+ * Tests the third example.
+ *
+ * @see org.jboss.richfaces.integrationTest.tree.TreeTestCase#abstractTestTree
+ * abstractTestTree
+ */
+ @Test
+ public void testTreeServer() {
+ abstractTestTree(3);
+ }
+
+ /**
+ * Tests the "View Source" in the first example -- Ajax switch type. It
+ * checks that the source code is not visible, clicks on the link, and
+ * checks 8 lines of source code.
+ */
+ @Test
+ public void testAjaxExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form>",
+ "<rich:tree style=\"width:300px\"
value=\"#{library.data}\" var=\"item\"
nodeFace=\"#{item.type}\">",
+ "<rich:treeNode type=\"artist\"
iconLeaf=\"/images/tree/singer.gif\"
icon=\"/images/tree/singer.gif\">",
+ "<h:outputText value=\"#{item.name}\" />",
"</rich:treeNode>",
+ "<rich:treeNode type=\"album\"
iconLeaf=\"/images/tree/disc.gif\"
icon=\"/images/tree/disc.gif\">",
+ "<rich:treeNode type=\"song\"
iconLeaf=\"/images/tree/song.gif\"
icon=\"/images/tree/song.gif\">", };
+
+ abstractTestSource(1, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the second example -- client switch type. It
+ * checks that the source code is not visible, clicks on the link, and
+ * checks 8 lines of source code.
+ */
+ @Test
+ public void testClientExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form>",
+ "<rich:tree switchType=\"client\"
style=\"width:300px\" value=\"#{library.data}\" var=\"item\"
nodeFace=\"#{item.type}\">",
+ "<rich:treeNode type=\"artist\"
iconLeaf=\"/images/tree/singer.gif\"
icon=\"/images/tree/singer.gif\">",
+ "<h:outputText value=\"#{item.name}\" />",
"</rich:treeNode>",
+ "<rich:treeNode type=\"album\"
iconLeaf=\"/images/tree/disc.gif\"
icon=\"/images/tree/disc.gif\">",
+ "<rich:treeNode type=\"song\"
iconLeaf=\"/images/tree/song.gif\"
icon=\"/images/tree/song.gif\">", };
+
+ abstractTestSource(2, "View Source", strings);
+ }
+
+ /**
+ * Tests the "View Source" in the third example -- server switch type. It
+ * checks that the source code is not visible, clicks on the link, and
+ * checks 8 lines of source code.
+ */
+ @Test
+ public void testServerExampleSource() {
+ String[] strings = new String[] {
+ "<ui:composition
xmlns=\"http://www.w3.org/1999/xhtml\"",
+ "<h:form>",
+ "<rich:tree switchType=\"server\"
style=\"width:300px\" value=\"#{library.data}\" var=\"item\"
nodeFace=\"#{item.type}\">",
+ "<rich:treeNode type=\"artist\"
iconLeaf=\"/images/tree/singer.gif\"
icon=\"/images/tree/singer.gif\">",
+ "<h:outputText value=\"#{item.name}\" />",
"</rich:treeNode>",
+ "<rich:treeNode type=\"album\"
iconLeaf=\"/images/tree/disc.gif\"
icon=\"/images/tree/disc.gif\">",
+ "<rich:treeNode type=\"song\"
iconLeaf=\"/images/tree/song.gif\"
icon=\"/images/tree/song.gif\">", };
+
+ abstractTestSource(3, "View Source", strings);
+ }
+
+ /**
+ * Tests selected tree. First it tries to expand "Chris Rea" node, checks
+ * its only child node, verifies that child's icon is displayed and expands
+ * it. Then it checks the number of nodes in "Chris Rea/The Road To Hell"
+ * node and verifies these nodes. In the end it checks that there are 4
+ * top-level nodes and that only the first is expanded.
+ *
+ * @param index
+ * which tree is being tested
+ */
+ private void abstractTestTree(int index) {
+ scrollIntoView(format(LOC_HEADER_PREFORMATTED, index), true);
+
+ // click 'Chris Rea'
+ waitForElement(format(LOC_NODE_1_LINK_PREFORMATTED, index));
+ selenium.click(format(LOC_NODE_1_LINK_PREFORMATTED, index));
+
+ // check Rea's child node
+ waitForElement(format(LOC_NODE_1_1_LABEL_PREFORMATTED, index));
+ String text = selenium.getText(format(LOC_NODE_1_1_LABEL_PREFORMATTED, index));
+ assertEquals(text, MSG_NODE_1_1_LABEL, "Name of the first child of first
node.");
+
+ // check the icon of node
+ assertTrue(isDisplayed(format(LOC_NODE_1_1_IMAGE_FIRST_PREFORMATTED, index)),
+ "Node 1.1 should be collapsed -- wrong image.");
+ assertFalse(isDisplayed(format(LOC_NODE_1_1_IMAGE_SECOND_PREFORMATTED, index)),
+ "Node 1.1 should be collapsed -- wrong image.");
+
+ // click 'The Road to Hell'
+ selenium.click(format(LOC_NODE_1_1_LINK_PREFORMATTED, index));
+
+ // check the number of nodes
+ waitForElement(format(LOC_NODE_1_1_4_LABEL_PREFORMATTED, index));
+ int numberOfNodes = selenium.getXpathCount(format(LOC_CHILDREN_1_1_PREFORMATTED,
index)).intValue();
+ assertEquals(numberOfNodes, MSG_CHILDREN_COUNT_1_1, "Number of children of
node 1.1.");
+
+ // get all nodes
+ String label = null;
+ for (int i = 0; i < numberOfNodes; i++) {
+ label = selenium.getText(format(LOC_NODE_1_1_N_LABEL_PREFORMATTED, index, i +
1));
+ assertEquals(label, MSG_NODE_1_1_N_LABEL[i], format("Node 1.1.{0} should
have name {1}.", i + 1,
+ MSG_NODE_1_1_N_LABEL[0]));
+ }
+
+ // check the number of expanded nodes on first level
+ numberOfNodes = selenium.getXpathCount(format(LOC_CHILDREN_1_PREFORMATTED,
index)).intValue();
+ assertEquals(numberOfNodes, MSG_CHILDREN_COUNT_TOP, format("There should be
{0} top nodes.",
+ MSG_CHILDREN_COUNT_TOP));
+
+ // check that only the first node is expanded
+ for (int i = 2; i < 5; i++) {
+ assertFalse(isDisplayed(format(LOC_NODE_N_PREFORMATTED, index, i)), format(
+ "Node nr. {0} should be collapsed.", i));
+ }
+ }
+
+ /**
+ * Loads the needed page.
+ */
+ @BeforeMethod
+ private void loadPage() {
+ openComponent("Tree");
+ }
+}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/mac/testng.xml
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/mac/testng.xml
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/mac/testng.xml 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,524 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="seleniumTest">
+
+ <test
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.include.IncludeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.include.IncludeTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.log.LogTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.log.LogTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.panel.PanelTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.panel.PanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase" />
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.poll.PollTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.poll.PollTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.push.PushTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.push.PushTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.queue.QueueTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.queue.QueueTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.script.ScriptTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.script.ScriptTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.status.StatusTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.status.StatusTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.style.StyleTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.style.StyleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.tree.TreeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tree.TreeTestCase"
/>
+ </classes>
+ </test>
+
+</suite>
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/unix/testng.xml
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/unix/testng.xml
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/unix/testng.xml 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,524 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="seleniumTest">
+
+ <test
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.include.IncludeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.include.IncludeTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.log.LogTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.log.LogTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.panel.PanelTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.panel.PanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase" />
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.poll.PollTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.poll.PollTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.push.PushTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.push.PushTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.queue.QueueTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.queue.QueueTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.script.ScriptTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.script.ScriptTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.status.StatusTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.status.StatusTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.style.StyleTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.style.StyleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.tree.TreeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tree.TreeTestCase"
/>
+ </classes>
+ </test>
+
+</suite>
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/windows/testng.xml
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/windows/testng.xml
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/profiles/windows/testng.xml 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,524 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="seleniumTest">
+
+ <test
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.actionParameter.ActionParameterTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxForm.AjaxFormTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxRegion.AjaxRegionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxSupport.AjaxSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.ajaxValidator.AjaxValidatorHibernatePartTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.beanValidator.BeanValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarStylingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.CalendarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.calendar.OrganizerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.colorPicker.ColorPickerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.columns.ColumnsTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.comboBox.ComboBoxTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandButton.CommandButtonTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.commandLink.CommandLinkTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuImageTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.contextMenu.ContextMenuTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataFilterSlider.DataFilterSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataGrid.DataGridTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataList.DataListTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataScroller.DataScrollerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.DataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableFilteringTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dataTable.TableSortingTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dragSupport.DragSupportTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.dropDownMenu.HorizontalMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.AdvancedEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.editor.SimpleEditorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.extendedDataTable.ExtendedDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.fileUpload.FileUploadTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorAfterModelUpdateTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.graphValidator.GraphValidatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.include.IncludeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.include.IncludeTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceInput.InplaceInputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inplaceSelect.InplaceSelectTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.inputNumberSlider.InputNumberSliderTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.jsFunction.JSFunctionTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.keepAlive.KeepAliveTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.log.LogTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.log.LogTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.listShuttle.ListShuttleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.mediaOutput.MediaOutputTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.modalPanel.ModalPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.outputPanel.OutputPanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.orderingList.OrderingListTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.paint2d.Paint2DTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panel.PanelCustomizationTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.panel.PanelTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.panel.PanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelBar.PanelBarTestCase" />
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.panelMenu.PanelMenuTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.pickList.PickListTestCase" />
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.poll.PollTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.poll.PollTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.progressBar.ProgressBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.push.PushTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.push.PushTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.queue.QueueSettingsTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.queue.QueueTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.queue.QueueTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.repeat.RepeatTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.script.ScriptTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.script.ScriptTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.separator.SeparatorTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.simpleTogglePanel.SimpleTogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spacer.SpacerTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.spinner.SpinnerTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.status.StatusTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.status.StatusTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.style.StyleTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.style.StyleTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.suggestionBox.SuggestionBoxTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tabPanel.TabPanelTestCase" />
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.togglePanel.TogglePanelTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.toolBar.ToolBarTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tooltip.TooltipDataTableTestCase"
/>
+ </classes>
+ </test>
+
+ <test
name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tooltip.TooltipTestCase"
/>
+ </classes>
+ </test>
+
+ <test
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase">
+ <classes>
+ <class
+ name="org.jboss.richfaces.integrationTest.tree.TreeNodesAdaptorTestCase"
/>
+ </classes>
+ </test>
+
+ <test name="org.jboss.richfaces.integrationTest.tree.TreeTestCase">
+ <classes>
+ <class name="org.jboss.richfaces.integrationTest.tree.TreeTestCase"
/>
+ </classes>
+ </test>
+
+</suite>
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+selected-name--text=//text()[starts-with(.,'{0}')]/..
+selected-name--button=//input[@type\='button' and @value\='Set Name to
{0}']
+change-skin--label=//div[text()\='Change Demo Appplication Skin To\: ']
+change-skin--link-relative={0}/../div[2]/a[text()\='{1}']
+screen-size--button=//input[@type\='button' and @value\='Show Screen
Size']
+screen-size--width--text-relative={0}/../div[1]//tr[1]/td[2]
+screen-size--height--text-relative={0}/../div[1]//tr[2]/td[2]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/actionParameter/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,8 @@
+selected-name--prefix=Selected Name\:
+selected-name--pattern={0}{1}
+first-guy=Alex
+second-guy=John
+skin-1-name=DeepMarine
+skin-1-color=rgb(0, 136, 148)
+skin-2-name=BlueSky
+skin-2-color=rgb(190, 214, 248)
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+ajax-form--ajax-button=//input[@type\='submit' and @value\="Set Local Name
to John (Ajax)"]
+ajax-form--non-ajax-button=//input[@type\='submit' and @value\="Set Both
Name to Mark (non-Ajax)"]
+ajax-form--text-relative={0}/../../../tr[2]/*/*/text()
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxForm/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+ajax-form--ajax-result=Name\:John
+ajax-form--non-ajax-result=Name\:Mark
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+ajax-region--input=//fieldset[{0}]//table//td[{1}]//table//tr[{2}]//input[@type\='text']
+ajax-region--messages=//fieldset[1]/div[1]/*[2]/ul/li
+ajax-region--typed-name=//span[@id\='outname{0}']
+ajax-region--influenced-text=//span[@id\='out{0}']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxRegion/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+ajax-region--input=input
+ajax-region--typed-name=Typed Name\:{0}
+ajax-region--value-is-required=Value is required
+ajax-region--fired-event=keyup
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+ajax-support--input=//input[@type\='text']
+ajax-support--text-relative={0}/../../td[2]/*/text()
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxSupport/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+ajax-support--non-empty=abc
+ajax-support--input-event=keyup
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,6 @@
+name=ajaxValidatorForm\:name
+age=ajaxValidatorForm\:age
+hibernateName=ajaxValidatorForm2\:name
+hibernateAge=ajaxValidatorForm2\:age
+hibernateEmail=ajaxValidatorForm2\:email
+relativeMessageLink=//input[@id\='%s']/../../td[3]/*[1][(a)class\='rich-message']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/ajaxValidator/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,25 @@
+value-required={0}\: Validation Error\: Value is required.
+less-than-minimum={0}\: Validation Error\: Value is less than allowable minimum of
'3'
+less-than-minimum--enter=12
+greater-than-maximum={0}\: Validation Error\: Value is greater than allowable maximum of
'12'
+greater-than-maximum--enter=1234567890123
+valid-name=Sam
+long-range--bellow=17
+long-range--above=100
+long-range={0}\: Validation Error\: Specified attribute is not between the expected
values of 18 and 99.
+valid-age=18
+bean-name--length=length must be between 3 and 12
+bad-email-1=corporation.com
+bad-email-2=(a)corporation.com
+well-formed-email=email(a)corporation.com
+bean-name--not-empty=This string contain only spaces
+bean-name--valid-input=Sam Hawkings
+bean-age--min=must be greater than or equal to 18
+bean-age--max--enter=101
+bean-age--max=must be less than or equal to 100
+age-integer-only--enter=abc
+age-integer-only={0}\: 'abc' is not a number. Example\: 99
+bean-age--integer-only={0}\: 'abc' must be a number between -2147483648 and
2147483647 Example\: 9346
+may-not-be-null-or-empty=may not be null or empty
+not-well-formed-email=not a well-formed email address
+may-not-be-null=may not be null
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,6 @@
+bean-validator--header=//legend[text()\='Title']
+bean-validator--input--name=//input[@id\='beanValidatorForm\:name']
+bean-validator--input--email=//input[@id\='beanValidatorForm\:email']
+bean-validator--input--age=//input[@id\='beanValidatorForm\:age']
+bean-validator--relative--validation-message={0}/../../td[3]/*[1][@class\='rich-message']
+bean-validator--button--submit=//input[@type\='button' and
@value\='Submit']
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/beanValidator/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,18 @@
+may-not-be-null-or-empty=may not be null or empty
+less-than-minimum--enter=12
+bean-name--length=length must be between 3 and 12
+greater-than-maximum--enter=1234567890123
+bean-name--not-empty=This string contain only spaces
+bean-name--valid-input=Sam Hawkings
+may-not-be-null=may not be null
+long-range--bellow=17
+bean-age--min=must be greater than or equal to 18
+bean-age--max--enter=101
+bean-age--max=must be less than or equal to 100
+age-integer-only--enter=abc
+bean-age--integer-only={0}\: 'abc' must be a number between -2147483648 and
2147483647 Example\: 9346
+valid-age=18
+bad-email-1=corporation.com
+bad-email-2=(a)corporation.com
+well-formed-email=email(a)corporation.com
+not-well-formed-email=not a well-formed email address
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,42 @@
+# first tab
+CALENDAR_HEADER=//fieldset[1]/legend
+DATE_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/span/input
+DATE_BUTTON=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/span/img
+INPUTS=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/span
+POPUP_MODE_CHECKBOX=//fieldset[1]/div/form/table/tbody/tr/td[2]/table/tbody/tr[1]/td[2]/input
+APPLY_BUTTON_CHECKBOX=//fieldset[1]/div/form/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]/input
+LOCALE_SELECT=//fieldset[1]/div/form/table/tbody/tr/td[2]/table/tbody/tr[3]/td[2]/table/tbody/tr
+DATE_PATTERN_SELECT=//fieldset[1]/div/form/table/tbody/tr/td[2]/table/tbody/tr[4]/td[2]/select
+
+CALENDAR=//div[contains(@id, 'calendar')]/table
+DOUBLE_LEFT_ARROW=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[1]/div
+LEFT_ARROW=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[2]/div
+MONTH_YEAR_LABEL=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[3]/div
+RIGHT_ARROW=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[4]/div
+DOUBLE_RIGHT_ARROW=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[5]/div
+CLOSE_BUTTON=//div[contains(@id,
'calendar')]/table/tbody/tr[1]/td[1]/table/tbody/tr/td[6]/div
+CLEAN_BUTTON=//div[contains(@id,
'calendar')]/table/tbody/tr[9]/td/table/tbody/tr/td[2]/div
+TODAY_BUTTON=//div[contains(@id,
'calendar')]/table/tbody/tr[9]/td/table/tbody/tr/td[5]/div
+APPLY_BUTTON=//div[contains(@id,
'calendar')]/table/tbody/tr[9]/td/table/tbody/tr/td[6]/div
+RANDOM_DAY=//div[contains(@id, 'calendar')]/table/tbody/tr[6]/td[4]
+
+# second tab
+FIELDSET=//fieldset[1]/legend
+
+CELL_X_Y=//fieldset[1]/div/form/table/tbody/tr[%d]/td[%d]
+CELL_X_Y_DATE=//fieldset[1]/div/form/table/tbody/tr[%d]/td[%d]/div/div/table/tbody/tr[1]
+CELL_X_Y_DESC=//fieldset[1]/div/form/table/tbody/tr[%d]/td[%d]/div/div/table/tbody/tr[2]
+CELL_X_Y_NOTE=//fieldset[1]/div/form/table/tbody/tr[%d]/td[%d]/div/div/table/tbody/tr[3]
+
+DIALOG=//div[@id='panelContainer']
+DIALOG_DESCRIPTION=//table[@id='panelContentTable']/tbody/tr[2]/td/form/table/tbody/tr[1]/td[2]/input
+DIALOG_NOTE=//table[@id='panelContentTable']/tbody/tr[2]/td/form/table/tbody/tr[2]/td[2]/textarea
+DIALOG_STORE_BUTTON=//table[@id='panelContentTable']/tbody/tr[2]/td/form/table/tbody/tr[3]/td[1]/input
+DIALOG_CANCEL_BUTTON=//table[@id='panelContentTable']/tbody/tr[2]/td/form/table/tbody/tr[3]/td[2]/button
+DIALOG_CROSS_BUTTON=//div[@id\='panelContainer']/div[2]/div/div[2]/div/img
+
+# third tab
+STYLING_FIELDSET=//fieldset[1]/legend
+STYLING_CELL_X_Y=//fieldset[1]/div/table/tbody/tr[%d]/td[%d]
+STYLING_CALENDAR_BUTTON=//fieldset[1]/div/span/img
+STYLING_RIGHT_ARROW=//fieldset[1]/div/table/tbody/tr[1]/td[1]/table/tbody/tr[1]/td[4]
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/calendar/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,13 @@
+# second tab
+COMPONENT_DESCRIPTION=This simple example shows the way of calendarDataModel usage for
organizer creation.
+
+CLASS_ATTRIBUTE_TODAY=Class attribute of the cell with today's date should contain
"rich-calendar-today".
+CLASS_ATTRIBUTE_GREY=Class attribute of the last cell should contain
"rich-calendar-boundary-dates".
+DIALOG_VISIBLE=Dialog should be visible.
+DIALOG_NOT_VISIBLE=Dialog should not be visible.
+CELL_X_Y_NOTE=The note in the cell (week %d, day %d).
+CELL_X_Y_DESC=The description in the cell (week %d, day %d).
+
+# third tab
+COMPONENT_DESCRIPTION_3=This simple example shows the way of dates disablement and
styling without dataModel usage.
+EVERY_THIRD_CELL=Every third cell should be either disabled (boundary dates) or styled
(dates from current month).
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,23 @@
+COMPONENT_HEADER=//fieldset[1]/legend
+
+IMAGE=//fieldset[1]/div/form/table/tbody/tr[1]/td/img
+COLOR_INPUT=//fieldset[1]/div/form/table/tbody/tr[2]/td[1]/span/input
+COLOR_BUTTON=//fieldset[1]/div/form/table/tbody/tr[2]/td[1]/span/img
+
+COLOR_AREA=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[1]
+CURSOR=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[1]/div/div
+RED_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[6]/input
+GREEN_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[7]/input
+BLUE_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[8]/input
+HUE_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[9]/input
+SATURATION_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[10]/input
+BRIGHTNESS_VALUE=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[11]/input
+CURRENT_COLOR_BOX=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[3]
+ORIGINAL_COLOR_BOX=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[4]
+RAINBOW=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[2]/img
+
+HEX_COLOR=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/div[5]/input
+APPLY_BUTTON=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/button[1]
+CANCEL_BUTTON=//fieldset[1]/div/form/table/tbody/tr[2]/td/div[1]/div/button[2]
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/colorPicker/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,44 @@
+VALUES_CHANGE_RED_1=0
+VALUES_CHANGE_GREEN_1=3
+VALUES_CHANGE_BLUE_1=232
+VALUES_CHANGE_HUE_1=239
+VALUES_CHANGE_SATURATION_1=100
+VALUES_CHANGE_BRIGHTNESS_1=91
+VALUES_CHANGE_HEXCOLOR_1=0003e8
+VALUES_CHANGE_RED_2=255
+VALUES_CHANGE_GREEN_2=255
+VALUES_CHANGE_BLUE_2=255
+VALUES_CHANGE_HUE_2=240
+VALUES_CHANGE_SATURATION_2=0
+VALUES_CHANGE_BRIGHTNESS_2=100
+VALUES_CHANGE_HEXCOLOR_2=ffffff
+
+SET_RGB_NUMBERS_HEXCOLOR=242463
+SET_HSB_NUMBERS_HEXCOLOR=fcd8a1
+
+SET_MAX_VALUE_RED=255
+SET_MAX_VALUE_GREEN=255
+SET_MAX_VALUE_BLUE=255
+SET_MAX_VALUE_HUE=360
+SET_MAX_VALUE_SATURATION=100
+SET_MAX_VALUE_BRIGHTNESS=100
+
+SET_NEGATIVE_VALUE_RED=0
+SET_NEGATIVE_VALUE_GREEN=0
+SET_NEGATIVE_VALUE_BLUE=0
+SET_NEGATIVE_VALUE_HUE=0
+SET_NEGATIVE_VALUE_SATURATION=0
+SET_NEGATIVE_VALUE_BRIGHTNESS=0
+
+SLIDER_HEXCOLOR_1=e80000
+SLIDER_RED_VALUE_1=230
+SLIDER_GREEN_VALUE_1=0
+SLIDER_BLUE_VALUE_1=0
+SLIDER_HEXCOLOR_2=e80000
+SLIDER_RED_VALUE_2=230
+SLIDER_GREEN_VALUE_2=0
+SLIDER_BLUE_VALUE_2=0
+SLIDER_RED_VALUE_3=0
+SLIDER_GREEN_VALUE_3=230
+SLIDER_BLUE_VALUE_3=230
+
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+columns--table=//form/*[contains(@class,'rich-table')]
+columns--table-cell-header--preformatted=//*[contains(@class,'rich-table-subheadercell')]{0,choice,0\#|1\#[{0}]}
+columns--table-cell--preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')]{1,choice,0\#|1\#[{1}]}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/columns/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1 @@
+columns--price-regexp=.*\\s(\\d+)\\$$
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+ajax-support--input=//input[@type\='text']
+command-button--button=//input[@type\='button']
+command-button--text=//*[@id\='out']/*[{0}]/text()
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandButton/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+ajax-support--non-empty=abc
+command-button--hello=Hello
+command-button--exclamation=\!
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+
+ajax-support--input=//input[@type\='text']
+command-button--text=//*[@id\='out']/*[{0}]/text()
+command-link--link=//a[text()\='Say Hello']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/commandLink/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+
+ajax-support--non-empty=abc
+command-button--hello=Hello
+command-button--exclamation=\!
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,6 @@
+# ContextMenuImageTestCase
+HEADER=//fieldset[1]/legend
+IMAGE=//fieldset[1]/div/table//tr/td/span/img
+CONTEXT_MENU=//fieldset[1]/div/table//tr/td/span/div/div/div
+ZOOM_IN=//div[@id='zin']
+ZOOM_OUT=//div[@id='zout']
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/contextMenu/messages.properties
===================================================================
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+data-table-common--table=//form/*[contains(@class,'rich-table')]
+data-scroller--button--first-page=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-dtascroller-table')]//*[contains(@class,'rich-datascr-button')][1]
+data-scroller--button--last-page=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-dtascroller-table')]//*[contains(@class,'rich-datascr-button')][6]
+data-scroller--button--previous-page=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-dtascroller-table')]//*[contains(@class,'rich-datascr-button')][2]
+data-scroller--button--next-page=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-dtascroller-table')]//*[contains(@class,'rich-datascr-button')][5]
+data-scroller--button--numbered-page-preformatted=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-dtascroller-table')]//*[contains(@class,'rich-datascr-act')
or contains(@class,'rich-datascr-inact')]{0,choice,0\#|1\#[{0}]}
+data-scroller--output--active-page=//*[contains(@class,'rich-datascr')][1]//*[contains(@class,'rich-datascr-act')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/data-iteration--messages.properties
===================================================================
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+data-filter-slider--header=//legend[text()\='DataFilterSlider example']
+data-filter-slider--table-cells--mileage-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][4]
+data-filter-slider--table-cells--brand-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][1]
+data-filter-slider--link--brand-preformatted=//a[text()\='{0}']
+data-filter-slider--input--price=//*[@type\='text' and
contains(@class,'rich-dataFilterSlider-input-field')]
+data-filter-slider--handle=//*[contains(@class,'rich-dataFilterSlider-handle')]
+data-filter-slider--track=//*[contains(@class,'rich-dataFilterSlider-track')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataFilterSlider/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+data-filter-slider--count--max-rows-in-table=10
+data-filter-slider--choices--brands={0,choice,0\#Chevrolet|1\#Toyota}
+data-filter-slider--choices--slider-percentages={0,choice,0\#15|1\#30|2\#0|3\#100}
+data-filter-slider--choices--slider-percentages-interleaving={0,choice,0\#20|1\#70|2\#55}
+data-filter-slider--simple-slider-percentage=35
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1 @@
+data-grid--cells--preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')]{1,choice,0\#|1\#[{1}]}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataGrid/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+data-grid--cells-per-page=9
+data-grid--cells-per-column=3
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1 @@
+data-list--header=//legend[text()\='Example']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataList/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+data-list--part1=Chevrolet Malibu
+data-list--part2=Chevrolet Corvette
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1 @@
+data-scroller--header=//legend[text()\='Table pagination using Data Scroller
example']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataScroller/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1 @@
+data-scroller--numbered-pages=6,8,4,7,2,10
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,36 @@
+data-table--header=//legend[text()\='DataTable Column/ColumnGroup example']
+data-table--output--whole-table=//legend[text()\='DataTable Column/ColumnGroup
example']/../div/table
+data-table-extended--table-cell--highest-bid=//*[contains(@id,'auction\:tb')]/*[contains(@class,'rich-table-row')][7]/*[contains(@class,'rich-table-cell')][2]
+data-table-extended--input--your-bid=//*[contains(@id,'auction\:tb')]/*[contains(@class,'rich-table-row')][7]/*[contains(@class,'rich-table-cell')][3]/*[@type\='text']
+data-table-extended--link--place-bid=//*[contains(@id,'auction\:tb')]/*[contains(@class,'rich-table-row')][7]/*[contains(@class,'rich-table-cell')][3]/*[text()\='Place
a bid\!']
+data-table-extended--table-cell--amount=//*[contains(@id,'auction\:tb')]/*[contains(@class,'rich-table-row')][7]/*[contains(@class,'rich-table-cell')][4]
+data-table-modifiable--table-header-cell--key=//*[contains(@id,'column1header')
and contains(@class,'rich-table-subheadercell')]
+data-table-modifiable--table-cell--preformatted-locators=//form/*[contains(@class,'rich-table')]/*/*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][2]
+data-table-modifiable--input--assignee=//*[contains(@id,'column2header') and
contains(@class,'rich-table-subheadercell')]/*/*[@type\='text']
+data-table-modifiable--table-cell--assignee=//form/*[contains(@class,'rich-table')]/*/*[contains(@class,'rich-table-row')][1]/*[contains(@class,'rich-table-cell')][3]
+data-table-editable--link--edit=//form/*[contains(@class,'rich-table')]/*/*[contains(@class,'rich-table-row')][{0}]/*[contains(@class,'rich-table-cell')][7]/*[contains(@id,'editlink')]
+data-table-editable--link--delete=//form/*[contains(@class,'rich-table')]/*/*[contains(@class,'rich-table-row')][{0}]/*[contains(@class,'rich-table-cell')][7]/*[contains(@id,'deletelink')]
+data-table-editable--output--price=//form/*[contains(@class,'rich-table')]/*/*[contains(@class,'rich-table-row')][{0}]/*[contains(@class,'rich-table-cell')][3]
+data-table-editable--input--price=//*[text()\='Price']/../*[2]/*[@type\='text']
+data-table-editable--button--store=//*[@type\='button' and
@value\='Store']
+data-table-editable--button--yes=//*[@type\='button' and @value\='Yes']
+data-table-editable--button--cancel=//*[@type\='button' and
@value\='Cancel']
+data-table-editable--panel--edit=//*[@id\='editPanelContainer']
+data-table-editable--panel--delete=//*[@id\='deletePanelContainer']
+table-filtering--input--state-name=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][1]//*[@type\='text']
+table-filtering--input--state-capital=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][2]//*[@type\='text']
+table-filtering--table-cell--state-name-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][1]
+table-filtering--table-cell--state-capital-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][2]
+table-filtering-external--select--timezone=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][2]/*/*
+table-filtering-external--option--selected=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][2]/*/*/*[@selected]
+table-sorting--header-cell--state=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][1]
+table-sorting--header-cell--capital=//form/*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-subheadercell')][2]
+table-sorting--image-src--sort-icon-relative={0}//*[contains(@class,'rich-sort-icon')]/@src
+table-sorting--cells--state-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][1]
+table-sorting--cells--capital-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][2]
+table-sorting-external--select--column=//*[@class\='equals' and
text()\='{0}']/../*[2]/*
+table-sorting-external--select--order=//*[@class\='equals' and
text()\='{0}']/../*[3]/*
+table-sorting-external--button--sort=//*[@type\='button' and @value\='Sort
Table']
+table-sorting-external--cells--column1-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][1]
+table-sorting-external--cells--column2-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][2]
+table-sorting-external--cells--column3-preformatted=//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-table-cell')][4]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dataTable/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,15 @@
+data-table--text--whole-table=ExpensessubtotalsMealsHotelsTransportTotals$196.27$442.00$162.00$800.27San
Jose25-Aug-97$37.74$112.00$45.0026-Aug-97$27.28$112.00$45.00$65.02$224.00$90.00$379.02Seattle27-Aug-97$96.25$109.00$36.0028-Aug-97$35.00$109.00$36.00$131.25$218.00$72.00$421.25
+data-table-extended--message--lower-bid=Bid amount is lower that highest bid
+data-table-extended--format--amount=${0,number,0.00}
+data-model-modifiable--input--assignee-name=Nick
+data-model-modifiable--count--assignee-table-pages=0
+data-model-modifiable--count--assignee-table-rows=1
+table-filtering--input--state-prefixes=M,A,,Ne,
+table-filtering--input--capital-prefixes=J,,H,C,
+table-filtering-external--input--pairs=M\:-5|\:-6|N\:-5|M\:-5|N\:-7|U\:-7|\:-7|N\:-7|A\:-9|\:-9
+data-filtering-external--output--timezone-preformatted=GMT{0}
+table-sorting-external--columns=First sort by\:|Make|Ascending\#Second sort
by\:|Model|Ascending\#Third sort by\:|Mileage|Descending
+data-table-editable--open-tab=Edit Table with ModalPanel
+data-table-extended--open-tab=Extended Data Model
+data-table-modifiable--open-tab=Modifiable Data Model
+data-table--open-tab=Usage
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+drag-support--header=//legend[text()\='Drag-n-Drop example']
+drag-support--div--targets=//div[text()\='{0,choice,1\#PHP
Frameworks|2\#.NET
Frameworks|3\#ColdFusion Frameworks}']/../../div
+drag-support--div--item=//table[contains(@id,'src')]//div[text()\='{0}']
+drag-support--div--indicator=//*[@id\='indicator']
+drag-support--class--indicator=//*[@id\='indicator']/@class
+drag-support--image-source--indicator=//*[@id\='indicator']//td[1]/img/@src
+drag-support--relative--first-inserted-item={0}/*[2]/*[2]/*/*/*[1]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/dragSupport/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+drag-support--regexp--moving--image-source=.*/default\\.gif\\.jsf$
+drag-support--regexp--moving--class=.*(^|\\s+)drgind_default($|\\s+).*
+drag-support--regexp--accepting--image-source=.*/accept\\.gif\\.jsf$
+drag-support--regexp--accepting--class=.*(^|\\s+)drgind_accept($|\\s+).*
+drag-support--regexp--rejecting--image-source=.*/reject\\.gif\\.jsf$
+drag-support--regexp--rejecting--class=.*(^|\\s+)drgind_reject($|\\s+).*
+drag-support--text--items={0,choice,1\#Flexible
Ajax|2\#ajaxCFC|3\#AJAXEngine|4\#AjaxAC|5\#MonoRail|6\#wddxAjax|7\#AJAX
AGENT|8\#FastPane|9\#JSMX|10\#PAJAJ|11\#Symfony|12\#PowerWEB}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,87 @@
+ADVANCED_BUTTON=//div[@id='form:controls_body']/table/tbody/tr[1]/td[2]/table/tbody/tr[2]/td/input
+EXAMPLE_HEADER=//fieldset[1]/legend
+
+TEXT_AREA=id=tinymce
+IFRAME=id=form:editorTextArea_ifr
+ADV_DIALOG_IFRAME=//iframe[matches(@id, 'mce_\\d{1,2}_ifr')]
+TEXT_AREA_P=//body[@id='tinymce']/p
+TEXT_AREA_P_A=//body[@id='tinymce']/p/a
+TEXT_AREA_P_IMG=//body[@id='tinymce']/p/img
+TEXT_AREA_P_SPAN=//body[@id='tinymce']/p/span
+TEXT_AREA_P_HR=//body[@id='tinymce']/p/hr
+TEXT_AREA_P_SUB=//body[@id='tinymce']/p/sub
+TEXT_AREA_P_SUP=//body[@id='tinymce']/p/sup
+TEXT_AREA_P2=//body[@id='tinymce']/p[2]
+TEXT_AREA_P2_B=//body[@id='tinymce']/p[2]/b
+TEXT_AREA_P2_I=//body[@id='tinymce']/p[2]/i
+TEXT_AREA_P2_U=//body[@id='tinymce']/p[2]/u
+TEXT_AREA_P2_STRIKE=//body[@id='tinymce']/p[2]/strike
+TEXT_AREA_OL=//body[@id='tinymce']/ol
+TEXT_AREA_OL_LI=//body[@id='tinymce']/ol/li
+TEXT_AREA_UL=//body[@id='tinymce']/ul
+TEXT_AREA_UL_LI=//body[@id='tinymce']/ul/li
+TEXT_AREA_ADDRESS=//body[@id='tinymce']/address
+TEXT_AREA_PRE=//body[@id='tinymce']/pre
+TEXT_AREA_HN=//body[@id='tinymce']/h%d
+
+# simple editor' buttons
+BOLD_BUTTON=id=form:editorTextArea_bold
+ITALIC_BUTTON=id=form:editorTextArea_italic
+UNDERLINE_BUTTON=id=form:editorTextArea_underline
+STRIKETHROUGH_BUTTON=id=form:editorTextArea_strikethrough
+UNDO_BUTTON=id=form:editorTextArea_undo
+REDO_BUTTON=id=form:editorTextArea_redo
+UNORDERED_LIST_BUTTON=id=form:editorTextArea_insertunorderedlist
+ORDERED_LIST_BUTTON=id=form:editorTextArea_insertorderedlist
+
+# advanced editor's buttons
+ADV_UNORDERED_LIST_BUTTON=id=form:editorTextArea_bullist
+ADV_ORDERED_LIST_BUTTON=id=form:editorTextArea_numlist
+ADV_ALIGN_LEFT_BUTTON=id=form:editorTextArea_justifyleft
+ADV_ALIGN_RIGHT_BUTTON=id=form:editorTextArea_justifyright
+ADV_ALIGN_CENTER_BUTTON=id=form:editorTextArea_justifycenter
+ADV_ALIGN_FULL_BUTTON=id=form:editorTextArea_justifyfull
+ADV_STYLE_SELECT_BUTTON=id=form:editorTextArea_styleselect_open
+ADV_FORMAT_SELECT_BUTTON=id=form:editorTextArea_formatselect_open
+ADV_STYLE_N=//table[@id='menu_form:editorTextArea_form:editorTextArea_styleselect_menu_tbl']/tbody/tr[%d]
+ADV_FORMAT_N=//table[@id='menu_form:editorTextArea_form:editorTextArea_formatselect_menu_tbl']/tbody/tr[%d]
+ADV_INDENT_BUTTON=id=form:editorTextArea_indent
+ADV_OUTDENT_BUTTON=id=form:editorTextArea_outdent
+ADV_HORIZONTAL_RULER_BUTTON=id=form:editorTextArea_hr
+ADV_REMOVE_FORMATTING_BUTTON=id=form:editorTextArea_removeformat
+ADV_SUBSCRIPT_BUTTON=id=form:editorTextArea_sub
+ADV_SUPERSCRIPT_BUTTON=id=form:editorTextArea_sup
+ADV_LINK_BUTTON=id=form:editorTextArea_link
+ADV_UNLINK_BUTTON=id=form:editorTextArea_unlink
+ADV_TOGGLE_INVISIBLE_BUTTON=id=form:editorTextArea_visualaid
+ADV_ANCHOR_BUTTON=id=form:editorTextArea_anchor
+ADV_IMAGE_BUTTON=id=form:editorTextArea_image
+ADV_CUSTOM_CHAR_BUTTON=id=form:editorTextArea_charmap
+
+# insert/edit link dialog
+ADV_LINK_DLG_URL=id=href
+ADV_LINK_DLG_TARGET_N=id=target_list
+ADV_LINK_DLG_TITLE=id=linktitle
+ADV_LINK_DLG_CLASS_N=id=class_list
+ADV_LINK_DLG_UPDATE=id=insert
+
+# insert/edit anchor dialog
+ADV_ANCHOR_DLG_NAME=id=anchorName
+ADV_ANCHOR_DLG_INSERT_BUTTON=id=insert
+
+# insert/edit image dialog
+ADV_IMAGE_DLG_URL=id=src
+ADV_IMAGE_DLG_DESCRIPTION=id=alt
+ADV_IMAGE_DLG_ALIGNMENT=id=align
+ADV_IMAGE_DLG_WIDTH=id=width
+ADV_IMAGE_DLG_HEIGHT=id=height
+ADV_IMAGE_DLG_BORDER=id=border
+ADV_IMAGE_DLG_VSPACE=id=vspace
+ADV_IMAGE_DLG_HSPACE=id=hspace
+ADV_IMAGE_DLG_INSERT_BUTTON=id=insert
+
+# insert custom character dialog
+ADV_CUSTOM_CHAR_DLG_M_N=//td[@id='charmapView']/table/tbody/tr[%d]/td[%d]/a
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/editor/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,29 @@
+COMPONENT_DESCRIPTION=RichFaces Editor component provides possibility to use tinyMCE
widget
+STRINGS_SHOULD_BE_BOLD=The string "bbbb" and "dddd" should be in
bold.
+STRINGS_SHOULD_BE_ITALIC=The strings "bbbb" and "dddd" should be in
italic.
+STRINGS_SHOULD_BE_UNDERLINED=The strings "bbbb" and "dddd" should be
underlined.
+STRINGS_SHOULD_HAVE_A_LINE_THROUGH=The strings "bbbb" and "dddd"
should have a line through.
+CONTENT_OF_THE_EDITOR=Content of the editor.
+EDITOR_SHOULD_CONTAIN_OL=The editor should contain an ordered list.
+EDITOR_SHOULD_CONTAIN_UL=The editor should contain an unordered list.
+TWO_LINES_SHOULD_CONTAIN_A_PARAGRAPH=The first and the fifth line should contain a
paragraph.
+TWO_LINES_IN_THE_EDITOR=There should be two lines in the editor.
+LIST_SHOULD_CONTAIN_THREE_ITEMS=The list should contain three items.
+PARAGRAPH_ALIGNED_TO_THE_SIDE_S=The paragraph should be aligned to the %s.
+PARAGRAPH_JUSTIFIED=The paragraph should be justified.
+PARAGRAPH_SHOULD_HAVE_NO_STYLE=The paragraph should not be styled.
+PARAGRAPHS_CLASS_ATTRIBUTE=Paragraph's class attribute.
+TAG_S_SHOULD_BE_IN_EDITOR=Tag %s should appear in the editor.
+TAG_S_SHOULD_NOT_BE_IN_EDITOR=Tag %s should not appear in the editor.
+CONTENT_OF_TAG_S=Content of tag %s.
+PARAGRAPH_INDENTED_BY_N_PX=Paragraph should be indented by %d pixels.
+NUMBER_OF_RULERS=The number of horizontal rulers in the editor.
+TEXT_IN_SUBSCRIPT=Text written as subscript.
+TEXT_IN_SUPERSCRIPT=Text written as superscript.
+LABEL_OF_LINK=Label of the link.
+LINK_ATTRIBUTE_S=Attribute %s of the link.
+CLASS_ATTRIBUTE=Attribute class of the text in the editor.
+IMG_ATTRIBUTE_S=Attribute %s of the image.
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,20 @@
+extended-data-table--select--sort=//*[text()\='Sort Mode\:']/../td[2]/select
+extended-data-table--select--selection=//*[text()\='Selection
Mode\:']/../td[2]/select
+extended-data-table--cells=//*[contains(@class,'rich-table')]//*[contains(@class,'rich-extdt-firstrow')]{0,choice,0\#|1\#[{0}]}/*[contains(@class,'rich-extdt-cell')]{1,choice,0\#|1\#[{1}]}
+extended-data-table--table=//*[contains(@class,'rich-table')]
+extended-data-table--selected-row=//*[contains(@class,'rich-table')]//*[contains(@class,'rich-extdt-firstrow')
and contains(@class,'rich-sdt-row-selected') {0}]
+extended-data-table--relative-column-header--from-label={0}/../../..
+extended-data-table--relative-div--context-menu-button={0}/*[contains(@class,'extdt-menu-div')]
+extended-data-table--column-header--state=//*[contains(@class,'extdt-sortable-header')
and text()\='State Name']
+extended-data-table--column-header--capital=//*[contains(@class,'extdt-sortable-header')
and text()\='State Capital']
+extended-data-table--column-header--time-zone=//*[contains(@class,'extdt-sortable-header')
and text()\='Time Zone']
+extended-data-table--column-header--flag=//*[contains(@class,'extdt-sortable-header')
and text()\='Flag']
+extended-data-table--input--filter-column=//*[contains(@class,'rich-table')]//*[contains(@class,'extdt-table-filterrow')]//*[contains(@class,'rich-extdt-subheadercell')][{0}]//*[@type\='text']
+extended-data-table--menu-item--group-by-column=//*[contains(@class,'rich-menu-item-label')
and text()\='Group by this column']
+extended-data-table--table-row--group-text-preformatted=//*[contains(@class,'rich-table')]//*[contains(@class,'extdt-group-row')]{0,choice,0\#|1\#[{0}]}/*/text()
+extended-data-table--table-row--regular-row-preformatted=//*[contains(@class,'rich-table')]/*[contains(@id,'table\:tb')]/*[contains(@class,'row')]{0,choice,0\#|1\#[{0}]}
+extended-data-table--relative-div--drop-zone-left={0}/../../../*[contains(@class,'extdt-hdrop')
and contains(@id,'left')]
+extended-data-table--relative-div--drop-zone-right={0}/../../../*[contains(@class,'extdt-hdrop')
and contains(@id,'right')]
+extended-data-table--splash-screen=//*[@class\='extdt-ss-vsbl']
+extended-data-table--relative-image-src--flag={0}/*/@src
+extended-data-table--relative-div--column-to-its-content={0}/*
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/extendedDataTable/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,17 @@
+extended-data-table--option--selection-none=none
+extended-data-table--option--selection-single=single
+extended-data-table--option--selection-multi=multi
+extended-data-table--option--sort-single=single
+extended-data-table--option--sort-multi=multi
+extended-data-table--input--single-row=3
+extended-data-table--output--mode-single--single-row=3
+extended-data-table--output--mode-multi--single-row=3
+extended-data-table--input--multiple-rows=4,2,2,5,6,3,1,6
+extended-data-table--output--mode-single--multiple-rows=4
+extended-data-table--output--mode-multi--multiple-rows=4,5,3,1
+extended-data-table--output--mode-none=
+extended-data-table--input--state-prefixes=M,A,,Ne,
+extended-data-table--input--capital-prefixes=J,,H,C,
+extended-data-table--class--group-row=extdt-group-row
+extended-data-table--input--sorting-letter-in-dragging=M
+extended-data-table--option-value--selection-mode-preformatted=value\={0}
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,22 @@
+EXAMPLE_HEADER=//fieldset[1]/legend
+ADD_BUTTON_N=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[1]/div/div[2]/input[%d]
+ADD_BUTTON_CLASS=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[1]/div
+UPLOAD_BUTTON_STYLE=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[2]
+UPLOAD_BUTTON=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[2]/div
+CLEAR_ALL_BUTTON=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[3]/div
+CLEAR_ALL_BUTTON_STYLE=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[3]
+CLEAR_UPLOADED_DATA_BUTTON=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/input
+
+NOT_UPLOADED_LIST_TR=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div/table/tbody/tr
+NOT_UPLOADED_LIST_N_NAME=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div/table[%d]/tbody/tr/td[1]/div[1]
+NOT_UPLOADED_LIST_N_DONE=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div/table[%d]/tbody/tr/td[1]/div[3]
+NOT_UPLOADED_LIST_N_CANCEL=//fieldset[1]/div/form/table/tbody/tr/td[1]/div/div/table[%d]/tbody/tr/td[2]/div/a
+
+UPLOADED_FILES_INFO=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/div/div[2]
+UPLOADED_LIST_TR=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/div/div[2]/table/tbody/tr
+UPLOADED_LIST_N_IMG=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/div/div[2]/table/tbody/tr[%d]/td/div/div/table/tbody/tr/td[1]/img
+UPLOADED_LIST_N_NAME=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/div/div[2]/table/tbody/tr[%d]/td/div/div/table/tbody/tr/td[2]/table/tbody/tr[1]/td[2]
+UPLOADED_LIST_N_SIZE=//fieldset[1]/div/form/table/tbody/tr/td[2]/span/div/div[2]/table/tbody/tr[%d]/td/div/div/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]
+
+AUTOMATIC_UPLOAD=//fieldset[2]/form/table/tbody/tr/td[1]/input
+FLASH=//fieldset[2]/form/table/tbody/tr/td[2]/input
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/fileUpload/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,24 @@
+COULD_NOT_CREATE_IMAGE=Could not create the image.
+PROVIDED_URL_NOT_VALID=The provided string is not a valid URL.
+COULD_NOT_READ_IMAGE=Could not read the image from the given URL.
+
+LEFT_PANEL_NUMBER_OF_ITEMS=The number of items in the left panel.
+LEFT_PANEL_NAME_N=The name of the item nr. %d in the left panel.
+LEFT_PANEL_CANCEL_N=The link of the item nr. %d in the left panel.
+LEFT_PANEL_DONE_N=The string under item nr. %d's name in the left panel.
+
+RIGHT_PANEL_CONTENT=The content of the right panel.
+RIGHT_PANEL_NUMBER_OF_ITEMS=The number of items in the right panel.
+RIGHT_PANEL_NAME_N=The name of the item nr. %d in the right panel.
+RIGHT_PANEL_SIZE_N=The size of the item nr. %d in the right panel.
+RIGHT_PANEL_COLOR_N_X_Y=The color of pixel [%d,%d] of image nr. %d in the right panel.
+
+ADD_BUTTON_ENABLED=The "Add" button should be enabled.
+ADD_BUTTON_NOT_ENABLED=The "Add" button should not be enabled.
+UPLOAD_BUTTON_VISIBLE=The "Upload" button should be visible.
+UPLOAD_BUTTON_NOT_VISIBLE=The "Upload" button should not be visible.
+CLEAR_ALL_BUTTON_VISIBLE=The "Clear all" button should be visible.
+CLEAR_ALL_BUTTON_NOT_VISIBLE=The "Clear all" button should not be visible.
+CLEAR_UPLOADED_DATA_BUTTON_VISIBLE=The "Clear uploaded data" button should be
visible.
+CLEAR_UPLOADED_DATA_BUTTON_NOT_VISIBLE=The "Clear uploaded data" button should
not be visible.
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,11 @@
+graph-validator--header1=//fieldset[1]//legend[text()\='Title']
+graph-validator--input--name=//input[@id\='graphValidatorForm\:name']
+graph-validator--input--email=//input[@id\='graphValidatorForm\:email']
+graph-validator--input--age=//input[@id\='graphValidatorForm\:age']
+graph-validator--relative--validation-message={0}/../../td[3]/*[1][@class\='rich-message']
+graph-validator--button--submit1=//input[@type\='button' and @value\='Store
changes']
+graph-validator--header2=//fieldset[2]//legend[text()\='Title']
+graph-validator--button--submit2=//input[@type\='button' and @value\='Store
my details']
+graph-validator--output--validation-message=//form[@name\="graphValidatorForm2"]//*[@class\="rich-messages-label"]
+graph-validator--attribute--validation-message-class=//form[@name\="graphValidatorForm2"]/*[@class\="rich-messages"]/*/@class
+graph-validator--input--activity-times=//form[@id\='graphValidatorForm2']/table/tbody/tr[{0}]//input[@type\='text']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/graphValidator/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,27 @@
+graph-validator--attribute--class-valid=green
+graph-validator--attribute--class-invalid=red
+graph-validator--message--please-fill-at-least-one-entry=Invalid values\: Please feel at
list one entry
+graph-validator--message--changes-stored-successfully=Changes Stored Successfully
+graph-validator--message--invalid-values=Invalid values\:
+graph-validator--message--sum-too-great=Invalid values\: Only 24h in a day\!
+graph-validator--input--ok=1
+graph-validator--input--too-great=13
+graph-validator--input--sum-too-great=9
+may-not-be-null-or-empty=may not be null or empty
+less-than-minimum--enter=12
+bean-name--length=length must be between 3 and 12
+greater-than-maximum--enter=1234567890123
+less-than-minimum-of-2={0}\: Validation Error\: Value is less than allowable minimum of
'2'
+bean-name--valid-input=Sam Hawkings
+may-not-be-null=may not be null
+long-range--bellow=17
+bean-age--min=must be greater than or equal to 18
+bean-age--max--enter=101
+bean-age--max=must be less than or equal to 100
+age-integer-only--enter=abc
+bean-age--integer-only={0}\: 'abc' must be a number between -2147483648 and
2147483647 Example\: 9346
+valid-age=18
+not-well-formed-email=not a well-formed email address
+well-formed-email=email(a)corporation.com
+bad-email-1=corporation.com
+bad-email-2=(a)corporation.com
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,11 @@
+include--header=//legend[text()\='Include example']
+include--button--previous=//*[@type\='button' and
@value\='<<Previous']
+include--button--next=//*[@type\='button' and @value\='Next >>']
+include--input--first-name=//*[text()\='First
Name\:']/../*[2]/*[@type\='text']
+include--input--last-name=//*[text()\='Last
Name\:']/../*[2]/*[@type\='text']
+include--input--company=//*[text()\='Company\:']/../*[2]/*[@type\='text']
+include--input--notes=//*[contains(@id, 'notes')]
+include--output--first-name=//*[text()\='First Name\:']/../*[2]
+include--output--last-name=//*[text()\='Last Name\:']/../*[2]
+include--output--company=//*[text()\='Company\:']/../*[2]
+include--output--notes=//*[text()\='Notes\:']/../*[2]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/include/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+include--input--sample=sample{0}
+include--message--company-required=Company\: Validation Error\: Value is required.
+include--message--last-name-required=Last Name\: Validation Error\: Value is required.
+include--message--notes-required=Notes\: Validation Error\: Value is required.
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,16 @@
+FIRST_NAME=//fieldset[1]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span
+FIRST_NAME_INPUT=//fieldset[1]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span/input
+FIRST_EMAIL=//fieldset[1]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span
+FIRST_EMAIL_INPUT=//fieldset[1]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span/input
+SECOND_NAME=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span
+SECOND_NAME_INPUT=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span/input
+SECOND_NAME_OK=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span/div/div[2]/input[1]
+SECOND_NAME_CANCEL=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[1]/td[2]/span/div/div[2]/input[2]
+SECOND_EMAIL=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span
+SECOND_EMAIL_INPUT=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span/input
+SECOND_EMAIL_OK=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span/div/div[2]/input[1]
+SECOND_EMAIL_CANCEL=//fieldset[2]/div/div[1]/div[2]/table/tbody/tr[2]/td[2]/span/div/div[2]/input[2]
+THIRD=//fieldset[3]/div/span
+THIRD_INPUT=//fieldset[3]/div/span/input
+THIRD_SAVE=//fieldset[3]/div/span/div/button[1]
+THIRD_CANCEL=//fieldset[3]/div/span/div/button[2]
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceInput/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,10 @@
+COMPONENT_DESCRIPTION=InplaceInput is a simple input component which displays the current
value
+INITIAL_VALUE_NAME=Default value in the inplace input should be "click to enter your
name".
+INITIAL_VALUE_EMAIL=Default value in the inplace input should be "click to enter
your email".
+NAME_JOHN_SMITH=The input should contain "John Smith".
+EMAIL_JOHN_SMITH=The input should contain "john(a)smith.name".
+RICH_INPLACE_VIEW=The class attribute of the inplace input should contain
"rich-inplace-view".
+NOT_RICH_INPLACE_CHANGED=The class attribute of the inplace input should not contain
"rich-inplace-changed".
+RICH_INPLACE_CHANGED=The class attribute of the inplace input should contain
"rich-inplace-changed".
+NOT_RICH_INPLACE_EDIT=The class attribute of the inplace input should not contain
"rich-inplace-edit".
+RICH_INPLACE_EDIT=The class attribute of the inplace input should contain
"rich-inplace-edit".
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,21 @@
+FIRST=//fieldset[1]/div/span
+FIRST_SELECT_VIEW=//fieldset[1]//*[contains(@class,'rich-inplace-select-view')]
+FIRST_INPUT_1=//fieldset[1]/div/span/input[1]
+FIRST_INPUT_2=//fieldset[1]/div/span/input[2]
+FIRST_LIST_SPAN_N=//*[@class\='rich-inplace-select-list-scroll']/span[starts-with(text(),'Option')][%d]
+FIRST_LIST_SPAN=//*[@class\='rich-inplace-select-list-scroll']/span[starts-with(text(),'Option')]
+
+SECOND=//fieldset[2]/div/div[1]/div
+SECOND_INPUT_1=//fieldset[2]/div/div[1]/div/input[1]
+SECOND_INPUT_2=//fieldset[2]/div/div[1]/div/input[2]
+SECOND_LIST_SPAN_N=//*[not(contains(@class,'rich-inplace-select-view'))]/*/*/*/*[@class\='rich-inplace-select-list-scroll']/span[text()\='Alabama']/../span[%d]
+SECOND_LIST_SPAN=//*[not(contains(@class,'rich-inplace-select-view'))]/*/*/*/*[@class\='rich-inplace-select-list-scroll']/span[text()\='Alabama']/../span
+SECOND_OK_BUTTON=//fieldset[2]/div/div[1]/div/div/div[2]/input[1]
+
+THIRD=//fieldset[3]/div/form/table/tbody/tr/td[2]/span
+THIRD_INPUT_1=//fieldset[3]/div/form/table/tbody/tr/td[2]/span/input[1]
+THIRD_INPUT_2=//fieldset[3]/div/form/table/tbody/tr/td[2]/span/input[2]
+THIRD_LIST_SPAN_N=//*[not(contains(@class,'rich-inplace-select-view'))]/*/*/*/*[@class\='rich-inplace-select-list-scroll']/span[text()\='Alabama']/../span[%d]
+THIRD_LIST_SPAN=//*[not(contains(@class,'rich-inplace-select-view'))]/*/*/*/*[@class\='rich-inplace-select-list-scroll']/span[text()\='Alabama']/../span
+THIRD_CAPITAL=//fieldset[3]/div/form/table/tbody/tr/td[3]/span
+THIRD_SAVE_BUTTON=//fieldset[3]/div/form/table/tbody/tr/td[2]/span/div/button[1]
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inplaceSelect/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,9 @@
+COMPONENT_DESCRIPTION=Inplace Selectis a simple input component which displays current
value as outputText
+CLICK_HERE_TO_EDIT=The component should contain "Click here to edit".
+DOUBLE_CLICK_TO_EDIT=The component should contain "Double click to edit".
+READ_ONLY=The input field of the component should be read only.
+DISPLAY_NONE=The select should not be expanded.
+OPTION4_SELECTED="Option 4" should be selected.
+ARKANSAS_SELECTED="Arkansas" should be selected.
+LITTLE_ROCK=The capital of the Arkansas is Little Rock.
+COUNT_OF_ITEMS=Count of items in the component.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+SLIDER_N=//fieldset[1]/div/table[%d]/tbody/tr[2]/td/table/tbody/tr/td
+SLIDER_N_HANDLE=//fieldset[1]/div/table[%d]/tbody/tr[2]/td/table/tbody/tr/td/div[1]/div[2]
+SLIDER_N_TIP=//fieldset[1]/div/table[%d]/tbody/tr[2]/td/table/tbody/tr/td/div[1]/div[1]
+SLIDER_N_INPUT=//fieldset[1]/div/table[%d]/tbody/tr[1]/td[3]/input
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/inputNumberSlider/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,11 @@
+COMPONENT_DESCRIPTION=InputNumberSlider is a highly customizable component
+HANDLE_N_PX=Handle should be offset by %d pixels.
+TIP_N_PX=The box with a tip should be offset by %d pixels.
+TIP_SHOULD_BE_VISIBLE=The box with a tip should be visible.
+TIP_SHOULD_NOT_BE_VISIBLE=The box with a tip should not be visible.
+OFFSETS_SHOULD_BE_THE_SAME=Tip and handle's offsets should be the same.
+TIP_FIRST_HALF=The box with tip should be in the first half of the slider.
+TIP_SECOND_HALF=The box with tip should be in the second half of the slider.
+HANDLE_FIRST_HALF=The handle should be in the first half of the slider.
+HANDLE_SECOND_HALF=The handle should be in the second half of the slider.
+VALUE_IN_INPUT=The value in slider's input box.
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+js-function--active-span=//fieldset[1]/div[1]/table[1]//span[text()\='{0}']
+js-function--show-name=//*[@id\='showname']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/jsFunction/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+js-function--name1=Kate
+js-function--name2=John
+js-function--name3=Alex
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,9 @@
+keep-alive--header=//legend[text()\='KeepAlive demo']
+keep-alive--input--incorrect1=//fieldset/div/table/tbody/tr[2]/td[1]/form/input[@type\='text'][1]
+keep-alive--input--incorrect2=//fieldset/div/table/tbody/tr[2]/td[1]/form/input[@type\='text'][2]
+keep-alive--button--incorrect=//fieldset/div/table/tbody/tr[2]/td[1]/form/*[@type\='button']
+keep-alive--output--incorrect=//fieldset/div/table/tbody/tr[2]/td[1]/form/*[contains(@id,
'sum')]
+keep-alive--input--correct1=//fieldset/div/table/tbody/tr[2]/td[2]/form/input[@type\='text'][1]
+keep-alive--input--correct2=//fieldset/div/table/tbody/tr[2]/td[2]/form/input[@type\='text'][2]
+keep-alive--button--correct=//fieldset/div/table/tbody/tr[2]/td[2]/form/*[@type\='button']
+keep-alive--output--correct=//fieldset/div/table/tbody/tr[2]/td[2]/form/*[contains(@id,
'sum')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/keepAlive/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+keep-alive--input--first-number=2
+keep-alive--input--second-number=3
+keep-alive--output--expected-result-number=5
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+log--header=//legend[text()\='Log demo']
+log--input--text=//input[@type\='text']
+log--button--clear=//button[text()\='Clear']
+log--output--text //div[@id\='logConsole']
+log--output--divs=//div[@id\='logConsole']/div
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/log/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+log--input--sample=abc
+log--output--debug=debug
+log--output--clear=Clear
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+media-output--header=//legend[text()\='MediaOutput example']
+media-output--attribute--flash-object-data=//a[@id\='swfLink']/@href
+media-output--attribute--image-src=//p[text()\='Dynamically generated JPEG
file\:']/../img/@src
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/mediaOutput/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+media-output--md5-digest--flash=b979402c1c6aeba2a32821ce666621
+media-output--md5-digest--image=1fbdf5da30f854b9bdb797ed6b30393d
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,16 @@
+FIRST_EXAMPLE_HEADER=//fieldset[1]/legend
+FIRST_PANEL=//div[contains(@class, 'rich-modalpanel') and contains(@id,
'panelContainer')]
+FIRST_PANEL_POSITION=//div[contains(@class, 'rich-modalpanel') and contains(@id,
'panelContainer')]/div[2]/div@style
+FIRST_PANEL_OPEN=//fieldset[1]/div/a
+FIRST_PANEL_CLOSE=//div[contains(@class, 'rich-modalpanel') and contains(@id,
'panelContainer')]/div[2]/div/div[2]/div/img
+FIRST_PANEL_HEADER=//div[contains(@class, 'rich-modalpanel') and contains(@id,
'panelContainer')]/div[2]/div/div[2]/table/tbody/tr[1]/td/div
+FIRST_PANEL_CONTENT=//div[contains(@class, 'rich-modalpanel') and contains(@id,
'panelContainer')]/div[2]/div/div[2]/table/tbody/tr[2]/td
+
+SECOND_EXAMPLE_HEADER=//fieldset[2]/legend
+SECOND_PANEL=//div[@id='mpContainer']
+SECOND_PANEL_POSITION=//div[@id='mpContainer']/div[2]/div@style
+SECOND_PANEL_OPEN=//fieldset[2]/div/a
+SECOND_PANEL_CLOSE=//div[@id='mpContainer']/div[2]/div/div[2]/table/tbody/tr[2]/td/p[3]/a
+SECOND_PANEL_HEADER=//div[@id='mpContainer']/div[2]/div/div[2]/table/tbody/tr[1]/td/div
+SECOND_PANEL_CONTENT=//div[@id='mpContainer']/div[2]/div/div[2]/table/tbody/tr[2]/td
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/modalPanel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,10 @@
+COMPONENT_DESCRIPTION=RichFaces Modal Panel is a container that blocks an operation on
the base page when the modal panel is shown.
+FIRST_PANEL_NOT_VISIBLE=The first panel should not be visible.
+FIRST_PANEL_VISIBLE=The first panel should be visible.
+FIRST_PANEL_WRONG_CONTENT=The content of the first panel is wrong.
+FIRST_PANEL_WRONG_HEADER=The header of the first panel is wrong.
+
+SECOND_PANEL_NOT_VISIBLE=The second panel should not be visible.
+SECOND_PANEL_VISIBLE=The second panel should be visible.
+SECOND_PANEL_WRONG_CONTENT=The content of the second panel is wrong.
+SECOND_PANEL_WRONG_HEADER=The header of the second panel is wrong.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+output-panel--header=//legend[text()\='OutputPanel example']
+output-panel--input--fail=//input[@type\='text' and
contains(@id,'text1')]
+output-panel--input--success=//input[@type\='text' and
contains(@id,'text2')]
+output-panel--output--message=//*[contains(text(),'{0}')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/outputPanel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+output-panel--input--correct=1234567890
+output-panel--input--wrong=12345678901
+output-panel--output--validation-error=Validation Error
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+EXAMPLE_HEADER=//fieldset/legend
+INPUT_TEXT=//fieldset//form/table//td[1]/input
+INPUT_COLOR=//div[contains(@class, 'rich-color-picker-wrapper')]//div[5]/input
+BUTTON_APPLY_COLOR=//div[contains(@class,
'rich-color-picker-wrapper')]//button[1]
+SHADOW_SLIDER=//fieldset//form/table//td[3]//td[contains(@class,
'rich-inslider-track-decor-2')]
+SHADOW_SLIDER_HANDLE=//fieldset//form/table//td[3]//div[contains(@class,
'rich-inslider-handler')]
+IMAGE=//fieldset[1]/div/img
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/paint2d/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+TEXT_IN_IMAGE=Text in the image.
+COLOR_OF_IMAGE=Color of the image.
+SHADOW_SIZE=Size of the shadow.
+POSITION_OF_SLIDERS_HANDLE=Position of the slider's handle.
+IMAGE_HASH=Hash of the image.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,17 @@
+FIRST_DIVS=//fieldset[1]/div/div[1]/div
+FIRST_HEADER=//fieldset[1]/div/div[1]/div[1]
+SECOND_DIVS=//fieldset[2]/div/div[1]/div
+THIRD_DIVS=//fieldset[3]/div/div[1]/div
+THIRD_HEADER=//fieldset[3]/div/div[1]/div[1]
+THIRD_NESTED_PANELS=//fieldset[3]/div/div[1]/div[2]/table/tbody/tr/td/div[contains(@class,
'rich-panel')]
+LEFT_NESTED_PANEL_LIST_LI=//fieldset[3]//div/div[1]/div[2]/table//td[1]//ul/li
+RIGHT_NESTED_PANEL_LIST_LI=//fieldset[3]//div/div[1]/div[2]/table//td[2]//ul/li
+
+# second tab
+CUST_FIRST_PANEL_HEADER=//table[contains(@class,
'rich-tabpanel-content-position')]//table[1]//td[1]/div/div[1]
+CUST_SECOND_PANEL_HEADER=//table[contains(@class,
'rich-tabpanel-content-position')]//table[1]//td[2]/div/div[1]
+CUST_THIRD_PANEL_HEADER=//table[contains(@class,
'rich-tabpanel-content-position')]//table[2]//td[1]/div/div[1]
+CUST_THIRD_PANEL_BODY=//table[contains(@class,
'rich-tabpanel-content-position')]//table[2]//td[1]/div/div[2]
+CUST_FOURTH_PANEL_BODY=//table[contains(@class,
'rich-tabpanel-content-position')]//table[2]//td[2]/div/div[2]
+CUST_FOURTH_PANEL_HEADER=//table[contains(@class,
'rich-tabpanel-content-position')]//table[2]//td[2]/div/div[1]
+CUST_FIFTH_PANEL_PARTS=//table[contains(@class,
'rich-tabpanel-content-position')]//table[2]//td[3]/div/div
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,16 @@
+FIRST_PANEL_TWO_PARTS=The first panel should consist of two parts -- header and body.
+FIRST_HEADER=Header of the first panel.
+SECOND_PANEL_NO_HEADER=Second panel should consist of only one part -- there should be no
header.
+THIRD_PANEL_TWO_PARTS=The third panel should consist of two parts -- header and body.
+SHOULD_BE_TWO_NESTED_PANELS=There should be two nested panels in the third example.
+SIX_ITEMS_IN_LIST_LEFT=There should be six items in the left nested panel.
+SIX_ITEMS_IN_LIST_RIGHT=There should be six items in the right nested panel.
+THIRD_HEADER=Header of the main panel in the third examnple.
+
+# second tab
+CUST_PANEL_HEADER=Header of the panel.
+CUST_CLASS_HEADER=The "class" attribute of the header should contain
"rich-panel-header".
+CUST_THIRD_HEADER=Header of the third panel should be green -- its class attribute has to
contain "head2".
+CUST_THIRD_BODY=Body of the third panel should be green -- its class attribute has to
contain "body3".
+CUST_FOURTH_PANEL_BODY_SCROLLABLE=Body of the fourth panel should be scrollable -- its
class attribute has to contain "body3".
+CUST_FIFTH_PANEL_NO_HEADER=The fifth panel should have no header.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+EXAMPLE_HEADER=//fieldset/legend
+HEADER_1_N=//fieldset/div/div[1]/div[{0}]/div[1]
+HEADER_2_N=//fieldset/div/div[1]/div[{0}]/div[2]
+CONTENT_N=//fieldset/div/div[1]/div[{0}]/div[3]
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelBar/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+HEADER_N=Header of the panel {0}.
+PANEL_N_SHOULD_BE_VISIBLE=Panel {0} should be visible.
+PANEL_N_SHOULD_NOT_BE_VISIBLE=Panel {0} should not be visible.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,23 @@
+EXAMPLE_HEADER=//fieldset/legend
+PANEL=//span[@id='form:current']
+
+GROUP_N_IMAGE_BEFORE=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/table/tbody/tr/td[1]/img@src
+GROUP_N_IMAGE_AFTER=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/table/tbody/tr/td[3]/img@src
+GROUP_N_TEXT=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/table/tbody/tr/td[2]
+
+ITEM_M_N_IMAGE_BEFORE=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/div[%d]/table/tbody/tr/td[1]/img[2]@src
+ITEM_M_N_IMAGE_AFTER=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/div[%d]/table/tbody/tr/td[3]/img@src
+ITEM_M_N_TEXT=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/div[%d]/table/tbody/tr/td[2]
+ITEM_M_N_STYLE=//form[@id='form']/table/tbody/tr/td[1]/div/div[%d]/div[%d]@style
+SUBITEM_GROUP=//*[@class\='rich-pmenu']/*[contains(@class,'top-group')][2]/div[*[@class\='rich-pmenu-group']]
+
+SUBITEM_M_IMAGE_BEFORE_RELATIVE_TO_GROUP={0}/div[%d]/table/tbody/tr/td[1]/img[3]@src
+SUBITEM_M_TEXT_RELATIVE_TO_GROUP={0}/div[%d]/table/tbody/tr/td[2]
+SUBITEM_M_STYLE_RELATIVE_TO_GROUP={0}/div[%d]@style
+
+
+
+
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/panelMenu/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,22 @@
+COMPONENT_DESCRIPTION=The rich:panelMenu component is used to define a collapsible
side-menu panel.
+CONTENT_OF_PANEL_ON_LOAD=Content of the panel after the page is loaded.
+CONTENT_OF_PANEL=Content of the panel.
+IMAGE_BEFORE_GROUP_NAME=There should be a spacer before group name.
+DISK_BEFORE_GROUP_NAME=There should be an image with disk left of subgroup name.
+NAME_OF_GROUP=Name of group.
+IMAGE_AFTER_GROUP_NAME_DOWN=There should be arrows down right of group name.
+IMAGE_AFTER_GROUP_NAME_UP=There should be arrows up right of group name.
+IMAGE_AFTER_GROUP_NAME_SPACER=There should be spacer right of group name.
+ITEM_M_N_NOT_VISIBLE=Item %d.%d should not be visible.
+ITEM_M_N_VISIBLE=Item %d.%d should be visible.
+IMAGE_BEFORE_ITEM_GRID=There should be an image with grid left of item name.
+SUBITEM_M_NOT_VISIBLE=Item 2.4.%d should not be visible.
+SUBITEM_M_VISIBLE=Item 2.4.%d should be visible.
+
+
+
+
+
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+poll--status=//*[starts-with(text(), 'Polling')]
+poll--control=//*[@type\='button' and contains(@id, 'control')]
+poll--server-date=//*[starts-with(text(), 'Server Date\:')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/poll/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+poll--server-date=Server Date\: {0}
+poll--polling-active=Polling Active
+poll--polling-inactive=Polling Inactive
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,14 @@
+EXAMPLE_1_HEADER=//fieldset[1]/legend
+EXAMPLE_2_HEADER=//fieldset[2]/legend
+
+FIRST_BUTTON=//fieldset[1]/div/form/span/div/input
+FIRST_PROGRESS_BAR_LABEL=//fieldset[1]/div/form/span/div/div[2]
+FIRST_PROGRESS_BAR_STYLE=//fieldset[1]/div/form/span/div/div[2]@style
+
+SECOND_BUTTON=//button[@id='button']
+SECOND_LABEL_FINISHED=//fieldset[2]/div/form/div/div[3]
+SECOND_LABEL_INITIAL=//fieldset[2]/div/form/div/div[1]
+SECOND_PROGRESS_BAR_STYLE=//fieldset[2]/div/form/div/div[2]/div@style
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/progressBar/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,11 @@
+COMPONENT_DESCRIPTION=rich:progressBar is a component which could be used to display
progress of any client or server side process.
+
+BUTTON_SHOULD_BE_PRESENT=Button should be present on the page.
+BUTTON_SHOULD_NOT_BE_PRESENT=Button "Restart Process" should not be present on
the page.
+FIRST_PROGRESS_BAR_LABEL=The value in the label and real value should equal.
+
+SECOND_PROGRESS_BAR_UPLOAD=Progress of the progress bar -- the current value should be
greater then the one 2 seconds ago.
+SECOND_PB_INITIAL_LABEL_SHOULD_BE_VISIBLE=Initial label should be visible.
+SECOND_PB_INITIAL_LABEL_SHOULD_NOT_BE_VISIBLE=Initial label should not be visible.
+SECOND_PB_FINISHED_LABEL_SHOULD_BE_VISIBLE=Finished label should be visible.
+SECOND_PB_FINISHED_LABEL_SHOULD_NOT_BE_VISIBLE=Finished label should not be visible.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+push--control=//*[@type\='button' and (@value\='Start' or
@value\='Stop')]
+push--output-text=//*[text()\='Press Start to run push example' or
starts-with(text(), 'Generated UUID\:')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/push/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+push--inactive=Press Start to run push example
+push--active=Generated UUID\:
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,13 @@
+queue--table-header=//th[text()\='Ajax Requests']
+queue--image-button=//*[@id\='_{0}']
+queue--item=//*[@id\='tr1']//*[starts-with(text(),'_{0}')]
+queue-settings--header=//legend[text()\='Queue demo']
+queue-settings--input--text=//*[text()\='Type
here\:']/../*/*[@type\='text']
+queue-settings--output--text=//*[text()\='Repeated text\:']/../*/*
+queue-settings--output--events-count=//*[text()\='Events count\:']/../*/*
+queue-settings--output--requests-count=//*[text()\='Requests count\:']/../*/*
+queue-settings--output--dom-updates-count=//*[text()\='DOM updates
count\:']/../*/*
+queue-settings--input--request-delay=//*[text()\='Request
delay\:']/../*/*[@type\='text']
+queue-settings--checkbox--ignore-dup-responses=//*[text()\='Ignore Duplicated
Responces']/../*/*[@type\='checkbox']
+queue-settings--checkbox--disable-queue=//*[text()\='Disable
Queue']/../*/*[@type\='checkbox']
+queue-settings--button--apply=//*[@type\='submit' and @value\='Apply']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/queue/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+queue-settings--delays=9000,1000,200,50,10
+queue-settings--char-to-type=B
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+repeat--header=//legend[text()\='Repeat example']
+repeat--inputs--proposed-price=//*[contains(@class,'rich-table')]/tbody/tr{0,choice,0\#|1\#[{0}]}/td[2]/input[@type\='text']
+repeat--selects--reason=//*[contains(@class,'rich-table')]/tbody/tr[1]/td[4]/*[contains(@id,'reason')]
+repeat--outputs--sales-cost=//*[contains(@class,'rich-table')]/tbody/tr{0,choice,0\#|1\#[{0}]}/td[3]
+repeat--outputs--gross-margin=//*[contains(@class,'rich-table')]/tbody/tr{0,choice,0\#|1\#[{0}]}/td[5]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/repeat/messages.properties
===================================================================
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,9 @@
+script--header=//legend[text()\='Script demo']
+script--button--hide=//*[@type\='submit' and @value\='Hide']
+script--button--show=//*[@type\='submit' and @value\='Show']
+script--button--submit=//*[@type\='submit' and @value\='Submit']
+script--input--name=//span[text()\='Name\:']/../../td[2]/input[@type\='text']
+script--input--job=//span[text()\='Job\:']/../../td[2]/input[@type\='text']
+script--output--name=//*[@id\='out']//*[starts-with(text(), 'Name\:')]
+script--output--job=//*[@id\='out']//*[starts-with(text(), 'Job\:')]
+script--panel--mypanel=//div[@id\='mypanel']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/script/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+script--input--name=abc
+script--input--job=def
+script--regexp--name-prefix=Name\:\\s*
+script--regexp--job-prefix=Job\:\\s*
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+EXAMPLE_HEADER=//fieldset/legend
+SEPARATOR_N=//fieldset/div/div[%d]/div
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/separator/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,4 @@
+COMPONENT_DESCRIPTION= Separator is used to draw a horizontal line on a page.
+HEIGHT_OF_SEPARATOR=Height of the separator.
+WIDTH_OF_SEPARATOR=Width of the separator.
+HASH_CODE=Hash code of the image that makes the separator.
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,10 @@
+EXAMPLE_1_HEADER=//fieldset[1]/legend
+EXAMPLE_2_HEADER=//fieldset[2]/legend
+FIRST_EXAMPLE_HEADER=//fieldset[legend/text()='Simple Toggle Panel
example']//div[@class='rich-stglpanel-header']
+FIRST_EXAMPLE_ARROWS_LEFT_RELATIVE_TO_HEADER={0}//div[@class='rich-stglpnl-marker'
and contains(@id,'switch_on')]
+FIRST_EXAMPLE_ARROWS_RIGHT_RELATIVE_TO_HEADER={0}//div[@class='rich-stglpnl-marker'
and contains(@id,'switch_off')]
+FIRST_EXAMPLE_BODY=//fieldset[legend/text()='Simple Toggle Panel
example']//div[@class='rich-stglpanel-body']
+SECOND_EXAMPLE_N_HEADER=//fieldset[legend/text()\='Switch types
example']//td[@class\='tpanels'][%d]//div[@class\='rich-stglpanel-header']
+SECOND_EXAMPLE_N_ARROWS_LEFT_RELATIVE_TO_HEADER={0}//div[@class\='rich-stglpnl-marker'
and contains(@id,'switch_on')]
+SECOND_EXAMPLE_N_ARROWS_RIGHT_RELATIVE_TO_HEADER={0}//div[@class\='rich-stglpnl-marker'
and contains(@id,'switch_off')]
+SECOND_EXAMPLE_N_BODY=//fieldset[legend/text()\='Switch types
example']//td[@class\='tpanels'][%d]//div[@class\='rich-stglpanel-body']
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/simpleTogglePanel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,10 @@
+COMPONENT_DESCRIPTION= SimpleTogglePanel represents a panel with a base text label at the
top and additional content
+PANEL_HEADER=Header of the panel should be "%s".
+BODY_SHOULD_BE_VISIBLE=Content of the panel should be visible.
+BODY_SHOULD_NOT_BE_VISIBLE=Content of the panel should not be visible.
+
+LEFT_ARROWS_SHOULD_BE_VISIBLE=Picture with two arrow heading to the left in panel's
header should be visible.
+LEFT_ARROWS_SHOULD_NOT_BE_VISIBLE=Picture with two arrow heading to the left in
panel's header should not be visible.
+RIGHT_ARROWS_SHOULD_BE_VISIBLE=Picture with two arrow heading to the right in panel's
header should be visible.
+RIGHT_ARROWS_SHOULD_NOT_BE_VISIBLE=Picture with two arrow heading to the right in
panel's header should not be visible.
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,6 @@
+EXAMPLE_HEADER=//fieldset[1]/legend
+FIRST_SPACER_HEIGHT=//fieldset/div/p[1]/img@height
+FIRST_SPACER_WIDTH=//fieldset/div/p[1]/img@width
+SECOND_SPACER_HEIGHT=//fieldset/div/img@height
+SECOND_SPACER_WIDTH=//fieldset/div/img@width
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/spacer/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+COMPONENT_DESCRIPTION=Spacer is a simple component that renders an invisible image with
the given width, height.
+SPACER_HEIGHT=Height of the spacer (in pixels).
+SPACER_WIDTH=Width of teh spacer (in pixels).
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,6 @@
+FIELDSET_PAGE_PART_PREFORMATTED=//fieldset[{0}]
+OUTPUT_STATUS_MESSAGE_PREFORMATTED=//fieldset[{0}]//*[contains(@id,
'status.start')]
+BUTTON_REQUEST_PREFORMATTED=//fieldset[{0}]/div//input[@type\='button']
+INPUT_NAME=//fieldset[3]//*[@type\='text' and contains(@id, 'name')]
+INPUT_JOB=//fieldset[3]//*[@type\='text' and contains(@id, 'job')]
+OUTPUT_TEXT=//*[contains(@id,'out') and starts-with(text(),'Name\:')]
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/status/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,2 @@
+STYLE_DISPLAY=display
+PATTERN_NAME_JOB=^Name: (\\w*), Job: (\\w*)\\s*$
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+style--header=//legend[text()\='Style demo']
+style--link--deep-marine=//a[text()\='DeepMarine']
+style--link--blue-sky=//a[text()\='BlueSky']
+style--link--japan-cherry=//a[text()\='JapanCherry']
+style--table--output=//table[@class\='rsPanel']
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/style/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,3 @@
+style--color--deep-marine=rgb(0, 136, 148)
+style--color--blue-sky=rgb(190, 214, 248)
+style--color--japan-cherry=rgb(232, 189, 189)
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,24 @@
+FIRST_SUGGESTION_BOX_N=//table[@id='suggestionbox_form:suggestionBoxId:suggest']/tbody/tr[%d]
+
+FIRST_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/input[1]
+FIRST_BORDER_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[1]/td[2]/table/tbody/tr[1]/td[3]/input
+FIRST_WIDTH_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[2]/td[2]/table/tbody/tr[1]/td[3]/input
+FIRST_HEIGHT_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[3]/td[2]/table/tbody/tr[1]/td[3]/input
+FIRST_SHADOW_DEPTH_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[4]/td[2]/table/tbody/tr[1]/td[3]/input
+FIRST_SHADOW_OPACITY_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[5]/td[2]/table/tbody/tr[1]/td[3]/input
+FIRST_CELLPADDING_INPUT=//fieldset[1]/div/form/table/tbody/tr/td[1]/table/tbody/tr[6]/td[2]/table/tbody/tr[1]/td[3]/input
+
+FIRST_TOWN_TABLE_M_N=//fieldset[1]/div/form/table/tbody/tr/td[2]/div/table/tbody/tr[%d]/td[%d]
+
+FIRST_BORDER_STYLE=//div[@id='suggestionbox_form:suggestionBoxId']/div[1]/div@style
+FIRST_WIDTH_STYLE=//div[@id='suggestionbox_form:suggestionBoxId']@style
+FIRST_HEIGHT_STYLE=//div[@id='suggestionbox_form:suggestionBoxId']@style
+FIRST_SHADOW_DEPTH_STYLE=//div[@id='suggestionbox_form:suggestionBoxId']/div[2]@style
+FIRST_SHADOW_OPACITY_STYLE=//div[@id='suggestionbox_form:suggestionBoxId']/div[2]@style
+FIRST_CELLPADDING=//div[@id='suggestionbox_form:suggestionBoxId']/div[1]/div/table/tbody/tr/td/div/table@cellpadding
+
+SECOND_INPUT=//fieldset[2]/div/form/table/tbody/tr[1]/td[2]/table/tbody/tr/td[1]/input
+SECOND_BUTTON=//fieldset[2]/div/form/table/tbody/tr[1]/td[2]/table/tbody/tr/td[2]/img
+SECOND_SUGGESTION_LINES=//div[@id='form:suggestion']/div[1]/div/table/tbody/tr/td/div/table/tbody/tr
+SECOND_SUGGESTION_BOX_N=//div[@id='form:suggestion']/div[1]/div/table/tbody/tr/td/div/table/tbody/tr[%d]
+SECOND_STATE=//fieldset[2]/div/form/table/tbody/tr[2]/td[2]/span
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/suggestionBox/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,24 @@
+COMPONENT_DESCRIPTION=RichFaces Suggestion Box component adds the autocomplete capability
to the existing input component
+TABLE_M_N=String in the table on the position [%d,%d].
+NO_CAPITALS_FOUND=There should be no capitals.
+
+SUGGESTION_BOX_BORDER=Border width of the suggestion box after typing %d.
+SUGGESTION_BOX_WIDTH=Width of the suggestion box after typing %d.
+SUGGESTION_BOX_HEIGHT=Height of the suggestion box after typing %d.
+SUGGESTION_BOX_SHADOW_DEPTH=Depth of the shadow after typing %d.
+SUGGESTION_BOX_SHADOW_OPACITY=Opacity of the shadow after typing %d.
+SUGGESTION_BOX_CELLPADDING=Padding of the suggestion box's cells after typing %d.
+
+COUNT_OF_ALL_SUGGESTIONS=Count of all suggestions.
+AUGUSTA_MAINE=Augusta is the capital of Maine.
+AUGUSTA_MADISON_MAINE_WISCONSIN=Augusta and Madison are capitals of Maine and Wisconsin.
+
+
+
+
+
+
+
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,17 @@
+# first tab
+USAGE_EXAMPLE_HEADER=//fieldset/legend
+USAGE_PANEL_N_TEXT=//fieldset/div/table[%d]/tbody/tr[2]/td/table/tbody/tr/td
+USAGE_PANEL_3_N_TEXT=//fieldset/div/table[3]/tbody/tr[2]/td[%d]
+USAGE_PANEL_N_TAB_M=//fieldset/div/table[%d]/tbody/tr[1]/td/form/table/tbody/tr/td[%d*2]/table
+
+# second tab
+CUST_EXAMPLE_HEADER=//div[@id='itme']/p
+CUST_TABS_ALIGN=//table[@class\='rich-tabpanel']/tbody/tr[1]/td@align
+CUST_PANEL_TEXT=//table[@class\='rich-tabpanel']/tbody/tr[2]/td[%d]
+CUST_PANEL_TAB_N=//table[@class\='rich-tabpanel']/tbody/tr[1]/td/form/table/tbody/tr/td[%d*2]/table
+
+# third tab
+DELET_EXAMPLE_HEADER=//form[@id='tabs_form']/../../p
+DELET_PANEL_TABS=//table[@id='tabs_form:RemoveAbleTabPanel']/tbody/tr[1]/td/table/tbody/tr/td
+DELET_PANEL_TAB_N_CLOSE=//img[@id='tabs_form:hidelink%d']
+DELET_RESET_BUTTON=//form[@id\='tabs_form']/input[2]
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tabPanel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,12 @@
+# first tab
+USAGE_COMPONENT_DESCRIPTION=Tab panel is used to create "tabbed" pages.
+USAGE_CONTENT_OF_PANEL_N=Content of tab panel %d.
+USAGE_SECOND_TAB_SHOULD_BE_DISABLED=The second tab should be disabled.
+
+# second tab
+CUST_COMPONENT_DESCRIPTION=This is a demo of how to use stylesheets and skinnability
features in order to adjust tab panel appearance.
+CUST_TABS_RIGHT_ALIGNED=Tabs should be aligned to the right.
+
+# third tab
+DELET_COMPONENT_DESCRIPTION=This simple sample is added according to numerous Forum
requests and shows how to implement tabs deletion from tabPanel component.
+DELET_NUMBER_OF_TABS=Number of tabs in the example.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,8 @@
+EXAMPLE_HEADER=//fieldset[1]/legend
+CLICK_ME_BUTTON=//fieldset[legend/text()\='Toggle Panel
example']//div[@class\='rich-toggle-panel']/div[contains(@id,'closed')]
+CLICK_ME_BUTTON_A_RELATIVE={0}/a
+CLOSE_BUTTON=//div[@class\='rich-toggle-panel']//div[contains(@id,'tip1')]//a[text()\='x
Close']
+PANEL_N=//div[@class\='rich-toggle-panel']//div[contains(@id,'tip%d')]
+PREVIOUS_BUTTON_N=//div[@class\='rich-toggle-panel']//div[contains(@id,'tip%d')]//a[text()\='\u00AB
Previous']
+NEXT_BUTTON_N=//div[@class\='rich-toggle-panel']//div[contains(@id,'tip%d')]//a[text()\='Next
\u00BB']
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/togglePanel/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,5 @@
+COMPONENT_DESCRIPTION=Toggle Panel renders sequence of states that can be switched
(toggled) by a component called Toggle Control.
+CLICK_ME_BUTTON_VISIBLE=The "Click Me" button should be visible.
+CLICK_ME_BUTTON_NOT_VISIBLE=The "Click Me" button should not be visible.
+PANEL_N_VISIBLE=The panel %d should be visible.
+PANEL_N_NOT_VISIBLE=The panel %d should not be visible.
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+EXAMPLE_N_HEADER=//fieldset[{0}]/legend
+FIRST_TOOLBAR_ITEM_N=//fieldset[1]//td[{0}]
+SECOND_TOOLBAR_ITEM_N=//fieldset[2]//td[{0}]
+THIRD_TOOLBAR_GROUP_SEPARATOR_N=//fieldset[3]//form/table/tbody/tr/td[1]//td[1+{0}]/a
+THIRD_TOOLBAR_ITEM_SEPARATOR_N=//fieldset[3]//form/table/tbody/tr/td[3]//td[1+{0}]/a
+GROUP_SEPARATOR_IMG=//table[@id='bar']/tbody/tr/td[4]/img
+ITEM_SEPARATOR_IMG=//table[@id='bar']/tbody/tr/td[2]/img
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/toolBar/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,16 @@
+ITEM_CLASS_ATTRIBUTE=Item's class attribute should contain
"rich-toolbar-item".
+GROUP_SEPARATOR=Group separator should be centred.
+ITEM_SEPARATOR=Item separator should be centred.
+ITEM_IMAGE_S=The item should contain image "%s".
+THERE_IS_NO_GROUP_SEPARATOR=There is no group separator.
+THERE_IS_GROUP_SEPARATOR=There is a group separator despite the fact that
"none" was chosen.
+THERE_IS_NO_ITEM_SEPARATOR=There is no item separator.
+THERE_IS_ITEM_SEPARATOR=There is an item separator despite the fact that "none"
was chosen.
+GROUP_SEPARATOR_S=Group separator should contain image "{0}".
+ITEM_SEPARATOR_S =Item separator should contain image "{0}".
+
+
+
+
+
+
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,11 @@
+header=//legend[text()\='ToolTip example']
+panel--sample1=//div[contains(@id,'sample1')]
+panel--sample2=//div[contains(@id,'sample2')]
+panel--sample3=//div[contains(@id,'sample3')]
+panel--sample4=//div[contains(@id,'sample4')]
+tooltip--text-part--tooltips-requested=//*[contains(@style,'display\:
block')]//*[contains(text(),'tooltips requested\:')]/../..
+data-table--table=//*[@class\='rich-table']
+data-table--cells-preformatted=//*[contains(@class,'rich-table')]//*[contains(@class,'rich-table-row')]{0,choice,0\#|1\#[{0}]}//*[contains(@class,'rich-table-cell')][{1,choice,0\#2|1\#3|2\#4}]
+data-table--items-on-tooltip=//*[contains(@class,'rich-tool-tip') and
contains(@style,'display\: block')]//*[text()\='Vehicle
details\:']/../../../*/*/*[text()\='{0,choice,0\#make|1\#model|2\#year}\:']/following-sibling\:\:*[1]
+data-table--relative--cell-make-to-its-active-tooltip-area={0}/*
+data-table--relative--cell-make-to-its-label={0}/*/*[contains(@id,'\:make')]
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tooltip/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,7 @@
+coords--event-at-panel=5,5
+output--tooltip1-text-part=This tool-tip content was pre-rendered to the page.
+output--tooltip2-text-part=This tool-tip content also pre-rendered to the page.
+output--tooltip3-4-wait=Wait...
+output--tooltip3-4-text-part=This tool-tip content was rendered on server
+regexp--tooltips-requested=.*\\s(\\d+)$
+data-table--coords--event-at-cell=2,2
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/locators.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/locators.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/locators.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,18 @@
+# TreeTestCase -- first tab
+HEADER_PREFORMATTED=//fieldset[{0}]/legend
+NODE_1_LINK_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/table[1]/tbody/tr/td[1]/div/a
+NODE_1_1_LABEL_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div/table/tbody/tr/td[3]
+NODE_1_1_IMAGE_FIRST_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div/table/tbody/tr/td[1]/div/a/img[1]
+NODE_1_1_IMAGE_SECOND_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div/table/tbody/tr/td[1]/div/a/img[2]
+NODE_1_1_LINK_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div[1]/table[1]/tbody/tr/td[1]/div/a
+NODE_1_1_4_LABEL_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div[1]/div[1]/table[4]/tbody/tr/td[3]
+NODE_1_1_N_LABEL_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div[1]/div[1]/table[{1}]/tbody/tr/td[3]
+NODE_N_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div[{1}]
+CHILDREN_1_1_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/div[1]/div[1]/table
+CHILDREN_1_PREFORMATTED=//fieldset[{0}]/div/form/div/div[1]/table
+
+# TreeNodesAdaptorTestCase
+EXAMPLE_HEADER=//fieldset[1]/legend
+TABLE_SUBNODES=//fieldset[1]/div/form/div/div[1]/div/div/table
+DEMO_NODE=//fieldset[1]/div/form/div/div[1]/div/div/table[1]/tbody/tr/td[1]/div/a
+DIV_SUBNODES_PREFORMATTED=//fieldset[1]/div/form/div/div[1]/div/div/div{0,choice,0#|1#[{0}]}
\ No newline at end of file
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/messages.properties
===================================================================
---
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/messages.properties
(rev 0)
+++
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/org/jboss/richfaces/integrationTest/tree/messages.properties 2009-08-26
16:28:57 UTC (rev 15325)
@@ -0,0 +1,19 @@
+# TreeTestCase -- first tab
+NODE_1_1_1_LABEL=The Road To Hell (Part 1)
+NODE_1_1_2_LABEL=The Road To Hell (Part 2)
+NODE_1_1_3_LABEL=You Must Be Evil
+NODE_1_1_4_LABEL=Texas
+NODE_1_1_5_LABEL=Looking For A Rainbow
+NODE_1_1_6_LABEL=Your Warm And Tender Love
+NODE_1_1_7_LABEL=Daytona
+NODE_1_1_8_LABEL=That`s What They Always Say
+NODE_1_1_9_LABEL=Let`s Dance
+NODE_1_1_10_LABEL=I Just Wanna Be With You
+NODE_1_1_11_LABEL=Tell Me There`s A Heaven
+NODE_1_1_LABEL=The Road To Hell
+CHILDREN_COUNT_1_1=11
+CHILDREN_COUNT_TOP=4
+
+
+# TreeNodesAdaptorTestCase
+CHILDREN_COUNT=4
Added:
branches/community/3.3.X/samples/richfaces-demo/functional-test/src/test/resources/user-extensions/rfqa-extensions.js
===================================================================