Anonymous avatar Anonymous committed 37e333a

Applying the fix to Reid Varner's reported infinite looping bug in QUARTZ-636. Also adding a unit test to show the bug

git-svn-id: http://svn.opensymphony.com/svn/quartz/branches/quartz_1-6@756 69f7d36a-ea1c-0410-88ea-9fd03e4c9665

Comments (0)

Files changed (2)

src/java/org/quartz/impl/calendar/MonthlyCalendar.java

 /**
  * <p>
  * This implementation of the Calendar excludes a set of days of the month. You
- * may use it to exclude every 1. of each month for example. But you may define
+ * may use it to exclude every first day of each month for example. But you may define
  * any day of a month.
  * </p>
  * 
 
         while (isDayExcluded(day) == true) {
             cl.add(java.util.Calendar.DATE, 1);
-            day = cl.get(java.util.Calendar.DAY_OF_WEEK);
+            day = cl.get(java.util.Calendar.DAY_OF_MONTH);
         }
 
         return cl.getTime().getTime();

src/test/java/org/quartz/MonthlyCalendarTest.java

+/* 
+ * Copyright 2004-2006 OpenSymphony 
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
+ * use this file except in compliance with the License. You may obtain a copy 
+ * of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0 
+ *   
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
+ * License for the specific language governing permissions and limitations 
+ * under the License.
+ */
+package org.quartz;
+
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import junit.framework.TestCase;
+
+import org.quartz.impl.calendar.MonthlyCalendar;
+
+/**
+ * Unit test for MonthlyCalendar
+ */
+public class MonthlyCalendarTest extends TestCase {
+    
+    // TODO: Copy the Serialization test code over from AnnualCalenderTest and 
+    //       generate a .ser
+
+    /**
+     * Tests whether greater than the 7th of the month causes infinite looping. 
+     * See: QUARTZ-636
+     */
+    public void testForInfiniteLoop() {
+        MonthlyCalendar monthlyCalendar = new MonthlyCalendar();
+
+        for(int i=1; i<9; i++) {
+            monthlyCalendar.setDayExcluded(i, true);
+        }
+        Calendar c = Calendar.getInstance();
+        c.set(2007, 11, 8, 12, 0, 0);
+
+        monthlyCalendar.getNextIncludedTime(c.getTime().getTime());
+    }
+
+}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.