text: ﻿Date.Specification = new Specification({
    'Partial Date: No Year': {
       setup: function() {
         this.today = new Date().clearTime(); 
         this.baseline = []; 
         this.baseline[0] = this.today.clone().set( { month: 6, day: 1 } )
         this.baseline[1] = this.today.clone().set( { month: 6, day: 1, hour: 22 } );
         this.baseline[2] = this.today.clone().set( { month: 6, day: 1, hour: 22, minute: 30 } );
         
         this.baseline[3] = this.today.clone().set( { month: 6, day: 15 } )
         this.baseline[4] = this.today.clone().set( { month: 6, day: 15, hour: 6 } );
         this.baseline[5] = this.today.clone().set( { month: 6, day: 15, hour: 6, minute: 45 } );
       },
       
      '7/1 10 PM': {
        run: function() { this.date =  Date.parse('7/1 10 PM') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '07/01 10 PM': {
        run: function() { this.date =  Date.parse('07/01 10 PM') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '07/01 10 PM': {
        run: function() { this.date =  Date.parse('07/01 10 PM') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '7/1 10 PM': {
        run: function() { this.date =  Date.parse('7/1 10 PM') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },   
      '7/15 6 AM': {
        run: function() { this.date =  Date.parse('7/15 6 AM') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '07/15 6 AM': {
        run: function() { this.date =  Date.parse('07/15 6 AM') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '07/15 6 AM': {
        run: function() { this.date =  Date.parse('07/15 6 AM') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '7/15 6 AM': {
        run: function() { this.date =  Date.parse('7/15 6 AM') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '7/1 10pm': {
        run: function() { this.date =  Date.parse('7/1 10pm') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '07/01 10pm': {
        run: function() { this.date =  Date.parse('07/01 10pm') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '07/01 10pm': {
        run: function() { this.date =  Date.parse('07/01 10pm') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },
      '7/1 10pm': {
        run: function() { this.date =  Date.parse('7/1 10pm') },
        assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }
      },   
      '7/15 6am': {
        run: function() { this.date =  Date.parse('7/15 6am') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '07/15 6am': {
        run: function() { this.date =  Date.parse('07/15 6am') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '07/15 6am': {
        run: function() { this.date =  Date.parse('07/15 6am') },
        assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }
      },
      '7/15 6am': {
        run: function() { this.date =  Date.parse('7/15 6am') },
        assert: function() { return this.baseline[4].equals( this.date ) }
      },
      '7/1 10:30 PM': {
        run: function() { this.date =  Date.parse('7/1 10:30 PM') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '07/01 10:30 PM': {
        run: function() { this.date =  Date.parse('07/01 10:30 PM') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '07/01 10:30 PM': {
        run: function() { this.date =  Date.parse('07/01 10:30 PM') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '7/1 10:30 PM': {
        run: function() { this.date =  Date.parse('7/1 10:30 PM') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },   
      '7/15 6:45 AM': {
        run: function() { this.date =  Date.parse('7/15 6:45 AM') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '07/15 6:45 AM': {
        run: function() { this.date =  Date.parse('07/15 6:45 AM') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '07/15 6:45 AM': {
        run: function() { this.date =  Date.parse('07/15 6:45 AM') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '7/15 6:45 AM': {
        run: function() { this.date =  Date.parse('7/15 6:45 AM') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '7/1 10:30p': {
        run: function() { this.date =  Date.parse('7/1 10:30p') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '07/01 10:30p': {
        run: function() { this.date =  Date.parse('07/01 10:30p') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '07/01 10:30p': {
        run: function() { this.date =  Date.parse('07/01 10:30p') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },
      '7/1 10:30p': {
        run: function() { this.date =  Date.parse('7/1 10:30p') },
        assert: function() { return this.baseline[2].equals( this.date ) }
      },   
      '7/15 6:45a': {
        run: function() { this.date =  Date.parse('7/15 6:45a') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '07/15 6:45a': {
        run: function() { this.date =  Date.parse('07/15 6:45a') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '07/15 6:45a': {
        run: function() { this.date =  Date.parse('07/15 6:45a') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '7/15 6:45a': {
        run: function() { this.date =  Date.parse('7/15 6:45a') },
        assert: function() { return this.baseline[5].equals( this.date ) }
      },
      '1-Jul': {
        run: function() { this.date =  Date.parse('1-Jul') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },
      '1-July': {
        run: function() { this.date =  Date.parse('1-July') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },    
      '01-Jul': {
        run: function() { this.date =  Date.parse('01-Jul') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      }, 
      '01-July': {
        run: function() { this.date =  Date.parse('01-July') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },     
      '15-Jul': {
        run: function() { this.date =  Date.parse('15-Jul') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      },
      '15-July': {
        run: function() { this.date =  Date.parse('15-July') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      },  
  
  
      'July 1': {
        run: function() { this.date =  Date.parse('July 1') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },   
      'Jul 1': {
        run: function() { this.date =  Date.parse('Jul 1') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      }, 
      'July 01': {
        run: function() { this.date =  Date.parse('July 01') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },   
      'Jul 01': {
        run: function() { this.date =  Date.parse('Jul 01') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },      
      'July 15': {
        run: function() { this.date =  Date.parse('July 15') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      }, 
      'Jul 15': {
        run: function() { this.date =  Date.parse('Jul 15') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      },       
      
      
      'July 1st': {
        run: function() { this.date =  Date.parse('July 1st') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },   
      'July 2nd': {
        run: function() { this.date =  Date.parse('July 2nd') },
        assert: function() { return this.baseline[0].addDays(1).equals( this.date ) }
      },   
      'July 3rd': {
        run: function() { this.date =  Date.parse('July 3rd') },
        assert: function() { return this.baseline[0].addDays(2).equals( this.date ) }
      },   
      'July 4th': {
        run: function() { this.date =  Date.parse('July 4th') },
        assert: function() { return this.baseline[0].addDays(3).equals( this.date ) }
      }, 
      
      
      '7/1': {
        run: function() { this.date =  Date.parse('7/1') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      },
      '07/01': {
        run: function() { this.date =  Date.parse('07/01') },
        assert: function() { return this.baseline[0].equals( this.date ) }
      }, 
      '7/15': {
        run: function() { this.date =  Date.parse('7/15') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      },
      '07/15': {
        run: function() { this.date =  Date.parse('07/15') },
        assert: function() { return this.baseline[3].equals( this.date ) }
      }              
  
   },
    
  
  
     'No Day: Default To First Of Month': {
      setup: function() { 
        this.baseline = new Date(2008,6,1);
      },
      'Jan 2008': {
        run: function() { this.date =  Date.parse('Jan 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      },
      'January 2008': {
        run: function() { this.date =  Date.parse('January 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      },
      'Feb 2008': {
        run: function() { this.date =  Date.parse('Feb 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      },
       'February 2008': {
        run: function() { this.date =  Date.parse('February 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      },
       'Mar 2008': {
        run: function() { this.date =  Date.parse('Mar 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      },
       'March 2008': {
        run: function() { this.date =  Date.parse('March 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      },
       'Apr 2008': {
        run: function() { this.date =  Date.parse('Apr 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      },
       'April 2008': {
        run: function() { this.date =  Date.parse('April 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      },
       'May 2008': {
        run: function() { this.date =  Date.parse('May 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      },
       'Jun 2008': {
        run: function() { this.date =  Date.parse('Jun 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      },
       'June 2008': {
        run: function() { this.date =  Date.parse('June 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      },
       'Jul 2008': {
        run: function() { this.date =  Date.parse('Jul 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      },
       'July 2008': {
        run: function() { this.date =  Date.parse('July 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      },
       'Aug 2008': {
        run: function() { this.date =  Date.parse('Aug 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
       'August 2008': {
        run: function() { this.date =  Date.parse('August 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
       'Sep 2008': {
        run: function() { this.date =  Date.parse('Sep 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      },
       'Sept 2008': {
        run: function() { this.date =  Date.parse('Sept 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      },
       'September 2008': {
        run: function() { this.date =  Date.parse('September 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      },
       'Oct 2008': {
        run: function() { this.date =  Date.parse('Oct 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      },
       'October 2008': {
        run: function() { this.date =  Date.parse('October 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      },
       'Nov 2008': {
        run: function() { this.date =  Date.parse('November 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      },
       'November 2008': {
        run: function() { this.date =  Date.parse('November 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      },
       'Dec 2008': {
        run: function() { this.date =  Date.parse('Dec 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
       'December 2008': {
        run: function() { this.date =  Date.parse('December 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
      '1/2008': {
        run: function() { this.date =  Date.parse('1/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2/2008': {
        run: function() { this.date =  Date.parse('2/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '3/2008': {
        run: function() { this.date =  Date.parse('3/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '4/2008': {
        run: function() { this.date =  Date.parse('4/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '5/2008': {
        run: function() { this.date =  Date.parse('5/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '6/2008': {
        run: function() { this.date =  Date.parse('6/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '7/2008': {
        run: function() { this.date =  Date.parse('7/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '8/2008': {
        run: function() { this.date =  Date.parse('8/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '9/2008': {
        run: function() { this.date =  Date.parse('9/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '10/2008': {
        run: function() { this.date =  Date.parse('10/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '11/2008': {
        run: function() { this.date =  Date.parse('11/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '12/2008': {
        run: function() { this.date =  Date.parse('12/2008') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      }, 
  
   '1 2008': {
        run: function() { this.date =  Date.parse('1 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2 2008': {
        run: function() { this.date =  Date.parse('2 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '3 2008': {
        run: function() { this.date =  Date.parse('3 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '4 2008': {
        run: function() { this.date =  Date.parse('4 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '5 2008': {
        run: function() { this.date =  Date.parse('5 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '6 2008': {
        run: function() { this.date =  Date.parse('6 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '7 2008': {
        run: function() { this.date =  Date.parse('7 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '8 2008': {
        run: function() { this.date =  Date.parse('8 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '9 2008': {
        run: function() { this.date =  Date.parse('9 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '10 2008': {
        run: function() { this.date =  Date.parse('10 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '11 2008': {
        run: function() { this.date =  Date.parse('11 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '12 2008': {
        run: function() { this.date =  Date.parse('12 2008') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
      
    '1-2008': {
        run: function() { this.date =  Date.parse('1-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2-2008': {
        run: function() { this.date =  Date.parse('2-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '3-2008': {
        run: function() { this.date =  Date.parse('3-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '4-2008': {
        run: function() { this.date =  Date.parse('4-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '5-2008': {
        run: function() { this.date =  Date.parse('5-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '6-2008': {
        run: function() { this.date =  Date.parse('6-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '7-2008': {
        run: function() { this.date =  Date.parse('7-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '8-2008': {
        run: function() { this.date =  Date.parse('8-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '9-2008': {
        run: function() { this.date =  Date.parse('9-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '10-2008': {
        run: function() { this.date =  Date.parse('10-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '11-2008': {
        run: function() { this.date =  Date.parse('11-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '12-2008': {
        run: function() { this.date =  Date.parse('12-2008') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
         
         '2008/1': {
        run: function() { this.date =  Date.parse('2008/1') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2008/2': {
        run: function() { this.date =  Date.parse('2008/2') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '2008/3': {
        run: function() { this.date =  Date.parse('2008/3') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '2008/4': {
        run: function() { this.date =  Date.parse('2008/4') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '2008/5': {
        run: function() { this.date =  Date.parse('2008/5') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '2008/6': {
        run: function() { this.date =  Date.parse('2008/6') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '2008/7': {
        run: function() { this.date =  Date.parse('2008/7') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '2008/8': {
        run: function() { this.date =  Date.parse('2008/8') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '2008/9': {
        run: function() { this.date =  Date.parse('2008/9') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '2008/10': {
        run: function() { this.date =  Date.parse('2008/10') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '2008/11': {
        run: function() { this.date =  Date.parse('2008/11') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '2008/12': {
        run: function() { this.date =  Date.parse('2008/12') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
      
          
      '2008-1': {
        run: function() { this.date =  Date.parse('2008-1') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2008-2': {
        run: function() { this.date =  Date.parse('2008-2') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '2008-3': {
        run: function() { this.date =  Date.parse('2008-3') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '2008-4': {
        run: function() { this.date =  Date.parse('2008-4') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '2008-5': {
        run: function() { this.date =  Date.parse('2008-5') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '2008-6': {
        run: function() { this.date =  Date.parse('2008-6') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '2008-7': {
        run: function() { this.date =  Date.parse('2008-7') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '2008-8': {
        run: function() { this.date =  Date.parse('2008-8') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '2008-9': {
        run: function() { this.date =  Date.parse('2008-9') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '2008-10': {
        run: function() { this.date =  Date.parse('2008-10') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '2008-11': {
        run: function() { this.date =  Date.parse('2008-11') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '2008-12': {
        run: function() { this.date =  Date.parse('2008-12') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      },
      
         
      '2008 1': {
        run: function() { this.date =  Date.parse('2008 1') },
        assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }
      }, 
      '2008 2': {
        run: function() { this.date =  Date.parse('2008 2') },
        assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }
      }, 
      '2008 3': {
        run: function() { this.date =  Date.parse('2008 3') },
        assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }
      }, 
      '2008 4': {
        run: function() { this.date =  Date.parse('2008 4') },
        assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }
      }, 
      '2008 5': {
        run: function() { this.date =  Date.parse('2008 5') },
        assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }
      }, 
      '2008 6': {
        run: function() { this.date =  Date.parse('2008 6') },
        assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }
      }, 
      '2008 7': {
        run: function() { this.date =  Date.parse('2008 7') },
        assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }
      }, 
      '2008 8': {
        run: function() { this.date =  Date.parse('2008 8') },
        assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }
      },
      '2008 9': {
        run: function() { this.date =  Date.parse('2008 9') },
        assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }
      }, 
      '2008 10': {
        run: function() { this.date =  Date.parse('2008 10') },
        assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }
      }, 
      '2008 11': {
        run: function() { this.date =  Date.parse('2008 11') },
        assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }
      }, 
      '2008 12': {
        run: function() { this.date =  Date.parse('2008 12') },
        assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }
      }
    },  
    
    
      'No Year or Month': {
      setup: function() { 
        //default to current Year and Month
          this.baseline = new Date(2004,6,1);
          
          this.today = Date.today();
          this.now = new Date();
      },
      '1': {
        run: function() { },
        assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1')) }
      }, 
      '2': {
        run: function() { },
        assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2')) }
      }, 
      '3': {
        run: function() { },
        assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3')) }
      }, 
      '4': {
        run: function() { },
        assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4')) }
      }, 
      '5': {
        run: function() { },
        assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5')) }
      }, 
      '6': {
        run: function() { },
        assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6')) }
      }, 
      '7': {
        run: function() { },
        assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7')) }
      }, 
      '8': {
        run: function() { },
        assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8')) }
      }, 
      '9': {
        run: function() { },
        assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9')) }
      }, 
      '10': {
        run: function() { },
        assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10')) }
      }, 
      '11': {
        run: function() { },
        assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11')) }
      }, 
      '12': {
        run: function() { },
        assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12')) }
      }, 
      '13': {
        run: function() { },
        assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13')) }
      }, 
      '14': {
        run: function() { },
        assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14')) }
      }, 
      '15': {
        run: function() { },
        assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15')) }
      }, 
      '16': {
        run: function() { },
        assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16')) }
      }, 
      '17': {
        run: function() { },
        assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17')) }
      }, 
      '18': {
        run: function() { },
        assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18')) }
      }, 
      '19': {
        run: function() { },
        assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19')) }
      }, 
      '20': {
        run: function() { },
        assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20')) }
      }, 
      '21': {
        run: function() { },
        assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21')) }
      }, 
      '22': {
        run: function() { },
        assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22')) }
      }, 
      '23': {
        run: function() { },
        assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23')) }
      }, 
      '24': {
        run: function() { },
        assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24')) }
      },     
      '25': {
        run: function() { },
        assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25')) }
      }, 
      '26': {
        run: function() { },
        assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26')) }
      }, 
      '27': {
        run: function() { },
        assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27')) }
      }, 
      '28': {
        run: function() { },
        assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28')) }
      }, 
      
  	'29 : Returns null if current month does not have 29 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('29');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'30 : Returns null if current month does not have 30 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('30');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'31 : Returns null if current month does not have 31 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('31');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},	
  	'32 : Year 1932': {
      run: function() { },
  		assert: function() {
              return Date.today().set( { year: 1932 } ).equals( Date.parse('32') );
  		}
  	},
  	
  	
  	
       '1st': {
        run: function() { },
        assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1st')) }
      }, 
      '2nd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2nd')) }
      }, 
      '3rd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3rd')) }
      }, 
      '4th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4th')) }
      }, 
      '5th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5th')) }
      }, 
      '6th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6th')) }
      }, 
      '7th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7th')) }
      }, 
      '8th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8th')) }
      }, 
      '9th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9th')) }
      }, 
      '10th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10th')) }
      }, 
      '11th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11th')) }
      }, 
      '12th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12th')) }
      }, 
      '13th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13th')) }
      }, 
      '14th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14th')) }
      }, 
      '15th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15th')) }
      }, 
      '16th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16th')) }
      }, 
      '17th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17th')) }
      }, 
      '18th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18th')) }
      }, 
      '19th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19th')) }
      }, 
      '20th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20th')) }
      }, 
      '21st': {
        run: function() { },
        assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21st')) }
      }, 
      '22nd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22nd')) }
      }, 
      '23rd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23rd')) }
      }, 
      '24th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24th')) }
      },     
      '25th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25th')) }
      }, 
      '26th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26th')) }
      }, 
      '27th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27th')) }
      }, 
      '28th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28th')) }
      },
      
      
         
  	'29th : Returns null if current month does not have 29 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('29th');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'30th : Returns null if current month does not have 30 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('30th');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'31st : Returns null if current month does not have 31 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('31st');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},		
      '1 st': {
        run: function() { },
        assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1 st')) }
      }, 
      '2 nd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2 nd')) }
      }, 
      '3 rd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3 rd')) }
      }, 
      '4 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4 th')) }
      }, 
      '5 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5 th')) }
      }, 
      '6 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6 th')) }
      }, 
      '7 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7 th')) }
      }, 
      '8 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8 th')) }
      }, 
      '9 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9 th')) }
      }, 
      '10 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10 th')) }
      }, 
      '11 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11 th')) }
      }, 
      '12 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12 th')) }
      }, 
      '13 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13 th')) }
      }, 
      '14 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14 th')) }
      }, 
      '15 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15 th')) }
      }, 
      '16 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16 th')) }
      }, 
      '17 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17 th')) }
      }, 
      '18 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18 th')) }
      }, 
      '19 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19 th')) }
      }, 
      '20 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20 th')) }
      }, 
      '21 st': {
        run: function() { },
        assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21 st')) }
      }, 
      '22 nd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22 nd')) }
      }, 
      '23 rd': {
        run: function() { },
        assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23 rd')) }
      }, 
      '24 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24 th')) }
      },     
      '25 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25 th')) }
      }, 
      '26 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26 th')) }
      }, 
      '27 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27 th')) }
      }, 
      '28 th': {
        run: function() { },
        assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28 th')) }
      },
      
  	'29 th : Returns null if current month does not have 29 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('29 th');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'30 th : Returns null if current month does not have 30 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('30 th');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	},
  	'31 st : Returns null if current month does not have 31 days': {
      run: function() { },
  		assert: function() {
  		    this.date = Date.parse('31 st');
  		    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {
  		        return true;
  		    }
  		    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {
  		        return true;
  		    }
  		    return false;
  		}
  	}
    }
    
  });
  
  $(document).ready( function() { Date.Specification.validate().show() } );