root/bitstructures/trunk/substructure/tests.py

Revision 42, 6.4 kB (checked in by simon, 12 months ago)

implemented syntax highlighting for codeblocks

Line 
1from bitstructures.substructure.codeblocks import MarkdownLine, MarkdownCodeblocksParser, is_codeblock_header_field, get_field_name, get_field_value
2import unittest
3
4class MarkdownLineTest(unittest.TestCase):
5    def setUp(self):
6        self.empty = MarkdownLine('')
7        self.foo_bar = MarkdownLine('    foo:bar')
8        self.foo_bar_spaces = MarkdownLine('    foo : bar')
9        self.foo_bar_newline = MarkdownLine('    foo:bar\n')
10
11    def test_is_blank(self):
12        self.assert_(self.empty.is_blank())
13        self.assert_(MarkdownLine(' ').is_blank())
14        self.assert_(MarkdownLine('\t').is_blank())
15        self.assert_(MarkdownLine('\n').is_blank())
16        self.assert_(MarkdownLine(' \n').is_blank())
17        self.assert_(MarkdownLine('\t\n').is_blank())
18
19    def test_is_indented(self):
20        self.assert_(MarkdownLine('    code').is_indented())
21        self.assert_(MarkdownLine('     code').is_indented())
22
23    def test_codeblock_header_field(self):
24        self.assert_(not is_codeblock_header_field(self.empty))
25        self.assert_(not is_codeblock_header_field(MarkdownLine('foo')))
26        self.assert_(not is_codeblock_header_field(MarkdownLine('foo:bar')))
27        self.assert_(not is_codeblock_header_field(MarkdownLine('    foo')))
28        self.assert_(not is_codeblock_header_field(MarkdownLine('    :')))
29        self.assert_(not is_codeblock_header_field(MarkdownLine('    :foo')))
30        self.assert_(is_codeblock_header_field(self.foo_bar))
31        self.assertEqual('foo', get_field_name(self.foo_bar))
32        self.assertEqual('bar', get_field_value(self.foo_bar))
33        self.assert_(is_codeblock_header_field(self.foo_bar_spaces))
34        self.assertEqual('foo', get_field_name(self.foo_bar_spaces))
35        self.assertEqual('bar', get_field_value(self.foo_bar_spaces))
36        self.assert_(is_codeblock_header_field(self.foo_bar_newline))
37        self.assertEqual('foo', get_field_name(self.foo_bar_newline))
38        self.assertEqual('bar', get_field_value(self.foo_bar_newline))
39
40class MarkdownCodeblocksParserTest(unittest.TestCase):
41    def setUp(self):
42        self.parser = MarkdownCodeblocksParser()
43        self.two_line = '''    line1
44    line2'''
45        self.text_code_text = '''text
46
47    code
48
49text'''
50        self.code_text_code = '''    code1
51
52text
53
54    code2\n'''
55        self.code_text_code_no_blank_lines = '''    code1
56text
57    code2'''
58        self.with_content_type = '''    Content-Type: text/x-python
59    line2'''
60
61    def test_get_codeblock_on_empty(self):
62        self.assertEqual(None, self.parser.get_codeblock('', 1))
63
64    def test_get_codeblock_no_codeblocks(self):
65        self.assertEqual(None, self.parser.get_codeblock('foo', 1))
66
67    def test_get_codeblock_n_out_of_range(self):
68        self.assertEqual(None, self.parser.get_codeblock('', 0))
69        self.assertEqual(None, self.parser.get_codeblock('', -1))
70        self.assertEqual(None, self.parser.get_codeblock('', 1))
71        self.assertEqual(None, self.parser.get_codeblock('foo', 0))
72        self.assertEqual(None, self.parser.get_codeblock('foo', -1))
73        self.assertEqual(None, self.parser.get_codeblock('foo', 1))
74        self.assertEqual(None, self.parser.get_codeblock('    foo', 0))
75        self.assertEqual(None, self.parser.get_codeblock('    foo', -1))
76        self.assertEqual(None, self.parser.get_codeblock('    foo', 2))
77
78    def test_get_codeblock(self):
79        self.assertEqual('    foo', self.parser.get_codeblock('    foo', 1).get_text())
80        self.assertEqual('foo', self.parser.get_codeblock('    foo', 1).get_code())
81        self.assertEqual(self.two_line,
82            self.parser.get_codeblock(self.two_line, 1).get_text())
83        expect_twoline = '''line1
84line2'''
85        self.assertEqual(expect_twoline,
86            self.parser.get_codeblock(self.two_line, 1).get_code())
87        self.assertEqual('    code\n\n',
88            self.parser.get_codeblock(self.text_code_text, 1).get_text())
89        self.assertEqual('code\n\n',
90            self.parser.get_codeblock(self.text_code_text, 1).get_code())
91        self.assertEqual('    code1\n\n',
92            self.parser.get_codeblock(self.code_text_code, 1).get_text())
93        self.assertEqual('code1\n\n',
94            self.parser.get_codeblock(self.code_text_code, 1).get_code())
95        self.assertEqual('    code2\n',
96            self.parser.get_codeblock(self.code_text_code, 2).get_text())
97        self.assertEqual('code2\n',
98            self.parser.get_codeblock(self.code_text_code, 2).get_code())
99        self.assertEqual('    code1\n',
100            self.parser.get_codeblock(self.code_text_code_no_blank_lines, 1).get_text())
101        self.assertEqual('code1\n',
102            self.parser.get_codeblock(self.code_text_code_no_blank_lines, 1).get_code())
103        self.assertEqual('    code2',
104            self.parser.get_codeblock(self.code_text_code_no_blank_lines, 2).get_text())
105        self.assertEqual('code2',
106            self.parser.get_codeblock(self.code_text_code_no_blank_lines, 2).get_code())
107
108    def test_get_codeblock_with_content_type(self):
109        self.assertEqual('text/x-python',
110            self.parser.get_codeblock(self.with_content_type, 1).content_type)
111        self.assertEqual('    line2',
112            self.parser.get_codeblock(self.with_content_type, 1).get_text())
113        self.assertEqual('line2',
114            self.parser.get_codeblock(self.with_content_type, 1).get_code())
115
116    def test_parse_text_code_text(self):
117        sections = self.parser.parse(self.text_code_text)
118        self.assertEqual(3, len(sections))
119        self.assert_(not sections[0].is_codeblock())
120        self.assertEqual('text\n\n', sections[0].get_text())
121        self.assert_(sections[1].is_codeblock())
122        self.assertEqual('    code\n\n', sections[1].get_text())
123        self.assertEqual('code\n\n', sections[1].get_code())
124        self.assert_(not sections[2].is_codeblock())
125        self.assertEqual('text', sections[2].get_text())
126
127    def test_parse_code_text_code(self):
128        sections = self.parser.parse(self.code_text_code)
129        self.assertEqual(3, len(sections))
130        self.assert_(sections[0].is_codeblock())
131        self.assertEqual('    code1\n\n', sections[0].get_text())
132        self.assertEqual('code1\n\n', sections[0].get_code())
133        self.assert_(not sections[1].is_codeblock())
134        self.assertEqual('text\n\n', sections[1].get_text())
135        self.assert_(sections[2].is_codeblock())
136        self.assertEqual('    code2\n', sections[2].get_text())
137        self.assertEqual('code2\n', sections[2].get_code())
Note: See TracBrowser for help on using the browser.