test.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env python
  2. import os
  3. import shutil
  4. import subprocess
  5. import sys
  6. from lib.util import electron_gyp, rm_rf
  7. SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
  8. PROJECT_NAME = electron_gyp()['project_name%']
  9. PRODUCT_NAME = electron_gyp()['product_name%']
  10. def main():
  11. os.chdir(SOURCE_ROOT)
  12. config = 'D'
  13. if len(sys.argv) == 2 and sys.argv[1] == '-R':
  14. config = 'R'
  15. if sys.platform == 'darwin':
  16. electron = os.path.join(SOURCE_ROOT, 'out', config,
  17. '{0}.app'.format(PRODUCT_NAME), 'Contents',
  18. 'MacOS', PRODUCT_NAME)
  19. resources_path = os.path.join(SOURCE_ROOT, 'out', config,
  20. '{0}.app'.format(PRODUCT_NAME), 'Contents',
  21. 'Resources')
  22. elif sys.platform == 'win32':
  23. electron = os.path.join(SOURCE_ROOT, 'out', config,
  24. '{0}.exe'.format(PROJECT_NAME))
  25. resources_path = os.path.join(SOURCE_ROOT, 'out', config)
  26. else:
  27. electron = os.path.join(SOURCE_ROOT, 'out', config, PROJECT_NAME)
  28. resources_path = os.path.join(SOURCE_ROOT, 'out', config)
  29. use_instrumented_asar = '--use-instrumented-asar' in sys.argv
  30. returncode = 0
  31. try:
  32. if use_instrumented_asar:
  33. install_instrumented_asar_file(resources_path)
  34. subprocess.check_call([electron, 'spec'] + sys.argv[1:])
  35. except subprocess.CalledProcessError as e:
  36. returncode = e.returncode
  37. except KeyboardInterrupt:
  38. returncode = 0
  39. if use_instrumented_asar:
  40. restore_uninstrumented_asar_file(resources_path)
  41. if os.environ.has_key('OUTPUT_TO_FILE'):
  42. output_to_file = os.environ['OUTPUT_TO_FILE']
  43. with open(output_to_file, 'r') as f:
  44. print f.read()
  45. rm_rf(output_to_file)
  46. return returncode
  47. def install_instrumented_asar_file(resources_path):
  48. asar_path = os.path.join(resources_path, '{0}.asar'.format(PROJECT_NAME))
  49. uninstrumented_path = os.path.join(resources_path,
  50. '{0}-original.asar'.format(PROJECT_NAME))
  51. instrumented_path = os.path.join(SOURCE_ROOT, 'out', 'coverage',
  52. '{0}.asar'.format(PROJECT_NAME))
  53. shutil.move(asar_path, uninstrumented_path)
  54. shutil.move(instrumented_path, asar_path)
  55. def restore_uninstrumented_asar_file(resources_path):
  56. asar_path = os.path.join(resources_path, '{0}.asar'.format(PROJECT_NAME))
  57. uninstrumented_path = os.path.join(resources_path,
  58. '{0}-original.asar'.format(PROJECT_NAME))
  59. os.remove(asar_path)
  60. shutil.move(uninstrumented_path, asar_path)
  61. if __name__ == '__main__':
  62. sys.exit(main())