1 /**
2 * UGENE - Integrated Bioinformatics Tools.
3 * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru>
4 * http://ugene.net
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 * MA 02110-1301, USA.
20 */
21
22 #include <api/GTUtils.h>
23 #include <base_dialogs/ColorDialogFiller.h>
24 #include <base_dialogs/DefaultDialogFiller.h>
25 #include <base_dialogs/FontDialogFiller.h>
26 #include <base_dialogs/GTFileDialog.h>
27 #include <base_dialogs/MessageBoxFiller.h>
28 #include <drivers/GTKeyboardDriver.h>
29 #include <drivers/GTMouseDriver.h>
30 #include <harness/UGUITestBase.h>
31 #include <primitives/GTAction.h>
32 #include <primitives/GTCheckBox.h>
33 #include <primitives/GTComboBox.h>
34 #include <primitives/GTLineEdit.h>
35 #include <primitives/GTMenu.h>
36 #include <primitives/GTRadioButton.h>
37 #include <primitives/GTSpinBox.h>
38 #include <primitives/GTToolbar.h>
39 #include <primitives/PopupChooser.h>
40 #include <system/GTClipboard.h>
41 #include <system/GTFile.h>
42 #include <utils/GTKeyboardUtils.h>
43 #include <utils/GTThread.h>
44
45 #include <QApplication>
46
47 #include <U2Core/BaseDocumentFormats.h>
48 #include <U2Core/DocumentModel.h>
49 #include <U2Core/TextUtils.h>
50
51 #include <U2View/ADVConstants.h>
52 #include <U2View/MSAEditor.h>
53 #include <U2View/MaEditorNameList.h>
54
55 #include "GTTestsMsaEditor.h"
56 #include "GTUtilsBookmarksTreeView.h"
57 #include "GTUtilsLog.h"
58 #include "GTUtilsMdi.h"
59 #include "GTUtilsMsaEditor.h"
60 #include "GTUtilsMsaEditorSequenceArea.h"
61 #include "GTUtilsNotifications.h"
62 #include "GTUtilsOptionPanelMSA.h"
63 #include "GTUtilsProject.h"
64 #include "GTUtilsProjectTreeView.h"
65 #include "GTUtilsTaskTreeView.h"
66 #include "api/GTSequenceReadingModeDialogUtils.h"
67 #include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
68 #include "runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h"
69 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
70 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
71 #include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
72 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
73 #include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
74 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
75 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
76 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
77 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
78 #include "runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h"
79 #include "runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h"
80 #include "runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h"
81 #include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
82 #include "runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h"
83 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
84 #include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
85 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
86
87 namespace U2 {
88
89 namespace GUITest_common_scenarios_msa_editor {
90 using namespace HI;
91
GUI_TEST_CLASS_DEFINITION(test_0001)92 GUI_TEST_CLASS_DEFINITION(test_0001) {
93 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
94 GTUtilsTaskTreeView::waitTaskFinished(os);
95
96 int length = GTUtilsMSAEditorSequenceArea::getLength(os);
97 CHECK_SET_ERR(length == 14, "Wrong length");
98
99 int firstBaseIdx = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
100 CHECK_SET_ERR(firstBaseIdx == 0, "Wrong first base idx");
101
102 int lastBaseIdx = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
103 CHECK_SET_ERR(lastBaseIdx == 13, "Wrong last base idx");
104 }
105
GUI_TEST_CLASS_DEFINITION(test_0001_1)106 GUI_TEST_CLASS_DEFINITION(test_0001_1) {
107 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
108 GTUtilsTaskTreeView::waitTaskFinished(os);
109
110 int length = GTUtilsMSAEditorSequenceArea::getLength(os);
111 CHECK_SET_ERR(length == 12, "Wrong length");
112
113 int firstBaseIdx = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
114 CHECK_SET_ERR(firstBaseIdx == 0, "Wrong first base idx");
115
116 int lastBaseIdx = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
117 CHECK_SET_ERR(lastBaseIdx == 11, "Wrong last base idx");
118 }
119
GUI_TEST_CLASS_DEFINITION(test_0001_2)120 GUI_TEST_CLASS_DEFINITION(test_0001_2) {
121 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
122 GTUtilsTaskTreeView::waitTaskFinished(os);
123
124 int length = GTUtilsMSAEditorSequenceArea::getLength(os);
125 CHECK_SET_ERR(length == 14, "Wrong length");
126
127 int firstBaseIdx = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
128 CHECK_SET_ERR(firstBaseIdx == 0, "Wrong first base idx");
129
130 int lastBaseIdx = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
131 CHECK_SET_ERR(lastBaseIdx == 13, "Wrong last base idx");
132 }
133
GUI_TEST_CLASS_DEFINITION(test_0001_3)134 GUI_TEST_CLASS_DEFINITION(test_0001_3) {
135 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
136 GTUtilsTaskTreeView::waitTaskFinished(os);
137
138 int length = GTUtilsMSAEditorSequenceArea::getLength(os);
139 CHECK_SET_ERR(length == 6, "Wrong length");
140
141 int firstBaseIdx = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
142 CHECK_SET_ERR(firstBaseIdx == 0, "Wrong first base idx");
143
144 int lastBaseIdx = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
145 CHECK_SET_ERR(lastBaseIdx == 5, "Wrong last base idx");
146 }
147
GUI_TEST_CLASS_DEFINITION(test_0001_4)148 GUI_TEST_CLASS_DEFINITION(test_0001_4) {
149 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln", GTFileDialog::Cancel);
150 GTUtilsTaskTreeView::waitTaskFinished(os);
151
152 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln", GTFileDialog::Open);
153 GTUtilsTaskTreeView::waitTaskFinished(os);
154
155 int length = GTUtilsMSAEditorSequenceArea::getLength(os);
156 CHECK_SET_ERR(length == 3, "Wrong length");
157
158 int firstBaseIdx = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
159 CHECK_SET_ERR(firstBaseIdx == 0, "Wrong first base idx");
160
161 int lastBaseIdx = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
162 CHECK_SET_ERR(lastBaseIdx == 2, "Wrong last base idx");
163 }
164
GUI_TEST_CLASS_DEFINITION(test_0002)165 GUI_TEST_CLASS_DEFINITION(test_0002) {
166 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
167 GTUtilsTaskTreeView::waitTaskFinished(os);
168
169 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
170 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
171 GTUtilsTaskTreeView::waitTaskFinished(os);
172
173 bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
174 CHECK_SET_ERR(!offsetsVisible, "Offsets are visible");
175
176 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
177 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
178 GTUtilsTaskTreeView::waitTaskFinished(os);
179
180 offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
181 CHECK_SET_ERR(offsetsVisible, "Offsets are not visible");
182 }
183
GUI_TEST_CLASS_DEFINITION(test_0002_1)184 GUI_TEST_CLASS_DEFINITION(test_0002_1) {
185 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
186 GTUtilsTaskTreeView::waitTaskFinished(os);
187
188 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
189 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
190 GTUtilsTaskTreeView::waitTaskFinished(os);
191
192 bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
193 CHECK_SET_ERR(!offsetsVisible, "Offsets are visible");
194
195 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
196 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
197 GTUtilsTaskTreeView::waitTaskFinished(os);
198
199 offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
200 CHECK_SET_ERR(offsetsVisible, "Offsets are not visible");
201 }
202
GUI_TEST_CLASS_DEFINITION(test_0002_2)203 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
204 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
205 GTUtilsTaskTreeView::waitTaskFinished(os);
206
207 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
208 << "Appearance"
209 << "Show offsets");
210 GTUtilsTaskTreeView::waitTaskFinished(os);
211
212 bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
213 CHECK_SET_ERR(!offsetsVisible, "Offsets are visible");
214
215 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
216 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
217 GTUtilsTaskTreeView::waitTaskFinished(os);
218
219 offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
220 CHECK_SET_ERR(offsetsVisible, "Offsets are not visible");
221 }
222
GUI_TEST_CLASS_DEFINITION(test_0002_3)223 GUI_TEST_CLASS_DEFINITION(test_0002_3) {
224 GTUtilsMdi::click(os, GTGlobals::Close);
225 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
226 GTUtilsTaskTreeView::waitTaskFinished(os);
227
228 QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
229 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
230 << "Appearance"
231 << "Show offsets");
232
233 bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
234 CHECK_SET_ERR(!offsetsVisible, "Offsets are visible");
235 GTUtilsMdi::click(os, GTGlobals::Close);
236 GTUtilsTaskTreeView::waitTaskFinished(os);
237
238 mdiWindow = GTUtilsMdi::activeWindow(os, false);
239 CHECK_SET_ERR(mdiWindow == nullptr, "There is an MDI window");
240
241 QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "revcompl");
242 GTMouseDriver::moveTo(p);
243 GTMouseDriver::doubleClick();
244
245 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
246 << "Appearance"
247 << "Show offsets");
248 GTUtilsTaskTreeView::waitTaskFinished(os);
249
250 offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
251 CHECK_SET_ERR(offsetsVisible, "Offsets are not visible");
252 }
253
GUI_TEST_CLASS_DEFINITION(test_0002_4)254 GUI_TEST_CLASS_DEFINITION(test_0002_4) {
255 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
256 GTUtilsTaskTreeView::waitTaskFinished(os);
257
258 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
259 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
260 GTUtilsTaskTreeView::waitTaskFinished(os);
261
262 bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
263 CHECK_SET_ERR(!offsetsVisible, "Offsets are visible");
264
265 GTUtilsMdi::click(os, GTGlobals::Close);
266 GTUtilsTaskTreeView::waitTaskFinished(os);
267
268 QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "revcompl");
269 GTMouseDriver::moveTo(p);
270 GTMouseDriver::doubleClick();
271
272 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "show_offsets"));
273 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
274 GTUtilsTaskTreeView::waitTaskFinished(os);
275
276 offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
277 CHECK_SET_ERR(offsetsVisible, "Offsets are not visible");
278 }
279
GUI_TEST_CLASS_DEFINITION(test_0003)280 GUI_TEST_CLASS_DEFINITION(test_0003) {
281 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma_unsorted.aln");
282 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
283
284 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_SORT << "action_sort_by_name"));
285 GTMenu::showContextMenu(os, GTUtilsMsaEditor::getSequenceArea(os));
286 GTUtilsDialog::waitAllFinished(os);
287 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os) == QStringList() << "a"
288 << "C"
289 << "d"
290 << "D",
291 "Sort by name failed (ascending)");
292
293 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_SORT << "action_sort_by_name_descending"));
294 GTMenu::showContextMenu(os, GTUtilsMsaEditor::getSequenceArea(os));
295 GTUtilsDialog::waitAllFinished(os);
296 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os) == QStringList() << "d"
297 << "D"
298 << "C"
299 << "a",
300 "Sort by name failed (descending)");
301
302 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_SORT << "action_sort_by_length"));
303 GTMenu::showContextMenu(os, GTUtilsMsaEditor::getSequenceArea(os));
304 GTUtilsDialog::waitAllFinished(os);
305 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os) == QStringList() << "D"
306 << "d"
307 << "a"
308 << "C",
309 "Sort by length failed (ascending)");
310
311 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_SORT << "action_sort_by_length_descending"));
312 GTMenu::showContextMenu(os, GTUtilsMsaEditor::getSequenceArea(os));
313 GTUtilsDialog::waitAllFinished(os);
314 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os) == QStringList() << "C"
315 << "d"
316 << "a"
317 << "D",
318 "Sort by length failed (descending)");
319 }
320
GUI_TEST_CLASS_DEFINITION(test_0004)321 GUI_TEST_CLASS_DEFINITION(test_0004) {
322 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
323 QWidget *msaWindow = GTUtilsMsaEditor::getActiveMsaEditorWindow(os);
324
325 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
326 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_NAVIGATION << "action_go_to_position"));
327 GTMenu::showContextMenu(os, msaWindow);
328 GTUtilsDialog::waitAllFinished(os);
329
330 QRect expectedRect(5, 0, 1, 1);
331 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
332
333 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
334 GTKeyboardDriver::keyClick('g', Qt::ControlModifier);
335 GTUtilsDialog::waitAllFinished(os);
336
337 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
338 }
339
GUI_TEST_CLASS_DEFINITION(test_0004_1)340 GUI_TEST_CLASS_DEFINITION(test_0004_1) {
341 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
342 GTUtilsTaskTreeView::waitTaskFinished(os);
343
344 QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
345
346 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
347 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_NAVIGATION << "action_go_to_position"));
348 GTMenu::showContextMenu(os, mdiWindow);
349 GTUtilsTaskTreeView::waitTaskFinished(os);
350
351 QRect expectedRect(5, 0, 1, 1);
352 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
353
354 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
355 GTKeyboardDriver::keyClick('g', Qt::ControlModifier);
356 GTUtilsTaskTreeView::waitTaskFinished(os);
357
358 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
359 }
360
GUI_TEST_CLASS_DEFINITION(test_0004_2)361 GUI_TEST_CLASS_DEFINITION(test_0004_2) {
362 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
363 GTUtilsTaskTreeView::waitTaskFinished(os);
364
365 QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
366
367 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
368 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_NAVIGATION << "action_go_to_position"));
369 GTMenu::showContextMenu(os, mdiWindow);
370 GTUtilsTaskTreeView::waitTaskFinished(os);
371
372 QRect expectedRect(5, 0, 1, 1);
373 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
374
375 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
376 GTKeyboardDriver::keyClick('g', Qt::ControlModifier);
377 GTUtilsTaskTreeView::waitTaskFinished(os);
378
379 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
380 }
381
GUI_TEST_CLASS_DEFINITION(test_0005)382 GUI_TEST_CLASS_DEFINITION(test_0005) {
383 // Check alignment view status bar coordinates
384
385 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
386 GTUtilsTaskTreeView::waitTaskFinished(os);
387
388 // Expected state: Alignment length 14, left offset 1, right offset 14
389 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLength(os) == 14, "Wrong length");
390 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os) == 0, "Wrong first base idx");
391 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os) == 13, "Wrong last base idx");
392
393 QWidget *msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
394 QLabel *line = GTWidget::findLabel(os, "Line", msaEditorStatusBar);
395 QLabel *column = GTWidget::findLabel(os, "Column", msaEditorStatusBar);
396 QLabel *selection = GTWidget::findLabel(os, "Selection", msaEditorStatusBar);
397
398 // Select 1 base.
399 GTUtilsMSAEditorSequenceArea::click(os, QPoint(4, 3));
400 CHECK_SET_ERR(column->text() == "Col 5 / 14", "1. Column is " + column->text());
401 CHECK_SET_ERR(line->text() == "Seq 4 / 10", "1. Sequence is " + line->text());
402
403 // Select another base.
404 GTUtilsMSAEditorSequenceArea::click(os, QPoint(1, 8));
405 CHECK_SET_ERR(column->text() == "Col 2 / 14", "2. Column is " + column->text());
406 CHECK_SET_ERR(line->text() == "Seq 9 / 10", "2. Sequence is " + line->text());
407
408 // Select a vertical 1D range.
409 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(7, 7));
410 CHECK_SET_ERR(column->text() == "Col 8 / 14", "3. Column is " + column->text());
411 CHECK_SET_ERR(line->text() == "Seq - / 10", "3. Sequence is " + line->text());
412
413 // Select a horizontal 1D range.
414 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 3));
415 CHECK_SET_ERR(column->text() == "Col - / 14", "4. Column is " + column->text());
416 CHECK_SET_ERR(line->text() == "Seq 4 / 10", "4. Sequence is " + line->text());
417
418 // Select a 2D range.
419 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
420 CHECK_SET_ERR(column->text() == "Col - / 14", "5. Column is " + column->text());
421 CHECK_SET_ERR(line->text() == "Seq - / 10", "5. Sequence is " + line->text());
422
423 // Select multi-selection.
424 GTUtilsMsaEditor::clearSelection(os);
425 GTUtilsMsaEditor::selectRowsByName(os, {"Phaneroptera_falcata", "Tettigonia_viridissima"});
426 CHECK_SET_ERR(column->text() == "Col - / 14", "6. Column is " + column->text());
427 CHECK_SET_ERR(line->text() == "Seq - / 10", "6. Sequence is " + line->text());
428 CHECK_SET_ERR(selection->text() == "Sel 14 x 2 regions", "6. Selection is " + selection->text());
429 }
430
GUI_TEST_CLASS_DEFINITION(test_0005_1)431 GUI_TEST_CLASS_DEFINITION(test_0005_1) {
432 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
433 GTUtilsTaskTreeView::waitTaskFinished(os);
434
435 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLength(os) == 14, "Wrong length");
436 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os) == 0, "Wrong first base idx");
437 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os) == 13, "Wrong last base idx");
438
439 QWidget *msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
440 QLabel *line = GTWidget::findLabel(os, "Line", msaEditorStatusBar);
441 QLabel *column = GTWidget::findLabel(os, "Column", msaEditorStatusBar);
442
443 GTUtilsMSAEditorSequenceArea::click(os, QPoint(4, 3));
444 CHECK_SET_ERR(line->text() == "Seq 4 / 10", "1. Sequence is " + line->text());
445 CHECK_SET_ERR(column->text() == "Col 5 / 14", "1. Column is " + column->text());
446
447 // CHANGES: close and open MDI window, hide projectTreeView
448 GTUtilsMdi::click(os, GTGlobals::Close);
449
450 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped"));
451 GTMouseDriver::doubleClick();
452 GTUtilsTaskTreeView::waitTaskFinished(os);
453
454 GTUtilsProjectTreeView::toggleView(os);
455 GTUtilsTaskTreeView::waitTaskFinished(os);
456
457 msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
458
459 line = GTWidget::findLabel(os, "Line", msaEditorStatusBar);
460 column = GTWidget::findLabel(os, "Column", msaEditorStatusBar);
461
462 GTUtilsMSAEditorSequenceArea::click(os, QPoint(1, 8));
463 CHECK_SET_ERR(line->text() == "Seq 9 / 10", "2. Sequence is " + line->text());
464 CHECK_SET_ERR(column->text() == "Col 2 / 14", "2. Column is " + column->text());
465 }
466
GUI_TEST_CLASS_DEFINITION(test_0007)467 GUI_TEST_CLASS_DEFINITION(test_0007) {
468 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
469 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
470 GTUtilsTaskTreeView::waitTaskFinished(os);
471
472 // Expected state: Alignment length 14, left offset 1, right offset 14
473
474 // 2. Do double click on Tettigonia_viridissima sequence name.
475 // Expected state: Rename dialog appears
476 // 3. Put "Sequence_a" into text field. Click OK.
477
478 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Tettigonia_viridissima"));
479 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
480 GTMouseDriver::doubleClick();
481 GTGlobals::sleep();
482
483 // Expected state: Tettigonia_viridissima renamed to Sequence_a
484 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
485 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
486 GTMouseDriver::doubleClick();
487 GTGlobals::sleep();
488
489 // 4. Rlick Undo button.
490 QAbstractButton *undo = GTAction::button(os, "msa_action_undo");
491 GTWidget::click(os, undo);
492 // GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
493 GTGlobals::sleep();
494
495 // Expected state: Tettigonia_viridissima renamed back
496 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Tettigonia_viridissima", "Tettigonia_viridissima"));
497 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
498 GTMouseDriver::doubleClick();
499 GTGlobals::sleep();
500 }
501
GUI_TEST_CLASS_DEFINITION(test_0007_1)502 GUI_TEST_CLASS_DEFINITION(test_0007_1) {
503 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
504 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
505 GTUtilsTaskTreeView::waitTaskFinished(os);
506
507 // Expected state: Aligniment length 14, left offset 1, right offset 14
508
509 // 2. Do double click on Tettigonia_viridissima sequence name.
510 // Expected state: Rename dialog appears
511 // 3. Put "Sequence_a" into text field. Click OK.
512
513 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Tettigonia_viridissima"));
514 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
515 GTMouseDriver::doubleClick();
516 GTGlobals::sleep();
517
518 // Expected state: Tettigonia_viridissima renamed to Sequence_a
519
520 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
521 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
522 GTMouseDriver::doubleClick();
523 GTGlobals::sleep();
524
525 // 4. Rlick Undo button. CHANGES: clicking undo by mouse
526 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "msa_action_undo"));
527 GTGlobals::sleep();
528
529 // Expected state: Tettigonia_viridissima renamed back
530 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Tettigonia_viridissima", "Tettigonia_viridissima"));
531 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 3));
532 GTMouseDriver::doubleClick();
533 GTGlobals::sleep();
534 }
535
GUI_TEST_CLASS_DEFINITION(test_0007_2)536 GUI_TEST_CLASS_DEFINITION(test_0007_2) {
537 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
538 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
539 GTUtilsTaskTreeView::waitTaskFinished(os);
540
541 // Expected state: Alignment length 14, left offset 1, right offset 14
542
543 // 2. Do double click on Tettigonia_viridissima sequence name. CHANGES: another sequence renamed
544 // Expected state: Rename dialog appears
545 // 3. Put "Sequence_a" into text field. Click OK.
546
547 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Bicolorana_bicolor_EF540830"));
548 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 2));
549 GTMouseDriver::doubleClick();
550 GTGlobals::sleep();
551
552 // Expected state: Tettigonia_viridissima renamed to Sequence_a
553 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
554 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 2));
555 GTMouseDriver::doubleClick();
556 GTGlobals::sleep();
557
558 // 4. Rlick Undo button.
559 GTKeyboardDriver::keyClick('z', Qt::ControlModifier);
560 GTGlobals::sleep();
561
562 // Expected state: Tettigonia_viridissima renamed back
563 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Bicolorana_bicolor_EF540830", "Bicolorana_bicolor_EF540830"));
564 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 2));
565 GTMouseDriver::doubleClick();
566 GTGlobals::sleep();
567 }
568
GUI_TEST_CLASS_DEFINITION(test_0007_3)569 GUI_TEST_CLASS_DEFINITION(test_0007_3) {
570 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
571 GTUtilsTaskTreeView::waitTaskFinished(os);
572
573 // Double-click on Tettigonia_viridissima sequence name. CHANGES: another sequence renamed.
574 // Expected state: Rename dialog appears.
575 // Put "Sequence_a" into text field. Click OK.
576
577 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Phaneroptera_falcata"));
578 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 0));
579 GTMouseDriver::doubleClick();
580
581 // Expected state: Tettigonia_viridissima renamed to Sequence_a.
582 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
583 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 0));
584 GTMouseDriver::doubleClick();
585
586 // Click Undo button.
587 GTUtilsMsaEditor::undo(os);
588 GTUtilsTaskTreeView::waitTaskFinished(os);
589
590 // Expected state: Tettigonia_viridissima is renamed back.
591 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Phaneroptera_falcata", "Phaneroptera_falcata"));
592 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 0));
593 GTMouseDriver::doubleClick();
594 }
595
GUI_TEST_CLASS_DEFINITION(test_0007_4)596 GUI_TEST_CLASS_DEFINITION(test_0007_4) {
597 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
598 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
599 GTUtilsTaskTreeView::waitTaskFinished(os);
600
601 // Expected state: Alignment length 14, left offset 1, right offset 14
602
603 // 2. Do double-click on Tettigonia_viridissima sequence name. CHANGES: another sequence renamed
604 // Expected state: Rename dialog appears
605 // 3. Put "Sequence_a" into text field. Click OK.
606
607 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Conocephalus_sp."));
608 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 5));
609 GTMouseDriver::doubleClick();
610 GTGlobals::sleep();
611
612 // Expected state: Tettigonia_viridissima renamed to Sequence_a
613 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
614 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 5));
615 GTMouseDriver::doubleClick();
616 GTGlobals::sleep();
617
618 // 4. Rlick Undo button.
619 GTKeyboardDriver::keyClick('z', Qt::ControlModifier);
620 GTGlobals::sleep();
621
622 // Expected state: Tettigonia_viridissima renamed back
623 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Conocephalus_sp.", "Conocephalus_sp."));
624 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 5));
625 GTMouseDriver::doubleClick();
626 GTGlobals::sleep();
627 }
628
GUI_TEST_CLASS_DEFINITION(test_0008)629 GUI_TEST_CLASS_DEFINITION(test_0008) {
630 // 1. Open document samples\CLUSTALW\COI.aln
631 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
632 GTUtilsTaskTreeView::waitTaskFinished(os);
633
634 // 2. Create bookmark. Rename "New bookmark" to "start bookmark"
635 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "start bookmark");
636
637 const int startRO = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
638 const int startLO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
639
640 // 3. Scroll msa to the middle.
641 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 300));
642 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_NAVIGATION << "action_go_to_position"));
643
644 QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
645 GTMenu::showContextMenu(os, mdiWindow);
646 GTGlobals::sleep(500);
647
648 // 4. Create bookmark. Rename "New bookmark" to "middle bookmark"
649 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "middle bookmark");
650
651 const int midLO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
652
653 // 5. Scroll msa to the end.
654 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 550));
655 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_NAVIGATION << "action_go_to_position"));
656
657 GTMenu::showContextMenu(os, mdiWindow);
658 GTGlobals::sleep(500);
659
660 // 6. Create bookmark. Rename "New bookmark" to "end bookmark"
661 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "end bookmark");
662
663 const int endLO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
664
665 // Expected state: clicking on each bookmark will recall corresponding MSA position
666 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
667 GTGlobals::sleep(500);
668
669 int RO = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
670 int LO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
671 CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets aren't equal to the expected");
672
673 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
674 GTGlobals::sleep(500);
675
676 RO = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
677 LO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
678 CHECK_SET_ERR(midLO == LO, QString("middle bookmark offsets aren't equal to the expected: midLO=%1 LO=%2").arg(midLO).arg(LO));
679 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
680 GTGlobals::sleep(500);
681
682 RO = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
683 LO = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
684 // CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets aren't equal to the expected");
685 CHECK_SET_ERR(endLO == LO, QString("end bookmark offsets aren't equal to the expected: endLO=%3 LO=%4").arg(endLO).arg(LO));
686 // 7. Delete Start bookmark
687 GTUtilsBookmarksTreeView::deleteBookmark(os, "start bookmark");
688
689 // Expected state: start bookmark isn't present
690 QTreeWidgetItem *startBookmark = GTUtilsBookmarksTreeView::findItem(os, "start bookmark", GTGlobals::FindOptions(false));
691 CHECK_SET_ERR(startBookmark == nullptr, "Start bookmark is not deleted");
692 }
693
GUI_TEST_CLASS_DEFINITION(test_0008_1)694 GUI_TEST_CLASS_DEFINITION(test_0008_1) { // CHANGES: default names used
695 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
696 GTUtilsTaskTreeView::waitTaskFinished(os);
697
698 // Create a bookmark. Do not rename the new bookmark.
699 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]");
700
701 int startBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
702 int startBookmarkLastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
703
704 // Scroll msa to the middle.
705 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 300));
706 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
707 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
708
709 // Create a bookmark. Do not rename the new bookmark.
710 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]");
711
712 int middleBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
713
714 // Scroll msa to the end.
715 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 550));
716 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
717 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
718
719 // Create bookmark. Do not rename the new bookmark..
720 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]");
721 int endBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
722
723 // Expected state: click on each bookmark sets corresponding MSA position.
724 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark");
725 int firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
726 int lastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
727 CHECK_SET_ERR(firstBase == startBookmarkFirstBase, QString("Start bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(startBookmarkFirstBase));
728 CHECK_SET_ERR(lastBase == startBookmarkLastBase, "start bookmark offsets aren't equal to the expected");
729
730 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark 2");
731 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
732 CHECK_SET_ERR(firstBase == middleBookmarkFirstBase, QString("Middle bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(middleBookmarkFirstBase));
733
734 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark 3");
735 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
736 CHECK_SET_ERR(firstBase == endBookmarkFirstBase, QString("End bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(endBookmarkFirstBase));
737
738 // Delete Start bookmark & check it was deleted.
739 GTUtilsBookmarksTreeView::deleteBookmark(os, "New bookmark");
740 QTreeWidgetItem *startBookmark = GTUtilsBookmarksTreeView::findItem(os, "New bookmark", {false});
741 CHECK_SET_ERR(startBookmark == nullptr, "Start bookmark wasn't deleted");
742 }
743
GUI_TEST_CLASS_DEFINITION(test_0008_2)744 GUI_TEST_CLASS_DEFINITION(test_0008_2) {
745 // CHANGES: mid and end coordinates changed.
746 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
747 GTUtilsTaskTreeView::waitTaskFinished(os);
748
749 // Create a bookmark. Rename "New bookmark" to "start bookmark".
750 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "start bookmark");
751 int startBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
752 int startBookmarkLastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
753
754 // Scroll msa to the middle.
755 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 200));
756 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
757 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
758
759 // Create a bookmark. Rename "New bookmark" to "middle bookmark"
760 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "middle bookmark");
761 int middleBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
762
763 // Scroll msa to the end.
764 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 510));
765 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
766 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
767
768 // Create bookmark. Rename "New bookmark" to "end bookmark".
769 GTUtilsBookmarksTreeView::addBookmark(os, "COI [COI.aln]", "end bookmark");
770 int endBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
771
772 // Expected state: click on each bookmark sets corresponding MSA position.
773 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
774 int firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
775 int lastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
776 CHECK_SET_ERR(firstBase == startBookmarkFirstBase, QString("Start bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(startBookmarkFirstBase));
777 CHECK_SET_ERR(lastBase == startBookmarkLastBase, "start bookmark offsets aren't equal to the expected");
778
779 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
780 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
781 CHECK_SET_ERR(firstBase == middleBookmarkFirstBase, QString("Middle bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(middleBookmarkFirstBase));
782
783 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
784 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
785 CHECK_SET_ERR(firstBase == endBookmarkFirstBase, QString("End bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(endBookmarkFirstBase));
786 }
787
GUI_TEST_CLASS_DEFINITION(test_0008_3)788 GUI_TEST_CLASS_DEFINITION(test_0008_3) {
789 // CHANGES: mid and end coordinates changed.
790 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
791 GTUtilsTaskTreeView::waitTaskFinished(os);
792
793 // Create a bookmark. Rename "New bookmark" to "start bookmark".
794 GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [HIV-1.aln]", "start bookmark");
795 int startBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
796 int startBookmarkLastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
797
798 // Scroll msa to the middle.
799 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 600));
800 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
801 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
802
803 // Create a bookmark. Rename "New bookmark" to "middle bookmark"
804 GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [HIV-1.aln]", "middle bookmark");
805 int middleBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
806
807 // Scroll msa to the end.
808 GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 1000));
809 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_NAVIGATION, "action_go_to_position"}));
810 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
811
812 // Create bookmark. Rename "New bookmark" to "end bookmark".
813 GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [HIV-1.aln]", "end bookmark");
814 int endBookmarkFirstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
815
816 // Expected state: click on each bookmark sets corresponding MSA position.
817 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
818 int firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
819 int lastBase = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
820 CHECK_SET_ERR(firstBase == startBookmarkFirstBase, QString("Start bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(startBookmarkFirstBase));
821 CHECK_SET_ERR(lastBase == startBookmarkLastBase, "start bookmark offsets aren't equal to the expected");
822
823 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
824 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
825 CHECK_SET_ERR(firstBase == middleBookmarkFirstBase, QString("Middle bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(middleBookmarkFirstBase));
826
827 GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
828 firstBase = GTUtilsMSAEditorSequenceArea::getFirstVisibleBase(os);
829 CHECK_SET_ERR(firstBase == endBookmarkFirstBase, QString("End bookmark first base offset does not match: %1 vs %2").arg(firstBase).arg(endBookmarkFirstBase));
830 }
831
GUI_TEST_CLASS_DEFINITION(test_0009)832 GUI_TEST_CLASS_DEFINITION(test_0009) {
833 // 1. Open ma2_gapped.aln
834 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
835 GTUtilsTaskTreeView::waitTaskFinished(os);
836 GTGlobals::sleep();
837
838 // 2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
839 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 1), QPoint(13, 1));
840 GTGlobals::sleep();
841
842 // 3. Do context menu {Align-> Align with MUSCLE} use "column range"
843 GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
844
845 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
846 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
847 GTUtilsTaskTreeView::waitTaskFinished(os);
848
849 // Expected state: Column range = 12-14
850 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
851 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
852 GTGlobals::sleep();
853
854 QString clipboardText = GTClipboard::text(os);
855 QString expectedMSA = "TAA\n---\nTAA\nTAA\n---\n---\n---\nTAA\nTTA\n---";
856
857 CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs\n" + clipboardText);
858
859 GTGlobals::sleep();
860
861 // 4. Press Align
862 // Expected state: After aligning with 'stable' option the order must not change
863 }
864
GUI_TEST_CLASS_DEFINITION(test_0009_1)865 GUI_TEST_CLASS_DEFINITION(test_0009_1) {
866 // 1. Open ma2_gapped.aln
867 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
868 GTUtilsTaskTreeView::waitTaskFinished(os);
869 GTGlobals::sleep();
870
871 // 2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
872 // CHANGES: selection from right to left
873 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(13, 1), QPoint(11, 1));
874 GTGlobals::sleep();
875
876 // 3. Do context menu {Align-> Align with MUSCLE} use "column range"
877 GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
878
879 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
880 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
881 GTUtilsTaskTreeView::waitTaskFinished(os);
882
883 // Expected state: Column range = 12-14
884 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
885 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
886
887 QString sequencesInClipboard = GTClipboard::text(os);
888 QString expectedMSA = "TAA\n---\nTAA\nTAA\n---\n---\n---\nTAA\nTTA\n---";
889
890 CHECK_SET_ERR(sequencesInClipboard == expectedMSA, "Clipboard check failed! Expected: '" + expectedMSA + "'\n, got: '" + sequencesInClipboard + "'");
891
892 GTGlobals::sleep();
893
894 // 4. Press Align
895 // Expected state: After aligning with 'stable' option the order must not change
896 }
897
GUI_TEST_CLASS_DEFINITION(test_0009_2)898 GUI_TEST_CLASS_DEFINITION(test_0009_2) {
899 // 1. Open ma2_gapped.aln
900 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
901 GTUtilsTaskTreeView::waitTaskFinished(os);
902 GTGlobals::sleep();
903
904 // 2. Select a trailing region length=3 (all gaps) for Isophia_altiacaEF540820
905 // CHANGES: another region selected
906 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 4), QPoint(13, 4));
907 GTGlobals::sleep();
908
909 // 3. Do context menu {Align-> Align with MUSCLE} use "column range"
910 GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
911
912 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseKey));
913 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
914 GTUtilsTaskTreeView::waitTaskFinished(os);
915
916 // Expected state: Column range = 12-14
917 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
918 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
919 GTGlobals::sleep();
920
921 QString clipboardText = GTClipboard::text(os);
922 QString expectedMSA = "TAA\n---\nTAA\nTAA\n---\n---\n---\nTAA\nTTA\n---";
923
924 CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
925
926 GTGlobals::sleep();
927
928 // 4. Press Align
929 // Expected state: After aligning with 'stable' option the order must not change
930 }
931
GUI_TEST_CLASS_DEFINITION(test_0010)932 GUI_TEST_CLASS_DEFINITION(test_0010) {
933 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
934 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
935 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
936 GTUtils::checkExportServiceIsEnabled(os);
937
938 // 2. Do document context menu {Export->Export aligniment to amino format}
939 // 3. Translate with default settings
940 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010.aln"));
941 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
942 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
943 GTUtilsTaskTreeView::waitTaskFinished(os);
944
945 // copy to clipboard
946 GTUtilsMSAEditorSequenceArea::selectArea(os);
947 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
948
949 // Expected state: every sequense name is the same as its amino translation
950 const QString clipboardText = GTClipboard::text(os);
951 const QString expectedMSA = "L\nS\nD\nS\nP\nK";
952 CHECK_SET_ERR(clipboardText == expectedMSA, clipboardText);
953 }
954
GUI_TEST_CLASS_DEFINITION(test_0010_1)955 GUI_TEST_CLASS_DEFINITION(test_0010_1) {
956 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
957 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
958 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
959 GTUtils::checkExportServiceIsEnabled(os);
960
961 // 2. Do document context menu {Export->Export aligniment to amino format}
962 // 3. Translate with default settings
963 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010_1.aln"));
964 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
965 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
966 GTUtilsTaskTreeView::waitTaskFinished(os);
967
968 // copy to clipboard
969 GTUtilsMSAEditorSequenceArea::selectArea(os);
970 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
971
972 // Expected state: every sequense name the same as it amino translation
973 const QString clipboardText = GTClipboard::text(os);
974 const QString expectedMSA = "L\nS\nD\nS\nP\nK";
975 CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
976 }
977
GUI_TEST_CLASS_DEFINITION(test_0010_2)978 GUI_TEST_CLASS_DEFINITION(test_0010_2) {
979 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
980 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
981 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
982 GTUtils::checkExportServiceIsEnabled(os);
983
984 // 2. Do document context menu {Export->Export aligniment to amino format}
985 // 3. Translate to amino with default settings
986 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010_2.aln"));
987 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
988 GTWidget::click(os, GTUtilsMsaEditor::getActiveMsaEditorWindow(os), Qt::RightButton);
989 GTUtilsDialog::waitAllFinished(os);
990 GTUtilsTaskTreeView::waitTaskFinished(os);
991
992 // copy to clipboard
993 GTUtilsMSAEditorSequenceArea::selectArea(os);
994 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
995
996 // Expected state: every sequence name the same as it amino translation
997 QString clipboardText = GTClipboard::text(os);
998 QString expectedMSA = "L\nS\nD\nS\nP\nK";
999 CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string are different. Clipboard text: " + clipboardText);
1000
1001 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1002 QStringList expectedNameList = QStringList() << "L(translated)"
1003 << "S(translated)"
1004 << "D(translated)"
1005 << "S(translated)"
1006 << "P(translated)"
1007 << "K(translated)";
1008 CHECK_SET_ERR(nameList == expectedNameList, "Name lists are different. Expected: " + expectedNameList.join(",") + ", actual: " + nameList.join(","));
1009 }
1010
GUI_TEST_CLASS_DEFINITION(test_0011)1011 GUI_TEST_CLASS_DEFINITION(test_0011) {
1012 // In-place reverse complement replace in MSA Editor (0002425)
1013
1014 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
1015 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
1016 GTUtilsTaskTreeView::waitTaskFinished(os);
1017
1018 // 2. Select first sequence and do context menu {Edit->Replace selected rows with reverce complement}
1019 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
1020 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
1021 GTMouseDriver::click(Qt::RightButton);
1022 GTUtilsTaskTreeView::waitTaskFinished(os);
1023
1024 // Expected state: sequence changed from TTG -> CAA
1025 GTGlobals::sleep();
1026 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1027
1028 GTGlobals::sleep();
1029 QString clipboardText = GTClipboard::text(os);
1030 CHECK_SET_ERR(clipboardText == "CAA", "Clipboard string and expected MSA string differs");
1031
1032 // sequence name changed from L -> L|revcompl
1033 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1034 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1035 CHECK_SET_ERR(nameList[0] == "L|revcompl", "There are no 'L|revcompl' in nameList");
1036
1037 // 3. Do step 2 again
1038 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
1039 GTMouseDriver::click(Qt::RightButton);
1040
1041 // Expected state: sequence changed from CAA -> TTG
1042 GTGlobals::sleep();
1043 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1044
1045 GTGlobals::sleep();
1046 clipboardText = GTClipboard::text(os);
1047 CHECK_SET_ERR(clipboardText == "TTG", "Clipboard string and expected MSA string differs");
1048
1049 // sequence name changed from L|revcompl ->
1050 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1051 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1052 CHECK_SET_ERR(!nameList.contains("L|revcompl"), "There are 'L|revcompl' in nameList");
1053
1054 GTGlobals::sleep();
1055 }
1056
GUI_TEST_CLASS_DEFINITION(test_0011_1)1057 GUI_TEST_CLASS_DEFINITION(test_0011_1) {
1058 // In-place reverse complement replace in MSA Editor (0002425)
1059
1060 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
1061 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
1062 GTUtilsTaskTreeView::waitTaskFinished(os);
1063
1064 // 2. Select first sequence and do context menu {Edit->Replace selected rows with reverce complement}
1065 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
1066 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
1067 GTMouseDriver::click(Qt::RightButton);
1068
1069 // Expected state: sequence changed from TTG -> CAA
1070 // CHANGES: copy by context menu
1071 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
1072
1073 QString clipboardText = GTClipboard::text(os);
1074 CHECK_SET_ERR(clipboardText == "CAA", "Clipboard string and expected MSA string differs");
1075
1076 // sequence name changed from L -> L|revcompl
1077 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1078 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1079 CHECK_SET_ERR(nameList[0] == "L|revcompl", "There are no 'L|revcompl' in nameList");
1080
1081 // 3. Do step 2 again
1082 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
1083 GTMouseDriver::click(Qt::RightButton);
1084
1085 // Expected state: sequence changed from CAA -> TTG
1086 // CHANGES: copy by context menu
1087 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
1088
1089 clipboardText = GTClipboard::text(os);
1090 CHECK_SET_ERR(clipboardText == "TTG", "Clipboard string and expected MSA string differs");
1091
1092 // sequence name changed from L|revcompl ->
1093 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1094 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1095 CHECK_SET_ERR(!nameList.contains("L|revcompl"), "There are 'L|revcompl' in nameList");
1096 }
1097
GUI_TEST_CLASS_DEFINITION(test_0011_2)1098 GUI_TEST_CLASS_DEFINITION(test_0011_2) {
1099 // In-place reverse complement replace in MSA Editor (0002425)
1100
1101 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
1102 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
1103 GTUtilsTaskTreeView::waitTaskFinished(os);
1104
1105 // 2. Select first sequence and do context menu {Edit->Replace selected rows with reverce complement}
1106 // CHANGES: using main menu
1107 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
1108 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1109 << "Edit"
1110 << "Replace selected rows with reverse-complement");
1111 GTGlobals::sleep();
1112 // GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
1113 // Expected state: sequence changed from TTG -> CAA
1114 GTGlobals::sleep();
1115 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
1116 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
1117
1118 QString clipboardText = GTClipboard::text(os);
1119 CHECK_SET_ERR(clipboardText == "CAA", "Clipboard string and expected MSA string differs" + clipboardText);
1120
1121 // sequence name changed from L -> L|revcompl
1122 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1123 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1124 CHECK_SET_ERR(nameList[0] == "L|revcompl", "There are no 'L|revcompl' in nameList");
1125
1126 // 3. Do step 2 again
1127 // CHANGES: using main menu
1128 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1129 << "Edit"
1130 << "Replace selected rows with reverse-complement");
1131
1132 // Expected state: sequence changed from CAA -> TTG
1133 // GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
1134 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1135
1136 clipboardText = GTClipboard::text(os);
1137 CHECK_SET_ERR(clipboardText == "TTG", "Clipboard string and expected MSA string differs");
1138
1139 // sequence name changed from L|revcompl ->
1140 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
1141 CHECK_SET_ERR(nameList.size() >= 2, "nameList doesn't contain enough strings");
1142 CHECK_SET_ERR(!nameList.contains("L|revcompl"), "There are 'L|revcompl' in nameList");
1143 }
1144
GUI_TEST_CLASS_DEFINITION(test_0012)1145 GUI_TEST_CLASS_DEFINITION(test_0012) {
1146 // Add tests on alignment translation features (0002432)
1147
1148 // 1. Open file _common_data\scenarios\msa\revcompl.aln
1149 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/revcompl.aln");
1150 GTUtilsTaskTreeView::waitTaskFinished(os);
1151
1152 // 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
1153 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
1154 GTUtilsMSAEditorSequenceArea::selectArea(os);
1155 GTMouseDriver::click(Qt::RightButton);
1156 GTWidget::click(os, GTUtilsMdi::activeWindow(os));
1157
1158 GTUtilsTaskTreeView::waitTaskFinished(os);
1159
1160 // Expected state: result alignement must be
1161 // CAA---
1162 // --TGA-
1163 // ---ATC
1164 const QStringList expectedData = QStringList() << "CAA---"
1165 << "--TGA-"
1166 << "---ATC";
1167 const QStringList actualData = GTUtilsMsaEditor::getWholeData(os);
1168 CHECK_SET_ERR(actualData == expectedData, "Clipboard data and expected MSA data differs");
1169 }
1170
GUI_TEST_CLASS_DEFINITION(test_0013)1171 GUI_TEST_CLASS_DEFINITION(test_0013) {
1172 // Kalign crashes on amino alignment that was generated from nucleotide alignment (0002658)
1173
1174 // 1. Open file data/samples/CLUSTALW/COI.aln
1175 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1176 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1177 GTUtils::checkExportServiceIsEnabled(os);
1178
1179 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
1180 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
1181
1182 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
1183 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1184
1185 // 3. Open converted alignment. Use context menu {Align->Align with Kalign}
1186 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1187
1188 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
1189 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1190
1191 // Expected state: UGENE not crash
1192 GTGlobals::sleep(5000);
1193 }
1194
GUI_TEST_CLASS_DEFINITION(test_0013_1)1195 GUI_TEST_CLASS_DEFINITION(test_0013_1) {
1196 // Kalign crashes on amino alignment that was generated from nucleotide alignment (0002658)
1197
1198 // 1. Open file data/samples/CLUSTALW/COI.aln
1199 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1200 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1201 GTUtils::checkExportServiceIsEnabled(os);
1202
1203 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
1204 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, testDir + "_common_data/scenarios/sandbox/COI_transl.aln"));
1205 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
1206 GTWidget::click(os, GTUtilsMsaEditor::getActiveMsaEditorWindow(os), Qt::RightButton);
1207 GTUtilsDialog::waitAllFinished(os);
1208 GTUtilsTaskTreeView::waitTaskFinished(os);
1209
1210 // CHANGES: close and open MDI window
1211 GTUtilsMdi::click(os, GTGlobals::Close);
1212 GTUtilsMdi::checkWindowIsActive(os, "Start Page");
1213
1214 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI_transl.aln"));
1215 GTMouseDriver::doubleClick();
1216 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1217
1218 // 3. Open converted alignment. Use context menu {Align->Align with Kalign}
1219 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1220 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
1221 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1222 GTUtilsDialog::waitAllFinished(os);
1223 GTUtilsTaskTreeView::waitTaskFinished(os);
1224 }
1225
GUI_TEST_CLASS_DEFINITION(test_0013_2)1226 GUI_TEST_CLASS_DEFINITION(test_0013_2) {
1227 // Kalign crashes on amino alignment that was generated from nucleotide alignment (0002658)
1228
1229 // 1. Open file data/samples/CLUSTALW/COI.aln
1230 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1231 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1232 GTUtils::checkExportServiceIsEnabled(os);
1233
1234 // 2. Convert alignment to amino. Use context menu {Export->Amino translation of alignment rows}
1235 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
1236
1237 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
1238 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1239 GTGlobals::sleep();
1240
1241 GTGlobals::sleep();
1242
1243 // 3. Open converted alignment. Use context menu {Align->Align with Kalign}
1244 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1245
1246 // CHANGES: using main menu
1247 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1248 << "Align"
1249 << "Align with Kalign...");
1250 GTUtilsTaskTreeView::waitTaskFinished(os);
1251
1252 // Expected state: UGENE not crash
1253 }
1254
GUI_TEST_CLASS_DEFINITION(test_0014)1255 GUI_TEST_CLASS_DEFINITION(test_0014) {
1256 // UGENE crashes in malignment editor after aligning (UGENE-6)
1257
1258 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
1259 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1260 GTUtilsTaskTreeView::waitTaskFinished(os);
1261
1262 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1263
1264 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
1265 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1266 GTGlobals::sleep();
1267 GTGlobals::sleep();
1268
1269 // 2. after kalign finishes and msa opens insert gaps and click in alignment
1270 GTGlobals::sleep(5000);
1271
1272 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
1273 GTMouseDriver::click();
1274 GTKeyboardDriver::keyClick(Qt::Key_Space);
1275 GTKeyboardDriver::keyClick(Qt::Key_Space);
1276 GTGlobals::sleep();
1277
1278 GTMouseDriver::click();
1279
1280 // Expected state: UGENE not crash
1281 GTGlobals::sleep(5000);
1282 }
1283
GUI_TEST_CLASS_DEFINITION(test_0014_1)1284 GUI_TEST_CLASS_DEFINITION(test_0014_1) {
1285 // UGENE crashes in malignment editor after aligning (UGENE-6)
1286
1287 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
1288 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1289 GTUtilsTaskTreeView::waitTaskFinished(os);
1290
1291 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1292
1293 // CHANGES: using main menu
1294 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1295 << "Align"
1296 << "Align with Kalign...");
1297 GTGlobals::sleep();
1298
1299 // 2. after kalign finishes and msa opens insert gaps and click in alignment
1300 GTUtilsTaskTreeView::waitTaskFinished(os);
1301
1302 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
1303 GTMouseDriver::click();
1304 GTKeyboardDriver::keyClick(Qt::Key_Space);
1305 GTKeyboardDriver::keyClick(Qt::Key_Space);
1306 GTGlobals::sleep();
1307
1308 GTMouseDriver::click();
1309
1310 // Expected state: UGENE not crash
1311 GTGlobals::sleep();
1312 }
1313
GUI_TEST_CLASS_DEFINITION(test_0014_2)1314 GUI_TEST_CLASS_DEFINITION(test_0014_2) {
1315 // UGENE crashes in malignment editor after aligning (UGENE-6)
1316
1317 // 1. Do menu tools->multiple alignment->kalign, set input alignment "data/samples/CLUSTALW/COI.aln" and press Align button
1318 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1319 GTUtilsTaskTreeView::waitTaskFinished(os);
1320
1321 // CHANGES: close and open MDI window, close Project tree view
1322 GTUtilsMdi::click(os, GTGlobals::Close);
1323 GTGlobals::sleep();
1324 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI"));
1325 GTMouseDriver::doubleClick();
1326 GTGlobals::sleep();
1327 GTUtilsProjectTreeView::toggleView(os);
1328 GTGlobals::sleep();
1329
1330 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1331
1332 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
1333 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
1334 GTGlobals::sleep();
1335 GTGlobals::sleep();
1336
1337 // 2. after kalign finishes and msa opens insert gaps and click in alignment
1338 GTGlobals::sleep(5000);
1339
1340 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
1341 GTMouseDriver::click();
1342 GTKeyboardDriver::keyClick(Qt::Key_Space);
1343 GTKeyboardDriver::keyClick(Qt::Key_Space);
1344 GTGlobals::sleep();
1345
1346 GTMouseDriver::click();
1347
1348 // Expected state: UGENE not crash
1349 GTGlobals::sleep(5000);
1350 }
1351
GUI_TEST_CLASS_DEFINITION(test_0015)1352 GUI_TEST_CLASS_DEFINITION(test_0015) {
1353 // ugene crashes when removing document after kalign (UGENE-36)
1354 //
1355 // 1. create empty project
1356 // 2. do menu {tools->multiple alignment->kalign}, set aligned document samples/CLUSTALW/COI.aln
1357
1358 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1359 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/", "COI.aln"));
1360 GTMenu::clickMainMenuItem(os, QStringList() << "Tools"
1361 << "Multiple sequence alignment"
1362 << "Align with Kalign...");
1363 GTGlobals::sleep();
1364
1365 // 3. aligned document opens
1366 GTGlobals::sleep(5000);
1367 GTUtilsMdi::activeWindow(os);
1368
1369 // 4. select document in project and press del
1370 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
1371 GTMouseDriver::click();
1372 GTKeyboardDriver::keyClick(Qt::Key_Delete);
1373 GTGlobals::sleep();
1374
1375 // Expected state: UGENE not crash
1376 GTGlobals::sleep(5000);
1377 }
1378
GUI_TEST_CLASS_DEFINITION(test_0015_1)1379 GUI_TEST_CLASS_DEFINITION(test_0015_1) {
1380 // ugene crashes when removing document after kalign (UGENE-36)
1381 //
1382 // 1. create empty project
1383 // 2. do menu {tools->multiple alignment->kalign}, set aligned document samples/CLUSTALW/COI.aln
1384
1385 // CHANGES: opens file, Kalign by popup menu
1386 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1387 GTUtilsTaskTreeView::waitTaskFinished(os);
1388 GTGlobals::sleep();
1389
1390 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1391
1392 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
1393 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
1394 GTGlobals::sleep();
1395
1396 // 3. aligned document opens
1397 GTGlobals::sleep(5000);
1398 GTUtilsMdi::activeWindow(os);
1399
1400 // 4. select document in project and press del
1401 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
1402 GTMouseDriver::click();
1403 GTKeyboardDriver::keyClick(Qt::Key_Delete);
1404 GTGlobals::sleep();
1405
1406 // Expected state: UGENE not crash
1407 GTGlobals::sleep(5000);
1408 }
1409
GUI_TEST_CLASS_DEFINITION(test_0015_2)1410 GUI_TEST_CLASS_DEFINITION(test_0015_2) {
1411 // ugene crashes when removing document after kalign (UGENE-36)
1412 //
1413 // 1. create empty project
1414 // 2. do menu {tools->multiple alignment->kalign}, set aligned document samples/CLUSTALW/COI.aln
1415
1416 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
1417 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/", "COI.aln"));
1418 GTMenu::clickMainMenuItem(os, QStringList() << "Tools"
1419 << "Multiple sequence alignment"
1420 << "Align with Kalign...");
1421 GTUtilsDialog::waitAllFinished(os);
1422 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1423
1424 // CHANGES: close MDI window
1425 GTUtilsMdi::click(os, GTGlobals::Close);
1426 GTUtilsMsaEditor::checkNoMsaEditorWindowIsOpened(os);
1427
1428 // 4. select document in project and press del
1429 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
1430 GTMouseDriver::click();
1431 GTKeyboardDriver::keyClick(Qt::Key_Delete);
1432
1433 // Expected state: UGENE not crash
1434 GTThread::waitForMainThread();
1435 }
1436
GUI_TEST_CLASS_DEFINITION(test_0016)1437 GUI_TEST_CLASS_DEFINITION(test_0016) {
1438 // Run Ugene. Open file _common_data\scenarios\msa\ma2_gapped.aln
1439 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
1440 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped_edited.aln");
1441 GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
1442 GTUtilsTaskTreeView::waitTaskFinished(os);
1443
1444 // Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata'
1445 // from 'AAG' to 'CTT' and save file.
1446 // Expected state: Dialog suggesting to reload modified document has appeared.
1447 // Press 'Yes'.
1448 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
1449 GTFile::copy(os, sandBoxDir + "ma2_gapped.aln", sandBoxDir + "ma2_gapped_old.aln");
1450 GTFile::copy(os, sandBoxDir + "ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped.aln");
1451 GTGlobals::sleep(10000);
1452
1453 // Expected state: document was reloaded, view activated.
1454 // 'Phaneroptera_falcata' starts with CTT.
1455 GTUtilsMdi::activeWindow(os);
1456 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
1457 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
1458 QString clipboardText = GTClipboard::text(os);
1459 CHECK_SET_ERR(clipboardText == "CTT", "MSA part differs from expected");
1460 }
1461
GUI_TEST_CLASS_DEFINITION(test_0016_1)1462 GUI_TEST_CLASS_DEFINITION(test_0016_1) {
1463 // 1. Run Ugene. Open file _common_data\scenarios\msa\ma2_gapped.aln
1464 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
1465 GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
1466 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1467
1468 // CHANGES: insert gaps in the beginning
1469 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
1470 GTKeyboardDriver::keyClick(Qt::Key_Space);
1471 GTKeyboardDriver::keyClick(Qt::Key_Space);
1472 GTKeyboardDriver::keyClick(Qt::Key_Space);
1473
1474 // 2. Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata' from 'AAG' to 'CTT' and save file.
1475 // Expected state: Dialog suggesting to reload modified document has appeared. Press 'Yes'.
1476 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
1477 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped.aln");
1478
1479 // Wait for the document to reload (1 second granularity).
1480 GTGlobals::sleep(2000);
1481
1482 // Expected state: document was reloaded, view activated.
1483 // 'Phaneroptera_falcata' starts with CTT.
1484 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1485 GTUtilsTaskTreeView::waitTaskFinished(os);
1486
1487 // copy to clipboard
1488 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
1489 GTKeyboardUtils::copy();
1490
1491 QString clipboardText = GTClipboard::text(os);
1492 CHECK_SET_ERR(clipboardText == "CTT", "MSA part differs from expected. Expected: CTT, actual: " + clipboardText);
1493 }
1494
GUI_TEST_CLASS_DEFINITION(test_0016_2)1495 GUI_TEST_CLASS_DEFINITION(test_0016_2) {
1496 // 1. Run Ugene. Open file _common_data\scenarios\msa\ma2_gapped.aln
1497 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln", sandBoxDir + "ma2_gapped.aln");
1498 GTFileDialog::openFile(os, sandBoxDir, "ma2_gapped.aln");
1499 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1500
1501 // 2. Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata'
1502 // from 'AAG' to 'CTT' and save file.
1503 // CHANGES: backup old file, copy changed file
1504 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
1505 GTGlobals::sleep(1000); // ugene doesn't detect changes whithin one second interval
1506 GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma2_gapped_edited.aln", sandBoxDir + "ma2_gapped.aln");
1507
1508 // Expected state: Dialog suggesting to reload modified document has appeared.
1509 // 3. Press 'Yes'.
1510 GTUtilsDialog::waitAllFinished(os);
1511
1512 // Expected state: document was reloaded, view activated.
1513 // 'Phaneroptera_falcata' starts with CTT.
1514
1515 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1516 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
1517 // copy to clipboard
1518 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1519 GTThread::waitForMainThread();
1520
1521 QString clipboardText = GTClipboard::text(os);
1522 CHECK_SET_ERR(clipboardText == "CTT", "MSA part differs from expected. Expected: CTT, actual: " + clipboardText);
1523
1524 // CHANGES: select item in project tree view and press delete
1525 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped.aln"));
1526 GTMouseDriver::click();
1527 GTKeyboardDriver::keyClick(Qt::Key_Delete);
1528 GTUtilsTaskTreeView::waitTaskFinished(os);
1529 }
1530
GUI_TEST_CLASS_DEFINITION(test_0017)1531 GUI_TEST_CLASS_DEFINITION(test_0017) {
1532 // Add a molecule from project (UGENE-288)
1533 //
1534 // 1. Open file data/samples/Genbank/murine.gb
1535 GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
1536 GTUtilsTaskTreeView::waitTaskFinished(os);
1537 GTGlobals::sleep();
1538
1539 // 2. Open file data/samples/MSF/HMA.msf
1540 GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
1541 GTUtilsTaskTreeView::waitTaskFinished(os);
1542 GTGlobals::sleep();
1543
1544 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
1545 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from current project"));
1546
1547 // 4. Select item dialog appeared
1548 // Expected state: loaded sequences present in list
1549 GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
1550
1551 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
1552 GTGlobals::sleep();
1553 }
1554
GUI_TEST_CLASS_DEFINITION(test_0017_1)1555 GUI_TEST_CLASS_DEFINITION(test_0017_1) {
1556 // Add a molecule from project (UGENE-288)
1557 //
1558 // 1. Open file data/samples/Genbank/murine.gb
1559 GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
1560 GTUtilsTaskTreeView::waitTaskFinished(os);
1561 GTGlobals::sleep();
1562
1563 // 2. Open file data/samples/MSF/HMA.msf
1564 GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
1565 GTUtilsTaskTreeView::waitTaskFinished(os);
1566 GTGlobals::sleep();
1567
1568 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
1569 // 4. Select item dialog appeared
1570 // Expected state: loaded sequences present in list
1571 GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
1572
1573 // CHANGES: using main menu instead of popup
1574 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1575 << "Add"
1576 << "Sequence from current project...");
1577 GTGlobals::sleep();
1578 }
1579
GUI_TEST_CLASS_DEFINITION(test_0017_2)1580 GUI_TEST_CLASS_DEFINITION(test_0017_2) {
1581 // Add a molecule from project (UGENE-288)
1582 //
1583 // 1. Open file data/samples/Genbank/murine.gb
1584 GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
1585 GTUtilsTaskTreeView::waitTaskFinished(os);
1586 GTGlobals::sleep();
1587
1588 // CHANGES: close MDI window of murine.gb
1589 GTUtilsMdi::click(os, GTGlobals::Close);
1590 GTGlobals::sleep();
1591
1592 // 2. Open file data/samples/MSF/HMA.msf
1593 GTFileDialog::openFile(os, dataDir + "samples/MSF/", "HMA.msf");
1594 GTUtilsTaskTreeView::waitTaskFinished(os);
1595 GTGlobals::sleep();
1596
1597 // 3. On MSA editor {Context Menu->Add->Sequence from current project}
1598 // 4. Select item dialog appeared
1599 // Expected state: loaded sequences present in list
1600 GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
1601
1602 // CHANGES: using main menu instead of popup
1603 GTMenu::clickMainMenuItem(os, QStringList() << "Actions"
1604 << "Add"
1605 << "Sequence from current project...");
1606 GTGlobals::sleep();
1607 }
1608
GUI_TEST_CLASS_DEFINITION(test_0018)1609 GUI_TEST_CLASS_DEFINITION(test_0018) {
1610 // Shifting sequences in the Alignment Editor (UGENE-238)
1611 //
1612 // 1. Open file data/samples/CLUSTALW/COI.aln
1613 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
1614 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1615
1616 // 2. Click on some row in sequence names area
1617 GTUtilsMsaEditor::clickSequence(os, 2);
1618
1619 // Expected state: row became selected
1620 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 2, 604, 1));
1621
1622 // 3. Click & drag selected row in sequence names area
1623 QStringList list1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
1624
1625 QRect rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 2);
1626 QRect destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 3);
1627 GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
1628
1629 // Expected state: row order changes respectively
1630 QStringList list2 = GTUtilsMSAEditorSequenceArea::getNameList(os);
1631 CHECK_SET_ERR(list1 != list2, "Name list wasn't changed 1");
1632
1633 // 4. Click & drag on unselected area
1634 rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 0);
1635 destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 1);
1636 GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
1637
1638 // Expected state: multiple rows selected
1639 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 0, 604, 2));
1640
1641 // 5. Click & drag selected block
1642 rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 0);
1643 destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 1);
1644 GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
1645
1646 // Expected state: whole selected block shifted
1647 QStringList list3 = GTUtilsMSAEditorSequenceArea::getNameList(os);
1648 CHECK_SET_ERR(list2 != list3, "Name list wasn't changed 2");
1649
1650 // 6. Click on some row in selected block
1651 GTUtilsMsaEditor::clickSequence(os, 1);
1652
1653 // Expected state: selection falls back to one row
1654 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 1, 604, 1));
1655 }
1656
GUI_TEST_CLASS_DEFINITION(test_0019)1657 GUI_TEST_CLASS_DEFINITION(test_0019) {
1658 // UGENE-79 In MSA editor support rows collapsing mode
1659 //
1660 // 1. open document samples/CLUSTALW/COI.aln
1661 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1662 GTUtilsTaskTreeView::waitTaskFinished(os);
1663
1664 QStringList nameListWithNoGroups = GTUtilsMSAEditorSequenceArea::getVisibleNames(os, true);
1665 CHECK_SET_ERR(nameListWithNoGroups.size() == 18, "Wrong sequence count in original mode: " + QString::number(nameListWithNoGroups.size()));
1666
1667 // 2. Press button Enable collapsing
1668 GTUtilsMsaEditor::toggleCollapsingMode(os);
1669
1670 // Expected state: Mecopoda_elongata__Ishigaki__J and Mecopoda_elongata__Sumatra_ folded together
1671 QStringList nameListWithCollapsedGroup = GTUtilsMSAEditorSequenceArea::getVisibleNames(os, true);
1672 CHECK_SET_ERR(nameListWithCollapsedGroup.size() == 17, "Wrong sequence count in collapsed mode: " + QString::number(nameListWithCollapsedGroup.size()));
1673 QString groupName = nameListWithCollapsedGroup[13];
1674 CHECK_SET_ERR(groupName == "[2] Mecopoda_elongata__Ishigaki__J", "Collapsed group has no 'count' badge: " + groupName);
1675 }
1676
GUI_TEST_CLASS_DEFINITION(test_0020)1677 GUI_TEST_CLASS_DEFINITION(test_0020) {
1678 // UGENE crashes when all columns in MSAEditor are deleted (UGENE-329)
1679 //
1680 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
1681 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1682 GTUtilsTaskTreeView::waitTaskFinished(os);
1683 // 2. Select Edit -> remove columns of gaps -> remove columns with number of gaps 1.
1684 // 3. Click OK
1685 GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os));
1686 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT"
1687 << "remove_columns_of_gaps"));
1688 GTMouseDriver::click(Qt::RightButton);
1689
1690 GTUtilsDialog::waitAllFinished(os);
1691
1692 // Expected state: UGENE not crashes, deletion is not performed
1693 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(0, 9));
1694 GTGlobals::sleep(500);
1695 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1696 GTGlobals::sleep(500);
1697 QString text = GTClipboard::text(os);
1698 QString expected = "A\nA\nT\nA\nT\nT\nT\nA\nA\nA";
1699 CHECK_SET_ERR(text == expected, "expected: " + expected + "found: " + text);
1700 }
1701
GUI_TEST_CLASS_DEFINITION(test_0020_1)1702 GUI_TEST_CLASS_DEFINITION(test_0020_1) {
1703 // UGENE crashes when all columns in MSAEditor are deleted (UGENE-329)
1704 //
1705 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
1706 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1707 GTUtilsTaskTreeView::waitTaskFinished(os);
1708
1709 // 2. Insert some gaps to the first column. Ensure, that every column has a gap
1710 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
1711 GTGlobals::sleep();
1712 for (int i = 0; i < 6; i++) {
1713 GTKeyboardDriver::keyClick(' ');
1714 GTGlobals::sleep(100);
1715 }
1716 // 3. Select Edit -> remove columns of gaps -> remove columns with number of gaps 1.
1717 GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
1718 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(19, 9));
1719 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1720 GTGlobals::sleep(200);
1721 QString initial = GTClipboard::text(os);
1722 // 4. Click OK
1723 GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os));
1724 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT"
1725 << "remove_columns_of_gaps"));
1726 GTMouseDriver::click(Qt::RightButton);
1727
1728 // Expected state: UGENE not crashes, deletion is not performed
1729 GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
1730 GTGlobals::sleep(500);
1731
1732 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(19, 9));
1733 GTKeyboardDriver::keyClick('c', Qt::ControlModifier);
1734 GTGlobals::sleep(200);
1735 QString final = GTClipboard::text(os);
1736
1737 CHECK_SET_ERR(initial == final, "msa area was changed");
1738 }
1739
GUI_TEST_CLASS_DEFINITION(test_0021)1740 GUI_TEST_CLASS_DEFINITION(test_0021) {
1741 // MSA editor zoom bug (UGENE-520)
1742 //
1743 // 1. open document samples/CLUSTALW/COI.aln
1744 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1745 GTUtilsTaskTreeView::waitTaskFinished(os);
1746
1747 // 2. zoom MSA to maximum
1748 for (int i = 0; i < 8; i++) {
1749 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom In"));
1750 }
1751
1752 // Expected state: top sequence not overlaps with ruler
1753 GTGlobals::sleep();
1754
1755 for (int i = 0; i < 8; i++) {
1756 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom Out"));
1757 }
1758 }
1759
GUI_TEST_CLASS_DEFINITION(test_0021_1)1760 GUI_TEST_CLASS_DEFINITION(test_0021_1) {
1761 // MSA editor zoom bug (UGENE-520)
1762 //
1763 // 1. open document samples/CLUSTALW/COI.aln
1764 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1765 GTUtilsTaskTreeView::waitTaskFinished(os);
1766
1767 // 2. zoom MSA to maximum
1768 for (int i = 0; i < 8; i++) {
1769 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom In"));
1770 }
1771
1772 // Expected state: top sequence not overlaps with ruler
1773 GTGlobals::sleep();
1774
1775 for (int i = 0; i < 8; i++) {
1776 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom Out"));
1777 }
1778 }
1779
GUI_TEST_CLASS_DEFINITION(test_0021_2)1780 GUI_TEST_CLASS_DEFINITION(test_0021_2) {
1781 // MSA editor zoom bug (UGENE-520)
1782 //
1783 // 1. open document samples/CLUSTALW/COI.aln
1784 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1785 GTUtilsTaskTreeView::waitTaskFinished(os);
1786
1787 // 2. zoom MSA to maximum
1788 for (int i = 0; i < 8; i++) {
1789 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom In"));
1790 }
1791
1792 // Expected state: top sequence not overlaps with ruler
1793 GTGlobals::sleep();
1794
1795 for (int i = 0; i < 8; i++) {
1796 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Zoom Out"));
1797 }
1798 }
1799
GUI_TEST_CLASS_DEFINITION(test_0022)1800 GUI_TEST_CLASS_DEFINITION(test_0022) {
1801 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
1802 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1803 GTUtilsTaskTreeView::waitTaskFinished(os);
1804 // 2. Select character â„–3 in "Phaneroptera_falcata"(G)
1805 GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 0));
1806 QLabel *posLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "Position"));
1807 CHECK_SET_ERR(posLabel, "Position label not found");
1808 CHECK_SET_ERR(posLabel->text() == "Pos 3 / 14", "Expected text: Pos 3/14. Found: " + posLabel->text());
1809 // Expected state: Statistics "Pos" in right bottom is "Pos 3/14"
1810
1811 // 3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
1812 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
1813 for (int i = 0; i < 3; i++) {
1814 GTKeyboardDriver::keyClick(Qt::Key_Space);
1815 GTGlobals::sleep(200);
1816 }
1817 // 4. Select char at 4 position in "Phaneroptera_falcata"(A)
1818 GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 0));
1819 CHECK_SET_ERR(posLabel->text() == "Pos 1 / 14", "Expected text: Pos 1/14. Found: " + posLabel->text());
1820 // Expected state: Gaps are inserted, statistics "Pos" in right bottom is "Pos 1/14"
1821 }
1822
GUI_TEST_CLASS_DEFINITION(test_0022_1)1823 GUI_TEST_CLASS_DEFINITION(test_0022_1) { // DIFFERENCE: Column label is tested
1824 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
1825 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1826 GTUtilsTaskTreeView::waitTaskFinished(os);
1827 // 2. Select character â„–3 in "Phaneroptera_falcata"(G)
1828 GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 0));
1829 QLabel *colLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "Column"));
1830 CHECK_SET_ERR(colLabel, "Column label not found");
1831 CHECK_SET_ERR(colLabel->text() == "Col 3 / 14", "Expected text: Col 3/14. Found: " + colLabel->text());
1832 // Expected state: Statistics "Pos" in right bottom is "Pos 3/14"
1833
1834 // 3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
1835 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
1836 for (int i = 0; i < 3; i++) {
1837 GTKeyboardDriver::keyClick(Qt::Key_Space);
1838 GTGlobals::sleep(200);
1839 }
1840 // 4. Select char at 4 position in "Phaneroptera_falcata"(A)
1841 GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 0));
1842 CHECK_SET_ERR(colLabel->text() == "Col 4 / 17", "Expected text: Col 4 / 17. Found: " + colLabel->text());
1843 // Expected state: Gaps are inserted, statistics "Pos" in right bottom is "Pos 1/14"
1844 }
1845
GUI_TEST_CLASS_DEFINITION(test_0022_2)1846 GUI_TEST_CLASS_DEFINITION(test_0022_2) { // DIFFERENCE: Line label is tested
1847 // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
1848 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
1849 GTUtilsTaskTreeView::waitTaskFinished(os);
1850
1851 // 2. Select the thirs character in "Phaneroptera_falcata"(G)
1852 GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 0));
1853
1854 // Expected state: Statistics "Seq" in right bottom is "Seq 1 / 10"
1855 QLabel *lineLabel = GTWidget::findExactWidget<QLabel *>(os, "Line");
1856 CHECK_SET_ERR(lineLabel, "Line label not found");
1857 CHECK_SET_ERR(lineLabel->text() == "Seq 1 / 10", "Expected text: Seq 1 / 10. Found: " + lineLabel->text());
1858
1859 // 3. Select and delete 5 lines
1860 GTUtilsMsaEditor::selectRows(os, 3, 7);
1861 GTKeyboardDriver::keyClick(Qt::Key_Delete);
1862
1863 // 4. Select char at 4 position in "Phaneroptera_falcata"(A)
1864 GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 0));
1865 // Expected state: Gaps are inserted, statistics "Seq" in right bottom is "Seq 1 / 5"
1866 CHECK_SET_ERR(lineLabel->text() == "Seq 1 / 5", "Expected text: Seq 1 / 5. Found: " + lineLabel->text());
1867 }
1868
GUI_TEST_CLASS_DEFINITION(test_0023)1869 GUI_TEST_CLASS_DEFINITION(test_0023) {
1870 // 1. Open file data/samples/CLUSTALW/COI.aln
1871 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1872 GTUtilsTaskTreeView::waitTaskFinished(os);
1873 GTGlobals::sleep(500);
1874 // 2. Do context menu->Add->sequence from file
1875 GTFileDialogUtils *ob = new GTFileDialogUtils(os, dataDir + "samples/Genbank/", "CVU55762.gb");
1876 GTUtilsDialog::waitForDialog(os, ob);
1877
1878 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_LOAD << "Sequence from file"));
1879 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
1880 // 3. Select data/samples/GENBANK/CVU55762_new.fa
1881 GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "CVU55762", "CVU55762"));
1882 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10, 18));
1883 GTMouseDriver::doubleClick();
1884 // Expected state: CVU55762 presents in list
1885 }
1886
GUI_TEST_CLASS_DEFINITION(test_0024)1887 GUI_TEST_CLASS_DEFINITION(test_0024) {
1888 // 1. open document samples/CLUSTALW/COI.aln
1889 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1890 GTUtilsTaskTreeView::waitTaskFinished(os);
1891 // 2. select first symbol of first sequence
1892 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
1893 GTMouseDriver::click();
1894 // 3. press toolbar button "zoom to selection"
1895 int initOffset = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
1896 // offsets are used to check zooming
1897 QAbstractButton *zoom_to_sel = GTAction::button(os, "Zoom To Selection");
1898 GTWidget::click(os, zoom_to_sel);
1899
1900 int finOffset = GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os);
1901 CHECK_SET_ERR(initOffset >= (finOffset * 2 - 8), "inital offset: " + QString().setNum(initOffset) + " final offset: " + QString().setNum(finOffset));
1902 // Expected state: MSA is zoomed
1903
1904 // 4. press toolbar button "Reset zoom"
1905 GTGlobals::sleep();
1906 QAbstractButton *reset_zoom = GTAction::button(os, "Reset Zoom");
1907 GTWidget::click(os, reset_zoom);
1908 GTGlobals::sleep(500);
1909 CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLastVisibleBase(os) == initOffset, "MSA is not zoomed back");
1910 // Expected state: MSA is zoomed back
1911 }
1912
GUI_TEST_CLASS_DEFINITION(test_0025)1913 GUI_TEST_CLASS_DEFINITION(test_0025) {
1914 // Note: the test depends on the fact that the first font in the Font Selection dialog is not the current font used by UGENE.
1915
1916 // Open document samples/CLUSTALW/COI.aln.
1917 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1918 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1919
1920 auto msaEditor = GTWidget::findExactWidget<MsaEditorWgt *>(os, "msa_editor_COI")->getEditor();
1921 QString initialFont = msaEditor->getFont().toString();
1922
1923 // Click "change font button" on the toolbar.
1924 GTUtilsDialog::waitForDialog(os, new FontDialogFiller(os));
1925 GTWidget::click(os, GTAction::button(os, "Change Font"));
1926
1927 // Check that the font was changed and is not equal to the initial.
1928 QString currentFont = msaEditor->getFont().toString();
1929 CHECK_SET_ERR(currentFont != initialFont, "Expected font to be changed, initial: " + initialFont + ", current: " + currentFont);
1930 }
1931
1932 // windows test
GUI_TEST_CLASS_DEFINITION(test_0025_1)1933 GUI_TEST_CLASS_DEFINITION(test_0025_1) {
1934 // 1. open document samples/CLUSTALW/COI.aln
1935 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1936 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1937
1938 // 2. press "change font button" on toolbar
1939 GTUtilsDialog::waitForDialog(os, new FontDialogFiller(os));
1940 GTWidget::click(os, GTAction::button(os, "Change Font"));
1941 GTGlobals::sleep(500);
1942
1943 QWidget *nameListWidget = GTWidget::findWidget(os, "msa_editor_COI");
1944 MsaEditorWgt *ui = qobject_cast<MsaEditorWgt *>(nameListWidget);
1945
1946 QFont f = ui->getEditor()->getFont();
1947 QString expectedFont = "Verdana,10,-1,5,50,0,0,0,0,0";
1948
1949 CHECK_SET_ERR(f.toString().startsWith(expectedFont), "Expected: " + expectedFont + ", found: " + f.toString());
1950 // Expected state: change font dialog appeared
1951
1952 // 3. choose some font, press OK
1953 // Expected state: font is changed
1954 }
1955
GUI_TEST_CLASS_DEFINITION(test_0026)1956 GUI_TEST_CLASS_DEFINITION(test_0026) {
1957 // Open document samples/CLUSTALW/COI.aln.
1958 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1959 GTUtilsTaskTreeView::waitTaskFinished(os);
1960 // Press "export as image" on toolbar.
1961 QString filePath = testDir + "_common_data/scenarios/sandbox/image.bmp";
1962 GTUtilsDialog::waitForDialog(os, new ExportImage(os, filePath));
1963 GTWidget::click(os, GTAction::button(os, "export_msa_as_image_action"));
1964 GTUtilsTaskTreeView::waitTaskFinished(os);
1965
1966 // Expected state: image is exported.
1967 bool isFileExist = GTFile::check(os, filePath);
1968 CHECK_SET_ERR(isFileExist, "Image file not found: " + filePath);
1969 }
1970
GUI_TEST_CLASS_DEFINITION(test_0026_1)1971 GUI_TEST_CLASS_DEFINITION(test_0026_1) { // DIFFERENCE: context menu is used
1972 // 1. open document samples/CLUSTALW/COI.aln
1973 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1974 GTUtilsTaskTreeView::waitTaskFinished(os);
1975 // 2. press "export as image" on toolbar
1976 QString filePath = testDir + "_common_data/scenarios/sandbox/image.bmp";
1977 GTUtilsDialog::waitForDialog(os, new ExportImage(os, filePath));
1978 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
1979 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
1980
1981 // Expected state: image is exported.
1982 bool isFileExist = GTFile::check(os, filePath);
1983 CHECK_SET_ERR(isFileExist, "Image file not found: " + filePath);
1984 }
1985
GUI_TEST_CLASS_DEFINITION(test_0026_2)1986 GUI_TEST_CLASS_DEFINITION(test_0026_2) {
1987 // 1. open document samples/CLUSTALW/COI.aln
1988 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
1989 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1990 GTUtils::checkExportServiceIsEnabled(os);
1991
1992 // 2. press "export as image" on toolbar
1993 GTUtilsDialog::waitForDialog(os, new ExportImage(os, testDir + "_common_data/scenarios/sandbox/bigImage.bmp", "JPG", 100));
1994 QAbstractButton *saveImage = GTAction::button(os, "export_msa_as_image_action");
1995 GTWidget::click(os, saveImage);
1996
1997 // Expected state: export dialog appeared
1998 GTUtilsDialog::waitForDialog(os, new ExportImage(os, testDir + "_common_data/scenarios/sandbox/smallImage.bmp", "JPG", 50));
1999 GTWidget::click(os, saveImage);
2000 GTUtilsTaskTreeView::waitTaskFinished(os);
2001
2002 // 3. fill dialog:
2003 // file name: test/_common_data/scenarios/sandbox/image.bmp
2004 // press OK
2005 qint64 bigSize = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/bigImage.jpg");
2006 qint64 smallSize = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/smallImage.jpg");
2007 CHECK_SET_ERR(bigSize > 4 * 1000 * 1000 && bigSize < 6 * 1000 * 1000, "Invalid big image size: " + QString::number(bigSize));
2008 CHECK_SET_ERR(smallSize > 800 * 1000 && smallSize < 1.5 * 1000 * 1000, "Invalid small image size: " + QString::number(smallSize));
2009 }
2010
GUI_TEST_CLASS_DEFINITION(test_0027)2011 GUI_TEST_CLASS_DEFINITION(test_0027) {
2012 // 1. open document samples/CLUSTALW/COI.aln
2013 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
2014 GTUtilsTaskTreeView::waitTaskFinished(os);
2015
2016 // 2. select element 4 in sequence 3
2017 GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 2));
2018
2019 // 3. Move selected left using mouse by 6
2020 GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(3, 2), QPoint(9, 2));
2021
2022 // Expected state: area is moved,position 4-9 filled with gaps
2023 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(8, 2));
2024 GTKeyboardUtils::copy();
2025 const QString clipboardText = GTClipboard::text(os);
2026 CHECK_SET_ERR(clipboardText == "------", "Expected: ------ Found: " + clipboardText);
2027 }
2028
GUI_TEST_CLASS_DEFINITION(test_0027_1)2029 GUI_TEST_CLASS_DEFINITION(test_0027_1) {
2030 // 1. open document samples/CLUSTALW/COI.aln
2031 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
2032 GTUtilsTaskTreeView::waitTaskFinished(os);
2033
2034 // 2. select element 4 in sequences 2 and 3
2035 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(3, 3));
2036
2037 // 3. Move selected left using mouse by 6
2038 GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(3, 2), QPoint(9, 2));
2039
2040 // Expected stste: area is moved,position 4-9 filled with gaps
2041 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(8, 3));
2042 GTKeyboardUtils::copy();
2043 const QString clipboardText = GTClipboard::text(os);
2044 CHECK_SET_ERR(clipboardText == "------\n------", "Expected: ------\n------ Found: " + clipboardText);
2045 }
2046
GUI_TEST_CLASS_DEFINITION(test_0027_2)2047 GUI_TEST_CLASS_DEFINITION(test_0027_2) {
2048 // Drag & drop of selection should be disabled in multi-selection mode.
2049 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
2050 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
2051
2052 // Select region 1.
2053 GTUtilsMSAEditorSequenceArea::selectArea(os, {3, 3}, {10, 5});
2054
2055 // Select region 2.
2056 GTKeyboardDriver::keyPress(Qt::Key_Control);
2057 GTUtilsMsaEditor::clickSequence(os, 7);
2058 GTKeyboardDriver::keyRelease(Qt::Key_Control);
2059
2060 // Expected state: 2 rows are selected.
2061 GTUtilsMsaEditor::checkSelection(os, {{3, 3, 8, 3}, {3, 7, 8, 1}});
2062
2063 // Check that selection can't be moved:
2064 // try moving the selected region && check that instead of moving
2065 // a new selection was created from the drag range.
2066 GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, {4, 4}, {10, 8});
2067 GTUtilsMsaEditor::checkSelection(os, {{4, 4, 7, 5}});
2068 }
2069
GUI_TEST_CLASS_DEFINITION(test_0028_linux)2070 GUI_TEST_CLASS_DEFINITION(test_0028_linux) {
2071 // 1. Open document "samples/CLUSTALW/COI.aln"
2072 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2073 GTUtilsTaskTreeView::waitTaskFinished(os);
2074
2075 // 2. Context menu -- "Export as image"
2076 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("SVG")));
2077 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2078 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
2079
2080 // 3. Fill dialog: svg format, output file
2081 qint64 fileSize = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/test.svg");
2082 CHECK_SET_ERR(fileSize > 6500000 && fileSize < 7500000, "Current size: " + QString::number(fileSize));
2083 // Expected state: SVG is exported
2084 }
2085
GUI_TEST_CLASS_DEFINITION(test_0028_windows)2086 GUI_TEST_CLASS_DEFINITION(test_0028_windows) {
2087 // 1. Open document samples/CLUSTALW/COI.aln
2088 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2089 GTUtilsTaskTreeView::waitTaskFinished(os);
2090
2091 // 2. Context menu -- "Export as image"
2092 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("SVG")));
2093 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2094 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2095
2096 // 3. Fill dialog: svg format, output file
2097 qint64 fileSize = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/test.svg");
2098 CHECK_SET_ERR(fileSize > 6500000 && fileSize < 9800000, "Current size: " + QString().setNum(fileSize));
2099 // Expected state: SVG is exported
2100 }
2101
GUI_TEST_CLASS_DEFINITION(test_0029)2102 GUI_TEST_CLASS_DEFINITION(test_0029) {
2103 // 1. open document samples/CLUSTALW/COI.aln
2104 GTUtilsProject::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
2105 // 2. Select first sequence
2106 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
2107 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save sequence", GTGlobals::UseKey));
2108 Runnable *r = new ExportSelectedSequenceFromAlignment(os, testDir + "_common_data/scenarios/sandbox/", ExportSelectedSequenceFromAlignment::FASTA, true);
2109 GTUtilsDialog::waitForDialog(os, r);
2110
2111 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2112 GTGlobals::sleep();
2113 GTUtilsTaskTreeView::waitTaskFinished(os);
2114
2115 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Phaneroptera_falcata.fa"));
2116 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Phaneroptera_falcata"));
2117 GTGlobals::sleep();
2118
2119 // Click "Hide zoom view"
2120 QWidget *toolbar = GTWidget::findWidget(os, "views_tool_bar_Phaneroptera_falcata");
2121 CHECK_SET_ERR(toolbar != nullptr, "Cannot find views_tool_bar_Phaneroptera_falcata");
2122 GTWidget::click(os, GTWidget::findWidget(os, "show_hide_zoom_view", toolbar));
2123 GTGlobals::sleep();
2124
2125 GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 42, 44));
2126 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select"
2127 << "Sequence region"));
2128 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
2129 GTGlobals::sleep();
2130
2131 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_COPY << "Copy sequence"));
2132 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
2133 GTGlobals::sleep();
2134
2135 QString clipboardText = GTClipboard::text(os);
2136 CHECK_SET_ERR(clipboardText == "---", "Expected: TAGTTTATTAA, Found: " + clipboardText);
2137 // 3. use MSA area context menu->export->save sequence
2138 // Exptcted state: Export sequence dialog appeared
2139
2140 // 4. fill dialog:
2141 // Export to file: test/_common_data/scenarios/sandbox/sequence.fa(use other extensions is branches)
2142 // Add to project: checked
2143 // Gap characters: keep
2144 // Expectes state: sequence added to project
2145 }
2146
GUI_TEST_CLASS_DEFINITION(test_0029_1)2147 GUI_TEST_CLASS_DEFINITION(test_0029_1) { // DIFFERENCE:gaps are trimmed, FASTQ format is used
2148 // 1. open document samples/CLUSTALW/COI.aln
2149 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2150 GTUtilsTaskTreeView::waitTaskFinished(os);
2151 // 2. Select first sequence
2152 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 2));
2153 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save sequence", GTGlobals::UseKey));
2154 Runnable *r = new ExportSelectedSequenceFromAlignment(os, testDir + "_common_data/scenarios/sandbox/", ExportSelectedSequenceFromAlignment::FASTQ, false);
2155 GTUtilsDialog::waitForDialog(os, r);
2156
2157 GTMouseDriver::click(Qt::RightButton);
2158
2159 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Bicolorana_bicolor_EF540830.fastq"));
2160 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Bicolorana_bicolor_EF540830"));
2161 GTMouseDriver::doubleClick();
2162 GTGlobals::sleep();
2163
2164 GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os));
2165 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select"
2166 << "Sequence region",
2167 GTGlobals::UseKey));
2168 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
2169
2170 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_COPY << "Copy sequence", GTGlobals::UseKey));
2171 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
2172
2173 QString clipboardText = GTClipboard::text(os);
2174 CHECK_SET_ERR(clipboardText == "TAGTTTATTAA", "Expected: TAGTTTATTAA, Found: " + clipboardText);
2175 // 3. use MSA area context menu->export->save sequence
2176 // Exptcted state: Export sequence dialog appeared
2177
2178 // 4. fill dialog:
2179 // Export to file: test/_common_data/scenarios/sandbox/sequence.fa(use other extensions is branches)
2180 // Add to project: checked
2181 // Gap characters: keep
2182 // Expectes state: sequence added to project
2183 }
2184
GUI_TEST_CLASS_DEFINITION(test_0029_2)2185 GUI_TEST_CLASS_DEFINITION(test_0029_2) {
2186 // 1. open document samples/CLUSTALW/COI.aln
2187 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2188 GTUtilsTaskTreeView::waitTaskFinished(os);
2189 // 2. Select first sequence
2190 GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 2));
2191 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save sequence", GTGlobals::UseKey));
2192 Runnable *r = new ExportSelectedSequenceFromAlignment(os, testDir + "_common_data/scenarios/sandbox/", ExportSelectedSequenceFromAlignment::Genbank, true, false);
2193 GTUtilsDialog::waitForDialog(os, r);
2194
2195 GTMouseDriver::click(Qt::RightButton);
2196
2197 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/", "Bicolorana_bicolor_EF540830.gb");
2198 GTUtilsTaskTreeView::waitTaskFinished(os);
2199 // 3. use MSA area context menu->export->save sequence
2200 // Exptcted state: Export sequence dialog appeared
2201
2202 // 4. fill dialog:
2203 // Export to file: test/_common_data/scenarios/sandbox/sequence.fa(use other extensions is branches)
2204 // Add to project: checked
2205 // Gap characters: keep
2206 // Expectes state: sequence added to project
2207 }
2208
GUI_TEST_CLASS_DEFINITION(test_0031)2209 GUI_TEST_CLASS_DEFINITION(test_0031) { // TODO: check statistic result
2210 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2211 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2212 GTUtilsTaskTreeView::waitTaskFinished(os);
2213 // 2. Do MSA area context menu->Statistics->generate grid profile
2214 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile"));
2215 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os));
2216 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2217 GTUtilsTaskTreeView::waitTaskFinished(os);
2218 // Exptcted state: generate alignment profile dialog appeared
2219
2220 // 3. Fill dialog: Profile mode:Counts. Click "Generate"
2221 QWidget *profile = GTWidget::findWidget(os, "Alignment profile for ma2_gapped");
2222 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2223 // Expected state: Alignment profile generated
2224 }
2225
GUI_TEST_CLASS_DEFINITION(test_0031_1)2226 GUI_TEST_CLASS_DEFINITION(test_0031_1) { // DIFFERENCE: Percentage is used
2227 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2228 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2229 GTUtilsTaskTreeView::waitTaskFinished(os);
2230 // 2. Do MSA area context menu->Statistics->generate grid profile
2231 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile"));
2232 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, false));
2233 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2234 GTGlobals::sleep(1500);
2235 // Exptcted state: generate alignment profile dialog appeared
2236
2237 // 3. Fill dialog: Profile mode:Counts. Click "Generate"
2238 QWidget *profile = GTWidget::findWidget(os, "Alignment profile for ma2_gapped");
2239 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2240 // Expected state: Alignment profile generated
2241 }
2242
GUI_TEST_CLASS_DEFINITION(test_0031_2)2243 GUI_TEST_CLASS_DEFINITION(test_0031_2) { // TODO: check statistic result
2244 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2245 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2246 GTUtilsTaskTreeView::waitTaskFinished(os);
2247 // 2. Do MSA area context menu->Statistics->generate grid profile
2248 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
2249 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, true, false, false));
2250 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2251 GTGlobals::sleep(1500);
2252 // Exptcted state: generate alignment profile dialog appeared
2253
2254 // 3. Fill dialog: Profile mode:Counts. Click "Generate"
2255 QWidget *profile = GTWidget::findWidget(os, "Alignment profile for ma2_gapped");
2256 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2257 // Expected state: Alignment profile generated
2258 }
2259
GUI_TEST_CLASS_DEFINITION(test_0031_3)2260 GUI_TEST_CLASS_DEFINITION(test_0031_3) { // TODO: check statistic result
2261 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2262 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2263 GTUtilsTaskTreeView::waitTaskFinished(os);
2264 // 2. Do MSA area context menu->Statistics->generate grid profile
2265 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
2266 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, false, true, false));
2267 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2268 GTGlobals::sleep(1500);
2269 // Exptcted state: generate alignment profile dialog appeared
2270
2271 // 3. Fill dialog: Profile mode:Counts. Click "Generate"
2272 QWidget *profile = GTWidget::findWidget(os, "Alignment profile for ma2_gapped");
2273 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2274 // Expected state: Alignment profile generated
2275 }
2276
GUI_TEST_CLASS_DEFINITION(test_0031_4)2277 GUI_TEST_CLASS_DEFINITION(test_0031_4) { // TODO: check statistic result
2278 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2279 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2280 GTUtilsTaskTreeView::waitTaskFinished(os);
2281 // 2. Do MSA area context menu->Statistics->generate grid profile
2282 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
2283 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, false, false, true));
2284 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2285 GTGlobals::sleep(1500);
2286 // Exptcted state: generate alignment profile dialog appeared
2287
2288 // 3. Fill dialog: Profile mode:Counts. Click "Generate"
2289 QWidget *profile = GTWidget::findWidget(os, "Alignment profile for ma2_gapped");
2290 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2291 // Expected state: Alignment profile generated
2292 }
2293
GUI_TEST_CLASS_DEFINITION(test_0032)2294 GUI_TEST_CLASS_DEFINITION(test_0032) {
2295 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2296 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2297 GTUtilsTaskTreeView::waitTaskFinished(os);
2298 // 2. Do MSA area context menu->Statistics->generate grid profile
2299 // Exptcted state: generata alignment profile dialog appeared
2300 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
2301 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, true, GenerateAlignmentProfileDialogFiller::HTML, testDir + "_common_data/scenarios/sandbox/stat.html"));
2302 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2303 GTGlobals::sleep(500);
2304
2305 qint64 size = 0;
2306 size = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/stat.html");
2307 CHECK_SET_ERR(size > 0, "file not found");
2308 // 3. Fill dialog: Profile mode:Counts
2309 // Save profile to file: checked
2310 // file path: test/_common_data/scenarios/sandbox/stat.html(stat.csv)
2311 // Click "Generate"
2312 // Expected state: Alignment profile file created
2313 }
2314
GUI_TEST_CLASS_DEFINITION(test_0032_1)2315 GUI_TEST_CLASS_DEFINITION(test_0032_1) { // DIFFERENCE: csv format is used
2316 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2317 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2318 GTUtilsTaskTreeView::waitTaskFinished(os);
2319 // 2. Do MSA area context menu->Statistics->generate grid profile
2320 // Exptcted state: generata alignment profile dialog appeared
2321 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
2322 GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, true, GenerateAlignmentProfileDialogFiller::CSV, testDir + "_common_data/scenarios/sandbox/stat.html"));
2323 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2324 GTGlobals::sleep(500);
2325
2326 qint64 size = 0;
2327 size = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/stat.csv");
2328 CHECK_SET_ERR(size > 0, "file not found");
2329 // 3. Fill dialog:Profile mode:Counts
2330 // Save profile to file: checked
2331 // file path: test/_common_data/scenarios/sandbox/stat.html(stat.csv)
2332 // Click "Generate"
2333 // Expected state: Alignment profile file created
2334 }
2335
GUI_TEST_CLASS_DEFINITION(test_0033)2336 GUI_TEST_CLASS_DEFINITION(test_0033) {
2337 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2338 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2339 GTUtilsTaskTreeView::waitTaskFinished(os);
2340 // 2. Do MSA area context menu->Statistics->generate distance matrix
2341 GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, true, true, true));
2342 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2343 GTUtilsDialog::waitForDialog(os, pop);
2344 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2345 GTGlobals::sleep(500);
2346 // Exptcted state: generata distance matrix dialog appeared
2347
2348 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity(Simple similiraty)
2349 // Profile mode: Counts
2350 // Exclude gakls: checked
2351 // Click "Generate"
2352 QWidget *profile = GTWidget::findWidget(os, "Distance matrix for ma2_gapped");
2353 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2354 // Expected state: Alignment profile file created
2355 }
2356
GUI_TEST_CLASS_DEFINITION(test_0033_1)2357 GUI_TEST_CLASS_DEFINITION(test_0033_1) {
2358 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2359 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2360 GTUtilsTaskTreeView::waitTaskFinished(os);
2361 // 2. Do MSA area context menu->Statistics->generate distance matrix
2362 GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, false, true, true));
2363 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2364 GTUtilsDialog::waitForDialog(os, pop);
2365 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2366 GTGlobals::sleep(500);
2367 // Exptcted state: generata distance matrix dialog appeared
2368
2369 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity(Simple similiraty)
2370 // Profile mode: Counts
2371 // Exclude gakls: checked
2372 // Click "Generate"
2373 QWidget *profile = GTWidget::findWidget(os, "Distance matrix for ma2_gapped");
2374 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2375 // Expected state: Alignment profile file created
2376 }
2377
GUI_TEST_CLASS_DEFINITION(test_0034)2378 GUI_TEST_CLASS_DEFINITION(test_0034) {
2379 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2380 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2381 GTUtilsTaskTreeView::waitTaskFinished(os);
2382 // 2. Do MSA area context menu->Statistics->generate distance matrix
2383 GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, true, false, true));
2384 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2385 GTUtilsDialog::waitForDialog(os, pop);
2386 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2387 GTGlobals::sleep(500);
2388 // Exptcted state: generata distance matrix dialog appeared
2389
2390 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity
2391 // Profile mode: Counts(Percents)
2392 // Exclude gakls: checked(unchecked)
2393 // Click "Generate"
2394 QWidget *profile = GTWidget::findWidget(os, "Distance matrix for ma2_gapped");
2395 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2396 // Expected state: Alignment profile file created
2397 }
2398
GUI_TEST_CLASS_DEFINITION(test_0034_1)2399 GUI_TEST_CLASS_DEFINITION(test_0034_1) {
2400 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2401 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2402 GTUtilsTaskTreeView::waitTaskFinished(os);
2403 // 2. Do MSA area context menu->Statistics->generate distance matrix
2404 GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, true, true, false));
2405 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2406 GTUtilsDialog::waitForDialog(os, pop);
2407 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2408 GTGlobals::sleep(500);
2409 // Exptcted state: generata distance matrix dialog appeared
2410
2411 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity
2412 // Profile mode: Counts(Percents)
2413 // Exclude gakls: checked(unchecked)
2414 // Click "Generate"
2415 QWidget *profile = GTWidget::findWidget(os, "Distance matrix for ma2_gapped");
2416 CHECK_SET_ERR(profile, "Alignment profile widget not found");
2417 // Expected state: Alignment profile file created
2418 }
2419
GUI_TEST_CLASS_DEFINITION(test_0035)2420 GUI_TEST_CLASS_DEFINITION(test_0035) {
2421 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2422 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2423 GTUtilsTaskTreeView::waitTaskFinished(os);
2424 // 2. Do MSA area context menu->Statistics->generate distance matrix
2425 Runnable *dis = new DistanceMatrixDialogFiller(os, DistanceMatrixDialogFiller::HTML, testDir + "_common_data/scenarios/sandbox/matrix.html");
2426 GTUtilsDialog::waitForDialog(os, dis);
2427 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2428 GTUtilsDialog::waitForDialog(os, pop);
2429 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2430 GTGlobals::sleep(500);
2431 // Exptcted state: generata distance matrix dialog appeared
2432
2433 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity
2434 // Profile mode: Counts
2435 // Exclude gakls: checked
2436 // Save profile to file: checked
2437 // File path: test/_common_data/scenarios/sandbox/matrix.html(matrix.csv)
2438 // Click "Generate"
2439 qint64 size = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/matrix.html");
2440 CHECK_SET_ERR(size != 0, "file not created");
2441 // Expected state: Alignment profile file created
2442 }
2443
GUI_TEST_CLASS_DEFINITION(test_0035_1)2444 GUI_TEST_CLASS_DEFINITION(test_0035_1) {
2445 // 1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
2446 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
2447 GTUtilsTaskTreeView::waitTaskFinished(os);
2448 // 2. Do MSA area context menu->Statistics->generate distance matrix
2449 Runnable *dis = new DistanceMatrixDialogFiller(os, DistanceMatrixDialogFiller::CSV, testDir + "_common_data/scenarios/sandbox/matrix.html");
2450 GTUtilsDialog::waitForDialog(os, dis);
2451 Runnable *pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
2452 GTUtilsDialog::waitForDialog(os, pop);
2453 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
2454 GTGlobals::sleep(500);
2455 // Exptcted state: generata distance matrix dialog appeared
2456
2457 // 3. Fill dialog: Distance Algorithm: Hamming dissimilarity
2458 // Profile mode: Counts
2459 // Exclude gakls: checked
2460 // Save profile to file: checked
2461 // File path: test/_common_data/scenarios/sandbox/matrix.html(matrix.csv)
2462 // Click "Generate"
2463 qint64 size = GTFile::getSize(os, testDir + "_common_data/scenarios/sandbox/matrix.csv");
2464 CHECK_SET_ERR(size != 0, "file not created");
2465 // Expected state: Alignment profile file created
2466 }
2467
GUI_TEST_CLASS_DEFINITION(test_0036)2468 GUI_TEST_CLASS_DEFINITION(test_0036) {
2469 // 1. open document samples/CLUSTALW/COI.aln
2470 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2471 GTUtilsTaskTreeView::waitTaskFinished(os);
2472 GTGlobals::sleep(500);
2473 // 2. Press "build tree" button on toolbar
2474 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0));
2475 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2476 GTWidget::click(os, tree);
2477 GTUtilsTaskTreeView::waitTaskFinished(os);
2478 // Expected state: build tree dialog appeared
2479
2480 // 3. Fill dialog:
2481 // Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
2482 // Press "Build"
2483 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2484 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2485 // Expected state: tree appeared
2486 }
2487
GUI_TEST_CLASS_DEFINITION(test_0036_1)2488 GUI_TEST_CLASS_DEFINITION(test_0036_1) {
2489 // 1. open document samples/CLUSTALW/COI.aln
2490 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2491 GTUtilsTaskTreeView::waitTaskFinished(os);
2492
2493 // 2. Press "build tree" button on toolbar
2494 // Expected state: build tree dialog appeared
2495 // 3. Fill dialog:
2496 // Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
2497 // Press "Build"
2498 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 1));
2499 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2500 GTUtilsTaskTreeView::waitTaskFinished(os);
2501
2502 // Expected state: tree appeared
2503 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2504 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2505 }
2506
GUI_TEST_CLASS_DEFINITION(test_0036_2)2507 GUI_TEST_CLASS_DEFINITION(test_0036_2) {
2508 // 1. open document samples/CLUSTALW/COI.aln
2509 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2510 GTUtilsTaskTreeView::waitTaskFinished(os);
2511
2512 // 2. Press "build tree" button on toolbar
2513 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 2));
2514 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2515 GTUtilsTaskTreeView::waitTaskFinished(os);
2516 // Expected state: build tree dialog appeared
2517
2518 // 3. Fill dialog:
2519 // Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
2520 // Press "Build"
2521 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2522 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2523 // Expected state: tree appeared
2524 }
2525
GUI_TEST_CLASS_DEFINITION(test_0036_3)2526 GUI_TEST_CLASS_DEFINITION(test_0036_3) {
2527 // 1. open document samples/CLUSTALW/COI.aln
2528 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2529 GTUtilsTaskTreeView::waitTaskFinished(os);
2530
2531 // 2. Press "build tree" button on toolbar
2532 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 3));
2533 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2534 GTUtilsTaskTreeView::waitTaskFinished(os);
2535 // Expected state: build tree dialog appeared
2536
2537 // 3. Fill dialog:
2538 // Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
2539 // Press "Build"
2540 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2541 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2542 // Expected state: tree appeared
2543 }
2544
GUI_TEST_CLASS_DEFINITION(test_0037)2545 GUI_TEST_CLASS_DEFINITION(test_0037) {
2546 // 1. open document samples/CLUSTALW/COI.aln
2547 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2548 GTUtilsTaskTreeView::waitTaskFinished(os);
2549
2550 // 2. Press "build tree" button on toolbar
2551 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 0.5));
2552 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2553 GTUtilsTaskTreeView::waitTaskFinished(os);
2554 // Expected state: build tree dialog appeared
2555
2556 // 3. Fill dialog:
2557 // Distanse matrix model: F84
2558 // Gamma distributed rates across sites: checked
2559 // Coefficient of variation: 0.50(50.00/99.00)
2560 // Press "Build"
2561 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2562 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2563 // Expected state: tree appeared
2564 }
2565
GUI_TEST_CLASS_DEFINITION(test_0037_1)2566 GUI_TEST_CLASS_DEFINITION(test_0037_1) {
2567 // 1. open document samples/CLUSTALW/COI.aln
2568 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2569 GTUtilsTaskTreeView::waitTaskFinished(os);
2570
2571 // 2. Press "build tree" button on toolbar
2572 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 50));
2573 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2574 GTUtilsTaskTreeView::waitTaskFinished(os);
2575 // Expected state: build tree dialog appeared
2576
2577 // 3. Fill dialog:
2578 // Distanse matrix model: F84
2579 // Gamma distributed rates across sites: checked
2580 // Coefficient of variation: 0.50(50.00/99.00)
2581 // Press "Build"
2582 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2583 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2584 // Expected state: tree appeared
2585 }
2586
GUI_TEST_CLASS_DEFINITION(test_0037_2)2587 GUI_TEST_CLASS_DEFINITION(test_0037_2) {
2588 // 1. open document samples/CLUSTALW/COI.aln
2589 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2590 GTUtilsTaskTreeView::waitTaskFinished(os);
2591
2592 // 2. Press "build tree" button on toolbar
2593 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 99));
2594 GTWidget::click(os, GTAction::button(os, "Build Tree"));
2595 GTUtilsTaskTreeView::waitTaskFinished(os);
2596 // Expected state: build tree dialog appeared
2597
2598 // 3. Fill dialog:
2599 // Distanse matrix model: F84
2600 // Gamma distributed rates across sites: checked
2601 // Coefficient of variation: 0.50(50.00/99.00)
2602 // Press "Build"
2603 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2604 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2605 // Expected state: tree appeared
2606 }
2607
GUI_TEST_CLASS_DEFINITION(test_0038)2608 GUI_TEST_CLASS_DEFINITION(test_0038) {
2609 // 1. open document samples/CLUSTALW/COI.aln
2610 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2611 GTUtilsTaskTreeView::waitTaskFinished(os);
2612 // 2. Press "build tree" button on toolbar
2613 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, 100, testDir + "_common_data/scenarios/sandbox/COI.nwk", 5, BuildTreeDialogFiller::MAJORITYEXT));
2614
2615 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2616 GTWidget::click(os, tree);
2617 GTUtilsTaskTreeView::waitTaskFinished(os); // some time is needed to build tree
2618 // Expected state: build tree dialog appeared
2619
2620 // 3. Fill dialog:
2621 // Distanse matrix model: F84
2622 // Gamma distributed rates across sites: unchecked
2623 // Bootatraping and consensus tree: checked
2624 // Number of replications: 100
2625 // Seed: 5
2626 // Consensus type: Majority Rule extended(Strict/Majority Rule/M1)
2627 // Press "Build"
2628 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2629 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2630 // Expected state: tree appeared
2631 }
2632
GUI_TEST_CLASS_DEFINITION(test_0038_1)2633 GUI_TEST_CLASS_DEFINITION(test_0038_1) {
2634 // 1. open document samples/CLUSTALW/COI.aln
2635 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2636 GTUtilsTaskTreeView::waitTaskFinished(os);
2637 // 2. Press "build tree" button on toolbar
2638 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, 100, testDir + "_common_data/scenarios/sandbox/COI.nwk", 5, BuildTreeDialogFiller::STRICTCONSENSUS));
2639
2640 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2641 GTWidget::click(os, tree);
2642 GTUtilsTaskTreeView::waitTaskFinished(os); // some time is needed to build tree
2643 // Expected state: build tree dialog appeared
2644
2645 // 3. Fill dialog:
2646 // Distanse matrix model: F84
2647 // Gamma distributed rates across sites: unchecked
2648 // Bootatraping and consensus tree: checked
2649 // Number of replications: 100
2650 // Seed: 5
2651 // Consensus type: Majority Rule extended(Strict/Majority Rule/M1)
2652 // Press "Build"
2653 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2654 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2655 // Expected state: tree appeared
2656 }
2657
GUI_TEST_CLASS_DEFINITION(test_0038_2)2658 GUI_TEST_CLASS_DEFINITION(test_0038_2) {
2659 // 1. open document samples/CLUSTALW/COI.aln
2660 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2661 GTUtilsTaskTreeView::waitTaskFinished(os);
2662 // 2. Press "build tree" button on toolbar
2663 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, 100, testDir + "_common_data/scenarios/sandbox/COI.nwk", 5, BuildTreeDialogFiller::MAJORITY));
2664
2665 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2666 GTWidget::click(os, tree);
2667 // Expected state: build tree dialog appeared
2668
2669 // 3. Fill dialog:
2670 // Distanse matrix model: F84
2671 // Gamma distributed rates across sites: unchecked
2672 // Bootatraping and consensus tree: checked
2673 // Number of replications: 100
2674 // Seed: 5
2675 // Consensus type: Majority Rule extended(Strict/Majority Rule/M1)
2676 // Press "Build"
2677
2678 GTUtilsTaskTreeView::waitTaskFinished(os);
2679
2680 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2681 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2682 // Expected state: tree appeared
2683 }
2684
GUI_TEST_CLASS_DEFINITION(test_0038_3)2685 GUI_TEST_CLASS_DEFINITION(test_0038_3) {
2686 // 1. open document samples/CLUSTALW/COI.aln
2687 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2688 GTUtilsTaskTreeView::waitTaskFinished(os);
2689 // 2. Press "build tree" button on toolbar
2690 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, 100, testDir + "_common_data/scenarios/sandbox/COI.nwk", 5, BuildTreeDialogFiller::M1));
2691 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2692 GTWidget::click(os, tree);
2693 // Expected state: build tree dialog appeared
2694
2695 // 3. Fill dialog:
2696 // Distanse matrix model: F84
2697 // Gamma distributed rates across sites: unchecked
2698 // Bootatraping and consensus tree: checked
2699 // Number of replications: 100
2700 // Seed: 5
2701 // Consensus type: Majority Rule extended(Strict/Majority Rule/M1)
2702 // Press "Build"
2703 GTUtilsTaskTreeView::waitTaskFinished(os);
2704
2705 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2706 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2707 // Expected state: tree appeared
2708 }
2709
GUI_TEST_CLASS_DEFINITION(test_0038_4)2710 GUI_TEST_CLASS_DEFINITION(test_0038_4) {
2711 // 1. open document samples/CLUSTALW/COI.aln
2712 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2713 GTUtilsTaskTreeView::waitTaskFinished(os);
2714 // 2. Press "build tree" button on toolbar
2715 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, 100, testDir + "_common_data/scenarios/sandbox/COI.nwk", 5, BuildTreeDialogFiller::M1, 1));
2716 QAbstractButton *tree = GTAction::button(os, "Build Tree");
2717 GTWidget::click(os, tree);
2718 // Expected state: build tree dialog appeared
2719
2720 // 3. Fill dialog:
2721 // Distanse matrix model: F84
2722 // Gamma distributed rates across sites: unchecked
2723 // Bootatraping and consensus tree: checked
2724 // Number of replications: 100
2725 // Seed: 5
2726 // Consensus type: Majority Rule extended(Strict/Majority Rule/M1)
2727 // Press "Build"
2728
2729 GTUtilsTaskTreeView::waitTaskFinished(os);
2730
2731 QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
2732 CHECK_SET_ERR(treeView != nullptr, "TreeView not found")
2733 // Expected state: tree appeared
2734 }
2735
test_0039_function(HI::GUITestOpStatus & os,int comboNum,const QString & extension)2736 void test_0039_function(HI::GUITestOpStatus &os, int comboNum, const QString &extension) {
2737 // 1. open document samples/CLUSTALW/COI.aln
2738 GTFileDialog::openFile(os, UGUITest::dataDir + "samples/CLUSTALW/", "COI.aln");
2739 GTUtilsTaskTreeView::waitTaskFinished(os);
2740
2741 // 2. Use project tree context menu->Export/Import->Export Nucleic Alignment to Amino Translation
2742 // Expected state: Export Nucleic Alignment to Amino Translation dialog appeared
2743 // 3.Fill dialog:
2744 // File name: test/_common_data/scenarios/sandbox/transl.aln
2745 // File format: CLUSTALW(use other formats too, check extension change)
2746 // Amino translation: Standard genetic code
2747 // Add document to project: checked
2748 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
2749 << "action_project__export_to_amino_action"));
2750 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, comboNum, UGUITest::testDir + "_common_data/scenarios/sandbox/COI_transl.aln"));
2751 GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
2752 GTUtilsTaskTreeView::waitTaskFinished(os);
2753
2754 // Expected state: transl.aln appeared in project
2755 GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI_transl." + extension));
2756 }
2757
GUI_TEST_CLASS_DEFINITION(test_0039)2758 GUI_TEST_CLASS_DEFINITION(test_0039) {
2759 // QMap<int,QString> extMap;
2760 // extMap[0] = "aln";
2761 // extMap[1] = "fa";
2762 // extMap[2] = "msf";
2763 // extMap[3] = "meg";
2764 // extMap[4] = "nex";
2765 // extMap[5] = "phy";
2766 // extMap[6] = "phy";
2767 // extMap[7] = "sto";
2768 test_0039_function(os, 0, "aln");
2769 }
2770
GUI_TEST_CLASS_DEFINITION(test_0039_1)2771 GUI_TEST_CLASS_DEFINITION(test_0039_1) {
2772 test_0039_function(os, 1, "fa");
2773 }
2774
GUI_TEST_CLASS_DEFINITION(test_0039_2)2775 GUI_TEST_CLASS_DEFINITION(test_0039_2) {
2776 test_0039_function(os, 2, "meg");
2777 }
2778
GUI_TEST_CLASS_DEFINITION(test_0039_3)2779 GUI_TEST_CLASS_DEFINITION(test_0039_3) {
2780 test_0039_function(os, 3, "msf");
2781 }
2782
GUI_TEST_CLASS_DEFINITION(test_0039_4)2783 GUI_TEST_CLASS_DEFINITION(test_0039_4) {
2784 test_0039_function(os, 4, "nex");
2785 }
2786
GUI_TEST_CLASS_DEFINITION(test_0039_5)2787 GUI_TEST_CLASS_DEFINITION(test_0039_5) {
2788 test_0039_function(os, 5, "phy");
2789 }
2790
GUI_TEST_CLASS_DEFINITION(test_0039_6)2791 GUI_TEST_CLASS_DEFINITION(test_0039_6) {
2792 test_0039_function(os, 6, "phy");
2793 }
2794
GUI_TEST_CLASS_DEFINITION(test_0039_7)2795 GUI_TEST_CLASS_DEFINITION(test_0039_7) {
2796 test_0039_function(os, 7, "sto");
2797 }
2798
GUI_TEST_CLASS_DEFINITION(test_0040)2799 GUI_TEST_CLASS_DEFINITION(test_0040) { // UGENE crashes when opening several files
2800 QFile human_T1(dataDir + "/samples/FASTA/human_T1.fa");
2801 human_T1.copy(dataDir + "/samples/CLUSTALW/human_T1.fa");
2802 GTFileDialog::openFileList(os, dataDir + "samples/CLUSTALW/", QStringList() << "COI.aln"
2803 << "human_T1.fa");
2804
2805 // GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os,QMessageBox::No));
2806 GTUtilsProjectTreeView::findIndex(os, "human_T1.fa"); // checks inside
2807 GTUtilsProjectTreeView::findIndex(os, "COI.aln");
2808
2809 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
2810 GTGlobals::sleep(500);
2811 QFile(dataDir + "/samples/CLUSTALW/human_T1.fa").remove();
2812 GTGlobals::sleep(5000);
2813 }
2814
GUI_TEST_CLASS_DEFINITION(test_0041)2815 GUI_TEST_CLASS_DEFINITION(test_0041) {
2816 // Shifting region in the Alignment Editor (UGENE-2127)
2817 //
2818 // 1. Open file data/samples/CLUSTALW/COI.aln
2819 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
2820 GTUtilsTaskTreeView::waitTaskFinished(os);
2821 int oldLength = GTUtilsMSAEditorSequenceArea::getLength(os);
2822 // 2. Select the first column.
2823 GTUtilsMSAEditorSequenceArea::selectColumnInConsensus(os, 0);
2824 // Expected state: column became selected
2825 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 0, 1, 18));
2826
2827 // 3. Drag the selection with mouse to 5 bases to the right.
2828 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
2829 GTMouseDriver::press();
2830 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5, 0));
2831 GTMouseDriver::release();
2832 GTThread::waitForMainThread();
2833 // Expected state: alignment moved to 5 bases to the right.
2834
2835 // 4. Drag the selection with mouse to one base to the left.
2836 GTMouseDriver::press();
2837 GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(4, 0));
2838 GTMouseDriver::release();
2839 GTThread::waitForMainThread();
2840 // Expected state: alignment moved to one bases to the left.
2841
2842 // Check results
2843 int newLength = GTUtilsMSAEditorSequenceArea::getLength(os);
2844 CHECK_SET_ERR(4 == newLength - oldLength, QString("Wrong length of changed alignment"));
2845 }
2846
GUI_TEST_CLASS_DEFINITION(test_0042)2847 GUI_TEST_CLASS_DEFINITION(test_0042) {
2848 // default msa export
2849 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2850 GTUtilsTaskTreeView::waitTaskFinished(os);
2851
2852 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2853 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0042.png"));
2854
2855 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2856 }
2857
GUI_TEST_CLASS_DEFINITION(test_0042_1)2858 GUI_TEST_CLASS_DEFINITION(test_0042_1) {
2859 // "all included" export
2860 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2861 GTUtilsTaskTreeView::waitTaskFinished(os);
2862
2863 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2864 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0042_1.png", ExportMsaImage::Settings(true, true, true) /*include all*/));
2865 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2866 }
2867
GUI_TEST_CLASS_DEFINITION(test_0042_2)2868 GUI_TEST_CLASS_DEFINITION(test_0042_2) {
2869 // slightly modified export
2870 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2871 GTUtilsTaskTreeView::waitTaskFinished(os);
2872
2873 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2874 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0042_1", ExportMsaImage::Settings(true, false, true) /*include all*/, true, false, RegionMsa(), "BMP"));
2875 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2876 }
2877
GUI_TEST_CLASS_DEFINITION(test_0043)2878 GUI_TEST_CLASS_DEFINITION(test_0043) {
2879 // select a few sequences
2880 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2881 GTUtilsTaskTreeView::waitTaskFinished(os);
2882
2883 QStringList sequences;
2884 sequences << "Montana_montana"
2885 << "Conocephalus_percaudata"
2886 << "Podisma_sapporensis";
2887
2888 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2889 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0043.png", ExportMsaImage::Settings(), false, false, RegionMsa(U2Region(1, 594), sequences)));
2890
2891 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2892 }
2893
GUI_TEST_CLASS_DEFINITION(test_0044)2894 GUI_TEST_CLASS_DEFINITION(test_0044) {
2895 // export selected region
2896 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2897 GTUtilsTaskTreeView::waitTaskFinished(os);
2898
2899 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 2), QPoint(25, 8));
2900
2901 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2902 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0044.png", ExportMsaImage::Settings(true, true, true), false, true));
2903
2904 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2905 }
2906
GUI_TEST_CLASS_DEFINITION(test_0045)2907 GUI_TEST_CLASS_DEFINITION(test_0045) {
2908 // check the connection between export comboBox and selectRegion dialog
2909 // there should be no selection
2910 class ExportDialogChecker : public Filler {
2911 public:
2912 ExportDialogChecker(HI::GUITestOpStatus &os)
2913 : Filler(os, "ImageExportForm") {
2914 }
2915 void run() override {
2916 QWidget *dialog = GTWidget::getActiveModalWidget(os);
2917 GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "SelectSubalignmentDialog", QDialogButtonBox::Cancel));
2918 QComboBox *exportType = dialog->findChild<QComboBox *>("comboBox");
2919 GTComboBox::selectItemByText(os, exportType, "Custom region", GTGlobals::UseMouse);
2920
2921 GTGlobals::sleep();
2922 CHECK_SET_ERR(exportType->currentText() == "Whole alignment", "Wrong combo box text!");
2923 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
2924 }
2925 };
2926
2927 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2928 GTUtilsTaskTreeView::waitTaskFinished(os);
2929
2930 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2931 GTUtilsDialog::waitForDialog(os, new ExportDialogChecker(os));
2932
2933 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2934 }
2935
GUI_TEST_CLASS_DEFINITION(test_0045_1)2936 GUI_TEST_CLASS_DEFINITION(test_0045_1) {
2937 // check the connection between export comboBox and selectRegion dialog
2938 // there should be no selection
2939
2940 class ExportChecker : public Filler {
2941 public:
2942 ExportChecker(HI::GUITestOpStatus &os)
2943 : Filler(os, "ImageExportForm") {
2944 }
2945 void run() override {
2946 QWidget *dialog = GTWidget::getActiveModalWidget(os);
2947 QComboBox *exportType = dialog->findChild<QComboBox *>("comboBox");
2948 CHECK_SET_ERR(exportType->currentText() == "Whole alignment", "Wrong combo box text!");
2949
2950 GTUtilsDialog::waitForDialog(os,
2951 new SelectSubalignmentFiller(os,
2952 RegionMsa(U2Region(1, 593),
2953 QStringList() << "Montana_montana"
2954 << "Conocephalus_percaudata")));
2955 QPushButton *select = dialog->findChild<QPushButton *>("selectRegionButton");
2956 GTWidget::click(os, select);
2957
2958 GTGlobals::sleep();
2959 CHECK_SET_ERR(exportType->currentText() == "Custom region", "Wrong combo box text!");
2960
2961 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
2962 }
2963 };
2964
2965 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2966 GTUtilsTaskTreeView::waitTaskFinished(os);
2967
2968 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2969 GTUtilsDialog::waitForDialog(os, new ExportChecker(os));
2970
2971 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2972 }
2973
GUI_TEST_CLASS_DEFINITION(test_0046)2974 GUI_TEST_CLASS_DEFINITION(test_0046) {
2975 // check quality
2976 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2977 GTUtilsTaskTreeView::waitTaskFinished(os);
2978 GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2979
2980 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
2981 GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test_0046", "JPG", 50));
2982 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
2983 }
2984
GUI_TEST_CLASS_DEFINITION(test_0047)2985 GUI_TEST_CLASS_DEFINITION(test_0047) {
2986 // check select subalignment dialog
2987
2988 class SelectSubalignmentChecker : public Filler {
2989 public:
2990 SelectSubalignmentChecker(HI::GUITestOpStatus &os)
2991 : Filler(os, "SelectSubalignmentDialog") {
2992 }
2993
2994 void run() override {
2995 QWidget *dialog = GTWidget::getActiveModalWidget(os);
2996 QDialogButtonBox *box = dialog->findChild<QDialogButtonBox *>("buttonBox");
2997 CHECK_SET_ERR(box != nullptr, "buttonBox is NULL");
2998 QPushButton *ok = box->button(QDialogButtonBox::Ok);
2999 CHECK_SET_ERR(ok != nullptr, "ok button is NULL");
3000
3001 QSpinBox *startLineEdit = dialog->findChild<QSpinBox *>("startLineEdit");
3002 CHECK_SET_ERR(startLineEdit != nullptr, "startLineEdit is NULL");
3003 GTSpinBox::setValue(os, startLineEdit, 10);
3004
3005 QSpinBox *endLineEdit = dialog->findChild<QSpinBox *>("endLineEdit");
3006 CHECK_SET_ERR(endLineEdit != nullptr, "endLineEdit is NULL");
3007 GTSpinBox::setValue(os, endLineEdit, 5);
3008
3009 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
3010 GTWidget::click(os, ok);
3011
3012 GTSpinBox::setValue(os, endLineEdit, 15);
3013 QWidget *noneButton = dialog->findChild<QWidget *>("noneButton");
3014 CHECK_SET_ERR(noneButton != nullptr, "noneButton is NULL");
3015 GTWidget::click(os, noneButton);
3016
3017 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
3018 GTWidget::click(os, ok);
3019
3020 GTGlobals::sleep();
3021 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3022 }
3023 };
3024
3025 class ExportChecker : public Filler {
3026 public:
3027 ExportChecker(HI::GUITestOpStatus &os)
3028 : Filler(os, "ImageExportForm") {
3029 }
3030 void run() override {
3031 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3032 GTUtilsDialog::waitForDialog(os, new SelectSubalignmentChecker(os));
3033 QPushButton *select = dialog->findChild<QPushButton *>("selectRegionButton");
3034 GTWidget::click(os, select);
3035
3036 GTGlobals::sleep();
3037 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3038 }
3039 };
3040
3041 GTFileDialog::openFile(os, testDir + "_common_data/clustal", "align.aln");
3042 GTUtilsTaskTreeView::waitTaskFinished(os);
3043 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1, 1), QPoint(1, 1));
3044
3045 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
3046 GTUtilsDialog::waitForDialog(os, new ExportChecker(os));
3047 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
3048 }
3049
GUI_TEST_CLASS_DEFINITION(test_0048)3050 GUI_TEST_CLASS_DEFINITION(test_0048) {
3051 // fail to export big alignment
3052 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "big.aln");
3053 GTUtilsTaskTreeView::waitTaskFinished(os);
3054 GTUtilsTaskTreeView::waitTaskFinished(os);
3055
3056 class CustomFiller_0048 : public Filler {
3057 public:
3058 CustomFiller_0048(HI::GUITestOpStatus &os)
3059 : Filler(os, "ImageExportForm") {
3060 }
3061 void run() override {
3062 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3063 QComboBox *exportType = dialog->findChild<QComboBox *>("comboBox");
3064 CHECK_SET_ERR(exportType != nullptr, "Cannot find comboBox");
3065 CHECK_SET_ERR(exportType->currentText() == "Whole alignment", "Wrong combo box text!");
3066
3067 QLabel *hintLabel = dialog->findChild<QLabel *>("hintLabel");
3068 CHECK_SET_ERR(hintLabel != nullptr, "Cannot find hintLabel");
3069 CHECK_SET_ERR(hintLabel->isVisible(), "Warning message is hidden!");
3070
3071 QDialogButtonBox *buttonBox = dialog->findChild<QDialogButtonBox *>("buttonBox");
3072 CHECK_SET_ERR(buttonBox != nullptr, "Cannot find buttonBox");
3073 QPushButton *exportButton = buttonBox->button(QDialogButtonBox::Ok);
3074 CHECK_SET_ERR(exportButton != nullptr, "Cannot find Export button");
3075 CHECK_SET_ERR(!exportButton->isEnabled(), "Export button is enabled");
3076
3077 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3078 }
3079 };
3080
3081 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
3082 GTUtilsDialog::waitForDialog(os, new CustomFiller_0048(os));
3083
3084 GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
3085 }
3086
GUI_TEST_CLASS_DEFINITION(test_0049)3087 GUI_TEST_CLASS_DEFINITION(test_0049) {
3088 // save alignment buttons test
3089 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
3090 GTUtilsTaskTreeView::waitTaskFinished(os);
3091 GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "COI_test_0049.aln", ExportDocumentDialogFiller::CLUSTALW));
3092 GTWidget::click(os, GTAction::button(os, "Save alignment as"));
3093 GTUtilsProjectTreeView::click(os, "COI.aln");
3094 GTKeyboardDriver::keyClick(Qt::Key_Delete);
3095
3096 GTFileDialog::openFile(os, sandBoxDir, "COI_test_0049.aln");
3097 GTUtilsTaskTreeView::waitTaskFinished(os);
3098 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(10, 10));
3099 GTKeyboardDriver::keyClick(Qt::Key_Delete);
3100 GTUtilsTaskTreeView::waitTaskFinished(os);
3101
3102 GTWidget::click(os, GTAction::button(os, "Save alignment"));
3103 GTUtilsProjectTreeView::click(os, "COI_test_0049.aln");
3104 GTKeyboardDriver::keyClick(Qt::Key_Delete);
3105 GTUtilsTaskTreeView::waitTaskFinished(os);
3106
3107 GTFileDialog::openFile(os, sandBoxDir, "COI_test_0049.aln");
3108 GTUtilsTaskTreeView::waitTaskFinished(os);
3109 GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 0), QPoint(10, 0), "ATTCGAGCCGA");
3110 }
3111
GUI_TEST_CLASS_DEFINITION(test_0050)3112 GUI_TEST_CLASS_DEFINITION(test_0050) {
3113 // 1. Open "COI.aln"
3114 // 2. Set any reference sequence
3115 // 3. Open context menu, open the "Highlighting" submenu, set the "Agreements" type
3116 // 4. Open context menu again, open the "Export" submenu, choose the "Export highlighted" menu item
3117 // Expected state: the "Export highlighted to file" dialog appears - there is a checkbox 'transpose output'
3118 // 5. Click "Export"
3119 // Expected state: result file contain columns of sequences
3120 // 6. Repeat 3-4
3121 // 7. Deselect 'Transpose output' and click 'Export'
3122 // Expected state: result file contain rowa of sequences
3123
3124 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3125 GTUtilsTaskTreeView::waitTaskFinished(os);
3126 GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference"));
3127 GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton, QPoint(10, 10));
3128
3129 GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance"
3130 << "Highlighting"
3131 << "Agreements"));
3132 GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton);
3133
3134 GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export"
3135 << "Export highlighted"));
3136 GTUtilsDialog::waitForDialog(os, new ExportHighlightedDialogFiller(os, sandBoxDir + "common_msa_test_0050_1.txt"));
3137 GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton);
3138 GTGlobals::sleep();
3139
3140 CHECK_SET_ERR(GTFile::equals(os, sandBoxDir + "common_msa_test_0050_1.txt", testDir + "_common_data/clustal/COI_highlighted_1"),
3141 "Transposed export is incorrect");
3142
3143 GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export"
3144 << "Export highlighted"));
3145 GTUtilsDialog::waitForDialog(os, new ExportHighlightedDialogFiller(os, sandBoxDir + "common_msa_test_0050_2.txt", false));
3146 GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton);
3147 GTGlobals::sleep();
3148
3149 CHECK_SET_ERR(GTFile::equals(os, sandBoxDir + "common_msa_test_0050_2.txt", testDir + "_common_data/clustal/COI_highlighted_2"),
3150 "Export is incorrect");
3151 }
3152
GUI_TEST_CLASS_DEFINITION(test_0052)3153 GUI_TEST_CLASS_DEFINITION(test_0052) {
3154 // 1. Open "_common_data/clustal/3000_sequences.aln"
3155 // 2. Context menu -- Export as ImageExport
3156 // Expected state: export dialog appeared, there is a warning message and Export button is disabled
3157 // 3. Select a small region
3158 // Expected state: warning is gone, export is enabled
3159 GTFileDialog::openFile(os, testDir + "_common_data/clustal/3000_sequences.aln");
3160 GTUtilsTaskTreeView::waitTaskFinished(os);
3161 GTUtilsTaskTreeView::waitTaskFinished(os);
3162
3163 class CustomFiller_0052 : public Filler {
3164 public:
3165 CustomFiller_0052(HI::GUITestOpStatus &os)
3166 : Filler(os, "ImageExportForm") {
3167 }
3168 void run() override {
3169 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3170 QComboBox *exportType = dialog->findChild<QComboBox *>("comboBox");
3171 CHECK_SET_ERR(exportType != nullptr, "Cannot find comboBox");
3172 CHECK_SET_ERR(exportType->currentText() == "Whole alignment", "Wrong combo box text!");
3173
3174 QLabel *hintLabel = dialog->findChild<QLabel *>("hintLabel");
3175 CHECK_SET_ERR(hintLabel != nullptr, "Cannot find hintLabel");
3176 CHECK_SET_ERR(hintLabel->isVisible(), "Warning message is hidden!");
3177
3178 QDialogButtonBox *buttonBox = dialog->findChild<QDialogButtonBox *>("buttonBox");
3179 CHECK_SET_ERR(buttonBox != nullptr, "Cannot find buttonBox");
3180 QPushButton *exportButton = buttonBox->button(QDialogButtonBox::Ok);
3181 CHECK_SET_ERR(exportButton != nullptr, "Cannot find Export button");
3182 CHECK_SET_ERR(!exportButton->isEnabled(), "Export button is enabled");
3183
3184 GTUtilsDialog::waitForDialog(os,
3185 new SelectSubalignmentFiller(os,
3186 RegionMsa(U2Region(1, 593),
3187 QStringList() << "Sequence__1"
3188 << "Sequence__2"
3189 << "Sequnce__3"
3190 << "Sequence__4")));
3191
3192 QPushButton *select = dialog->findChild<QPushButton *>("selectRegionButton");
3193 GTWidget::click(os, select);
3194
3195 GTGlobals::sleep();
3196 CHECK_SET_ERR(exportType->currentText() == "Custom region", "Wrong combo box text!");
3197
3198 CHECK_SET_ERR(!hintLabel->isVisible(), "Warning is visible");
3199 CHECK_SET_ERR(exportButton->isEnabled(), "Export button is disabled");
3200
3201 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3202 }
3203 };
3204
3205 GTUtilsDialog::waitForDialog(os, new CustomFiller_0052(os));
3206 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "export_msa_as_image_action"}));
3207 GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
3208 }
3209
GUI_TEST_CLASS_DEFINITION(test_0053)3210 GUI_TEST_CLASS_DEFINITION(test_0053) {
3211 // Copied formatted (context menu)
3212 // 1. Open amples\CLUSTALW\COI.aln
3213 // 2. Select the first three letters TAA
3214 // 3. Context menue {Copy-><<Copy formatted}
3215 // Expected state: the buffer contatin the sequence in CLUSTALW format
3216 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3217 GTUtilsTaskTreeView::waitTaskFinished(os);
3218
3219 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
3220
3221 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_formatted"));
3222 GTMouseDriver::click(Qt::RightButton);
3223 GTGlobals::sleep(3000);
3224
3225 QString clipboardText = GTClipboard::text(os);
3226
3227 CHECK_SET_ERR(clipboardText.contains("TAA"), clipboardText);
3228 }
3229
GUI_TEST_CLASS_DEFINITION(test_0053_1)3230 GUI_TEST_CLASS_DEFINITION(test_0053_1) {
3231 // Copied formatted (context menu), the format is changable
3232 // 1. Open samples\CLUSTALW\COI.aln
3233 // 2. Select the first three letters TAA
3234 // 3. In the general tab of the options panel find the Copy Type combobox and select the Mega format
3235 // 4. Context menu {Copy->Copy formatted}
3236 // Expected state: the buffer contatin the sequence in Mega format
3237 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3238 GTUtilsTaskTreeView::waitTaskFinished(os);
3239
3240 GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
3241
3242 QComboBox *copyType = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "copyType"));
3243 CHECK_SET_ERR(copyType != nullptr, "copy combobox not found");
3244
3245 GTComboBox::selectItemByText(os, copyType, "Mega");
3246
3247 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
3248
3249 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_formatted"));
3250 GTMouseDriver::click(Qt::RightButton);
3251
3252 QString clipboardText = GTClipboard::text(os);
3253
3254 CHECK_SET_ERR(clipboardText.contains("mega"), clipboardText);
3255 CHECK_SET_ERR(clipboardText.contains("TAA"), clipboardText);
3256 }
3257
GUI_TEST_CLASS_DEFINITION(test_0053_2)3258 GUI_TEST_CLASS_DEFINITION(test_0053_2) {
3259 // Copied formatted (toolbar), the format is changable
3260 // 1. Open samples\CLUSTALW\COI.aln
3261 // 2. Select the first three letters TAA
3262 // 3. In the general tab of the options panel find the Copy Type combobox and select the CLUSTALW format
3263 // 4. Toolbar {Copy->Copy formatted}
3264 // Expected state: the buffer contatin the sequence in CLUSTALW format
3265 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3266 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
3267
3268 GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
3269
3270 QComboBox *copyType = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "copyType"));
3271 CHECK_SET_ERR(copyType != nullptr, "copy combobox not found");
3272
3273 GTComboBox::selectItemByText(os, copyType, "CLUSTALW");
3274
3275 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
3276
3277 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "copy_formatted"));
3278 GTGlobals::sleep(3000);
3279
3280 QString clipboardText = GTClipboard::text(os);
3281
3282 CHECK_SET_ERR(clipboardText.contains("CLUSTAL W 2.0 multiple sequence alignment"), clipboardText);
3283 CHECK_SET_ERR(clipboardText.contains("TAA"), clipboardText);
3284 }
3285
GUI_TEST_CLASS_DEFINITION(test_0053_3)3286 GUI_TEST_CLASS_DEFINITION(test_0053_3) {
3287 // Copied formatted (context menu) for a big alignment
3288 // 1. Open _common_data/clustal/100_sequences.aln
3289 // 2. Select the whole alignment
3290 // 3. Context menue {Copy->Copy formatted}
3291 // Expected state: the buffer contatin the sequences in CLUSTALW format
3292 GTFileDialog::openFile(os, testDir + "_common_data/clustal/100_sequences.aln");
3293 GTUtilsTaskTreeView::waitTaskFinished(os);
3294
3295 QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
3296 CHECK_SET_ERR(!names.isEmpty(), "the alignment is empty");
3297 GTUtilsMSAEditorSequenceArea::selectSequence(os, names.first());
3298
3299 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_formatted"));
3300 GTMouseDriver::click(Qt::RightButton);
3301 GTGlobals::sleep(3000);
3302
3303 QString clipboardText = GTClipboard::text(os);
3304
3305 CHECK_SET_ERR(clipboardText.contains("ACCAGGCTTGGCAATGCGTATC"), clipboardText);
3306 }
3307
GUI_TEST_CLASS_DEFINITION(test_0053_4)3308 GUI_TEST_CLASS_DEFINITION(test_0053_4) {
3309 // Copied formatted (action is disabled when no selection
3310 // 1. Open samples\CLUSTALW\COI.aln
3311 // 2. Try context menue {Copy->Copy formatted}
3312 // Expected state: the action is disabled
3313 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3314 GTUtilsTaskTreeView::waitTaskFinished(os);
3315
3316 QWidget *w = GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "copy_formatted");
3317 CHECK_SET_ERR(w != nullptr, "no copy action on the toolbar");
3318 CHECK_SET_ERR(w->isEnabled() == false, "selection is empty but the action is enabled");
3319 }
3320
GUI_TEST_CLASS_DEFINITION(test_0053_5)3321 GUI_TEST_CLASS_DEFINITION(test_0053_5) {
3322 // Copied formatted (toolbar), the format is changable to RTF
3323 // 1. Open samples\CLUSTALW\COI.aln
3324 // 2. Select the first three letters TAA
3325 // 3. In the general tab of the options panel find the Copy Type combobox and select the RTF format
3326 // 4. Toolbar {Copy->Copy formatted}
3327 // Expected state: the buffer contatin the sequence in RTF format
3328 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3329 GTUtilsTaskTreeView::waitTaskFinished(os);
3330
3331 GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
3332 GTGlobals::sleep(200);
3333
3334 QComboBox *copyType = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "copyType"));
3335 CHECK_SET_ERR(copyType != nullptr, "copy combobox not found");
3336
3337 GTComboBox::selectItemByText(os, copyType, "Rich text (HTML)");
3338
3339 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
3340
3341 GTWidget::click(os, GTToolbar::getWidgetForActionObjectName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "copy_formatted"));
3342 GTGlobals::sleep(3000);
3343
3344 QString clipboardText = GTClipboard::text(os);
3345
3346 CHECK_SET_ERR(clipboardText.contains("<span style=\"font-size:10pt; font-family:Verdana;\">"), clipboardText);
3347 CHECK_SET_ERR(clipboardText.contains("<p><span style=\"background-color:#ff99b1;\">T</span><span style=\"background-color:#fcff92;\">A</span><span style=\"background-color:#fcff92;\">A</span></p>"), clipboardText);
3348 }
3349
GUI_TEST_CLASS_DEFINITION(test_0053_6)3350 GUI_TEST_CLASS_DEFINITION(test_0053_6) {
3351 // Test copying of spatial selection, whole rows mode & column range mode.
3352
3353 GTFileDialog::openFile(os, testDir + "_common_data/clustal/region.full-gap.aln");
3354 GTUtilsTaskTreeView::waitTaskFinished(os);
3355
3356 GTUtilsMSAEditorSequenceArea::selectArea(os, {5, 0}, {10, 1}); // 2 rows.
3357
3358 // Add an extra row to the selection.
3359 GTKeyboardDriver::keyPress(Qt::Key_Control);
3360 GTUtilsMsaEditor::clickSequence(os, 10);
3361 GTKeyboardDriver::keyPress(Qt::Key_Control);
3362
3363 GTUtilsMsaEditor::checkSelection(os, {{5, 0, 6, 2}, {5, 10, 6, 1}});
3364
3365 // Test standard copy: only column range must be copied
3366 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_COPY, "copy_selection"}));
3367 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
3368 QString clipboardText = GTClipboard::text(os);
3369 QString expectedText = "LRPSSS\n"
3370 "LRPSSS\n"
3371 "WKMSNA";
3372 CHECK_SET_ERR(clipboardText == expectedText, "Unexpected text: " + QString(clipboardText).replace("\n", "$"));
3373
3374 // Test copy formatted: only column range must be copied
3375 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_COPY, "copy_formatted"}));
3376 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
3377 clipboardText = GTClipboard::text(os);
3378 expectedText = "CLUSTAL W 2.0 multiple sequence alignment\n\n"
3379 "Tcn2 LRPSSS 6\n"
3380 "Tcn5 LRPSSS 6\n"
3381 "Pc_Metavir9 WKMSNA 6\n"
3382 " : *.:\n\n";
3383 CHECK_SET_ERR(clipboardText == expectedText, "Unexpected formatted text: " + QString(clipboardText).replace("\n", "$"));
3384
3385 // Test copying of whole row.
3386 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_COPY, "copy_whole_row"}));
3387 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
3388 clipboardText = GTClipboard::text(os);
3389 expectedText = "RTAGRLRPSSSPWAAPAFLIKKENGKFRFLCDFRGLNSVT\n"
3390 "REAGRLRPSSSPWAAPAFLVKKENGKFRFIC---------\n"
3391 "LRSGRWKMSNARNTSPMLL-----SGIRDIPPRLRCVFDL";
3392 CHECK_SET_ERR(clipboardText == expectedText, "Unexpected full row text: " + QString(clipboardText).replace("\n", "$"));
3393 }
3394
GUI_TEST_CLASS_DEFINITION(test_0054)3395 GUI_TEST_CLASS_DEFINITION(test_0054) {
3396 // Open COI.aln
3397 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3398 GTUtilsTaskTreeView::waitTaskFinished(os);
3399 // Use context menu:
3400 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle"));
3401 GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default, true, true));
3402 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3403 GTUtilsTaskTreeView::waitTaskFinished(os);
3404 QString actual = GTUtilsMSAEditorSequenceArea::getSequenceData(os, "Phaneroptera_falcata");
3405 CHECK_SET_ERR(actual.startsWith("TAAGACTTCTAATTCGAGCCGAATTAGGTCAACCAGGATACC---TAATTGGAGATGATCAAATTTATAATGTAATTGT"), "unexpected sequence: " + actual);
3406
3407 // {Align->Align with MUSCLE}
3408 // Check "Translate to amino when aligning" checkbox
3409 // Align
3410 }
3411
GUI_TEST_CLASS_DEFINITION(test_0054_1)3412 GUI_TEST_CLASS_DEFINITION(test_0054_1) {
3413 // Open COI.aln
3414 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3415 GTUtilsTaskTreeView::waitTaskFinished(os);
3416 // Use context menu:
3417 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
3418 GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os, 0, true));
3419 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3420 GTUtilsTaskTreeView::waitTaskFinished(os);
3421 QString actual = GTUtilsMSAEditorSequenceArea::getSequenceData(os, "Phaneroptera_falcata");
3422 CHECK_SET_ERR(actual.startsWith("TAAGACTTCTAATTCGAGCCGAATTAGGTCAAC---CAGGATACCTAATTGGAGATGATCAAATTTATAATG"), "unexpected sequence: " + actual);
3423
3424 // {Align->Align with MUSCLE}
3425 // Check "Translate to amino when aligning" checkbox
3426 // Align
3427 }
3428
GUI_TEST_CLASS_DEFINITION(test_0055)3429 GUI_TEST_CLASS_DEFINITION(test_0055) {
3430 // Open data/samples/CLUSTALW/COI.aln
3431 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3432 GTUtilsTaskTreeView::waitTaskFinished(os);
3433 // Select some area
3434 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 2), QPoint(8, 8));
3435 // Use context menu:
3436 // {Export->Export subalignment}
3437 class custom : public CustomScenario {
3438 public:
3439 void run(HI::GUITestOpStatus &os) override {
3440 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3441 QLineEdit *filepathEdit = GTWidget::findExactWidget<QLineEdit *>(os, "filepathEdit", dialog);
3442 GTLineEdit::setText(os, filepathEdit, dataDir + "samples/CLUSTALW/COI.aln");
3443
3444 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3445 }
3446 };
3447
3448 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
3449
3450 GTUtilsDialog::waitForDialog(os, new ExtractSelectedAsMSADialogFiller(os, new custom()));
3451 GTUtilsNotifications::waitForNotification(os, true, "Document is locked:");
3452 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3453 // In export dialog set output file to
3454 // "data/samples/CLUSTALW/COI.aln"
3455 GTGlobals::sleep();
3456 }
3457
GUI_TEST_CLASS_DEFINITION(test_0056)3458 GUI_TEST_CLASS_DEFINITION(test_0056) {
3459 // Open murine.gb
3460 GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
3461 GTUtilsTaskTreeView::waitTaskFinished(os);
3462 // Export sequence as alignment. In export dialog check
3463
3464 class custom : public CustomScenario {
3465 public:
3466 void run(HI::GUITestOpStatus &os) override {
3467 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3468 QLineEdit *fileNameEdit = GTWidget::findExactWidget<QLineEdit *>(os, "fileNameEdit", dialog);
3469 GTLineEdit::setText(os, fileNameEdit, sandBoxDir + "murine.aln");
3470
3471 QCheckBox *genbankBox = GTWidget::findExactWidget<QCheckBox *>(os, "genbankBox", dialog);
3472 GTCheckBox::setChecked(os, genbankBox, true);
3473
3474 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3475 }
3476 };
3477
3478 GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, new custom()));
3479 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
3480 << "export sequences as alignment"));
3481 GTUtilsProjectTreeView::click(os, "murine.gb", Qt::RightButton);
3482 GTUtilsTaskTreeView::waitTaskFinished(os);
3483
3484 // "Use Genbank "SOURCE" tags..." checkbox
3485 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
3486 CHECK_SET_ERR(nameList.size() == 1, QString("unexpected number of names: %1").arg(nameList.size()));
3487 CHECK_SET_ERR(nameList.first() == "Murine_sarcoma_virus.", "unexpected sequence name: " + nameList.first());
3488 }
3489
GUI_TEST_CLASS_DEFINITION(test_0057)3490 GUI_TEST_CLASS_DEFINITION(test_0057) {
3491 class custom : public CustomScenario {
3492 public:
3493 void run(HI::GUITestOpStatus &os) override {
3494 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3495 QRadioButton *join2alignmentMode = GTWidget::findExactWidget<QRadioButton *>(os, "join2alignmentMode", dialog);
3496 GTRadioButton::click(os, join2alignmentMode);
3497 GTGlobals::sleep();
3498
3499 QLineEdit *newDocUrl = GTWidget::findExactWidget<QLineEdit *>(os, "newDocUrl", dialog);
3500 GTLineEdit::setText(os, newDocUrl, sandBoxDir + "test_0057.aln");
3501
3502 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3503 }
3504 };
3505 GTUtilsDialog::waitForDialog(os, new GTSequenceReadingModeDialogUtils(os, new custom()));
3506 GTFileDialog::openFileList(os, dataDir + "samples/Genbank", QStringList() << "murine.gb"
3507 << "sars.gb");
3508 GTUtilsTaskTreeView::waitTaskFinished(os);
3509 GTGlobals::sleep();
3510
3511 GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 0), QPoint(10, 1), "AAATGAAAGAC\nATATTAGGTTT");
3512 }
3513
GUI_TEST_CLASS_DEFINITION(test_0058)3514 GUI_TEST_CLASS_DEFINITION(test_0058) {
3515 class custom : public CustomScenario {
3516 public:
3517 void run(HI::GUITestOpStatus &os) override {
3518 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3519 GTGlobals::sleep(500);
3520
3521 QWidget *logoWidget = GTWidget::findWidget(os, "logoWidget", dialog);
3522 int initHeight = logoWidget->geometry().height();
3523 CHECK_SET_ERR(initHeight == 0, QString("logoWidget has too big height: %1").arg(initHeight));
3524
3525 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/clustal/test_1393.aln"));
3526 GTWidget::click(os, GTWidget::findWidget(os, "inputButton", dialog));
3527 GTGlobals::sleep(500);
3528
3529 int finalHeight = logoWidget->geometry().height();
3530 CHECK_SET_ERR(finalHeight == 150, QString("logoWidget has wrong height after choosing file: %1").arg(finalHeight));
3531
3532 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3533 }
3534 };
3535 GTUtilsDialog::waitForDialog(os, new PwmBuildDialogFiller(os, new custom()));
3536 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "TFBS_MENU"
3537 << "TFBS_WEIGHT"));
3538 GTMenu::showMainMenu(os, MWMENU_TOOLS);
3539 // Use main menu {Tools->Search for TFBS->Build weigth mantix}
3540 // In "Weight matrix" dialog set input amino alignment
3541 // shorter then 50.
3542 // Expected state: weight matrix logo appeared in dialog
3543 // Change input file
3544 // Expected state: logo updated
3545 }
3546
GUI_TEST_CLASS_DEFINITION(test_0059)3547 GUI_TEST_CLASS_DEFINITION(test_0059) {
3548 // Open COI.aln
3549 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3550 GTUtilsTaskTreeView::waitTaskFinished(os);
3551 // Create new color scheme. Set some new color for some
3552
3553 // character.
3554 // Press "Clear" button. check state
3555
3556 class customColorSelector : public CustomScenario {
3557 public:
3558 void run(HI::GUITestOpStatus &os) override {
3559 GTGlobals::sleep(500);
3560 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3561 QWidget *alphabetColorsFrame = GTWidget::findWidget(os, "alphabetColorsFrame", dialog);
3562
3563 int cellWidth = alphabetColorsFrame->geometry().width() / 6;
3564 QStringList initialColors;
3565 initialColors << "#ffffff"
3566 << "#fcff92"
3567 << "#70f970"
3568 << "#4eade1"
3569 << "#fcfcfc"
3570 << "#ff99b1";
3571 QString finalColor = "#ffffff";
3572
3573 GTWidget::click(os, GTWidget::findWidget(os, "clearButton", dialog));
3574 GTGlobals::sleep(200);
3575 for (double i = 0; i < 6; i++) {
3576 QPoint p = QPoint((i + 0.5) * cellWidth, 10);
3577 QColor c = GTWidget::getColor(os, dialog, alphabetColorsFrame->mapTo(dialog, p));
3578 CHECK_SET_ERR(c.name() == finalColor, QString("unexpected color at cell %1 after clearing: %2").arg(i).arg(c.name()));
3579 uiLog.trace(c.name());
3580 }
3581
3582 GTWidget::click(os, GTWidget::findWidget(os, "restoreButton", dialog));
3583 GTGlobals::sleep(200);
3584 for (double i = 0; i < 6; i++) {
3585 QPoint p = QPoint((i + 0.5) * cellWidth, 10);
3586 QColor c = GTWidget::getColor(os, dialog, alphabetColorsFrame->mapTo(dialog, p));
3587 CHECK_SET_ERR(c.name() == initialColors[i], QString("unexpected color at cell %1 after clearing: %2, expected: %3").arg(i).arg(c.name()).arg(initialColors[i]));
3588 uiLog.trace(c.name());
3589 }
3590
3591 GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255, 0, 0));
3592 QPoint cell2 = QPoint(1.5 * cellWidth, 10);
3593 GTMouseDriver::moveTo(alphabetColorsFrame->mapToGlobal(cell2));
3594 GTMouseDriver::click();
3595 GTGlobals::sleep(500);
3596 QColor cell2Color = GTWidget::getColor(os, dialog, alphabetColorsFrame->mapTo(dialog, cell2));
3597 CHECK_SET_ERR(cell2Color.name() == "#ff0000", "color was chanded wrong: " + cell2Color.name());
3598
3599 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3600 }
3601 };
3602
3603 class customColorSchemeCreator : public CustomScenario {
3604 public:
3605 void run(HI::GUITestOpStatus &os) override {
3606 GTGlobals::sleep(500);
3607 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3608 QLineEdit *schemeName = GTWidget::findExactWidget<QLineEdit *>(os, "schemeName", dialog);
3609 GTLineEdit::setText(os, schemeName, "GUITest_common_scenarios_msa_editor_test_0059_scheme");
3610
3611 QComboBox *alphabetComboBox = (GTWidget::findExactWidget<QComboBox *>(os, "alphabetComboBox", dialog));
3612 GTComboBox::selectItemByText(os, alphabetComboBox, "Nucleotide");
3613
3614 GTUtilsDialog::waitForDialog(os, new ColorSchemeDialogFiller(os, new customColorSelector()));
3615
3616 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3617 GTGlobals::sleep(500);
3618 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3619 }
3620 };
3621
3622 class customAppSettingsFiller : public CustomScenario {
3623 public:
3624 void run(HI::GUITestOpStatus &os) override {
3625 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3626 GTGlobals::sleep(500);
3627
3628 GTUtilsDialog::waitForDialog(os, new CreateAlignmentColorSchemeDialogFiller(os, new customColorSchemeCreator()));
3629
3630 GTWidget::click(os, GTWidget::findWidget(os, "addSchemaButton", dialog));
3631 GTGlobals::sleep(500);
3632
3633 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3634 }
3635 };
3636 GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller()));
3637
3638 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3639 << "Custom schemes"
3640 << "Create new color scheme"));
3641 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3642
3643 GTGlobals::sleep(500);
3644 }
3645
GUI_TEST_CLASS_DEFINITION(test_0060)3646 GUI_TEST_CLASS_DEFINITION(test_0060) {
3647 // Open COI.aln
3648 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3649 GTUtilsTaskTreeView::waitTaskFinished(os);
3650
3651 // Open "Color schemes" dialog.
3652 class customAppSettingsFiller : public CustomScenario {
3653 public:
3654 void run(HI::GUITestOpStatus &os) override {
3655 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3656 GTGlobals::sleep(500);
3657
3658 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, QFileInfo(sandBoxDir).absoluteFilePath(), "", GTFileDialogUtils::Choose));
3659 GTWidget::click(os, GTWidget::findWidget(os, "colorsDirButton", dialog));
3660
3661 GTGlobals::sleep(500);
3662
3663 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3664 }
3665 };
3666 GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller()));
3667
3668 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3669 << "Custom schemes"
3670 << "Create new color scheme"));
3671 // Select some color scheme folder. Check state
3672 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3673
3674 GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "GUITest_common_scenarios_msa_editor_test_0060", NewColorSchemeCreator::nucl));
3675 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3676 << "Custom schemes"
3677 << "Create new color scheme"));
3678 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3679
3680 GTGlobals::sleep(500);
3681
3682 GTFile::check(os, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0060.csmsa");
3683
3684 class customAppSettingsFiller1 : public CustomScenario {
3685 public:
3686 void run(HI::GUITestOpStatus &os) override {
3687 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3688 GTGlobals::sleep(500);
3689
3690 QLineEdit *colorsDirEdit = GTWidget::findExactWidget<QLineEdit *>(os, "colorsDirEdit", dialog);
3691 QString path = colorsDirEdit->text();
3692 CHECK_SET_ERR(path.contains("_common_data/scenarios/sandbox"), "unexpected color folder: " + path);
3693
3694 GTGlobals::sleep(500);
3695
3696 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3697 }
3698 };
3699 GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller1()));
3700
3701 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3702 << "Custom schemes"
3703 << "Create new color scheme"));
3704 // Select some color scheme folder. Check state
3705 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3706 }
3707
GUI_TEST_CLASS_DEFINITION(test_0061)3708 GUI_TEST_CLASS_DEFINITION(test_0061) {
3709 // Open COI.aln
3710 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3711 GTUtilsTaskTreeView::waitTaskFinished(os);
3712 // Open "Color schemes" dialog.
3713 // Open "Create color scheme" dialog.
3714 // Set wrong scheme names: space only, empty, with forbidden
3715 // characters, duplicating existing scnemes.
3716 // Check error hint in dialog
3717
3718 GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "GUITest_common_scenarios_msa_editor_test_0061", NewColorSchemeCreator::nucl));
3719
3720 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3721 << "Custom schemes"
3722 << "Create new color scheme"));
3723 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3724
3725 class customColorSchemeCreator : public CustomScenario {
3726 public:
3727 void run(HI::GUITestOpStatus &os) override {
3728 GTGlobals::sleep(500);
3729 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3730 QLabel *validLabel = GTWidget::findExactWidget<QLabel *>(os, "validLabel", dialog);
3731 QLineEdit *schemeName = GTWidget::findExactWidget<QLineEdit *>(os, "schemeName", dialog);
3732
3733 GTLineEdit::setText(os, schemeName, " ");
3734 CHECK_SET_ERR(validLabel->text() == "Warning: Name can't contain only spaces.", "unexpected hint: " + validLabel->text());
3735 GTLineEdit::setText(os, schemeName, "");
3736 CHECK_SET_ERR(validLabel->text() == "Warning: Name of scheme is empty.", "unexpected hint: " + validLabel->text());
3737 GTLineEdit::setText(os, schemeName, "name*");
3738 CHECK_SET_ERR(validLabel->text() == "Warning: Name has to consist of letters, digits, spaces<br>or underscore symbols only.", "unexpected hint: " + validLabel->text());
3739 GTLineEdit::setText(os, schemeName, "GUITest_common_scenarios_msa_editor_test_0061");
3740 CHECK_SET_ERR(validLabel->text() == "Warning: Color scheme with the same name already exists.", "unexpected hint: " + validLabel->text());
3741
3742 QComboBox *alphabetComboBox = (GTWidget::findExactWidget<QComboBox *>(os, "alphabetComboBox", dialog));
3743 GTComboBox::selectItemByText(os, alphabetComboBox, "Nucleotide");
3744
3745 GTGlobals::sleep(500);
3746 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3747 }
3748 };
3749
3750 class customAppSettingsFiller : public CustomScenario {
3751 public:
3752 void run(HI::GUITestOpStatus &os) override {
3753 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3754 GTGlobals::sleep(500);
3755
3756 GTUtilsDialog::waitForDialog(os, new CreateAlignmentColorSchemeDialogFiller(os, new customColorSchemeCreator()));
3757
3758 GTWidget::click(os, GTWidget::findWidget(os, "addSchemaButton", dialog));
3759 GTGlobals::sleep(500);
3760
3761 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3762 }
3763 };
3764 GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller()));
3765
3766 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_APPEARANCE << "Colors"
3767 << "Custom schemes"
3768 << "Create new color scheme"));
3769 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3770
3771 GTGlobals::sleep(500);
3772 }
3773
GUI_TEST_CLASS_DEFINITION(test_0062)3774 GUI_TEST_CLASS_DEFINITION(test_0062) {
3775 // Open COI.aln
3776 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3777 GTUtilsTaskTreeView::waitTaskFinished(os);
3778 QDir().mkpath(sandBoxDir + "read_only_dir");
3779 GTFile::setReadOnly(os, sandBoxDir + "read_only_dir");
3780
3781 // Open "Export subalignment" dialog
3782 class custom : public CustomScenario {
3783 public:
3784 void run(HI::GUITestOpStatus &os) override {
3785 QWidget *dialog = GTWidget::getActiveModalWidget(os);
3786
3787 QLineEdit *filepathEdit = GTWidget::findExactWidget<QLineEdit *>(os, "filepathEdit", dialog);
3788 // Check wrong parameters:
3789 // Dir to save does not exists
3790 GTLineEdit::setText(os, filepathEdit, sandBoxDir + "some_dir/subalignment.aln");
3791 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Export folder does not exist"));
3792 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3793
3794 // No permission to write to folder
3795 GTLineEdit::setText(os, filepathEdit, sandBoxDir + "read_only_dir/subalignment.aln");
3796 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "No write permission"));
3797 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3798
3799 // Empty file path
3800 GTLineEdit::setText(os, filepathEdit, "");
3801 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "No path specified"));
3802 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3803
3804 // Filename is empty
3805 GTLineEdit::setText(os, filepathEdit, sandBoxDir);
3806 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Export file name is empty"));
3807 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3808
3809 // Select 0 sequences
3810 GTLineEdit::setText(os, filepathEdit, sandBoxDir + "subalignment.aln");
3811
3812 GTWidget::click(os, GTWidget::findWidget(os, "noneButton", dialog));
3813 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "No selected sequence found"));
3814 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3815
3816 // Start pos > end pos
3817 QLineEdit *startLineEdit = GTWidget::findExactWidget<QLineEdit *>(os, "startLineEdit", dialog);
3818 GTLineEdit::setText(os, startLineEdit, "50");
3819 QLineEdit *endLineEdit = GTWidget::findExactWidget<QLineEdit *>(os, "endLineEdit", dialog);
3820 GTLineEdit::setText(os, endLineEdit, "40");
3821
3822 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Illegal column range!"));
3823 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
3824
3825 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
3826 }
3827 };
3828
3829 GTUtilsDialog::waitForDialog(os, new ExtractSelectedAsMSADialogFiller(os, new custom()));
3830 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
3831 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3832
3833 GTFile::setReadWrite(os, sandBoxDir + "read_only_dir");
3834 }
3835
GUI_TEST_CLASS_DEFINITION(test_0063)3836 GUI_TEST_CLASS_DEFINITION(test_0063) {
3837 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3838 GTUtilsTaskTreeView::waitTaskFinished(os);
3839
3840 class CheckAlignMenuScenario : public CustomScenario {
3841 public:
3842 void run(HI::GUITestOpStatus &os) override {
3843 QStringList expectedActionObjectNames = {"Align with muscle",
3844 "Align with ClustalW",
3845 "Align with ClustalO",
3846 "Align with MAFFT",
3847 "Align with T-Coffee",
3848 "align_with_kalign"};
3849 QList<QAction *> menuActions = GTWidget::getActivePopupMenu(os)->actions();
3850 GTKeyboardDriver::keyClick(Qt::Key_Escape);
3851 CHECK_SET_ERR(menuActions.size() == expectedActionObjectNames.size(), QString("Unexpected number of actions in 'Align' menu: %1").arg(menuActions.size()));
3852 for (const QAction *action : qAsConst(menuActions)) {
3853 CHECK_SET_ERR(expectedActionObjectNames.contains(action->objectName()), action->objectName() + " is not found in 'Align' menu");
3854 }
3855 }
3856 };
3857
3858 class CheckAlignToSequenceMenuScenario : public CustomScenario {
3859 public:
3860 void run(HI::GUITestOpStatus &os) override {
3861 QStringList expectedActionObjectNames = {"align-to-alignment-ugene",
3862 "align-to-alignment-mafft",
3863 "Align sequences to profile with MUSCLE",
3864 "Align profile to profile with MUSCLE",
3865 "align-alignment-to-alignment-clustalo"};
3866 QList<QAction *> menuActions = GTWidget::getActivePopupMenu(os)->actions();
3867 GTKeyboardDriver::keyClick(Qt::Key_Escape);
3868 CHECK_SET_ERR(menuActions.size() == expectedActionObjectNames.size(),
3869 QString("Unexpected number of actions in 'Align to alignment': %1, expected: %2")
3870 .arg(menuActions.size())
3871 .arg(expectedActionObjectNames.size()));
3872 for (const QAction *action : qAsConst(menuActions)) {
3873 CHECK_SET_ERR(expectedActionObjectNames.contains(action->objectName()), action->objectName() + " is not found in 'Align to alignment' menu");
3874 }
3875 }
3876 };
3877
3878 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new CheckAlignMenuScenario()));
3879 GTWidget::click(os, GTAction::button(os, "Align"));
3880
3881 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new CheckAlignToSequenceMenuScenario()));
3882 GTWidget::click(os, GTAction::button(os, "Align sequence(s) to this alignment"));
3883 }
3884
GUI_TEST_CLASS_DEFINITION(test_0064)3885 GUI_TEST_CLASS_DEFINITION(test_0064) {
3886 // Open COI.aln
3887 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3888 GTUtilsTaskTreeView::waitTaskFinished(os);
3889 // Open "Statistics" OP tab
3890 GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
3891 // Set some reference sequence
3892 GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
3893
3894 // Click "Show distance column". Check state
3895 QCheckBox *showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
3896 GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
3897 QString val1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
3898 QString val2 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 2);
3899 CHECK_SET_ERR(val1 == "0%", "1: unexpected valeu1: " + val1);
3900 CHECK_SET_ERR(val2 == "20%", "1: unexpected valeu2: " + val2);
3901 // Click "Show distance column". Check state
3902 GTCheckBox::setChecked(os, showDistancesColumnCheck, false);
3903 QWidget *column = GTWidget::findWidget(os, "msa_editor_similarity_column");
3904 CHECK_SET_ERR(!column->isVisible(), "similarity column unexpectidly found");
3905 // Click "Show distance column". Check state
3906 GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
3907 val1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
3908 val2 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 2);
3909 CHECK_SET_ERR(val1 == "0%", "2: unexpected valeu1: " + val1);
3910 CHECK_SET_ERR(val2 == "20%", "2: unexpected valeu2: " + val2);
3911 }
3912
GUI_TEST_CLASS_DEFINITION(test_0065)3913 GUI_TEST_CLASS_DEFINITION(test_0065) {
3914 // Open COI.aln
3915 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
3916 GTUtilsTaskTreeView::waitTaskFinished(os);
3917 // Use context menu: {Copy->Copy consensus with gaps}
3918 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "Copy consensus with gaps"));
3919
3920 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
3921 // Check clipboard
3922 QString clipboardText = GTClipboard::text(os);
3923 CHECK_SET_ERR(clipboardText.startsWith("TaAGttTatTaATtCGagCtGAAtTagG+CAaCCaGGtTat---+TaATT"), "unexpected consensus was exported: " + clipboardText);
3924 }
3925
GUI_TEST_CLASS_DEFINITION(test_0066)3926 GUI_TEST_CLASS_DEFINITION(test_0066) {
3927 // Open COI.aln consArea
3928 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
3929 GTUtilsTaskTreeView::waitTaskFinished(os);
3930
3931 // Select some area on consensus with mouse
3932 GTUtilsMsaEditor::selectColumns(os, 1, 10, GTGlobals::UseMouse);
3933
3934 // Check selection on consensus and alignment
3935 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(1, 0), QPoint(10, 17)));
3936 }
3937
GUI_TEST_CLASS_DEFINITION(test_0067)3938 GUI_TEST_CLASS_DEFINITION(test_0067) {
3939 // TODO: write this test when UGENE-4803 is fixed
3940 // Open COI.aln
3941 // Build tree displayed with msa
3942 // Use context menu on tree tab(in tabWidget)
3943 // Check all actions in popup menu
3944 CHECK_SET_ERR(false, "The test is not implemented");
3945 }
3946
GUI_TEST_CLASS_DEFINITION(test_0069)3947 GUI_TEST_CLASS_DEFINITION(test_0069) {
3948 // Open COI.aln
3949 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/Chikungunya_E1.fasta");
3950 GTUtilsTaskTreeView::waitTaskFinished(os);
3951
3952 // Press on some sequence in nameList
3953 GTUtilsMsaEditor::clickSequence(os, 2);
3954 QScrollBar *hscroll = GTWidget::findExactWidget<QScrollBar *>(os, "horizontal_names_scroll");
3955 QScrollBar *vscroll = GTWidget::findExactWidget<QScrollBar *>(os, "vertical_sequence_scroll");
3956
3957 // Check keys:
3958 // right,
3959 for (int i = 0; i < 3; i++) {
3960 GTKeyboardDriver::keyClick(Qt::Key_Right);
3961 GTGlobals::sleep(500);
3962 GTThread::waitForMainThread();
3963 }
3964 CHECK_SET_ERR(hscroll->value() == 3, QString("right key works wrong. Scrollbar has value: %1").arg(hscroll->value()));
3965
3966 // left
3967 for (int i = 0; i < 2; i++) {
3968 GTKeyboardDriver::keyClick(Qt::Key_Left);
3969 GTGlobals::sleep(500);
3970 GTThread::waitForMainThread();
3971 }
3972 CHECK_SET_ERR(hscroll->value() == 1, QString("left key works wrong. Scrollbar has value: %1").arg(hscroll->value()));
3973
3974 // page down
3975 GTKeyboardDriver::keyClick(Qt::Key_PageDown);
3976 GTGlobals::sleep(500);
3977 GTThread::waitForMainThread();
3978 CHECK_SET_ERR(vscroll->value() > 20, QString("page down key works wrong: %1").arg(vscroll->value()));
3979
3980 // page up
3981 GTKeyboardDriver::keyClick(Qt::Key_PageUp);
3982 GTGlobals::sleep(500);
3983 GTThread::waitForMainThread();
3984 CHECK_SET_ERR(vscroll->value() == 0, QString("page up key works wrong: %1").arg(vscroll->value()));
3985
3986 // end
3987 GTKeyboardDriver::keyClick(Qt::Key_End);
3988 GTGlobals::sleep(500);
3989 GTThread::waitForMainThread();
3990 CHECK_SET_ERR(vscroll->value() > 1650, QString("end key works wrong: %1").arg(vscroll->value()));
3991
3992 // home
3993 GTKeyboardDriver::keyClick(Qt::Key_Home);
3994 GTGlobals::sleep(500);
3995 GTThread::waitForMainThread();
3996 CHECK_SET_ERR(vscroll->value() == 0, QString("end key works wrong: %1").arg(vscroll->value()));
3997
3998 // mouse wheel
3999 for (int i = 0; i < 3; i++) {
4000 GTMouseDriver::scroll(-1);
4001 GTGlobals::sleep(100);
4002 GTThread::waitForMainThread();
4003 }
4004 const int scrolledValue = vscroll->value();
4005 CHECK_SET_ERR(scrolledValue > 0, QString("scroll down works wrong. Scrollbar has value: %1").arg(vscroll->value()));
4006 GTGlobals::sleep(500);
4007
4008 for (int i = 0; i < 2; i++) {
4009 GTMouseDriver::scroll(1);
4010 GTGlobals::sleep(500);
4011 GTThread::waitForMainThread();
4012 }
4013 CHECK_SET_ERR(0 < vscroll->value() && vscroll->value() < scrolledValue, QString("scroll up works wrong. Scrollbar has value: %1").arg(vscroll->value()));
4014 }
4015
GUI_TEST_CLASS_DEFINITION(test_0070)4016 GUI_TEST_CLASS_DEFINITION(test_0070) {
4017 // Open empty alignment
4018 GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
4019 GTUtilsTaskTreeView::waitTaskFinished(os);
4020 // Press on nameList area
4021 GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_name_list"));
4022 // Check state
4023 }
4024
GUI_TEST_CLASS_DEFINITION(test_0071)4025 GUI_TEST_CLASS_DEFINITION(test_0071) {
4026 // Open COI.aln
4027 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4028 GTUtilsTaskTreeView::waitTaskFinished(os);
4029 // Click on some character on sequence area
4030 GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 2));
4031 // Press on other character with shift modifier
4032 GTKeyboardDriver::keyPress(Qt::Key_Shift);
4033 GTUtilsMSAEditorSequenceArea::click(os, QPoint(8, 8));
4034 GTKeyboardDriver::keyRelease(Qt::Key_Shift);
4035 // Expected state: selection is created on these characters
4036 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(2, 2), QPoint(8, 8)));
4037 }
4038
GUI_TEST_CLASS_DEFINITION(test_0072)4039 GUI_TEST_CLASS_DEFINITION(test_0072) {
4040 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "Chikungunya_E1.fasta");
4041 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4042 GTUtilsTaskTreeView::waitTaskFinished(os); // wait for overview rendering to finish.
4043
4044 GTUtilsMSAEditorSequenceArea::click(os, QPoint(5, 5));
4045 // Check keys: arrows
4046 GTKeyboardDriver::keyClick(Qt::Key_Up);
4047 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5, 4), QPoint(5, 4)));
4048
4049 GTKeyboardDriver::keyClick(Qt::Key_Left);
4050 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4, 4), QPoint(4, 4)));
4051
4052 GTKeyboardDriver::keyClick(Qt::Key_Down);
4053 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4, 5), QPoint(4, 5)));
4054
4055 GTKeyboardDriver::keyClick(Qt::Key_Right);
4056 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5, 5), QPoint(5, 5)));
4057
4058 // shift + arrows
4059 GTKeyboardDriver::keyPress(Qt::Key_Shift);
4060 GTKeyboardDriver::keyClick(Qt::Key_Up);
4061 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5, 4), QPoint(5, 5)));
4062
4063 GTKeyboardDriver::keyClick(Qt::Key_Left);
4064 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4, 4), QPoint(5, 5)));
4065
4066 GTKeyboardDriver::keyClick(Qt::Key_Down);
4067 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4, 5), QPoint(5, 5)));
4068
4069 GTKeyboardDriver::keyClick(Qt::Key_Right);
4070 GTKeyboardDriver::keyRelease(Qt::Key_Shift);
4071 GTThread::waitForMainThread();
4072 GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5, 5), QPoint(5, 5)));
4073 // end
4074 QScrollBar *hbar = GTWidget::findExactWidget<QScrollBar *>(os, "horizontal_sequence_scroll");
4075 GTKeyboardDriver::keyClick(Qt::Key_End);
4076 CHECK_SET_ERR(hbar->value() == hbar->maximum(), QString("end key scrollbar value: %1").arg(hbar->value()))
4077 // home
4078 GTKeyboardDriver::keyClick(Qt::Key_Home);
4079 CHECK_SET_ERR(hbar->value() == 0, QString("home key works wrong. Scrollbar value: %1").arg(hbar->value()))
4080 // page down
4081 GTKeyboardDriver::keyClick(Qt::Key_PageDown);
4082 CHECK_SET_ERR(hbar->value() > 20, QString("page down key works wrong. Scrollbar value: %1").arg(hbar->value()))
4083 // page up
4084 GTKeyboardDriver::keyClick(Qt::Key_PageUp);
4085 CHECK_SET_ERR(hbar->value() == 0, QString("page down key works wrong. Scrollbar value: %1").arg(hbar->value()))
4086 // end+shift
4087 QScrollBar *vbar = GTWidget::findExactWidget<QScrollBar *>(os, "vertical_sequence_scroll");
4088 GTKeyboardDriver::keyClick(Qt::Key_End, Qt::ShiftModifier);
4089 CHECK_SET_ERR(vbar->value() == vbar->maximum(), QString("shift + end key works wrong. Scrollbar value: %1").arg(vbar->value()))
4090 // home+shift
4091 GTKeyboardDriver::keyClick(Qt::Key_Home, Qt::ShiftModifier);
4092 CHECK_SET_ERR(vbar->value() == 0, QString("shift + home key works wrong. Scrollbar value: %1").arg(vbar->value()))
4093 // page down+shift
4094 GTKeyboardDriver::keyClick(Qt::Key_PageDown, Qt::ShiftModifier);
4095 CHECK_SET_ERR(vbar->value() > 20, QString("shift + page down key works wrong. Scrollbar value: %1").arg(vbar->value()))
4096 // page up + shift
4097 GTKeyboardDriver::keyClick(Qt::Key_PageUp, Qt::ShiftModifier);
4098 CHECK_SET_ERR(vbar->value() == 0, QString("shift + page down key works wrong. Scrollbar value: %1").arg(vbar->value()))
4099 // wheel event
4100 for (int i = 0; i < 3; i++) {
4101 GTMouseDriver::scroll(-1);
4102 GTThread::waitForMainThread();
4103 }
4104
4105 int scrollBarOffset = hbar->value();
4106 int minCharWidth = 12;
4107 int maxCharWidth = 24;
4108 CHECK_SET_ERR(scrollBarOffset % 3 == 0 && scrollBarOffset >= 3 * minCharWidth && scrollBarOffset <= 3 * maxCharWidth,
4109 QString("scroll down works wrong. Scrollbar has value: %1").arg(hbar->value()));
4110
4111 for (int i = 0; i < 2; i++) {
4112 GTMouseDriver::scroll(1);
4113 GTThread::waitForMainThread();
4114 }
4115 scrollBarOffset = hbar->value();
4116 CHECK_SET_ERR(scrollBarOffset >= minCharWidth && scrollBarOffset <= maxCharWidth, QString("scroll up works wrong. Scrollbar has value: %1").arg(hbar->value()));
4117 }
4118
GUI_TEST_CLASS_DEFINITION(test_0073)4119 GUI_TEST_CLASS_DEFINITION(test_0073) {
4120 // Open COI.aln
4121 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4122 GTUtilsTaskTreeView::waitTaskFinished(os);
4123 // Unload document
4124 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__unload_selected_action"));
4125 GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
4126 GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
4127 // Use context menu on object: {Open view -> Open new view: Alignment editor}
4128 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View"
4129 << "action_open_view"));
4130 GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
4131 // Expected: view is opened, document is loaded
4132 GTUtilsMdi::findWindow(os, "COI [COI.aln]");
4133 }
4134
GUI_TEST_CLASS_DEFINITION(test_0074)4135 GUI_TEST_CLASS_DEFINITION(test_0074) {
4136 // Open COI.aln
4137 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4138 GTUtilsTaskTreeView::waitTaskFinished(os);
4139 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(0, 5));
4140 // Open "Export subalignment" dialog
4141 class custom : public CustomScenario {
4142 public:
4143 void run(HI::GUITestOpStatus &os) override {
4144 QWidget *dialog = GTWidget::getActiveModalWidget(os);
4145 GTGlobals::sleep(500);
4146
4147 QStringList list = ExtractSelectedAsMSADialogFiller::getSequences(os, true);
4148 CHECK_SET_ERR(list.first() == "Phaneroptera_falcata", "unexpected first sequence: " + list.first());
4149 CHECK_SET_ERR(list.last() == "Metrioptera_japonica_EF540831", "unexpected last sequence: " + list.last());
4150 CHECK_SET_ERR(list.size() == 6, QString("Unexpected initial list size: %1").arg(list.size()));
4151 // Press "Invert selection" button. Expected: selection is inverted
4152 GTWidget::click(os, GTWidget::findWidget(os, "invertButton", dialog));
4153 list = ExtractSelectedAsMSADialogFiller::getSequences(os, true);
4154 CHECK_SET_ERR(list.first() == "Gampsocleis_sedakovii_EF540828", "unexpected first sequence(inverted): " + list.first());
4155 CHECK_SET_ERR(list.last() == "Hetrodes_pupus_EF540832", "unexpected last sequence(inverted): " + list.last());
4156 CHECK_SET_ERR(list.size() == 12, QString("Unexpected initial list size: %1").arg(list.size()));
4157 // Press "Select all" button. Expected: all sequences selected
4158 GTWidget::click(os, GTWidget::findWidget(os, "allButton", dialog));
4159 list = ExtractSelectedAsMSADialogFiller::getSequences(os, true);
4160 CHECK_SET_ERR(list.first() == "Phaneroptera_falcata", "unexpected first sequence(all): " + list.first());
4161 CHECK_SET_ERR(list.last() == "Hetrodes_pupus_EF540832", "unexpected last sequence(all): " + list.last());
4162 CHECK_SET_ERR(list.size() == 18, QString("Unexpected initial list size: %1").arg(list.size()));
4163
4164 GTWidget::click(os, GTWidget::findWidget(os, "noneButton", dialog));
4165 list = ExtractSelectedAsMSADialogFiller::getSequences(os, true);
4166 CHECK_SET_ERR(list.isEmpty(), QString("list is not cleared: %1").arg(list.size()));
4167
4168 GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
4169 }
4170 };
4171
4172 GTUtilsDialog::waitForDialog(os, new ExtractSelectedAsMSADialogFiller(os, new custom()));
4173 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save subalignment"));
4174
4175 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
4176
4177 GTGlobals::sleep(500);
4178 }
4179
GUI_TEST_CLASS_DEFINITION(test_0075)4180 GUI_TEST_CLASS_DEFINITION(test_0075) {
4181 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4182 GTUtilsTaskTreeView::waitTaskFinished(os);
4183 QWidget *overview = GTWidget::findWidget(os, "msa_overview_area_graph");
4184
4185 QImage initialImage = GTWidget::getImage(os, overview);
4186
4187 // Use context menu on overview: {Calculation method->Clustal}
4188 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {"Calculation method", "Clustal"}, GTGlobals::UseKey));
4189 GTMenu::showContextMenu(os, overview);
4190
4191 // Check that image was changed.
4192 QImage clustalModeImage = GTWidget::getImage(os, overview);
4193 CHECK_SET_ERR(initialImage != clustalModeImage, "overview was not changed (clustal)");
4194 GTUtilsTaskTreeView::waitTaskFinished(os);
4195
4196 // Switch to 'histogram' mode.
4197 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {"Display settings", "Graph type", "Histogram"}, GTGlobals::UseKey));
4198 GTMenu::showContextMenu(os, overview);
4199 GTUtilsTaskTreeView::waitTaskFinished(os);
4200 QImage histogramModeImage = GTWidget::getImage(os, overview);
4201 CHECK_SET_ERR(histogramModeImage != clustalModeImage, "overview was not changed (histogram)");
4202 }
4203
GUI_TEST_CLASS_DEFINITION(test_0076)4204 GUI_TEST_CLASS_DEFINITION(test_0076) {
4205 // Open COI.aln
4206 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4207 GTUtilsTaskTreeView::waitTaskFinished(os);
4208 QWidget *overview = GTWidget::findWidget(os, "msa_overview_area_graph");
4209 // Show simple overview
4210 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
4211 GTMenu::showContextMenu(os, overview);
4212 GTGlobals::sleep(200);
4213 QWidget *simple = GTWidget::findWidget(os, "msa_overview_area_simple");
4214 QColor initColor = GTWidget::getColor(os, simple, simple->geometry().center());
4215 QString initColorS = initColor.name();
4216 // Press on overview with mouse left button
4217
4218 GTWidget::click(os, overview);
4219 QColor finalColor = GTWidget::getColor(os, simple, simple->geometry().center());
4220 QString finalColorS = finalColor.name();
4221 CHECK_SET_ERR(initColorS != finalColorS, "color was not changed(1)");
4222 // Expected state: visible range moved
4223 // Drag visible range with mouse
4224 QColor initColor1 = GTWidget::getColor(os, simple, simple->geometry().topLeft() + QPoint(5, 5));
4225 QString initColorS1 = initColor1.name();
4226 GTMouseDriver::press();
4227 GTMouseDriver::moveTo(QPoint(10, GTMouseDriver::getMousePosition().y()));
4228 GTMouseDriver::release();
4229 GTThread::waitForMainThread();
4230 // Expected state: visible range dragged
4231 QColor finalColor1 = GTWidget::getColor(os, simple, simple->geometry().topLeft() + QPoint(5, 5));
4232 QString finalColorS1 = finalColor1.name();
4233 CHECK_SET_ERR(initColorS1 != finalColorS1, "color was not changed(2)")
4234 }
4235
GUI_TEST_CLASS_DEFINITION(test_0077)4236 GUI_TEST_CLASS_DEFINITION(test_0077) {
4237 // Open COI.aln
4238 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4239 GTUtilsTaskTreeView::waitTaskFinished(os);
4240
4241 // Open tree with msa
4242 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 0, true));
4243 GTWidget::click(os, GTAction::button(os, "Build Tree"));
4244 GTUtilsTaskTreeView::waitTaskFinished(os);
4245
4246 // Press "refresh tree" button on tree view toolbar
4247 QWidget *button = GTAction::button(os, "Refresh tree");
4248 bool vis = button->isVisible();
4249 if (vis) {
4250 GTWidget::click(os, button);
4251 } else {
4252 QWidget *extButton = GTWidget::findWidget(os, "qt_toolbar_ext_button", GTWidget::findWidget(os, "msa_editor_tree_view_container_widget"));
4253 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Refresh tree"));
4254 GTWidget::click(os, extButton);
4255 }
4256 GTUtilsTaskTreeView::waitTaskFinished(os);
4257 // Expected state: tree refreshed
4258 }
4259
GUI_TEST_CLASS_DEFINITION(test_0078)4260 GUI_TEST_CLASS_DEFINITION(test_0078) {
4261 // Open COI.aln
4262 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4263 GTUtilsTaskTreeView::waitTaskFinished(os);
4264 // Open tree with msa
4265 GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 0, true));
4266 QAbstractButton *tree = GTAction::button(os, "Build Tree");
4267 GTWidget::click(os, tree);
4268 GTGlobals::sleep();
4269 // Shrink tree view to show horizontal scrollbar
4270 // Move wheel
4271 QWidget *parent = GTWidget::findWidget(os, "qt_scrollarea_hcontainer", GTWidget::findWidget(os, "treeView"));
4272 QScrollBar *hbar = parent->findChild<QScrollBar *>();
4273 int val = hbar->value();
4274 GTGlobals::sleep();
4275
4276 GTWidget::click(os, GTWidget::findWidget(os, "treeView"));
4277 for (int i = 0; i < 2; i++) {
4278 GTMouseDriver::scroll(1);
4279 GTGlobals::sleep(100);
4280 }
4281 int val1 = hbar->value();
4282 CHECK_SET_ERR(val1 < val, QString("unexpected scroll value: %1").arg(val1));
4283 GTGlobals::sleep();
4284 }
4285
GUI_TEST_CLASS_DEFINITION(test_0079)4286 GUI_TEST_CLASS_DEFINITION(test_0079) {
4287 // Open an alignment with some alphabet.
4288 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4289
4290 // Do the action for a sequence (or sequences) of the same alphabet.
4291 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
4292
4293 GTClipboard::setText(os, ">human_T1\r\nACGTACG\r\n");
4294
4295 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY"
4296 << "paste"));
4297 GTMouseDriver::click(Qt::RightButton);
4298 GTGlobals::sleep();
4299 GTUtilsTaskTreeView::waitTaskFinished(os);
4300 const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4301
4302 // The sequence was added to the 8th position of the alignment.
4303 CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
4304 CHECK_SET_ERR(sequencesNameList[8] == "human_T1", "No pasted sequences");
4305 }
4306
GUI_TEST_CLASS_DEFINITION(test_0080)4307 GUI_TEST_CLASS_DEFINITION(test_0080) {
4308 // Open an alignment with some alphabet.
4309 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4310
4311 // Use a sequence of another alphabet.
4312 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
4313
4314 GTClipboard::setText(os, ">human_T1\r\nACGTACS\r\n");
4315
4316 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY"
4317 << "paste"));
4318
4319 // A warning notification appears:
4320 GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
4321
4322 GTMouseDriver::click(Qt::RightButton);
4323 GTGlobals::sleep();
4324
4325 const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4326
4327 // The sequence was added to the bottom of the alignment.
4328 CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
4329 CHECK_SET_ERR(sequencesNameList[8] == "human_T1", "No pasted sequences");
4330 }
4331
GUI_TEST_CLASS_DEFINITION(test_0081)4332 GUI_TEST_CLASS_DEFINITION(test_0081) {
4333 // Open an alignment with some alphabet.
4334 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4335
4336 // Use a sequence of another alphabet.
4337 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
4338
4339 GTClipboard::setText(os, ">human_T1\r\nACGTACS\r\n>human_T2\r\nACGTAC\r\n");
4340
4341 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY"
4342 << "paste"));
4343
4344 // A warning notification appears:
4345 GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
4346
4347 GTMouseDriver::click(Qt::RightButton);
4348 GTGlobals::sleep();
4349
4350 const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4351
4352 // The sequence was added to the bottom of the alignment.
4353 CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
4354 CHECK_SET_ERR(sequencesNameList[9] == "human_T2", "No pasted sequences");
4355 }
4356
GUI_TEST_CLASS_DEFINITION(test_0082)4357 GUI_TEST_CLASS_DEFINITION(test_0082) {
4358 // Open an alignment with some alphabet.
4359 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4360
4361 // Use a sequence of another alphabet.
4362 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
4363
4364 GTClipboard::setText(os, ">human_T1\r\nACGTAC\r\n>human_T2\r\nACGTACS\r\n>human_T3\r\nACGTAC\r\n");
4365
4366 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY"
4367 << "paste"));
4368
4369 // A warning notification appears:
4370 GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
4371
4372 GTMouseDriver::click(Qt::RightButton);
4373 GTGlobals::sleep();
4374
4375 const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4376
4377 // The sequence was added to the bottom of the alignment.
4378 CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
4379 CHECK_SET_ERR(sequencesNameList[10] == "human_T3", "No pasted sequences");
4380 }
4381
GUI_TEST_CLASS_DEFINITION(test_0083)4382 GUI_TEST_CLASS_DEFINITION(test_0083) {
4383 // Open an alignment with some alphabet.
4384 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4385 GTUtilsTaskTreeView::waitTaskFinished(os);
4386
4387 // Use a sequence of another alphabet.
4388 GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
4389
4390 GTClipboard::setText(os, ">human_T1\r\nACGTAC\r\n>human_T2\r\nACGTACS\r\n>human_T3\r\nQQ\r\n");
4391
4392 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY"
4393 << "paste"));
4394
4395 // A warning notification appears:
4396 GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Raw\"");
4397
4398 GTMouseDriver::click(Qt::RightButton);
4399 GTUtilsDialog::waitAllFinished(os);
4400
4401 const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4402
4403 // The sequence was added to the bottom of the alignment.
4404 CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
4405 CHECK_SET_ERR(sequencesNameList[10] == "human_T3", "No pasted sequences");
4406 }
4407
GUI_TEST_CLASS_DEFINITION(test_0090)4408 GUI_TEST_CLASS_DEFINITION(test_0090) {
4409 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
4410 GTUtilsTaskTreeView::waitTaskFinished(os);
4411 QWidget *sequenceAreaWidget = GTUtilsMsaEditor::getSequenceArea(os);
4412
4413 // Check that sequence area cell contains a text character up until the cell size is > 7px.
4414 // 7px is a hardcoded constant in the MA editor.
4415 const int minWidthToShowText = 7;
4416 QRect prevRect(0, 0, 10000, 10000);
4417 while (true) {
4418 QRect globalRect = GTUtilsMSAEditorSequenceArea::getPositionRect(os, QPoint(0, 0));
4419 // TODO: using '-1' due to the bug in getPositionRect or in rendering:
4420 // the cellImageRect contains border-line pixels from the next base.
4421 QRect cellImageRect(0, 0, globalRect.width() - 1, globalRect.height() - 1);
4422 QImage sequenceAreaImage = GTWidget::getImage(os, sequenceAreaWidget, true);
4423 QImage cellImage = GTWidget::createSubImage(os, sequenceAreaImage, cellImageRect);
4424 bool hasOnlyBgColor = GTWidget::hasSingleFillColor(cellImage, "#FF99B1");
4425 bool hasTextInTheCell = !hasOnlyBgColor;
4426 if (globalRect.width() >= minWidthToShowText) {
4427 CHECK_SET_ERR(hasTextInTheCell, "Expected to have text with the given zoom range");
4428 } else {
4429 CHECK_SET_ERR(!hasTextInTheCell, "Expected to have no text with the given zoom range");
4430 break;
4431 }
4432 // Check that at least one rect dimension was reduced. Some fonts on Windows may have equal width on "Zoom Out" but in this case they always have different height.
4433 bool isWidthReduced = globalRect.width() < prevRect.width();
4434 bool isHeightReduced = globalRect.height() < prevRect.height();
4435 CHECK_SET_ERR(isWidthReduced || isHeightReduced, "Zoom Out had no effect");
4436 prevRect = globalRect;
4437
4438 GTUtilsMsaEditor::zoomOut(os);
4439 }
4440 }
4441
GUI_TEST_CLASS_DEFINITION(test_0091)4442 GUI_TEST_CLASS_DEFINITION(test_0091) {
4443 // 1. Open file _common_data\scenarios\msa\nucl_with_leading_gaps.aln
4444 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/nucl_with_leading_gaps.aln");
4445 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4446 GTUtils::checkExportServiceIsEnabled(os);
4447
4448 // 2. Do document context menu {Export->Export aligniment to amino format}
4449 // 3. Translate with "Include gaps"
4450 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0091.aln", true));
4451 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
4452 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
4453 GTUtilsTaskTreeView::waitTaskFinished(os);
4454
4455 // 4. Copy to clipboard
4456 GTUtilsMSAEditorSequenceArea::selectArea(os);
4457 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
4458
4459 // Expected: TAVS\nXXVS
4460 const QString clipboardText = GTClipboard::text(os);
4461 const QString expectedMSA = "TAVS\nXXVS";
4462 CHECK_SET_ERR(clipboardText == expectedMSA, QString("Expected: %1, current: %2").arg(expectedMSA).arg(clipboardText));
4463 }
4464
GUI_TEST_CLASS_DEFINITION(test_0092)4465 GUI_TEST_CLASS_DEFINITION(test_0092) {
4466 // 1. Open file _common_data\scenarios\msa\nucl_with_leading_gaps.aln
4467 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/nucl_with_leading_gaps.aln");
4468 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4469 GTUtils::checkExportServiceIsEnabled(os);
4470
4471 // 2. Do document context menu {Export->Export aligniment to amino format}
4472 // 3. Translate with "Include gaps", click on the "Gap" radio button
4473 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0092.aln", true, true));
4474 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
4475 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
4476 GTUtilsTaskTreeView::waitTaskFinished(os);
4477
4478 // 4. Copy to clipboard
4479 GTUtilsMSAEditorSequenceArea::selectArea(os);
4480 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
4481
4482 // Expected: TAVS\n--VS
4483 const QString clipboardText = GTClipboard::text(os);
4484 const QString expectedMSA = "TAVS\n--VS";
4485 CHECK_SET_ERR(clipboardText == expectedMSA, QString("Expected: %1, current: %2").arg(expectedMSA).arg(clipboardText));
4486 }
4487
GUI_TEST_CLASS_DEFINITION(test_0093_1)4488 GUI_TEST_CLASS_DEFINITION(test_0093_1) {
4489 // 1. Open file _common_data\scenarios\msa\nucl_with_leading_gaps.aln
4490 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/nucl_with_leading_gaps.aln");
4491 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4492 GTUtils::checkExportServiceIsEnabled(os);
4493
4494 // 2. Do document context menu {Export->Export aligniment to amino format}
4495 // 3. Translate with "frame" 2
4496 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0093.aln", false, false, 2));
4497 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
4498 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
4499 GTUtilsTaskTreeView::waitTaskFinished(os);
4500
4501 // 4. Copy to clipboard
4502 GTUtilsMSAEditorSequenceArea::selectArea(os);
4503 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
4504
4505 // Expected: PPCP\nCP--
4506 const QString clipboardText = GTClipboard::text(os);
4507 const QString expectedMSA = "PPCP\nCP--";
4508 CHECK_SET_ERR(clipboardText == expectedMSA, QString("Expected: %1, current: %2").arg(expectedMSA).arg(clipboardText));
4509 }
4510
GUI_TEST_CLASS_DEFINITION(test_0093_2)4511 GUI_TEST_CLASS_DEFINITION(test_0093_2) {
4512 // 1. Open file _common_data\scenarios\msa\nucl_with_leading_gaps.aln
4513 GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/nucl_with_leading_gaps.aln");
4514 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4515 GTUtils::checkExportServiceIsEnabled(os);
4516
4517 // 2. Do document context menu {Export->Export aligniment to amino format}
4518 // 3. Translate with "frame" -3
4519 GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0093.aln", false, false, -3));
4520 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
4521 GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
4522 GTUtilsTaskTreeView::waitTaskFinished(os);
4523
4524 // 4. Copy to clipboard
4525 GTUtilsMSAEditorSequenceArea::selectArea(os);
4526 GTUtilsMSAEditorSequenceArea::copySelectionByContextMenu(os);
4527
4528 // Expected: GGHG\nHG--
4529 const QString clipboardText = GTClipboard::text(os);
4530 const QString expectedMSA = "GHGG\nGH--";
4531
4532 CHECK_SET_ERR(clipboardText == expectedMSA, QString("Expected: %1, current: %2").arg(expectedMSA).arg(clipboardText));
4533 }
4534
GUI_TEST_CLASS_DEFINITION(test_0094)4535 GUI_TEST_CLASS_DEFINITION(test_0094) {
4536 // Check that sort by group size works correctly.
4537
4538 GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
4539 GTUtilsTaskTreeView::waitTaskFinished(os);
4540 GTUtilsMsaEditor::toggleCollapsingMode(os);
4541
4542 // Check that group is in the middle (original).
4543 QStringList originalNames = GTUtilsMSAEditorSequenceArea::getVisibleNames(os, true);
4544 CHECK_SET_ERR(originalNames.size() == 17, "Wrong sequence count in collapsed mode: " + QString::number(originalNames.size()));
4545 QString expectedGroupName = "[2] Mecopoda_elongata__Ishigaki__J";
4546 CHECK_SET_ERR(originalNames[13] == expectedGroupName, "Group is not found at index 13. Found: " + expectedGroupName[13]);
4547
4548 QStringList originalNamesWithNoGroup = originalNames;
4549 originalNamesWithNoGroup.removeAt(13);
4550
4551 // Sort by group size ascending.
4552 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_SORT, "action_sort_groups_by_size_ascending"}));
4553 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
4554 QStringList ascendingNames = GTUtilsMSAEditorSequenceArea::getVisibleNames(os, true);
4555 CHECK_SET_ERR(ascendingNames.size() == 17, "Wrong sequence count after ascending sort: " + QString::number(ascendingNames.size()));
4556 CHECK_SET_ERR(ascendingNames[16] == expectedGroupName, "Group is not found at index 16. Found: " + ascendingNames[16]);
4557
4558 // Check that order of other sequences is not changed.
4559 QStringList ascendingNamesWithNoGroup = ascendingNames;
4560 ascendingNamesWithNoGroup.removeAt(16);
4561 CHECK_SET_ERR(ascendingNamesWithNoGroup == originalNamesWithNoGroup,
4562 "Ascending order was changed for non-group sequences : " + ascendingNamesWithNoGroup.join(",") +
4563 " Original: " + originalNamesWithNoGroup.join(","));
4564
4565 // Sort by group size descending.
4566 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_SORT, "action_sort_groups_by_size_descending"}));
4567 GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
4568 QStringList descendingNames = GTUtilsMSAEditorSequenceArea::getVisibleNames(os, true);
4569 CHECK_SET_ERR(descendingNames.size() == 17, "Wrong sequence count after descending sort: " + QString::number(descendingNames.size()));
4570 CHECK_SET_ERR(descendingNames[0] == expectedGroupName, "Group is not found at index 0. Found: " + descendingNames[0]);
4571
4572 // Check that order of other sequences is not changed.
4573 QStringList descendingNamesWithNoGroup = descendingNames;
4574 descendingNamesWithNoGroup.removeAt(0);
4575 CHECK_SET_ERR(descendingNamesWithNoGroup == originalNamesWithNoGroup,
4576 "Descending order was changed for non-group sequences: " + descendingNamesWithNoGroup.join(",") +
4577 " Original: " + originalNamesWithNoGroup.join(","));
4578 }
4579
GUI_TEST_CLASS_DEFINITION(test_0095)4580 GUI_TEST_CLASS_DEFINITION(test_0095) {
4581 // Check that sequences can be moved from one alignment into another.
4582 QString sourceFile = "align.aln"; // {"IXI_234", "IXI_236", "IXI_237", "IXI_235"}
4583 QString targetFile = "amino_from_wikipedia.aln"; // {"CYS1_DICDI", "ALEU_HORVU", "CATH_HUMAN"}
4584
4585 GTFileDialog::openFile(os, testDir + "_common_data/clustal/" + sourceFile);
4586 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4587
4588 // Check that 'Move' menu is disabled (no active selection).
4589 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object"}, PopupChecker::IsDisabled));
4590 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4591
4592 // Select a couple of sequences and check that 'Move' menu is enabled now and have a disabled "No other objects" item.
4593 GTUtilsMsaEditor::selectRowsByName(os, {"IXI_234", "IXI_235"});
4594 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "no_other_objects_item"}, PopupChecker::IsDisabled));
4595 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4596 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "move_selection_to_new_file"}, PopupChecker::IsEnabled));
4597 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4598
4599 // Open another file. Check that sequences can be moved now. Move them.
4600 GTFileDialog::openFile(os, testDir + "_common_data/clustal/" + targetFile);
4601 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4602
4603 GTUtilsMdi::activateWindow(os, sourceFile);
4604 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", targetFile}));
4605 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4606 GTUtilsTaskTreeView::waitTaskFinished(os);
4607
4608 Document *sourceDoc = GTUtilsDocument::getDocument(os, sourceFile);
4609 Document *targetDoc = GTUtilsDocument::getDocument(os, targetFile);
4610 CHECK_SET_ERR(sourceDoc->isModified(), "sourceDoc must be marked as modified");
4611 CHECK_SET_ERR(targetDoc->isModified(), "targetDoc must be marked as modified");
4612
4613 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4614 CHECK_SET_ERR(nameList == QStringList({"IXI_236", "IXI_237"}), "Unexpected source msa name list: " + nameList.join(","));
4615
4616 GTUtilsMdi::activateWindow(os, targetFile);
4617 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4618 CHECK_SET_ERR(nameList == QStringList({"CYS1_DICDI", "ALEU_HORVU", "CATH_HUMAN", "IXI_234", "IXI_235"}),
4619 "Unexpected target msa name list: " + nameList.join(","));
4620
4621 // Make the source document read-only. Check that menu is disabled.
4622 GTUtilsMdi::activateWindow(os, sourceFile);
4623 GTUtilsDocument::lockDocument(os, sourceFile);
4624 GTUtilsMsaEditor::selectRowsByName(os, {"IXI_236"});
4625 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object"}, PopupChecker::IsDisabled));
4626 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4627
4628 // Make the target file read-only and the source not. Check that menu is enabled but has no object items.
4629 GTUtilsDocument::lockDocument(os, targetFile);
4630 GTUtilsDocument::unlockDocument(os, sourceFile);
4631 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "no_other_objects_item"}, PopupChecker::IsDisabled));
4632 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4633 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", targetFile}, PopupChecker::NotExists));
4634 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4635 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "move_selection_to_new_file"}, PopupChecker::IsEnabled));
4636 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4637
4638 // Make the target file not read-only. Check that menu is back again.
4639 GTUtilsDocument::unlockDocument(os, targetFile);
4640 GTUtilsDialog::waitForDialog(os, new PopupChecker(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", targetFile}, PopupChecker::IsEnabled));
4641 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4642 }
4643
GUI_TEST_CLASS_DEFINITION(test_0096)4644 GUI_TEST_CLASS_DEFINITION(test_0096) {
4645 // Check that sequences can be moved to a new MSA document.
4646 QString sourceFile = "align.aln"; // {"IXI_234", "IXI_236", "IXI_237", "IXI_235"}
4647 QString targetAlnFile = "test_0096.aln";
4648 QString targetStoFile = "test_0096.sto";
4649
4650 GTFileDialog::openFile(os, testDir + "_common_data/clustal/" + sourceFile);
4651 GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
4652
4653 // Select a couple of sequences and check that 'Move' menu is enabled now and have a disabled "No other objects" item.
4654 GTUtilsMsaEditor::selectRowsByName(os, {"IXI_234", "IXI_237"});
4655 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "move_selection_to_new_file"}));
4656 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir, targetAlnFile, GTFileDialogUtils::Save));
4657 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4658 GTUtilsTaskTreeView::waitTaskFinished(os);
4659
4660 GTUtilsMdi::activateWindow(os, sourceFile);
4661 QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4662 CHECK_SET_ERR(nameList == QStringList({"IXI_236", "IXI_235"}), "Unexpected source msa name list: " + nameList.join(","));
4663
4664 GTUtilsMdi::activateWindow(os, targetAlnFile);
4665 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4666 CHECK_SET_ERR(nameList == QStringList({"IXI_234", "IXI_237"}), "Unexpected targetAln msa name list: " + nameList.join(","));
4667
4668 // Now export using Stockholm format.
4669 GTUtilsMsaEditor::selectRowsByName(os, {"IXI_237"});
4670 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, {MSAE_MENU_EXPORT, "move_selection_to_another_object", "move_selection_to_new_file"}));
4671 GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir, targetStoFile, GTFileDialogUtils::Save));
4672 GTUtilsMSAEditorSequenceArea::callContextMenu(os);
4673 GTUtilsTaskTreeView::waitTaskFinished(os);
4674 nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
4675 CHECK_SET_ERR(nameList == QStringList({"IXI_237"}), "Unexpected targetSto msa name list: " + nameList.join(","));
4676
4677 // Check modification flags & formats.
4678 Document *sourceDoc = GTUtilsDocument::getDocument(os, sourceFile);
4679 Document *targetAlnDoc = GTUtilsDocument::getDocument(os, targetAlnFile);
4680 Document *targetStoDoc = GTUtilsDocument::getDocument(os, targetStoFile);
4681 CHECK_SET_ERR(sourceDoc->isModified(), "sourceDoc must be marked as modified");
4682 CHECK_SET_ERR(targetAlnDoc->isModified(), "targetAlnDoc must be marked as modified");
4683 CHECK_SET_ERR(!targetStoDoc->isModified(), "targetStoDoc must not be marked as modified");
4684
4685 CHECK_SET_ERR(targetAlnDoc->getDocumentFormatId() == BaseDocumentFormats::CLUSTAL_ALN, "targetAlnDoc's format must be CLUSTALW");
4686 CHECK_SET_ERR(targetStoDoc->getDocumentFormatId() == BaseDocumentFormats::STOCKHOLM, "targetStoDoc's format must be Stockholm");
4687 }
4688
4689 } // namespace GUITest_common_scenarios_msa_editor
4690 } // namespace U2
4691