38be0d1383
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
611 lines
19 KiB
C++
611 lines
19 KiB
C++
/****************************************************************************
|
||
**
|
||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||
** All rights reserved.
|
||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||
**
|
||
** This file is part of the test suite of the Qt Toolkit.
|
||
**
|
||
** $QT_BEGIN_LICENSE:LGPL$
|
||
** No Commercial Usage
|
||
** This file contains pre-release code and may not be distributed.
|
||
** You may use this file in accordance with the terms and conditions
|
||
** contained in the Technology Preview License Agreement accompanying
|
||
** this package.
|
||
**
|
||
** GNU Lesser General Public License Usage
|
||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||
** General Public License version 2.1 as published by the Free Software
|
||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||
** packaging of this file. Please review the following information to
|
||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||
**
|
||
** In addition, as a special exception, Nokia gives you certain additional
|
||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||
**
|
||
** If you have questions regarding the use of this file, please contact
|
||
** Nokia at qt-info@nokia.com.
|
||
**
|
||
**
|
||
**
|
||
**
|
||
**
|
||
**
|
||
**
|
||
**
|
||
** $QT_END_LICENSE$
|
||
**
|
||
****************************************************************************/
|
||
|
||
|
||
#include <QtTest/QtTest>
|
||
|
||
|
||
#include "qlabel.h"
|
||
#include <qapplication.h>
|
||
#include <qboxlayout.h>
|
||
#include <qlabel.h>
|
||
#include <qlineedit.h>
|
||
#include <qmovie.h>
|
||
#include <qpicture.h>
|
||
#include <qmessagebox.h>
|
||
#include <private/qlabel_p.h>
|
||
|
||
//TESTED_CLASS=
|
||
//TESTED_FILES=
|
||
#if defined(Q_OS_SYMBIAN)
|
||
# define SRCDIR ""
|
||
#endif
|
||
|
||
#include "../../shared/util.h"
|
||
|
||
class Widget : public QWidget
|
||
{
|
||
public:
|
||
Widget() { }
|
||
|
||
QList<QEvent::Type> events;
|
||
|
||
protected:
|
||
bool event(QEvent *ev) {
|
||
events.append(ev->type());
|
||
return QWidget::event(ev);
|
||
}
|
||
|
||
};
|
||
|
||
class tst_QLabel : public QObject
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
tst_QLabel();
|
||
virtual ~tst_QLabel();
|
||
|
||
|
||
public slots:
|
||
void initTestCase();
|
||
void cleanupTestCase();
|
||
void init();
|
||
void cleanup();
|
||
private slots:
|
||
void getSetCheck();
|
||
void text();
|
||
void setText_data();
|
||
void setText();
|
||
void textFormat();
|
||
void setTextFormat();
|
||
void buddy();
|
||
void setBuddy();
|
||
void setFont();
|
||
void setNum();
|
||
void clear();
|
||
void wordWrap();
|
||
void eventPropagation_data();
|
||
void eventPropagation();
|
||
void focusPolicy();
|
||
|
||
void task190318_sizes();
|
||
|
||
void sizeHint();
|
||
|
||
void task226479_movieResize();
|
||
void emptyPixmap();
|
||
|
||
void unicodeText_data();
|
||
void unicodeText();
|
||
|
||
void mnemonic_data();
|
||
void mnemonic();
|
||
void selection();
|
||
|
||
#ifndef QT_NO_CONTEXTMENU
|
||
void taskQTBUG_7902_contextMenuCrash();
|
||
#endif
|
||
|
||
private:
|
||
QLabel *testWidget;
|
||
QPointer<Widget> test_box;
|
||
QPointer<QLabel> test_label;
|
||
QLineEdit *test_edit;
|
||
};
|
||
|
||
// Testing get/set functions
|
||
void tst_QLabel::getSetCheck()
|
||
{
|
||
QLabel obj1;
|
||
// bool QLabel::wordWrap()
|
||
// void QLabel::setWordWrap(bool)
|
||
obj1.setWordWrap(false);
|
||
QCOMPARE(false, obj1.wordWrap());
|
||
obj1.setWordWrap(true);
|
||
QCOMPARE(true, obj1.wordWrap());
|
||
|
||
// QWidget * QLabel::buddy()
|
||
// void QLabel::setBuddy(QWidget *)
|
||
QWidget *var2 = new QWidget();
|
||
obj1.setBuddy(var2);
|
||
QCOMPARE(var2, obj1.buddy());
|
||
obj1.setBuddy((QWidget *)0);
|
||
QCOMPARE((QWidget *)0, obj1.buddy());
|
||
delete var2;
|
||
|
||
// QMovie * QLabel::movie()
|
||
// void QLabel::setMovie(QMovie *)
|
||
QMovie *var3 = new QMovie;
|
||
obj1.setMovie(var3);
|
||
QCOMPARE(var3, obj1.movie());
|
||
obj1.setMovie((QMovie *)0);
|
||
QCOMPARE((QMovie *)0, obj1.movie());
|
||
delete var3;
|
||
}
|
||
|
||
|
||
tst_QLabel::tst_QLabel(): test_box(0)
|
||
{
|
||
}
|
||
|
||
tst_QLabel::~tst_QLabel()
|
||
{
|
||
}
|
||
|
||
void tst_QLabel::initTestCase()
|
||
{
|
||
// Create the test class
|
||
testWidget = new QLabel(0);
|
||
testWidget->resize( 200, 200 );
|
||
testWidget->show();
|
||
}
|
||
|
||
void tst_QLabel::cleanupTestCase()
|
||
{
|
||
delete testWidget;
|
||
testWidget = 0;
|
||
if (test_box)
|
||
delete test_box;
|
||
}
|
||
|
||
void tst_QLabel::init()
|
||
{
|
||
testWidget->setTextFormat( Qt::AutoText );
|
||
testWidget->setBuddy( 0 );
|
||
testWidget->setIndent( 0 );
|
||
testWidget->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
|
||
testWidget->setScaledContents( FALSE );
|
||
}
|
||
|
||
void tst_QLabel::cleanup()
|
||
{
|
||
if (QTest::currentTestFunction() == QLatin1String("setBuddy")) {
|
||
testWidget->show();
|
||
|
||
delete test_box; // this should delete tst_labl and test_edit as well.
|
||
}
|
||
}
|
||
|
||
void tst_QLabel::buddy()
|
||
{
|
||
DEPENDS_ON( "setBuddy" );
|
||
}
|
||
|
||
void tst_QLabel::setBuddy()
|
||
{
|
||
#ifdef Q_WS_MAC
|
||
QSKIP("Set buddy doesn't make much sense on Mac OS X", SkipAll);
|
||
#endif
|
||
testWidget->hide();
|
||
|
||
test_box = new Widget;
|
||
test_label= new QLabel( test_box );
|
||
test_label->setText( "&Test with a buddy" );
|
||
test_edit = new QLineEdit( test_box );
|
||
QVBoxLayout *layout = new QVBoxLayout(test_box);
|
||
layout->addWidget(test_label);
|
||
layout->addWidget(test_edit);
|
||
test_box->show();
|
||
qApp->setActiveWindow(test_box);
|
||
QVERIFY(test_box->isActiveWindow());
|
||
|
||
test_label->setBuddy( test_edit );
|
||
test_label->setFocus();
|
||
QVERIFY( !test_edit->hasFocus() );
|
||
QTest::keyClick( test_box, 't', Qt::AltModifier );
|
||
QVERIFY( test_edit->hasFocus() );
|
||
delete test_box;
|
||
}
|
||
|
||
void tst_QLabel::text()
|
||
{
|
||
DEPENDS_ON( "setText" );
|
||
}
|
||
|
||
void tst_QLabel::setText_data()
|
||
{
|
||
QTest::addColumn<QString>("txt");
|
||
QTest::addColumn<QString>("font");
|
||
|
||
QString prefix = "";
|
||
#ifdef Q_OS_WIN32
|
||
prefix = "win32_";
|
||
#endif
|
||
|
||
QTest::newRow( QString(prefix + "data0").toLatin1() ) << QString("This is a single line") << QString("Helvetica");
|
||
QTest::newRow( QString(prefix + "data1").toLatin1() ) << QString("This is the first line\nThis is the second line") << QString("Courier");
|
||
QTest::newRow( QString(prefix + "data2").toLatin1() ) << QString("This is the first line\nThis is the second line\nThis is the third line") << QString("Helvetica");
|
||
QTest::newRow( QString(prefix + "data3").toLatin1() ) << QString("This is <b>bold</b> richtext") << QString("Courier");
|
||
QTest::newRow( QString(prefix + "data4").toLatin1() ) << QString("I Have a &shortcut") << QString("Helvetica");
|
||
}
|
||
|
||
void tst_QLabel::setText()
|
||
{
|
||
QFETCH( QString, txt );
|
||
QFETCH( QString, font );
|
||
QFont f( font, 8 );
|
||
testWidget->setFont( f );
|
||
testWidget->setText( txt );
|
||
QCOMPARE( testWidget->text(), txt );
|
||
}
|
||
|
||
|
||
void tst_QLabel::textFormat()
|
||
{
|
||
DEPENDS_ON( "setTextFormat" );
|
||
}
|
||
|
||
void tst_QLabel::setTextFormat()
|
||
{
|
||
// lets' start with the simple stuff...
|
||
testWidget->setTextFormat( Qt::PlainText );
|
||
QVERIFY( testWidget->textFormat() == Qt::PlainText );
|
||
|
||
testWidget->setTextFormat( Qt::RichText );
|
||
QVERIFY( testWidget->textFormat() == Qt::RichText );
|
||
|
||
testWidget->setTextFormat( Qt::LogText );
|
||
QVERIFY( testWidget->textFormat() == Qt::LogText );
|
||
|
||
testWidget->setTextFormat( Qt::AutoText );
|
||
QVERIFY( testWidget->textFormat() == Qt::AutoText );
|
||
}
|
||
|
||
|
||
void tst_QLabel::setFont()
|
||
{
|
||
DEPENDS_ON( "setText" );
|
||
}
|
||
|
||
void tst_QLabel::setNum()
|
||
{
|
||
testWidget->setText( "This is a text" );
|
||
testWidget->setNum( 12 );
|
||
QCOMPARE( testWidget->text(), QString("12") );
|
||
testWidget->setNum( 12.345 );
|
||
QCOMPARE( testWidget->text(), QString("12.345") );
|
||
}
|
||
|
||
void tst_QLabel::clear()
|
||
{
|
||
const QString TEXT = "blah blah";
|
||
testWidget->setText(TEXT);
|
||
QCOMPARE(testWidget->text(), TEXT);
|
||
testWidget->clear();
|
||
QVERIFY(testWidget->text().isEmpty());
|
||
}
|
||
|
||
void tst_QLabel::wordWrap()
|
||
{
|
||
QLabel label;
|
||
|
||
QVERIFY(!label.wordWrap());
|
||
|
||
label.setText("Plain Text");
|
||
QVERIFY(!label.wordWrap());
|
||
|
||
label.setText("<b>rich text</b>");
|
||
QVERIFY(!label.wordWrap());
|
||
|
||
label.setWordWrap(false);
|
||
label.setText("<b>rich text</b>");
|
||
QVERIFY(!label.wordWrap());
|
||
}
|
||
|
||
void tst_QLabel::eventPropagation_data()
|
||
{
|
||
QTest::addColumn<QString>("text");
|
||
QTest::addColumn<int>("textInteractionFlags");
|
||
QTest::addColumn<int>("focusPolicy");
|
||
QTest::addColumn<bool>("propagation");
|
||
|
||
QTest::newRow("plain text1") << QString("plain text") << int(Qt::LinksAccessibleByMouse) << int(Qt::NoFocus) << true;
|
||
QTest::newRow("plain text2") << QString("plain text") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << true;
|
||
QTest::newRow("plain text3") << QString("plain text") << (int)Qt::TextSelectableByMouse << (int)Qt::ClickFocus << false;
|
||
QTest::newRow("plain text4") << QString("plain text") << (int)Qt::NoTextInteraction << (int)Qt::NoFocus << true;
|
||
QTest::newRow("rich text1") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByMouse << (int)Qt::NoFocus << true;
|
||
QTest::newRow("rich text2") << QString("<b>rich text</b>") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << true;
|
||
QTest::newRow("rich text3") << QString("<b>rich text</b>") << (int)Qt::TextSelectableByMouse << (int)Qt::ClickFocus << false;
|
||
QTest::newRow("rich text4") << QString("<b>rich text</b>") << (int)Qt::NoTextInteraction << (int)Qt::NoFocus << true;
|
||
QTest::newRow("rich text4") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByKeyboard << (int)Qt::StrongFocus << true;
|
||
|
||
if (!test_box)
|
||
test_box = new Widget;
|
||
if (!test_label)
|
||
test_label = new QLabel(test_box);
|
||
}
|
||
|
||
void tst_QLabel::eventPropagation()
|
||
{
|
||
QFETCH(QString, text);
|
||
QFETCH(int, textInteractionFlags);
|
||
QFETCH(int, focusPolicy);
|
||
QFETCH(bool, propagation);
|
||
|
||
// plain text (accepts mouse event _only_ when label selectable by mouse)
|
||
test_label->setText(text);
|
||
test_box->events.clear();
|
||
test_label->setTextInteractionFlags(Qt::TextInteractionFlags(textInteractionFlags));
|
||
QVERIFY(int(test_label->focusPolicy()) == focusPolicy);
|
||
QTest::mousePress(test_label, Qt::LeftButton);
|
||
QVERIFY(test_box->events.contains(QEvent::MouseButtonPress) == propagation); // should have propagated!
|
||
}
|
||
|
||
void tst_QLabel::focusPolicy()
|
||
{
|
||
delete test_label;
|
||
test_label = new QLabel;
|
||
QCOMPARE(test_label->focusPolicy(), Qt::NoFocus); // default
|
||
test_label->setFocusPolicy(Qt::StrongFocus);
|
||
test_label->setText("Whatever"); // setting text should not change the focus policy
|
||
QCOMPARE(test_label->focusPolicy(), Qt::StrongFocus);
|
||
test_label->setTextInteractionFlags(Qt::TextSelectableByKeyboard); // this should
|
||
QCOMPARE(test_label->focusPolicy(), Qt::ClickFocus);
|
||
test_label->setFocusPolicy(Qt::StrongFocus);
|
||
test_label->setText("Whatever"); // setting text should not change the focus policy
|
||
QCOMPARE(test_label->focusPolicy(), Qt::StrongFocus);
|
||
test_label->setTextInteractionFlags(Qt::NoTextInteraction);
|
||
QCOMPARE(test_label->focusPolicy(), Qt::NoFocus);
|
||
test_label->setFocusPolicy(Qt::StrongFocus);
|
||
test_label->setTextInteractionFlags(Qt::NoTextInteraction);
|
||
QCOMPARE(test_label->focusPolicy(), Qt::StrongFocus); // is not touched since value didn't change
|
||
delete test_label;
|
||
}
|
||
|
||
void tst_QLabel::task190318_sizes()
|
||
{
|
||
QLabel label(" ");
|
||
QSize ms(500,600);
|
||
label.setMinimumSize(ms);
|
||
QCOMPARE(label.minimumSize(), ms);
|
||
QCOMPARE(label.sizeHint(), ms);
|
||
QCOMPARE(label.minimumSizeHint(), ms);
|
||
}
|
||
|
||
void tst_QLabel::sizeHint()
|
||
{
|
||
QLabel label(QLatin1String("Test"));
|
||
label.setIndent(0);
|
||
label.setMargin(0);
|
||
label.setContentsMargins(0, 0, 0, 0);
|
||
label.setAlignment(Qt::AlignVCenter);
|
||
int h = label.sizeHint().height();
|
||
|
||
QLabel l1(QLatin1String("Test"));
|
||
l1.setIndent(0);
|
||
l1.setMargin(0);
|
||
l1.setContentsMargins(0, 0, 0, 0);
|
||
l1.setAlignment(Qt::AlignVCenter);
|
||
l1.setTextInteractionFlags(Qt::TextSelectableByMouse); // will now use qtextcontrol
|
||
int h1 = l1.sizeHint().height();
|
||
QCOMPARE(h1, h);
|
||
|
||
}
|
||
|
||
void tst_QLabel::task226479_movieResize()
|
||
{
|
||
class Label : public QLabel {
|
||
protected:
|
||
void paintEvent(QPaintEvent *e)
|
||
{
|
||
paintedRegion += e->region();
|
||
QLabel::paintEvent(e);
|
||
}
|
||
|
||
public:
|
||
QRegion paintedRegion;
|
||
};
|
||
|
||
Label label;
|
||
label.resize(350,350);
|
||
label.show();
|
||
QMovie *movie = new QMovie( &label );
|
||
label.setMovie(movie);
|
||
QTest::qWaitForWindowShown(&label);
|
||
movie->setFileName(SRCDIR "red.png");
|
||
movie->start();
|
||
QTest::qWait(50);
|
||
movie->stop();
|
||
label.paintedRegion = QRegion();
|
||
movie->setFileName(SRCDIR "green.png");
|
||
movie->start();
|
||
QTest::qWait(50);
|
||
|
||
QTRY_COMPARE(label.paintedRegion , QRegion(label.rect()) );
|
||
}
|
||
|
||
void tst_QLabel::emptyPixmap()
|
||
{
|
||
//task 197919
|
||
QLabel label1, label2, label3, label4;
|
||
label2.setPixmap(QPixmap("/tmp/idonotexist"));
|
||
QMovie movie;
|
||
label3.setMovie(&movie);
|
||
label4.setPicture(QPicture());
|
||
QCOMPARE(label1.sizeHint(), label2.sizeHint());
|
||
QCOMPARE(label1.sizeHint(), label3.sizeHint());
|
||
QCOMPARE(label1.sizeHint(), label4.sizeHint());
|
||
}
|
||
|
||
/**
|
||
Test for QTBUG-4848 - unicode data corrupting QLabel display
|
||
*/
|
||
void tst_QLabel::unicodeText_data()
|
||
{
|
||
QTest::addColumn<QString>("text");
|
||
QTest::addColumn<QString>("languageName");
|
||
|
||
/*
|
||
The "glass" phrase in Thai was the initial report for bug QTBUG-4848, was
|
||
originally found on http://www.columbia.edu/kermit/utf8.html.
|
||
|
||
The phrase is from an internet tradition regarding a striking phrase
|
||
that is translated into many different languages. The utf8 strings
|
||
below were generated by using http://translate.google.com.
|
||
|
||
The glass phrase in Thai contains the ้ว character which manifests bug
|
||
QTBUG-4848
|
||
|
||
The last long phrase is an excerpt from Churchills "on the beaches"
|
||
speech, also translated using http://translate.google.com.
|
||
*/
|
||
|
||
QTest::newRow("english") << QString::fromUtf8("I can eat glass and it doesn't hurt me.") << QString("english");
|
||
QTest::newRow("thai") << QString::fromUtf8("ฉันจะกินแก้วและไม่เจ็บฉัน") << QString("thai");
|
||
QTest::newRow("chinese") << QString::fromUtf8("我可以吃玻璃,并没有伤害我。") << QString("chinese");
|
||
QTest::newRow("arabic") << QString::fromUtf8("أستطيع أكل الزجاج ، وأنه لا يؤذيني.") << QString("arabic");
|
||
QTest::newRow("russian") << QString::fromUtf8("Я могу есть стекло, и не больно.") << QString("russian");
|
||
QTest::newRow("korean") << QString::fromUtf8("유리를 먹을 수있는, 그리고 그게 날 다치게하지 않습니다.") << QString("korean");
|
||
QTest::newRow("greek") << QString::fromUtf8("Μπορώ να φάτε γυαλί και δεν μου κάνει κακό.") << QString("greek");
|
||
QTest::newRow("german") << QString::fromUtf8("Ich kann Glas essen und es macht mich nicht heiß.") << QString("german");
|
||
|
||
QTest::newRow("thai_long") << QString::fromUtf8("เราจะต่อสู้ในทะเลและมหาสมุทร. เราจะต่อสู้ด้วยความมั่นใจเติบโตและความเจริญเติบโตในอากาศเราจะปกป้องเกาะของเราค่าใช้จ่ายใดๆอาจ."
|
||
"เราจะต่อสู้บนชายหาดเราจะต่อสู้ในบริเวณเชื่อมโยงไปถึงเราจะต่อสู้ในช่องและในถนนที่เราจะต่อสู้ในภูเขานั้นเราจะไม่ยอม.")
|
||
<< QString("thai_long");
|
||
}
|
||
|
||
void tst_QLabel::unicodeText()
|
||
{
|
||
const QString testDataPath("testdata/unicodeText");
|
||
QFETCH(QString, text);
|
||
QFETCH(QString, languageName);
|
||
QFrame frame;
|
||
QVBoxLayout *layout = new QVBoxLayout();
|
||
QLabel *label = new QLabel(text, &frame);
|
||
layout->addWidget(label);
|
||
layout->setMargin(8);
|
||
frame.setLayout(layout);
|
||
frame.show();
|
||
QTest::qWaitForWindowShown(&frame);
|
||
QVERIFY(frame.isVisible()); // was successfully sized and shown
|
||
testWidget->show();
|
||
}
|
||
|
||
void tst_QLabel::mnemonic_data()
|
||
{
|
||
QTest::addColumn<QString>("text");
|
||
QTest::addColumn<QString>("expectedDocText");
|
||
QTest::addColumn<QString>("expectedShortcutCursor");
|
||
|
||
QTest::newRow("1") << QString("Normal") << QString("Normal") << QString();
|
||
QTest::newRow("2") << QString("&Simple") << QString("Simple") << QString("S");
|
||
QTest::newRow("3") << QString("Also &simple") << QString("Also simple") << QString("s");
|
||
QTest::newRow("4") << QString("&&With &Double &&") << QString("&With Double &") << QString("D");
|
||
QTest::newRow("5") << QString("Hep&&Hop") << QString("Hep&Hop") << QString("");
|
||
QTest::newRow("6") << QString("Hep&&&Hop") << QString("Hep&Hop") << QString("H");
|
||
}
|
||
|
||
|
||
void tst_QLabel::mnemonic()
|
||
{
|
||
// this test that the mnemonics appears correctly when the label has a text control.
|
||
|
||
QFETCH(QString, text);
|
||
QFETCH(QString, expectedDocText);
|
||
QFETCH(QString, expectedShortcutCursor);
|
||
|
||
QWidget w;
|
||
QHBoxLayout *hbox = new QHBoxLayout;
|
||
QLabel *lab = new QLabel(text);
|
||
//lab->setText("plop &plop");
|
||
QLineEdit *lineedit = new QLineEdit;
|
||
lab->setBuddy(lineedit);
|
||
lab->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||
|
||
hbox->addWidget(lab);
|
||
hbox->addWidget(lineedit);
|
||
hbox->addWidget(new QLineEdit);
|
||
w.setLayout(hbox);
|
||
w.show();
|
||
QTest::qWaitForWindowShown(&w);
|
||
|
||
QLabelPrivate *d = static_cast<QLabelPrivate *>(QObjectPrivate::get(lab));
|
||
QVERIFY(d->control);
|
||
QCOMPARE(d->control->document()->toPlainText(), expectedDocText);
|
||
QCOMPARE(d->shortcutCursor.selectedText(), expectedShortcutCursor);
|
||
}
|
||
|
||
void tst_QLabel::selection()
|
||
{
|
||
QLabel label;
|
||
label.setText("Hello world");
|
||
|
||
label.setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||
|
||
QVERIFY(!label.hasSelectedText());
|
||
QCOMPARE(label.selectedText(), QString());
|
||
QCOMPARE(label.selectionStart(), -1);
|
||
|
||
label.setSelection(0, 4);
|
||
QVERIFY(label.hasSelectedText());
|
||
QCOMPARE(label.selectedText(), QString::fromLatin1("Hell"));
|
||
QCOMPARE(label.selectionStart(), 0);
|
||
|
||
label.setSelection(6, 5);
|
||
QVERIFY(label.hasSelectedText());
|
||
QCOMPARE(label.selectedText(), QString::fromLatin1("world"));
|
||
QCOMPARE(label.selectionStart(), 6);
|
||
}
|
||
|
||
#ifndef QT_NO_CONTEXTMENU
|
||
void tst_QLabel::taskQTBUG_7902_contextMenuCrash()
|
||
{
|
||
QLabel *w = new QLabel("Test or crash?");
|
||
w->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||
w->show();
|
||
QTest::qWaitForWindowShown(w);
|
||
|
||
QTimer ti;
|
||
w->connect(&ti, SIGNAL(timeout()), w, SLOT(deleteLater()));
|
||
ti.start(300);
|
||
|
||
QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center());
|
||
qApp->postEvent(w, cme);
|
||
|
||
QTest::qWait(350);
|
||
// No crash, it's allright.
|
||
}
|
||
#endif
|
||
|
||
QTEST_MAIN(tst_QLabel)
|
||
#include "tst_qlabel.moc"
|