Updated HTML docs

This commit is contained in:
Griatch 2022-01-21 00:21:02 +01:00
parent 7c06220c24
commit 3aaf366163
89 changed files with 1540 additions and 1583 deletions

View file

@ -55,8 +55,6 @@
<span class="sd"> &gt; python game/manage.py test.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">types</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">from</span> <span class="nn">anything</span> <span class="kn">import</span> <span class="n">Anything</span>
@ -67,7 +65,7 @@
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultRoom</span><span class="p">,</span> <span class="n">DefaultExit</span><span class="p">,</span> <span class="n">ObjectDB</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.cmdset_character</span> <span class="kn">import</span> <span class="n">CharacterCmdSet</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">EvenniaTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">BaseEvenniaCommandTest</span><span class="p">,</span> <span class="n">EvenniaCommandTest</span> <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">help</span> <span class="k">as</span> <span class="n">help_module</span><span class="p">,</span>
<span class="n">general</span><span class="p">,</span>
@ -84,305 +82,18 @@
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">InterruptCommand</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdparser</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdset</span> <span class="kn">import</span> <span class="n">CmdSet</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">search_object</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">DefaultCharacter</span>
<span class="kn">from</span> <span class="nn">evennia.prototypes</span> <span class="kn">import</span> <span class="n">prototypes</span> <span class="k">as</span> <span class="n">protlib</span>
<span class="c1"># set up signal here since we are not starting the server</span>
<span class="n">_RE_STRIP_EVMENU</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\+|-+\+|\+-+|--+|\|(?:\s|$)&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="c1"># ------------------------------------------------------------</span>
<span class="c1"># Command testing</span>
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="CommandTestMixin"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CommandTestMixin">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.server.portal.portal.LoopingCall&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">MagicMock</span><span class="p">())</span>
<span class="k">class</span> <span class="nc">CommandTestMixin</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Mixin to add to a test in order to provide the `.call` helper for</span>
<span class="sd"> testing the execution and returns of a command.</span>
<span class="sd"> Tests a Command by running it and comparing what messages it sends with</span>
<span class="sd"> expected values. This tests without actually spinning up the cmdhandler</span>
<span class="sd"> for every test, which is more controlled.</span>
<span class="sd"> Example:</span>
<span class="sd"> ::</span>
<span class="sd"> from commands.echo import CmdEcho</span>
<span class="sd"> class MyCommandTest(EvenniaTest, CommandTestMixin):</span>
<span class="sd"> def test_echo(self):</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="sd"> Test that the echo command really returns</span>
<span class="sd"> what you pass into it.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="sd"> self.call(MyCommand(), &quot;hello world!&quot;,</span>
<span class="sd"> &quot;You hear your echo: &#39;Hello world!&#39;&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># formatting for .call&#39;s error message</span>
<span class="n">_ERROR_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">=========================== Wanted message ===================================</span>
<span class="si">{expected_msg}</span><span class="s2"></span>
<span class="s2">=========================== Returned message =================================</span>
<span class="si">{returned_msg}</span><span class="s2"></span>
<span class="s2">==============================================================================</span>
<span class="s2">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
<div class="viewcode-block" id="CommandTestMixin.call"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CommandTestMixin.call">[docs]</a> <span class="k">def</span> <span class="nf">call</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">cmdobj</span><span class="p">,</span>
<span class="n">input_args</span><span class="p">,</span>
<span class="n">msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cmdset</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">noansi</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">raw_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test a command by assigning all the needed properties to a cmdobj and</span>
<span class="sd"> running the sequence. The resulting `.msg` calls will be mocked and</span>
<span class="sd"> the text= calls to them compared to a expected output.</span>
<span class="sd"> Args:</span>
<span class="sd"> cmdobj (Command): The command object to use.</span>
<span class="sd"> input_args (str): This should be the full input the Command should</span>
<span class="sd"> see, such as &#39;look here&#39;. This will become `.args` for the Command</span>
<span class="sd"> instance to parse.</span>
<span class="sd"> msg (str or dict, optional): This is the expected return value(s)</span>
<span class="sd"> returned through `caller.msg(text=...)` calls in the command. If a string, the</span>
<span class="sd"> receiver is controlled with the `receiver` kwarg (defaults to `caller`).</span>
<span class="sd"> If this is a `dict`, it is a mapping</span>
<span class="sd"> `{receiver1: &quot;expected1&quot;, receiver2: &quot;expected2&quot;,...}` and `receiver` is</span>
<span class="sd"> ignored. The message(s) are compared with the actual messages returned</span>
<span class="sd"> to the receiver(s) as the Command runs. Each check uses `.startswith`,</span>
<span class="sd"> so you can choose to only include the first part of the</span>
<span class="sd"> returned message if that&#39;s enough to verify a correct result. EvMenu</span>
<span class="sd"> decorations (like borders) are stripped and should not be included. This</span>
<span class="sd"> should also not include color tags unless `noansi=False`.</span>
<span class="sd"> If the command returns texts in multiple separate `.msg`-</span>
<span class="sd"> calls to a receiver, separate these with `|` if `noansi=True`</span>
<span class="sd"> (default) and `||` if `noansi=False`. If no `msg` is given (`None`),</span>
<span class="sd"> then no automatic comparison will be done.</span>
<span class="sd"> cmdset (str, optional): If given, make `.cmdset` available on the Command</span>
<span class="sd"> instance as it runs. While `.cmdset` is normally available on the</span>
<span class="sd"> Command instance by default, this is usually only used by</span>
<span class="sd"> commands that explicitly operates/displays cmdsets, like</span>
<span class="sd"> `examine`.</span>
<span class="sd"> noansi (str, optional): By default the color tags of the `msg` is</span>
<span class="sd"> ignored, this makes them significant. If unset, `msg` must contain</span>
<span class="sd"> the same color tags as the actual return message.</span>
<span class="sd"> caller (Object or Account, optional): By default `self.char1` is used as the</span>
<span class="sd"> command-caller (the `.caller` property on the Command). This allows to</span>
<span class="sd"> execute with another caller, most commonly an Account.</span>
<span class="sd"> receiver (Object or Account, optional): This is the object to receive the</span>
<span class="sd"> return messages we want to test. By default this is the same as `caller`</span>
<span class="sd"> (which in turn defaults to is `self.char1`). Note that if `msg` is</span>
<span class="sd"> a `dict`, this is ignored since the receiver is already specified there.</span>
<span class="sd"> cmdstring (str, optional): Normally this is the Command&#39;s `key`.</span>
<span class="sd"> This allows for tweaking the `.cmdname` property of the</span>
<span class="sd"> Command`. This isb used for commands with multiple aliases,</span>
<span class="sd"> where the command explicitly checs which alias was used to</span>
<span class="sd"> determine its functionality.</span>
<span class="sd"> obj (str, optional): This sets the `.obj` property of the Command - the</span>
<span class="sd"> object on which the Command &#39;sits&#39;. By default this is the same as `caller`.</span>
<span class="sd"> This can be used for testing on-object Command interactions.</span>
<span class="sd"> inputs (list, optional): A list of strings to pass to functions that pause to</span>
<span class="sd"> take input from the user (normally using `@interactive` and</span>
<span class="sd"> `ret = yield(question)` or `evmenu.get_input`). Each element of the</span>
<span class="sd"> list will be passed into the command as if the user wrote that at the prompt.</span>
<span class="sd"> raw_string (str, optional): Normally the `.raw_string` property is set as</span>
<span class="sd"> a combination of your `key/cmdname` and `input_args`. This allows</span>
<span class="sd"> direct control of what this is, for example for testing edge cases</span>
<span class="sd"> or malformed inputs.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str or dict: The message sent to `receiver`, or a dict of</span>
<span class="sd"> `{receiver: &quot;msg&quot;, ...}` if multiple are given. This is usually</span>
<span class="sd"> only used with `msg=None` to do the validation externally.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: If the returns of `.msg` calls (tested with `.startswith`) does not</span>
<span class="sd"> match `expected_input`.</span>
<span class="sd"> Notes:</span>
<span class="sd"> As part of the tests, all methods of the Command will be called in</span>
<span class="sd"> the proper order:</span>
<span class="sd"> - cmdobj.at_pre_cmd()</span>
<span class="sd"> - cmdobj.parse()</span>
<span class="sd"> - cmdobj.func()</span>
<span class="sd"> - cmdobj.at_post_cmd()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># The `self.char1` is created in the `EvenniaTest` base along with</span>
<span class="c1"># other helper objects like self.room and self.obj</span>
<span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span> <span class="k">if</span> <span class="n">caller</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span> <span class="o">=</span> <span class="n">cmdstring</span> <span class="k">if</span> <span class="n">cmdstring</span> <span class="k">else</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">key</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">raw_cmdname</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span> <span class="c1"># deprecated</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">input_args</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdset</span> <span class="o">=</span> <span class="n">cmdset</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">session_from_sessid</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span> <span class="k">if</span> <span class="n">raw_string</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">input_args</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span> <span class="ow">or</span> <span class="p">(</span><span class="n">caller</span> <span class="k">if</span> <span class="n">caller</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>
<span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span> <span class="ow">or</span> <span class="p">[]</span>
<span class="c1"># set up receivers</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># a mapping {receiver: msg, ...}</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">recv</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">msg</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">recv</span><span class="p">,</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">msg</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># a single expected string and thus a single receiver (defaults to caller)</span>
<span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span> <span class="k">if</span> <span class="n">receiver</span> <span class="k">else</span> <span class="n">caller</span>
<span class="n">receiver_mapping</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">unmocked_msg_methods</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">receiver_mapping</span><span class="p">:</span>
<span class="c1"># save the old .msg method so we can get it back</span>
<span class="c1"># cleanly after the test</span>
<span class="n">unmocked_msg_methods</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">msg</span>
<span class="c1"># replace normal `.msg` with a mock</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="c1"># Run the methods of the Command. This mimics what happens in the</span>
<span class="c1"># cmdhandler. This will have the mocked .msg be called as part of the</span>
<span class="c1"># execution. Mocks remembers what was sent to them so we will be able</span>
<span class="c1"># to retrieve what was sent later.</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">at_pre_cmd</span><span class="p">():</span>
<span class="k">return</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">func</span><span class="p">()</span>
<span class="c1"># handle func&#39;s with yield in them (making them generators)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">GeneratorType</span><span class="p">):</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">if</span> <span class="n">inputs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">inp</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># this mimics a user&#39;s reply to a prompt</span>
<span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># non-input yield, like yield(10). We don&#39;t pause</span>
<span class="c1"># but fire it immediately.</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">at_post_cmd</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">except</span> <span class="n">InterruptCommand</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">for</span> <span class="n">inp</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
<span class="c1"># if there are any inputs left, we may have a non-generator</span>
<span class="c1"># input to handle (get_input/ask_yes_no that uses a separate</span>
<span class="c1"># cmdset rather than a yield</span>
<span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="c1"># At this point the mocked .msg methods on each receiver will have</span>
<span class="c1"># stored all calls made to them (that&#39;s a basic function of the Mock</span>
<span class="c1"># class). We will not extract them and compare to what we expected to</span>
<span class="c1"># go to each receiver.</span>
<span class="n">returned_msgs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">expected_msg</span> <span class="ow">in</span> <span class="n">receiver_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="c1"># get the stored messages from the Mock with Mock.mock_calls.</span>
<span class="n">stored_msg</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">))</span>
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">mock_calls</span>
<span class="p">]</span>
<span class="c1"># we can return this now, we are done using the mock</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">unmocked_msg_methods</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span>
<span class="c1"># Get the first element of a tuple if msg received a tuple instead of a string</span>
<span class="n">stored_msg</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">smsg</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">smsg</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">smsg</span><span class="p">)</span> <span class="k">for</span> <span class="n">smsg</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">]</span>
<span class="k">if</span> <span class="n">expected_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># no expected_msg; just build the returned_msgs dict</span>
<span class="n">returned_msg</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">)</span>
<span class="n">returned_msgs</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">ansi</span><span class="o">.</span><span class="n">parse_ansi</span><span class="p">(</span><span class="n">returned_msg</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">noansi</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># compare messages to expected</span>
<span class="c1"># set our separator for returned messages based on parsing ansi or not</span>
<span class="n">msg_sep</span> <span class="o">=</span> <span class="s2">&quot;|&quot;</span> <span class="k">if</span> <span class="n">noansi</span> <span class="k">else</span> <span class="s2">&quot;||&quot;</span>
<span class="c1"># We remove Evmenu decorations since that just makes it harder</span>
<span class="c1"># to write the comparison string. We also strip ansi before this</span>
<span class="c1"># comparison since otherwise it would mess with the regex.</span>
<span class="n">returned_msg</span> <span class="o">=</span> <span class="n">msg_sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">_RE_STRIP_EVMENU</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span>
<span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">ansi</span><span class="o">.</span><span class="n">parse_ansi</span><span class="p">(</span><span class="n">mess</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">noansi</span><span class="p">))</span>
<span class="k">for</span> <span class="n">mess</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="c1"># this is the actual test</span>
<span class="k">if</span> <span class="n">expected_msg</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="ow">and</span> <span class="n">returned_msg</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">returned_msg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">expected_msg</span><span class="p">):</span>
<span class="c1"># failed the test</span>
<span class="k">raise</span> <span class="ne">AssertionError</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ERROR_FORMAT</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">expected_msg</span><span class="o">=</span><span class="n">expected_msg</span><span class="p">,</span> <span class="n">returned_msg</span><span class="o">=</span><span class="n">returned_msg</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># passed!</span>
<span class="n">returned_msgs</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">returned_msg</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">returned_msgs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">returned_msgs</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">returned_msgs</span></div></div>
<div class="viewcode-block" id="EvenniaCommandTest"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.EvenniaCommandTest">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.account.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.admin.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.batchprocess.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.building.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.comms.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.general.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.help.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.syscommands.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.system.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.unloggedin.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">EvenniaCommandTest</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">CommandTestMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Commands only using the default settings.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="CommandTest"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CommandTest">[docs]</a><span class="k">class</span> <span class="nc">CommandTest</span><span class="p">(</span><span class="n">EvenniaTest</span><span class="p">,</span> <span class="n">CommandTestMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parent class to inherit from - makes tests use your own</span>
<span class="sd"> classes and settings in mygame.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<span class="c1"># ------------------------------------------------------------</span>
<span class="c1"># Individual module Tests</span>
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="TestGeneral"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral">[docs]</a><span class="k">class</span> <span class="nc">TestGeneral</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestGeneral"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral">[docs]</a><span class="k">class</span> <span class="nc">TestGeneral</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestGeneral.test_look"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look">[docs]</a> <span class="k">def</span> <span class="nf">test_look</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;here&quot;</span><span class="p">,</span> <span class="s2">&quot;Room(#</span><span class="si">{}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">room_desc&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">rid</span><span class="p">))</span></div>
@ -478,7 +189,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdAccess</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Permission Hierarchy (climbing):&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp">[docs]</a><span class="k">class</span> <span class="nc">TestHelp</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp">[docs]</a><span class="k">class</span> <span class="nc">TestHelp</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="n">maxDiff</span> <span class="o">=</span> <span class="kc">None</span>
@ -628,7 +339,7 @@
<span class="n">cmdset</span><span class="o">=</span><span class="n">TestCmdSet</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestSystem"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem">[docs]</a><span class="k">class</span> <span class="nc">TestSystem</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystem"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem">[docs]</a><span class="k">class</span> <span class="nc">TestSystem</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystem.test_py"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_py">[docs]</a> <span class="k">def</span> <span class="nf">test_py</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># we are not testing CmdReload, CmdReset and CmdShutdown, CmdService or CmdTime</span>
<span class="c1"># since the server is not running during these tests.</span>
@ -652,7 +363,7 @@
<div class="viewcode-block" id="func_test_cmd_tasks"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.func_test_cmd_tasks">[docs]</a><span class="k">def</span> <span class="nf">func_test_cmd_tasks</span><span class="p">():</span>
<span class="k">return</span> <span class="s1">&#39;success&#39;</span></div>
<div class="viewcode-block" id="TestCmdTasks"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks">[docs]</a><span class="k">class</span> <span class="nc">TestCmdTasks</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestCmdTasks"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks">[docs]</a><span class="k">class</span> <span class="nc">TestCmdTasks</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestCmdTasks.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
@ -812,7 +523,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="sa">f</span><span class="s1">&#39;/cancel&#39;</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestAdmin"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin">[docs]</a><span class="k">class</span> <span class="nc">TestAdmin</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestAdmin"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin">[docs]</a><span class="k">class</span> <span class="nc">TestAdmin</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestAdmin.test_emit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_emit">[docs]</a> <span class="k">def</span> <span class="nf">test_emit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">admin</span><span class="o">.</span><span class="n">CmdEmit</span><span class="p">(),</span> <span class="s2">&quot;Char2 = Test&quot;</span><span class="p">,</span> <span class="s2">&quot;Emitted to Char2:</span><span class="se">\n</span><span class="s2">Test&quot;</span><span class="p">)</span></div>
@ -843,7 +554,7 @@
<span class="p">)</span></div></div>
<div class="viewcode-block" id="TestAccount"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount">[docs]</a><span class="k">class</span> <span class="nc">TestAccount</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestAccount"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount">[docs]</a><span class="k">class</span> <span class="nc">TestAccount</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestAccount.test_ooc_look"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_ooc_look">[docs]</a> <span class="k">def</span> <span class="nf">test_ooc_look</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">MULTISESSION_MODE</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
@ -967,7 +678,7 @@
<span class="p">)</span></div></div>
<div class="viewcode-block" id="TestBuilding"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding">[docs]</a><span class="k">class</span> <span class="nc">TestBuilding</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBuilding"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding">[docs]</a><span class="k">class</span> <span class="nc">TestBuilding</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBuilding.test_create"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_create">[docs]</a> <span class="k">def</span> <span class="nf">test_create</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
@ -2035,7 +1746,7 @@
<div class="viewcode-block" id="TestCommsChannel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.comms.CHANNEL_DEFAULT_TYPECLASS&quot;</span><span class="p">,</span> <span class="n">DefaultChannel</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TestCommsChannel</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">TestCommsChannel</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the central `channel` command.</span>
@ -2258,7 +1969,7 @@
<span class="kn">from</span> <span class="nn">evennia.commands.default</span> <span class="kn">import</span> <span class="n">comms</span> <span class="c1"># noqa</span>
<div class="viewcode-block" id="TestComms"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestComms">[docs]</a><span class="k">class</span> <span class="nc">TestComms</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestComms"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestComms">[docs]</a><span class="k">class</span> <span class="nc">TestComms</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestComms.test_page"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestComms.test_page">[docs]</a> <span class="k">def</span> <span class="nf">test_page</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
@ -2270,7 +1981,7 @@
<span class="p">)</span></div></div>
<div class="viewcode-block" id="TestBatchProcess"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBatchProcess">[docs]</a><span class="k">class</span> <span class="nc">TestBatchProcess</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBatchProcess"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBatchProcess">[docs]</a><span class="k">class</span> <span class="nc">TestBatchProcess</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the batch processor.</span>
@ -2306,13 +2017,13 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;in func&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestInterruptCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestInterruptCommand">[docs]</a><span class="k">class</span> <span class="nc">TestInterruptCommand</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestInterruptCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestInterruptCommand">[docs]</a><span class="k">class</span> <span class="nc">TestInterruptCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestInterruptCommand.test_interrupt_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestInterruptCommand.test_interrupt_command">[docs]</a> <span class="k">def</span> <span class="nf">test_interrupt_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">CmdInterrupt</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestUnconnectedCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestUnconnectedCommand">[docs]</a><span class="k">class</span> <span class="nc">TestUnconnectedCommand</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestUnconnectedCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestUnconnectedCommand">[docs]</a><span class="k">class</span> <span class="nc">TestUnconnectedCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestUnconnectedCommand.test_info_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestUnconnectedCommand.test_info_command">[docs]</a> <span class="k">def</span> <span class="nf">test_info_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># instead of using SERVER_START_TIME (0), we use 86400 because Windows won&#39;t let us use anything lower</span>
<span class="n">gametime</span><span class="o">.</span><span class="n">SERVER_START_TIME</span> <span class="o">=</span> <span class="mi">86400</span>
@ -2332,7 +2043,7 @@
<span class="c1"># Test syscommands</span>
<div class="viewcode-block" id="TestSystemCommands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestSystemCommands</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystemCommands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestSystemCommands</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystemCommands.test_simple_defaults"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_simple_defaults">[docs]</a> <span class="k">def</span> <span class="nf">test_simple_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">syscommands</span><span class="o">.</span><span class="n">SystemNoInput</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">syscommands</span><span class="o">.</span><span class="n">SystemNoMatch</span><span class="p">(),</span> <span class="s2">&quot;Huh?&quot;</span><span class="p">)</span></div>

View file

@ -47,7 +47,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="n">building_menu</span> <span class="kn">import</span> <span class="nn">BuildingMenu</span><span class="o">,</span> <span class="nn">CmdNoMatch</span>
@ -56,7 +56,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">add_choice</span><span class="p">(</span><span class="s2">&quot;title&quot;</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;t&quot;</span><span class="p">,</span> <span class="n">attr</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestBuildingMenu"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.building_menu.tests.html#evennia.contrib.base_systems.building_menu.tests.TestBuildingMenu">[docs]</a><span class="k">class</span> <span class="nc">TestBuildingMenu</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBuildingMenu"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.building_menu.tests.html#evennia.contrib.base_systems.building_menu.tests.TestBuildingMenu">[docs]</a><span class="k">class</span> <span class="nc">TestBuildingMenu</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBuildingMenu.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.building_menu.tests.html#evennia.contrib.base_systems.building_menu.tests.TestBuildingMenu.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">TestBuildingMenu</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">menu</span> <span class="o">=</span> <span class="n">BuildingMenu</span><span class="p">(</span><span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">)</span>

View file

@ -47,11 +47,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">email_login</span>
<div class="viewcode-block" id="TestEmailLogin"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.email_login.tests.html#evennia.contrib.base_systems.email_login.tests.TestEmailLogin">[docs]</a><span class="k">class</span> <span class="nc">TestEmailLogin</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestEmailLogin"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.email_login.tests.html#evennia.contrib.base_systems.email_login.tests.TestEmailLogin">[docs]</a><span class="k">class</span> <span class="nc">TestEmailLogin</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestEmailLogin.test_connect"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.email_login.tests.html#evennia.contrib.base_systems.email_login.tests.TestEmailLogin.test_connect">[docs]</a> <span class="k">def</span> <span class="nf">test_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">email_login</span><span class="o">.</span><span class="n">CmdUnconnectedConnect</span><span class="p">(),</span>

View file

@ -51,7 +51,7 @@
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">ScriptDB</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">ExitCommand</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span><span class="p">,</span> <span class="n">create_script</span>
@ -290,7 +290,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">callbacks</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="p">{})</span></div></div>
<div class="viewcode-block" id="TestCmdCallback"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestCmdCallback">[docs]</a><span class="k">class</span> <span class="nc">TestCmdCallback</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestCmdCallback"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestCmdCallback">[docs]</a><span class="k">class</span> <span class="nc">TestCmdCallback</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test the @callback command.&quot;&quot;&quot;</span>
@ -469,7 +469,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">callback</span><span class="o">.</span><span class="n">valid</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestDefaultCallbacks"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestDefaultCallbacks">[docs]</a><span class="k">class</span> <span class="nc">TestDefaultCallbacks</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestDefaultCallbacks"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestDefaultCallbacks">[docs]</a><span class="k">class</span> <span class="nc">TestDefaultCallbacks</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test the default callbacks.&quot;&quot;&quot;</span>

View file

@ -47,11 +47,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">mux_comms_cmds</span> <span class="k">as</span> <span class="n">comms</span>
<div class="viewcode-block" id="TestLegacyMuxComms"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.mux_comms_cmds.tests.html#evennia.contrib.base_systems.mux_comms_cmds.tests.TestLegacyMuxComms">[docs]</a><span class="k">class</span> <span class="nc">TestLegacyMuxComms</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestLegacyMuxComms"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.mux_comms_cmds.tests.html#evennia.contrib.base_systems.mux_comms_cmds.tests.TestLegacyMuxComms">[docs]</a><span class="k">class</span> <span class="nc">TestLegacyMuxComms</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the legacy comms contrib.</span>
<span class="sd"> &quot;&quot;&quot;</span>

View file

@ -47,7 +47,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.unixcommand</span> <span class="kn">import</span> <span class="n">UnixCommand</span>
@ -74,7 +74,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> * </span><span class="si">{}</span><span class="s2"> = </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">nb1</span><span class="p">,</span> <span class="n">nb2</span><span class="p">,</span> <span class="n">result</span><span class="p">))</span></div></div>
<div class="viewcode-block" id="TestUnixCommand"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.unixcommand.tests.html#evennia.contrib.base_systems.unixcommand.tests.TestUnixCommand">[docs]</a><span class="k">class</span> <span class="nc">TestUnixCommand</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestUnixCommand"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.unixcommand.tests.html#evennia.contrib.base_systems.unixcommand.tests.TestUnixCommand">[docs]</a><span class="k">class</span> <span class="nc">TestUnixCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestUnixCommand.test_success"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.unixcommand.tests.html#evennia.contrib.base_systems.unixcommand.tests.TestUnixCommand.test_success">[docs]</a> <span class="k">def</span> <span class="nf">test_success</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;See the command parsing succeed.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">CmdDummy</span><span class="p">(),</span> <span class="s2">&quot;5 10&quot;</span><span class="p">,</span> <span class="s2">&quot;5 * 10 = 50&quot;</span><span class="p">)</span>

View file

@ -49,7 +49,7 @@
<span class="kn">import</span> <span class="nn">inspect</span>
<span class="kn">import</span> <span class="nn">pkgutil</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">path</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">InterruptCommand</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">mod_import</span>
@ -59,7 +59,7 @@
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">utils</span>
<div class="viewcode-block" id="TestEvscaperoomCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.full_systems.evscaperoom.tests.html#evennia.contrib.full_systems.evscaperoom.tests.TestEvscaperoomCommands">[docs]</a><span class="k">class</span> <span class="nc">TestEvscaperoomCommands</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestEvscaperoomCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.full_systems.evscaperoom.tests.html#evennia.contrib.full_systems.evscaperoom.tests.TestEvscaperoomCommands">[docs]</a><span class="k">class</span> <span class="nc">TestEvscaperoomCommands</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestEvscaperoomCommands.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.full_systems.evscaperoom.tests.html#evennia.contrib.full_systems.evscaperoom.tests.TestEvscaperoomCommands.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">create_evscaperoom_object</span><span class="p">(</span><span class="s2">&quot;evscaperoom.room.EvscapeRoom&quot;</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Testroom&quot;</span><span class="p">)</span>

View file

@ -47,12 +47,12 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">barter</span>
<div class="viewcode-block" id="TestBarter"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.barter.tests.html#evennia.contrib.game_systems.barter.tests.TestBarter">[docs]</a><span class="k">class</span> <span class="nc">TestBarter</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBarter"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.barter.tests.html#evennia.contrib.game_systems.barter.tests.TestBarter">[docs]</a><span class="k">class</span> <span class="nc">TestBarter</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBarter.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.barter.tests.html#evennia.contrib.game_systems.barter.tests.TestBarter.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">tradeitem1</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">&quot;TradeItem1&quot;</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>

View file

@ -47,14 +47,14 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">DefaultRoom</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">clothing</span>
<div class="viewcode-block" id="TestClothingCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.clothing.tests.html#evennia.contrib.game_systems.clothing.tests.TestClothingCmd">[docs]</a><span class="k">class</span> <span class="nc">TestClothingCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestClothingCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.clothing.tests.html#evennia.contrib.game_systems.clothing.tests.TestClothingCmd">[docs]</a><span class="k">class</span> <span class="nc">TestClothingCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestClothingCmd.test_clothingcommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.clothing.tests.html#evennia.contrib.game_systems.clothing.tests.TestClothingCmd.test_clothingcommands">[docs]</a> <span class="k">def</span> <span class="nf">test_clothingcommands</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">wearer</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">clothing</span><span class="o">.</span><span class="n">ClothedCharacter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Wearer&quot;</span><span class="p">)</span>
<span class="n">friend</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">clothing</span><span class="o">.</span><span class="n">ClothedCharacter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Friend&quot;</span><span class="p">)</span>

View file

@ -50,7 +50,7 @@
<span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">override_settings</span>
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ObjectDoesNotExist</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTestCase</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">crafting</span><span class="p">,</span> <span class="n">example_recipes</span>
@ -699,7 +699,7 @@
<div class="viewcode-block" id="TestCraftCommand"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftCommand">[docs]</a><span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.crafting.crafting._load_recipes&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">())</span>
<span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.crafting.crafting._RECIPE_CLASSES&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;testrecipe&quot;</span><span class="p">:</span> <span class="n">_MockRecipe</span><span class="p">})</span>
<span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[])</span>
<span class="k">class</span> <span class="nc">TestCraftCommand</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">TestCraftCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test the crafting command&quot;&quot;&quot;</span>
<div class="viewcode-block" id="TestCraftCommand.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftCommand.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -48,13 +48,13 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">gendersub</span>
<div class="viewcode-block" id="TestGenderSub"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.gendersub.tests.html#evennia.contrib.game_systems.gendersub.tests.TestGenderSub">[docs]</a><span class="k">class</span> <span class="nc">TestGenderSub</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestGenderSub"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.gendersub.tests.html#evennia.contrib.game_systems.gendersub.tests.TestGenderSub">[docs]</a><span class="k">class</span> <span class="nc">TestGenderSub</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestGenderSub.test_setgender"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.gendersub.tests.html#evennia.contrib.game_systems.gendersub.tests.TestGenderSub.test_setgender">[docs]</a> <span class="k">def</span> <span class="nf">test_setgender</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">gendersub</span><span class="o">.</span><span class="n">SetGender</span><span class="p">(),</span> <span class="s2">&quot;male&quot;</span><span class="p">,</span> <span class="s2">&quot;Your gender was set to male.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">gendersub</span><span class="o">.</span><span class="n">SetGender</span><span class="p">(),</span> <span class="s2">&quot;ambiguous&quot;</span><span class="p">,</span> <span class="s2">&quot;Your gender was set to ambiguous.&quot;</span><span class="p">)</span>

View file

@ -47,11 +47,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">mail</span>
<div class="viewcode-block" id="TestMail"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.mail.tests.html#evennia.contrib.game_systems.mail.tests.TestMail">[docs]</a><span class="k">class</span> <span class="nc">TestMail</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestMail"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.mail.tests.html#evennia.contrib.game_systems.mail.tests.TestMail">[docs]</a><span class="k">class</span> <span class="nc">TestMail</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestMail.test_mail"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.mail.tests.html#evennia.contrib.game_systems.mail.tests.TestMail.test_mail">[docs]</a> <span class="k">def</span> <span class="nf">test_mail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">mail</span><span class="o">.</span><span class="n">CmdMail</span><span class="p">(),</span> <span class="s2">&quot;2&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;2&#39; is not a valid mail id.&quot;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">mail</span><span class="o">.</span><span class="n">CmdMail</span><span class="p">(),</span> <span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;test&#39; is not a valid mail id.&quot;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">)</span>

View file

@ -47,11 +47,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">multidescer</span>
<div class="viewcode-block" id="TestMultidescer"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.multidescer.tests.html#evennia.contrib.game_systems.multidescer.tests.TestMultidescer">[docs]</a><span class="k">class</span> <span class="nc">TestMultidescer</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestMultidescer"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.multidescer.tests.html#evennia.contrib.game_systems.multidescer.tests.TestMultidescer">[docs]</a><span class="k">class</span> <span class="nc">TestMultidescer</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestMultidescer.test_cmdmultidesc"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.multidescer.tests.html#evennia.contrib.game_systems.multidescer.tests.TestMultidescer.test_cmdmultidesc">[docs]</a> <span class="k">def</span> <span class="nf">test_cmdmultidesc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">multidescer</span><span class="o">.</span><span class="n">CmdMultiDesc</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;Stored descs:</span><span class="se">\n</span><span class="s2">caller:&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>

View file

@ -53,12 +53,12 @@
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">search</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">puzzles</span>
<div class="viewcode-block" id="TestPuzzles"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.puzzles.tests.html#evennia.contrib.game_systems.puzzles.tests.TestPuzzles">[docs]</a><span class="k">class</span> <span class="nc">TestPuzzles</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestPuzzles"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.puzzles.tests.html#evennia.contrib.game_systems.puzzles.tests.TestPuzzles">[docs]</a><span class="k">class</span> <span class="nc">TestPuzzles</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestPuzzles.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.puzzles.tests.html#evennia.contrib.game_systems.puzzles.tests.TestPuzzles.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">TestPuzzles</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">steel</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">object_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;steel&quot;</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">location</span><span class="p">)</span>

View file

@ -48,14 +48,14 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">patch</span><span class="p">,</span> <span class="n">MagicMock</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">DefaultRoom</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">tb_basic</span><span class="p">,</span> <span class="n">tb_equip</span><span class="p">,</span> <span class="n">tb_range</span><span class="p">,</span> <span class="n">tb_items</span><span class="p">,</span> <span class="n">tb_magic</span>
<div class="viewcode-block" id="TestTurnBattleBasicCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleBasicCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleBasicCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleBasicCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleBasicCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleBasicCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="c1"># Test basic combat commands</span>
<div class="viewcode-block" id="TestTurnBattleBasicCmd.test_turnbattlecmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleBasicCmd.test_turnbattlecmd">[docs]</a> <span class="k">def</span> <span class="nf">test_turnbattlecmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -66,7 +66,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">tb_basic</span><span class="o">.</span><span class="n">CmdRest</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Char rests to recover HP.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestTurnBattleEquipCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleEquipCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleEquipCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleEquipCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleEquipCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleEquipCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleEquipCmd.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleEquipCmd.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">TestTurnBattleEquipCmd</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testweapon</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">tb_equip</span><span class="o">.</span><span class="n">TBEWeapon</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;test weapon&quot;</span><span class="p">)</span>
@ -89,7 +89,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">tb_equip</span><span class="o">.</span><span class="n">CmdRest</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Char rests to recover HP.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestTurnBattleRangeCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleRangeCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleRangeCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleRangeCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleRangeCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleRangeCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="c1"># Test range commands</span>
<div class="viewcode-block" id="TestTurnBattleRangeCmd.test_turnbattlerangecmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleRangeCmd.test_turnbattlerangecmd">[docs]</a> <span class="k">def</span> <span class="nf">test_turnbattlerangecmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Start with range module specific commands.</span>
@ -105,7 +105,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">tb_range</span><span class="o">.</span><span class="n">CmdRest</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Char rests to recover HP.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestTurnBattleItemsCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleItemsCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleItemsCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleItemsCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleItemsCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleItemsCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleItemsCmd.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleItemsCmd.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">TestTurnBattleItemsCmd</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testitem</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">&quot;test item&quot;</span><span class="p">)</span>
@ -122,7 +122,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">tb_items</span><span class="o">.</span><span class="n">CmdRest</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Char rests to recover HP.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestTurnBattleMagicCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleMagicCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleMagicCmd</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTurnBattleMagicCmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleMagicCmd">[docs]</a><span class="k">class</span> <span class="nc">TestTurnBattleMagicCmd</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="c1"># Test magic commands</span>
<div class="viewcode-block" id="TestTurnBattleMagicCmd.test_turnbattlemagiccmd"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tests.html#evennia.contrib.game_systems.turnbattle.tests.TestTurnBattleMagicCmd.test_turnbattlemagiccmd">[docs]</a> <span class="k">def</span> <span class="nf">test_turnbattlemagiccmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -50,7 +50,7 @@
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">patch</span><span class="p">,</span> <span class="n">Mock</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">DefaultRoom</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">extended_room</span>
@ -68,7 +68,7 @@
<div class="viewcode-block" id="TestExtendedRoom"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.extended_room.tests.html#evennia.contrib.grid.extended_room.tests.TestExtendedRoom">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.grid.extended_room.extended_room.datetime.datetime&quot;</span><span class="p">,</span> <span class="n">ForceUTCDatetime</span><span class="p">)</span>
<span class="c1"># mock gametime to return April 9, 2064, at 21:06 (spring evening)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.utils.gametime.gametime&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="mi">2975000766</span><span class="p">))</span>
<span class="k">class</span> <span class="nc">TestExtendedRoom</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">TestExtendedRoom</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">extended_room</span><span class="o">.</span><span class="n">ExtendedRoom</span>
<span class="n">DETAIL_DESC</span> <span class="o">=</span> <span class="s2">&quot;A test detail.&quot;</span>
<span class="n">SPRING_DESC</span> <span class="o">=</span> <span class="s2">&quot;A spring description.&quot;</span>

View file

@ -48,11 +48,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">simpledoor</span>
<div class="viewcode-block" id="TestSimpleDoor"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.simpledoor.tests.html#evennia.contrib.grid.simpledoor.tests.TestSimpleDoor">[docs]</a><span class="k">class</span> <span class="nc">TestSimpleDoor</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSimpleDoor"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.simpledoor.tests.html#evennia.contrib.grid.simpledoor.tests.TestSimpleDoor">[docs]</a><span class="k">class</span> <span class="nc">TestSimpleDoor</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSimpleDoor.test_cmdopen"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.simpledoor.tests.html#evennia.contrib.grid.simpledoor.tests.TestSimpleDoor.test_cmdopen">[docs]</a> <span class="k">def</span> <span class="nf">test_cmdopen</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">simpledoor</span><span class="o">.</span><span class="n">CmdOpen</span><span class="p">(),</span>

View file

@ -48,7 +48,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">slow_exit</span>
@ -60,7 +60,7 @@
<span class="k">return</span> <span class="n">Mock</span><span class="p">()</span>
<div class="viewcode-block" id="TestSlowExit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.slow_exit.tests.html#evennia.contrib.grid.slow_exit.tests.TestSlowExit">[docs]</a><span class="k">class</span> <span class="nc">TestSlowExit</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSlowExit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.slow_exit.tests.html#evennia.contrib.grid.slow_exit.tests.TestSlowExit">[docs]</a><span class="k">class</span> <span class="nc">TestSlowExit</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSlowExit.test_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.slow_exit.tests.html#evennia.contrib.grid.slow_exit.tests.TestSlowExit.test_exit">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.utils.delay&quot;</span><span class="p">,</span> <span class="n">_cancellable_mockdelay</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">exi</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span>

View file

@ -47,13 +47,13 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">dice</span>
<div class="viewcode-block" id="TestDice"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.dice.tests.html#evennia.contrib.rpg.dice.tests.TestDice">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.dice.dice.randint&quot;</span><span class="p">,</span> <span class="n">return_value</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TestDice</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">TestDice</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestDice.test_roll_dice"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.dice.tests.html#evennia.contrib.rpg.dice.tests.TestDice.test_roll_dice">[docs]</a> <span class="k">def</span> <span class="nf">test_roll_dice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mocked_randint</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dice</span><span class="o">.</span><span class="n">roll_dice</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)),</span> <span class="n">mocked_randint</span><span class="p">()</span> <span class="o">*</span> <span class="mi">6</span> <span class="o">+</span> <span class="mi">4</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dice</span><span class="o">.</span><span class="n">roll_dice</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="n">conditional</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="mi">35</span><span class="p">)),</span> <span class="kc">True</span><span class="p">)</span>

View file

@ -48,7 +48,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">from</span> <span class="nn">anything</span> <span class="kn">import</span> <span class="n">Anything</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">create_object</span>
@ -322,7 +322,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="p">(</span><span class="n">Anything</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">key</span><span class="p">))</span></div></div>
<div class="viewcode-block" id="TestRPSystemCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystemCommands</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestRPSystemCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystemCommands</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestRPSystemCommands.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystemCommands.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="n">rpsystem</span><span class="o">.</span><span class="n">ContribRPCharacter</span><span class="p">)</span>

View file

@ -46,12 +46,12 @@
<span class="sd">Tutorial - talking NPC tests.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">talking_npc</span>
<div class="viewcode-block" id="TestTalkingNPC"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.tests.html#evennia.contrib.tutorials.talking_npc.tests.TestTalkingNPC">[docs]</a><span class="k">class</span> <span class="nc">TestTalkingNPC</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTalkingNPC"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.tests.html#evennia.contrib.tutorials.talking_npc.tests.TestTalkingNPC">[docs]</a><span class="k">class</span> <span class="nc">TestTalkingNPC</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTalkingNPC.test_talkingnpc"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.tests.html#evennia.contrib.tutorials.talking_npc.tests.TestTalkingNPC.test_talkingnpc">[docs]</a> <span class="k">def</span> <span class="nf">test_talkingnpc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">npc</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">talking_npc</span><span class="o">.</span><span class="n">TalkingNPC</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;npctalker&quot;</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">talking_npc</span><span class="o">.</span><span class="n">CmdTalk</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;(You walk up and talk to Char.)&quot;</span><span class="p">)</span>

View file

@ -50,7 +50,7 @@
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">twisted.trial.unittest</span> <span class="kn">import</span> <span class="n">TestCase</span> <span class="k">as</span> <span class="n">TwistedTestCase</span>
<span class="kn">from</span> <span class="nn">twisted.internet.base</span> <span class="kn">import</span> <span class="n">DelayedCall</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">EvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">mockdelay</span><span class="p">,</span> <span class="n">mockdeferLater</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">mob</span><span class="p">,</span> <span class="n">objects</span> <span class="k">as</span> <span class="n">tutobjects</span><span class="p">,</span> <span class="n">rooms</span> <span class="k">as</span> <span class="n">tutrooms</span>
@ -74,7 +74,7 @@
<span class="n">DelayedCall</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="TestTutorialWorldObjects"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldObjects">[docs]</a><span class="k">class</span> <span class="nc">TestTutorialWorldObjects</span><span class="p">(</span><span class="n">TwistedTestCase</span><span class="p">,</span> <span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTutorialWorldObjects"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldObjects">[docs]</a><span class="k">class</span> <span class="nc">TestTutorialWorldObjects</span><span class="p">(</span><span class="n">TwistedTestCase</span><span class="p">,</span> <span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTutorialWorldObjects.test_tutorialobj"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldObjects.test_tutorialobj">[docs]</a> <span class="k">def</span> <span class="nf">test_tutorialobj</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">obj1</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">tutobjects</span><span class="o">.</span><span class="n">TutorialObject</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tutobj&quot;</span><span class="p">)</span>
<span class="n">obj1</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
@ -173,7 +173,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">tutobjects</span><span class="o">.</span><span class="n">CmdGetWeapon</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You find Rusty sword.&quot;</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">rack</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestTutorialWorldRooms"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldRooms">[docs]</a><span class="k">class</span> <span class="nc">TestTutorialWorldRooms</span><span class="p">(</span><span class="n">EvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTutorialWorldRooms"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldRooms">[docs]</a><span class="k">class</span> <span class="nc">TestTutorialWorldRooms</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestTutorialWorldRooms.test_cmdtutorial"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.tests.html#evennia.contrib.tutorials.tutorial_world.tests.TestTutorialWorldRooms.test_cmdtutorial">[docs]</a> <span class="k">def</span> <span class="nf">test_cmdtutorial</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">tutrooms</span><span class="o">.</span><span class="n">TutorialRoom</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tutroom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">room</span>

View file

@ -720,19 +720,25 @@
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">if</span> <span class="n">home</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">home</span><span class="p">:</span>
<span class="n">home_obj_or_dbref</span> <span class="o">=</span> <span class="n">home</span>
<span class="k">elif</span> <span class="n">nohome</span><span class="p">:</span>
<span class="n">home_obj_or_dbref</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">home_obj_or_dbref</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home_obj_or_dbref</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">_TEST_ENVIRONMENT</span><span class="p">:</span>
<span class="c1"># this happens for databases where the #1 location is flushed during tests</span>
<span class="n">home</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">%s</span><span class="s2">&#39;) does not exist, or the setting is malformed.&quot;</span>
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="sa">f</span><span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">{</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="si">}</span><span class="s2">&#39;) does not exist, &quot;</span>
<span class="s2">&quot;or the setting is malformed.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">nohome</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>

View file

@ -45,12 +45,34 @@
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Various helper resources for writing unittests.</span>
<span class="sd">Classes for testing Evennia core:</span>
<span class="sd">- `BaseEvenniaTestCase` - no default objects, only enforced default settings</span>
<span class="sd">- `BaseEvenniaTest` - all default objects, enforced default settings</span>
<span class="sd">- `BaseEvenniaCommandTest` - for testing Commands, enforced default settings</span>
<span class="sd">Classes for testing game folder content:</span>
<span class="sd">- `EvenniaTestCase` - no default objects, using gamedir settings (identical to</span>
<span class="sd"> standard Python TestCase)</span>
<span class="sd">- `EvenniaTest` - all default objects, using gamedir settings</span>
<span class="sd">- `EvenniaCommandTest` - for testing game folder commands, using gamedir settings</span>
<span class="sd">Other:</span>
<span class="sd">- `EvenniaTestMixin` - A class mixin for creating the test environment objects, for</span>
<span class="sd"> making custom tests.</span>
<span class="sd">- `EvenniaCommandMixin` - A class mixin that adds support for command testing with the .call()</span>
<span class="sd"> helper. Used by the command-test classes, but can be used for making a customt test class.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">types</span>
<span class="kn">from</span> <span class="nn">twisted.internet.defer</span> <span class="kn">import</span> <span class="n">Deferred</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">TestCase</span><span class="p">,</span> <span class="n">override_settings</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">patch</span><span class="p">,</span> <span class="n">MagicMock</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">,</span> <span class="n">DefaultRoom</span><span class="p">,</span> <span class="n">DefaultExit</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.accounts</span> <span class="kn">import</span> <span class="n">DefaultAccount</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.scripts</span> <span class="kn">import</span> <span class="n">DefaultScript</span>
@ -58,8 +80,14 @@
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.utils.idmapper.models</span> <span class="kn">import</span> <span class="n">flush_cache</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">all_from_module</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">all_from_module</span><span class="p">,</span> <span class="n">to_str</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">settings_default</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.muxcommand</span> <span class="kn">import</span> <span class="n">MuxCommand</span>
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">InterruptCommand</span>
<span class="n">_RE_STRIP_EVMENU</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\+|-+\+|\+-+|--+|\|(?:\s|$)&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="c1"># set up a &#39;pristine&#39; setting, unaffected by any changes in mygame</span>
@ -102,6 +130,8 @@
<span class="n">FUNCPARSER_PROTOTYPE_PARSING_MODULES</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;evennia.prototypes.protfuncs&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.game_template.server.conf.prototypefuncs&quot;</span><span class="p">],</span>
<span class="n">BASE_GUEST_TYPECLASS</span><span class="o">=</span><span class="s2">&quot;evennia.accounts.accounts.DefaultGuest&quot;</span><span class="p">,</span>
<span class="c1"># a special flag; test with settings._TEST_ENVIRONMENT to see if code runs in a test</span>
<span class="n">_TEST_ENVIRONMENT</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">DEFAULT_SETTINGS</span> <span class="o">=</span> <span class="p">{</span>
@ -197,7 +227,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="c1"># Set up fake prototype module for allowing tests to use named prototypes.</span>
<div class="viewcode-block" id="EvenniaTestMixin.create_rooms"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">[docs]</a> <span class="nd">@override_settings</span><span class="p">(</span><span class="n">PROTOTYPE_MODULES</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;evennia.utils.tests.data.prototypes_example&quot;</span><span class="p">],</span> <span class="n">DEFAULT_HOME</span><span class="o">=</span><span class="s2">&quot;#1&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="EvenniaTestMixin.create_rooms"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">[docs]</a> <span class="nd">@override_settings</span><span class="p">(</span><span class="n">PROTOTYPE_MODULES</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;evennia.utils.tests.data.prototypes_example&quot;</span><span class="p">],</span>
<span class="n">DEFAULT_HOME</span><span class="o">=</span><span class="s2">&quot;#1&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">create_rooms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">room_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Room&quot;</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">&quot;room_desc&quot;</span>
@ -283,14 +314,275 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span></div></div>
<div class="viewcode-block" id="EvenniaCommandTestMixin"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaCommandTestMixin">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.server.portal.portal.LoopingCall&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">MagicMock</span><span class="p">())</span>
<span class="k">class</span> <span class="nc">EvenniaCommandTestMixin</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Mixin to add to a test in order to provide the `.call` helper for</span>
<span class="sd"> testing the execution and returns of a command.</span>
<span class="sd"> Tests a Command by running it and comparing what messages it sends with</span>
<span class="sd"> expected values. This tests without actually spinning up the cmdhandler</span>
<span class="sd"> for every test, which is more controlled.</span>
<span class="sd"> Example:</span>
<span class="sd"> ::</span>
<span class="sd"> from commands.echo import CmdEcho</span>
<span class="sd"> class MyCommandTest(EvenniaTest, CommandTestMixin):</span>
<span class="sd"> def test_echo(self):</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="sd"> Test that the echo command really returns</span>
<span class="sd"> what you pass into it.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="sd"> self.call(MyCommand(), &quot;hello world!&quot;,</span>
<span class="sd"> &quot;You hear your echo: &#39;Hello world!&#39;&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># formatting for .call&#39;s error message</span>
<span class="n">_ERROR_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">=========================== Wanted message ===================================</span>
<span class="si">{expected_msg}</span><span class="s2"></span>
<span class="s2">=========================== Returned message =================================</span>
<span class="si">{returned_msg}</span><span class="s2"></span>
<span class="s2">==============================================================================</span>
<span class="s2">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
<div class="viewcode-block" id="EvenniaCommandTestMixin.call"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaCommandTestMixin.call">[docs]</a> <span class="k">def</span> <span class="nf">call</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">cmdobj</span><span class="p">,</span>
<span class="n">input_args</span><span class="p">,</span>
<span class="n">msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cmdset</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">noansi</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">raw_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test a command by assigning all the needed properties to a cmdobj and</span>
<span class="sd"> running the sequence. The resulting `.msg` calls will be mocked and</span>
<span class="sd"> the text= calls to them compared to a expected output.</span>
<span class="sd"> Args:</span>
<span class="sd"> cmdobj (Command): The command object to use.</span>
<span class="sd"> input_args (str): This should be the full input the Command should</span>
<span class="sd"> see, such as &#39;look here&#39;. This will become `.args` for the Command</span>
<span class="sd"> instance to parse.</span>
<span class="sd"> msg (str or dict, optional): This is the expected return value(s)</span>
<span class="sd"> returned through `caller.msg(text=...)` calls in the command. If a string, the</span>
<span class="sd"> receiver is controlled with the `receiver` kwarg (defaults to `caller`).</span>
<span class="sd"> If this is a `dict`, it is a mapping</span>
<span class="sd"> `{receiver1: &quot;expected1&quot;, receiver2: &quot;expected2&quot;,...}` and `receiver` is</span>
<span class="sd"> ignored. The message(s) are compared with the actual messages returned</span>
<span class="sd"> to the receiver(s) as the Command runs. Each check uses `.startswith`,</span>
<span class="sd"> so you can choose to only include the first part of the</span>
<span class="sd"> returned message if that&#39;s enough to verify a correct result. EvMenu</span>
<span class="sd"> decorations (like borders) are stripped and should not be included. This</span>
<span class="sd"> should also not include color tags unless `noansi=False`.</span>
<span class="sd"> If the command returns texts in multiple separate `.msg`-</span>
<span class="sd"> calls to a receiver, separate these with `|` if `noansi=True`</span>
<span class="sd"> (default) and `||` if `noansi=False`. If no `msg` is given (`None`),</span>
<span class="sd"> then no automatic comparison will be done.</span>
<span class="sd"> cmdset (str, optional): If given, make `.cmdset` available on the Command</span>
<span class="sd"> instance as it runs. While `.cmdset` is normally available on the</span>
<span class="sd"> Command instance by default, this is usually only used by</span>
<span class="sd"> commands that explicitly operates/displays cmdsets, like</span>
<span class="sd"> `examine`.</span>
<span class="sd"> noansi (str, optional): By default the color tags of the `msg` is</span>
<span class="sd"> ignored, this makes them significant. If unset, `msg` must contain</span>
<span class="sd"> the same color tags as the actual return message.</span>
<span class="sd"> caller (Object or Account, optional): By default `self.char1` is used as the</span>
<span class="sd"> command-caller (the `.caller` property on the Command). This allows to</span>
<span class="sd"> execute with another caller, most commonly an Account.</span>
<span class="sd"> receiver (Object or Account, optional): This is the object to receive the</span>
<span class="sd"> return messages we want to test. By default this is the same as `caller`</span>
<span class="sd"> (which in turn defaults to is `self.char1`). Note that if `msg` is</span>
<span class="sd"> a `dict`, this is ignored since the receiver is already specified there.</span>
<span class="sd"> cmdstring (str, optional): Normally this is the Command&#39;s `key`.</span>
<span class="sd"> This allows for tweaking the `.cmdname` property of the</span>
<span class="sd"> Command`. This isb used for commands with multiple aliases,</span>
<span class="sd"> where the command explicitly checs which alias was used to</span>
<span class="sd"> determine its functionality.</span>
<span class="sd"> obj (str, optional): This sets the `.obj` property of the Command - the</span>
<span class="sd"> object on which the Command &#39;sits&#39;. By default this is the same as `caller`.</span>
<span class="sd"> This can be used for testing on-object Command interactions.</span>
<span class="sd"> inputs (list, optional): A list of strings to pass to functions that pause to</span>
<span class="sd"> take input from the user (normally using `@interactive` and</span>
<span class="sd"> `ret = yield(question)` or `evmenu.get_input`). Each element of the</span>
<span class="sd"> list will be passed into the command as if the user wrote that at the prompt.</span>
<span class="sd"> raw_string (str, optional): Normally the `.raw_string` property is set as</span>
<span class="sd"> a combination of your `key/cmdname` and `input_args`. This allows</span>
<span class="sd"> direct control of what this is, for example for testing edge cases</span>
<span class="sd"> or malformed inputs.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str or dict: The message sent to `receiver`, or a dict of</span>
<span class="sd"> `{receiver: &quot;msg&quot;, ...}` if multiple are given. This is usually</span>
<span class="sd"> only used with `msg=None` to do the validation externally.</span>
<span class="sd"> Raises:</span>
<span class="sd"> AssertionError: If the returns of `.msg` calls (tested with `.startswith`) does not</span>
<span class="sd"> match `expected_input`.</span>
<span class="sd"> Notes:</span>
<span class="sd"> As part of the tests, all methods of the Command will be called in</span>
<span class="sd"> the proper order:</span>
<span class="sd"> - cmdobj.at_pre_cmd()</span>
<span class="sd"> - cmdobj.parse()</span>
<span class="sd"> - cmdobj.func()</span>
<span class="sd"> - cmdobj.at_post_cmd()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># The `self.char1` is created in the `EvenniaTest` base along with</span>
<span class="c1"># other helper objects like self.room and self.obj</span>
<span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span> <span class="k">if</span> <span class="n">caller</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span> <span class="o">=</span> <span class="n">cmdstring</span> <span class="k">if</span> <span class="n">cmdstring</span> <span class="k">else</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">key</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">raw_cmdname</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdname</span> <span class="c1"># deprecated</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">input_args</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">cmdset</span> <span class="o">=</span> <span class="n">cmdset</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">session_from_sessid</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span> <span class="k">if</span> <span class="n">raw_string</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">input_args</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span> <span class="ow">or</span> <span class="p">(</span><span class="n">caller</span> <span class="k">if</span> <span class="n">caller</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>
<span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span> <span class="ow">or</span> <span class="p">[]</span>
<span class="c1"># set up receivers</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># a mapping {receiver: msg, ...}</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">recv</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">msg</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">recv</span><span class="p">,</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">msg</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># a single expected string and thus a single receiver (defaults to caller)</span>
<span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span> <span class="k">if</span> <span class="n">receiver</span> <span class="k">else</span> <span class="n">caller</span>
<span class="n">receiver_mapping</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">unmocked_msg_methods</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">receiver_mapping</span><span class="p">:</span>
<span class="c1"># save the old .msg method so we can get it back</span>
<span class="c1"># cleanly after the test</span>
<span class="n">unmocked_msg_methods</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">msg</span>
<span class="c1"># replace normal `.msg` with a mock</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="c1"># Run the methods of the Command. This mimics what happens in the</span>
<span class="c1"># cmdhandler. This will have the mocked .msg be called as part of the</span>
<span class="c1"># execution. Mocks remembers what was sent to them so we will be able</span>
<span class="c1"># to retrieve what was sent later.</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">at_pre_cmd</span><span class="p">():</span>
<span class="k">return</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">func</span><span class="p">()</span>
<span class="c1"># handle func&#39;s with yield in them (making them generators)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">GeneratorType</span><span class="p">):</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">if</span> <span class="n">inputs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">inp</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># this mimics a user&#39;s reply to a prompt</span>
<span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># non-input yield, like yield(10). We don&#39;t pause</span>
<span class="c1"># but fire it immediately.</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">at_post_cmd</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">except</span> <span class="n">InterruptCommand</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">for</span> <span class="n">inp</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
<span class="c1"># if there are any inputs left, we may have a non-generator</span>
<span class="c1"># input to handle (get_input/ask_yes_no that uses a separate</span>
<span class="c1"># cmdset rather than a yield</span>
<span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="c1"># At this point the mocked .msg methods on each receiver will have</span>
<span class="c1"># stored all calls made to them (that&#39;s a basic function of the Mock</span>
<span class="c1"># class). We will not extract them and compare to what we expected to</span>
<span class="c1"># go to each receiver.</span>
<span class="n">returned_msgs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">expected_msg</span> <span class="ow">in</span> <span class="n">receiver_mapping</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="c1"># get the stored messages from the Mock with Mock.mock_calls.</span>
<span class="n">stored_msg</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="n">to_str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">))</span>
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">mock_calls</span>
<span class="p">]</span>
<span class="c1"># we can return this now, we are done using the mock</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">unmocked_msg_methods</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span>
<span class="c1"># Get the first element of a tuple if msg received a tuple instead of a string</span>
<span class="n">stored_msg</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">smsg</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">smsg</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">smsg</span><span class="p">)</span> <span class="k">for</span> <span class="n">smsg</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">]</span>
<span class="k">if</span> <span class="n">expected_msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># no expected_msg; just build the returned_msgs dict</span>
<span class="n">returned_msg</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">)</span>
<span class="n">returned_msgs</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">ansi</span><span class="o">.</span><span class="n">parse_ansi</span><span class="p">(</span><span class="n">returned_msg</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">noansi</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># compare messages to expected</span>
<span class="c1"># set our separator for returned messages based on parsing ansi or not</span>
<span class="n">msg_sep</span> <span class="o">=</span> <span class="s2">&quot;|&quot;</span> <span class="k">if</span> <span class="n">noansi</span> <span class="k">else</span> <span class="s2">&quot;||&quot;</span>
<span class="c1"># We remove Evmenu decorations since that just makes it harder</span>
<span class="c1"># to write the comparison string. We also strip ansi before this</span>
<span class="c1"># comparison since otherwise it would mess with the regex.</span>
<span class="n">returned_msg</span> <span class="o">=</span> <span class="n">msg_sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">_RE_STRIP_EVMENU</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span>
<span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">ansi</span><span class="o">.</span><span class="n">parse_ansi</span><span class="p">(</span><span class="n">mess</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">noansi</span><span class="p">))</span>
<span class="k">for</span> <span class="n">mess</span> <span class="ow">in</span> <span class="n">stored_msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="c1"># this is the actual test</span>
<span class="k">if</span> <span class="n">expected_msg</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="ow">and</span> <span class="n">returned_msg</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">returned_msg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">expected_msg</span><span class="p">):</span>
<span class="c1"># failed the test</span>
<span class="k">raise</span> <span class="ne">AssertionError</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ERROR_FORMAT</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">expected_msg</span><span class="o">=</span><span class="n">expected_msg</span><span class="p">,</span> <span class="n">returned_msg</span><span class="o">=</span><span class="n">returned_msg</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># passed!</span>
<span class="n">returned_msgs</span><span class="p">[</span><span class="n">receiver</span><span class="p">]</span> <span class="o">=</span> <span class="n">returned_msg</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">returned_msgs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">returned_msgs</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">returned_msgs</span></div></div>
<span class="c1"># Base testing classes</span>
<div class="viewcode-block" id="BaseEvenniaTestCase"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.BaseEvenniaTestCase">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span><span class="o">**</span><span class="n">DEFAULT_SETTINGS</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">BaseEvenniaTestCase</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base test (with no default objects) but with</span>
<span class="sd"> enforced default settings.</span>
<span class="sd"> Base test (with no default objects) but with enforced default settings.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="EvenniaTestCase"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestCase">[docs]</a><span class="k">class</span> <span class="nc">EvenniaTestCase</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For use with gamedir settings; Just like the normal test case, only for naming consistency.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="BaseEvenniaTest"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.BaseEvenniaTest">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span><span class="o">**</span><span class="n">DEFAULT_SETTINGS</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">BaseEvenniaTest</span><span class="p">(</span><span class="n">EvenniaTestMixin</span><span class="p">,</span> <span class="n">TestCase</span><span class="p">):</span>
@ -299,7 +591,6 @@
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="EvenniaTest"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTest">[docs]</a><span class="k">class</span> <span class="nc">EvenniaTest</span><span class="p">(</span><span class="n">EvenniaTestMixin</span><span class="p">,</span> <span class="n">TestCase</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This test class is intended for inheriting in mygame tests.</span>
@ -314,6 +605,31 @@
<span class="n">exit_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ROOM_TYPECLASS</span>
<span class="n">script_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span></div>
<div class="viewcode-block" id="BaseEvenniaCommandTest"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.BaseEvenniaCommandTest">[docs]</a><span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.account.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.admin.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.batchprocess.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.building.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.comms.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.general.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.help.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.syscommands.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.system.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.unloggedin.COMMAND_DEFAULT_CLASS&quot;</span><span class="p">,</span> <span class="n">MuxCommand</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">BaseEvenniaCommandTest</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">EvenniaCommandTestMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Commands only using the default settings.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="EvenniaCommandTest"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaCommandTest">[docs]</a><span class="k">class</span> <span class="nc">EvenniaCommandTest</span><span class="p">(</span><span class="n">EvenniaTest</span><span class="p">,</span> <span class="n">EvenniaCommandTestMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parent class to inherit from - makes tests use your own</span>
<span class="sd"> classes and settings in mygame.</span>
<span class="sd"> &quot;&quot;&quot;</span></div>
</pre></div>
<div class="clearer"></div>