Refactored BWidthBuffer test into something more useful.
Looks like the class has some problems (hangs while calculating width of lines inside termcap, cf bug #1690 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24070 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
45ff9decad
commit
8dd5c3f974
@ -11,7 +11,6 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) bbitmap ] ;
|
|||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) bdeskbar ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) bdeskbar ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) bpolygon ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) bpolygon ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) bregion ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) bregion ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) bwidthbuffer ] ;
|
|
||||||
|
|
||||||
SEARCH_SOURCE += [ FDirName $(TOP) src kits interface ] ;
|
SEARCH_SOURCE += [ FDirName $(TOP) src kits interface ] ;
|
||||||
|
|
||||||
@ -49,10 +48,6 @@ UnitTestLib libinterfacetest.so
|
|||||||
RegionIntersect.cpp
|
RegionIntersect.cpp
|
||||||
RegionOffsetBy.cpp
|
RegionOffsetBy.cpp
|
||||||
|
|
||||||
#_BWidthBuffer_
|
|
||||||
WidthBufferTest.cpp
|
|
||||||
WidthBufferSimpleTest.cpp
|
|
||||||
|
|
||||||
: be $(TARGET_LIBSTDC++)
|
: be $(TARGET_LIBSTDC++)
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -128,6 +123,12 @@ Application MenuTriggerTest :
|
|||||||
: be
|
: be
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
SimpleTest WidthBufferTest :
|
||||||
|
WidthBufferTest.cpp
|
||||||
|
: be
|
||||||
|
;
|
||||||
|
|
||||||
SEARCH on [ FGristFiles
|
SEARCH on [ FGristFiles
|
||||||
ScrollView.cpp CheckBox.cpp ChannelSlider.cpp ChannelControl.cpp Slider.cpp Control.cpp
|
ScrollView.cpp CheckBox.cpp ChannelSlider.cpp ChannelControl.cpp Slider.cpp Control.cpp
|
||||||
] = [ FDirName $(HAIKU_TOP) src kits interface ] ;
|
] = [ FDirName $(HAIKU_TOP) src kits interface ] ;
|
||||||
|
89
src/tests/kits/interface/WidthBufferTest.cpp
Normal file
89
src/tests/kits/interface/WidthBufferTest.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2008, Stefano Ceccherini (stefano.ceccherini@gmail.com).
|
||||||
|
** All rights reserved.
|
||||||
|
** Distributed under the terms of the Haiku License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Application.h>
|
||||||
|
#include <Font.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <WidthBuffer.h>
|
||||||
|
|
||||||
|
|
||||||
|
class App : public BApplication {
|
||||||
|
public:
|
||||||
|
App();
|
||||||
|
~App();
|
||||||
|
virtual void ReadyToRun();
|
||||||
|
|
||||||
|
private:
|
||||||
|
_BWidthBuffer_ *fWidthBuffer;
|
||||||
|
thread_id fThread;
|
||||||
|
|
||||||
|
int32 TesterFunc();
|
||||||
|
static int32 _thread(void *data);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
App app;
|
||||||
|
app.Run();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
App::App()
|
||||||
|
:BApplication("application/x-vnd-WidthBufferTest")
|
||||||
|
{
|
||||||
|
fWidthBuffer = new _BWidthBuffer_;
|
||||||
|
fThread = spawn_thread(App::_thread, "widthbuffer tester",
|
||||||
|
B_NORMAL_PRIORITY, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
App::ReadyToRun()
|
||||||
|
{
|
||||||
|
resume_thread(fThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
App::~App()
|
||||||
|
{
|
||||||
|
status_t status;
|
||||||
|
wait_for_thread(fThread, &status);
|
||||||
|
delete fWidthBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
App::TesterFunc()
|
||||||
|
{
|
||||||
|
FILE *file = fopen("/boot/beos/etc/termcap", "r");
|
||||||
|
if (file != NULL) {
|
||||||
|
char buffer[512];
|
||||||
|
while (fgets(buffer, 512, file)) {
|
||||||
|
float width = fWidthBuffer->StringWidth(buffer, 0,
|
||||||
|
strlen(buffer), be_plain_font);
|
||||||
|
printf("string: %s, width: %f\n", buffer, width);
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
PostMessage(B_QUIT_REQUESTED);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
App::_thread(void *data)
|
||||||
|
{
|
||||||
|
return static_cast<App *>(data)->TesterFunc();
|
||||||
|
}
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
#include "WidthBufferSimpleTest.h"
|
|
||||||
#include "cppunit/TestCaller.h"
|
|
||||||
|
|
||||||
#include <Application.h>
|
|
||||||
#include <Font.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
// Needed because it isn't available in beos headers
|
|
||||||
double round(float n)
|
|
||||||
{
|
|
||||||
int32 tmp = (int32)floor(n + 0.5);
|
|
||||||
return (double)tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WidthBufferSimpleTest::WidthBufferSimpleTest(std::string name) :
|
|
||||||
BTestCase(name)
|
|
||||||
{
|
|
||||||
fWidthBuffer = new _BWidthBuffer_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WidthBufferSimpleTest::~WidthBufferSimpleTest()
|
|
||||||
{
|
|
||||||
delete fWidthBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
WidthBufferSimpleTest::PerformTest(void)
|
|
||||||
{
|
|
||||||
const char *str = "Something";
|
|
||||||
const char *str2 = "Some Text";
|
|
||||||
const char *longString = "ABCDEFGHIJKLMNOPQRSTUVYXWZ abcdefghijklmnopqrstuvwyxz";
|
|
||||||
|
|
||||||
// Some charachters which takes more than one byte
|
|
||||||
const char *str3 = "30u8g 2342 42nfrç°S£^GF°W§|£^?£ç$£!1ààà'ì";
|
|
||||||
|
|
||||||
const BFont *font = be_plain_font;
|
|
||||||
|
|
||||||
// We use round() here because the width returned by
|
|
||||||
// _BWidthBuffer_::StringWidth() isn't _exactly_ the same
|
|
||||||
// as the one returned by BFont::StringWidth();
|
|
||||||
float width = fWidthBuffer->StringWidth(str, 0, strlen(str), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str));
|
|
||||||
|
|
||||||
width = fWidthBuffer->StringWidth(str2, 0, strlen(str2), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str2));
|
|
||||||
|
|
||||||
width = fWidthBuffer->StringWidth(longString, 0, strlen(longString), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(longString));
|
|
||||||
|
|
||||||
// pass the first string again, it should be completely cached
|
|
||||||
// in _BWidthBuffer_'s hash table
|
|
||||||
width = fWidthBuffer->StringWidth(str, 0, strlen(str), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str));
|
|
||||||
|
|
||||||
width = fWidthBuffer->StringWidth(str3, 0, strlen(str3), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str3));
|
|
||||||
|
|
||||||
// choose a different font and ask the same strings as before
|
|
||||||
font = be_fixed_font;
|
|
||||||
width = fWidthBuffer->StringWidth(longString, 0, strlen(longString), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(longString));
|
|
||||||
|
|
||||||
width = fWidthBuffer->StringWidth(str, 0, strlen(str), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str));
|
|
||||||
|
|
||||||
width = fWidthBuffer->StringWidth(str2, 0, strlen(str2), font);
|
|
||||||
CPPUNIT_ASSERT(round(width) == font->StringWidth(str2));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CppUnit::Test *WidthBufferSimpleTest::suite(void)
|
|
||||||
{
|
|
||||||
typedef CppUnit::TestCaller<WidthBufferSimpleTest>
|
|
||||||
WidthBufferSimpleTestCaller;
|
|
||||||
|
|
||||||
return(new WidthBufferSimpleTestCaller("_BWidthBuffer_::Simple Test", &WidthBufferSimpleTest::PerformTest));
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
#ifndef __WidthBufferSIMPLETest_H
|
|
||||||
#define __WidthBufferSIMPLETest_H
|
|
||||||
|
|
||||||
#include "TestCase.h"
|
|
||||||
#include <WidthBuffer.h>
|
|
||||||
|
|
||||||
class WidthBufferSimpleTest : public BTestCase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static Test *suite(void);
|
|
||||||
void PerformTest(void);
|
|
||||||
WidthBufferSimpleTest(std::string name = "");
|
|
||||||
virtual ~WidthBufferSimpleTest();
|
|
||||||
|
|
||||||
private:
|
|
||||||
_BWidthBuffer_ *fWidthBuffer;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,14 +0,0 @@
|
|||||||
#include "cppunit/Test.h"
|
|
||||||
#include "cppunit/TestSuite.h"
|
|
||||||
#include "WidthBufferTest.h"
|
|
||||||
#include "WidthBufferSimpleTest.h"
|
|
||||||
|
|
||||||
|
|
||||||
CppUnit::Test *WidthBufferTestSuite()
|
|
||||||
{
|
|
||||||
CppUnit::TestSuite *testSuite = new CppUnit::TestSuite();
|
|
||||||
|
|
||||||
testSuite->addTest(WidthBufferSimpleTest::suite());
|
|
||||||
|
|
||||||
return testSuite;
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
#ifndef __WIDTHBUFFER_TEST_H
|
|
||||||
#define __WIDTHBUFFER_TEST_H
|
|
||||||
|
|
||||||
class CppUnit::Test;
|
|
||||||
|
|
||||||
CppUnit::Test *WidthBufferTestSuite();
|
|
||||||
|
|
||||||
#endif __WIDTHBUFFER_TEST_H
|
|
Loading…
Reference in New Issue
Block a user