This commit is contained in:
intelliot
2023-07-05 15:50:02 +00:00
parent 7f3d90dc39
commit 329babe2c7
2 changed files with 310 additions and 269 deletions

View File

@@ -590,112 +590,139 @@ $(function() {
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; </div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; Env env(*<span class="keyword">this</span>, features);</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; Account <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; env.fund(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">XRP</a>(1000), alice);</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; </div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keyword">auto</span> getAccountFlag = [&amp;env, &amp;alice](<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a> fName) {</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> info = env.rpc(</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="stringliteral">&quot;account_info&quot;</span>,</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; R<span class="stringliteral">&quot;({&quot;account&quot; : &quot;)&quot; + alice.human() + R</span><span class="stringliteral">&quot;(&quot;})&quot;);</span></div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="stringliteral"></span> </div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="stringliteral"> <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;bool&gt;</a> res;</span></div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="stringliteral"> </span><span class="keywordflow">if</span> (info[jss::result][jss::status] == <span class="stringliteral">&quot;success&quot;</span> &amp;&amp;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; info[jss::result][jss::account_flags].isMember(fName.data()))</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; res.<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional/emplace.html">emplace</a>(info[jss::result][jss::account_flags][fName.data()]</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; .asBool());</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; };</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; Account <span class="keyword">const</span> bob{<span class="stringliteral">&quot;bob&quot;</span>};</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; env.fund(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">XRP</a>(1000), alice, bob);</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; </div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">auto</span> getAccountFlag = [&amp;env](</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a> fName,</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; Account <span class="keyword">const</span>&amp; account) {</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> info = env.rpc(</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="stringliteral">&quot;account_info&quot;</span>,</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; R<span class="stringliteral">&quot;({&quot;account&quot; : &quot;)&quot; + account.human() + R</span><span class="stringliteral">&quot;(&quot;})&quot;);</span></div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="stringliteral"></span> </div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="stringliteral"> <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;bool&gt;</a> res;</span></div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="stringliteral"> </span><span class="keywordflow">if</span> (info[jss::result][jss::status] == <span class="stringliteral">&quot;success&quot;</span> &amp;&amp;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; info[jss::result][jss::account_flags].isMember(fName.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string_view/data.html">data</a>()))</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; res.<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional/emplace.html">emplace</a>(info[jss::result][jss::account_flags][fName.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string_view/data.html">data</a>()]</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; .asBool());</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keyword">static</span> constexpr std::</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; array&lt;std::pair&lt;std::string_view, std::uint32_t&gt;, 7&gt;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; asFlags{</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; {{<span class="stringliteral">&quot;defaultRipple&quot;</span>, <a class="code" href="namespaceripple.html#a92b26c4fb4288c04285666f316d24f9c">asfDefaultRipple</a>},</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {<span class="stringliteral">&quot;depositAuth&quot;</span>, <a class="code" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>},</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; {<span class="stringliteral">&quot;disallowIncomingXRP&quot;</span>, <a class="code" href="namespaceripple.html#af9cd2b389ce115ba9d17fbd557aca94d">asfDisallowXRP</a>},</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {<span class="stringliteral">&quot;globalFreeze&quot;</span>, <a class="code" href="namespaceripple.html#a0ce63352f37481632452056bb649eb58">asfGlobalFreeze</a>},</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {<span class="stringliteral">&quot;noFreeze&quot;</span>, <a class="code" href="namespaceripple.html#a5bbe95745bed6471c39fef31a05047ee">asfNoFreeze</a>},</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {<span class="stringliteral">&quot;requireAuthorization&quot;</span>, <a class="code" href="namespaceripple.html#ad9d8055be347abb09ae405843dc59473">asfRequireAuth</a>},</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {<span class="stringliteral">&quot;requireDestinationTag&quot;</span>, <a class="code" href="namespaceripple.html#a2e3220cb8c660141f5300a9e38841295">asfRequireDest</a>}}};</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; </div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : asFlags)</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; {</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="comment">// Clear a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(alice, asf.second));</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; env.close();</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f1 = getAccountFlag(asf.first);</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; BEAST_EXPECT(f1.has_value());</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; BEAST_EXPECT(!f1.value());</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// Set a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, asf.second));</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; env.close();</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f2 = getAccountFlag(asf.first);</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; BEAST_EXPECT(f2.has_value());</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; BEAST_EXPECT(f2.value());</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keyword">static</span> constexpr std::</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; array&lt;std::pair&lt;std::string_view, std::uint32_t&gt;, 4&gt;</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; disallowIncomingFlags{</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {{<span class="stringliteral">&quot;disallowIncomingCheck&quot;</span>, <a class="code" href="namespaceripple.html#a9410087e0ef101a892bb3f4a3cb16614">asfDisallowIncomingCheck</a>},</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {<span class="stringliteral">&quot;disallowIncomingNFTokenOffer&quot;</span>,</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="namespaceripple.html#a1dc3be353a462b0e773a87943306c501">asfDisallowIncomingNFTokenOffer</a>},</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {<span class="stringliteral">&quot;disallowIncomingPayChan&quot;</span>, <a class="code" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>},</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; {<span class="stringliteral">&quot;disallowIncomingTrustline&quot;</span>,</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceripple.html#a72b8ab4faf1078ddedabff623d95b057">asfDisallowIncomingTrustline</a>}}};</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; </div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (features[<a class="code" href="namespaceripple.html#a2abe85419644def21413627f484a8df0">featureDisallowIncoming</a>])</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : disallowIncomingFlags)</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="comment">// Clear a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(alice, asf.second));</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; env.close();</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f1 = getAccountFlag(asf.first);</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; BEAST_EXPECT(f1.has_value());</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; BEAST_EXPECT(!f1.value());</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">// Set a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, asf.second));</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; env.close();</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f2 = getAccountFlag(asf.first);</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; BEAST_EXPECT(f2.has_value());</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; BEAST_EXPECT(f2.value());</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : disallowIncomingFlags)</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; BEAST_EXPECT(!getAccountFlag(asf.first));</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; }</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; </div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; run()<span class="keyword"> override</span></div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="classripple_1_1test_1_1AccountInfo__test.html#abf82c46999579cc69f6796f4c0ee5382">testErrors</a>();</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; testSignerLists();</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; testSignerListsApiVersion2();</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; testSignerListsV2();</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; FeatureBitset <span class="keyword">const</span> allFeatures{</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="namespaceripple_1_1test_1_1jtx.html#af5441d84d5977d52246c5226313560d4">ripple::test::jtx::supported_amendments</a>()};</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; testAccountFlags(allFeatures);</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; testAccountFlags(allFeatures - <a class="code" href="namespaceripple.html#a2abe85419644def21413627f484a8df0">featureDisallowIncoming</a>);</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; }</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;};</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<a class="code" href="namespaceripple_1_1test.html#a36e90e9cdf2adf7993483b3190ee8e21">BEAST_DEFINE_TESTSUITE</a>(AccountInfo, app, <a class="code" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;} <span class="comment">// namespace test</span></div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; };</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; </div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">static</span> constexpr std::</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; array&lt;std::pair&lt;std::string_view, std::uint32_t&gt;, 7&gt;</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; asFlags{</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {{<span class="stringliteral">&quot;defaultRipple&quot;</span>, <a class="code" href="namespaceripple.html#a92b26c4fb4288c04285666f316d24f9c">asfDefaultRipple</a>},</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; {<span class="stringliteral">&quot;depositAuth&quot;</span>, <a class="code" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>},</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {<span class="stringliteral">&quot;disallowIncomingXRP&quot;</span>, <a class="code" href="namespaceripple.html#af9cd2b389ce115ba9d17fbd557aca94d">asfDisallowXRP</a>},</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {<span class="stringliteral">&quot;globalFreeze&quot;</span>, <a class="code" href="namespaceripple.html#a0ce63352f37481632452056bb649eb58">asfGlobalFreeze</a>},</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {<span class="stringliteral">&quot;noFreeze&quot;</span>, <a class="code" href="namespaceripple.html#a5bbe95745bed6471c39fef31a05047ee">asfNoFreeze</a>},</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; {<span class="stringliteral">&quot;requireAuthorization&quot;</span>, <a class="code" href="namespaceripple.html#ad9d8055be347abb09ae405843dc59473">asfRequireAuth</a>},</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; {<span class="stringliteral">&quot;requireDestinationTag&quot;</span>, <a class="code" href="namespaceripple.html#a2e3220cb8c660141f5300a9e38841295">asfRequireDest</a>}}};</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; </div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : asFlags)</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// Clear a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(alice, asf.second));</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; env.close();</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f1 = getAccountFlag(asf.first, alice);</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; BEAST_EXPECT(f1.has_value());</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; BEAST_EXPECT(!f1.value());</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// Set a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, asf.second));</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; env.close();</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f2 = getAccountFlag(asf.first, alice);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; BEAST_EXPECT(f2.has_value());</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; BEAST_EXPECT(f2.value());</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; </div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keyword">static</span> constexpr std::</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; array&lt;std::pair&lt;std::string_view, std::uint32_t&gt;, 4&gt;</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; disallowIncomingFlags{</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {{<span class="stringliteral">&quot;disallowIncomingCheck&quot;</span>, <a class="code" href="namespaceripple.html#a9410087e0ef101a892bb3f4a3cb16614">asfDisallowIncomingCheck</a>},</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; {<span class="stringliteral">&quot;disallowIncomingNFTokenOffer&quot;</span>,</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceripple.html#a1dc3be353a462b0e773a87943306c501">asfDisallowIncomingNFTokenOffer</a>},</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {<span class="stringliteral">&quot;disallowIncomingPayChan&quot;</span>, <a class="code" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>},</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; {<span class="stringliteral">&quot;disallowIncomingTrustline&quot;</span>,</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="namespaceripple.html#a72b8ab4faf1078ddedabff623d95b057">asfDisallowIncomingTrustline</a>}}};</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (features[<a class="code" href="namespaceripple.html#a2abe85419644def21413627f484a8df0">featureDisallowIncoming</a>])</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : disallowIncomingFlags)</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; {</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">// Clear a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(alice, asf.second));</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; env.close();</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f1 = getAccountFlag(asf.first, alice);</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; BEAST_EXPECT(f1.has_value());</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; BEAST_EXPECT(!f1.value());</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; </div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="comment">// Set a flag and check that account_info returns results</span></div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// as expected</span></div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, asf.second));</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; env.close();</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f2 = getAccountFlag(asf.first, alice);</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; BEAST_EXPECT(f2.has_value());</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; BEAST_EXPECT(f2.value());</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; asf : disallowIncomingFlags)</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; BEAST_EXPECT(!getAccountFlag(asf.first, alice));</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; }</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; </div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">static</span> constexpr <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;std::string_view, std::uint32_t&gt;</a></div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; allowClawbackFlag{<span class="stringliteral">&quot;allowClawback&quot;</span>, <a class="code" href="namespaceripple.html#a3ac502eaeebe1f069671eeb7b978a1a6">asfAllowClawback</a>};</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordflow">if</span> (features[<a class="code" href="namespaceripple.html#aa590b67515aae0d22360a2cc8ab9b28c">featureClawback</a>])</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; {</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// must use bob&#39;s account because alice has noFreeze set</span></div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f1 = getAccountFlag(allowClawbackFlag.first, bob);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; BEAST_EXPECT(f1.has_value());</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; BEAST_EXPECT(!f1.value());</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// Set allowClawback</span></div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; env(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, allowClawbackFlag.second));</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; env.close();</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> f2 = getAccountFlag(allowClawbackFlag.first, bob);</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; BEAST_EXPECT(f2.has_value());</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; BEAST_EXPECT(f2.value());</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; BEAST_EXPECT(!getAccountFlag(allowClawbackFlag.first, bob));</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; }</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; run()<span class="keyword"> override</span></div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="classripple_1_1test_1_1AccountInfo__test.html#abf82c46999579cc69f6796f4c0ee5382">testErrors</a>();</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; testSignerLists();</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; testSignerListsApiVersion2();</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; testSignerListsV2();</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; FeatureBitset <span class="keyword">const</span> allFeatures{</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="namespaceripple_1_1test_1_1jtx.html#af5441d84d5977d52246c5226313560d4">ripple::test::jtx::supported_amendments</a>()};</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; testAccountFlags(allFeatures);</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; testAccountFlags(allFeatures - <a class="code" href="namespaceripple.html#a2abe85419644def21413627f484a8df0">featureDisallowIncoming</a>);</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; testAccountFlags(</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; allFeatures - <a class="code" href="namespaceripple.html#a2abe85419644def21413627f484a8df0">featureDisallowIncoming</a> - <a class="code" href="namespaceripple.html#aa590b67515aae0d22360a2cc8ab9b28c">featureClawback</a>);</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;};</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; </div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<a class="code" href="namespaceripple_1_1test.html#a36e90e9cdf2adf7993483b3190ee8e21">BEAST_DEFINE_TESTSUITE</a>(AccountInfo, app, <a class="code" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; </div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;} <span class="comment">// namespace test</span></div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespaceripple_html_a3eb7d40b5e6271ef328b552297f94311"><div class="ttname"><a href="namespaceripple.html#a3eb7d40b5e6271ef328b552297f94311">ripple::sfSignerWeight</a></div><div class="ttdeci">const SF_UINT16 sfSignerWeight</div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a37cf35ddf6bc8f4c6cbfa3fba57d6815"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">ripple::test::jtx::XRP</a></div><div class="ttdeci">const XRP_t XRP</div><div class="ttdoc">Converts to XRP Issue or STAmount.</div><div class="ttdef"><b>Definition:</b> <a href="amount_8cpp_source.html#l00105">amount.cpp:105</a></div></div>
@@ -703,8 +730,11 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a1d8ec9af2fd805d04e032c52f6968211"><div class="ttname"><a href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">ripple::asfDepositAuth</a></div><div class="ttdeci">constexpr std::uint32_t asfDepositAuth</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00082">TxFlags.h:82</a></div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_a1cca9362a1182bc08392bbedafa065ff"><div class="ttname"><a href="namespaceripple_1_1keylet.html#a1cca9362a1182bc08392bbedafa065ff">ripple::keylet::signers</a></div><div class="ttdeci">Keylet signers(AccountID const &amp;account) noexcept</div><div class="ttdoc">A SignerList.</div><div class="ttdef"><b>Definition:</b> <a href="Indexes_8cpp_source.html#l00275">Indexes.cpp:275</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa590b67515aae0d22360a2cc8ab9b28c"><div class="ttname"><a href="namespaceripple.html#aa590b67515aae0d22360a2cc8ab9b28c">ripple::featureClawback</a></div><div class="ttdeci">const uint256 featureClawback</div></div>
<div class="ttc" id="abasic_string_view_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5bbe95745bed6471c39fef31a05047ee"><div class="ttname"><a href="namespaceripple.html#a5bbe95745bed6471c39fef31a05047ee">ripple::asfNoFreeze</a></div><div class="ttdeci">constexpr std::uint32_t asfNoFreeze</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00079">TxFlags.h:79</a></div></div>
<div class="ttc" id="anamespaceripple_html_a3ac502eaeebe1f069671eeb7b978a1a6"><div class="ttname"><a href="namespaceripple.html#a3ac502eaeebe1f069671eeb7b978a1a6">ripple::asfAllowClawback</a></div><div class="ttdeci">constexpr std::uint32_t asfAllowClawback</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00091">TxFlags.h:91</a></div></div>
<div class="ttc" id="aemplace_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/optional/emplace.html">std::optional::emplace</a></div><div class="ttdeci">T emplace(T... args)</div></div>
<div class="ttc" id="anamespaceripple_html_ac12fbb1864b09bfd3fb4ead410449edd"><div class="ttname"><a href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">ripple::asfDisallowIncomingPayChan</a></div><div class="ttdeci">constexpr std::uint32_t asfDisallowIncomingPayChan</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00089">TxFlags.h:89</a></div></div>
<div class="ttc" id="aclassripple_1_1SField_html_a45acf918dce2b1e3e40c6344a49f7b51"><div class="ttname"><a href="classripple_1_1SField.html#a45acf918dce2b1e3e40c6344a49f7b51">ripple::SField::jsonName</a></div><div class="ttdeci">const Json::StaticString jsonName</div><div class="ttdef"><b>Definition:</b> <a href="SField_8h_source.html#l00136">SField.h:136</a></div></div>