import unittest import re from mongoengine.base.utils import LazyRegexCompiler signal_output = [] class LazyRegexCompilerTest(unittest.TestCase): def test_lazy_regex_compiler_verify_laziness_of_descriptor(self): class UserEmail(object): EMAIL_REGEX = LazyRegexCompiler('@', flags=32) descriptor = UserEmail.__dict__['EMAIL_REGEX'] self.assertIsNone(descriptor._compiled_regex) regex = UserEmail.EMAIL_REGEX self.assertEqual(regex, re.compile('@', flags=32)) self.assertEqual(regex.search('user@domain.com').group(), '@') user_email = UserEmail() self.assertIs(user_email.EMAIL_REGEX, UserEmail.EMAIL_REGEX) def test_lazy_regex_compiler_verify_cannot_set_descriptor_on_instance(self): class UserEmail(object): EMAIL_REGEX = LazyRegexCompiler('@') user_email = UserEmail() with self.assertRaises(AttributeError): user_email.EMAIL_REGEX = re.compile('@') def test_lazy_regex_compiler_verify_can_override_class_attr(self): class UserEmail(object): EMAIL_REGEX = LazyRegexCompiler('@') UserEmail.EMAIL_REGEX = re.compile('cookies') self.assertEqual(UserEmail.EMAIL_REGEX.search('Cake & cookies').group(), 'cookies')