Example #1
0
    def test_040_registered_attribute_simple_class(self, clean_Date):
        Date.register_new_calendar("test_1", ExampleTestCalendar)

        # Date attribute type and metaclass are correct
        assert Date.test_1.__name__ == "ExampleTestCalendarInDate"
        assert type(Date.test_1).__name__ == "ModifiedClass"
        assert issubclass(Date.test_1, ExampleTestCalendar)

        # constructed date type and value are is correct
        d1a = Date.test_1(100, 4)
        assert type(d1a) == Date
        assert d1a.day_count == 697

        # new attribute on date instance, type and value are correct
        d1b = Date(1000)
        assert isinstance(d1b.test_1, ExampleTestCalendar)
        assert type(d1b.test_1).__name__ == "ExampleTestCalendarInDate"
        assert type(d1b.test_1.__class__).__name__ == "ModifiedClass"
        assert d1b.test_1.week == 143
        assert d1b.test_1.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d1c = Date.gregorian(100, 2, 3)
        assert isinstance(d1c.test_1, ExampleTestCalendar)
        assert type(d1c.test_1).__name__ == "ExampleTestCalendarInDate"
        assert type(d1c.test_1.__class__).__name__ == "ModifiedClass"
        assert d1c.test_1.week == 5171
        assert d1c.test_1.day == 3
Example #2
0
    def test_040_registered_attribute_simple_class(self, clean_Date):
        Date.register_new_calendar('test_1', ExampleTestCalendar)

        # Date attribute type and metaclass are correct
        assert Date.test_1.__name__ == 'ExampleTestCalendarInDate'
        assert type(Date.test_1).__name__ == 'ModifiedClass'
        assert issubclass(Date.test_1, ExampleTestCalendar)

        # constructed date type and value are is correct
        d1a = Date.test_1(100, 4)
        assert type(d1a) == Date
        assert d1a.day_count == 697

        # new attribute on date instance, type and value are correct
        d1b = Date(1000)
        assert isinstance(d1b.test_1, ExampleTestCalendar)
        assert type(d1b.test_1).__name__ == 'ExampleTestCalendarInDate'
        assert type(d1b.test_1.__class__).__name__ == 'ModifiedClass'
        assert d1b.test_1.week == 143
        assert d1b.test_1.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d1c = Date.gregorian(100, 2, 3)
        assert isinstance(d1c.test_1, ExampleTestCalendar)
        assert type(d1c.test_1).__name__ == 'ExampleTestCalendarInDate'
        assert type(d1c.test_1.__class__).__name__ == 'ModifiedClass'
        assert d1c.test_1.week == 5171
        assert d1c.test_1.day == 3
Example #3
0
 def test_900_avoid_date_override(self):
     d = Date.gregorian(1, 1, 1)
     # I do not want an instance of Date created through a Gregorian to have its static methods
     # One of the implementation I used had this error and I want to avoid it
     with pytest.raises(AttributeError):
         getattr(d, "is_leap_year")
     with pytest.raises(AttributeError):
         d.is_leap_year
Example #4
0
 def test_900_avoid_date_override(self):
     d = Date.gregorian(1, 1, 1)
     # I do not want an instance of Date created through a Gregorian to have its static methods
     # One of the implementation I used had this error and I want to avoid it
     with pytest.raises(AttributeError):
         getattr(d, 'is_leap_year')
     with pytest.raises(AttributeError):
         d.is_leap_year
