Skip to content

Commit 849e723

Browse files
perminovVSminggo
authored andcommitted
Add test case for TextFieldTTF::setCursorFromPoint (cocos2d#18336)
Test crash in cocos2d#18159
1 parent 19ea797 commit 849e723

File tree

2 files changed

+75
-6
lines changed

2 files changed

+75
-6
lines changed

tests/cpp-tests/Classes/TextInputTest/TextInputTest.cpp

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ TextInputTests::TextInputTests()
1010
ADD_TEST_CASE(TextFieldTTFDefaultTest);
1111
ADD_TEST_CASE(TextFieldTTFActionTest);
1212
ADD_TEST_CASE(TextFieldTTFSecureTextEntryTest);
13+
ADD_TEST_CASE(TextFieldTTSetCursorFromPoint);
1314
}
1415

1516
static Rect getRect(Node * node)
@@ -110,7 +111,7 @@ void KeyboardNotificationLayer::onTouchEnded(Touch *touch, Event *event)
110111
Rect rect;
111112
rect.size = _trackNode->getContentSize();
112113
auto clicked = isScreenPointInRect(endPos, Camera::getVisitingCamera(), _trackNode->getWorldToNodeTransform(), rect, nullptr);
113-
this->onClickTrackNode(clicked);
114+
this->onClickTrackNode(clicked, endPos);
114115
CCLOG("----------------------------------");
115116
}
116117

@@ -123,7 +124,7 @@ std::string TextFieldTTFDefaultTest::subtitle() const
123124
return "TextFieldTTF with default behavior test";
124125
}
125126

126-
void TextFieldTTFDefaultTest::onClickTrackNode(bool bClicked)
127+
void TextFieldTTFDefaultTest::onClickTrackNode(bool bClicked, const Vec2& touchPos)
127128
{
128129
auto pTextField = (TextFieldTTF*)_trackNode;
129130
if (bClicked)
@@ -172,7 +173,7 @@ std::string TextFieldTTFActionTest::subtitle() const
172173
return "CCTextFieldTTF with action and char limit test";
173174
}
174175

175-
void TextFieldTTFActionTest::onClickTrackNode(bool bClicked)
176+
void TextFieldTTFActionTest::onClickTrackNode(bool bClicked, const Vec2& touchPos)
176177
{
177178
auto pTextField = (TextFieldTTF*)_trackNode;
178179
if (bClicked)
@@ -373,5 +374,57 @@ void TextFieldTTFSecureTextEntryTest::onEnter()
373374
#endif
374375
pTextField->setSecureTextEntry(true);
375376

377+
_trackNode = pTextField;
378+
}
379+
380+
//////////////////////////////////////////////////////////////////////////
381+
// implement TextFieldTTSetCursorFromPoint
382+
//////////////////////////////////////////////////////////////////////////
383+
384+
std::string TextFieldTTSetCursorFromPoint::subtitle() const
385+
{
386+
return "TextFieldTTF with setCursorFromPoint test";
387+
}
388+
389+
void TextFieldTTSetCursorFromPoint::onClickTrackNode(bool bClicked, const Vec2& touchPos)
390+
{
391+
auto pTextField = (TextFieldTTF*)_trackNode;
392+
if (bClicked)
393+
{
394+
// TextFieldTTFTest be clicked
395+
CCLOG("TextFieldTTSetCursorFromPoint:TextFieldTTF attachWithIME");
396+
pTextField->attachWithIME();
397+
398+
// Set new position cursor
399+
pTextField->setCursorFromPoint(touchPos, Camera::getVisitingCamera());
400+
}
401+
else
402+
{
403+
// TextFieldTTFTest not be clicked
404+
CCLOG("TextFieldTTSetCursorFromPoint:TextFieldTTF detachWithIME");
405+
pTextField->detachWithIME();
406+
}
407+
}
408+
409+
void TextFieldTTSetCursorFromPoint::onEnter()
410+
{
411+
KeyboardNotificationLayer::onEnter();
412+
413+
// add TextFieldTTF
414+
auto s = Director::getInstance()->getWinSize();
415+
416+
auto pTextField = TextFieldTTF::textFieldWithPlaceHolder("<click here for input>",
417+
FONT_NAME,
418+
FONT_SIZE);
419+
addChild(pTextField);
420+
421+
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
422+
// on android, TextFieldTTF cannot auto adjust its position when soft-keyboard pop up
423+
// so we had to set a higher position to make it visible
424+
pTextField->setPosition(Vec2(s.width / 2, s.height / 2 + 50));
425+
#else
426+
pTextField->setPosition(Vec2(s.width / 2, s.height / 2));
427+
#endif
428+
376429
_trackNode = pTextField;
377430
}

tests/cpp-tests/Classes/TextInputTest/TextInputTest.h

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class KeyboardNotificationLayer : public TestCase, public cocos2d::IMEDelegate
1616
public:
1717
KeyboardNotificationLayer();
1818
virtual std::string title() const override;
19-
virtual void onClickTrackNode(bool bClicked) = 0;
19+
virtual void onClickTrackNode(bool bClicked, const cocos2d::Vec2& touchPos) = 0;
2020

2121
virtual void keyboardWillShow(cocos2d::IMEKeyboardNotificationInfo& info)override;
2222

@@ -38,7 +38,7 @@ class TextFieldTTFDefaultTest : public KeyboardNotificationLayer
3838
CREATE_FUNC(TextFieldTTFDefaultTest);
3939
// KeyboardNotificationLayer
4040
virtual std::string subtitle() const override;
41-
virtual void onClickTrackNode(bool bClicked) override;
41+
virtual void onClickTrackNode(bool bClicked, const cocos2d::Vec2& touchPos) override;
4242

4343
// Layer
4444
virtual void onEnter() override;
@@ -61,7 +61,7 @@ class TextFieldTTFActionTest : public KeyboardNotificationLayer, public cocos2d:
6161

6262
// KeyboardNotificationLayer
6363
virtual std::string subtitle() const override;
64-
virtual void onClickTrackNode(bool bClicked) override;
64+
virtual void onClickTrackNode(bool bClicked, const cocos2d::Vec2& touchPos) override;
6565

6666
// Layer
6767
virtual void onEnter() override;
@@ -88,4 +88,20 @@ class TextFieldTTFSecureTextEntryTest : public TextFieldTTFDefaultTest
8888
// Layer
8989
virtual void onEnter() override;
9090
};
91+
92+
//////////////////////////////////////////////////////////////////////////
93+
// TextFieldTTSetCursorFromPoint for test TextFieldTTF setCursorFromPoint.
94+
//////////////////////////////////////////////////////////////////////////
95+
96+
class TextFieldTTSetCursorFromPoint : public KeyboardNotificationLayer
97+
{
98+
public:
99+
CREATE_FUNC(TextFieldTTSetCursorFromPoint);
100+
// KeyboardNotificationLayer
101+
virtual std::string subtitle() const override;
102+
virtual void onClickTrackNode(bool bClicked, const cocos2d::Vec2& touchPos) override;
103+
104+
// Layer
105+
virtual void onEnter() override;
106+
};
91107
#endif // __TEXT_INPUT_TEST_H__

0 commit comments

Comments
 (0)