11from contextlib import contextmanager
22import shlex
33import os
4+ import sys
45import subprocess
56import yaml
6- import importlib
7+
8+ if sys .version_info > (3 ,0 ):
9+ import importlib
10+ else :
11+ import imp
712
813from click .testing import CliRunner
914
@@ -26,6 +31,13 @@ def run_inside_dir(command, dirpath):
2631 with inside_dir (dirpath ):
2732 return subprocess .check_call (shlex .split (command ))
2833
34+ def project_info (result ):
35+ """Get toplevel dir, project_slug, and project dir from baked cookies"""
36+ project_path = str (result .project )
37+ project_slug = os .path .split (project_path )[- 1 ]
38+ project_dir = os .path .join (project_path , project_slug )
39+ return project_path , project_slug , project_dir
40+
2941
3042def test_bake_with_defaults (cookies ):
3143 result = cookies .bake ()
@@ -66,36 +78,46 @@ def test_bake_and_run_travis_pypi_setup(cookies):
6678def test_bake_with_no_console_script (cookies ):
6779 context = {'create_console_script' : 'n' }
6880 result = cookies .bake (extra_context = context )
69- project_path = str (result .project )
70- project_slug = os .path .split (project_path )[- 1 ]
71- project_dir = os .path .join (project_path , project_slug )
81+ project_path , project_slug , project_dir = project_info (result )
7282 found_project_files = os .listdir (project_dir )
73- assert "__main__ .py" not in found_project_files
83+ assert "cli .py" not in found_project_files
7484
7585 setup_path = os .path .join (project_path , 'setup.py' )
7686 with open (setup_path , 'r' ) as setup_file :
7787 assert 'entry_points' not in setup_file .read ()
7888
7989
80- def test_bake_with_console_script (cookies ):
90+ def test_bake_with_console_script_files (cookies ):
8191 context = {'create_console_script' : 'y' }
8292 result = cookies .bake (extra_context = context )
83- project_path = str (result .project )
84- project_slug = os .path .split (project_path )[- 1 ]
85- project_dir = os .path .join (project_path , project_slug )
93+ project_path , project_slug , project_dir = project_info (result )
8694 found_project_files = os .listdir (project_dir )
87- assert "__main__ .py" in found_project_files
95+ assert "cli .py" in found_project_files
8896
8997 setup_path = os .path .join (project_path , 'setup.py' )
9098 with open (setup_path , 'r' ) as setup_file :
9199 assert 'entry_points' in setup_file .read ()
92100
93- module_path = '.' .join ([project_slug , '__main__' ])
94- main_module = importlib .import_module (module_path )
95- noarg_result = runner .invoke (main_module .main )
101+ def test_bake_with_console_script_cli (cookies ):
102+ context = {'create_console_script' : 'y' }
103+ result = cookies .bake (extra_context = context )
104+ project_path , project_slug , project_dir = project_info (result )
105+ module_path = os .path .join (project_dir , 'cli.py' )
106+ module_name = '.' .join ([project_slug , 'cli' ])
107+ if sys .version_info >= (3 ,5 ):
108+ spec = importlib .util .spec_from_file_location (module_name , module_path )
109+ cli = importlib .util .module_from_spec (spec )
110+ spec .loader .exec_module (cli )
111+ elif sys .version_info >= (3 ,3 ):
112+ file_loader = importlib .machinery .SourceFileLoader
113+ cli = file_loader (module_name , module_path ).load_module ()
114+ else :
115+ cli = imp .load_source (module_name , module_path )
116+ print (dir (cli ))
117+ noarg_result = runner .invoke (cli .main )
96118 assert noarg_result .exit_code == 0
97119 expected_noarg_output = ' ' .join (['Add a console script for' , project_slug ])
98120 assert expected_noarg_output in noarg_result .output
99- help_result = runner .invoke (main_module .main , ['--help' ])
121+ help_result = runner .invoke (cli .main , ['--help' ])
100122 assert help_result .exit_code == 0
101123 assert 'Console script for python_boilerplate' in help_result .output
0 commit comments