mirror of
https://github.com/google/pebble.git
synced 2025-03-20 19:01:21 +00:00
96 lines
3.4 KiB
Python
96 lines
3.4 KiB
Python
import os
|
|
import tempfile
|
|
import unittest
|
|
import sys
|
|
import argparse
|
|
|
|
from pblconvert.pblconvert import parse_args
|
|
from pblconvert import pblconvert
|
|
|
|
class FakeFile():
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
class FakeFileType(object):
|
|
def __init__(self, mode='r', bufsize=-1):
|
|
self._mode = mode
|
|
self._bufsize = bufsize
|
|
|
|
def __call__(self, string):
|
|
# the special argument "-" means sys.std{in,out}
|
|
if string == '-':
|
|
if 'r' in self._mode:
|
|
return sys.stdin
|
|
elif 'w' in self._mode:
|
|
return sys.stdout
|
|
else:
|
|
msg = _('argument "-" with mode %r') % self._mode
|
|
raise ValueError(msg)
|
|
|
|
return FakeFile(string)
|
|
|
|
class ParseArgsTests(unittest.TestCase):
|
|
def fake_path_exists(self, path):
|
|
if path in self.files:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def setUp(self):
|
|
self.files = []
|
|
argparse.FileType = FakeFileType
|
|
os.path.exists = self.fake_path_exists
|
|
self.files.append("temp.svg")
|
|
|
|
def test_requires_in_file(self):
|
|
with self.assertRaises(SystemExit):
|
|
parse_args(["--outformat", "pdc"])
|
|
|
|
def test_outfile_defaults_to_stdout(self):
|
|
parsed = parse_args(["-i", "-", "--outformat", "pdc"])
|
|
self.assertEqual(parsed.infile, sys.stdin)
|
|
self.assertEqual(parsed.outfile, sys.stdout)
|
|
|
|
def test_outfile_defaults_to_file(self):
|
|
parsed = parse_args(["--infile", "temp.svg", "--outformat", "pdc"])
|
|
self.assertEqual(parsed.infile.name, "temp.svg")
|
|
expected = os.path.splitext("temp.svg")[0] + ".pdc"
|
|
self.assertEqual(parsed.outfile.name, expected)
|
|
|
|
def test_explicit_outfile_influences_format(self):
|
|
parsed = parse_args(["-i", "-", "--outfile", "test.png"])
|
|
self.assertEqual(parsed.outformat, "png")
|
|
parsed = parse_args(["-i", "-", "--outfile", "test.svg"])
|
|
self.assertEqual(parsed.outformat, "svg")
|
|
parsed = parse_args(["-i", "-", "--outfile", "test.pdc"])
|
|
self.assertEqual(parsed.outformat, "pdc")
|
|
parsed = parse_args(["-i", "-", "--outfile", "test.any"])
|
|
self.assertEqual(parsed.outformat, "pdc")
|
|
|
|
def test_explicit_format_overrules_derived_format(self):
|
|
parsed = parse_args(["-i", "-", "--outformat", "svg", "--outfile", "test.png"])
|
|
self.assertEqual(parsed.outformat, "svg")
|
|
|
|
def test_implicit_filename_avoids_override(self):
|
|
self.files.append("exists.svg")
|
|
self.files.append("exists.pdc")
|
|
self.files.append("exists_3.pdc")
|
|
parsed = parse_args(["-i", "exists.svg", "--outformat", "pdc"])
|
|
self.assertEqual(os.path.basename(parsed.outfile.name), "exists_2.pdc")
|
|
self.files.append("exists_2.pdc")
|
|
parsed = parse_args(["-i", "exists.svg", "--outformat", "pdc"])
|
|
self.assertEqual(os.path.basename(parsed.outfile.name), "exists_4.pdc")
|
|
|
|
def test_error_if_out_of_alternatives_for_implicit_name(self):
|
|
old_value = pblconvert.LIMIT_WHEN_AVOIDING_OVERRIDE
|
|
try:
|
|
self.files.append("exists.svg")
|
|
self.files.append("exists.pdc")
|
|
pblconvert.LIMIT_WHEN_AVOIDING_OVERRIDE = 2
|
|
with self.assertRaises(IOError):
|
|
parse_args(["-i", "exists.svg", "--outformat", "pdc"])
|
|
finally:
|
|
pblconvert.LIMIT_WHEN_AVOIDING_OVERRIDE = old_value
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|