# -*- coding: utf-8 -*-
import unittest
import Python.Test as Test
from _compat import DictProxyType, long
class EnumTests(unittest.TestCase):
"""Test CLR enum support."""
def test_enum_standard_attrs(self):
"""Test standard enum attributes."""
from System import DayOfWeek
self.assertTrue(DayOfWeek.__name__ == 'DayOfWeek')
self.assertTrue(DayOfWeek.__module__ == 'System')
self.assertTrue(isinstance(DayOfWeek.__dict__, DictProxyType))
self.assertTrue(DayOfWeek.__doc__ is None)
def test_enum_get_member(self):
"""Test access to enum members."""
from System import DayOfWeek
self.assertTrue(DayOfWeek.Sunday == 0)
self.assertTrue(DayOfWeek.Monday == 1)
self.assertTrue(DayOfWeek.Tuesday == 2)
self.assertTrue(DayOfWeek.Wednesday == 3)
self.assertTrue(DayOfWeek.Thursday == 4)
self.assertTrue(DayOfWeek.Friday == 5)
self.assertTrue(DayOfWeek.Saturday == 6)
def test_byte_enum(self):
"""Test byte enum."""
self.assertTrue(Test.ByteEnum.Zero == 0)
self.assertTrue(Test.ByteEnum.One == 1)
self.assertTrue(Test.ByteEnum.Two == 2)
def test_sbyte_enum(self):
"""Test sbyte enum."""
self.assertTrue(Test.SByteEnum.Zero == 0)
self.assertTrue(Test.SByteEnum.One == 1)
self.assertTrue(Test.SByteEnum.Two == 2)
def test_short_enum(self):
"""Test short enum."""
self.assertTrue(Test.ShortEnum.Zero == 0)
self.assertTrue(Test.ShortEnum.One == 1)
self.assertTrue(Test.ShortEnum.Two == 2)
def test_ushort_enum(self):
"""Test ushort enum."""
self.assertTrue(Test.UShortEnum.Zero == 0)
self.assertTrue(Test.UShortEnum.One == 1)
self.assertTrue(Test.UShortEnum.Two == 2)
def test_int_enum(self):
"""Test int enum."""
self.assertTrue(Test.IntEnum.Zero == 0)
self.assertTrue(Test.IntEnum.One == 1)
self.assertTrue(Test.IntEnum.Two == 2)
def test_uint_enum(self):
"""Test uint enum."""
self.assertTrue(Test.UIntEnum.Zero == long(0))
self.assertTrue(Test.UIntEnum.One == long(1))
self.assertTrue(Test.UIntEnum.Two == long(2))
def test_long_enum(self):
"""Test long enum."""
self.assertTrue(Test.LongEnum.Zero == long(0))
self.assertTrue(Test.LongEnum.One == long(1))
self.assertTrue(Test.LongEnum.Two == long(2))
def test_ulong_enum(self):
"""Test ulong enum."""
self.assertTrue(Test.ULongEnum.Zero == long(0))
self.assertTrue(Test.ULongEnum.One == long(1))
self.assertTrue(Test.ULongEnum.Two == long(2))
def test_instantiate_enum_fails(self):
"""Test that instantiation of an enum class fails."""
from System import DayOfWeek
with self.assertRaises(TypeError):
_ = DayOfWeek()
def test_subclass_enum_fails(self):
"""Test that subclassing of an enumeration fails."""
from System import DayOfWeek
with self.assertRaises(TypeError):
class Boom(DayOfWeek):
pass
_ = Boom
def test_enum_set_member_fails(self):
"""Test that setattr operations on enumerations fail."""
from System import DayOfWeek
with self.assertRaises(TypeError):
DayOfWeek.Sunday = 13
with self.assertRaises(TypeError):
del DayOfWeek.Sunday
def test_enum_with_flags_attr_conversion(self):
"""Test enumeration conversion with FlagsAttribute set."""
# This works because the FlagsField enum has FlagsAttribute.
Test.FieldTest().FlagsField = 99
# This should fail because our test enum doesn't have it.
with self.assertRaises(ValueError):
Test.FieldTest().EnumField = 99
def test_enum_conversion(self):
"""Test enumeration conversion."""
ob = Test.FieldTest()
self.assertTrue(ob.EnumField == 0)
ob.EnumField = Test.ShortEnum.One
self.assertTrue(ob.EnumField == 1)
with self.assertRaises(ValueError):
Test.FieldTest().EnumField = 20
with self.assertRaises(OverflowError):
Test.FieldTest().EnumField = 100000
with self.assertRaises(TypeError):
Test.FieldTest().EnumField = "str"
def test_suite():
return unittest.makeSuite(EnumTests)