summaryrefslogtreecommitdiff
path: root/tests/test_cli.py
blob: 263f319457eb662215d9c60c7e45c4af1488ea37 (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
73
74
75
76
77
78
79
80
81
82
83
84
# Copyright (c) 2013 Yu-Jie Lin
# Licensed under the BSD License, for detailed license information, see COPYING

from __future__ import unicode_literals

import os
import tempfile
import unittest
from subprocess import PIPE, Popen

CLI_SCRIPT = './smartypants'


class TestCLI(unittest.TestCase):

    @staticmethod
    def _p(args, T=None):

        if T:
            T = T.encode()

        stdin = PIPE if T else None
        p = Popen(args, stdin=stdin, stdout=PIPE)
        output = p.communicate(input=T)[0]

        if isinstance(output, bytes):
            output = output.decode()  # Python 3

        return output

    def test_pipe(self):

        T = '"foobar"'
        E = '“foobar”'

        output = self._p([CLI_SCRIPT], T)
        self.assertEquals(output, E)

    def test_pipe_attr(self):

        T = """"foo" ``bar''"""

        E = T
        output = self._p([CLI_SCRIPT, '--attr', '0'], T)
        self.assertEquals(output, E)

        E = """"foo" “bar”"""
        output = self._p([CLI_SCRIPT, '--attr', 'b'], T)
        self.assertEquals(output, E)

    def test_skipped_elements(self):

        T = '<a>"foo"</a> <b>"bar"</b>'

        E = '<a>&#8220;foo&#8221;</a> <b>&#8220;bar&#8221;</b>'
        output = self._p([CLI_SCRIPT], T)
        self.assertEquals(output, E)

        E = '<a>"foo"</a> <b>&#8220;bar&#8221;</b>'
        output = self._p([CLI_SCRIPT, '--skip', 'a'], T)
        self.assertEquals(output, E)

        E = '<a>&#8220;foo&#8221;</a> <b>"bar"</b>'
        output = self._p([CLI_SCRIPT, '--skip', 'b'], T)
        self.assertEquals(output, E)

        E = T
        output = self._p([CLI_SCRIPT, '--skip', 'a,b'], T)
        self.assertEquals(output, E)

    def test_file(self):

        T = '"foobar"'
        E = '&#8220;foobar&#8221;'

        F = tempfile.mkstemp()[1]
        try:
            with open(F, 'w') as f:
                f.write(T)

            output = self._p([CLI_SCRIPT, F])
        finally:
            os.remove(F)
        self.assertEquals(output, E)