2
* Copyright 2010 Inalogic Inc.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3, as published
6
* by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* version 3 along with this program. If not, see
15
* <http://www.gnu.org/licenses/>
17
* Authored by: Jay Taoko <jaytaoko@inalogic.com>
22
#include "Nux/WindowThread.h"
23
#include "Nux/VLayout.h"
24
#include "Nux/TextEntry.h"
25
#include "Nux/InputMethodIBus.h"
26
#include "Nux/ProgramFramework/ProgramTemplate.h"
27
#include "Nux/ProgramFramework/TestView.h"
28
#include <X11/extensions/XTest.h>
29
#include <X11/keysym.h>
30
#include "nux_automated_test_framework.h"
32
class TextTextEntry: public ProgramTemplate
35
TextTextEntry(const char* program_name, int window_width, int window_height, int program_life_span);
38
virtual void UserInterfaceSetup();
40
void TextEntryClick(nux::TextEntry* text_entry);
42
nux::TextEntry* text_entry_;
47
TextTextEntry::TextTextEntry(const char* program_name,
50
int program_life_span)
51
: ProgramTemplate(program_name, window_width, window_height, program_life_span)
57
TextTextEntry::~TextTextEntry()
62
void TextTextEntry::ResetEvents()
67
void TextTextEntry::TextEntryClick(nux::TextEntry* text_entry)
69
if (text_entry_ == text_entry)
75
void TextTextEntry::UserInterfaceSetup()
77
nux::VLayout* main_layout = new nux::VLayout(NUX_TRACKER_LOCATION);
78
text_entry_ = new nux::TextEntry("", NUX_TRACKER_LOCATION);
79
text_entry_->SetFontSize(76);
81
main_layout->AddView(text_entry_, 0, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_FULL);
82
main_layout->SetSpaceBetweenChildren(10);
83
main_layout->SetContentDistribution(nux::MAJOR_POSITION_CENTER);
85
static_cast<nux::WindowThread*>(window_thread_)->SetLayout(main_layout);
87
nux::ColorLayer background(nux::Color(0xFF4D4D4D));
88
static_cast<nux::WindowThread*>(window_thread_)->SetWindowBackgroundPaintLayer(&background);
91
TextTextEntry* test_textentry = NULL;
93
void TestingThread(nux::NThread* thread, void* user_data)
95
while (test_textentry->ReadyToGo() == false)
97
nuxDebugMsg("Waiting to start");
98
nux::SleepForMilliseconds(300);
101
nux::SleepForMilliseconds(1300);
103
nux::WindowThread* wnd_thread = static_cast<nux::WindowThread*>(user_data);
105
NuxAutomatedTestFramework test(wnd_thread);
109
test.TestReportMsg(test_textentry->text_entry_, "TextEntry created");
111
test_textentry->ResetEvents();
112
test.ViewSendMouseMotionToCenter(test_textentry->text_entry_);
114
test.ViewSendMouseClick(0, 1);
116
test.ViewSendCompositionKeys("`o");
117
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ò", "ò");
119
test.ViewSendCompositionKeys("~o");
120
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõ", "òõ");
122
test.ViewSendCompositionKeys("^o");
123
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõô", "òõô");
125
test.ViewSendCompositionKeys("c=");
126
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõô€", "òõô€");
128
test.ViewSendCompositionKeys("oc");
129
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõô€©", "òõô€©");
131
test.ViewSendCompositionKeys("\"w");
132
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõô€©ẅ", "òõô€©ẅ");
134
test.ViewSendCompositionKeys("'S");
135
test.TestReportMsg(test_textentry->text_entry_->GetText() == "òõô€©ẅŚ", "òõô€©ẅŚ");
136
test.ViewSendCtrlA();
137
test.ViewSendDelete();
139
//exclamdown # INVERTED EXCLAMATION MARK
140
test.ViewSendCompositionKeys("!!");
141
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¡", "¡");
142
test.ViewSendCtrlA();
143
test.ViewSendDelete();
144
nux::SleepForMilliseconds(100);;
147
test.ViewSendCompositionKeys("|c");
148
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¢", "¢");
149
test.ViewSendCtrlA();
150
test.ViewSendDelete();
151
nux::SleepForMilliseconds(100);;
154
test.ViewSendCompositionKeys("-L");
155
test.TestReportMsg(test_textentry->text_entry_->GetText() == "£", "£");
156
test.ViewSendCtrlA();
157
test.ViewSendDelete();
158
nux::SleepForMilliseconds(100);;
160
//currency # CURRENCY SIGN
161
test.ViewSendCompositionKeys("xo");
162
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¤", "¤");
163
test.ViewSendCtrlA();
164
test.ViewSendDelete();
165
nux::SleepForMilliseconds(100);;
168
test.ViewSendCompositionKeys("Y=");
169
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¥", "¥");
170
test.ViewSendCtrlA();
171
test.ViewSendDelete();
172
nux::SleepForMilliseconds(100);;
174
//FEMININE ORDINAL INDICATOR
175
test.ViewSendCompositionKeys("^_a");
176
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ª", "ª");
177
test.ViewSendCtrlA();
178
test.ViewSendDelete();
179
nux::SleepForMilliseconds(100);;
181
//guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
182
test.ViewSendCompositionKeys("<<");
183
test.TestReportMsg(test_textentry->text_entry_->GetText() == "«", "«");
184
test.ViewSendCtrlA();
185
test.ViewSendDelete();
186
nux::SleepForMilliseconds(100);;
189
test.ViewSendCompositionKeys("^3");
190
test.TestReportMsg(test_textentry->text_entry_->GetText() == "³", "³");
191
test.ViewSendCtrlA();
192
test.ViewSendDelete();
193
nux::SleepForMilliseconds(100);;
196
test.ViewSendCompositionKeys("..");
197
test.TestReportMsg(test_textentry->text_entry_->GetText() == "·", "·");
198
test.ViewSendCtrlA();
199
test.ViewSendDelete();
200
nux::SleepForMilliseconds(100);;
203
test.ViewSendCompositionKeys(", ");
204
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¸", "¸");
205
test.ViewSendCtrlA();
206
test.ViewSendDelete();
207
nux::SleepForMilliseconds(100);;
209
//VULGAR FRACTION THREE QUARTERS
210
test.ViewSendCompositionKeys("34");
211
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¾", "¾");
212
test.ViewSendCtrlA();
213
test.ViewSendDelete();
214
nux::SleepForMilliseconds(100);;
216
//questiondown # INVERTED QUESTION MARK
217
test.ViewSendCompositionKeys("??");
218
test.TestReportMsg(test_textentry->text_entry_->GetText() == "¿", "¿");
219
test.ViewSendCtrlA();
220
test.ViewSendDelete();
221
nux::SleepForMilliseconds(100);;
223
//LATIN CAPITAL LETTER A WITH GRAVE
224
test.ViewSendCompositionKeys("`A");
225
test.TestReportMsg(test_textentry->text_entry_->GetText() == "À", "À");
226
test.ViewSendCtrlA();
227
test.ViewSendDelete();
228
nux::SleepForMilliseconds(100);;
230
//LATIN CAPITAL LETTER A WITH ACUTE
231
test.ViewSendCompositionKeys("'A");
232
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Á", "Á");
233
test.ViewSendCtrlA();
234
test.ViewSendDelete();
235
nux::SleepForMilliseconds(100);;
237
//LATIN CAPITAL LETTER A WITH CIRCUMFLEX
238
test.ViewSendCompositionKeys("^A");
239
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Â", "Â");
240
test.ViewSendCtrlA();
241
test.ViewSendDelete();
242
nux::SleepForMilliseconds(100);;
244
//LATIN CAPITAL LETTER A WITH TILDE
245
test.ViewSendCompositionKeys("~A");
246
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Ã", "Ã");
247
test.ViewSendCtrlA();
248
test.ViewSendDelete();
249
nux::SleepForMilliseconds(100);;
251
//LATIN CAPITAL LETTER A WITH DIAERESIS
252
test.ViewSendCompositionKeys("\"A");
253
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Ä", "Ä");
254
test.ViewSendCtrlA();
255
test.ViewSendDelete();
256
nux::SleepForMilliseconds(100);;
258
//LATIN CAPITAL LETTER A WITH RING ABOVE
259
test.ViewSendCompositionKeys("oA");
260
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Å", "Å");
261
test.ViewSendCtrlA();
262
test.ViewSendDelete();
263
nux::SleepForMilliseconds(100);;
265
//AE # LATIN CAPITAL LETTER AE
266
test.ViewSendCompositionKeys("AE");
267
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Æ", "Æ");
268
test.ViewSendCtrlA();
269
test.ViewSendDelete();
270
nux::SleepForMilliseconds(100);;
272
//ssharp # LATIN SMALL LETTER SHARP S
273
test.ViewSendCompositionKeys("ss");
274
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ß", "ß");
275
test.ViewSendCtrlA();
276
test.ViewSendDelete();
277
nux::SleepForMilliseconds(100);;
279
//LATIN SMALL LETTER A WITH GRAVE
280
test.ViewSendCompositionKeys("`a");
281
test.TestReportMsg(test_textentry->text_entry_->GetText() == "à", "à");
282
test.ViewSendCtrlA();
283
test.ViewSendDelete();
284
nux::SleepForMilliseconds(100);;
286
//LATIN SMALL LETTER A WITH ACUTE
287
test.ViewSendCompositionKeys("'a");
288
test.TestReportMsg(test_textentry->text_entry_->GetText() == "á", "á");
289
test.ViewSendCtrlA();
290
test.ViewSendDelete();
291
nux::SleepForMilliseconds(100);;
293
//LATIN SMALL LETTER A WITH CIRCUMFLEX
294
test.ViewSendCompositionKeys("^a");
295
test.TestReportMsg(test_textentry->text_entry_->GetText() == "â", "â");
296
test.ViewSendCtrlA();
297
test.ViewSendDelete();
298
nux::SleepForMilliseconds(100);;
300
//LATIN SMALL LETTER A WITH TILDE
301
test.ViewSendCompositionKeys("~a");
302
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ã", "ã");
303
test.ViewSendCtrlA();
304
test.ViewSendDelete();
305
nux::SleepForMilliseconds(100);;
307
//LATIN SMALL LETTER A WITH DIAERESIS
308
test.ViewSendCompositionKeys("\"a");
309
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ä", "ä");
310
test.ViewSendCtrlA();
311
test.ViewSendDelete();
312
nux::SleepForMilliseconds(100);;
314
//LATIN SMALL LETTER A WITH RING ABOVE
315
test.ViewSendCompositionKeys("oa");
316
test.TestReportMsg(test_textentry->text_entry_->GetText() == "å", "å");
317
test.ViewSendCtrlA();
318
test.ViewSendDelete();
319
nux::SleepForMilliseconds(100);;
321
//ae # LATIN SMALL LETTER AE
322
test.ViewSendCompositionKeys("ae");
323
test.TestReportMsg(test_textentry->text_entry_->GetText() == "æ", "æ");
324
test.ViewSendCtrlA();
325
test.ViewSendDelete();
326
nux::SleepForMilliseconds(100);;
329
test.ViewSendCompositionKeys("-:");
330
test.TestReportMsg(test_textentry->text_entry_->GetText() == "÷", "÷");
331
test.ViewSendCtrlA();
332
test.ViewSendDelete();
333
nux::SleepForMilliseconds(100);;
335
//LATIN CAPITAL LETTER A WITH OGONEK
336
test.ViewSendCompositionKeys(";A");
337
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Ą", "Ą");
338
test.ViewSendCtrlA();
339
test.ViewSendDelete();
340
nux::SleepForMilliseconds(100);;
342
//LATIN SMALL LETTER A WITH OGONEK
343
test.ViewSendCompositionKeys(";a");
344
test.TestReportMsg(test_textentry->text_entry_->GetText() == "ą", "ą");
345
test.ViewSendCtrlA();
346
test.ViewSendDelete();
347
nux::SleepForMilliseconds(100);;
349
//LATIN CAPITAL LETTER A WITH CARON
350
test.ViewSendCompositionKeys("cA");
351
test.TestReportMsg(test_textentry->text_entry_->GetText() == "Ǎ", "Ǎ");
352
test.ViewSendCtrlA();
353
test.ViewSendDelete();
354
nux::SleepForMilliseconds(100);
357
test.ViewSendCompositionKeys("--.");
358
test.TestReportMsg(test_textentry->text_entry_->GetText() == "–", "–");
359
test.ViewSendCtrlA();
360
test.ViewSendDelete();
361
nux::SleepForMilliseconds(100);
363
//RIGHT SINGLE QUOTATION MARK
364
test.ViewSendCompositionKeys(">'");
365
test.TestReportMsg(test_textentry->text_entry_->GetText() == "’", "’");
366
test.ViewSendCtrlA();
367
test.ViewSendDelete();
368
nux::SleepForMilliseconds(100);
370
//LEFT DOUBLE QUOTATION MARK
371
test.ViewSendCompositionKeys("<\"");
372
test.TestReportMsg(test_textentry->text_entry_->GetText() == "“", "“");
373
test.ViewSendCtrlA();
374
test.ViewSendDelete();
375
nux::SleepForMilliseconds(100);
377
//RIGHT DOUBLE QUOTATION MARK
378
test.ViewSendCompositionKeys("\">");
379
test.TestReportMsg(test_textentry->text_entry_->GetText() == "”", "”");
380
test.ViewSendCtrlA();
381
test.ViewSendDelete();
382
nux::SleepForMilliseconds(100);
384
//DOUBLE LOW-9 QUOTATION MARK
385
test.ViewSendCompositionKeys("\",");
386
test.TestReportMsg(test_textentry->text_entry_->GetText() == "„", "„");
387
test.ViewSendCtrlA();
388
test.ViewSendDelete();
389
nux::SleepForMilliseconds(100);
392
test.ViewSendCompositionKeys("%o");
393
test.TestReportMsg(test_textentry->text_entry_->GetText() == "‰", "‰");
394
test.ViewSendCtrlA();
395
test.ViewSendDelete();
396
nux::SleepForMilliseconds(100);
398
//SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
399
test.ViewSendCompositionKeys(".>");
400
test.TestReportMsg(test_textentry->text_entry_->GetText() == "›", "›");
401
test.ViewSendCtrlA();
402
test.ViewSendDelete();
403
nux::SleepForMilliseconds(100);
405
//EuroSign # EURO SIGN
406
test.ViewSendCompositionKeys("=E");
407
test.TestReportMsg(test_textentry->text_entry_->GetText() == "€", "€");
408
test.ViewSendCtrlA();
409
test.ViewSendDelete();
410
nux::SleepForMilliseconds(100);
412
//REVERSED DOUBLE PRIME QUOTATION MARK
413
test.ViewSendCompositionKeys("\"\\");
414
test.TestReportMsg(test_textentry->text_entry_->GetText() == "〝", "〝");
415
test.ViewSendCtrlA();
416
test.ViewSendDelete();
417
nux::SleepForMilliseconds(100);
419
if (test.WhenDoneTerminateProgram())
421
wnd_thread->ExitMainLoop();
423
nuxDebugMsg("Exit testing thread");
426
int main(int argc, char** argv)
428
int xstatus = XInitThreads();
429
nuxAssertMsg(xstatus > 0, "XInitThreads has failed");
431
test_textentry = new TextTextEntry("Text Entry: Composition Characters", 600, 200, 40000);
432
test_textentry->Startup();
433
test_textentry->UserInterfaceSetup();
435
nux::SystemThread* test_thread = nux::CreateSystemThread(NULL, &TestingThread, test_textentry->GetWindowThread());
437
test_thread->Start(test_textentry);
439
test_textentry->Run();
442
delete test_textentry;