diff options
Diffstat (limited to 'indra/integration_tests')
| -rw-r--r-- | indra/integration_tests/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | indra/integration_tests/llui_libtest/CMakeLists.txt | 97 | ||||
| -rw-r--r-- | indra/integration_tests/llui_libtest/llui_libtest.cpp | 196 | ||||
| -rw-r--r-- | indra/integration_tests/llui_libtest/llui_libtest.h | 36 | ||||
| -rw-r--r-- | indra/integration_tests/llui_libtest/llwidgetreg.cpp | 106 | ||||
| -rw-r--r-- | indra/integration_tests/llui_libtest/llwidgetreg.h | 43 | 
6 files changed, 481 insertions, 0 deletions
| diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt new file mode 100644 index 0000000000..67e8fbf1f2 --- /dev/null +++ b/indra/integration_tests/CMakeLists.txt @@ -0,0 +1,3 @@ +# -*- cmake -*- + +add_subdirectory(llui_libtest) 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 | 
