test_main.py 1.2 KB

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