Example #5
0
    def test_046_registered_attribute_class_with_static_methods(
            self, clean_Date):
        class ExampleTestCalendar3(ExampleTestCalendar):
            @staticmethod
            def is_odd(number):
                return (number % 2) == 1

        Date.register_new_calendar("test_3", ExampleTestCalendar3)

        # Date attribute type and metaclass are correct
        assert Date.test_3.__name__ == "ExampleTestCalendar3InDate"
        assert type(Date.test_3).__name__ == "ModifiedClass"
        assert issubclass(Date.test_3, ExampleTestCalendar)

        # constructed date type and value are is correct
        d3a = Date.test_3(100, 4)
        assert type(d3a) == Date
        assert d3a.day_count == 697

        # new attribute on date instance, type and value are correct
        d3b = Date(1000)
        assert isinstance(d3b.test_3, ExampleTestCalendar3)
        assert type(d3b.test_3).__name__ == "ExampleTestCalendar3InDate"
        assert type(d3b.test_3.__class__).__name__ == "ModifiedClass"
        assert d3b.test_3.week == 143
        assert d3b.test_3.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d3c = Date.gregorian(100, 2, 3)
        assert isinstance(d3c.test_3, ExampleTestCalendar3)
        assert type(d3c.test_3).__name__ == "ExampleTestCalendar3InDate"
        assert type(d3c.test_3.__class__).__name__ == "ModifiedClass"
        assert d3c.test_3.week == 5171
        assert d3c.test_3.day == 3

        # static method can be reached on the class and on all types of instance
        assert Date.test_3.is_odd(3)
        assert not Date.test_3.is_odd(4)
        assert d3a.test_3.is_odd(3)
        assert not d3a.test_3.is_odd(4)
        assert d3b.test_3.is_odd(3)
        assert not d3b.test_3.is_odd(4)
        assert d3c.test_3.is_odd(3)
        assert not d3c.test_3.is_odd(4)
Example #6
0
    def test_046_registered_attribute_class_with_static_methods(self, clean_Date):
        class ExampleTestCalendar3(ExampleTestCalendar):
            @staticmethod
            def is_odd(number):
                return (number % 2) == 1

        Date.register_new_calendar('test_3', ExampleTestCalendar3)

        # Date attribute type and metaclass are correct
        assert Date.test_3.__name__ == 'ExampleTestCalendar3InDate'
        assert type(Date.test_3).__name__ == 'ModifiedClass'
        assert issubclass(Date.test_3, ExampleTestCalendar)

        # constructed date type and value are is correct
        d3a = Date.test_3(100, 4)
        assert type(d3a) == Date
        assert d3a.day_count == 697

        # new attribute on date instance, type and value are correct
        d3b = Date(1000)
        assert isinstance(d3b.test_3, ExampleTestCalendar3)
        assert type(d3b.test_3).__name__ == 'ExampleTestCalendar3InDate'
        assert type(d3b.test_3.__class__).__name__ == 'ModifiedClass'
        assert d3b.test_3.week == 143
        assert d3b.test_3.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d3c = Date.gregorian(100, 2, 3)
        assert isinstance(d3c.test_3, ExampleTestCalendar3)
        assert type(d3c.test_3).__name__ == 'ExampleTestCalendar3InDate'
        assert type(d3c.test_3.__class__).__name__ == 'ModifiedClass'
        assert d3c.test_3.week == 5171
        assert d3c.test_3.day == 3

        # static method can be reached on the class and on all types of instance
        assert Date.test_3.is_odd(3)
        assert not Date.test_3.is_odd(4)
        assert d3a.test_3.is_odd(3)
        assert not d3a.test_3.is_odd(4)
        assert d3b.test_3.is_odd(3)
        assert not d3b.test_3.is_odd(4)
        assert d3c.test_3.is_odd(3)
        assert not d3c.test_3.is_odd(4)
Example #7
0
 def test_100_date_has_attributes_but_instance_not(self):
     # the date class aways has a registered attribute
     assert hasattr(Date, "gregorian")
     assert Date.gregorian
     # an instance created with another calendar or by Date does not have
     #   the attribute; it is instead is reachable via the Date class
     d1 = Date(4)
     with pytest.raises(KeyError):
         d1.__dict__["gregorian"]
     assert hasattr(d1, "gregorian")
     d1.gregorian
     d2 = Date.iso(3, 4, 5)
     with pytest.raises(KeyError):
         d2.__dict__["gregorian"]
     assert hasattr(d2, "gregorian")
     d2.gregorian
     # a Date instance created via the calendar does have the same attribute
     d3 = Date.gregorian(3, 4, 5)
     assert hasattr(d3, "gregorian")
     d3.gregorian
