/* * $Id$ * * Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * 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 St, Fifth Floor, Boston, MA 02110-1301 USA * */ package org.jdesktop.swingx.plaf.basic; import java.awt.ComponentOrientation; import java.awt.GraphicsEnvironment; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; import java.util.logging.Logger; import org.jdesktop.swingx.InteractiveTestCase; import org.jdesktop.swingx.JXFrame; import org.jdesktop.swingx.JXMonthView; import org.jdesktop.swingx.calendar.CalendarUtils; import org.junit.Test; /** * Tests to expose known issues of BasicMonthViewUI. * * @author Jeanette Winzenburg */ public class BasicMonthViewUIIssues extends InteractiveTestCase { @SuppressWarnings("all") private static final Logger LOG = Logger .getLogger(BasicMonthViewUIIssues.class.getName()); public static void main(String[] args) { // setSystemLF(true); BasicMonthViewUIIssues test = new BasicMonthViewUIIssues(); try { test.runInteractiveTests(); // test.runInteractiveTests(".*Simple.*"); } catch (Exception e) { System.err.println("exception when executing interactive tests:"); e.printStackTrace(); } } /** * Issue #1245-swingx: incorrect month/dayofweek names for non-core-supported Locales. */ @Test public void testLocaleByProviderUIMonthNames() { fail("TBD: need test that Locales from service providers are used"); Locale serbianLatin = getLocal("sh"); if (serbianLatin == null) { LOG.fine("can't run, no service provider for serbian latin" ); return; } JXMonthView monthView = new JXMonthView(); monthView.setLocale(serbianLatin); // deprecation removal // assertMonths(monthView, serbianLatin); } /** * @param string * @return */ private Locale getLocal(String language) { Locale[] available = Locale.getAvailableLocales(); for (Locale locale : available) { if (language.equals(locale.getLanguage())) return locale; } return null; } /** * Issue #786-swingx: IllegalStateException when paintDays of April 2008. * * Set the default timezone and get the default calendar. * */ public void testTimeZoneCairoCalendarUtils() { TimeZone cairo = TimeZone.getTimeZone("Africa/Cairo"); Calendar calendar = Calendar.getInstance(cairo); assertEquals(cairo, calendar.getTimeZone()); calendar.set(2008, Calendar.MARCH, 31); CalendarUtils.startOfMonth(calendar); calendar.add(Calendar.MONTH, 1); assertTrue(CalendarUtils.isStartOfMonth(calendar)); CalendarUtils.startOfWeek(calendar); // simulate the painting loop for (int week = 0; week < 6; week++) { for (int day = 0; day < 7; day++) { calendar.add(Calendar.DAY_OF_MONTH, 1); assertTrue("must be start of day " + calendar.getTime(), CalendarUtils.isStartOfDay(calendar)); } assertTrue("must be start of week " + calendar.getTime(), CalendarUtils.isStartOfWeek(calendar)); } } /** * Test getDayBounds(Date) for leading dates are null. The assumption is * wrong for a leading date in the second month - it's contained in the * first! */ public void testDayBoundsLeadingDatesNull() { // This test will not work in a headless configuration. if (GraphicsEnvironment.isHeadless()) { LOG.fine("cannot run test - headless environment"); return; } BasicMonthViewUI ui = getRealizedMonthViewUI(ComponentOrientation.LEFT_TO_RIGHT); // the ui's calendar is configured to the first displayed day Calendar calendar = ui.getCalendar(); calendar.add(Calendar.MONTH, 1); int month = calendar.get(Calendar.MONTH); CalendarUtils.startOfWeek(calendar); assertFalse("sanity - we have leading dates in the month", month == calendar.get(Calendar.MONTH)); assertEquals("leading dates must return null bounds", null, ui.getDayBounds(calendar.getTime())); } /** * Returns the ui of a realized JXMonthView with 2 columns and the * given componentOrientation without showingWeekNumbers. * * NOTE: this must not be used in a headless environment. * * @param co * @return */ private BasicMonthViewUI getRealizedMonthViewUI(ComponentOrientation co) { return getRealizedMonthViewUI(co, false); } /** * Returns the ui of a realized JXMonthView with * given componentOrientation and showingWeekNumbers flag. * It's prefColumns/Rows are set to 2. The first displayedDate is * 20. Feb. 2008 (to have fixed leading/trailing dates) * * The frame is packed and it's size extended by 40, 40 to * give a slight off-position (!= 0) of the months shown. * * * * NOTE: this must not be used in a headless environment. * * @param co the componentOrientation to use * @return */ private BasicMonthViewUI getRealizedMonthViewUI(ComponentOrientation co, boolean isShowingWeekNumbers) { JXMonthView monthView = new JXMonthView(); monthView.setPreferredColumnCount(2); monthView.setPreferredRowCount(2); monthView.setComponentOrientation(co); monthView.setShowingWeekNumber(isShowingWeekNumbers); Calendar calendar = monthView.getCalendar(); calendar.set(2008, Calendar.FEBRUARY, 20); monthView.setFirstDisplayedDay(calendar.getTime()); JXFrame frame = new JXFrame(); frame.add(monthView); frame.pack(); frame.setSize(frame.getWidth() + 40, frame.getHeight() + 40); frame.setVisible(true); BasicMonthViewUI ui = (BasicMonthViewUI) monthView.getUI(); return ui; } /** * Do nothing - just to keep the test runner from complaining * if there are no issues. * */ public void testDummy() { } }