>>> import subprocess
>>> from subprocess import CalledProcessError, STDOUT
>>> import sys
>>> if sys.version_info[0:2] <= (2, 7):
...     check_output = subprocess.check_output
...     decode = lambda x: x
... elif sys.version_info[0:2] <= (3, 6):
...     import locale
...     ENCODING = locale.getpreferredencoding(False)
...     decode = lambda x: x.decode(ENCODING)
...     def check_output(*args, **kwargs):
...         return decode(subprocess.check_output(*args, **kwargs))
... else:
...     from functools import partial
...     check_output = partial(subprocess.check_output, text=True)
...     decode = lambda x: x

>>> sample = 'My var-name'

Test --version option:

>>> import caseutil
>>> out = check_output(['python', '-m', 'caseutil', '--version'])
>>> out.strip() == 'caseutil ' + caseutil.__version__
True

Test all case conversions:

>>> check_output(['python', '-m', 'caseutil', '-c', 'ada', sample])
'My_Var_Name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'camel', sample])
'myVarName\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'cobol', sample])
'MY-VAR-NAME\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'const', sample])
'MY_VAR_NAME\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'kebab', sample])
'my-var-name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'lower', sample])
'my var name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'pascal', sample])
'MyVarName\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'sentence', sample])
'My var name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'snake', sample])
'my_var_name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'title', sample])
'My Var Name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'train', sample])
'My-Var-Name\n'
>>> check_output(['python', '-m', 'caseutil', '-c', 'upper', sample])
'MY VAR NAME\n'

Test case detection:

>>> check_output(['python', '-m', 'caseutil', '-d', 'snake_case'])
'snake\n'

>>> check_output(['python', '-m', 'caseutil', '-d', 'lowercase'])
'camel kebab lower snake\n'

>>> check_output(['python', '-m', 'caseutil', '-d', 'Titlecase'])
'ada pascal sentence title train\n'

Mixed case:

>>> check_output(['python', '-m', 'caseutil', '-d', 'title Case'])
'\n'

Test multiline input:

>>> multisample = 'some phrase 1\n somePhrase2'
>>> check_output(['python', '-m', 'caseutil', '-c', 'const', multisample])
'SOME_PHRASE_1\nSOME_PHRASE2\n'
>>> check_output('echo "' + multisample + '" | python -m caseutil -c const', shell=True)
'SOME_PHRASE_1\nSOME_PHRASE2\n'

Test missing -c or -d:

>>> try:
...     check_output(['python', '-m', 'caseutil', sample], stderr=STDOUT)
... except CalledProcessError as e:
...     err = e
>>> err.returncode != 0
True

>>> 'error: one of the arguments --version -c/--convert -d/--detect is required' in decode(err.output)
True

Test undefined option:

>>> try:
...     check_output(['python', '-m', 'caseutil', '-d', '--undefined', sample], stderr=STDOUT)
... except CalledProcessError as e:
...     err = e
>>> err.returncode != 0
True
>>> 'error: unrecognized arguments: --undefined' in decode(err.output)
True
