Java tutorial
/** * License Agreement. * * Rich Faces - Natural Ajax for Java Server Faces (JSF) * * Copyright (C) 2007 Exadel, Inc. * * This library 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 library 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 library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.richfaces.component; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.TimeZone; import javax.faces.component.UIComponent; import javax.faces.component.html.HtmlForm; import org.ajax4jsf.renderkit.RendererUtils.HTML; import org.ajax4jsf.tests.AbstractAjax4JsfTestCase; import org.apache.commons.lang.StringUtils; import org.richfaces.renderkit.CalendarRendererBase; import org.richfaces.renderkit.html.CalendarRenderer; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlScript; import com.gargoylesoftware.htmlunit.html.HtmlSpan; /** * @author Nick Belaevski - mailto:nbelaevski@exadel.com created 08.06.2007 * */ public class CalendarComponentTest extends AbstractAjax4JsfTestCase { private UIComponent form; private UICalendar calendar; private UICalendar calendar1; private UICalendar calendar2; private UICalendar calendar3; private static Set<String> javaScripts = new HashSet<String>(); static { javaScripts.add("org.ajax4jsf.javascript.PrototypeScript"); javaScripts.add("org.ajax4jsf.javascript.AjaxScript"); javaScripts.add("org/richfaces/renderkit/html/scripts/events.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/utils.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/json/json-dom.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/calendar.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/scriptaculous/effects.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/JQuerySpinBtn.js"); javaScripts.add("org/richfaces/renderkit/html/scripts/jquery/jquery.js"); } public CalendarComponentTest(String name) { super(name); } public void setUp() throws Exception { super.setUp(); form = new HtmlForm(); form.setId("form"); facesContext.getViewRoot().getChildren().add(form); calendar = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar1 = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar.setLocale(Locale.UK); calendar.setDatePattern("d/MM/yyyy"); calendar.setTimeZone(TimeZone.getTimeZone("GMT-4:00")); calendar.setButtonLabel("PopUp"); // XXX test popup false // XXX test CurrentDate = null calendar.setPopup(true); Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2001, Calendar.SEPTEMBER, 11, 10, 0, 0); calendar.setId("calendar"); calendar.setValue(calendarObject.getTime()); form.getChildren().add(calendar); calendar1.setId("_calendar"); calendar1.setPopup(false); calendar1.setCurrentDate(null); form.getChildren().add(calendar1); calendar2 = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar2.setDatePattern("dd/M/yy HH:mm"); calendarObject.set(2001, Calendar.SEPTEMBER, 11, 13, 36); calendar2.setValue(calendarObject.getTime()); calendar2.setId("timecalendar"); form.getChildren().add(calendar2); calendar3 = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar3.setDatePattern("dd/M/yy HH:mm"); calendarObject.set(2001, Calendar.SEPTEMBER, 11, 13, 36); calendar3.setValue(calendarObject.getTime()); calendar3.setId("timecalendar"); calendar3.setMode(UICalendar.AJAX_MODE); calendar3.setLocale(new Locale("ru", "RU", "")); calendar3.setCellHeight("50"); calendar3.setCellWidth("50"); form.getChildren().add(calendar3); } /* * public void testTidy() throws Exception { UIViewRoot viewRoot = * facesContext.getViewRoot(); List children = viewRoot.getChildren(); * UIComponent calendar = * application.createComponent(UICalendar.COMPONENT_TYPE); * children.add(calendar); HtmlOutputText output = (HtmlOutputText) * application.createComponent(HtmlOutputText.COMPONENT_TYPE); * output.setValue("<br> &<a href='#'>"); * output.setEscape(false); calendar.getChildren().add(output); * * HtmlPage renderView = renderView(); * System.out.println(renderView.asXml()); } */ public void testPreloadRanges() throws Exception { UICalendar calendar = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar.setLocale(Locale.FRENCH); Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2007, Calendar.JUNE, 10); Calendar preloadRangeBegin = Calendar.getInstance(); preloadRangeBegin.clear(); preloadRangeBegin.setTime(calendar.getDefaultPreloadBegin(calendarObject.getTime())); assertEquals(2007, preloadRangeBegin.get(Calendar.YEAR)); assertEquals(Calendar.JUNE, preloadRangeBegin.get(Calendar.MONTH)); assertEquals(1, preloadRangeBegin.get(Calendar.DATE)); Calendar preloadRangeEnd = Calendar.getInstance(); preloadRangeEnd.clear(); preloadRangeEnd.setTime(calendar.getDefaultPreloadEnd(calendarObject.getTime())); assertEquals(2007, preloadRangeEnd.get(Calendar.YEAR)); assertEquals(Calendar.JUNE, preloadRangeEnd.get(Calendar.MONTH)); assertEquals(30, preloadRangeEnd.get(Calendar.DATE)); calendarObject.set(2007, Calendar.JANUARY, 1); preloadRangeBegin.setTime(calendar.getDefaultPreloadBegin(calendarObject.getTime())); assertEquals(2007, preloadRangeBegin.get(Calendar.YEAR)); assertEquals(Calendar.JANUARY, preloadRangeBegin.get(Calendar.MONTH)); assertEquals(1, preloadRangeBegin.get(Calendar.DATE)); calendarObject.set(2007, Calendar.JUNE, 10); calendar.setLocale(Locale.US); preloadRangeBegin.setTime(calendar.getDefaultPreloadBegin(calendarObject.getTime())); assertEquals(2007, preloadRangeBegin.get(Calendar.YEAR)); assertEquals(Calendar.JUNE, preloadRangeBegin.get(Calendar.MONTH)); assertEquals(1, preloadRangeBegin.get(Calendar.DATE)); preloadRangeEnd.setTime(calendar.getDefaultPreloadEnd(calendarObject.getTime())); assertEquals(2007, preloadRangeEnd.get(Calendar.YEAR)); assertEquals(Calendar.JUNE, preloadRangeEnd.get(Calendar.MONTH)); assertEquals(30, preloadRangeEnd.get(Calendar.DATE)); } public void testGetPreloadDateRange() throws Exception { UICalendar calendar = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); calendar.setLocale(Locale.FRENCH); Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2007, Calendar.JUNE, 10); calendar.setCurrentDate(calendarObject.getTime()); Date[] range = calendar.getPreloadDateRange(); assertEquals(calendar.getPreloadDateRangeBegin(), range[0]); assertEquals(calendar.getPreloadDateRangeEnd(), range[range.length - 1]); assertEquals(30, range.length); } public void testCalendarRenderer() throws Exception { HtmlPage page = renderView(); assertNotNull(page); HtmlElement htmlSpan = page.getHtmlElementById(calendar.getClientId(facesContext) + "Popup"); assertNotNull(htmlSpan); HtmlInput htmlCalendarInput = (HtmlInput) page .getHtmlElementById(calendar.getClientId(facesContext) + "InputDate"); HtmlButton htmlCalendarButton = (HtmlButton) page .getHtmlElementById(calendar.getClientId(facesContext) + "PopupButton"); HtmlSpan htmlCalendarSpan = (HtmlSpan) page .getHtmlElementById(calendar.getClientId(facesContext) + "Popup"); assertNotNull(htmlCalendarInput); assertNotNull(htmlCalendarButton); assertNotNull(htmlCalendarSpan); assertEquals("11/09/2001", htmlCalendarInput.getValueAttribute()); HtmlElement htmlCalendar1Span = page.getHtmlElementById(calendar1.getClientId(facesContext) + "Popup"); assertNotNull(htmlCalendar1Span); assertEquals("display: none", htmlCalendar1Span.getAttributeValue(HTML.style_ATTRIBUTE)); try { page.getHtmlElementById(calendar1.getClientId(facesContext) + "InputDate"); } catch (ElementNotFoundException e) { assertNotNull(e); } try { page.getHtmlElementById(calendar1.getClientId(facesContext) + "PopupButton"); } catch (ElementNotFoundException e) { assertNotNull(e); } try { page.getHtmlElementById(calendar1.getClientId(facesContext) + "Popup"); } catch (ElementNotFoundException e) { assertNotNull(e); } } public void testCalendarDecode() throws Exception { Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2001, Calendar.SEPTEMBER, 11); calendar.decode(facesContext); //assertEquals(calendarObject.getTime(), calendar.getSubmittedValue()); calendarObject.set(2002, Calendar.SEPTEMBER, 11, 1, 1, 1); calendar.updateCurrentDate(facesContext, calendarObject.getTime()); assertEquals(calendarObject.getTime(), calendar.getCurrentDate()); } public void testCalendarStyles() throws Exception { HtmlPage page = renderView(); assertNotNull(page); List<?> links = page.getDocumentHtmlElement().getHtmlElementsByTagName(HTML.LINK_ELEMENT); assertEquals(1, links.size()); HtmlElement link = (HtmlElement) links.get(0); assertTrue(link.getAttributeValue(HTML.HREF_ATTR).contains("css/calendar.xcss")); } public void testCalendarScrits() throws Exception { HtmlPage page = renderView(); assertNotNull(page); List<?> scripts = page.getDocumentHtmlElement().getHtmlElementsByTagName(HTML.SCRIPT_ELEM); for (Iterator<?> it = scripts.iterator(); it.hasNext();) { HtmlScript item = (HtmlScript) it.next(); String srcAttr = item.getSrcAttribute(); if (item.getFirstDomChild() != null) { String scriptBodyString = item.getFirstDomChild().toString(); if (scriptBodyString.contains("new Calendar") && scriptBodyString.contains("form:calendar")) { assertTrue(scriptBodyString.contains("datePattern")); assertTrue(scriptBodyString.contains("d/MM/yyyy")); assertTrue(scriptBodyString.contains("selectedDate")); assertTrue(scriptBodyString.contains("popup: true")); assertTrue(scriptBodyString.contains("currentDate:")); assertTrue(scriptBodyString.contains("selectedDate:")); } else if (scriptBodyString.contains("form:timecalendar")) { assertTrue(scriptBodyString.contains("selectedDate: new Date(2001,8,11,13,36,0)")); } } if (StringUtils.isNotBlank(srcAttr)) { boolean found = false; for (Iterator<String> srcIt = javaScripts.iterator(); srcIt.hasNext();) { String src = srcIt.next(); found = srcAttr.contains(src); if (found) { break; } } assertTrue(found); } } } public void testCalendarTime() throws Exception { Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2001, Calendar.SEPTEMBER, 11, 13, 36); assertEquals(calendarObject.getTime().toString(), calendar2.getValue().toString()); } public void testCalendarGetConvertedValue() throws Exception { UICalendar calendar = (UICalendar) application.createComponent(UICalendar.COMPONENT_TYPE); Calendar calendarObject = Calendar.getInstance(); calendarObject.clear(); calendarObject.set(2007, Calendar.JUNE, 10); calendar.setCurrentDate(calendarObject.getTime()); calendar2.setDatePattern("dd/M/yy"); calendar.getConvertedValue(facesContext, "01/01/01"); calendar.getAsDate(new Date()); calendar.getAsLocale("ru_RU"); CalendarRendererBase renderer = new CalendarRenderer(); renderer.getConvertedValue(facesContext, calendar, new Date()); } public void tearDown() throws Exception { super.tearDown(); form = null; calendar = null; } }