evennia/docs/1.0-dev/_modules/evennia/commands/default/tests.html
2021-12-13 19:05:55 +01:00

2282 lines
No EOL
344 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.commands.default.tests &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.tests</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.commands.default.tests</h1><div class="highlight"><pre>
<span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> ** OBS - this is not a normal command module! **</span>
<span class="sd"> ** You cannot import anything in this module as a command! **</span>
<span class="sd">This is part of the Evennia unittest framework, for testing the</span>
<span class="sd">stability and integrity of the codebase during updates. This module</span>
<span class="sd">test the default command set. It is instantiated by the</span>
<span class="sd">evennia/objects/tests.py module, which in turn is run by as part of the</span>
<span class="sd">main test suite started with</span>
<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>
<span class="kn">from</span> <span class="nn">parameterized</span> <span class="kn">import</span> <span class="n">parameterized</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">twisted.internet</span> <span class="kn">import</span> <span class="n">task</span>
<span class="kn">from</span> <span class="nn">unittest.mock</span> <span class="kn">import</span> <span class="n">patch</span><span class="p">,</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">MagicMock</span>
<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">EvenniaTest</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>
<span class="n">system</span><span class="p">,</span>
<span class="n">admin</span><span class="p">,</span>
<span class="n">account</span><span class="p">,</span>
<span class="n">building</span><span class="p">,</span>
<span class="n">batchprocess</span><span class="p">,</span>
<span class="n">comms</span><span class="p">,</span>
<span class="n">unloggedin</span><span class="p">,</span>
<span class="n">syscommands</span><span class="p">,</span>
<span class="p">)</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">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="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="CommandTest"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CommandTest">[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">CommandTest</span><span class="p">(</span><span class="n">EvenniaTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</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(CommandTest):</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="CommandTest.call"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CommandTest.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>
<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">CommandTest</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>
<div class="viewcode-block" id="TestGeneral.test_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_home">[docs]</a> <span class="k">def</span> <span class="nf">test_home</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">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You are already home&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_inventory"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_inventory">[docs]</a> <span class="k">def</span> <span class="nf">test_inventory</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">general</span><span class="o">.</span><span class="n">CmdInventory</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You are not carrying anything.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_pose"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_pose">[docs]</a> <span class="k">def</span> <span class="nf">test_pose</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">general</span><span class="o">.</span><span class="n">CmdPose</span><span class="p">(),</span> <span class="s2">&quot;looks around&quot;</span><span class="p">,</span> <span class="s2">&quot;Char looks around&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_nick"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_nick">[docs]</a> <span class="k">def</span> <span class="nf">test_nick</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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span>
<span class="s2">&quot;testalias = testaliasedstring1&quot;</span><span class="p">,</span>
<span class="s2">&quot;Inputline-nick &#39;testalias&#39; mapped to &#39;testaliasedstring1&#39;.&quot;</span><span class="p">,</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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span>
<span class="s2">&quot;/account testalias = testaliasedstring2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Account-nick &#39;testalias&#39; mapped to &#39;testaliasedstring2&#39;.&quot;</span><span class="p">,</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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span>
<span class="s2">&quot;/object testalias = testaliasedstring3&quot;</span><span class="p">,</span>
<span class="s2">&quot;Object-nick &#39;testalias&#39; mapped to &#39;testaliasedstring3&#39;.&quot;</span><span class="p">,</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="s2">&quot;testaliasedstring1&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">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&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="s2">&quot;testaliasedstring2&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">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;account&quot;</span><span class="p">)</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="kc">None</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">account</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;account&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="s2">&quot;testaliasedstring3&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">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;testalias&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestGeneral.test_get_and_drop"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_get_and_drop">[docs]</a> <span class="k">def</span> <span class="nf">test_get_and_drop</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">general</span><span class="o">.</span><span class="n">CmdGet</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You pick up Obj.&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">general</span><span class="o">.</span><span class="n">CmdDrop</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You drop Obj.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_give"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_give">[docs]</a> <span class="k">def</span> <span class="nf">test_give</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">general</span><span class="o">.</span><span class="n">CmdGive</span><span class="p">(),</span> <span class="s2">&quot;Obj to Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;You aren&#39;t carrying Obj.&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">general</span><span class="o">.</span><span class="n">CmdGive</span><span class="p">(),</span> <span class="s2">&quot;Obj = Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;You aren&#39;t carrying Obj.&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">general</span><span class="o">.</span><span class="n">CmdGet</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You pick up Obj.&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">general</span><span class="o">.</span><span class="n">CmdGive</span><span class="p">(),</span> <span class="s2">&quot;Obj to Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;You give&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">general</span><span class="o">.</span><span class="n">CmdGive</span><span class="p">(),</span> <span class="s2">&quot;Obj = Char&quot;</span><span class="p">,</span> <span class="s2">&quot;You give&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">char2</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_mux_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_mux_command">[docs]</a> <span class="k">def</span> <span class="nf">test_mux_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">CmdTest</span><span class="p">(</span><span class="n">MuxCommand</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;test&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="s2">&quot;testswitch&quot;</span><span class="p">,</span> <span class="s2">&quot;testswitch2&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">func</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">msg</span><span class="p">(</span><span class="s2">&quot;Switches matched: </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="bp">self</span><span class="o">.</span><span class="n">switches</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">CmdTest</span><span class="p">(),</span>
<span class="s2">&quot;/test/testswitch/testswitch2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Switches matched: [&#39;test&#39;, &#39;testswitch&#39;, &#39;testswitch2&#39;]&quot;</span><span class="p">,</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">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;/test&quot;</span><span class="p">,</span> <span class="s2">&quot;Switches matched: [&#39;test&#39;]&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">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;/test/testswitch&quot;</span><span class="p">,</span> <span class="s2">&quot;Switches matched: [&#39;test&#39;, &#39;testswitch&#39;]&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">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;/testswitch/testswitch2&quot;</span><span class="p">,</span> <span class="s2">&quot;Switches matched: [&#39;testswitch&#39;, &#39;testswitch2&#39;]&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">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;/testswitch&quot;</span><span class="p">,</span> <span class="s2">&quot;Switches matched: [&#39;testswitch&#39;]&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">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;/testswitch2&quot;</span><span class="p">,</span> <span class="s2">&quot;Switches matched: [&#39;testswitch2&#39;]&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">CmdTest</span><span class="p">(),</span>
<span class="s2">&quot;/t&quot;</span><span class="p">,</span>
<span class="s2">&quot;test: Ambiguous switch supplied: &quot;</span>
<span class="s2">&quot;Did you mean /test or /testswitch or /testswitch2?|Switches matched: []&quot;</span><span class="p">,</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">CmdTest</span><span class="p">(),</span>
<span class="s2">&quot;/tests&quot;</span><span class="p">,</span>
<span class="s2">&quot;test: Ambiguous switch supplied: &quot;</span>
<span class="s2">&quot;Did you mean /testswitch or /testswitch2?|Switches matched: []&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_say"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_say">[docs]</a> <span class="k">def</span> <span class="nf">test_say</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">general</span><span class="o">.</span><span class="n">CmdSay</span><span class="p">(),</span> <span class="s2">&quot;Testing&quot;</span><span class="p">,</span> <span class="s1">&#39;You say, &quot;Testing&quot;&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_whisper"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_whisper">[docs]</a> <span class="k">def</span> <span class="nf">test_whisper</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">general</span><span class="o">.</span><span class="n">CmdWhisper</span><span class="p">(),</span>
<span class="s2">&quot;Obj = Testing&quot;</span><span class="p">,</span>
<span class="s1">&#39;You whisper to Obj, &quot;Testing&quot;&#39;</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">char2</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_access"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_access">[docs]</a> <span class="k">def</span> <span class="nf">test_access</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">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">CommandTest</span><span class="p">):</span>
<span class="n">maxDiff</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="TestHelp.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.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="c1"># we need to set up a logger here since lunr takes over the logger otherwise</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestHelp.tearDown"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</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">tearDown</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="n">logging</span><span class="o">.</span><span class="n">disable</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestHelp.test_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.test_help">[docs]</a> <span class="k">def</span> <span class="nf">test_help</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">help_module</span><span class="o">.</span><span class="n">CmdHelp</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Commands&quot;</span><span class="p">,</span> <span class="n">cmdset</span><span class="o">=</span><span class="n">CharacterCmdSet</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestHelp.test_set_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.test_set_help">[docs]</a> <span class="k">def</span> <span class="nf">test_set_help</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">help_module</span><span class="o">.</span><span class="n">CmdSetHelp</span><span class="p">(),</span>
<span class="s2">&quot;testhelp, General = This is a test&quot;</span><span class="p">,</span>
<span class="s2">&quot;Topic &#39;testhelp&#39; was successfully created.&quot;</span><span class="p">,</span>
<span class="n">cmdset</span><span class="o">=</span><span class="n">CharacterCmdSet</span><span class="p">()</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">help_module</span><span class="o">.</span><span class="n">CmdHelp</span><span class="p">(),</span> <span class="s2">&quot;testhelp&quot;</span><span class="p">,</span> <span class="s2">&quot;Help for testhelp&quot;</span><span class="p">,</span> <span class="n">cmdset</span><span class="o">=</span><span class="n">CharacterCmdSet</span><span class="p">())</span></div>
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
<span class="p">(</span><span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="c1"># main help entry</span>
<span class="s2">&quot;Help for test</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Main help text</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/creating extra stuff&quot;</span>
<span class="s2">&quot; test/something else&quot;</span>
<span class="s2">&quot; test/more&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/creating extra stuff&quot;</span><span class="p">,</span> <span class="c1"># subtopic, full match</span>
<span class="s2">&quot;Help for test/creating extra stuff</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Help on creating extra stuff.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/creating extra stuff/subsubtopic</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/creating&quot;</span><span class="p">,</span> <span class="c1"># startswith-match</span>
<span class="s2">&quot;Help for test/creating extra stuff</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Help on creating extra stuff.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/creating extra stuff/subsubtopic</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/extra&quot;</span><span class="p">,</span> <span class="c1"># partial match</span>
<span class="s2">&quot;Help for test/creating extra stuff</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Help on creating extra stuff.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/creating extra stuff/subsubtopic</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/extra/subsubtopic&quot;</span><span class="p">,</span> <span class="c1"># partial subsub-match</span>
<span class="s2">&quot;Help for test/creating extra stuff/subsubtopic</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;A subsubtopic text&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/creating extra/subsub&quot;</span><span class="p">,</span> <span class="c1"># partial subsub-match</span>
<span class="s2">&quot;Help for test/creating extra stuff/subsubtopic</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;A subsubtopic text&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/Something else&quot;</span><span class="p">,</span> <span class="c1"># case</span>
<span class="s2">&quot;Help for test/something else</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Something else&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/More&quot;</span><span class="p">,</span> <span class="c1"># case</span>
<span class="s2">&quot;Help for test/more</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Another text</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/more/second-more&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/More/Second-more&quot;</span><span class="p">,</span>
<span class="s2">&quot;Help for test/more/second-more</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;The Second More text.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/more/second-more/more again&quot;</span>
<span class="s2">&quot; test/more/second-more/third more&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/More/-more&quot;</span><span class="p">,</span> <span class="c1"># partial match</span>
<span class="s2">&quot;Help for test/more/second-more</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;The Second More text.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Subtopics:</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot; test/more/second-more/more again&quot;</span>
<span class="s2">&quot; test/more/second-more/third more&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/more/second/more again&quot;</span><span class="p">,</span>
<span class="s2">&quot;Help for test/more/second-more/more again</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Even more text.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/more/second/third&quot;</span><span class="p">,</span>
<span class="s2">&quot;Help for test/more/second-more/third more</span><span class="se">\n\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Third more text</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">),</span>
<span class="p">])</span>
<span class="k">def</span> <span class="nf">test_subtopic_fetch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">helparg</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Check retrieval of subtopics.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">class</span> <span class="nc">TestCmd</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Main help text</span>
<span class="sd"> # SUBTOPICS</span>
<span class="sd"> ## creating extra stuff</span>
<span class="sd"> Help on creating extra stuff.</span>
<span class="sd"> ### subsubtopic</span>
<span class="sd"> A subsubtopic text</span>
<span class="sd"> ## Something else</span>
<span class="sd"> Something else</span>
<span class="sd"> ## More</span>
<span class="sd"> Another text</span>
<span class="sd"> ### Second-More</span>
<span class="sd"> The Second More text.</span>
<span class="sd"> #### More again</span>
<span class="sd"> Even more text.</span>
<span class="sd"> #### Third more</span>
<span class="sd"> Third more text</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;test&quot;</span>
<span class="k">class</span> <span class="nc">TestCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">at_cmdset_creation</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">add</span><span class="p">(</span><span class="n">TestCmd</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">help_module</span><span class="o">.</span><span class="n">CmdHelp</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">help_module</span><span class="o">.</span><span class="n">CmdHelp</span><span class="p">(),</span>
<span class="n">helparg</span><span class="p">,</span>
<span class="n">expected</span><span class="p">,</span>
<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">CommandTest</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>
<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">CmdPy</span><span class="p">(),</span> <span class="s2">&quot;1+2&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&gt; 1+2|3&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">system</span><span class="o">.</span><span class="n">CmdPy</span><span class="p">(),</span> <span class="s2">&quot;/clientraw 1+2&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&gt; 1+2|3&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestSystem.test_scripts"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_scripts">[docs]</a> <span class="k">def</span> <span class="nf">test_scripts</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;dbref &quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestSystem.test_objects"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_objects">[docs]</a> <span class="k">def</span> <span class="nf">test_objects</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">building</span><span class="o">.</span><span class="n">CmdObjects</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Object subtype totals&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestSystem.test_about"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_about">[docs]</a> <span class="k">def</span> <span class="nf">test_about</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">system</span><span class="o">.</span><span class="n">CmdAbout</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestSystem.test_server_load"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_server_load">[docs]</a> <span class="k">def</span> <span class="nf">test_server_load</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">system</span><span class="o">.</span><span class="n">CmdServerLoad</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Server CPU and Memory load:&quot;</span><span class="p">)</span></div></div>
<span class="n">_TASK_HANDLER</span> <span class="o">=</span> <span class="kc">None</span>
<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">CommandTest</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>
<span class="c1"># get a reference of TASK_HANDLER</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">=</span> <span class="mi">5</span>
<span class="k">global</span> <span class="n">_TASK_HANDLER</span>
<span class="k">if</span> <span class="n">_TASK_HANDLER</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.taskhandler</span> <span class="kn">import</span> <span class="n">TASK_HANDLER</span> <span class="k">as</span> <span class="n">_TASK_HANDLER</span>
<span class="n">_TASK_HANDLER</span><span class="o">.</span><span class="n">clock</span> <span class="o">=</span> <span class="n">task</span><span class="o">.</span><span class="n">Clock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span> <span class="o">=</span> <span class="n">_TASK_HANDLER</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span><span class="p">,</span> <span class="n">func_test_cmd_tasks</span><span class="p">)</span>
<span class="n">task_args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">(),</span> <span class="kc">False</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdTasks.tearDown"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</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">tearDown</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_no_tasks"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_no_tasks">[docs]</a> <span class="k">def</span> <span class="nf">test_no_tasks</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">task_handler</span><span class="o">.</span><span class="n">clear</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;There are no active tasks.&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_active_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_active_task">[docs]</a> <span class="k">def</span> <span class="nf">test_active_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ptrn</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;Task ID&#39;</span><span class="p">,</span> <span class="s1">&#39;Completion&#39;</span><span class="p">,</span> <span class="s1">&#39;Date&#39;</span><span class="p">,</span> <span class="s1">&#39;Function&#39;</span><span class="p">,</span> <span class="s1">&#39;KWARGS&#39;</span><span class="p">,</span> <span class="s1">&#39;persisten&#39;</span><span class="p">,</span>
<span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+/\d+/\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\:\d+&#39;</span><span class="p">,</span> <span class="s1">&#39;func_test&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="s1">&#39;False&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="n">ptrn</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_persistent_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_persistent_task">[docs]</a> <span class="k">def</span> <span class="nf">test_persistent_task</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">task_handler</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span><span class="p">,</span> <span class="n">func_test_cmd_tasks</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;True&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_pause_unpause"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_pause_unpause">[docs]</a> <span class="k">def</span> <span class="nf">test_pause_unpause</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># test pause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/pause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Pause task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">paused</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># test unpause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/unpause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Unpause task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># verify task continues after unpause</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</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">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_do_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_do_task">[docs]</a> <span class="k">def</span> <span class="nf">test_do_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/do_task </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Do_task task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_remove"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_remove">[docs]</a> <span class="k">def</span> <span class="nf">test_remove</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/remove </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Remove task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_call"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_call">[docs]</a> <span class="k">def</span> <span class="nf">test_call</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/call </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Call task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># make certain the task is still active</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span>
<span class="c1"># go past delay time, the task should call do_task and remove itself after calling.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_cancel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_cancel">[docs]</a> <span class="k">def</span> <span class="nf">test_cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/cancel </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Cancel task 1 with completion date&#39;</span>
<span class="n">cmd_result</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">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_func_name_manipulation"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_func_name_manipulation">[docs]</a> <span class="k">def</span> <span class="nf">test_func_name_manipulation</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">task_handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span><span class="p">,</span> <span class="n">func_test_cmd_tasks</span><span class="p">)</span> <span class="c1"># add an extra task</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/remove func_test_cmd_tasks&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Task action remove completed on task ID 1.|The task function remove returned: True|&#39;</span> \
<span class="s1">&#39;Task action remove completed on task ID 2.|The task function remove returned: True&#39;</span>
<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="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">tasks</span><span class="p">)</span> <span class="c1"># no tasks should exist.</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_wrong_func_name"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_wrong_func_name">[docs]</a> <span class="k">def</span> <span class="nf">test_wrong_func_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/remove intentional_fail&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;No tasks deferring function name intentional_fail found.&#39;</span>
<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="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_no_input"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_no_input">[docs]</a> <span class="k">def</span> <span class="nf">test_no_input</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/cancel </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<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="n">args</span><span class="p">)</span>
<span class="c1"># task should complete since no input was received</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_responce_of_yes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_responce_of_yes">[docs]</a> <span class="k">def</span> <span class="nf">test_responce_of_yes</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">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</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">msg</span> <span class="o">=</span> <span class="n">Mock</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</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="n">text</span> <span class="o">+=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</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">text</span><span class="p">,</span> <span class="s1">&#39;cancel request completed.The task function cancel returned: True&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_task_complete_waiting_input"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_task_complete_waiting_input">[docs]</a> <span class="k">def</span> <span class="nf">test_task_complete_waiting_input</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test for task completing while waiting for input.&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">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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</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">msg</span> <span class="o">=</span> <span class="n">Mock</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</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="n">text</span> <span class="o">+=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</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">text</span><span class="p">,</span> <span class="s1">&#39;Task completed while waiting for input.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_new_task_waiting_input"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_new_task_waiting_input">[docs]</a> <span class="k">def</span> <span class="nf">test_new_task_waiting_input</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test task completing than a new task with the same ID being made while waitinf for input.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</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><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 </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span><span class="p">,</span> <span class="n">func_test_cmd_tasks</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</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">char1</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="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</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="n">text</span> <span class="o">+=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</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">text</span><span class="p">,</span> <span class="s1">&#39;Task completed while waiting for input.&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_misformed_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_misformed_command">[docs]</a> <span class="k">def</span> <span class="nf">test_misformed_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Task command misformed.|Proper format tasks[/switch] &#39;</span> \
<span class="s1">&#39;[function name or task id]&#39;</span>
<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">CommandTest</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>
<div class="viewcode-block" id="TestAdmin.test_perm"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_perm">[docs]</a> <span class="k">def</span> <span class="nf">test_perm</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">CmdPerm</span><span class="p">(),</span>
<span class="s2">&quot;Obj = Builder&quot;</span><span class="p">,</span>
<span class="s2">&quot;Permission &#39;Builder&#39; given to Obj (the Object/Character).&quot;</span><span class="p">,</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">CmdPerm</span><span class="p">(),</span>
<span class="s2">&quot;Char2 = Builder&quot;</span><span class="p">,</span>
<span class="s2">&quot;Permission &#39;Builder&#39; given to Char2 (the Object/Character).&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestAdmin.test_wall"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_wall">[docs]</a> <span class="k">def</span> <span class="nf">test_wall</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">CmdWall</span><span class="p">(),</span> <span class="s2">&quot;Test&quot;</span><span class="p">,</span> <span class="s2">&quot;Announcing to all connected sessions ...&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestAdmin.test_ban"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_ban">[docs]</a> <span class="k">def</span> <span class="nf">test_ban</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">CmdBan</span><span class="p">(),</span> <span class="s2">&quot;Char&quot;</span><span class="p">,</span> <span class="s2">&quot;Name-ban &#39;char&#39; was added. Use unban to reinstate.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestAdmin.test_force"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_force">[docs]</a> <span class="k">def</span> <span class="nf">test_force</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">char2</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">admin</span><span class="o">.</span><span class="n">CmdForce</span><span class="p">(),</span>
<span class="s2">&quot;Char2=say test&quot;</span><span class="p">,</span>
<span class="s1">&#39;Char2(#</span><span class="si">{}</span><span class="s1">) says, &quot;test&quot;|You have forced Char2 to: say test&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cid</span><span class="p">),</span>
<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">CommandTest</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>
<span class="n">account</span><span class="o">.</span><span class="n">CmdOOCLook</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You are out-of-character (OOC).&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="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">MULTISESSION_MODE</span> <span class="o">==</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>
<span class="n">account</span><span class="o">.</span><span class="n">CmdOOCLook</span><span class="p">(),</span>
<span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;Account TestAccount (you are OutofCharacter)&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="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_ooc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_ooc">[docs]</a> <span class="k">def</span> <span class="nf">test_ooc</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">account</span><span class="o">.</span><span class="n">CmdOOC</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You go OOC.&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></div>
<div class="viewcode-block" id="TestAccount.test_ic"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_ic">[docs]</a> <span class="k">def</span> <span class="nf">test_ic</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">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">unpuppet_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</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">account</span><span class="o">.</span><span class="n">CmdIC</span><span class="p">(),</span> <span class="s2">&quot;Char&quot;</span><span class="p">,</span> <span class="s2">&quot;You become Char.&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="n">receiver</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_ic__other_object"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_ic__other_object">[docs]</a> <span class="k">def</span> <span class="nf">test_ic__other_object</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">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">unpuppet_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</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">account</span><span class="o">.</span><span class="n">CmdIC</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You become Obj.&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="n">receiver</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">obj1</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_ic__nonaccess"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_ic__nonaccess">[docs]</a> <span class="k">def</span> <span class="nf">test_ic__nonaccess</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">account</span><span class="o">.</span><span class="n">unpuppet_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</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">account</span><span class="o">.</span><span class="n">CmdIC</span><span class="p">(),</span>
<span class="s2">&quot;Nonexistent&quot;</span><span class="p">,</span>
<span class="s2">&quot;That is not a valid character choice.&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="n">receiver</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="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_password"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_password">[docs]</a> <span class="k">def</span> <span class="nf">test_password</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">account</span><span class="o">.</span><span class="n">CmdPassword</span><span class="p">(),</span>
<span class="s2">&quot;testpassword = testpassword&quot;</span><span class="p">,</span>
<span class="s2">&quot;Password changed.&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="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_option"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_option">[docs]</a> <span class="k">def</span> <span class="nf">test_option</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">account</span><span class="o">.</span><span class="n">CmdOption</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Client settings&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></div>
<div class="viewcode-block" id="TestAccount.test_who"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_who">[docs]</a> <span class="k">def</span> <span class="nf">test_who</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">account</span><span class="o">.</span><span class="n">CmdWho</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Accounts:&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></div>
<div class="viewcode-block" id="TestAccount.test_quit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_quit">[docs]</a> <span class="k">def</span> <span class="nf">test_quit</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">account</span><span class="o">.</span><span class="n">CmdQuit</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Quitting. Hope to see you again, soon.&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></div>
<div class="viewcode-block" id="TestAccount.test_sessions"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_sessions">[docs]</a> <span class="k">def</span> <span class="nf">test_sessions</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">account</span><span class="o">.</span><span class="n">CmdSessions</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Your current session(s):&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></div>
<div class="viewcode-block" id="TestAccount.test_color_test"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_color_test">[docs]</a> <span class="k">def</span> <span class="nf">test_color_test</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">account</span><span class="o">.</span><span class="n">CmdColorTest</span><span class="p">(),</span> <span class="s2">&quot;ansi&quot;</span><span class="p">,</span> <span class="s2">&quot;ANSI colors:&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></div>
<div class="viewcode-block" id="TestAccount.test_char_create"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_char_create">[docs]</a> <span class="k">def</span> <span class="nf">test_char_create</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">account</span><span class="o">.</span><span class="n">CmdCharCreate</span><span class="p">(),</span>
<span class="s2">&quot;Test1=Test char&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created new character Test1. Use ic Test1 to enter the game&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="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_char_delete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_char_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_char_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Chardelete requires user input; this test is mainly to confirm</span>
<span class="c1"># whether permissions are being checked</span>
<span class="c1"># Add char to account playable characters</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>
<span class="c1"># Try deleting as Developer</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">account</span><span class="o">.</span><span class="n">CmdCharDelete</span><span class="p">(),</span>
<span class="s2">&quot;Char&quot;</span><span class="p">,</span>
<span class="s2">&quot;This will permanently destroy &#39;Char&#39;. This cannot be undone. Continue yes/[no]?&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="p">)</span>
<span class="c1"># Downgrade permissions on account</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Player&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;Developer&quot;</span><span class="p">)</span>
<span class="c1"># Set lock on character object to prevent deletion</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;delete:none()&quot;</span><span class="p">)</span>
<span class="c1"># Try deleting as Player</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">account</span><span class="o">.</span><span class="n">CmdCharDelete</span><span class="p">(),</span>
<span class="s2">&quot;Char&quot;</span><span class="p">,</span>
<span class="s2">&quot;You do not have permission to delete this character.&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="p">)</span>
<span class="c1"># Set lock on character object to allow self-delete</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;delete:pid(</span><span class="si">%i</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
<span class="c1"># Try deleting as Player again</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">account</span><span class="o">.</span><span class="n">CmdCharDelete</span><span class="p">(),</span>
<span class="s2">&quot;Char&quot;</span><span class="p">,</span>
<span class="s2">&quot;This will permanently destroy &#39;Char&#39;. This cannot be undone. Continue yes/[no]?&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="p">)</span></div>
<div class="viewcode-block" id="TestAccount.test_quell"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAccount.test_quell">[docs]</a> <span class="k">def</span> <span class="nf">test_quell</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">account</span><span class="o">.</span><span class="n">CmdQuell</span><span class="p">(),</span>
<span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;Quelling to current puppet&#39;s permissions (developer).&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="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">CommandTest</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>
<span class="n">building</span><span class="o">.</span><span class="n">CmdCreate</span><span class="p">(),</span>
<span class="s2">&quot;/d TestObj1&quot;</span><span class="p">,</span> <span class="c1"># /d switch is abbreviated form of /drop</span>
<span class="s2">&quot;You create a new </span><span class="si">%s</span><span class="s2">: TestObj1.&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdCreate</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdCreate</span><span class="p">(),</span>
<span class="s2">&quot;TestObj1;foo;bar&quot;</span><span class="p">,</span>
<span class="s2">&quot;You create a new </span><span class="si">%s</span><span class="s2">: TestObj1 (aliases: foo, bar).&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_examine"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_examine">[docs]</a> <span class="k">def</span> <span class="nf">test_examine</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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Name/key: Room&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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Name/key: Obj&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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Name/key: Obj&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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;*TestAccount&quot;</span><span class="p">,</span> <span class="s2">&quot;Name/key: TestAccount&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">db</span><span class="o">.</span><span class="n">test</span> <span class="o">=</span> <span class="s2">&quot;testval&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;self/test&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Char/test [category=None]:</span><span class="se">\n\n</span><span class="s2">testval&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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;NotFound&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;out&quot;</span><span class="p">,</span> <span class="s2">&quot;Name/key: out&quot;</span><span class="p">)</span>
<span class="c1"># escape inlinefuncs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">test2</span> <span class="o">=</span> <span class="s2">&quot;this is a $random() value.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span>
<span class="s2">&quot;self/test2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Char/test2 [category=None]:</span><span class="se">\n\n</span><span class="s2">this is a \$random() value.&quot;</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">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="vm">__class__</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">building</span><span class="o">.</span><span class="n">CmdExamine</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">account</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="vm">__class__</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">building</span><span class="o">.</span><span class="n">CmdExamine</span><span class="p">(),</span> <span class="s2">&quot;*TestAccount&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_set_obj_alias"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_set_obj_alias">[docs]</a> <span class="k">def</span> <span class="nf">test_set_obj_alias</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;Obj =&quot;</span><span class="p">,</span> <span class="s2">&quot;Cleared aliases from Obj&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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span>
<span class="s2">&quot;Obj = TestObj1b&quot;</span><span class="p">,</span>
<span class="s2">&quot;Alias(es) for &#39;Obj(#</span><span class="si">{}</span><span class="s2">)&#39; set to &#39;testobj1b&#39;.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oid</span><span class="p">),</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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;NotFound =&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Aliases for Obj(#</span><span class="si">{}</span><span class="s2">): &#39;testobj1b&#39;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oid</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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;Obj2 =&quot;</span><span class="p">,</span> <span class="s2">&quot;Cleared aliases from Obj2&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">building</span><span class="o">.</span><span class="n">CmdSetObjAlias</span><span class="p">(),</span> <span class="s2">&quot;Obj2 =&quot;</span><span class="p">,</span> <span class="s2">&quot;No aliases to clear.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_copy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_copy">[docs]</a> <span class="k">def</span> <span class="nf">test_copy</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">building</span><span class="o">.</span><span class="n">CmdCopy</span><span class="p">(),</span>
<span class="s2">&quot;Obj = TestObj2;TestObj2b, TestObj3;TestObj3b&quot;</span><span class="p">,</span>
<span class="s2">&quot;Copied Obj to &#39;TestObj3&#39; (aliases: [&#39;TestObj3b&#39;]&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdCopy</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdCopy</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Identical copy of Obj, named &#39;Obj_copy&#39; was created.&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">building</span><span class="o">.</span><span class="n">CmdCopy</span><span class="p">(),</span> <span class="s2">&quot;NotFound = Foo&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_attribute_commands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_attribute_commands">[docs]</a> <span class="k">def</span> <span class="nf">test_attribute_commands</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s1">&#39;Obj/test1=&quot;value1&quot;&#39;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test1 = &#39;value1&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s1">&#39;Obj2/test2=&quot;value2&quot;&#39;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj2/test2 = &#39;value2&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj2/test2&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj2/test2 = value2&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj2/NotFound&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj2 has no attribute &#39;notfound&#39;.&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.building.EvEditor&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_ed</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;/edit Obj2/test3&quot;</span><span class="p">)</span>
<span class="n">mock_ed</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">,</span> <span class="n">Anything</span><span class="p">,</span> <span class="n">Anything</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Obj2/test3&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s1">&#39;Obj2/test3=&quot;value3&quot;&#39;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj2/test3 = &#39;value3&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj2/test3 = &quot;</span><span class="p">,</span>
<span class="s2">&quot;Deleted attribute &#39;test3&#39; (= True) from Obj2.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdCpAttr</span><span class="p">(),</span>
<span class="s2">&quot;/copy Obj2/test2 = Obj2/test3&quot;</span><span class="p">,</span>
<span class="s1">&#39;@cpattr: Extra switch &quot;/copy&quot; ignored.|</span><span class="se">\n</span><span class="s1">Copied Obj2.test2 -&gt; Obj2.test3. &#39;</span>
<span class="s2">&quot;(value: &#39;value2&#39;)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdMvAttr</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdMvAttr</span><span class="p">(),</span> <span class="s2">&quot;Obj2/test2 = Obj/test3&quot;</span><span class="p">,</span> <span class="s2">&quot;Moved Obj2.test2 -&gt; Obj.test3&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">building</span><span class="o">.</span><span class="n">CmdCpAttr</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdCpAttr</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1 = Obj2/test3&quot;</span><span class="p">,</span> <span class="s2">&quot;Copied Obj.test1 -&gt; Obj2.test3&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">building</span><span class="o">.</span><span class="n">CmdWipe</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdWipe</span><span class="p">(),</span> <span class="s2">&quot;Obj2/test2/test3&quot;</span><span class="p">,</span> <span class="s2">&quot;Wiped attributes test2,test3 on Obj2.&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">building</span><span class="o">.</span><span class="n">CmdWipe</span><span class="p">(),</span> <span class="s2">&quot;Obj2&quot;</span><span class="p">,</span> <span class="s2">&quot;Wiped all attributes on Obj2.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_nested_attribute_commands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_nested_attribute_commands">[docs]</a> <span class="k">def</span> <span class="nf">test_nested_attribute_commands</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># list - adding white space proves real parsing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1=[1,2]&quot;</span><span class="p">,</span> <span class="s2">&quot;Created attribute Obj/test1 = [1, 2]&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1 = [1, 2]&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1[0] = 1&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1[1]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1[1] = 2&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[0] = 99&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test1 = [99, 2]&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1[0] = 99&quot;</span><span class="p">)</span>
<span class="c1"># list delete</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[0] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Deleted attribute &#39;test1[0]&#39; (= nested) from Obj.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test1[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1[0] = 2&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[1]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test1[1]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Delete non-existent</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[5] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test1[5]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Append</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[+] = 42&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test1 = [2, 42]&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test1[+0] = -1&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test1 = [-1, 2, 42]&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># dict - removing white space proves real parsing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2={ &#39;one&#39;: 1, &#39;two&#39;: 2 }&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test2 = {&#39;one&#39;: 1, &#39;two&#39;: 2}&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2 = {&#39;one&#39;: 1, &#39;two&#39;: 2}&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2[&#39;one&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2[&#39;one&#39;] = 1&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2[&#39;one]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2[&#39;one] = 1&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[&#39;one&#39;]=99&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 = {&#39;one&#39;: 99, &#39;two&#39;: 2}&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2[&#39;one&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2[&#39;one&#39;] = 99&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2[&#39;two&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2[&#39;two&#39;] = 2&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[+&#39;three&#39;]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test2[+&#39;three&#39;]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[+&#39;three&#39;] = 3&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 = {&#39;one&#39;: 99, &#39;two&#39;: 2, </span><span class="se">\&quot;</span><span class="s2">+&#39;three&#39;</span><span class="se">\&quot;</span><span class="s2">: 3}&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[+&#39;three&#39;] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Deleted attribute &#39;test2[+&#39;three&#39;]&#39; (= nested) from Obj.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[&#39;three&#39;]=3&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 = {&#39;one&#39;: 99, &#39;two&#39;: 2, &#39;three&#39;: 3}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Dict delete</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[&#39;two&#39;] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Deleted attribute &#39;test2[&#39;two&#39;]&#39; (= nested) from Obj.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[&#39;two&#39;]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test2[&#39;two&#39;]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test2&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test2 = {&#39;one&#39;: 99, &#39;three&#39;: 3}&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[0]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test2[0]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[&#39;five&#39;] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test2[&#39;five&#39;]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[+]=42&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 = {&#39;one&#39;: 99, &#39;three&#39;: 3, &#39;+&#39;: 42}&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test2[+1]=33&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 = {&#39;one&#39;: 99, &#39;three&#39;: 3, &#39;+&#39;: 42, &#39;+1&#39;: 33}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># tuple</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/tup = (1,2)&quot;</span><span class="p">,</span> <span class="s2">&quot;Created attribute Obj/tup = (1, 2)&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/tup[1] = 99&quot;</span><span class="p">,</span>
<span class="s2">&quot;&#39;tuple&#39; object does not support item assignment - (1, 2)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/tup[+] = 99&quot;</span><span class="p">,</span>
<span class="s2">&quot;&#39;tuple&#39; object does not support item assignment - (1, 2)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/tup[+1] = 99&quot;</span><span class="p">,</span>
<span class="s2">&quot;&#39;tuple&#39; object does not support item assignment - (1, 2)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="c1"># Special case for tuple, could have a better message</span>
<span class="s2">&quot;Obj/tup[1] = &quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;tup[1]&#39;. (Nested lookups attempted)&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Deaper nesting</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test3=[{&#39;one&#39;: 1}]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test3 = [{&#39;one&#39;: 1}]&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test3[0][&#39;one&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test3[0][&#39;one&#39;] = 1&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test3[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test3[0] = {&#39;one&#39;: 1}&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test3[0][&#39;one&#39;] =&quot;</span><span class="p">,</span>
<span class="s2">&quot;Deleted attribute &#39;test3[0][&#39;one&#39;]&#39; (= nested) from Obj.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test3[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test3[0] = </span><span class="si">{}</span><span class="s2">&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test3&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test3 = [</span><span class="si">{}</span><span class="s2">]&quot;</span><span class="p">)</span>
<span class="c1"># Naughty keys</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test4[0]=&#39;foo&#39;&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test4[0] = &#39;foo&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test4[0] = foo&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test4=[{&#39;one&#39;: 1}]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test4 = [{&#39;one&#39;: 1}]&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4[0][&#39;one&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test4[0][&#39;one&#39;] = 1&quot;</span>
<span class="p">)</span>
<span class="c1"># Prefer nested items</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test4[0] = {&#39;one&#39;: 1}&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4[0][&#39;one&#39;]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test4[0][&#39;one&#39;] = 1&quot;</span>
<span class="p">)</span>
<span class="c1"># Restored access</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdWipe</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4&quot;</span><span class="p">,</span> <span class="s2">&quot;Wiped attributes test4 on Obj.&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span> <span class="s2">&quot;Obj/test4[0]&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test4[0] = foo&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">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test4[0][&#39;one&#39;]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj has no attribute &#39;test4[0][&#39;one&#39;]&#39;.&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_split_nested_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_split_nested_attr">[docs]</a> <span class="k">def</span> <span class="nf">test_split_nested_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">split_nested_attr</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">()</span><span class="o">.</span><span class="n">split_nested_attr</span>
<span class="n">test_cases</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;test1&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test1&quot;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="s1">&#39;test2[&quot;dict&quot;]&#39;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test2&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;dict&quot;</span><span class="p">]),</span> <span class="p">(</span><span class="s1">&#39;test2[&quot;dict&quot;]&#39;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="c1"># Quotes not actually required</span>
<span class="s2">&quot;test3[dict]&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test3&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;dict&quot;</span><span class="p">]),</span> <span class="p">(</span><span class="s2">&quot;test3[dict]&quot;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="s1">&#39;test4[&quot;dict]&#39;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test4&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;dict&quot;</span><span class="p">]),</span> <span class="p">(</span><span class="s1">&#39;test4[&quot;dict]&#39;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="c1"># duplicate keys don&#39;t cause issues</span>
<span class="s2">&quot;test5[0][0]&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test5&quot;</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="s2">&quot;test5[0]&quot;</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="s2">&quot;test5[0][0]&quot;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="c1"># String ints preserved</span>
<span class="s1">&#39;test6[&quot;0&quot;][0]&#39;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test6&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;0&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="s1">&#39;test6[&quot;0&quot;]&#39;</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="s1">&#39;test6[&quot;0&quot;][0]&#39;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="c1"># Unmatched []</span>
<span class="s2">&quot;test7[dict&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;test7[dict&quot;</span><span class="p">,</span> <span class="p">[])],</span>
<span class="p">}</span>
<span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="n">test_cases</span><span class="o">.</span><span class="n">items</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="nb">list</span><span class="p">(</span><span class="n">split_nested_attr</span><span class="p">(</span><span class="n">attr</span><span class="p">)),</span> <span class="n">result</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_do_nested_lookup"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_do_nested_lookup">[docs]</a> <span class="k">def</span> <span class="nf">test_do_nested_lookup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">do_nested_lookup</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">()</span><span class="o">.</span><span class="n">do_nested_lookup</span>
<span class="n">not_found</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="o">.</span><span class="n">not_found</span>
<span class="k">def</span> <span class="nf">do_test_single</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">result</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">do_nested_lookup</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">key</span><span class="p">),</span> <span class="n">result</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">do_test_multi</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">result</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">do_nested_lookup</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">keys</span><span class="p">),</span> <span class="n">result</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([],</span> <span class="s2">&quot;test1&quot;</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;test2&quot;</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([],</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([</span><span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([</span><span class="mi">1</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">([</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;0&quot;</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span> <span class="c1"># str key is str not int</span>
<span class="n">do_test_single</span><span class="p">({},</span> <span class="s2">&quot;test3&quot;</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">({},</span> <span class="mi">0</span><span class="p">,</span> <span class="n">not_found</span><span class="p">)</span>
<span class="n">do_test_single</span><span class="p">({</span><span class="s2">&quot;foo&quot;</span><span class="p">:</span> <span class="s2">&quot;bar&quot;</span><span class="p">},</span> <span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="s2">&quot;bar&quot;</span><span class="p">)</span>
<span class="n">do_test_multi</span><span class="p">({</span><span class="s2">&quot;one&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]},</span> <span class="p">(</span><span class="s2">&quot;one&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">do_test_multi</span><span class="p">([{},</span> <span class="p">{</span><span class="s2">&quot;two&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">},</span> <span class="mi">3</span><span class="p">],</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;two&quot;</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_name"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_name">[docs]</a> <span class="k">def</span> <span class="nf">test_name</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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span> <span class="s2">&quot;Obj2=Obj3&quot;</span><span class="p">,</span> <span class="s2">&quot;Object&#39;s name changed to &#39;Obj3&#39;.&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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span>
<span class="s2">&quot;*TestAccount=TestAccountRenamed&quot;</span><span class="p">,</span>
<span class="s2">&quot;Account&#39;s name changed to &#39;TestAccountRenamed&#39;.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span> <span class="s2">&quot;*NotFound=TestAccountRenamed&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;*NotFound&#39;&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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span> <span class="s2">&quot;Obj3=Obj4;foo;bar&quot;</span><span class="p">,</span> <span class="s2">&quot;Object&#39;s name changed to &#39;Obj4&#39; (foo, bar).&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">building</span><span class="o">.</span><span class="n">CmdName</span><span class="p">(),</span> <span class="s2">&quot;Obj4=&quot;</span><span class="p">,</span> <span class="s2">&quot;No names or aliases defined!&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_desc">[docs]</a> <span class="k">def</span> <span class="nf">test_desc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</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">building</span><span class="o">.</span><span class="n">CmdDesc</span><span class="p">(),</span> <span class="s2">&quot;Obj2=TestDesc&quot;</span><span class="p">,</span> <span class="s2">&quot;The description was set on Obj2(#</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">oid</span><span class="p">)</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">building</span><span class="o">.</span><span class="n">CmdDesc</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.building.EvEditor&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_ed</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">building</span><span class="o">.</span><span class="n">CmdDesc</span><span class="p">(),</span> <span class="s2">&quot;/edit&quot;</span><span class="p">)</span>
<span class="n">mock_ed</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;desc&quot;</span><span class="p">,</span>
<span class="n">loadfunc</span><span class="o">=</span><span class="n">building</span><span class="o">.</span><span class="n">_desc_load</span><span class="p">,</span>
<span class="n">quitfunc</span><span class="o">=</span><span class="n">building</span><span class="o">.</span><span class="n">_desc_quit</span><span class="p">,</span>
<span class="n">savefunc</span><span class="o">=</span><span class="n">building</span><span class="o">.</span><span class="n">_desc_save</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_empty_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_empty_desc">[docs]</a> <span class="k">def</span> <span class="nf">test_empty_desc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> empty desc sets desc as &#39;&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="o">.</span><span class="n">id</span>
<span class="n">o2d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
<span class="n">r1d</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">db</span><span class="o">.</span><span class="n">desc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdDesc</span><span class="p">(),</span> <span class="s2">&quot;Obj2=&quot;</span><span class="p">,</span> <span class="s2">&quot;The description was set on Obj2(#</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">oid</span><span class="p">))</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</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;&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</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="n">o2d</span>
<span class="k">assert</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="n">r1d</span></div>
<div class="viewcode-block" id="TestBuilding.test_desc_default_to_room"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_desc_default_to_room">[docs]</a> <span class="k">def</span> <span class="nf">test_desc_default_to_room</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;no rhs changes room&#39;s desc&quot;&quot;&quot;</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="n">o2d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
<span class="n">r1d</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">db</span><span class="o">.</span><span class="n">desc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdDesc</span><span class="p">(),</span> <span class="s2">&quot;Obj2&quot;</span><span class="p">,</span> <span class="s2">&quot;The description was set on Room(#</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">rid</span><span class="p">))</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</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="n">o2d</span>
<span class="k">assert</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;Obj2&quot;</span> <span class="ow">and</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="n">r1d</span></div>
<div class="viewcode-block" id="TestBuilding.test_destroy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_destroy">[docs]</a> <span class="k">def</span> <span class="nf">test_destroy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">confirm</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj was destroyed.&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">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj2 was destroyed.&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">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span>
<span class="s2">&quot;Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Could not find &#39;Obj&#39;.| (Objects to destroy &quot;</span>
<span class="s2">&quot;must either be local or specified with a unique #dbref.)&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdDestroy</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="s2">&quot;You are trying to delete&quot;</span>
<span class="p">)</span> <span class="c1"># DEFAULT_HOME should not be deleted</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room2</span>
<span class="n">charid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">id</span>
<span class="n">room1id</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="n">room2id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room2</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">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Char2(#</span><span class="si">{}</span><span class="s2">) arrives to Room(#</span><span class="si">{}</span><span class="s2">) from Room2(#</span><span class="si">{}</span><span class="s2">).|Room2 was destroyed.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">charid</span><span class="p">,</span> <span class="n">room1id</span><span class="p">,</span> <span class="n">room2id</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="n">confirm</span></div>
<div class="viewcode-block" id="TestBuilding.test_destroy_sequence"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_destroy_sequence">[docs]</a> <span class="k">def</span> <span class="nf">test_destroy_sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">confirm</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</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">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="o">.</span><span class="n">dbref</span><span class="p">),</span>
<span class="s2">&quot;Obj was destroyed.</span><span class="se">\n</span><span class="s2">Obj2 was destroyed.&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_dig"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_dig">[docs]</a> <span class="k">def</span> <span class="nf">test_dig</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">building</span><span class="o">.</span><span class="n">CmdDig</span><span class="p">(),</span> <span class="s2">&quot;TestRoom1=testroom;tr,back;b&quot;</span><span class="p">,</span> <span class="s2">&quot;Created room TestRoom1&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">building</span><span class="o">.</span><span class="n">CmdDig</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_tunnel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_tunnel">[docs]</a> <span class="k">def</span> <span class="nf">test_tunnel</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">building</span><span class="o">.</span><span class="n">CmdTunnel</span><span class="p">(),</span> <span class="s2">&quot;n = TestRoom2;test2&quot;</span><span class="p">,</span> <span class="s2">&quot;Created room TestRoom2&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">building</span><span class="o">.</span><span class="n">CmdTunnel</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdTunnel</span><span class="p">(),</span> <span class="s2">&quot;foo = TestRoom2;test2&quot;</span><span class="p">,</span> <span class="s2">&quot;tunnel can only understand the&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">building</span><span class="o">.</span><span class="n">CmdTunnel</span><span class="p">(),</span> <span class="s2">&quot;/tel e = TestRoom3;test3&quot;</span><span class="p">,</span> <span class="s2">&quot;Created room TestRoom3&quot;</span><span class="p">)</span>
<span class="n">DefaultRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_family</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="s2">&quot;TestRoom3&quot;</span><span class="p">)</span>
<span class="n">exits</span> <span class="o">=</span> <span class="n">DefaultExit</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_family</span><span class="p">(</span><span class="n">db_key__in</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;east&quot;</span><span class="p">,</span> <span class="s2">&quot;west&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="nb">len</span><span class="p">(</span><span class="n">exits</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_tunnel_exit_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_tunnel_exit_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">test_tunnel_exit_typeclass</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">building</span><span class="o">.</span><span class="n">CmdTunnel</span><span class="p">(),</span>
<span class="s2">&quot;n:evennia.objects.objects.DefaultExit = TestRoom3&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created room TestRoom3&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_exit_commands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_exit_commands">[docs]</a> <span class="k">def</span> <span class="nf">test_exit_commands</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">building</span><span class="o">.</span><span class="n">CmdOpen</span><span class="p">(),</span> <span class="s2">&quot;TestExit1=Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Created new Exit &#39;TestExit1&#39; from Room to Room2&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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit1=Room&quot;</span><span class="p">,</span> <span class="s2">&quot;Link created TestExit1 -&gt; Room (one way).&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">building</span><span class="o">.</span><span class="n">CmdUnLink</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;NotFound&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit&quot;</span><span class="p">,</span> <span class="s2">&quot;TestExit1 is an exit to Room.&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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj is not an exit. Its home location is Room.&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">building</span><span class="o">.</span><span class="n">CmdUnLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit1&quot;</span><span class="p">,</span> <span class="s2">&quot;Former exit TestExit1 no longer links anywhere.&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="bp">self</span><span class="o">.</span><span class="n">room2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdOpen</span><span class="p">(),</span> <span class="s2">&quot;TestExit2=Room&quot;</span><span class="p">,</span> <span class="s2">&quot;Created new Exit &#39;TestExit2&#39; from Room2 to Room.&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">building</span><span class="o">.</span><span class="n">CmdOpen</span><span class="p">(),</span>
<span class="s2">&quot;TestExit2=Room&quot;</span><span class="p">,</span>
<span class="s2">&quot;Exit TestExit2 already exists. It already points to the correct place.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># ensure it matches locally first</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit=Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Link created TestExit2 -&gt; Room2 (one way).&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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span>
<span class="s2">&quot;/twoway TestExit=</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="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">dbref</span><span class="p">),</span>
<span class="s2">&quot;Link created TestExit2 (in Room2) &lt;-&gt; out (in Room) (two-way).&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span>
<span class="s2">&quot;/twoway TestExit=</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="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">dbref</span><span class="p">),</span>
<span class="s2">&quot;To create a two-way link, TestExit2 and Room must both have a location &quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span>
<span class="s2">&quot;/twoway </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="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">dbref</span><span class="p">),</span>
<span class="s2">&quot;Cannot link an object to itself.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &quot;</span><span class="p">)</span>
<span class="c1"># ensure can still match globally when not a local name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit1=Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Note: TestExit1&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">building</span><span class="o">.</span><span class="n">CmdLink</span><span class="p">(),</span> <span class="s2">&quot;TestExit1=&quot;</span><span class="p">,</span> <span class="s2">&quot;Former exit TestExit1 no longer links anywhere.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_set_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_set_home">[docs]</a> <span class="k">def</span> <span class="nf">test_set_home</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">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">&quot;Obj = Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Home location of Obj was changed from Room&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">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">&quot;self&quot;</span><span class="p">,</span> <span class="s2">&quot;Char&#39;s current home is Room&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">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj&#39;s current home is Room2&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">&quot;Obj = Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Home location of Obj was set to Room&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_list_cmdsets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_list_cmdsets">[docs]</a> <span class="k">def</span> <span class="nf">test_list_cmdsets</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">building</span><span class="o">.</span><span class="n">CmdListCmdSets</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;&lt;CmdSetHandler&gt; stack:</span><span class="se">\n</span><span class="s2"> &lt;CmdSet DefaultCharacter, Union, perm, prio 0&gt;:&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">building</span><span class="o">.</span><span class="n">CmdListCmdSets</span><span class="p">(),</span> <span class="s2">&quot;NotFound&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">test_typeclass</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;Obj = evennia.objects.objects.DefaultExit&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj changed typeclass from evennia.objects.objects.DefaultObject &quot;</span>
<span class="s2">&quot;to evennia.objects.objects.DefaultExit.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;Obj2 = evennia.objects.objects.DefaultExit&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj2 changed typeclass from evennia.objects.objects.DefaultObject &quot;</span>
<span class="s2">&quot;to evennia.objects.objects.DefaultExit.&quot;</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;swap&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span> <span class="s2">&quot;/list Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Core typeclasses&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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;/show Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj&#39;s current typeclass is &#39;evennia.objects.objects.DefaultExit&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;Obj = evennia.objects.objects.DefaultExit&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj already has the typeclass &#39;evennia.objects.objects.DefaultExit&#39;. Use /force to override.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;/force Obj = evennia.objects.objects.DefaultExit&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj updated its existing typeclass &quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span> <span class="s2">&quot;Obj = evennia.objects.objects.DefaultObject&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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;/show Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj&#39;s current typeclass is &#39;evennia.objects.objects.DefaultObject&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Only the at_object_creation hook was run (update mode). Attributes set before swap were not removed.&quot;</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;update&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;/reset/force Obj=evennia.objects.objects.DefaultObject&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;All object creation hooks were run. All old attributes where deleted before the swap.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.prototypes.prototypes</span> <span class="kn">import</span> <span class="n">homogenize_prototype</span>
<span class="n">test_prototype</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">homogenize_prototype</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;prototype_key&quot;</span><span class="p">:</span> <span class="s2">&quot;testkey&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;typeclass&quot;</span><span class="p">:</span> <span class="s2">&quot;typeclasses.objects.Object&quot;</span><span class="p">,</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;replaced_obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;attrs&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="s2">&quot;bar&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;desc&quot;</span><span class="p">,</span> <span class="s2">&quot;protdesc&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)],</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="p">]</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.commands.default.building.protlib.search_prototype&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="n">return_value</span><span class="o">=</span><span class="n">test_prototype</span><span class="p">),</span>
<span class="p">)</span> <span class="k">as</span> <span class="n">mprot</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">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
<span class="s2">&quot;/prototype Obj=testkey&quot;</span><span class="p">,</span>
<span class="s2">&quot;replaced_obj changed typeclass from &quot;</span>
<span class="s2">&quot;evennia.objects.objects.DefaultObject to &quot;</span>
<span class="s2">&quot;typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">All object creation hooks were &quot;</span>
<span class="s2">&quot;run. Attributes set before swap were not removed. Prototype &quot;</span>
<span class="s2">&quot;&#39;replaced_obj&#39; was successfully applied over the object type.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</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;protdesc&quot;</span></div>
<div class="viewcode-block" id="TestBuilding.test_lock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_lock">[docs]</a> <span class="k">def</span> <span class="nf">test_lock</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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj = test:all()&quot;</span><span class="p">,</span> <span class="s2">&quot;Added lock &#39;test:all()&#39; to Obj.&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span>
<span class="s2">&quot;*TestAccount = test:all()&quot;</span><span class="p">,</span>
<span class="s2">&quot;Added lock &#39;test:all()&#39; to TestAccount&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj/notfound&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj has no lock of access type &#39;notfound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj/test&quot;</span><span class="p">,</span> <span class="s2">&quot;test:all()&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span>
<span class="s2">&quot;/view Obj = edit:false()&quot;</span><span class="p">,</span>
<span class="s2">&quot;Switch(es) view can not be used with a lock assignment. &quot;</span>
<span class="s2">&quot;Use e.g. lock/del objname/locktype instead.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj = control:false()&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj = edit:false()&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj/test&quot;</span><span class="p">,</span> <span class="s2">&quot;You are not allowed to do that.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;control:true()&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">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;call:true()&quot;</span><span class="p">)</span> <span class="c1"># etc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdLock</span><span class="p">(),</span> <span class="s2">&quot;*TestAccount&quot;</span><span class="p">,</span> <span class="s2">&quot;boot:perm(Admin)&quot;</span><span class="p">)</span> <span class="c1"># etc</span></div>
<div class="viewcode-block" id="TestBuilding.test_find"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_find">[docs]</a> <span class="k">def</span> <span class="nf">test_find</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rid2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">id</span>
<span class="n">rmax</span> <span class="o">=</span> <span class="n">rid2</span> <span class="o">+</span> <span class="mi">100</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;oom2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;oom2 = 1-</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">rmax</span><span class="p">),</span> <span class="s2">&quot;One Match&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;oom2 = 1 </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">rmax</span><span class="p">),</span> <span class="s2">&quot;One Match&quot;</span><span class="p">)</span> <span class="c1"># space works too</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&quot;</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;locate&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span>
<span class="s2">&quot;/ex Char2&quot;</span><span class="p">,</span> <span class="c1"># /ex is an ambiguous switch</span>
<span class="s2">&quot;locate: Ambiguous switch supplied: Did you mean /exit or /exact?|&quot;</span><span class="p">,</span>
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;locate&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&quot;</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;locate&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/l Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&quot;</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;find&quot;</span>
<span class="p">)</span> <span class="c1"># /l switch is abbreviated form of /loc</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;Char2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&quot;</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">&quot;find&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/startswith Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&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">building</span><span class="o">.</span><span class="n">CmdFind</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">dbref</span><span class="p">,</span> <span class="s2">&quot;Exact dbref match&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;*TestAccount&quot;</span><span class="p">,</span> <span class="s2">&quot;Match&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/char Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;No Matches&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/room Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;No Matches&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/exit Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;No Matches&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/exact Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;One Match&quot;</span><span class="p">)</span>
<span class="c1"># Test multitype filtering</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.commands.default.building.CHAR_TYPECLASS&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.objects.objects.DefaultCharacter&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/char/room Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;No Matches&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/char/room/exit Char&quot;</span><span class="p">,</span> <span class="s2">&quot;2 Matches&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;/char/room/exit/startswith Cha&quot;</span><span class="p">,</span> <span class="s2">&quot;2 Matches&quot;</span><span class="p">)</span>
<span class="c1"># Test null search</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &quot;</span><span class="p">)</span>
<span class="c1"># Test bogus dbref range with no search term</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;= obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Invalid dbref range provided (not a number).&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="s2">&quot;= #1a&quot;</span><span class="p">,</span> <span class="s2">&quot;Invalid dbref range provided (not a number).&quot;</span><span class="p">)</span>
<span class="c1"># Test valid dbref ranges with no search term</span>
<span class="n">id1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">id</span>
<span class="n">id2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="o">.</span><span class="n">id</span>
<span class="n">maxid</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">latest</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">id</span>
<span class="n">maxdiff</span> <span class="o">=</span> <span class="n">maxid</span> <span class="o">-</span> <span class="n">id1</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">mdiff</span> <span class="o">=</span> <span class="n">id2</span> <span class="o">-</span> <span class="n">id1</span> <span class="o">+</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">maxdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">maxid</span><span class="si">}</span><span class="s2">&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">mdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">):&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">mdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">):&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">- #</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">mdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">):&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">mdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">):&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">building</span><span class="o">.</span><span class="n">CmdFind</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;=#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">mdiff</span><span class="si">}</span><span class="s2"> Matches(#</span><span class="si">{</span><span class="n">id1</span><span class="si">}</span><span class="s2">-#</span><span class="si">{</span><span class="n">id2</span><span class="si">}</span><span class="s2">):&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_script"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script">[docs]</a> <span class="k">def</span> <span class="nf">test_script</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;No scripts defined on Obj&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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;Obj = scripts.Script&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script scripts.Script successfully added&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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;evennia.Dummy&quot;</span><span class="p">,</span>
<span class="s2">&quot;Global Script NOT Created &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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;evennia.scripts.scripts.DoNothing&quot;</span><span class="p">,</span>
<span class="s2">&quot;Global Script Created - sys_do_nothing &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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;Obj &quot;</span><span class="p">,</span> <span class="s2">&quot;dbref &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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;/start Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Script on Obj Started &quot;</span>
<span class="p">)</span> <span class="c1"># we allow running start again; this should still happen</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;/stop Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;Script on Obj Stopped - &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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span> <span class="s2">&quot;Obj = scripts.Script&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script scripts.Script successfully added&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Y&quot;</span><span class="p">]</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/start Obj = scripts.Script&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script on Obj Started &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Y&quot;</span><span class="p">]</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/stop Obj = scripts.Script&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script on Obj Stopped &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Y&quot;</span><span class="p">]</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/delete Obj = scripts.Script&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script on Obj Deleted &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Y&quot;</span><span class="p">]</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">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/delete evennia.scripts.scripts.DoNothing&quot;</span><span class="p">,</span>
<span class="s2">&quot;Global Script Deleted -&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_teleport"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_teleport">[docs]</a> <span class="k">def</span> <span class="nf">test_teleport</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">id</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="n">rid2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room2</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;Obj = Room&quot;</span><span class="p">,</span> <span class="s2">&quot;Obj is already at Room.&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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;Obj = NotFound&quot;</span><span class="p">,</span>
<span class="s2">&quot;Could not find &#39;NotFound&#39;.|Destination not found.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;Obj = Room2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj(#</span><span class="si">{}</span><span class="s2">) is leaving Room(#</span><span class="si">{}</span><span class="s2">), heading for Room2(#</span><span class="si">{}</span><span class="s2">).|Teleported Obj -&gt; Room2.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">oid</span><span class="p">,</span> <span class="n">rid</span><span class="p">,</span> <span class="n">rid2</span>
<span class="p">),</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;NotFound = Room&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;Obj = Obj&quot;</span><span class="p">,</span> <span class="s2">&quot;You can&#39;t teleport an object inside of itself!&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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;/tonone Obj2&quot;</span><span class="p">,</span> <span class="s2">&quot;Teleported Obj2 -&gt; None-location.&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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;/quiet Room2&quot;</span><span class="p">,</span> <span class="s2">&quot;Room2(#</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">rid2</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;/t&quot;</span><span class="p">,</span> <span class="c1"># /t switch is abbreviated form of /tonone</span>
<span class="s2">&quot;Cannot teleport a puppeted object (Char, puppeted by TestAccount&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;/l Room2&quot;</span><span class="p">,</span> <span class="c1"># /l switch is abbreviated form of /loc</span>
<span class="s2">&quot;Destination has no location.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;/q me to Room2&quot;</span><span class="p">,</span> <span class="c1"># /q switch is abbreviated form of /quiet</span>
<span class="s2">&quot;Char is already at Room2.&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_tag"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_tag">[docs]</a> <span class="k">def</span> <span class="nf">test_tag</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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: &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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;Obj = testtag&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;Obj = testtag2&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;Obj = testtag2:category1&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;Obj = testtag3&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span>
<span class="s2">&quot;Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Tags on Obj: &#39;testtag&#39;, &#39;testtag2&#39;, &quot;</span> <span class="s2">&quot;&#39;testtag2&#39; (category: category1), &#39;testtag3&#39;&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;/search NotFound&quot;</span><span class="p">,</span> <span class="s2">&quot;No objects found with tag &#39;NotFound&#39;.&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;/search testtag&quot;</span><span class="p">,</span> <span class="s2">&quot;Found 1 object with tag &#39;testtag&#39;:&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;/search testtag2&quot;</span><span class="p">,</span> <span class="s2">&quot;Found 1 object with tag &#39;testtag2&#39;:&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span>
<span class="s2">&quot;/search testtag2:category1&quot;</span><span class="p">,</span>
<span class="s2">&quot;Found 1 object with tag &#39;testtag2&#39; (category: &#39;category1&#39;):&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span> <span class="s2">&quot;/del Obj = testtag3&quot;</span><span class="p">,</span> <span class="s2">&quot;Removed tag &#39;testtag3&#39; from Obj.&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">building</span><span class="o">.</span><span class="n">CmdTag</span><span class="p">(),</span>
<span class="s2">&quot;/del Obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;Cleared all tags from Obj: testtag, testtag2, testtag2 (category: category1)&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_spawn"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_spawn">[docs]</a> <span class="k">def</span> <span class="nf">test_spawn</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">get_object</span><span class="p">(</span><span class="n">commandTest</span><span class="p">,</span> <span class="n">obj_key</span><span class="p">):</span>
<span class="c1"># A helper function to get a spawned object and</span>
<span class="c1"># check that it exists in the process.</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">search_object</span><span class="p">(</span><span class="n">obj_key</span><span class="p">)</span>
<span class="n">commandTest</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="n">commandTest</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="nb">bool</span><span class="p">(</span><span class="n">query</span><span class="p">))</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">query</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">commandTest</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">return</span> <span class="n">obj</span>
<span class="c1"># Tests &quot;spawn&quot; without any arguments.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="s2">&quot;Usage: spawn&quot;</span><span class="p">)</span>
<span class="c1"># Tests &quot;spawn &lt;prototype_dictionary&gt;&quot; without specifying location.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/save {&#39;prototype_key&#39;: &#39;testprot&#39;, &#39;key&#39;:&#39;Test Char&#39;, &quot;</span>
<span class="s2">&quot;&#39;typeclass&#39;:&#39;evennia.objects.objects.DefaultCharacter&#39;}&quot;</span><span class="p">,</span>
<span class="s2">&quot;Saved prototype: testprot&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;y&quot;</span><span class="p">],</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/save testprot2 = {&#39;key&#39;:&#39;Test Char&#39;, &quot;</span>
<span class="s2">&quot;&#39;typeclass&#39;:&#39;evennia.objects.objects.DefaultCharacter&#39;}&quot;</span><span class="p">,</span>
<span class="s2">&quot;(Replacing `prototype_key` in prototype with given key.)|Saved prototype: testprot2&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;y&quot;</span><span class="p">],</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/search &quot;</span><span class="p">,</span> <span class="s2">&quot;Key &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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/search test;test2&quot;</span><span class="p">,</span> <span class="s2">&quot;No prototypes found.&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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/save {&#39;key&#39;:&#39;Test Char&#39;, &quot;</span> <span class="s2">&quot;&#39;typeclass&#39;:&#39;evennia.objects.objects.DefaultCharacter&#39;}&quot;</span><span class="p">,</span>
<span class="s2">&quot;A prototype_key must be given, either as `prototype_key = &lt;prototype&gt;` or as &quot;</span>
<span class="s2">&quot;a key &#39;prototype_key&#39; inside the prototype structure.&quot;</span><span class="p">,</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;Key &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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;testprot&quot;</span><span class="p">,</span> <span class="s2">&quot;Spawned Test Char&quot;</span><span class="p">)</span>
<span class="c1"># Tests that the spawned object&#39;s location is the same as the character&#39;s location, since</span>
<span class="c1"># we did not specify it.</span>
<span class="n">testchar</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;Test Char&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">testchar</span><span class="o">.</span><span class="n">location</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="p">)</span>
<span class="n">testchar</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Test &quot;spawn &lt;prototype_dictionary&gt;&quot; with a location other than the character&#39;s.</span>
<span class="n">spawnLoc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room2</span>
<span class="k">if</span> <span class="n">spawnLoc</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>
<span class="c1"># Just to make sure we use a different location, in case someone changes</span>
<span class="c1"># char1&#39;s default location in the future...</span>
<span class="n">spawnLoc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;{&#39;prototype_key&#39;:&#39;GOBLIN&#39;, &#39;typeclass&#39;:&#39;evennia.objects.objects.DefaultCharacter&#39;, &quot;</span>
<span class="s2">&quot;&#39;key&#39;:&#39;goblin&#39;, &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span> <span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Spawned goblin&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">goblin</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;goblin&quot;</span><span class="p">)</span>
<span class="c1"># Tests that the spawned object&#39;s type is a DefaultCharacter.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">goblin</span><span class="p">,</span> <span class="n">DefaultCharacter</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">goblin</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">spawnLoc</span><span class="p">)</span>
<span class="n">goblin</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># create prototype</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">create_prototype</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Ball&quot;</span><span class="p">,</span>
<span class="s2">&quot;typeclass&quot;</span><span class="p">:</span> <span class="s2">&quot;evennia.objects.objects.DefaultCharacter&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_key&quot;</span><span class="p">:</span> <span class="s2">&quot;testball&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="c1"># Tests &quot;spawn &lt;prototype_name&gt;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;testball&quot;</span><span class="p">,</span> <span class="s2">&quot;Spawned Ball&quot;</span><span class="p">)</span>
<span class="n">ball</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;Ball&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">ball</span><span class="o">.</span><span class="n">location</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="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">ball</span><span class="p">,</span> <span class="n">DefaultObject</span><span class="p">)</span>
<span class="n">ball</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># Tests &quot;spawn/n ...&quot; without specifying a location.</span>
<span class="c1"># Location should be &quot;None&quot;.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/n &#39;BALL&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;Spawned Ball&quot;</span>
<span class="p">)</span> <span class="c1"># /n switch is abbreviated form of /noloc</span>
<span class="n">ball</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;Ball&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">ball</span><span class="o">.</span><span class="n">location</span><span class="p">)</span>
<span class="n">ball</span><span class="o">.</span><span class="n">delete</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/noloc {&#39;prototype_parent&#39;:&#39;TESTBALL&#39;, &#39;prototype_key&#39;: &#39;testball&#39;, &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span>
<span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Error: Prototype testball tries to parent itself.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Tests &quot;spawn/noloc ...&quot;, but DO specify a location.</span>
<span class="c1"># Location should be the specified location.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/noloc {&#39;prototype_parent&#39;:&#39;TESTBALL&#39;, &#39;key&#39;: &#39;Ball&#39;, &#39;prototype_key&#39;: &#39;foo&#39;, &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span>
<span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Spawned Ball&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ball</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;Ball&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">ball</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">spawnLoc</span><span class="p">)</span>
<span class="n">ball</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="c1"># test calling spawn with an invalid prototype.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;&#39;NO_EXIST&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;No prototype named &#39;NO_EXIST&#39; was found.&quot;</span><span class="p">)</span>
<span class="c1"># Test listing commands</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;Key &quot;</span><span class="p">)</span>
<span class="c1"># spawn/edit (missing prototype)</span>
<span class="c1"># brings up olc menu</span>
<span class="n">msg</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/edit&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="s2">&quot;Prototype wizard&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="c1"># spawn/edit with valid prototype</span>
<span class="c1"># brings up olc menu loaded with prototype</span>
<span class="n">msg</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/edit testball&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="s2">&quot;Prototype wizard&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="k">assert</span> <span class="nb">hasattr</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">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="p">,</span> <span class="s2">&quot;olc_prototype&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="p">(</span>
<span class="nb">dict</span> <span class="o">==</span> <span class="nb">type</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">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">olc_prototype</span><span class="p">)</span>
<span class="ow">and</span> <span class="s2">&quot;prototype_key&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">olc_prototype</span>
<span class="ow">and</span> <span class="s2">&quot;key&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">olc_prototype</span>
<span class="ow">and</span> <span class="s2">&quot;testball&quot;</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">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">olc_prototype</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span>
<span class="ow">and</span> <span class="s2">&quot;Ball&quot;</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">ndb</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">olc_prototype</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">assert</span> <span class="s2">&quot;Ball&quot;</span> <span class="ow">in</span> <span class="n">msg</span> <span class="ow">and</span> <span class="s2">&quot;testball&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="c1"># spawn/edit with valid prototype (synomym)</span>
<span class="n">msg</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/edit BALL&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="s2">&quot;Prototype wizard&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="k">assert</span> <span class="s2">&quot;Ball&quot;</span> <span class="ow">in</span> <span class="n">msg</span> <span class="ow">and</span> <span class="s2">&quot;testball&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="c1"># spawn/edit with invalid prototype</span>
<span class="n">msg</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/edit NO_EXISTS&quot;</span><span class="p">,</span> <span class="s2">&quot;No prototype named &#39;NO_EXISTS&#39; was found.&quot;</span>
<span class="p">)</span>
<span class="c1"># spawn/examine (missing prototype)</span>
<span class="c1"># lists all prototypes that exist</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/examine&quot;</span><span class="p">,</span> <span class="s2">&quot;You need to specify a prototype-key to show.&quot;</span><span class="p">)</span>
<span class="c1"># spawn/examine with valid prototype</span>
<span class="c1"># prints the prototype</span>
<span class="n">msg</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">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/examine BALL&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="s2">&quot;Ball&quot;</span> <span class="ow">in</span> <span class="n">msg</span> <span class="ow">and</span> <span class="s2">&quot;testball&quot;</span> <span class="ow">in</span> <span class="n">msg</span>
<span class="c1"># spawn/examine with invalid prototype</span>
<span class="c1"># shows error</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSpawn</span><span class="p">(),</span> <span class="s2">&quot;/examine NO_EXISTS&quot;</span><span class="p">,</span> <span class="s2">&quot;No prototype named &#39;NO_EXISTS&#39; was found.&quot;</span>
<span class="p">)</span></div></div>
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_channel</span> <span class="c1"># noqa</span>
<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="k">class</span> <span class="nc">TestCommsChannel</span><span class="p">(</span><span class="n">CommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the central `channel` command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="TestCommsChannel.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.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">CommandTest</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">channel</span> <span class="o">=</span> <span class="n">create_channel</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="s2">&quot;A test channel&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span> <span class="o">=</span> <span class="n">comms</span><span class="o">.</span><span class="n">CmdChannel</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="o">.</span><span class="n">account_caller</span> <span class="o">=</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="TestCommsChannel.tearDown"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="c1"># test channel command</span>
<div class="viewcode-block" id="TestCommsChannel.test_channel__noarg"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__noarg">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__noarg</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;Channel subscriptions&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__msg"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__msg">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__msg</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">channel</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;testchannel = Test message&quot;</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">channel</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">&quot;Test message&quot;</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__list">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__list</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/list&quot;</span><span class="p">,</span>
<span class="s2">&quot;Channel subscriptions&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__all"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__all">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__all</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/all&quot;</span><span class="p">,</span>
<span class="s2">&quot;Available channels&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__history"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__history">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__history</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.comms.tail_log_file&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_tail</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/history testchannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="n">mock_tail</span><span class="o">.</span><span class="n">assert_called</span><span class="p">()</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__sub"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__sub">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__sub</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">channel</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/sub testchannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;You are now subscribed&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</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="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span><span class="s2">&quot;testchannel Hello&quot;</span><span class="p">),</span> <span class="s2">&quot;channel testchannel = Hello&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__unsub"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__unsub">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__unsub</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/unsub testchannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;You un-subscribed&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__alias__unalias"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__alias__unalias">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__alias__unalias</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Add and then remove a channel alias&quot;&quot;&quot;</span>
<span class="c1"># add alias</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/alias testchannel = foo&quot;</span><span class="p">,</span>
<span class="s2">&quot;Added/updated your alias &#39;foo&#39; for channel testchannel.&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="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span><span class="s1">&#39;foo Hello&#39;</span><span class="p">),</span> <span class="s2">&quot;channel testchannel = Hello&quot;</span><span class="p">)</span>
<span class="c1"># use alias</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;foo = test message&quot;</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">channel</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">&quot;test message&quot;</span><span class="p">,</span> <span class="n">senders</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="c1"># remove alias</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/unalias foo&quot;</span><span class="p">,</span>
<span class="s2">&quot;Removed your channel alias &#39;foo&#39;&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="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;foo $1&#39;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;channel&quot;</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__mute"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__mute">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__mute</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/mute testchannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;Muted channel testchannel&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">mutelist</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__unmute"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__unmute">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__unmute</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">channel</span><span class="o">.</span><span class="n">mute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/unmute testchannel = Char1&quot;</span><span class="p">,</span>
<span class="s2">&quot;Un-muted channel testchannel&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">mutelist</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__create"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__create">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__create</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/create testchannel2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created (and joined) new channel&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__destroy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__destroy">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__destroy</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">channel</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/destroy testchannel = delete reason&quot;</span><span class="p">,</span>
<span class="s2">&quot;Are you sure you want to delete channel &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Yes&#39;</span><span class="p">]</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;delete reason&quot;</span><span class="p">,</span> <span class="n">bypass_mute</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__desc">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__desc</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/desc testchannel = Another description&quot;</span><span class="p">,</span>
<span class="s2">&quot;Updated channel description.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__lock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__lock">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__lock</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/lock testchannel = foo:false()&quot;</span><span class="p">,</span>
<span class="s2">&quot;Added/updated lock on channel&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="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;foo&#39;</span><span class="p">),</span> <span class="s1">&#39;foo:false()&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__unlock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__unlock">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__unlock</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">channel</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;foo:true()&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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/unlock testchannel = foo&quot;</span><span class="p">,</span>
<span class="s2">&quot;Removed lock from channel&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="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;foo&#39;</span><span class="p">),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__boot"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__boot">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__boot</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">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</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="bp">self</span><span class="o">.</span><span class="n">char2</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/boot testchannel = Char2 : Booting from channel!&quot;</span><span class="p">,</span>
<span class="s2">&quot;Are you sure &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Yes&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;Char2 was booted from channel by Char. Reason: Booting from channel!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;You were booted from channel testchannel by Char. Reason: Booting from channel!&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__ban__unban"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__ban__unban">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__ban__unban</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test first ban and then unban&quot;&quot;&quot;</span>
<span class="c1"># ban</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</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="bp">self</span><span class="o">.</span><span class="n">char2</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/ban testchannel = Char2 : Banning from channel!&quot;</span><span class="p">,</span>
<span class="s2">&quot;Are you sure &quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;Yes&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;Char2 was booted from channel by Char. Reason: Banning from channel!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="s2">&quot;You were booted from channel testchannel by Char. Reason: Banning from channel!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">banlist</span><span class="p">)</span>
<span class="c1"># unban</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/unban testchannel = Char2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Un-banned Char2 from channel testchannel&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">char2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">banlist</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCommsChannel.test_channel__who"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.test_channel__who">[docs]</a> <span class="k">def</span> <span class="nf">test_channel__who</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="bp">self</span><span class="o">.</span><span class="n">cmdchannel</span><span class="p">(),</span>
<span class="s2">&quot;/who testchannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;Subscribed to testchannel:</span><span class="se">\n</span><span class="s2">Char&quot;</span>
<span class="p">)</span></div></div>
<span class="kn">from</span> <span class="nn">evennia.comms</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">CommandTest</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>
<span class="n">comms</span><span class="o">.</span><span class="n">CmdPage</span><span class="p">(),</span>
<span class="s2">&quot;TestAccount2 = Test&quot;</span><span class="p">,</span>
<span class="s2">&quot;TestAccount2 is offline. They will see your message if they list their pages later.&quot;</span>
<span class="s2">&quot;|You paged TestAccount2 with: &#39;Test&#39;.&quot;</span><span class="p">,</span>
<span class="n">receiver</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="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">CommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBatchProcess.test_batch_commands"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBatchProcess.test_batch_commands">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.tutorial_examples.red_button.repeat&quot;</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.tutorial_examples.red_button.delay&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_batch_commands</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mock_delay</span><span class="p">,</span> <span class="n">mock_repeat</span><span class="p">):</span>
<span class="c1"># cannot test batchcode here, it must run inside the server process</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">batchprocess</span><span class="o">.</span><span class="n">CmdBatchCommands</span><span class="p">(),</span>
<span class="s2">&quot;example_batch_cmds&quot;</span><span class="p">,</span>
<span class="s2">&quot;Running Batch-command processor - Automatic mode for example_batch_cmds&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># we make sure to delete the button again here to stop the running reactor</span>
<span class="n">confirm</span> <span class="o">=</span> <span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="p">(),</span> <span class="s2">&quot;button&quot;</span><span class="p">,</span> <span class="s2">&quot;button was destroyed.&quot;</span><span class="p">)</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdDestroy</span><span class="o">.</span><span class="n">confirm</span> <span class="o">=</span> <span class="n">confirm</span>
<span class="n">mock_repeat</span><span class="o">.</span><span class="n">assert_called</span><span class="p">()</span></div></div>
<div class="viewcode-block" id="CmdInterrupt"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CmdInterrupt">[docs]</a><span class="k">class</span> <span class="nc">CmdInterrupt</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;interrupt&quot;</span>
<div class="viewcode-block" id="CmdInterrupt.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CmdInterrupt.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span></div>
<div class="viewcode-block" id="CmdInterrupt.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.CmdInterrupt.func">[docs]</a> <span class="k">def</span> <span class="nf">func</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">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">CommandTest</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">CommandTest</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>
<span class="n">expected</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;## BEGIN INFO 1.1</span><span class="se">\n</span><span class="s2">Name: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">Uptime: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">Connected: </span><span class="si">%d</span><span class="se">\n</span><span class="s2">Version: Evennia </span><span class="si">%s</span><span class="se">\n</span><span class="s2">## END INFO&quot;</span>
<span class="o">%</span> <span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">SERVERNAME</span><span class="p">,</span>
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">gametime</span><span class="o">.</span><span class="n">SERVER_START_TIME</span><span class="p">)</span><span class="o">.</span><span class="n">ctime</span><span class="p">(),</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">account_count</span><span class="p">(),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">get_evennia_version</span><span class="p">(),</span>
<span class="p">)</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">unloggedin</span><span class="o">.</span><span class="n">CmdUnconnectedInfo</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
<span class="k">del</span> <span class="n">gametime</span><span class="o">.</span><span class="n">SERVER_START_TIME</span></div></div>
<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">CommandTest</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>
<div class="viewcode-block" id="TestSystemCommands.test_multimatch"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_multimatch">[docs]</a> <span class="k">def</span> <span class="nf">test_multimatch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># set up fake matches and store on command instance</span>
<span class="n">cmdset</span> <span class="o">=</span> <span class="n">CmdSet</span><span class="p">()</span>
<span class="n">cmdset</span><span class="o">.</span><span class="n">add</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="n">cmdset</span><span class="o">.</span><span class="n">add</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="n">matches</span> <span class="o">=</span> <span class="n">cmdparser</span><span class="o">.</span><span class="n">build_matches</span><span class="p">(</span><span class="s2">&quot;look&quot;</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
<span class="n">multimatch</span> <span class="o">=</span> <span class="n">syscommands</span><span class="o">.</span><span class="n">SystemMultimatch</span><span class="p">()</span>
<span class="n">multimatch</span><span class="o">.</span><span class="n">matches</span> <span class="o">=</span> <span class="n">matches</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">multimatch</span><span class="p">,</span> <span class="s2">&quot;look&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="tests.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.tests</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>