def setUp(self):
     self.period_length = PeriodLength()
     self.month = Month()
     self.year = Year()
     
     now = datetime.now()
     self.now = now
     
     self.month_beginning = datetime(now.year, now.month, 1)
     self.month_end = datetime(now.year, now.month, monthrange(now.year, now.month)[1])
     self.next_month = datetime(now.year, now.month + 1, 1)
     self.previous_month = datetime(now.year, now.month - 1, 1)
     
     self.year_beginning = datetime(now.year, 1, 1)
     self.year_end = datetime(now.year, 12, 31)
     self.next_year = datetime(now.year + 1, now.month, 1)
     self.previous_year = datetime(now.year - 1, now.month, 1)
class PeriodLengthTests(TestCase):
    """
    Test for all PeriodLength subclasses.
    """
    
    def setUp(self):
        self.period_length = PeriodLength()
        self.month = Month()
        self.year = Year()
        
        now = datetime.now()
        self.now = now
        
        self.month_beginning = datetime(now.year, now.month, 1)
        self.month_end = datetime(now.year, now.month, monthrange(now.year, now.month)[1])
        self.next_month = datetime(now.year, now.month + 1, 1)
        self.previous_month = datetime(now.year, now.month - 1, 1)
        
        self.year_beginning = datetime(now.year, 1, 1)
        self.year_end = datetime(now.year, 12, 31)
        self.next_year = datetime(now.year + 1, now.month, 1)
        self.previous_year = datetime(now.year - 1, now.month, 1)
    
    def test_period_length(self):
        now = datetime.now()
        try:
            self.period_length.current_period_start_date()
            assert(False)
        except NotImplementedError:
            assert(True)
        
        try:
            self.period_length.current_period_end_date()
            assert(False)
        except NotImplementedError:
            assert(True)
        
        try:
            self.period_length.in_current_period(now)
            assert(False)
        except NotImplementedError:
            assert(True)
    
    def test_month(self):
        assert(self.month.current_period_start_date == self.month_beginning)
        assert(self.month.current_period_end_date == self.month_end)
        
        assert(self.month.in_current_period(self.now))
        assert(self.month.in_current_period(self.month_end))
        assert(self.month.in_current_period(self.month_beginning))
        assert(self.month.in_current_period(self.next_month) == False)
        assert(self.month.in_current_period(self.previous_month) == False)
    
    def test_year(self):
        assert(self.year.current_period_start_date == self.year_beginning)
        assert(self.year.current_period_end_date == self.year_end)
        
        assert(self.year.in_current_period(self.now))
        assert(self.year.in_current_period(self.year_end))
        assert(self.year.in_current_period(self.year_beginning))
        assert(self.year.in_current_period(self.next_year) == False)
        assert(self.year.in_current_period(self.previous_year) == False)