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