From afc5d438a7c3279e46fc56bbe44b8047c0f65e20 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Wed, 29 Oct 2014 19:35:04 +0100 Subject: [PATCH] Add an app server test for stack&tile Should help with debugging #8569. --- src/tests/servers/app/Jamfile | 1 + src/tests/servers/app/stacktile/Jamfile | 19 ++++ src/tests/servers/app/stacktile/main.cpp | 112 +++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 src/tests/servers/app/stacktile/Jamfile create mode 100644 src/tests/servers/app/stacktile/main.cpp diff --git a/src/tests/servers/app/Jamfile b/src/tests/servers/app/Jamfile index 3dcd74ea82..376d56291d 100644 --- a/src/tests/servers/app/Jamfile +++ b/src/tests/servers/app/Jamfile @@ -244,6 +244,7 @@ SubInclude HAIKU_TOP src tests servers app resize_limits ; SubInclude HAIKU_TOP src tests servers app scrollbar ; SubInclude HAIKU_TOP src tests servers app scrolling ; SubInclude HAIKU_TOP src tests servers app shape_test ; +SubInclude HAIKU_TOP src tests servers app stacktile ; SubInclude HAIKU_TOP src tests servers app statusbar ; SubInclude HAIKU_TOP src tests servers app stress_test ; SubInclude HAIKU_TOP src tests servers app textview ; diff --git a/src/tests/servers/app/stacktile/Jamfile b/src/tests/servers/app/stacktile/Jamfile new file mode 100644 index 0000000000..b45038e806 --- /dev/null +++ b/src/tests/servers/app/stacktile/Jamfile @@ -0,0 +1,19 @@ +SubDir HAIKU_TOP src tests servers app stacktile ; + +SetSubDirSupportedPlatformsBeOSCompatible ; +AddSubDirSupportedPlatforms libbe_test ; + +UseHeaders [ FDirName $(HAIKU_TOP) os app ] ; +UseHeaders [ FDirName $(HAIKU_TOP) os interface ] ; +UsePrivateHeaders interface ; + +Application StackTileTest : + main.cpp + : [ TargetLibstdc++ ] be +; + +if ( $(TARGET_PLATFORM) = libbe_test ) { + HaikuInstall install-test-apps : $(HAIKU_APP_TEST_DIR) : StackTileTest + : tests!apps ; +} + diff --git a/src/tests/servers/app/stacktile/main.cpp b/src/tests/servers/app/stacktile/main.cpp new file mode 100644 index 0000000000..af7dad25d8 --- /dev/null +++ b/src/tests/servers/app/stacktile/main.cpp @@ -0,0 +1,112 @@ + +#include +#include +#include + +#include +#include +#include +#include + + +static BRect* sFrames = NULL; +static uint32 sNumFrames = 0; + + +class TestApp : public BApplication { +public: + TestApp(uint32 numWindows); + virtual ~TestApp(); + +private: + void _CreateFrames(uint32 numWindows); + int32 _WindowCreator(); + static int32 _ThreadStarter(void* data); + +private: + uint32 fFrameNum; + uint32 fNumWindows; + uint32 fMaxWindows; +}; + + +class TestWindow : public BWindow { +public: + TestWindow(BRect frame); + virtual ~TestWindow(); + + virtual void DispatchMessage(BMessage* message, BHandler* handler); +}; + + +TestApp::TestApp(uint32 numWindows) + : + BApplication("application/x.vnd-Haiku.stack-tile"), + fNumWindows(0), + fMaxWindows(numWindows) +{ + _CreateFrames(numWindows); +} + + +TestApp::~TestApp() +{ + delete[] sFrames; +} + + +void +TestApp::_CreateFrames(uint32 numWindows) +{ + BWindowStack* stack = NULL; + while (fNumWindows < fMaxWindows) { + if (fFrameNum >= sNumFrames) + fFrameNum = 0; + + BWindow* window = new TestWindow(BRect(20, 20, 300, 200)); + + if (!stack) stack = new BWindowStack(window); + else stack->AddWindow(window); + + window->Show(); + fNumWindows++; + } +} + + +TestWindow::TestWindow(BRect frame) + : + BWindow(frame, "Test", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS) +{ +} + + +TestWindow::~TestWindow() +{ +} + + +void +TestWindow::DispatchMessage(BMessage* message, BHandler* handler) +{ + BWindow::DispatchMessage(message, handler); + + int a = rand(); + char buf[32]; + sprintf(buf, "%d", a); + SetTitle(buf); +} + + +int +main(int argc, char** argv) +{ + uint32 numWindows = 2; + if (argc > 1) + numWindows = atoi(argv[1]); + + TestApp app(numWindows); + app.Run(); + + return 0; +}