summaryrefslogtreecommitdiff
path: root/lib/subunit/python/testtools/tests/test_content.py
blob: 11593620364be1fab2aedf5b2905fa67bada238b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Copyright (c) 2008 Jonathan M. Lange. See LICENSE for details.

import unittest
from testtools.content import Content, TracebackContent
from testtools.content_type import ContentType
from testtools.utils import _u
from testtools.tests.helpers import an_exc_info


def test_suite():
    from unittest import TestLoader
    return TestLoader().loadTestsFromName(__name__)


class TestContent(unittest.TestCase):

    def test___init___None_errors(self):
        self.assertRaises(ValueError, Content, None, None)
        self.assertRaises(ValueError, Content, None, lambda: ["traceback"])
        self.assertRaises(ValueError, Content,
            ContentType("text", "traceback"), None)

    def test___init___sets_ivars(self):
        content_type = ContentType("foo", "bar")
        content = Content(content_type, lambda: ["bytes"])
        self.assertEqual(content_type, content.content_type)
        self.assertEqual(["bytes"], list(content.iter_bytes()))

    def test___eq__(self):
        content_type = ContentType("foo", "bar")
        content1 = Content(content_type, lambda: ["bytes"])
        content2 = Content(content_type, lambda: ["bytes"])
        content3 = Content(content_type, lambda: ["by", "tes"])
        content4 = Content(content_type, lambda: ["by", "te"])
        content5 = Content(ContentType("f", "b"), lambda: ["by", "tes"])
        self.assertEqual(content1, content2)
        self.assertEqual(content1, content3)
        self.assertNotEqual(content1, content4)
        self.assertNotEqual(content1, content5)

    def test_iter_text_not_text_errors(self):
        content_type = ContentType("foo", "bar")
        content = Content(content_type, lambda: ["bytes"])
        self.assertRaises(ValueError, content.iter_text)

    def test_iter_text_decodes(self):
        content_type = ContentType("text", "strange", {"charset": "utf8"})
        content = Content(
            content_type, lambda: [_u("bytes\xea").encode("utf8")])
        self.assertEqual([_u("bytes\xea")], list(content.iter_text()))

    def test_iter_text_default_charset_iso_8859_1(self):
        content_type = ContentType("text", "strange")
        text = _u("bytes\xea")
        iso_version = text.encode("ISO-8859-1")
        content = Content(content_type, lambda: [iso_version])
        self.assertEqual([text], list(content.iter_text()))


class TestTracebackContent(unittest.TestCase):

    def test___init___None_errors(self):
        self.assertRaises(ValueError, TracebackContent, None, None)

    def test___init___sets_ivars(self):
        content = TracebackContent(an_exc_info, self)
        content_type = ContentType("text", "x-traceback",
            {"language": "python", "charset": "utf8"})
        self.assertEqual(content_type, content.content_type)
        result = unittest.TestResult()
        expected = result._exc_info_to_string(an_exc_info, self)
        self.assertEqual(expected, ''.join(list(content.iter_text())))