evennia/docs/1.0-dev/_modules/evennia/commands/default/tests.html
Evennia docbuilder action fd31020c21 Updated HTML docs.
2022-11-15 20:29:38 +00:00

2185 lines
No EOL
337 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>
<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="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>
<ul>
<li><a href="../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<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">datetime</span>
<span class="kn">from</span> <span class="nn">unittest.mock</span> <span class="kn">import</span> <span class="n">MagicMock</span><span class="p">,</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">patch</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">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">override_settings</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">twisted.internet</span> <span class="kn">import</span> <span class="n">task</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">DefaultCharacter</span><span class="p">,</span>
<span class="n">DefaultExit</span><span class="p">,</span>
<span class="n">DefaultObject</span><span class="p">,</span>
<span class="n">DefaultRoom</span><span class="p">,</span>
<span class="n">ObjectDB</span><span class="p">,</span>
<span class="n">search_object</span><span class="p">,</span>
<span class="p">)</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.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.default</span> <span class="kn">import</span> <span class="n">account</span><span class="p">,</span> <span class="n">admin</span><span class="p">,</span> <span class="n">batchprocess</span><span class="p">,</span> <span class="n">building</span><span class="p">,</span> <span class="n">comms</span><span class="p">,</span> <span class="n">general</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default</span> <span class="kn">import</span> <span class="n">help</span> <span class="k">as</span> <span class="n">help_module</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default</span> <span class="kn">import</span> <span class="n">syscommands</span><span class="p">,</span> <span class="n">system</span><span class="p">,</span> <span class="n">unloggedin</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.commands.default.muxcommand</span> <span class="kn">import</span> <span class="n">MuxCommand</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="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span> <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">BaseEvenniaTest</span><span class="p">,</span> <span class="n">EvenniaCommandTest</span>
<span class="c1"># ------------------------------------------------------------</span>
<span class="c1"># Command testing</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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestGeneral.test_look"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look">[docs]</a> <span class="k">def</span> <span class="nf">test_look</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">rid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;here&quot;</span><span class="p">,</span> <span class="s2">&quot;Room(#</span><span class="si">{}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">room_desc&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">rid</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestGeneral.test_look_no_location"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_no_location">[docs]</a> <span class="k">def</span> <span class="nf">test_look_no_location</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">char1</span><span class="o">.</span><span class="n">location</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">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You have no location to look at!&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_look_nonexisting"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_nonexisting">[docs]</a> <span class="k">def</span> <span class="nf">test_look_nonexisting</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">CmdLook</span><span class="p">(),</span> <span class="s2">&quot;yellow sign&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;yellow sign&#39;.&quot;</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_go_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_go_home">[docs]</a> <span class="k">def</span> <span class="nf">test_go_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">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;/quiet 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">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;There&#39;s no place like home&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestGeneral.test_no_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_no_home">[docs]</a> <span class="k">def</span> <span class="nf">test_no_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">char1</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">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 have no 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_nick_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_nick_list">[docs]</a> <span class="k">def</span> <span class="nf">test_nick_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="n">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;No nicks defined.&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">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;test1 = Hello&quot;</span><span class="p">,</span> <span class="s2">&quot;Inputline-nick &#39;test1&#39; mapped to &#39;Hello&#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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;Defined Nicks:&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">BaseEvenniaCommandTest</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="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="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="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="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="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">A subsubtopic text&quot;</span><span class="p">,</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">A subsubtopic text&quot;</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;test/Something else&quot;</span><span class="p">,</span> <span class="s2">&quot;Help for test/something else</span><span class="se">\n\n</span><span class="s2">Something else&quot;</span><span class="p">),</span> <span class="c1"># case</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">Another text</span><span class="se">\n\n</span><span class="s2">Subtopics:</span><span class="se">\n</span><span class="s2"> test/more/second-more&quot;</span><span class="p">,</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="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="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">Even more text.</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</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">Third more text</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="p">),</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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystem.test_py"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_py">[docs]</a> <span class="k">def</span> <span class="nf">test_py</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># we are not testing CmdReload, CmdReset and CmdShutdown, CmdService or CmdTime</span>
<span class="c1"># since the server is not running during these tests.</span>
<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="s2">&quot;success&quot;</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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestCmdTasks.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<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="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;There are no active tasks.&quot;</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="s2">&quot;&quot;</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="s2">&quot;Task ID&quot;</span><span class="p">,</span>
<span class="s2">&quot;Completion&quot;</span><span class="p">,</span>
<span class="s2">&quot;Date&quot;</span><span class="p">,</span>
<span class="s2">&quot;Function&quot;</span><span class="p">,</span>
<span class="s2">&quot;KWARGS&quot;</span><span class="p">,</span>
<span class="s2">&quot;persisten&quot;</span><span class="p">,</span>
<span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="sa">r</span><span class="s2">&quot;\d+/\d+/\d+&quot;</span><span class="p">,</span>
<span class="sa">r</span><span class="s2">&quot;\d+\:&quot;</span><span class="p">,</span>
<span class="sa">r</span><span class="s2">&quot;\d+\:\d+&quot;</span><span class="p">,</span>
<span class="sa">r</span><span class="s2">&quot;\:\d+&quot;</span><span class="p">,</span>
<span class="s2">&quot;func_test&quot;</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="s2">&quot;False&quot;</span><span class="p">,</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="s2">&quot;&quot;</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="s2">&quot;True&quot;</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="s2">&quot;/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="s2">&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Pause task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&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">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="s2">&quot;/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="s2">&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">exists</span><span class="p">())</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Unpause task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&quot;</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="s2">&quot;/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="s2">&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Do_task task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&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">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="s2">&quot;/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="s2">&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Remove task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&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">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="s2">&quot;/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="s2">&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Call task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&quot;</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="s2">&quot;/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="s2">&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;Cancel task 1 with completion date&quot;</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="s2">&quot; \(func_test_cmd_tasks\) &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">execute_cmd</span><span class="p">(</span><span class="s2">&quot;y&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">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="s2">&quot;/remove func_test_cmd_tasks&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;Task action remove completed on task ID 1.|The task function remove returned: True|&quot;</span>
<span class="s2">&quot;Task action remove completed on task ID 2.|The task function remove returned: 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">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="s2">&quot;/remove intentional_fail&quot;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s2">&quot;No tasks deferring function name intentional_fail found.&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="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="s2">&quot;/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="s2">&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="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="s2">&quot;/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="s2">&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">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="s2">&quot;y&quot;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="s2">&quot;text&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">assertEqual</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">&quot;cancel request completed.The task function cancel returned: True&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">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="s2">&quot;/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="s2">&quot;</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="s2">&quot;y&quot;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="s2">&quot;text&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">assertEqual</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">&quot;Task completed while waiting for input.&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">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="s2">&quot;/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="s2">&quot;</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="s2">&quot;y&quot;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="s2">&quot;text&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">assertEqual</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">&quot;Task completed while waiting for input.&quot;</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="p">(</span>
<span class="s2">&quot;Task command misformed.|Proper format tasks[/switch] [function name or task id]&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">CmdTasks</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;/cancel&quot;</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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestAdmin.test_emit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestAdmin.test_emit">[docs]</a> <span class="k">def</span> <span class="nf">test_emit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">admin</span><span class="o">.</span><span class="n">CmdEmit</span><span class="p">(),</span> <span class="s2">&quot;Char2 = Test&quot;</span><span class="p">,</span> <span class="s2">&quot;Emitted to Char2:</span><span class="se">\n</span><span class="s2">Test&quot;</span><span class="p">)</span></div>
<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">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test different account-specific modes</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">(</span>
<span class="c1"># multisession-mode, auto-puppet, max_nr_characters</span>
<span class="p">[</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;You are out-of-character&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;You are out-of-character&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;You are out-of-character&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;You are out-of-character&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;Account TestAccount&quot;</span><span class="p">),</span>
<span class="p">]</span>
<span class="p">)</span>
<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="n">multisession_mode</span><span class="p">,</span> <span class="n">auto_puppet</span><span class="p">,</span> <span class="n">max_nr_chars</span><span class="p">,</span> <span class="n">expected_result</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_all</span><span class="p">()</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">(</span><span class="n">MULTISESSION</span><span class="o">=</span><span class="n">multisession_mode</span><span class="p">):</span>
<span class="c1"># we need to patch the module header instead of settings</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.account._MAX_NR_CHARACTERS&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">max_nr_chars</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.account._AUTO_PUPPET_ON_LOGIN&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">auto_puppet</span>
<span 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="n">expected_result</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 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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestBuilding.test_create"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_create">[docs]</a> <span class="k">def</span> <span class="nf">test_create</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<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="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 [category:None] = value1&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 [category:None] = value2&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 [category:None] = value2&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/NotFound&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj2/notfound [category:None] does not exist.&quot;</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.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 [category:None] = value3&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 Obj2/test3 [category:None].&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/test4:Foo = &#39;Bar&#39;&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj2/test4 [category:Foo] = Bar&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 [category:None] = [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/test1&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test1 [category:None] = [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] [category:None] = 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] [category:None] = 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 [category:None] = [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] [category:None] = 99&quot;</span><span class="p">,</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 Obj/test1[0] [category:None].&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] [category:None] = 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;Attribute Obj/test1[1] [category:None] does not exist. (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;No attribute Obj/test1[5] [category: None] was found to &quot;</span>
<span class="s2">&quot;delete. (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 [category:None] = [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 [category:None] = [-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 [category:None] = {&#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 [category:None] = {&#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[&#39;one&#39;]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test2[&#39;one&#39;] [category:None] = 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/test2[&#39;one]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test2[&#39;one] [category:None] = 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/test2[&#39;one&#39;]=99&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test2 [category:None] = {&#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;] [category:None] = 99&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;Attribute Obj/test2[&#39;two&#39;] [category:None] = 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;three&#39;]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test2[+&#39;three&#39;] [category:None] does not exist. (Nested lookups&quot;</span>
<span class="s2">&quot; 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 [category:None] = {&#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 Obj/test2[+&#39;three&#39;] [category:None].&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 [category:None] = {&#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 Obj/test2[&#39;two&#39;] [category:None].&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;Attribute Obj/test2[&#39;two&#39;] [category:None] does not exist. (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 [category:None] = {&#39;one&#39;: 99, &#39;three&#39;: 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[0]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test2[0] [category:None] does not exist. (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;No attribute Obj/test2[&#39;five&#39;] [category: None] &quot;</span>
<span class="s2">&quot;was found to delete. (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 [category:None] = {&#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 [category:None] = &quot;</span>
<span class="s2">&quot;{&#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"># dict - case sensitive 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/test_case = {&#39;FooBar&#39;: 1}&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test_case [category:None] = {&#39;FooBar&#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/test_case[&#39;FooBar&#39;] = 2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#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/test_case&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test_case [category:None] = {&#39;FooBar&#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/test_case[&#39;FooBar&#39;] = {&#39;BarBaz&#39;: 1}&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#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/test_case[&#39;FooBar&#39;][&#39;BarBaz&#39;] = 2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#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/test_case&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#39;: 2}}&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 [category:None] = (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="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;No attribute Obj/tup[1] [category: None] &quot;</span>
<span class="s2">&quot;was found to delete. (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 [category:None] = [{&#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;] [category:None] = 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]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test3[0] [category:None] = {&#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;Deleted attribute Obj/test3[0][&#39;one&#39;] [category:None].&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] [category:None] = </span><span class="si">{}</span><span class="s2">&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&quot;</span><span class="p">,</span> <span class="s2">&quot;Attribute Obj/test3 [category:None] = [</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] [category:None] = foo&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] [category:None] = foo&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=[{&#39;one&#39;: 1}]&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test4 [category:None] = [{&#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;] [category:None] = 1&quot;</span><span class="p">,</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] [category:None] = {&#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;] [category:None] = 1&quot;</span><span class="p">,</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] [category:None] = foo&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;] [category:None] does not exist. (Nested lookups&quot;</span>
<span class="s2">&quot; attempted)&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="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">dbid</span><span class="si">}</span><span class="s2">&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">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="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="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">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&quot;</span>
<span class="s2">&quot; 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">Only the&quot;</span>
<span class="s2">&quot; at_object_creation hook was run (update mode). Attributes set before swap were not&quot;</span>
<span class="s2">&quot; removed</span><span class="se">\n</span><span class="s2">(use `swap` or `type/reset` to clear all).&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="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="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 evennia.objects.objects.DefaultObject to &quot;</span>
<span class="s2">&quot;typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">Only the at_object_creation hook was run &quot;</span>
<span class="s2">&quot;(update mode). Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;(use `swap` or `type/reset` to clear all). Prototype &#39;replaced_obj&#39; was &quot;</span>
<span class="s2">&quot;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.scripts.DefaultScript&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script scripts.scripts.DefaultScript successfully added&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;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="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.scripts.DefaultScript&quot;</span><span class="p">,</span>
<span class="s2">&quot;Script scripts.scripts.DefaultScript 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.scripts.DefaultScript&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.scripts.DefaultScript&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.scripts.DefaultScript&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>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_script_multi_delete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_script_multi_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">script1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script2</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script3</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span 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 #</span><span class="si">{}</span><span class="s2">-#</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">script1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">script3</span><span class="o">.</span><span class="n">id</span><span class="p">),</span>
<span class="sa">f</span><span class="s2">&quot;Global Script Deleted - #</span><span class="si">{</span><span class="n">script1</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="sa">f</span><span class="s2">&quot;Global Script Deleted - #</span><span class="si">{</span><span class="n">script2</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="sa">f</span><span class="s2">&quot;Global Script Deleted - #</span><span class="si">{</span><span class="n">script3</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2"> (evennia.scripts.scripts.DefaultScript)&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">assertFalse</span><span class="p">(</span><span class="n">script1</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">assertFalse</span><span class="p">(</span><span class="n">script2</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">assertFalse</span><span class="p">(</span><span class="n">script3</span><span class="o">.</span><span class="n">pk</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;, &#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;, &#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;,&quot;</span>
<span class="s2">&quot; &#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">import</span> <span class="nn">evennia.commands.default.comms</span> <span class="k">as</span> <span class="nn">cmd_comms</span> <span class="c1"># noqa</span>
<span class="kn">from</span> <span class="nn">evennia.comms.comms</span> <span class="kn">import</span> <span class="n">DefaultChannel</span> <span class="c1"># noqa</span>
<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="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.commands.default.comms.CHANNEL_DEFAULT_TYPECLASS&quot;</span><span class="p">,</span> <span class="n">DefaultChannel</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TestCommsChannel</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</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="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">cmd_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="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;foo Hello&quot;</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="s2">&quot;foo $1&quot;</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="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;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>
<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="s2">&quot;foo&quot;</span><span class="p">),</span> <span class="s2">&quot;foo:false()&quot;</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="s2">&quot;foo&quot;</span><span class="p">),</span> <span class="s2">&quot;&quot;</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="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.commands.default</span> <span class="kn">import</span> <span class="n">comms</span> <span class="c1"># noqa</span>
<div class="viewcode-block" id="TestComms"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestComms">[docs]</a><span class="k">class</span> <span class="nc">TestComms</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestComms.test_page"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestComms.test_page">[docs]</a> <span class="k">def</span> <span class="nf">test_page</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<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">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the batch processor.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># there is some sort of issue with the mock; it needs to loaded once to work</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.tutorials.red_button</span> <span class="kn">import</span> <span class="n">red_button</span> <span class="c1"># noqa</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.tutorials.red_button.red_button.repeat&quot;</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.tutorials.red_button.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_tutorials</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;batchprocessor.example_batch_cmds&quot;</span><span class="p">,</span>
<span class="s2">&quot;Running Batch-command processor - Automatic mode for&quot;</span>
<span class="s2">&quot; batchprocessor.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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestInterruptCommand.test_interrupt_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestInterruptCommand.test_interrupt_command">[docs]</a> <span class="k">def</span> <span class="nf">test_interrupt_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">CmdInterrupt</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestUnconnectedCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestUnconnectedCommand">[docs]</a><span class="k">class</span> <span class="nc">TestUnconnectedCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestUnconnectedCommand.test_info_command"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestUnconnectedCommand.test_info_command">[docs]</a> <span class="k">def</span> <span class="nf">test_info_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># instead of using SERVER_START_TIME (0), we use 86400 because Windows won&#39;t let us use anything lower</span>
<span class="n">gametime</span><span class="o">.</span><span class="n">SERVER_START_TIME</span> <span class="o">=</span> <span class="mi">86400</span>
<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&quot;</span>
<span class="s2">&quot; 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">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestSystemCommands.test_simple_defaults"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_simple_defaults">[docs]</a> <span class="k">def</span> <span class="nf">test_simple_defaults</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">syscommands</span><span class="o">.</span><span class="n">SystemNoInput</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">syscommands</span><span class="o">.</span><span class="n">SystemNoMatch</span><span class="p">(),</span> <span class="s2">&quot;Huh?&quot;</span><span class="p">)</span></div>
<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>
</div>
</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 2022, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>