Example #8
0
 def test_100_date_has_attributes_but_instance_not(self):
     # the date class aways has a registered attribute
     assert hasattr(Date, 'gregorian')
     assert Date.gregorian
     # an instance created with another calendar or by Date does not have
     #   the attribute; it is instead is reachable via the Date class
     d1 = Date(4)
     with pytest.raises(KeyError):
         d1.__dict__['gregorian']
     assert hasattr(d1, 'gregorian')
     d1.gregorian
     d2 = Date.iso(3, 4, 5)
     with pytest.raises(KeyError):
         d2.__dict__['gregorian']
     assert hasattr(d2, 'gregorian')
     d2.gregorian
     # a Date instance created via the calendar does have the same attribute
     d3 = Date.gregorian(3, 4, 5)
     assert hasattr(d3, 'gregorian')
     d3.gregorian
Example #9
0
    def test_043_registered_attribute_class_with_other_constructors(
            self, clean_Date):
        class ExampleTestCalendar2(ExampleTestCalendar):
            @classmethod
            def with_thousands(cls, thousands, week, day):
                return cls(1000 * thousands + week, day)

        Date.register_new_calendar("test_2", ExampleTestCalendar2)

        # Date attribute type and metaclass are correct
        assert Date.test_2.__name__ == "ExampleTestCalendar2InDate"
        assert type(Date.test_2).__name__ == "ModifiedClass"
        assert issubclass(Date.test_2, ExampleTestCalendar)

        # constructed date type and value are is correct
        d2a = Date.test_2(100, 4)
        assert type(d2a) == Date
        assert d2a.day_count == 697
        d2d = Date.test_2.with_thousands(2, 3, 4)
        assert type(d2d) == Date
        assert d2d.day_count == 14018

        # new attribute on date instance, type and value are correct
        d2b = Date(1000)
        assert isinstance(d2b.test_2, ExampleTestCalendar2)
        assert type(d2b.test_2).__name__ == "ExampleTestCalendar2InDate"
        assert type(d2b.test_2.__class__).__name__ == "ModifiedClass"
        assert d2b.test_2.week == 143
        assert d2b.test_2.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d2c = Date.gregorian(100, 2, 3)
        assert isinstance(d2c.test_2, ExampleTestCalendar2)
        assert type(d2c.test_2).__name__ == "ExampleTestCalendar2InDate"
        assert type(d2c.test_2.__class__).__name__ == "ModifiedClass"
        assert d2c.test_2.week == 5171
        assert d2c.test_2.day == 3
Example #10
0
    def test_043_registered_attribute_class_with_other_constructors(self, clean_Date):
        class ExampleTestCalendar2(ExampleTestCalendar):
            @classmethod
            def with_thousands(cls, thousands, week, day):
                return cls(1000 * thousands + week, day)

        Date.register_new_calendar('test_2', ExampleTestCalendar2)

        # Date attribute type and metaclass are correct
        assert Date.test_2.__name__ == 'ExampleTestCalendar2InDate'
        assert type(Date.test_2).__name__ == 'ModifiedClass'
        assert issubclass(Date.test_2, ExampleTestCalendar)

        # constructed date type and value are is correct
        d2a = Date.test_2(100, 4)
        assert type(d2a) == Date
        assert d2a.day_count == 697
        d2d = Date.test_2.with_thousands(2, 3, 4)
        assert type(d2d) == Date
        assert d2d.day_count == 14018

        # new attribute on date instance, type and value are correct
        d2b = Date(1000)
        assert isinstance(d2b.test_2, ExampleTestCalendar2)
        assert type(d2b.test_2).__name__ == 'ExampleTestCalendar2InDate'
        assert type(d2b.test_2.__class__).__name__ == 'ModifiedClass'
        assert d2b.test_2.week == 143
        assert d2b.test_2.day == 6

        # new attribute on date instance build by another calendar, type and value are correct
        d2c = Date.gregorian(100, 2, 3)
        assert isinstance(d2c.test_2, ExampleTestCalendar2)
        assert type(d2c.test_2).__name__ == 'ExampleTestCalendar2InDate'
        assert type(d2c.test_2.__class__).__name__ == 'ModifiedClass'
        assert d2c.test_2.week == 5171
        assert d2c.test_2.day == 3