summaryrefslogtreecommitdiff
path: root/indra/newview/tests/llworldmap_test.cpp
diff options
context:
space:
mode:
authorAnsariel <ansariel.hiller@phoenixviewer.com>2024-05-22 21:25:21 +0200
committerAndrey Lihatskiy <alihatskiy@productengine.com>2024-05-22 22:40:26 +0300
commite2e37cced861b98de8c1a7c9c0d3a50d2d90e433 (patch)
tree1bb897489ce524986f6196201c10ac0d8861aa5f /indra/newview/tests/llworldmap_test.cpp
parent069ea06848f766466f1a281144c82a0f2bd79f3a (diff)
Fix line endlings
Diffstat (limited to 'indra/newview/tests/llworldmap_test.cpp')
-rw-r--r--indra/newview/tests/llworldmap_test.cpp1030
1 files changed, 515 insertions, 515 deletions
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
index 6245198888..8564dbeeb6 100644
--- a/indra/newview/tests/llworldmap_test.cpp
+++ b/indra/newview/tests/llworldmap_test.cpp
@@ -1,515 +1,515 @@
-/**
- * @file llworldmap_test.cpp
- * @author Merov Linden
- * @date 2009-03-09
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-// Dependencies
-#include "linden_common.h"
-#include "llapr.h"
-#include "llsingleton.h"
-#include "lltrans.h"
-#include "lluistring.h"
-#include "../llviewertexture.h"
-#include "../llworldmapmessage.h"
-// Class to test
-#include "../llworldmap.h"
-// Tut header
-#include "../test/lltut.h"
-
-// -------------------------------------------------------------------------------------------
-// Stubbing: Declarations required to link and run the class being tested
-// Notes:
-// * Add here stubbed implementation of the few classes and methods used in the class to be tested
-// * Add as little as possible (let the link errors guide you)
-// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
-// * A simulator for a class can be implemented here. Please comment and document thoroughly.
-
-// Stub image calls
-void LLGLTexture::setBoostLevel(S32 ) { }
-void LLGLTexture::setAddressMode(LLTexUnit::eTextureAddressMode ) { }
-LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(const LLUUID&, FTType, bool, LLGLTexture::EBoostLevel, S8,
- LLGLint, LLGLenum, LLHost ) { return NULL; }
-
-// Stub related map calls
-LLWorldMapMessage::LLWorldMapMessage() { }
-LLWorldMapMessage::~LLWorldMapMessage() { }
-void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
-void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
-
-LLWorldMipmap::LLWorldMipmap() { }
-LLWorldMipmap::~LLWorldMipmap() { }
-void LLWorldMipmap::reset() { }
-void LLWorldMipmap::dropBoostLevels() { }
-void LLWorldMipmap::equalizeBoostLevels() { }
-LLPointer<LLViewerFetchedTexture> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load) { return NULL; }
-
-// Stub other stuff
-std::string LLTrans::getString(const std::string &, const LLStringUtil::format_map_t&, bool def_string) { return std::string("test_trans"); }
-void LLUIString::updateResult() const { }
-void LLUIString::setArg(const std::string& , const std::string& ) { }
-void LLUIString::assign(const std::string& ) { }
-
-// End Stubbing
-// -------------------------------------------------------------------------------------------
-
-// -------------------------------------------------------------------------------------------
-// TUT
-// -------------------------------------------------------------------------------------------
-
-const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS;
-const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS;
-const F32 Z_WORLD_TEST = 240.0f;
-const std::string ITEM_NAME_TEST = "Item Foo";
-const std::string TOOLTIP_TEST = "Tooltip Foo";
-
-const std::string SIM_NAME_TEST = "Sim Foo";
-
-namespace tut
-{
- // Test wrapper declarations
- struct iteminfo_test
- {
- // Instance to be tested
- LLItemInfo* mItem;
-
- // Constructor and destructor of the test wrapper
- iteminfo_test()
- {
- LLUUID id;
- mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
- }
- ~iteminfo_test()
- {
- delete mItem;
- }
- };
-
- struct siminfo_test
- {
- // Instance to be tested
- LLSimInfo* mSim;
-
- // Constructor and destructor of the test wrapper
- siminfo_test()
- {
- U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
- mSim = new LLSimInfo(handle);
- }
- ~siminfo_test()
- {
- delete mSim;
- }
- };
-
- struct worldmap_test
- {
- // Instance to be tested
- LLWorldMap* mWorld;
-
- // Constructor and destructor of the test wrapper
- worldmap_test()
- {
- mWorld = LLWorldMap::getInstance();
- }
- ~worldmap_test()
- {
- mWorld = NULL;
- }
- };
-
- // Tut templating thingamagic: test group, object and test instance
- typedef test_group<iteminfo_test> iteminfo_t;
- typedef iteminfo_t::object iteminfo_object_t;
- tut::iteminfo_t tut_iteminfo("LLItemInfo");
-
- typedef test_group<siminfo_test> siminfo_t;
- typedef siminfo_t::object siminfo_object_t;
- tut::siminfo_t tut_siminfo("LLSimInfo");
-
- typedef test_group<worldmap_test> worldmap_t;
- typedef worldmap_t::object worldmap_object_t;
- tut::worldmap_t tut_worldmap("LLWorldMap");
-
- // ---------------------------------------------------------------------------------------
- // Test functions
- // Notes:
- // * Test as many as you possibly can without requiring a full blown simulation of everything
- // * The tests are executed in sequence so the test instance state may change between calls
- // * Remember that you cannot test private methods with tut
- // ---------------------------------------------------------------------------------------
-
- // ---------------------------------------------------------------------------------------
- // Test the LLItemInfo interface
- // ---------------------------------------------------------------------------------------
- template<> template<>
- void iteminfo_object_t::test<1>()
- {
- // Test 1 : setCount() / getCount()
- mItem->setCount(10);
- ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10);
- // Test 2 : setTooltip() / getToolTip()
- std::string tooltip = TOOLTIP_TEST;
- mItem->setTooltip(tooltip);
- ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST);
- // Test 3 : setElevation() / getGlobalPosition()
- mItem->setElevation(Z_WORLD_TEST);
- LLVector3d pos = mItem->getGlobalPosition();
- LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST);
- ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref);
- // Test 4 : getName()
- std::string name = mItem->getName();
- ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST);
- // Test 5 : isName()
- ensure("LLItemInfo::isName() test failed", mItem->isName(name));
- // Test 6 : getUUID()
- LLUUID id;
- ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id);
- // Test 7 : getRegionHandle()
- U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
- ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle);
- }
- // ---------------------------------------------------------------------------------------
- // Test the LLSimInfo interface
- // ---------------------------------------------------------------------------------------
- // Test Setters and Accessors methods
- template<> template<>
- void siminfo_object_t::test<1>()
- {
- // Test 1 : setName() / getName()
- std::string name = SIM_NAME_TEST;
- mSim->setName(name);
- ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST);
- // Test 2 : isName()
- ensure("LLSimInfo::isName() test failed", mSim->isName(name));
- // Test 3 : getGlobalPos()
- LLVector3 local;
- LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f);
- LLVector3d pos = mSim->getGlobalPos(local);
- ensure("LLSimInfo::getGlobalPos() test failed", pos == ref);
- // Test 4 : getGlobalOrigin()
- pos = mSim->getGlobalOrigin();
- ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref);
- // Test 5 : clearImage()
- try {
- mSim->clearImage();
- } catch (...) {
- fail("LLSimInfo::clearImage() test failed");
- }
- // Test 6 : dropImagePriority()
- try {
- mSim->dropImagePriority();
- } catch (...) {
- fail("LLSimInfo::dropImagePriority() test failed");
- }
- // Test 7 : updateAgentCount()
- try {
- mSim->updateAgentCount(0.0f);
- } catch (...) {
- fail("LLSimInfo::updateAgentCount() test failed");
- }
- // Test 8 : getAgentCount()
- S32 agents = mSim->getAgentCount();
- ensure("LLSimInfo::getAgentCount() test failed", agents == 0);
- // Test 9 : setLandForSaleImage() / getLandForSaleImage()
- LLUUID id;
- mSim->setLandForSaleImage(id);
- LLPointer<LLViewerFetchedTexture> image = mSim->getLandForSaleImage();
- ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull());
- // Test 10 : isPG()
- mSim->setAccess(SIM_ACCESS_PG);
- ensure("LLSimInfo::isPG() test failed", mSim->isPG());
- // Test 11 : isDown()
- mSim->setAccess(SIM_ACCESS_DOWN);
- ensure("LLSimInfo::isDown() test failed", mSim->isDown());
- // Test 12 : Access strings can't be accessed from unit test...
- //ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline");
- // Test 13 : Region strings can't be accessed from unit test...
- //mSim->setRegionFlags(REGION_FLAGS_SANDBOX);
- //ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox");
- }
- // Test management of LLInfoItem lists
- template<> template<>
- void siminfo_object_t::test<2>()
- {
- // Test 14 : clearItems()
- try {
- mSim->clearItems();
- } catch (...) {
- fail("LLSimInfo::clearItems() at init test failed");
- }
-
- // Test 15 : Verify that all the lists are empty
- LLSimInfo::item_info_list_t list;
- list = mSim->getTeleHub();
- ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty());
- list = mSim->getInfoHub();
- ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty());
- list = mSim->getPGEvent();
- ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty());
- list = mSim->getMatureEvent();
- ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty());
- list = mSim->getLandForSale();
- ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty());
- list = mSim->getAgentLocation();
- ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty());
-
- // Create an item to be inserted
- LLUUID id;
- LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
-
- // Insert the item in each list
- mSim->insertTeleHub(item);
- mSim->insertInfoHub(item);
- mSim->insertPGEvent(item);
- mSim->insertMatureEvent(item);
- mSim->insertLandForSale(item);
- mSim->insertAgentLocation(item);
-
- // Test 16 : Verify that the lists contain 1 item each
- list = mSim->getTeleHub();
- ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1);
- list = mSim->getInfoHub();
- ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1);
- list = mSim->getPGEvent();
- ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1);
- list = mSim->getMatureEvent();
- ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1);
- list = mSim->getLandForSale();
- ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1);
- list = mSim->getAgentLocation();
- ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1);
-
- // Test 17 : clearItems()
- try {
- mSim->clearItems();
- } catch (...) {
- fail("LLSimInfo::clearItems() at end test failed");
- }
-
- // Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose)
- list = mSim->getTeleHub();
- ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty());
- list = mSim->getInfoHub();
- ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty());
- list = mSim->getPGEvent();
- ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty());
- list = mSim->getMatureEvent();
- ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty());
- list = mSim->getLandForSale();
- ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty());
- list = mSim->getAgentLocation();
- ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1);
- }
-
- // ---------------------------------------------------------------------------------------
- // Test the LLWorldMap interface
- // ---------------------------------------------------------------------------------------
- // Test Setters and Accessors methods
- template<> template<>
- void worldmap_object_t::test<1>()
- {
- // Test 1 : reset()
- try {
- mWorld->reset();
- } catch (...) {
- fail("LLWorldMap::reset() at init test failed");
- }
- // Test 2 : clearImageRefs()
- try {
- mWorld->clearImageRefs();
- } catch (...) {
- fail("LLWorldMap::clearImageRefs() test failed");
- }
- // Test 3 : dropImagePriorities()
- try {
- mWorld->dropImagePriorities();
- } catch (...) {
- fail("LLWorldMap::dropImagePriorities() test failed");
- }
- // Test 4 : reloadItems()
- try {
- mWorld->reloadItems(true);
- } catch (...) {
- fail("LLWorldMap::reloadItems() test failed");
- }
- // Test 5 : updateRegions()
- try {
- mWorld->updateRegions(1000, 1000, 1004, 1004);
- } catch (...) {
- fail("LLWorldMap::updateRegions() test failed");
- }
- // Test 6 : equalizeBoostLevels()
- try {
- mWorld->equalizeBoostLevels();
- } catch (...) {
- fail("LLWorldMap::equalizeBoostLevels() test failed");
- }
- // Test 7 : getObjectsTile()
- try {
- LLPointer<LLViewerFetchedTexture> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1);
- ensure("LLWorldMap::getObjectsTile() failed", image.isNull());
- } catch (...) {
- fail("LLWorldMap::getObjectsTile() test failed with exception");
- }
- }
- // Test management of LLSimInfo lists
- template<> template<>
- void worldmap_object_t::test<2>()
- {
- // Test 8 : reset()
- try {
- mWorld->reset();
- } catch (...) {
- fail("LLWorldMap::reset() at init test failed");
- }
-
- // Test 9 : Verify that all the region list is empty
- LLWorldMap::sim_info_map_t list;
- list = mWorld->getRegionMap();
- ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty());
-
- // Test 10 : Insert a region
- bool success;
- LLUUID id;
- std::string name_sim = SIM_NAME_TEST;
- success = mWorld->insertRegion( U32(X_WORLD_TEST),
- U32(Y_WORLD_TEST),
- name_sim,
- id,
- SIM_ACCESS_PG,
- REGION_FLAGS_SANDBOX);
- list = mWorld->getRegionMap();
- ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1));
-
- // Test 11 : Insert an item in the same region -> number of regions doesn't increase
- std::string name_item = ITEM_NAME_TEST;
- success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS/2),
- U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2),
- name_item,
- id,
- MAP_ITEM_LAND_FOR_SALE,
- 0, 0);
- list = mWorld->getRegionMap();
- ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1));
-
- // Test 12 : Insert an item in another region -> number of regions increases
- success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS*2),
- U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2),
- name_item,
- id,
- MAP_ITEM_LAND_FOR_SALE,
- 0, 0);
- list = mWorld->getRegionMap();
- ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2));
-
- // Test 13 : simInfoFromPosGlobal() in region
- LLVector3d pos1( X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2,
- Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2,
- 0.0f);
- LLSimInfo* sim;
- sim = mWorld->simInfoFromPosGlobal(pos1);
- ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL);
-
- // Test 14 : simInfoFromPosGlobal() outside region
- LLVector3d pos2( X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2,
- Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2,
- 0.0f);
- sim = mWorld->simInfoFromPosGlobal(pos2);
- ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL);
-
- // Test 15 : simInfoFromName()
- sim = mWorld->simInfoFromName(name_sim);
- ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL);
-
- // Test 16 : simInfoFromHandle()
- U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
- sim = mWorld->simInfoFromHandle(handle);
- ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL);
-
- // Test 17 : simNameFromPosGlobal()
- LLVector3d pos3( X_WORLD_TEST + REGION_WIDTH_METERS/2,
- Y_WORLD_TEST + REGION_WIDTH_METERS/2,
- 0.0f);
- success = mWorld->simNameFromPosGlobal(pos3, name_sim);
- ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST));
-
- // Test 18 : reset()
- try {
- mWorld->reset();
- } catch (...) {
- fail("LLWorldMap::reset() at end test failed");
- }
-
- // Test 19 : Verify that all the region list is empty
- list = mWorld->getRegionMap();
- ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty());
- }
- // Test tracking
- template<> template<>
- void worldmap_object_t::test<3>()
- {
- // Point to track
- LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST);
-
- // Test 20 : no tracking
- mWorld->cancelTracking();
- ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false);
-
- // Test 21 : set tracking
- mWorld->setTracking(pos);
- ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation());
-
- // Test 22 : set click and commit flags
- mWorld->setTrackingDoubleClick();
- ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick());
- mWorld->setTrackingCommit();
- ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit());
-
- // Test 23 : in rectangle test
- bool inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST, Y_WORLD_TEST,
- X_WORLD_TEST + REGION_WIDTH_METERS,
- Y_WORLD_TEST + REGION_WIDTH_METERS);
- ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect);
- inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST + REGION_WIDTH_METERS,
- Y_WORLD_TEST + REGION_WIDTH_METERS,
- X_WORLD_TEST + 2 * REGION_WIDTH_METERS,
- Y_WORLD_TEST + 2 * REGION_WIDTH_METERS);
- ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect);
-
- // Test 24 : set tracking to valid and invalid
- mWorld->setTrackingValid();
- ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation());
- mWorld->setTrackingInvalid();
- ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation());
-
- // Test 25 : getTrackedPositionGlobal()
- LLVector3d res = mWorld->getTrackedPositionGlobal();
- ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos);
-
- // Test 26 : reset tracking
- mWorld->cancelTracking();
- ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
- }
-}
+/**
+ * @file llworldmap_test.cpp
+ * @author Merov Linden
+ * @date 2009-03-09
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Dependencies
+#include "linden_common.h"
+#include "llapr.h"
+#include "llsingleton.h"
+#include "lltrans.h"
+#include "lluistring.h"
+#include "../llviewertexture.h"
+#include "../llworldmapmessage.h"
+// Class to test
+#include "../llworldmap.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes:
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+// Stub image calls
+void LLGLTexture::setBoostLevel(S32 ) { }
+void LLGLTexture::setAddressMode(LLTexUnit::eTextureAddressMode ) { }
+LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(const LLUUID&, FTType, bool, LLGLTexture::EBoostLevel, S8,
+ LLGLint, LLGLenum, LLHost ) { return NULL; }
+
+// Stub related map calls
+LLWorldMapMessage::LLWorldMapMessage() { }
+LLWorldMapMessage::~LLWorldMapMessage() { }
+void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
+void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
+
+LLWorldMipmap::LLWorldMipmap() { }
+LLWorldMipmap::~LLWorldMipmap() { }
+void LLWorldMipmap::reset() { }
+void LLWorldMipmap::dropBoostLevels() { }
+void LLWorldMipmap::equalizeBoostLevels() { }
+LLPointer<LLViewerFetchedTexture> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load) { return NULL; }
+
+// Stub other stuff
+std::string LLTrans::getString(const std::string &, const LLStringUtil::format_map_t&, bool def_string) { return std::string("test_trans"); }
+void LLUIString::updateResult() const { }
+void LLUIString::setArg(const std::string& , const std::string& ) { }
+void LLUIString::assign(const std::string& ) { }
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS;
+const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS;
+const F32 Z_WORLD_TEST = 240.0f;
+const std::string ITEM_NAME_TEST = "Item Foo";
+const std::string TOOLTIP_TEST = "Tooltip Foo";
+
+const std::string SIM_NAME_TEST = "Sim Foo";
+
+namespace tut
+{
+ // Test wrapper declarations
+ struct iteminfo_test
+ {
+ // Instance to be tested
+ LLItemInfo* mItem;
+
+ // Constructor and destructor of the test wrapper
+ iteminfo_test()
+ {
+ LLUUID id;
+ mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+ }
+ ~iteminfo_test()
+ {
+ delete mItem;
+ }
+ };
+
+ struct siminfo_test
+ {
+ // Instance to be tested
+ LLSimInfo* mSim;
+
+ // Constructor and destructor of the test wrapper
+ siminfo_test()
+ {
+ U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+ mSim = new LLSimInfo(handle);
+ }
+ ~siminfo_test()
+ {
+ delete mSim;
+ }
+ };
+
+ struct worldmap_test
+ {
+ // Instance to be tested
+ LLWorldMap* mWorld;
+
+ // Constructor and destructor of the test wrapper
+ worldmap_test()
+ {
+ mWorld = LLWorldMap::getInstance();
+ }
+ ~worldmap_test()
+ {
+ mWorld = NULL;
+ }
+ };
+
+ // Tut templating thingamagic: test group, object and test instance
+ typedef test_group<iteminfo_test> iteminfo_t;
+ typedef iteminfo_t::object iteminfo_object_t;
+ tut::iteminfo_t tut_iteminfo("LLItemInfo");
+
+ typedef test_group<siminfo_test> siminfo_t;
+ typedef siminfo_t::object siminfo_object_t;
+ tut::siminfo_t tut_siminfo("LLSimInfo");
+
+ typedef test_group<worldmap_test> worldmap_t;
+ typedef worldmap_t::object worldmap_object_t;
+ tut::worldmap_t tut_worldmap("LLWorldMap");
+
+ // ---------------------------------------------------------------------------------------
+ // Test functions
+ // Notes:
+ // * Test as many as you possibly can without requiring a full blown simulation of everything
+ // * The tests are executed in sequence so the test instance state may change between calls
+ // * Remember that you cannot test private methods with tut
+ // ---------------------------------------------------------------------------------------
+
+ // ---------------------------------------------------------------------------------------
+ // Test the LLItemInfo interface
+ // ---------------------------------------------------------------------------------------
+ template<> template<>
+ void iteminfo_object_t::test<1>()
+ {
+ // Test 1 : setCount() / getCount()
+ mItem->setCount(10);
+ ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10);
+ // Test 2 : setTooltip() / getToolTip()
+ std::string tooltip = TOOLTIP_TEST;
+ mItem->setTooltip(tooltip);
+ ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST);
+ // Test 3 : setElevation() / getGlobalPosition()
+ mItem->setElevation(Z_WORLD_TEST);
+ LLVector3d pos = mItem->getGlobalPosition();
+ LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST);
+ ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref);
+ // Test 4 : getName()
+ std::string name = mItem->getName();
+ ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST);
+ // Test 5 : isName()
+ ensure("LLItemInfo::isName() test failed", mItem->isName(name));
+ // Test 6 : getUUID()
+ LLUUID id;
+ ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id);
+ // Test 7 : getRegionHandle()
+ U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+ ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle);
+ }
+ // ---------------------------------------------------------------------------------------
+ // Test the LLSimInfo interface
+ // ---------------------------------------------------------------------------------------
+ // Test Setters and Accessors methods
+ template<> template<>
+ void siminfo_object_t::test<1>()
+ {
+ // Test 1 : setName() / getName()
+ std::string name = SIM_NAME_TEST;
+ mSim->setName(name);
+ ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST);
+ // Test 2 : isName()
+ ensure("LLSimInfo::isName() test failed", mSim->isName(name));
+ // Test 3 : getGlobalPos()
+ LLVector3 local;
+ LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f);
+ LLVector3d pos = mSim->getGlobalPos(local);
+ ensure("LLSimInfo::getGlobalPos() test failed", pos == ref);
+ // Test 4 : getGlobalOrigin()
+ pos = mSim->getGlobalOrigin();
+ ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref);
+ // Test 5 : clearImage()
+ try {
+ mSim->clearImage();
+ } catch (...) {
+ fail("LLSimInfo::clearImage() test failed");
+ }
+ // Test 6 : dropImagePriority()
+ try {
+ mSim->dropImagePriority();
+ } catch (...) {
+ fail("LLSimInfo::dropImagePriority() test failed");
+ }
+ // Test 7 : updateAgentCount()
+ try {
+ mSim->updateAgentCount(0.0f);
+ } catch (...) {
+ fail("LLSimInfo::updateAgentCount() test failed");
+ }
+ // Test 8 : getAgentCount()
+ S32 agents = mSim->getAgentCount();
+ ensure("LLSimInfo::getAgentCount() test failed", agents == 0);
+ // Test 9 : setLandForSaleImage() / getLandForSaleImage()
+ LLUUID id;
+ mSim->setLandForSaleImage(id);
+ LLPointer<LLViewerFetchedTexture> image = mSim->getLandForSaleImage();
+ ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull());
+ // Test 10 : isPG()
+ mSim->setAccess(SIM_ACCESS_PG);
+ ensure("LLSimInfo::isPG() test failed", mSim->isPG());
+ // Test 11 : isDown()
+ mSim->setAccess(SIM_ACCESS_DOWN);
+ ensure("LLSimInfo::isDown() test failed", mSim->isDown());
+ // Test 12 : Access strings can't be accessed from unit test...
+ //ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline");
+ // Test 13 : Region strings can't be accessed from unit test...
+ //mSim->setRegionFlags(REGION_FLAGS_SANDBOX);
+ //ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox");
+ }
+ // Test management of LLInfoItem lists
+ template<> template<>
+ void siminfo_object_t::test<2>()
+ {
+ // Test 14 : clearItems()
+ try {
+ mSim->clearItems();
+ } catch (...) {
+ fail("LLSimInfo::clearItems() at init test failed");
+ }
+
+ // Test 15 : Verify that all the lists are empty
+ LLSimInfo::item_info_list_t list;
+ list = mSim->getTeleHub();
+ ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty());
+ list = mSim->getInfoHub();
+ ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty());
+ list = mSim->getPGEvent();
+ ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty());
+ list = mSim->getMatureEvent();
+ ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty());
+ list = mSim->getLandForSale();
+ ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty());
+ list = mSim->getAgentLocation();
+ ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty());
+
+ // Create an item to be inserted
+ LLUUID id;
+ LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+
+ // Insert the item in each list
+ mSim->insertTeleHub(item);
+ mSim->insertInfoHub(item);
+ mSim->insertPGEvent(item);
+ mSim->insertMatureEvent(item);
+ mSim->insertLandForSale(item);
+ mSim->insertAgentLocation(item);
+
+ // Test 16 : Verify that the lists contain 1 item each
+ list = mSim->getTeleHub();
+ ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1);
+ list = mSim->getInfoHub();
+ ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1);
+ list = mSim->getPGEvent();
+ ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1);
+ list = mSim->getMatureEvent();
+ ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1);
+ list = mSim->getLandForSale();
+ ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1);
+ list = mSim->getAgentLocation();
+ ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1);
+
+ // Test 17 : clearItems()
+ try {
+ mSim->clearItems();
+ } catch (...) {
+ fail("LLSimInfo::clearItems() at end test failed");
+ }
+
+ // Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose)
+ list = mSim->getTeleHub();
+ ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty());
+ list = mSim->getInfoHub();
+ ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty());
+ list = mSim->getPGEvent();
+ ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty());
+ list = mSim->getMatureEvent();
+ ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty());
+ list = mSim->getLandForSale();
+ ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty());
+ list = mSim->getAgentLocation();
+ ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1);
+ }
+
+ // ---------------------------------------------------------------------------------------
+ // Test the LLWorldMap interface
+ // ---------------------------------------------------------------------------------------
+ // Test Setters and Accessors methods
+ template<> template<>
+ void worldmap_object_t::test<1>()
+ {
+ // Test 1 : reset()
+ try {
+ mWorld->reset();
+ } catch (...) {
+ fail("LLWorldMap::reset() at init test failed");
+ }
+ // Test 2 : clearImageRefs()
+ try {
+ mWorld->clearImageRefs();
+ } catch (...) {
+ fail("LLWorldMap::clearImageRefs() test failed");
+ }
+ // Test 3 : dropImagePriorities()
+ try {
+ mWorld->dropImagePriorities();
+ } catch (...) {
+ fail("LLWorldMap::dropImagePriorities() test failed");
+ }
+ // Test 4 : reloadItems()
+ try {
+ mWorld->reloadItems(true);
+ } catch (...) {
+ fail("LLWorldMap::reloadItems() test failed");
+ }
+ // Test 5 : updateRegions()
+ try {
+ mWorld->updateRegions(1000, 1000, 1004, 1004);
+ } catch (...) {
+ fail("LLWorldMap::updateRegions() test failed");
+ }
+ // Test 6 : equalizeBoostLevels()
+ try {
+ mWorld->equalizeBoostLevels();
+ } catch (...) {
+ fail("LLWorldMap::equalizeBoostLevels() test failed");
+ }
+ // Test 7 : getObjectsTile()
+ try {
+ LLPointer<LLViewerFetchedTexture> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1);
+ ensure("LLWorldMap::getObjectsTile() failed", image.isNull());
+ } catch (...) {
+ fail("LLWorldMap::getObjectsTile() test failed with exception");
+ }
+ }
+ // Test management of LLSimInfo lists
+ template<> template<>
+ void worldmap_object_t::test<2>()
+ {
+ // Test 8 : reset()
+ try {
+ mWorld->reset();
+ } catch (...) {
+ fail("LLWorldMap::reset() at init test failed");
+ }
+
+ // Test 9 : Verify that all the region list is empty
+ LLWorldMap::sim_info_map_t list;
+ list = mWorld->getRegionMap();
+ ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty());
+
+ // Test 10 : Insert a region
+ bool success;
+ LLUUID id;
+ std::string name_sim = SIM_NAME_TEST;
+ success = mWorld->insertRegion( U32(X_WORLD_TEST),
+ U32(Y_WORLD_TEST),
+ name_sim,
+ id,
+ SIM_ACCESS_PG,
+ REGION_FLAGS_SANDBOX);
+ list = mWorld->getRegionMap();
+ ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1));
+
+ // Test 11 : Insert an item in the same region -> number of regions doesn't increase
+ std::string name_item = ITEM_NAME_TEST;
+ success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS/2),
+ U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2),
+ name_item,
+ id,
+ MAP_ITEM_LAND_FOR_SALE,
+ 0, 0);
+ list = mWorld->getRegionMap();
+ ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1));
+
+ // Test 12 : Insert an item in another region -> number of regions increases
+ success = mWorld->insertItem( U32(X_WORLD_TEST + REGION_WIDTH_METERS*2),
+ U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2),
+ name_item,
+ id,
+ MAP_ITEM_LAND_FOR_SALE,
+ 0, 0);
+ list = mWorld->getRegionMap();
+ ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2));
+
+ // Test 13 : simInfoFromPosGlobal() in region
+ LLVector3d pos1( X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2,
+ Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2,
+ 0.0f);
+ LLSimInfo* sim;
+ sim = mWorld->simInfoFromPosGlobal(pos1);
+ ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL);
+
+ // Test 14 : simInfoFromPosGlobal() outside region
+ LLVector3d pos2( X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2,
+ Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2,
+ 0.0f);
+ sim = mWorld->simInfoFromPosGlobal(pos2);
+ ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL);
+
+ // Test 15 : simInfoFromName()
+ sim = mWorld->simInfoFromName(name_sim);
+ ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL);
+
+ // Test 16 : simInfoFromHandle()
+ U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+ sim = mWorld->simInfoFromHandle(handle);
+ ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL);
+
+ // Test 17 : simNameFromPosGlobal()
+ LLVector3d pos3( X_WORLD_TEST + REGION_WIDTH_METERS/2,
+ Y_WORLD_TEST + REGION_WIDTH_METERS/2,
+ 0.0f);
+ success = mWorld->simNameFromPosGlobal(pos3, name_sim);
+ ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST));
+
+ // Test 18 : reset()
+ try {
+ mWorld->reset();
+ } catch (...) {
+ fail("LLWorldMap::reset() at end test failed");
+ }
+
+ // Test 19 : Verify that all the region list is empty
+ list = mWorld->getRegionMap();
+ ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty());
+ }
+ // Test tracking
+ template<> template<>
+ void worldmap_object_t::test<3>()
+ {
+ // Point to track
+ LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST);
+
+ // Test 20 : no tracking
+ mWorld->cancelTracking();
+ ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false);
+
+ // Test 21 : set tracking
+ mWorld->setTracking(pos);
+ ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation());
+
+ // Test 22 : set click and commit flags
+ mWorld->setTrackingDoubleClick();
+ ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick());
+ mWorld->setTrackingCommit();
+ ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit());
+
+ // Test 23 : in rectangle test
+ bool inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST, Y_WORLD_TEST,
+ X_WORLD_TEST + REGION_WIDTH_METERS,
+ Y_WORLD_TEST + REGION_WIDTH_METERS);
+ ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect);
+ inRect = mWorld->isTrackingInRectangle( X_WORLD_TEST + REGION_WIDTH_METERS,
+ Y_WORLD_TEST + REGION_WIDTH_METERS,
+ X_WORLD_TEST + 2 * REGION_WIDTH_METERS,
+ Y_WORLD_TEST + 2 * REGION_WIDTH_METERS);
+ ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect);
+
+ // Test 24 : set tracking to valid and invalid
+ mWorld->setTrackingValid();
+ ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation());
+ mWorld->setTrackingInvalid();
+ ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation());
+
+ // Test 25 : getTrackedPositionGlobal()
+ LLVector3d res = mWorld->getTrackedPositionGlobal();
+ ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos);
+
+ // Test 26 : reset tracking
+ mWorld->cancelTracking();
+ ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
+ }
+}