| Current File : /home/jvzmxxx/wiki/extensions/EventLogging/server/tests/test_factory.py |
# -*- coding: utf-8 -*-
"""
eventlogging unit tests
~~~~~~~~~~~~~~~~~~~~~~~
This module contains tests for :module:`eventlogging.factory`.
"""
from __future__ import unicode_literals
import unittest
import eventlogging
import eventlogging.factory
def fail_at_third_yield(uri, **kwargs):
yield "yield #1"
yield "yield #2"
raise RuntimeError("@yield #3")
class ListWriterStub:
def __init__(self):
self.is_writer_closed = False
self.values = []
def get_writer(self):
def writer(uri, **kwargs):
try:
while 1:
self.values.append((yield))
except GeneratorExit:
self.is_writer_closed = True
return writer
class FactoryTestCase(unittest.TestCase):
"""Test case for URI-based reader/writer factories."""
def test_drive_closes_writer_upon_reader_exception(self):
eventlogging.reads('fail-at-third-yield')(fail_at_third_yield)
list_writer_stub = ListWriterStub()
eventlogging.writes('echo-writer')(list_writer_stub.get_writer())
try:
eventlogging.drive('fail-at-third-yield://', 'echo-writer://')
self.fail("No exception got thrown")
except RuntimeError as e:
self.assertEqual(list_writer_stub.values, ["yield #1", "yield #2"],
"Yielded elements do not match")
self.assertEqual(str(e), "@yield #3",
"Unknown RuntimeError raised")
self.assertTrue(list_writer_stub.is_writer_closed,
"Writer has not been closed")
finally:
eventlogging.factory._writers.pop('echo-writer')
eventlogging.factory._readers.pop('fail-at-third-yield')
def test_cast_string(self):
"""``cast_string`` casts builtin looking strings to builtin types."""
self.assertEqual(
"string",
eventlogging.factory.cast_string("string")
)
self.assertEqual(
u"string",
eventlogging.factory.cast_string(u"string")
)
self.assertEqual(
1.1,
eventlogging.factory.cast_string("1.1")
)
self.assertEqual(
10,
eventlogging.factory.cast_string("10")
)
self.assertEqual(
False,
eventlogging.factory.cast_string("False")
)
self.assertEqual(
True,
eventlogging.factory.cast_string("True")
)