# Copyright (c) 2017 Leo Hemsted
# 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 = '"foo" "bar"'
E = '“foo” “bar”'
output = self._p([CLI_SCRIPT], T)
self.assertEquals(output, E)
E = '"foo" “bar”'
output = self._p([CLI_SCRIPT, '--skip', 'a'], T)
self.assertEquals(output, E)
E = '“foo” "bar"'
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 = '“foobar”'
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)