llagentaccess_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llagentaccess_test.cpp
  3.  * @brief LLAgentAccess tests
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "linden_common.h"
  33. #include "../test/lltut.h"
  34. #include "../llagentaccess.h"
  35. #include "llcontrol.h"
  36. #include "indra_constants.h"
  37. #include <iostream>
  38. //----------------------------------------------------------------------------
  39. // Implementation of enough of LLControlGroup to support the tests:
  40. static U32 test_preferred_maturity = SIM_ACCESS_PG;
  41. LLControlGroup::LLControlGroup(const std::string& name)
  42. : LLInstanceTracker<LLControlGroup, std::string>(name)
  43. {
  44. }
  45. LLControlGroup::~LLControlGroup()
  46. {
  47. }
  48. // Implementation of just the LLControlGroup methods we requre
  49. BOOL LLControlGroup::declareU32(const std::string& name, U32 initial_val, const std::string& comment, BOOL persist)
  50. {
  51. test_preferred_maturity = initial_val;
  52. return true;
  53. }
  54. void LLControlGroup::setU32(const std::string& name, U32 val)
  55. {
  56. test_preferred_maturity = val;
  57. }
  58. U32 LLControlGroup::getU32(const std::string& name)
  59. {
  60. return test_preferred_maturity;
  61. }
  62. //----------------------------------------------------------------------------
  63. namespace tut
  64. {
  65.     struct agentaccess
  66.     {
  67.     };
  68.     
  69. typedef test_group<agentaccess> agentaccess_t;
  70. typedef agentaccess_t::object agentaccess_object_t;
  71. tut::agentaccess_t tut_agentaccess("agentaccess");
  72. template<> template<>
  73. void agentaccess_object_t::test<1>()
  74. {
  75. LLControlGroup cgr("test");
  76. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  77. LLAgentAccess aa(cgr);
  78. cgr.setU32("PreferredMaturity", SIM_ACCESS_PG);
  79. ensure("1 prefersPG",     aa.prefersPG());
  80. ensure("1 prefersMature", !aa.prefersMature());
  81. ensure("1 prefersAdult",  !aa.prefersAdult());
  82. cgr.setU32("PreferredMaturity", SIM_ACCESS_MATURE);
  83. ensure("2 prefersPG",     !aa.prefersPG());
  84. ensure("2 prefersMature", aa.prefersMature());
  85. ensure("2 prefersAdult",  !aa.prefersAdult());
  86. cgr.setU32("PreferredMaturity", SIM_ACCESS_ADULT);
  87. ensure("3 prefersPG",     !aa.prefersPG());
  88. ensure("3 prefersMature", aa.prefersMature());
  89. ensure("3 prefersAdult",  aa.prefersAdult());
  90.     }
  91.     
  92. template<> template<>
  93. void agentaccess_object_t::test<2>()
  94. {
  95. LLControlGroup cgr("test");
  96. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  97. LLAgentAccess aa(cgr);
  98. // make sure default is PG
  99. ensure("1 isTeen",     aa.isTeen());
  100. ensure("1 isMature",   !aa.isMature());
  101. ensure("1 isAdult",    !aa.isAdult());
  102. // this is kinda bad -- setting this forces maturity to MATURE but !teen != Mature anymore
  103. aa.setTeen(false);
  104. ensure("2 isTeen",     !aa.isTeen());
  105. ensure("2 isMature",   aa.isMature());
  106. ensure("2 isAdult",    !aa.isAdult());
  107. // have to flip it back and make sure it still works
  108. aa.setTeen(true);
  109. ensure("3 isTeen",     aa.isTeen());
  110. ensure("3 isMature",   !aa.isMature());
  111. ensure("3 isAdult",    !aa.isAdult());
  112. // check the conversion routine
  113. ensure_equals("1 conversion", SIM_ACCESS_PG, aa.convertTextToMaturity('P'));
  114. ensure_equals("2 conversion", SIM_ACCESS_MATURE, aa.convertTextToMaturity('M'));
  115. ensure_equals("3 conversion", SIM_ACCESS_ADULT, aa.convertTextToMaturity('A'));
  116. ensure_equals("4 conversion", SIM_ACCESS_MIN, aa.convertTextToMaturity('Q'));
  117. // now try the other method of setting it - PG
  118. aa.setMaturity('P');
  119. ensure("4 isTeen",     aa.isTeen());
  120. ensure("4 isMature",   !aa.isMature());
  121. ensure("4 isAdult",    !aa.isAdult());
  122. // Mature
  123. aa.setMaturity('M');
  124. ensure("5 isTeen",     !aa.isTeen());
  125. ensure("5 isMature",   aa.isMature());
  126. ensure("5 isAdult",    !aa.isAdult());
  127. // Adult
  128. aa.setMaturity('A');
  129. ensure("6 isTeen",     !aa.isTeen());
  130. ensure("6 isMature",   aa.isMature());
  131. ensure("6 isAdult",    aa.isAdult());
  132. }
  133. template<> template<>
  134. void agentaccess_object_t::test<3>()
  135. {
  136. LLControlGroup cgr("test");
  137. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  138. LLAgentAccess aa(cgr);
  139. ensure("starts normal", !aa.isGodlike());
  140. aa.setGodLevel(GOD_NOT);
  141. ensure("stays normal", !aa.isGodlike());
  142. aa.setGodLevel(GOD_FULL);
  143. ensure("sets full", aa.isGodlike());
  144. aa.setGodLevel(GOD_NOT);
  145. ensure("resets normal", !aa.isGodlike());
  146. aa.setAdminOverride(true);
  147. ensure("admin true", aa.getAdminOverride());
  148. ensure("overrides 1", aa.isGodlike());
  149. aa.setGodLevel(GOD_FULL);
  150. ensure("overrides 2", aa.isGodlike());
  151. aa.setAdminOverride(false);
  152. ensure("admin false", !aa.getAdminOverride());
  153. ensure("overrides 3", aa.isGodlike());
  154.     }
  155.     
  156. template<> template<>
  157. void agentaccess_object_t::test<4>()
  158. {
  159. LLControlGroup cgr("test");
  160. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  161. LLAgentAccess aa(cgr);
  162. ensure("1 pg to start", aa.wantsPGOnly());
  163. ensure("2 pg to start", !aa.canAccessMature());
  164. ensure("3 pg to start", !aa.canAccessAdult());
  165. aa.setGodLevel(GOD_FULL);
  166. ensure("1 full god", !aa.wantsPGOnly());
  167. ensure("2 full god", aa.canAccessMature());
  168. ensure("3 full god", aa.canAccessAdult());
  169. aa.setGodLevel(GOD_NOT);
  170. aa.setAdminOverride(true);
  171. ensure("1 admin mode", !aa.wantsPGOnly());
  172. ensure("2 admin mode", aa.canAccessMature());
  173. ensure("3 admin mode", aa.canAccessAdult());
  174. aa.setAdminOverride(false);
  175. aa.setMaturity('M');
  176. // preferred is still pg by default
  177. ensure("1 mature pref pg", aa.wantsPGOnly());
  178. ensure("2 mature pref pg", !aa.canAccessMature());
  179. ensure("3 mature pref pg", !aa.canAccessAdult());
  180. cgr.setU32("PreferredMaturity", SIM_ACCESS_MATURE);
  181. ensure("1 mature", !aa.wantsPGOnly());
  182. ensure("2 mature", aa.canAccessMature());
  183. ensure("3 mature", !aa.canAccessAdult());
  184. cgr.setU32("PreferredMaturity", SIM_ACCESS_PG);
  185. ensure("1 mature pref pg", aa.wantsPGOnly());
  186. ensure("2 mature pref pg", !aa.canAccessMature());
  187. ensure("3 mature pref pg", !aa.canAccessAdult());
  188. aa.setMaturity('A');
  189. ensure("1 adult pref pg", aa.wantsPGOnly());
  190. ensure("2 adult pref pg", !aa.canAccessMature());
  191. ensure("3 adult pref pg", !aa.canAccessAdult());
  192. cgr.setU32("PreferredMaturity", SIM_ACCESS_ADULT);
  193. ensure("1 adult", !aa.wantsPGOnly());
  194. ensure("2 adult", aa.canAccessMature());
  195. ensure("3 adult", aa.canAccessAdult());
  196. // make sure that even if pref is high, if access is low we block access
  197. // this shouldn't occur in real life but we want to be safe
  198. cgr.setU32("PreferredMaturity", SIM_ACCESS_ADULT);
  199. aa.setMaturity('P');
  200. ensure("1 pref adult, actual pg", aa.wantsPGOnly());
  201. ensure("2 pref adult, actual pg", !aa.canAccessMature());
  202. ensure("3 pref adult, actual pg", !aa.canAccessAdult());
  203. }
  204. template<> template<>
  205. void agentaccess_object_t::test<5>()
  206. {
  207. LLControlGroup cgr("test");
  208. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  209. LLAgentAccess aa(cgr);
  210. ensure("1 transition starts false", !aa.isInTransition());
  211. aa.setTransition();
  212. ensure("2 transition now true", aa.isInTransition());
  213. }
  214. template<> template<>
  215. void agentaccess_object_t::test<6>()
  216. {
  217. LLControlGroup cgr("test");
  218. cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
  219. LLAgentAccess aa(cgr);
  220. cgr.setU32("PreferredMaturity", SIM_ACCESS_ADULT);
  221. aa.setMaturity('M');
  222. ensure("1 preferred maturity pegged to M when maturity is M", cgr.getU32("PreferredMaturity") == SIM_ACCESS_MATURE);
  223. aa.setMaturity('P');
  224. ensure("1 preferred maturity pegged to P when maturity is P", cgr.getU32("PreferredMaturity") == SIM_ACCESS_PG);
  225. }
  226. }