summaryrefslogtreecommitdiff
path: root/indra/integration_tests/llui_libtest
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-06-21 08:04:56 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-06-21 08:04:56 +0000
commit9ec432034dc3c45d7ce763eb02dae4cc7f6b8da8 (patch)
tree4a505c1e0919af52800b3ffb3eaf135e7d6f9ce6 /indra/integration_tests/llui_libtest
parent351ebe9fcb76f3b99c2957004bb8493a904869ee (diff)
merge -r 122421-124917 viewer-2.0.0-2 -> viewer-2.0.0-3
ignore-dead-branch
Diffstat (limited to 'indra/integration_tests/llui_libtest')
-rw-r--r--indra/integration_tests/llui_libtest/CMakeLists.txt97
-rw-r--r--indra/integration_tests/llui_libtest/llui_libtest.cpp196
-rw-r--r--indra/integration_tests/llui_libtest/llui_libtest.h36
-rw-r--r--indra/integration_tests/llui_libtest/llwidgetreg.cpp106
-rw-r--r--indra/integration_tests/llui_libtest/llwidgetreg.h43
5 files changed, 478 insertions, 0 deletions
diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt
new file mode 100644
index 0000000000..68556ac4ab
--- /dev/null
+++ b/indra/integration_tests/llui_libtest/CMakeLists.txt
@@ -0,0 +1,97 @@
+# -*- cmake -*-
+
+project (llui_libtest)
+
+include(00-Common)
+include(LLCommon)
+include(LLImage)
+include(LLImageJ2COJ) # ugh, needed for images
+include(LLMath)
+include(LLRender)
+include(LLWindow)
+include(LLUI)
+include(LLVFS) # ugh, needed for LLDir
+include(LLXML)
+include(Linking)
+# include(Tut)
+
+include_directories(
+ ${FREETYPE_INCLUDE_DIRS}
+ ${LLCOMMON_INCLUDE_DIRS}
+ ${LLIMAGE_INCLUDE_DIRS}
+ ${LLMATH_INCLUDE_DIRS}
+ ${LLRENDER_INCLUDE_DIRS}
+ ${LLUI_INCLUDE_DIRS}
+ ${LLVFS_INCLUDE_DIRS}
+ ${LLWINDOW_INCLUDE_DIRS}
+ ${LLXML_INCLUDE_DIRS}
+ )
+
+set(llui_libtest_SOURCE_FILES
+ llui_libtest.cpp
+ llwidgetreg.cpp
+ )
+
+set(llui_libtest_HEADER_FILES
+ CMakeLists.txt
+ llui_libtest.h
+ llwidgetreg.h
+ )
+
+set_source_files_properties(${llui_libtest_HEADER_FILES}
+ PROPERTIES HEADER_FILE_ONLY TRUE)
+
+list(APPEND llui_libtest_SOURCE_FILES ${llui_libtest_HEADER_FILES})
+
+add_executable(llui_libtest ${llui_libtest_SOURCE_FILES})
+
+# Link with OS-specific libraries for LLWindow dependency
+if (DARWIN)
+ find_library(COCOA_LIBRARY Cocoa)
+ set(OS_LIBRARIES ${COCOA_LIBRARY})
+elseif (WINDOWS)
+ set(OS_LIBRARIES ${WINDOWS_LIBRARIES})
+elseif (LINUX)
+ set(OS_LIBRARIES)
+else (DARWIN)
+ message(FATAL_ERROR "unknown platform")
+endif (DARWIN)
+
+# Libraries on which this library depends, needed for Linux builds
+# Sort by high-level to low-level
+target_link_libraries(llui_libtest
+ llui
+ ${OS_LIBRARIES}
+ ${GOOGLE_PERFTOOLS_LIBRARIES}
+ )
+
+if (WINDOWS)
+ set_target_properties(llui_libtest
+ PROPERTIES
+ LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
+ LINK_FLAGS_DEBUG "/NODEFAULTLIB:MSVCRT /NODEFAULTLIB:LIBCMTD"
+ )
+
+ # Copy over OpenJPEG.dll
+ # *NOTE: On Windows with VS2005, only the first comment prints
+ set(OPENJPEG_RELEASE
+ "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/openjpeg.dll")
+ add_custom_command( TARGET llui_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${OPENJPEG_RELEASE} ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Copying OpenJPEG DLLs to binary directory"
+ )
+ set(OPENJPEG_DEBUG
+ "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/openjpegd.dll")
+ add_custom_command( TARGET llui_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR}
+ )
+endif (WINDOWS)
+
+if (VIEWER)
+ # Ensure people working on the viewer don't break this library
+ # *NOTE: This could be removed, or only built by Parabuild, if the build
+ # and link times become too long. JC
+ add_dependencies(viewer llui_libtest)
+endif (VIEWER)
diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp
new file mode 100644
index 0000000000..f8caa7990b
--- /dev/null
+++ b/indra/integration_tests/llui_libtest/llui_libtest.cpp
@@ -0,0 +1,196 @@
+/**
+ * @file llui_libtest.cpp
+ * @brief Integration test for the LLUI library
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#include "linden_common.h"
+
+#include "llui_libtest.h"
+
+// project includes
+#include "llwidgetreg.h"
+
+// linden library includes
+#include "llcontrol.h" // LLControlGroup
+#include "lldir.h"
+#include "llerrorcontrol.h"
+#include "llfloater.h"
+#include "llfontgl.h"
+#include "lltrans.h"
+#include "llui.h"
+#include "lluictrlfactory.h"
+
+#include <iostream>
+
+// *TODO: switch to using TUT
+// *TODO: teach Parabuild about this program, run automatically after full builds
+
+// We can't create LLImageGL objects because we have no window or rendering
+// context. Provide enough of an LLUIImage to test the LLUI library without
+// an underlying image.
+class TestUIImage : public LLUIImage
+{
+public:
+ TestUIImage()
+ : LLUIImage( std::string(), NULL ) // NULL ImageGL, don't deref!
+ { }
+
+ /*virtual*/ S32 getWidth() const
+ {
+ return 16;
+ }
+
+ /*virtual*/ S32 getHeight() const
+ {
+ return 16;
+ }
+};
+
+// We need to supply dummy images
+class TestImageProvider : public LLImageProviderInterface
+{
+public:
+ /*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name)
+ {
+ return makeImage();
+ }
+
+ /*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id)
+ {
+ return makeImage();
+ }
+
+ /*virtual*/ void cleanUp()
+ {
+ }
+
+ LLPointer<LLUIImage> makeImage()
+ {
+ LLPointer<LLImageGL> image_gl;
+ LLPointer<LLUIImage> image = new LLUIImage( std::string(), image_gl);
+ return image;
+ }
+};
+
+static std::string get_xui_dir()
+{
+ std::string delim = gDirUtilp->getDirDelimiter();
+ return gDirUtilp->getAppRODataDir() + delim + std::string("skins") + delim + "default" + delim + "xui" + delim;
+}
+
+int main(int argc, char** argv)
+{
+ // Must init LLError for llerrs to actually cause errors.
+ LLError::initForApplication(".");
+
+ // Font lookup needs directory support
+ gDirUtilp->initAppDirs("SecondLife", "../../../newview");
+ gDirUtilp->setSkinFolder("default");
+
+ std::string config_filename = gDirUtilp->getExpandedFilename(
+ LL_PATH_APP_SETTINGS, "settings.xml");
+ LLControlGroup config_group("config");
+ config_group.loadFromFile(config_filename);
+
+ std::string color_filename = gDirUtilp->getExpandedFilename(
+ LL_PATH_DEFAULT_SKIN, "colors.xml");
+ LLControlGroup color_group("color");
+ color_group.loadFromFile(color_filename);
+
+ LLControlGroup floater_group("floater");
+ LLControlGroup ignores_group("ignores");
+ LLUI::settings_map_t settings;
+ settings["config"] = &config_group;
+ settings["color"] = &color_group;
+ settings["floater"] = &floater_group;
+ settings["ignores"] = &ignores_group;
+
+ // Don't use real images as we don't have a GL context
+ TestImageProvider image_provider;
+ LLUI::initClass(settings, &image_provider);
+
+ const bool no_register_widgets = false;
+ LLWidgetReg::initClass( no_register_widgets );
+
+ // Unclear if this is needed
+ LLUI::setupPaths();
+ // Otherwise we get translation warnings when setting up floaters
+ // (tooltips for buttons)
+ std::set<std::string> default_args;
+ LLTrans::parseStrings("strings.xml", default_args);
+
+ LLFontManager::initClass();
+
+ // Creating widgets apparently requires fonts to be initialized,
+ // otherwise it crashes.
+ LLFontGL::initClass(96.f, 1.f, 1.f,
+ gDirUtilp->getAppRODataDir(),
+ LLUI::getXUIPaths(),
+ false ); // don't create gl textures
+
+ LLFloaterView::Params fvparams;
+ fvparams.name("Floater View");
+ fvparams.rect( LLRect(0,480,640,0) );
+ fvparams.mouse_opaque(false);
+ fvparams.follows.flags(FOLLOWS_ALL);
+ fvparams.tab_stop(false);
+ gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams);
+
+ // Convert all test floaters to new XML format
+ std::string delim = gDirUtilp->getDirDelimiter();
+ std::string xui_dir = get_xui_dir() + "en" + delim;
+ std::string filename;
+ while (gDirUtilp->getNextFileInDir(xui_dir, "floater_test_*.xml", filename, false))
+ {
+ if (filename.find("_new.xml") != std::string::npos)
+ {
+ // don't re-export other test floaters
+ continue;
+ }
+ llinfos << "Converting " << filename << llendl;
+ // Build a floater and output new attributes
+ LLXMLNodePtr output_node = new LLXMLNode();
+ LLFloater* floater = new LLFloater();
+ LLUICtrlFactory::getInstance()->buildFloater(floater,
+ filename,
+ FALSE, // don't open floater
+ output_node);
+ std::string out_filename = xui_dir + filename;
+ std::string::size_type extension_pos = out_filename.rfind(".xml");
+ out_filename.resize(extension_pos);
+ out_filename += "_new.xml";
+
+ llinfos << "Output: " << out_filename << llendl;
+ LLFILE* floater_file = LLFile::fopen(out_filename.c_str(), "w");
+ LLXMLNode::writeHeaderToFile(floater_file);
+ output_node->writeToFile(floater_file);
+ fclose(floater_file);
+ }
+ return 0;
+}
diff --git a/indra/integration_tests/llui_libtest/llui_libtest.h b/indra/integration_tests/llui_libtest/llui_libtest.h
new file mode 100644
index 0000000000..a84d57dba9
--- /dev/null
+++ b/indra/integration_tests/llui_libtest/llui_libtest.h
@@ -0,0 +1,36 @@
+/**
+ * @file llui_libtest.h
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#ifndef LLUI_LIBTEST_H
+#define LLUI_LIBTEST_H
+
+// TODO
+
+#endif
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
new file mode 100644
index 0000000000..417f3059d6
--- /dev/null
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
@@ -0,0 +1,106 @@
+/**
+ * @file llwidgetreg.cpp
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#include "linden_common.h"
+
+#include "llwidgetreg.h"
+
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llcontainerview.h"
+#include "lliconctrl.h"
+#include "llmenugl.h"
+#include "llmultislider.h"
+#include "llmultisliderctrl.h"
+#include "llprogressbar.h"
+#include "llradiogroup.h"
+#include "llscrollcontainer.h"
+#include "llscrollingpanellist.h"
+#include "llscrolllistctrl.h"
+#include "llslider.h"
+#include "llsliderctrl.h"
+#include "llspinctrl.h"
+#include "llstatview.h"
+#include "lltabcontainer.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "llflyoutbutton.h"
+#include "llsearcheditor.h"
+#include "lllayoutstack.h"
+
+void LLWidgetReg::initClass(bool register_widgets)
+{
+ // Only need to register if the Windows linker has optimized away the
+ // references to the object files.
+ if (register_widgets)
+ {
+ LLDefaultWidgetRegistry::Register<LLButton> button("button");
+ LLDefaultWidgetRegistry::Register<LLCheckBoxCtrl> check_box("check_box");
+ LLDefaultWidgetRegistry::Register<LLComboBox> combo_box("combo_box");
+ LLDefaultWidgetRegistry::Register<LLFlyoutButton> flyout_button("flyout_button");
+ LLDefaultWidgetRegistry::Register<LLContainerView> container_view("container_view");
+ LLDefaultWidgetRegistry::Register<LLIconCtrl> icon("icon");
+ LLDefaultWidgetRegistry::Register<LLLineEditor> line_editor("line_editor");
+ LLDefaultWidgetRegistry::Register<LLSearchEditor> search_editor("search_editor");
+ LLDefaultWidgetRegistry::Register<LLMenuItemSeparatorGL> menu_item_separator("menu_item_separator");
+ LLDefaultWidgetRegistry::Register<LLMenuItemCallGL> menu_item_call_gl("menu_item_call");
+ LLDefaultWidgetRegistry::Register<LLMenuItemCheckGL> menu_item_check_gl("menu_item_check");
+ LLDefaultWidgetRegistry::Register<LLMenuGL> menu("menu");
+ LLDefaultWidgetRegistry::Register<LLMenuBarGL> menu_bar("menu_bar");
+ LLDefaultWidgetRegistry::Register<LLContextMenu> context_menu("context_menu");
+ LLDefaultWidgetRegistry::Register<LLMultiSlider> multi_slider_bar("multi_slider_bar");
+ LLDefaultWidgetRegistry::Register<LLMultiSliderCtrl> multi_slider("multi_slider");
+ LLDefaultWidgetRegistry::Register<LLPanel> panel("panel", &LLPanel::fromXML);
+ LLDefaultWidgetRegistry::Register<LLLayoutStack> layout_stack("layout_stack", &LLLayoutStack::fromXML);
+ LLDefaultWidgetRegistry::Register<LLProgressBar> progress_bar("progress_bar");
+ LLDefaultWidgetRegistry::Register<LLRadioGroup> radio_group("radio_group");
+ LLDefaultWidgetRegistry::Register<LLRadioCtrl> radio_item("radio_item");
+ LLDefaultWidgetRegistry::Register<LLScrollContainer> scroll_container("scroll_container");
+ LLDefaultWidgetRegistry::Register<LLScrollingPanelList> scrolling_panel_list("scrolling_panel_list");
+ LLDefaultWidgetRegistry::Register<LLScrollListCtrl> scroll_list("scroll_list");
+ LLDefaultWidgetRegistry::Register<LLSlider> slider_bar("slider_bar");
+ LLDefaultWidgetRegistry::Register<LLSliderCtrl> slider("slider");
+ LLDefaultWidgetRegistry::Register<LLSpinCtrl> spinner("spinner");
+ LLDefaultWidgetRegistry::Register<LLStatBar> stat_bar("stat_bar");
+ //LLDefaultWidgetRegistry::Register<LLPlaceHolderPanel> placeholder("placeholder");
+ LLDefaultWidgetRegistry::Register<LLTabContainer> tab_container("tab_container");
+ LLDefaultWidgetRegistry::Register<LLTextBox> text("text");
+ LLDefaultWidgetRegistry::Register<LLTextEditor> simple_text_editor("simple_text_editor");
+ LLDefaultWidgetRegistry::Register<LLUICtrl> ui_ctrl("ui_ctrl");
+ LLDefaultWidgetRegistry::Register<LLStatView> stat_view("stat_view");
+ //LLDefaultWidgetRegistry::Register<LLUICtrlLocate> locate("locate");
+ //LLDefaultWidgetRegistry::Register<LLUICtrlLocate> pad("pad");
+ LLDefaultWidgetRegistry::Register<LLViewBorder> view_border("view_border");
+ }
+
+ // *HACK: Usually this is registered as a viewer text editor
+ LLDefaultWidgetRegistry::Register<LLTextEditor> text_editor("text_editor");
+}
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.h b/indra/integration_tests/llui_libtest/llwidgetreg.h
new file mode 100644
index 0000000000..eac818608d
--- /dev/null
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.h
@@ -0,0 +1,43 @@
+/**
+ * @file llwidgetreg.h
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#ifndef LLWIDGETREG_H
+#define LLWIDGETREG_H
+
+// Register all widgets with the builder registry.
+// Useful on Windows where linker discards all references to the
+// static LLDefaultWidgetRegistry::Register<> calls.
+class LLWidgetReg
+{
+public:
+ static void initClass(bool register_widgets);
+};
+
+#endif