pebble/third_party/pbl/pblconvert/tests/svg2pdc/test_parse_args.py
2025-01-27 11:38:16 -08:00

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()