test_main.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import io
  2. from pathlib import Path
  3. import re
  4. import responses
  5. from shutil import copy
  6. from testpath import MockCommand, modified_env, assert_isfile, assert_isdir
  7. from testpath.tempdir import TemporaryWorkingDirectory
  8. from zipfile import ZipFile
  9. from nsist import main
  10. from nsist.util import CACHE_ENV_VAR
  11. from .utils import test_dir
  12. example_dir = Path(test_dir, 'console_example')
  13. def respond_python_zip(req):
  14. buf = io.BytesIO()
  15. with ZipFile(buf, 'w') as zf:
  16. zf.writestr('python.exe', b'')
  17. return 200, {}, buf.getvalue()
  18. @responses.activate
  19. def test_console_example():
  20. responses.add_callback('GET', re.compile(r'https://www.python.org/ftp/.*'),
  21. callback=respond_python_zip, content_type='application/zip',
  22. )
  23. with TemporaryWorkingDirectory() as td:
  24. for src in example_dir.iterdir():
  25. copy(str(src), td)
  26. with modified_env({CACHE_ENV_VAR: td}), \
  27. MockCommand('makensis') as makensis:
  28. ec = main(['installer.cfg'])
  29. assert ec == 0
  30. assert makensis.get_calls()[0]['argv'][1].endswith('installer.nsi')
  31. build_dir = Path(td, 'build', 'nsis')
  32. assert_isdir(build_dir)
  33. assert_isfile(build_dir / 'Python' / 'python.exe')
  34. assert_isfile(build_dir / 'pkgs' / 'guessnumber.py')
  35. assert_isfile(build_dir / 'Guess_the_Number.launch.py')