1import re 2 3import six 4 5from mock import patch 6 7import invoke 8import invoke.collection 9import invoke.exceptions 10import invoke.tasks 11import invoke.program 12 13 14class Init: 15 "__init__" 16 17 def dunder_version_info(self): 18 assert hasattr(invoke, "__version_info__") 19 ver = invoke.__version_info__ 20 assert isinstance(ver, tuple) 21 assert all(isinstance(x, int) for x in ver) 22 23 def dunder_version(self): 24 assert hasattr(invoke, "__version__") 25 ver = invoke.__version__ 26 assert isinstance(ver, six.string_types) 27 assert re.match(r"\d+\.\d+\.\d+", ver) 28 29 def dunder_version_looks_generated_from_dunder_version_info(self): 30 # Meh. 31 ver_part = invoke.__version__.split(".")[0] 32 ver_info_part = invoke.__version_info__[0] 33 assert ver_part == str(ver_info_part) 34 35 class exposes_bindings: 36 def task_decorator(self): 37 assert invoke.task is invoke.tasks.task 38 39 def task_class(self): 40 assert invoke.Task is invoke.tasks.Task 41 42 def collection_class(self): 43 assert invoke.Collection is invoke.collection.Collection 44 45 def context_class(self): 46 assert invoke.Context is invoke.context.Context 47 48 def mock_context_class(self): 49 assert invoke.MockContext is invoke.context.MockContext 50 51 def config_class(self): 52 assert invoke.Config is invoke.config.Config 53 54 def pty_size_function(self): 55 assert invoke.pty_size is invoke.terminals.pty_size 56 57 def local_class(self): 58 assert invoke.Local is invoke.runners.Local 59 60 def runner_class(self): 61 assert invoke.Runner is invoke.runners.Runner 62 63 def promise_class(self): 64 assert invoke.Promise is invoke.runners.Promise 65 66 def failure_class(self): 67 assert invoke.Failure is invoke.runners.Failure 68 69 def exceptions(self): 70 # Meh 71 for obj in vars(invoke.exceptions).values(): 72 if isinstance(obj, type) and issubclass(obj, BaseException): 73 top_level = getattr(invoke, obj.__name__) 74 real = getattr(invoke.exceptions, obj.__name__) 75 assert top_level is real 76 77 def runner_result(self): 78 assert invoke.Result is invoke.runners.Result 79 80 def watchers(self): 81 assert invoke.StreamWatcher is invoke.watchers.StreamWatcher 82 assert invoke.Responder is invoke.watchers.Responder 83 assert invoke.FailingResponder is invoke.watchers.FailingResponder 84 85 def program(self): 86 assert invoke.Program is invoke.program.Program 87 88 def filesystemloader(self): 89 assert invoke.FilesystemLoader is invoke.loader.FilesystemLoader 90 91 def argument(self): 92 assert invoke.Argument is invoke.parser.Argument 93 94 def parsercontext(self): 95 assert invoke.ParserContext is invoke.parser.ParserContext 96 97 def parser(self): 98 assert invoke.Parser is invoke.parser.Parser 99 100 def parseresult(self): 101 assert invoke.ParseResult is invoke.parser.ParseResult 102 103 def executor(self): 104 assert invoke.Executor is invoke.executor.Executor 105 106 def call(self): 107 assert invoke.call is invoke.tasks.call 108 109 def Call(self): 110 # Starting to think we shouldn't bother with lowercase-c call... 111 assert invoke.Call is invoke.tasks.Call 112 113 class offers_singletons: 114 @patch("invoke.Context") 115 def run(self, Context): 116 result = invoke.run("foo", bar="biz") 117 ctx = Context.return_value 118 ctx.run.assert_called_once_with("foo", bar="biz") 119 assert result is ctx.run.return_value 120 121 @patch("invoke.Context") 122 def sudo(self, Context): 123 result = invoke.sudo("foo", bar="biz") 124 ctx = Context.return_value 125 ctx.sudo.assert_called_once_with("foo", bar="biz") 126 assert result is ctx.sudo.return_value 127