blob: 9f8b84e8e088815e2bc98ea93fe000275876059a [file] [log] [blame]
import sys
import os
helpers_dir = os.getenv("PYCHARM_HELPERS_DIR", sys.path[0])
if sys.path[0] != helpers_dir:
sys.path.insert(0, helpers_dir)
from nose_utils import TeamcityPlugin
from pycharm_run_utils import debug, import_system_module
from pycharm_run_utils import adjust_sys_path
adjust_sys_path(False)
shlex = import_system_module("shlex")
try:
from nose.core import TestProgram
from nose.config import Config
from nose.plugins.manager import DefaultPluginManager
except:
raise NameError("Please, install nosetests")
teamcity_plugin = TeamcityPlugin()
class MyConfig(Config):
def __init__(self, **kw):
super(MyConfig, self).__init__(**kw)
def __setstate__(self, state):
super(MyConfig, self).__setstate__(state)
self.plugins.addPlugin(teamcity_plugin)
def process_args():
tests = []
opts = None
if sys.argv[-1].startswith("-"):
test_names = sys.argv[1:-1]
opts = sys.argv[-1]
else:
test_names = sys.argv[1:]
for arg in test_names:
arg = arg.strip()
if len(arg) == 0:
return
a = arg.split("::")
if len(a) == 1:
# From module or folder
a_splitted = a[0].split(";")
if len(a_splitted) != 1:
# means we have pattern to match against
if a_splitted[0].endswith("/"):
debug("/ from folder " + a_splitted[0] + ". Use pattern: " + a_splitted[1])
tests.append(a_splitted[0])
else:
if a[0].endswith("/"):
debug("/ from folder " + a[0])
tests.append(a[0])
else:
debug("/ from module " + a[0])
tests.append(a[0])
elif len(a) == 2:
# From testcase
debug("/ from testcase " + a[1] + " in " + a[0])
tests.append(a[0] + ":" + a[1])
else:
# From method in class or from function
debug("/ from method " + a[2] + " in testcase " + a[1] + " in " + a[0])
if a[1] == "":
# test function, not method
tests.append(a[0] + ":" + a[2])
else:
tests.append(a[0] + ":" + a[1] + "." + a[2])
argv = ['nosetests']
argv.extend(tests)
if opts:
options = shlex.split(opts)
argv.extend(options)
manager = DefaultPluginManager()
manager.addPlugin(teamcity_plugin)
config = MyConfig(plugins=manager)
config.configure(argv)
TestProgram(argv=argv, config=config)
if __name__ == "__main__":
process_args()