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/GTFileDialog.h>
25 #include <base_dialogs/MessageBoxFiller.h>
26 #include <drivers/GTKeyboardDriver.h>
27 #include <drivers/GTMouseDriver.h>
28 #include <primitives/GTAction.h>
29 #include <primitives/GTCheckBox.h>
30 #include <primitives/GTComboBox.h>
31 #include <primitives/GTDoubleSpinBox.h>
32 #include <primitives/GTLineEdit.h>
33 #include <primitives/GTMenu.h>
34 #include <primitives/GTRadioButton.h>
35 #include <primitives/GTSlider.h>
36 #include <primitives/GTWidget.h>
37 #include <primitives/PopupChooser.h>
38 #include <system/GTFile.h>
39 #include <utils/GTThread.h>
40 
41 #include <QApplication>
42 #include <QDir>
43 #include <QGraphicsItem>
44 #include <QMainWindow>
45 
46 #include <U2Core/AppContext.h>
47 
48 #include "GTTestsOptionPanelMSA.h"
49 #include "GTUtilsLog.h"
50 #include "GTUtilsMdi.h"
51 #include "GTUtilsMsaEditor.h"
52 #include "GTUtilsMsaEditorSequenceArea.h"
53 #include "GTUtilsOptionPanelMSA.h"
54 #include "GTUtilsPhyTree.h"
55 #include "GTUtilsProjectTreeView.h"
56 #include "GTUtilsTaskTreeView.h"
57 #include "api/GTBaseCompleter.h"
58 #include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
59 
60 namespace U2 {
61 
62 namespace GUITest_common_scenarios_options_panel_MSA {
63 using namespace HI;
GUI_TEST_CLASS_DEFINITION(general_test_0001)64 GUI_TEST_CLASS_DEFINITION(general_test_0001) {
65     const QString seqName = "Phaneroptera_falcata";
66     //    1. Open file data/samples/CLUSTALW/COI.aln
67     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
68     GTUtilsTaskTreeView::waitTaskFinished(os);
69     //    2. Open general option panel tab
70     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
71     //    3. Use button to add Phaneroptera_falcata as referene
72     GTUtilsOptionPanelMsa::addReference(os, seqName);
73     //    Expected state:
74     //    reference sequence line edit is empty
75     QLineEdit *sequenceLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "sequenceLineEdit"));
76     CHECK_SET_ERR(sequenceLineEdit != nullptr, "sequenceLineEdit not found");
77     QString text = sequenceLineEdit->text();
78     CHECK_SET_ERR(text == seqName, QString("sequenceLineEdit contains %1, expected: %2").arg(text).arg(seqName));
79     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::isSequenceHighlighted(os, seqName), "sequence not highlighted");
80     //    Expected state: Phaneroptera_falcata highlighted as reference
81 
82     //    4. Use button to remove reference
83     GTUtilsOptionPanelMsa::removeReference(os);
84     //    Expected state:
85     //    reference sequence line edit contains "select and add"
86     //    Phaneroptera_falcata is not highlighted as reference
87     text = sequenceLineEdit->text();
88     CHECK_SET_ERR(text.isEmpty(), QString("sequenceLineEdit contains %1, no text expected").arg(text));
89     CHECK_SET_ERR(!GTUtilsMSAEditorSequenceArea::isSequenceHighlighted(os, seqName), "sequence not highlighted");
90 }
91 
GUI_TEST_CLASS_DEFINITION(general_test_0001_1)92 GUI_TEST_CLASS_DEFINITION(general_test_0001_1) {
93     // Difference: popup completer is used
94     const QString seqName = "Phaneroptera_falcata";
95     //    1. Open file data/samples/CLUSTALW/COI.aln
96     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
97     GTUtilsTaskTreeView::waitTaskFinished(os);
98     //    2. Open general option panel tab
99     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
100     //    3. Use button to add Phaneroptera_falcata as reference
101     GTUtilsOptionPanelMsa::addReference(os, seqName, GTUtilsOptionPanelMsa::Completer);
102     //    Expected state:
103     //    reference sequence line edit contains Phaneroptera_falcata
104     QLineEdit *sequenceLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "sequenceLineEdit"));
105     CHECK_SET_ERR(sequenceLineEdit != nullptr, "sequenceLineEdit not found");
106     QString text = sequenceLineEdit->text();
107     CHECK_SET_ERR(text == seqName, QString("sequenceLineEdit contains %1, expected: %2").arg(text).arg(seqName));
108     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::isSequenceHighlighted(os, seqName), "sequence not highlighted");
109     //    Phaneroptera_falcata highlighted as reference
110 
111     //    4. Use button to remove reference
112     GTUtilsOptionPanelMsa::removeReference(os);
113     //    Expected state:
114     //    reference sequence line edit contains "select and add"
115     //    Phaneroptera_falcata is not highlighted as reference
116     text = sequenceLineEdit->text();
117     CHECK_SET_ERR(text.isEmpty(), QString("sequenceLineEdit contains %1, no text expected").arg(text));
118     CHECK_SET_ERR(!GTUtilsMSAEditorSequenceArea::isSequenceHighlighted(os, seqName), "sequence not highlighted");
119 }
120 
GUI_TEST_CLASS_DEFINITION(general_test_0002)121 GUI_TEST_CLASS_DEFINITION(general_test_0002) {
122     const QString seqName = "Phaneroptera_falcata";
123     // 1. Open file data/samples/CLUSTALW/COI.aln
124     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
125     GTUtilsTaskTreeView::waitTaskFinished(os);
126     // 2. Open general option panel tab
127     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
128     // 3. Type "phan" in reference line edit
129     QLineEdit *sequenceLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "sequenceLineEdit"));
130     CHECK_SET_ERR(sequenceLineEdit != nullptr, "sequenceLineEdit not found");
131     GTLineEdit::setText(os, sequenceLineEdit, "phan");
132     QStringList names = GTBaseCompleter::getNames(os, sequenceLineEdit);
133     // Expected state: popup helper contains Phaneroptera_falcata.(case insensitivity is checked)
134     int num = names.count();
135     CHECK_SET_ERR(num == 1, QString("wrong number of sequences in completer. Expected 1, found %1").arg(num));
136 
137     QString name = names.at(0);
138     CHECK_SET_ERR(name == seqName, QString("wrong sequence name. Expected %1, found %2").arg(seqName).arg(name));
139     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
140 }
141 
GUI_TEST_CLASS_DEFINITION(general_test_0003)142 GUI_TEST_CLASS_DEFINITION(general_test_0003) {
143     //    1. Open file data/samples/CLUSTALW/COI.aln
144     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
145     GTUtilsTaskTreeView::waitTaskFinished(os);
146     //    2. Open general option panel tab
147     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
148     //    3. Type some string which is not part some sequence's name
149     QLineEdit *sequenceLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "sequenceLineEdit"));
150     CHECK_SET_ERR(sequenceLineEdit != nullptr, "sequenceLineEdit not found");
151     GTLineEdit::setText(os, sequenceLineEdit, "wrong name");
152     //    Expected state: empty popup helper appeared
153     bool empty = GTBaseCompleter::isEmpty(os, sequenceLineEdit);
154     CHECK_SET_ERR(empty, "completer is not empty");
155     GTWidget::click(os, sequenceLineEdit);  // needed to close completer
156 }
157 
GUI_TEST_CLASS_DEFINITION(general_test_0004)158 GUI_TEST_CLASS_DEFINITION(general_test_0004) {
159     //    1. Open file data/samples/CLUSTALW/COI.aln
160     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
161     GTUtilsTaskTreeView::waitTaskFinished(os);
162     //    2. Open general option panel tab
163     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
164     //    3. Rename Isophya_altaica_EF540820 to Phaneroptera_falcata
165     GTUtilsMSAEditorSequenceArea::renameSequence(os, "Isophya_altaica_EF540820", "Phaneroptera_falcata");
166     //    4. Type "phan" in reference line edit
167     QLineEdit *sequenceLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "sequenceLineEdit"));
168     CHECK_SET_ERR(sequenceLineEdit != nullptr, "sequenceLineEdit not found");
169     GTLineEdit::setText(os, sequenceLineEdit, "Phan");
170     QStringList completerList = GTBaseCompleter::getNames(os, sequenceLineEdit);
171     //    Expected state: two sequence names "Phaneroptera_falcata" appeared in popup helper
172     CHECK_SET_ERR(completerList.count() == 2, "wrong number of sequences in completer");
173     QString first = completerList.at(0);
174     QString second = completerList.at(1);
175     CHECK_SET_ERR(first == "Phaneroptera_falcata", QString("first sequence in completer is wrong: %1").arg(first))
176     CHECK_SET_ERR(second == "Phaneroptera_falcata", QString("second sequence in completer is wrong: %1").arg(second))
177     GTWidget::click(os, sequenceLineEdit);  // needed to close completer
178 }
179 
GUI_TEST_CLASS_DEFINITION(general_test_0005)180 GUI_TEST_CLASS_DEFINITION(general_test_0005) {
181     //    1. Open file data/samples/CLUSTALW/COI.aln
182     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
183     GTUtilsTaskTreeView::waitTaskFinished(os);
184 
185     //    2. Open general option panel tab
186     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
187 
188     //    3. Delete Hetrodes_pupus_EF540832
189     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Hetrodes_pupus_EF540832");
190     GTKeyboardDriver::keyClick(Qt::Key_Delete);
191 
192     //    Expected state: Sequence number is 17
193     const int height = GTUtilsOptionPanelMsa::getHeight(os);
194     CHECK_SET_ERR(height == 17, QString("wrong height. expected 17, found %1").arg(height));
195 
196     //    4. Select one column. Press delete
197     GTUtilsMsaEditor::clickColumn(os, 5);
198     GTKeyboardDriver::keyClick(Qt::Key_Delete);
199 
200     //    Expected state: Length is 603
201     const int length = GTUtilsOptionPanelMsa::getLength(os);
202     CHECK_SET_ERR(length == 603, QString("wrong length. expected 603, found %1").arg(length));
203 }
204 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0001)205 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001) {
206     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
207     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
208     GTUtilsTaskTreeView::waitTaskFinished(os);
209     //    2. Open highlighting option panel tab
210     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
211     //    3. Select "UGENE" color scheme
212     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
213     GTComboBox::selectItemByText(os, colorScheme, "UGENE");
214     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
215     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
216     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
217     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
218     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
219     CHECK_SET_ERR(a == "#fcff92", QString("a has color %1").arg(a));
220     CHECK_SET_ERR(t == "#ff99b1", QString("t has color %1").arg(t));
221     CHECK_SET_ERR(g == "#4eade1", QString("g has color %1").arg(g));
222     CHECK_SET_ERR(c == "#70f970", QString("c has color %1").arg(c));
223     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
224     //    4. Check colors for all symbols
225     //    (branches: check Jalview, Percentage identity, Percentage identity(gray), UGENE color schemes)
226 }
227 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_1)228 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_1) {
229     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
230     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
231     GTUtilsTaskTreeView::waitTaskFinished(os);
232     //    2. Open highlighting option panel tab
233     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
234     //    3. Select "No colors" color scheme
235     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
236     GTComboBox::selectItemByText(os, colorScheme, "No colors");
237     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
238     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
239     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
240     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
241     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
242     CHECK_SET_ERR(a == "#ffffff", QString("a has color %1").arg(a));
243     CHECK_SET_ERR(t == "#ffffff", QString("t has color %1").arg(t));
244     CHECK_SET_ERR(g == "#ffffff", QString("g has color %1").arg(g));
245     CHECK_SET_ERR(c == "#ffffff", QString("c has color %1").arg(c));
246     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
247     //    4. Check colors for all symbols
248     //    (branches: check Jalview, Percentage identity, Percentage identity(gray), UGENE color schemes)
249 }
250 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_2)251 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_2) {
252     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
253     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
254     GTUtilsTaskTreeView::waitTaskFinished(os);
255     //    2. Open highlighting option panel tab
256     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
257     //    3. Select "Jalview" color scheme
258     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
259     GTComboBox::selectItemByText(os, colorScheme, "Jalview");
260     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
261     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
262     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
263     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
264     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
265     CHECK_SET_ERR(a == "#64f73f", QString("a has color %1").arg(a));
266     CHECK_SET_ERR(t == "#3c88ee", QString("t has color %1").arg(t));
267     CHECK_SET_ERR(g == "#eb413c", QString("g has color %1").arg(g));
268     CHECK_SET_ERR(c == "#ffb340", QString("c has color %1").arg(c));
269     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
270     //    4. Check colors for all symbols
271     //    (branches: check Jalview, Percentage identity, Percentage identity(gray), UGENE color schemes)
272 }
273 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_3)274 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_3) {
275     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
276     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
277     GTUtilsTaskTreeView::waitTaskFinished(os);
278     //    2. Open highlighting option panel tab
279     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
280     //    3. Select "Percentage identity" color scheme
281     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
282     GTComboBox::selectItemByText(os, colorScheme, "Percentage identity");
283     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
284     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
285     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
286     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(5, 0));
287     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
288     CHECK_SET_ERR(a == "#ccccff", QString("a has color %1").arg(a));
289     CHECK_SET_ERR(t == "#ffffff", QString("t has color %1").arg(t));
290     CHECK_SET_ERR(g == "#6464ff", QString("g has color %1").arg(g));
291     CHECK_SET_ERR(c == "#9999ff", QString("c has color %1").arg(c));
292     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
293     //    4. Check colors for all symbols
294     //    (branches: check Jalview, Percentage identity, Percentage identity(gray), UGENE color schemes)
295 }
296 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_4)297 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001_4) {
298     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
299     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
300     GTUtilsTaskTreeView::waitTaskFinished(os);
301     //    2. Open highlighting option panel tab
302     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
303     //    3. Select "Percentage identity (gray)" color scheme
304     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
305     GTComboBox::selectItemByText(os, colorScheme, "Percentage identity (gray)");
306     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
307     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
308     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
309     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(5, 0));
310     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
311     CHECK_SET_ERR(a == "#cccccc", QString("a has color %1").arg(a));
312     CHECK_SET_ERR(t == "#ffffff", QString("t has color %1").arg(t));
313     CHECK_SET_ERR(g == "#646464", QString("g has color %1").arg(g));
314     CHECK_SET_ERR(c == "#999999", QString("c has color %1").arg(c));
315     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
316     //    4. Check colors for all symbols
317     //    (branches: check Jalview, Percentage identity, Percentage identity(gray), UGENE color schemes)
318 }
319 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0002)320 GUI_TEST_CLASS_DEFINITION(highlighting_test_0002) {
321     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
322     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
323     GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
324 
325     //    2. Create custom color scheme
326     QString suffix = GTUtils::genUniqueString();
327     QString schemeName = name + "Scheme" + suffix;
328     GTUtilsMSAEditorSequenceArea::createColorScheme(os, schemeName, NewColorSchemeCreator::nucl);
329 
330     //    3. Open highlighting option panel tab
331     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
332     GTUtilsOptionPanelMsa::isTabOpened(os, GTUtilsOptionPanelMsa::Highlighting);
333 
334     //    Expected state: color scheme added to "Color" combobox
335     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
336     GTComboBox::selectItemByText(os, colorScheme, "No colors");
337     GTComboBox::selectItemByText(os, colorScheme, schemeName);
338 
339     //    4. Select custom scheme
340     //    Expected state: scheme changed
341     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
342     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
343     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
344     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
345     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
346     CHECK_SET_ERR(a == "#fcff92", QString("a has color %1").arg(a));
347     CHECK_SET_ERR(t == "#ff99b1", QString("t has color %1").arg(t));
348     CHECK_SET_ERR(g == "#4eade1", QString("g has color %1").arg(g));
349     CHECK_SET_ERR(c == "#70f970", QString("c has color %1").arg(c));
350     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
351 }
352 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0002_1)353 GUI_TEST_CLASS_DEFINITION(highlighting_test_0002_1) {
354     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
355     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
356     GTUtilsTaskTreeView::waitTaskFinished(os);
357     //    2. Create 3 color schemes
358     QString suffix = GTUtils::genUniqueString();
359     QString scheme1 = name + "_scheme1" + suffix;
360     QString scheme2 = name + "_scheme2" + suffix;
361     QString scheme3 = name + "_scheme3" + suffix;
362     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme1, NewColorSchemeCreator::nucl);
363     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme2, NewColorSchemeCreator::nucl);
364     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme3, NewColorSchemeCreator::nucl);
365     //    Expected state: color schemes added to "Color" combobox
366     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
367     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
368     GTComboBox::selectItemByText(os, colorScheme, scheme1);
369     GTComboBox::selectItemByText(os, colorScheme, scheme2);
370     GTComboBox::selectItemByText(os, colorScheme, scheme3);
371 }
372 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0003)373 GUI_TEST_CLASS_DEFINITION(highlighting_test_0003) {
374     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
375     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
376     GTUtilsTaskTreeView::waitTaskFinished(os);
377     //    2. Create custom color scheme
378     QString suffix = GTUtils::genUniqueString();
379     const QString scheme = name + "_scheme111111111111111111111111111111111111111111111" + suffix;
380     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme, NewColorSchemeCreator::nucl);
381     //    3. Open highlighting option panel tab
382     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
383     //    4. Select custom scheme
384     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
385     GTComboBox::selectItemByText(os, colorScheme, scheme);
386     //    5. Delete scheme which is selected
387     GTUtilsMSAEditorSequenceArea::deleteColorScheme(os, scheme);
388 
389     //    UGENE not crashes
390     //    default color sheme is selected
391     const QString currentScheme = colorScheme->currentText();
392     CHECK_SET_ERR(currentScheme == "UGENE", QString("wrong color scheme selected: expected '%1', got '%2'").arg("UGENE").arg(currentScheme));
393 
394     const QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
395     const QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
396     const QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
397     const QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
398     const QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
399     CHECK_SET_ERR(a == "#fcff92", QString("a has color %1").arg(a));
400     CHECK_SET_ERR(t == "#ff99b1", QString("t has color %1").arg(t));
401     CHECK_SET_ERR(g == "#4eade1", QString("g has color %1").arg(g));
402     CHECK_SET_ERR(c == "#70f970", QString("c has color %1").arg(c));
403     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
404 }
405 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004)406 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004) {
407     //    1. Open file test/_common_data/alphabets/extended_amino.aln
408     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
409     GTUtilsTaskTreeView::waitTaskFinished(os);
410     //    2. Open highlighting option panel tab
411     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
412     //    3. Select "No color" color scheme
413     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
414     GTComboBox::selectItemByText(os, colorScheme, "No colors");
415     //    4. Check colors for all symbols
416     for (int i = 0; i < 29; i++) {
417         GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(i, 0), "#ffffff");
418     }
419 }
420 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_1)421 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_1) {
422     //    1. Open file test/_common_data/alphabets/extended_amino.aln
423     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
424     GTUtilsTaskTreeView::waitTaskFinished(os);
425     //    2. Open highlighting option panel tab
426     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
427     //    3. Select "Buried index" color scheme
428     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
429     GTComboBox::selectItemByText(os, colorScheme, "Buried index");
430     //    4. Check colors for all symbols
431     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#00a35c");  // a
432     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#00eb14");  // b
433     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#0000ff");  // c
434     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#00eb14");  // d
435     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#00f10e");  // e
436     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#008778");  // f
437     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#009d62");  // g
438     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#00d52a");  // h
439     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#0054ab");  // i
440     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
441     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#00ff00");  // k
442     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#007b84");  // l
443     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#009768");  // m
444     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#00eb14");  // n
445     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
446     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#00e01f");  // p
447     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#00f10e");  // q
448     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#00fc03");  // r
449     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#00d52a");  // s
450     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#00db24");  // t
451     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
452     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#005fa0");  // v
453     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#00a857");  // w
454     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#00b649");  // x
455     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#00e619");  // y
456     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#00f10e");  // z
457     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
458     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
459 }
460 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_2)461 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_2) {
462     //    1. Open file test/_common_data/alphabets/extended_amino.aln
463     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
464     GTUtilsTaskTreeView::waitTaskFinished(os);
465     //    2. Open highlighting option panel tab
466     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
467     //    3. Select "Clustal X" color scheme
468     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
469     GTComboBox::selectItemByText(os, colorScheme, "Clustal X");
470     //    4. Check colors for all symbols
471     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#80a0f0");  // a
472     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#ffffff");  // b
473     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#f08080");  // c
474     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#c048c0");  // d
475     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#c048c0");  // e
476     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#80a0f0");  // f
477     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#f09048");  // g
478     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#15a4a4");  // h
479     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#80a0f0");  // i
480     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
481     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#f01505");  // k
482     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#80a0f0");  // l
483     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#80a0f0");  // m
484     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#15c015");  // n
485     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
486     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#c0c000");  // p
487     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#15c015");  // q
488     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#f01505");  // r
489     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#15c015");  // s
490     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#15c015");  // t
491     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
492     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#80a0f0");  // v
493     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#80a0f0");  // w
494     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#ffffff");  // x
495     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#15a4a4");  // y
496     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#ffffff");  // z
497     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
498     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
499 }
500 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_3)501 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_3) {
502     //    1. Open file test/_common_data/alphabets/extended_amino.aln
503     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
504     GTUtilsTaskTreeView::waitTaskFinished(os);
505     //    2. Open highlighting option panel tab
506     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
507     //    3. Select "Helix propensity" color scheme
508     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
509     GTComboBox::selectItemByText(os, colorScheme, "Helix propensity");
510     //    4. Check colors for all symbols
511     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#e718e7");  // a
512     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#49b649");  // b
513     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#23dc23");  // c
514     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#778877");  // d
515     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#ff00ff");  // e
516     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#986798");  // f
517     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#00ff00");  // g
518     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#758a75");  // h
519     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#8a758a");  // i
520     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
521     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#a05fa0");  // k
522     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#ae51ae");  // l
523     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#ef10ef");  // m
524     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#1be41b");  // n
525     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
526     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#00ff00");  // p
527     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#926d92");  // q
528     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#6f906f");  // r
529     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#36c936");  // s
530     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#47b847");  // t
531     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
532     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#857a85");  // v
533     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#8a758a");  // w
534     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#758a75");  // x
535     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#21de21");  // y
536     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#c936c9");  // z
537     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
538     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
539 }
540 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_4)541 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_4) {
542     //    1. Open file test/_common_data/alphabets/extended_amino.aln
543     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
544     GTUtilsTaskTreeView::waitTaskFinished(os);
545     //    2. Open highlighting option panel tab
546     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
547     //    3. Select "Hydrophobicity" color scheme
548     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
549     GTComboBox::selectItemByText(os, colorScheme, "Hydrophobicity");
550     //    4. Check colors for all symbols
551     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#ad0052");  // a
552     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#0c00f3");  // b
553     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#c2003d");  // c
554     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#0c00f3");  // d
555     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#0c00f3");  // e
556     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#cb0034");  // f
557     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#6a0095");  // g
558     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#1500ea");  // h
559     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#ff0000");  // i
560     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
561     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#0000ff");  // k
562     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#ea0015");  // l
563     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#b0004f");  // m
564     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#0c00f3");  // n
565     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
566     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#4600b9");  // p
567     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#0c00f3");  // q
568     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#0000ff");  // r
569     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#5e00a1");  // s
570     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#61009e");  // t
571     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
572     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#f60009");  // v
573     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#5b00a4");  // w
574     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#680097");  // x
575     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#4f00b0");  // y
576     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#0c00f3");  // z
577     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
578     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
579 }
580 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_5)581 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_5) {
582     //    1. Open file test/_common_data/alphabets/extended_amino.aln
583     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
584     GTUtilsTaskTreeView::waitTaskFinished(os);
585     //    2. Open highlighting option panel tab
586     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
587     //    3. Select "Strand propensity" color scheme
588     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
589     GTComboBox::selectItemByText(os, colorScheme, "Strand propensity");
590     //    4. Check colors for all symbols
591     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#5858a7");  // a
592     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#4343bc");  // b
593     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#9d9d62");  // c
594     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#2121de");  // d
595     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#0000ff");  // e
596     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#c2c23d");  // f
597     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#4949b6");  // g
598     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#60609f");  // h
599     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#ecec13");  // i
600     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
601     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#4747b8");  // k
602     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#b2b24d");  // l
603     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#82827d");  // m
604     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#64649b");  // n
605     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
606     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#2323dc");  // p
607     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#8c8c73");  // q
608     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#6b6b94");  // r
609     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#4949b6");  // s
610     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#9d9d62");  // t
611     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
612     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#ffff00");  // v
613     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#c0c03f");  // w
614     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#797986");  // x
615     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#d3d32c");  // y
616     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#4747b8");  // z
617     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
618     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
619 }
620 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_6)621 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_6) {
622     //    1. Open file test/_common_data/alphabets/extended_amino.aln
623     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
624     GTUtilsTaskTreeView::waitTaskFinished(os);
625     //    2. Open highlighting option panel tab
626     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
627     //    3. Select "Tailor" color scheme
628     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
629     GTComboBox::selectItemByText(os, colorScheme, "Tailor");
630     //    4. Check colors for all symbols
631     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#ccff00");  // a
632     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#ffffff");  // b
633     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#ffff00");  // c
634     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#ff0000");  // d
635     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#ff0066");  // e
636     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#00ff66");  // f
637     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#ff9900");  // g
638     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#0066ff");  // h
639     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#66ff00");  // i
640     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
641     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#6600ff");  // k
642     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#33ff00");  // l
643     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#00ff00");  // m
644     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#cc00ff");  // n
645     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
646     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#ffcc00");  // p
647     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#ff00cc");  // q
648     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#0000ff");  // r
649     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#ff3300");  // s
650     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#ff6600");  // t
651     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
652     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#99ff00");  // v
653     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#00ccff");  // w
654     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#ffffff");  // x
655     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#00ffcc");  // y
656     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#ffffff");  // z
657     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
658     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
659 }
660 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_7)661 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_7) {
662     //    1. Open file test/_common_data/alphabets/extended_amino.aln
663     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
664     GTUtilsTaskTreeView::waitTaskFinished(os);
665     //    2. Open highlighting option panel tab
666     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
667     //    3. Select "Turn propensity" color scheme
668     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
669     GTComboBox::selectItemByText(os, colorScheme, "Turn propensity");
670     //    4. Check colors for all symbols
671     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#2cd3d3");  // a
672     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#f30c0c");  // b
673     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#a85757");  // c
674     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#e81717");  // d
675     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#3fc0c0");  // e
676     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#1ee1e1");  // f
677     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#ff0000");  // g
678     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#708f8f");  // h
679     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#00ffff");  // i
680     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
681     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#7e8181");  // k
682     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#1ce3e3");  // l
683     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#1ee1e1");  // m
684     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#ff0000");  // n
685     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
686     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#f60909");  // p
687     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#778888");  // q
688     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#708f8f");  // r
689     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#e11e1e");  // s
690     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#738c8c");  // t
691     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
692     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#07f8f8");  // v
693     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#738c8c");  // w
694     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#7c8383");  // x
695     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#9d6262");  // y
696     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#5ba4a4");  // z
697     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
698     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
699 }
700 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_8)701 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_8) {
702     //    1. Open file test/_common_data/alphabets/extended_amino.aln
703     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
704     GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
705 
706     //    2. Open highlighting option panel tab
707     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
708     //    3. Select "UGENE" color scheme
709     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
710     GTComboBox::selectItemByText(os, colorScheme, "UGENE");
711     //    4. Check colors for all symbols
712     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#00ccff");  // a
713     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#ccff99");  // b
714     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#6600ff");  // c
715     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#ffff00");  // d
716     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#c0bdbb");  // e
717     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#3df490");  // f
718     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#ff5082");  // g
719     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#fff233");  // h
720     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#00abed");  // i
721     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#6699ff");  // j
722     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#ffee00");  // k
723     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#008fc6");  // l
724     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#1dc0ff");  // m
725     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#33ff00");  // n
726     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffff99");  // o
727     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#d5426c");  // p
728     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#3399ff");  // q
729     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#d5c700");  // r
730     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#ff83a7");  // s
731     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#ffd0dd");  // t
732     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ff00cc");  // u
733     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#ff6699");  // v
734     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#33cc78");  // w
735     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#fcfcfc");  // x
736     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#65ffab");  // y
737     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#ffffcc");  // z
738     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#33ff00");  //*
739     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
740 }
741 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_9)742 GUI_TEST_CLASS_DEFINITION(highlighting_test_0004_9) {
743     //    1. Open file test/_common_data/alphabets/extended_amino.aln
744     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
745     GTUtilsTaskTreeView::waitTaskFinished(os);
746     //    2. Open highlighting option panel tab
747     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
748     //    3. Select "Zappo" color scheme
749     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
750     GTComboBox::selectItemByText(os, colorScheme, "Zappo");
751     //    4. Check colors for all symbols
752     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#ffafaf");  // a
753     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#ffffff");  // b
754     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#ffff00");  // c
755     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#ff0000");  // d
756     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#ff0000");  // e
757     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#ffc800");  // f
758     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#ff00ff");  // g
759     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#6464ff");  // h
760     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#ffafaf");  // i
761     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
762     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#6464ff");  // k
763     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#ffafaf");  // l
764     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#ffafaf");  // m
765     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#00ff00");  // n
766     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
767     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#ff00ff");  // p
768     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#00ff00");  // q
769     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#6464ff");  // r
770     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#00ff00");  // s
771     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#00ff00");  // t
772     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
773     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#ffafaf");  // v
774     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#ffc800");  // w
775     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#ffffff");  // x
776     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#ffc800");  // y
777     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#ffffff");  // z
778     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
779     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
780 }
781 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0005)782 GUI_TEST_CLASS_DEFINITION(highlighting_test_0005) {
783     //    1. Open file test/_common_data/alphabets/extended_amino.aln
784     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
785     GTUtilsTaskTreeView::waitTaskFinished(os);
786     //    2. Create custom color scheme
787     QString suffix = GTUtils::genUniqueString();
788     const QString scheme = name + "_scheme" + suffix;
789     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme, NewColorSchemeCreator::amino);
790     //    3. Open highlighting option panel tab
791     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
792     //    Expected state: color scheme added to "Color" combobox
793     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
794     GTComboBox::selectItemByText(os, colorScheme, "No colors");
795     GTComboBox::selectItemByText(os, colorScheme, scheme);
796     //    4. Select custom scheme
797     //    Expected state: scheme changed
798     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 0), "#ad0052");  // a
799     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(1, 0), "#0c00f3");  // b
800     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 0), "#c2003d");  // c
801     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 0), "#0c00f3");  // d
802     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 0), "#0c00f3");  // e
803     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 0), "#cb0034");  // f
804     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 0), "#6a0095");  // g
805     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 0), "#1500ea");  // h
806     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(8, 0), "#ff0000");  // i
807     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(28, 0), "#ffffff");  // j
808     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(9, 0), "#0000ff");  // k
809     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(10, 0), "#ea0015");  // l
810     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(11, 0), "#b0004f");  // m
811     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(12, 0), "#0c00f3");  // n
812     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(26, 0), "#ffffff");  // o
813     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(13, 0), "#4600b9");  // p
814     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(14, 0), "#0c00f3");  // q
815     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(15, 0), "#0000ff");  // r
816     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(16, 0), "#5e00a1");  // s
817     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(17, 0), "#61009e");  // t
818     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(27, 0), "#ffffff");  // u
819     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(18, 0), "#f60009");  // v
820     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(19, 0), "#5b00a4");  // w
821     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(20, 0), "#680097");  // x
822     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(21, 0), "#4f00b0");  // y
823     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(22, 0), "#0c00f3");  // z
824     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(23, 0), "#ffffff");  //*
825     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(25, 0), "#ffffff");  // gap
826 }
827 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0005_1)828 GUI_TEST_CLASS_DEFINITION(highlighting_test_0005_1) {
829     //    1. Open file test/_common_data/alphabets/extended_amino.aln
830     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
831     GTUtilsTaskTreeView::waitTaskFinished(os);
832     //    2. Create 3 color schemes
833     QString suffix = GTUtils::genUniqueString();
834     QString scheme1 = name + "_scheme1" + suffix;
835     QString scheme2 = name + "_scheme2" + suffix;
836     QString scheme3 = name + "_scheme3" + suffix;
837     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme1, NewColorSchemeCreator::amino);
838     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme2, NewColorSchemeCreator::amino);
839     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme3, NewColorSchemeCreator::amino);
840     //    Expected state: color schemes added to "Color" combobox
841     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
842     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
843     GTComboBox::selectItemByText(os, colorScheme, scheme1);
844     GTComboBox::selectItemByText(os, colorScheme, scheme2);
845     GTComboBox::selectItemByText(os, colorScheme, scheme3);
846 }
847 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0006)848 GUI_TEST_CLASS_DEFINITION(highlighting_test_0006) {
849     //    1. Open file test/_common_data/alphabets/extended_amino.aln
850     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
851     GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
852 
853     //    2. Create custom color scheme
854     QString suffix = GTUtils::genUniqueString();
855     const QString scheme = name + "_scheme" + suffix;
856     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme, NewColorSchemeCreator::amino);
857 
858     //    3. Open highlighting option panel tab
859     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
860     GTUtilsOptionPanelMsa::checkTabIsOpened(os, GTUtilsOptionPanelMsa::Highlighting);
861 
862     //    4. Select custom scheme
863     QComboBox *colorScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
864     GTComboBox::selectItemByText(os, colorScheme, scheme);
865 
866     //    5. Delete scheme which is selected
867     GTUtilsMSAEditorSequenceArea::deleteColorScheme(os, scheme);
868 
869     //    UGENE doesn't crash
870     const QString currentScheme = GTUtilsOptionPanelMsa::getColorScheme(os);
871     CHECK_SET_ERR(currentScheme == "UGENE", QString("An unexpected color scheme is set: expect '%1', got '%2'").arg("UGENE").arg(currentScheme));
872 
873     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Appearance"
874                                                                               << "Colors"
875                                                                               << "UGENE",
876                                                             PopupChecker::IsChecked));
877     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
878 
879     GTUtilsOptionPanelMsa::closeTab(os, GTUtilsOptionPanelMsa::Highlighting);
880 }
881 
882 namespace {
setHighlightingType(HI::GUITestOpStatus & os,const QString & type)883 void setHighlightingType(HI::GUITestOpStatus &os, const QString &type) {
884     QComboBox *highlightingScheme = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "highlightingScheme"));
885     CHECK_SET_ERR(highlightingScheme != nullptr, "highlightingScheme not found");
886     GTComboBox::selectItemByText(os, highlightingScheme, type);
887 }
888 }  // namespace
889 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0007)890 GUI_TEST_CLASS_DEFINITION(highlighting_test_0007) {
891     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
892     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
893     GTUtilsTaskTreeView::waitTaskFinished(os);
894     //    2. Open highlighting option panel tab
895     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
896     //    3. Select Phaneroptera_falcata as reference.
897     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
898     //    4. Check no highlighting
899     setHighlightingType(os, "No highlighting");
900     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
901     QString t = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
902     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
903     QString c = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 0));
904     QString gap = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
905     CHECK_SET_ERR(a == "#fdff6a", QString("a has color %1").arg(a));
906     CHECK_SET_ERR(t == "#ff99b1", QString("t has color %1").arg(t));
907     CHECK_SET_ERR(g == "#2aa1e1", QString("g has color %1").arg(g));
908     CHECK_SET_ERR(c == "#49f949", QString("c has color %1").arg(c));
909     CHECK_SET_ERR(gap == "#ffffff", QString("gap has color %1").arg(gap));
910     /* GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#fcff92");//yellow
911     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,2), "#ff99b1");//red
912     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2,0),"#4eade1"); //blue
913     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,0), "#70f970");//green
914     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,2), "#ffffff");//white
915 */
916 }
917 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0007_1)918 GUI_TEST_CLASS_DEFINITION(highlighting_test_0007_1) {
919     //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
920     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
921     GTUtilsTaskTreeView::waitTaskFinished(os);
922     //    2. Open highlighting option panel tab
923     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
924     //    3. Select Phaneroptera_falcata as reference.
925     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
926     //    4. Check no highlighting
927     setHighlightingType(os, "No highlighting");
928     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 1), "#c0bdbb");
929     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 1), "#ffee00");
930 }
931 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0008)932 GUI_TEST_CLASS_DEFINITION(highlighting_test_0008) {
933     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
934     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
935     GTUtilsTaskTreeView::waitTaskFinished(os);
936     //    2. Open highlighting option panel tab
937     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
938     //    3. Select Phaneroptera_falcata as reference.
939     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
940     //    4. Check Agreements highlighting type
941     setHighlightingType(os, "Agreements");
942 
943     QString a = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 0));
944     QString gap1 = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(0, 2));
945     QString g = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(2, 0));
946     QString gap2 = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(3, 1));
947     QString gap3 = GTUtilsMSAEditorSequenceArea::getColor(os, QPoint(4, 2));
948     CHECK_SET_ERR(a == "#fdff6a", QString("a has color %1 intead of %2").arg(a).arg("#fcff92"));
949     CHECK_SET_ERR(gap1 == "#ffffff", QString("gap1 has color %1 intead of %2").arg(gap1).arg("#ffffff"));
950     CHECK_SET_ERR(g == "#2aa1e1", QString("g has color %1 intead of %2").arg(g).arg("#4eade1"));
951     CHECK_SET_ERR(gap2 == "#ffffff", QString("gap2 has color%1 intead of %2").arg(gap2).arg("#ffffff"));
952     CHECK_SET_ERR(gap3 == "#ffffff", QString("gap3 has color %1 intead of %2").arg(gap3).arg("#ffffff"));
953     /*
954     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#fcff92");
955     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,2), "#ffffff");
956     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2,0), "#4eade1");
957     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3,1), "#ffffff");
958     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,2), "#ffffff");
959     */
960 }
961 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0008_1)962 GUI_TEST_CLASS_DEFINITION(highlighting_test_0008_1) {
963     //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
964     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
965     GTUtilsTaskTreeView::waitTaskFinished(os);
966     //    2. Open highlighting option panel tab
967     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
968     //    3. Select Phaneroptera_falcata as reference.
969     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
970     //    4. Check Agreements highlighting type
971     setHighlightingType(os, "Agreements");
972     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 1), "#ffffff");
973     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 1), "#ffee00");
974 }
975 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0009)976 GUI_TEST_CLASS_DEFINITION(highlighting_test_0009) {
977     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
978     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
979     GTUtilsTaskTreeView::waitTaskFinished(os);
980     //    2. Open highlighting option panel tab
981     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
982     //    3. Select Phaneroptera_falcata as reference.
983     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
984     //    4. Check Disagreements highlighting type
985     setHighlightingType(os, "Disagreements");
986     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 1), "#ffffff");
987     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 1), "#ffffff");
988     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(5, 1), "#ffffff");
989     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 1), "#ffffff");
990     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 2), "#ffffff");
991 }
992 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0009_1)993 GUI_TEST_CLASS_DEFINITION(highlighting_test_0009_1) {
994     //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
995     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
996     GTUtilsTaskTreeView::waitTaskFinished(os);
997 
998     //    2. Open highlighting option panel tab
999     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1000 
1001     //    3. Select Phaneroptera_falcata as reference.
1002     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
1003 
1004     //    4. Check Disagreements highlighting type
1005     setHighlightingType(os, "Disagreements");
1006     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 1), "#ffffff");
1007     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 1), "#ffffff");
1008 }
1009 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0010)1010 GUI_TEST_CLASS_DEFINITION(highlighting_test_0010) {
1011     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1012     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1013     GTUtilsTaskTreeView::waitTaskFinished(os);
1014 
1015     //    2. Open highlighting option panel tab
1016     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1017 
1018     //    3. Select Phaneroptera_falcata as reference.
1019     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
1020 
1021     //    4. Check Gaps highlighting type
1022     setHighlightingType(os, "Gaps");
1023     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 2), "#c0c0c0");
1024 }
1025 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_1)1026 GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_1) {
1027     //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
1028     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
1029     GTUtilsTaskTreeView::waitTaskFinished(os);
1030     //    2. Open highlighting option panel tab
1031     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1032     //    3. Select Phaneroptera_falcata as reference.
1033     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
1034     //    4. Check Gaps highlighting type
1035     setHighlightingType(os, "Gaps");
1036     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 1), "#c0c0c0");
1037 }
1038 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0011)1039 GUI_TEST_CLASS_DEFINITION(highlighting_test_0011) {
1040     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1041     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1042     GTUtilsTaskTreeView::waitTaskFinished(os);
1043     //    2. Open highlighting option panel tab
1044     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1045     //    3. Select Phaneroptera_falcata as reference.
1046     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
1047     //    4. Check Transitions highlighting type
1048     setHighlightingType(os, "Transitions");
1049     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 1), "#ffffff");
1050     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2, 1), "#ffffff");
1051     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 1), "#ff99b1");
1052 }
1053 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0012)1054 GUI_TEST_CLASS_DEFINITION(highlighting_test_0012) {
1055     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1056     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1057     GTUtilsTaskTreeView::waitTaskFinished(os);
1058     //    2. Open highlighting option panel tab
1059     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1060     //    3. Select Phaneroptera_falcata as reference.
1061     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
1062     //    4. Check Transversions highlighting type
1063     setHighlightingType(os, "Transversions");
1064     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0, 1), "#ffffff");
1065     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3, 1), "#70f970");
1066     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6, 1), "#fcff92");
1067 }
1068 
GUI_TEST_CLASS_DEFINITION(highlighting_test_0013)1069 GUI_TEST_CLASS_DEFINITION(highlighting_test_0013) {
1070     // 1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1071     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
1072     GTUtilsTaskTreeView::waitTaskFinished(os);
1073 
1074     // 2. Open highlighting option panel tab
1075     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
1076     QWidget *w = GTWidget::findWidget(os, "msa_editor_sequence_area");
1077     const QImage initImg = GTWidget::getImage(os, w);
1078 
1079     // 3. Check "use dots" checkbox
1080     setHighlightingType(os, "Agreements");
1081     QCheckBox *useDots = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "useDots"));
1082     CHECK_SET_ERR(useDots != nullptr, "use dots checkbox not found");
1083     GTCheckBox::setChecked(os, useDots, true);
1084 
1085     // Expected state: no effect
1086     QImage img = GTWidget::getImage(os, w);
1087     CHECK_SET_ERR(img == initImg, "sequence area unexpectedly changed");
1088 
1089     // 4. Select Phaneroptera_falcata as reference.
1090     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
1091 
1092     // Expected state: not highlighted changed to dots
1093     img = GTWidget::getImage(os, w);
1094     CHECK_SET_ERR(img != initImg, "image not changed");  // no way to check dots. Can only check that sequence area changed
1095 }
1096 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001)1097 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001) {
1098     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1099     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1100     GTUtilsTaskTreeView::waitTaskFinished(os);
1101     //    2. Open Pairwise alignment option panel tab
1102     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1103     //    3. Add Phaneroptera_falcata sequence
1104     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1105     //    Expected state: align button is disabled
1106     QPushButton *alignButton = qobject_cast<QPushButton *>(GTWidget::findWidget(os, "alignButton"));
1107     CHECK_SET_ERR(alignButton != nullptr, "alignButton not found");
1108     CHECK_SET_ERR(!alignButton->isEnabled(), "alignButton is unexpectidly enabled");
1109     //    4. Add Isophya_altaica_EF540820 sequence
1110     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1111     //    Expected state: Similarity label appeared. Similarity is 43%. Align button enabled
1112     CHECK_SET_ERR(alignButton->isEnabled(), "align button is unexpectibly disabled");
1113     QLabel *similarityValueLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "similarityValueLabel"));
1114     CHECK_SET_ERR(similarityValueLabel != nullptr, "similarityValueLabel not found");
1115     QString percent = similarityValueLabel->text();
1116     CHECK_SET_ERR(percent == "43%", QString("unexpected percent: %1").arg(percent));
1117     //    (branches: amino, raw alphabets)
1118 }
1119 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0002)1120 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0002) {
1121     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1122     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1123     GTUtilsTaskTreeView::waitTaskFinished(os);
1124     //    2. Open Pairwise alignment option panel tab
1125     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1126     //    3. Add Phaneroptera_falcata sequence two times
1127     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1128     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Phaneroptera_falcata");
1129     //    Expected state: Similarity label appeared. Similarity is 100%. Align button disabled
1130     QPushButton *alignButton = qobject_cast<QPushButton *>(GTWidget::findWidget(os, "alignButton"));
1131     CHECK_SET_ERR(alignButton != nullptr, "alignButton not found");
1132     CHECK_SET_ERR(!alignButton->isEnabled(), "align button is unexpectibly disabled");
1133 
1134     QLabel *similarityValueLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "similarityValueLabel"));
1135     CHECK_SET_ERR(similarityValueLabel != nullptr, "similarityValueLabel not found");
1136     QString percent = similarityValueLabel->text();
1137     CHECK_SET_ERR(percent == "100%", QString("unexpected percent: %1").arg(percent));
1138     //    (branches: amino, raw alphabets)
1139 }
1140 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0003)1141 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0003) {
1142     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1143     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1144     GTUtilsTaskTreeView::waitTaskFinished(os);
1145     //    2. Open Pairwise alignment option panel tab
1146     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1147     //    3. Add Phaneroptera_falcata sequence with popup helper
1148     //    Expected state: sequence added
1149     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata", GTUtilsOptionPanelMsa::Completer);
1150     QLineEdit *line1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
1151     CHECK_SET_ERR(line1 != nullptr, "lineEdit 1 not found");
1152     CHECK_SET_ERR(line1->text() == "Phaneroptera_falcata", QString("unexpected lineEdit 1 text: %1").arg(line1->text()));
1153     //    4. Add Isophya_altaica_EF540820 sequence with popup helper
1154     //    Expected state: sequence added
1155     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820", GTUtilsOptionPanelMsa::Completer);
1156     QLineEdit *line2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
1157     CHECK_SET_ERR(line2 != nullptr, "lineEdit 2 not found");
1158     CHECK_SET_ERR(line2->text() == "Isophya_altaica_EF540820", QString("unexpected lineEdit 2 text: %1").arg(line2->text()));
1159     //    5. Remove Phaneroptera_falcata with button
1160     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 1));
1161     CHECK_SET_ERR(line1->text().isEmpty(), QString("unexpected lineEdit 1 text: %1").arg(line1->text()));
1162     //    6. Remove Phaneroptera_falcata with button
1163     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 2));
1164     CHECK_SET_ERR(line2->text().isEmpty(), QString("unexpected lineEdit 2 text: %1").arg(line2->text()));
1165 }
1166 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004)1167 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004) {
1168     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1169     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
1170     GTUtilsTaskTreeView::waitTaskFinished(os);
1171     //    2. Open Pairwise alignment option panel tab
1172     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1173     //    3. Type wrong names in sequences' line edits.
1174     QLineEdit *line1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
1175     CHECK_SET_ERR(line1 != nullptr, "lineEdit 1 not found");
1176     GTLineEdit::setText(os, line1, "wrong name");
1177     CHECK_SET_ERR(GTBaseCompleter::isEmpty(os, line1), "Completer is not empty");
1178 
1179     GTKeyboardDriver::keyClick(Qt::Key_Escape);
1180 
1181     QLineEdit *line2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
1182     CHECK_SET_ERR(line2 != nullptr, "lineEdit 2 not found");
1183     GTLineEdit::setText(os, line2, "wrong name");
1184     CHECK_SET_ERR(GTBaseCompleter::isEmpty(os, line2), "Completer is not empty");
1185     GTKeyboardDriver::keyClick(Qt::Key_Escape);
1186     GTUtilsOptionPanelMsa::toggleTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1187     //    Expected state: empty popup helper appeared
1188 }
1189 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005)1190 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005) {
1191     //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
1192     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
1193     GTUtilsTaskTreeView::waitTaskFinished(os);
1194     //    2. Open Pairwise alignment option panel tab
1195     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1196     //    3. Add two sequences to PA line edits
1197     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "CfT-1_Cladosporium_fulvum");
1198     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "AspOryTy3-2");
1199     //    Expected state: sequenseq added
1200     QLineEdit *line1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
1201     QLineEdit *line2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
1202     CHECK_SET_ERR(line1 != nullptr, "line edit1 not found");
1203     CHECK_SET_ERR(line2 != nullptr, "line edit2 not found");
1204     CHECK_SET_ERR(line1->text() == "CfT-1_Cladosporium_fulvum", QString("wrong text in line edit1: %1").arg(line1->text()));
1205     CHECK_SET_ERR(line2->text() == "AspOryTy3-2", QString("wrong text in line edit2: %1").arg(line2->text()));
1206     //    4. Remove sequenses
1207     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 1));
1208     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 2));
1209     //    Expected state: sequences removed
1210     CHECK_SET_ERR(line1->text().isEmpty(), QString("wrong text in line edit1: %1").arg(line1->text()));
1211     CHECK_SET_ERR(line2->text().isEmpty(), QString("wrong text in line edit2: %1").arg(line2->text()));
1212 }
1213 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005_1)1214 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0005_1) {
1215     //    1. Open file test/_common_data/alphabets/raw_alphabet.aln
1216     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "raw_alphabet.aln");
1217     GTUtilsTaskTreeView::waitTaskFinished(os);
1218     //    2. Open Pairwise alignment option panel tab
1219     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1220     //    Expected state: wrong alphabet hint appeared
1221     QLabel *lblMessage = qobject_cast<QLabel *>(GTWidget::findWidget(os, "lblMessage"));
1222     CHECK_SET_ERR(lblMessage != nullptr, "lblMessage not found");
1223     CHECK_SET_ERR(lblMessage->text() == "Pairwise alignment is not available for alignments with \"Raw\" alphabet.",
1224                   QString("wrong label text: %1").arg(lblMessage->text()));
1225     //    3. Add two sequences to PA line edits
1226     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "seq7_1");
1227     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "seq7");
1228     //    Expected state: sequenseq added
1229     QLineEdit *line1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
1230     QLineEdit *line2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
1231     CHECK_SET_ERR(line1 != nullptr, "line edit1 not found");
1232     CHECK_SET_ERR(line2 != nullptr, "line edit2 not found");
1233     CHECK_SET_ERR(line1->text() == "seq7_1", QString("wrong text in line edit1: %1").arg(line1->text()));
1234     CHECK_SET_ERR(line2->text() == "seq7", QString("wrong text in line edit2: %1").arg(line2->text()));
1235     //    4. Remove sequenses
1236     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 1));
1237     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 2));
1238     GTWidget::click(os, GTUtilsOptionPanelMsa::getDeleteButton(os, 1));
1239 
1240     //    Expected state: sequences removed
1241     CHECK_SET_ERR(line1->text().isEmpty(), QString("wrong text in line edit1: %1").arg(line1->text()));
1242     CHECK_SET_ERR(line2->text().isEmpty(), QString("wrong text in line edit2: %1").arg(line2->text()));
1243 }
1244 
1245 namespace {
1246 
expandSettings(HI::GUITestOpStatus & os,const QString & widgetName,const QString & arrowName)1247 void expandSettings(HI::GUITestOpStatus &os, const QString &widgetName, const QString &arrowName) {
1248     QWidget *widget = GTWidget::findWidget(os, widgetName);
1249     CHECK_SET_ERR(widget != nullptr, QString("%1 not found").arg(widgetName));
1250     if (widget->isHidden()) {
1251         GTWidget::click(os, GTWidget::findWidget(os, arrowName));
1252     }
1253 }
1254 
expandAlgoSettings(HI::GUITestOpStatus & os)1255 void expandAlgoSettings(HI::GUITestOpStatus &os) {
1256     expandSettings(os, "settingsContainerWidget", "ArrowHeader_Algorithm settings");
1257 }
1258 
expandOutputSettings(HI::GUITestOpStatus & os)1259 void expandOutputSettings(HI::GUITestOpStatus &os) {
1260     expandSettings(os, "outputContainerWidget", "ArrowHeader_Output settings");
1261 }
1262 
1263 }  // namespace
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0006)1264 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0006) {
1265     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1266     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1267     GTUtilsTaskTreeView::waitTaskFinished(os);
1268     //    2. Open Pairwise alignment option panel tab. check spinboxes limits for KAilign
1269     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1270     expandAlgoSettings(os);
1271 
1272     QDoubleSpinBox *gapOpen = qobject_cast<QDoubleSpinBox *>(GTWidget::findWidget(os, "gapOpen"));
1273     QDoubleSpinBox *gapExtd = qobject_cast<QDoubleSpinBox *>(GTWidget::findWidget(os, "gapExtd"));
1274     QDoubleSpinBox *gapTerm = qobject_cast<QDoubleSpinBox *>(GTWidget::findWidget(os, "gapTerm"));
1275     QDoubleSpinBox *bonusScore = qobject_cast<QDoubleSpinBox *>(GTWidget::findWidget(os, "bonusScore"));
1276 
1277     GTDoubleSpinbox::checkLimits(os, gapOpen, 0, 65535);
1278     GTDoubleSpinbox::checkLimits(os, gapExtd, 0, 65535);
1279     GTDoubleSpinbox::checkLimits(os, gapTerm, 0, 65535);
1280     GTDoubleSpinbox::checkLimits(os, bonusScore, 0, 65535);
1281     //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
1282     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1283     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1284     //    4. Align with KAlign
1285     GTWidget::click(os, GTWidget::findWidget(os, "alignButton"));
1286     QString expected = "AAGACTTCTTTTAA\n"
1287                        "AAGCTTACT---AA";
1288     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 0), QPoint(13, 1), expected);
1289 }
1290 
1291 namespace {
1292 
setSpinValue(HI::GUITestOpStatus & os,double value,const QString & spinName)1293 void setSpinValue(HI::GUITestOpStatus &os, double value, const QString &spinName) {
1294     expandAlgoSettings(os);
1295     QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox *>(GTWidget::findWidget(os, spinName));
1296     CHECK_SET_ERR(spinBox != nullptr, spinName + " spinbox not found");
1297     GTDoubleSpinbox::setValue(os, spinBox, value, GTGlobals::UseKeyBoard);
1298 }
1299 
setGapOpen(HI::GUITestOpStatus & os,double value)1300 void setGapOpen(HI::GUITestOpStatus &os, double value) {
1301     setSpinValue(os, value, "gapOpen");
1302 }
1303 
setGapExtd(HI::GUITestOpStatus & os,double value)1304 void setGapExtd(HI::GUITestOpStatus &os, double value) {
1305     setSpinValue(os, value, "gapExtd");
1306 }
1307 
setGapTerm(HI::GUITestOpStatus & os,double value)1308 void setGapTerm(HI::GUITestOpStatus &os, double value) {
1309     setSpinValue(os, value, "gapTerm");
1310 }
1311 
setBonusScore(HI::GUITestOpStatus & os,double value)1312 void setBonusScore(HI::GUITestOpStatus &os, double value) {
1313     setSpinValue(os, value, "bonusScore");
1314 }
1315 
inNewWindow(HI::GUITestOpStatus & os,bool inNew)1316 void inNewWindow(HI::GUITestOpStatus &os, bool inNew) {
1317     expandOutputSettings(os);
1318     QCheckBox *inNewWindowCheckBox = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "inNewWindowCheckBox"));
1319     CHECK_SET_ERR(inNewWindowCheckBox != nullptr, "inNewWindowCheckBox not found");
1320     GTCheckBox::setChecked(os, inNewWindowCheckBox, inNew);
1321 }
1322 
align(HI::GUITestOpStatus & os)1323 void align(HI::GUITestOpStatus &os) {
1324     GTWidget::click(os, GTWidget::findWidget(os, "alignButton"));
1325 }
1326 
1327 }  // namespace
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007)1328 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007) {
1329     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1330     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1331     GTUtilsTaskTreeView::waitTaskFinished(os);
1332     //    2. Open Pairwise alignment option panel tab
1333     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1334     //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
1335     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1336     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1337     //    4. Set gapOpen to 1. Press align button
1338     setGapOpen(os, 1);
1339     inNewWindow(os, false);
1340     align(os);
1341     //    Expected state: Isophya_altaica_EF540820 is AAG-CTTA-CT-AA
1342     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 1), QPoint(13, 1), "AAG-CTTA-CT-AA");
1343 }
1344 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_1)1345 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_1) {
1346     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1347     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1348     GTUtilsTaskTreeView::waitTaskFinished(os);
1349     //    2. Open Pairwise alignment option panel tab
1350     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1351     //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
1352     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1353     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1354     //    4. Set gap extension penalty to 1000. Press align button
1355     setGapExtd(os, 1000);
1356     inNewWindow(os, false);
1357     align(os);
1358     //    Expected state: Isophya_altaica_EF540820 is AAG-CT--TACTAA
1359     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 1), QPoint(13, 1), "AAG-CT--TACTAA");
1360 }
1361 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_2)1362 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_2) {
1363     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1364     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1365     GTUtilsTaskTreeView::waitTaskFinished(os);
1366     //    2. Open Pairwise alignment option panel tab
1367     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1368     //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
1369     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1370     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1371     //    4. Set terminate gap penalty to 1000. Press align button
1372     setGapTerm(os, 1000);
1373     inNewWindow(os, false);
1374     align(os);
1375     //    Expected state: Isophya_altaica_EF540820 is AAGCTTACT---AA
1376     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 1), QPoint(13, 1), "AAGCTTACT---AA");
1377 }
1378 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_3)1379 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0007_3) {
1380     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1381     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1382     GTUtilsTaskTreeView::waitTaskFinished(os);
1383     //    2. Open Pairwise alignment option panel tab
1384     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1385     //    3. Add Phaneroptera_falcata and Isophya_altaica_EF540820 sequences to PA
1386     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1387     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1388     //    4. Set gap open to 10, gap ext to 1, bonus score to 1. Press align button
1389     setGapOpen(os, 10);
1390     setGapExtd(os, 1);
1391     setBonusScore(os, 1);
1392     inNewWindow(os, false);
1393     align(os);
1394     //    Expected state: Isophya_altaica_EF540820 is AAG-CTTACT---AA
1395     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(0, 1), QPoint(14, 1), "AAG-CTTACT---AA");
1396 }
1397 namespace {
setOutputPath(HI::GUITestOpStatus & os,const QString & path,const QString & name)1398 void setOutputPath(HI::GUITestOpStatus &os, const QString &path, const QString &name) {
1399     expandOutputSettings(os);
1400     QWidget *outputFileSelectButton = GTWidget::findWidget(os, "outputFileSelectButton");
1401     CHECK_SET_ERR(outputFileSelectButton != nullptr, "outputFileSelectButton not found");
1402     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
1403     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, path, name, GTFileDialogUtils::Save));
1404     GTWidget::click(os, outputFileSelectButton);
1405 }
1406 }  // namespace
1407 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0008)1408 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0008) {
1409     const QString fileName = "pairwise_alignment_test_0008.aln";
1410     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1411     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1412     GTUtilsTaskTreeView::waitTaskFinished(os);
1413     //    2. Open Pairwise alignment option panel tab
1414     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1415     //    3. Add Phaneroptera_falcata sequence
1416     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1417     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1418     //    4. Add Isophya_altaica_EF540820 sequence
1419     //    5. Select some existing file as output
1420     QString s = sandBoxDir + fileName;
1421     QFile f(s);
1422     bool created = f.open(QFile::ReadWrite);
1423     CHECK_SET_ERR(created, "file not created");
1424     f.close();
1425 
1426     setOutputPath(os, sandBoxDir, fileName);
1427     align(os);
1428     //    Expected state: file rewrited
1429     int size = GTFile::getSize(os, sandBoxDir + fileName);
1430     CHECK_SET_ERR(size == 185, QString("unexpected file size %1").arg(size));
1431     GTUtilsProjectTreeView::doubleClickItem(os, fileName);
1432 }
1433 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009)1434 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009) {
1435     GTLogTracer l;
1436     const QString fileName = "pairwise_alignment_test_0009.aln";
1437     const QString dirName = "pairwise_alignment_test_0009";
1438     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1439     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1440     GTUtilsTaskTreeView::waitTaskFinished(os);
1441     //    2. Open Pairwise alignment option panel tab
1442     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1443     //    3. Add Phaneroptera_falcata sequence
1444     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1445     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1446     //    4. Add Isophya_altaica_EF540820 sequence
1447     //    5. Select some existing read-only file as output
1448     QString dirPath = sandBoxDir + "pairwise_alignment_test_0009";
1449 
1450     QDir().mkpath(dirPath);
1451 
1452     const QString filePath = dirPath + "/" + fileName;
1453     QFile f(filePath);
1454     bool created = f.open(QFile::ReadWrite);
1455     CHECK_SET_ERR(created, "file not created");
1456     f.close();
1457     GTFile::setReadOnly(os, filePath);
1458 
1459     setOutputPath(os, sandBoxDir + dirName, fileName);
1460     align(os);
1461     //    Expected state: error in log: Task {Pairwise alignment task} finished with error: No permission to write to 'pairwise_alignment_test_0009.aln' file.
1462     QString error = l.getJoinedErrorString();
1463     const QString expectedFilePath = QFileInfo(filePath).absoluteFilePath();
1464     const QString expected = QString("Task {Pairwise alignment task} finished with error: No permission to write to \'%1\' file.").arg(expectedFilePath);
1465     CHECK_SET_ERR(error.contains(expected), QString("enexpected error: %1").arg(error));
1466 
1467     GTFile::setReadWrite(os, filePath);
1468 }
1469 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010)1470 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010) {
1471     GTLogTracer l;
1472     const QString fileName = "pairwise_alignment_test_0010.aln";
1473     const QString dirName = "pairwise_alignment_test_0010";
1474     //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1475     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1476     GTUtilsTaskTreeView::waitTaskFinished(os);
1477     //    2. Open Pairwise alignment option panel tab
1478     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1479     //    3. Add Phaneroptera_falcata sequence
1480     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1481     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1482     //    4. Add Isophya_altaica_EF540820 sequence
1483     //    5. Select some existing read-only file as output
1484     QString dirPath = sandBoxDir + dirName;
1485     bool ok = QDir().mkpath(dirPath);
1486     CHECK_SET_ERR(ok, "subfolder not created");
1487 
1488     GTFile::setReadOnly(os, dirPath);
1489 
1490     const QString filePath = dirPath + "/" + fileName;
1491 
1492     setOutputPath(os, dirPath, fileName);
1493     align(os);
1494     //    Expected state: error in log: Task {Pairwise alignment task} finished with error: No permission to write to 'COI_transl.aln' file.
1495     QString error = l.getJoinedErrorString();
1496     const QString expectedFilePath = QFileInfo(filePath).absoluteFilePath();
1497     const QString expected = QString("Task {Pairwise alignment task} finished with error: No permission to write to \'%1\' file.").arg(expectedFilePath);
1498     CHECK_SET_ERR(error == expected, QString("enexpected error: %1").arg(error));
1499 
1500     GTFile::setReadWrite(os, dirPath);
1501 }
1502 
GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011)1503 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011) {
1504     // 1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
1505     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
1506     GTUtilsTaskTreeView::waitTaskFinished(os);
1507     // 2. Open Pairwise alignment option panel tab
1508     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
1509     // 3. Add Phaneroptera_falcata sequence
1510     // 4. Add Isophya_altaica_EF540820 sequence
1511     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
1512     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
1513     // 5. Use empty path in output settings
1514     expandOutputSettings(os);
1515     QLineEdit *outputFileLineEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "outputFileLineEdit"));
1516     CHECK_SET_ERR(outputFileLineEdit != nullptr, "outputFileLineEdit not found");
1517     QString initialText = outputFileLineEdit->text();
1518     CHECK_SET_ERR(!initialText.isEmpty(), "line edit is empty");
1519     GTWidget::click(os, outputFileLineEdit);
1520     GTKeyboardDriver::keyClick('a', Qt::ControlModifier);
1521     GTKeyboardDriver::keyClick(Qt::Key_Delete);
1522     QString finalText = outputFileLineEdit->text();
1523     // Expected state: empty path can not be set
1524     CHECK_SET_ERR(initialText == finalText, QString("wrong text! expected: '%1', actual: '%2'").arg(initialText).arg(finalText));
1525 }
1526 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0001)1527 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0001) {
1528     //    1. Open data/samples/CLUSTALW/COI.aln
1529     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1530     GTUtilsTaskTreeView::waitTaskFinished(os);
1531     //    2. Open tree settings option panel tab
1532     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1533     //    3. Press "Open tree" button. Select data/samples/CLUSTALW/COI.nwk in file dialog
1534     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Newick", "COI.nwk"));
1535     GTWidget::click(os, GTWidget::findWidget(os, "OpenTreeButton"));
1536     //    Expected state: tree opened.
1537     GTWidget::findWidget(os, "treeView");
1538 }
1539 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0002)1540 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0002) {
1541     //    1. Open data/samples/CLUSTALW/COI.aln
1542     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1543     GTUtilsTaskTreeView::waitTaskFinished(os);
1544     //    2. Open tree settings option panel tab
1545     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1546     //    3. Press "build tree" button.
1547     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default"));
1548     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1549     GTUtilsTaskTreeView::waitTaskFinished(os);
1550 
1551     //    4. Fill build tree dialog with defaulb values
1552     //    Expected state: tree built.
1553     GTWidget::findWidget(os, "treeView");
1554 }
1555 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003)1556 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003) {
1557     //    1. Open data/samples/CLUSTALW/COI.aln
1558     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
1559     GTUtilsTaskTreeView::waitTaskFinished(os);
1560 
1561     //    2. Open tree settings option panel tab. build tree
1562     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1563     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1564     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1565     GTUtilsTaskTreeView::waitTaskFinished(os);
1566 
1567     // Check/prepare tree widgets.
1568     QWidget *treeView = GTWidget::findWidget(os, "treeView");
1569     QWidget *heightSlider = GTWidget::findWidget(os, "heightSlider");
1570     QComboBox *layoutCombo = GTWidget::findExactWidget<QComboBox *>(os, "layoutCombo");
1571 
1572     const QImage initImage = GTWidget::getImage(os, treeView);
1573 
1574     //    3. Select circular layout
1575     GTComboBox::selectItemByText(os, layoutCombo, "Circular");
1576     GTUtilsTaskTreeView::waitTaskFinished(os);
1577 
1578     //    Expected state: layout changed, height slider is disabled
1579     const QImage circularImage = GTWidget::getImage(os, treeView);
1580     CHECK_SET_ERR(initImage != circularImage, "tree view not changed to circular");
1581     CHECK_SET_ERR(!heightSlider->isEnabled(), "heightSlider in enabled for circular layout");
1582 
1583     //    4. Select unrooted layout
1584     GTComboBox::selectItemByText(os, layoutCombo, "Unrooted");
1585     GTUtilsTaskTreeView::waitTaskFinished(os);
1586 
1587     //    Expected state: layout changed, height slider is disabled
1588     const QImage unrootedImage = GTWidget::getImage(os, treeView);
1589     CHECK_SET_ERR(initImage != unrootedImage, "tree view not changed to unrooted");
1590     CHECK_SET_ERR(!heightSlider->isEnabled(), "heightSlider in enabled for unrooted layout");
1591 
1592     //    5. Select rectangular layout
1593     GTComboBox::selectItemByText(os, layoutCombo, "Rectangular");
1594     GTUtilsTaskTreeView::waitTaskFinished(os);
1595 
1596     // Expected state: tree is similar to the beginning, height slider is enabled
1597     const QImage rectangularImage = GTWidget::getImage(os, treeView);
1598     CHECK_SET_ERR(initImage == rectangularImage, "final image is not equal to initial");
1599     CHECK_SET_ERR(heightSlider->isEnabled(), "heightSlider in disabled for rectangular layout");
1600 }
1601 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004)1602 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004) {
1603     // Compare that 'Default'/'Cladogram'/'Phylogram' are stable within the type and are different between different types.
1604     // To check that images are stable capture 2 versions of each image.
1605 
1606     // Open data/samples/CLUSTALW/COI.aln.
1607     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
1608     GTUtilsTaskTreeView::waitTaskFinished(os);
1609 
1610     // Open tree settings option panel tab. build tree.
1611     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1612     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1613     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1614     GTUtilsTaskTreeView::waitTaskFinished(os);
1615 
1616     QWidget *treeView = GTWidget::findWidget(os, "treeView");
1617     QComboBox *treeViewCombo = GTWidget::findExactWidget<QComboBox *>(os, "treeViewCombo");
1618 
1619     QAbstractButton *syncModeButton = GTAction::button(os, "sync_msa_action");
1620     GTWidget::click(os, syncModeButton);
1621     CHECK_SET_ERR(!syncModeButton->isChecked(), "Sync mode must be OFF");
1622 
1623     // Capture 2 variants of  'Phylogram', 'Default', 'Cladogram' images.
1624     GTComboBox::selectItemByText(os, treeViewCombo, "Phylogram");
1625     GTUtilsTaskTreeView::waitTaskFinished(os);
1626     const QImage phylogramImage1 = GTWidget::getImage(os, treeView);
1627 
1628     GTComboBox::selectItemByText(os, treeViewCombo, "Default");
1629     GTUtilsTaskTreeView::waitTaskFinished(os);
1630     const QImage defaultImage1 = GTWidget::getImage(os, treeView);
1631 
1632     GTComboBox::selectItemByText(os, treeViewCombo, "Cladogram");
1633     GTUtilsTaskTreeView::waitTaskFinished(os);
1634     const QImage cladogramImage1 = GTWidget::getImage(os, treeView);
1635 
1636     GTComboBox::selectItemByText(os, treeViewCombo, "Phylogram");
1637     GTUtilsTaskTreeView::waitTaskFinished(os);
1638     const QImage phylogramImage2 = GTWidget::getImage(os, treeView);
1639 
1640     GTComboBox::selectItemByText(os, treeViewCombo, "Cladogram");
1641     GTUtilsTaskTreeView::waitTaskFinished(os);
1642     const QImage cladogramImage2 = GTWidget::getImage(os, treeView);
1643 
1644     GTComboBox::selectItemByText(os, treeViewCombo, "Default");
1645     GTUtilsTaskTreeView::waitTaskFinished(os);
1646     const QImage defaultImage2 = GTWidget::getImage(os, treeView);
1647 
1648     CHECK_SET_ERR(defaultImage1 == defaultImage2, "Default images are not equal");
1649     CHECK_SET_ERR(cladogramImage1 == cladogramImage2, "Cladogram images are not equal");
1650     CHECK_SET_ERR(phylogramImage1 == phylogramImage1, "Phylogram images are not equal");
1651 
1652     CHECK_SET_ERR(defaultImage1 != cladogramImage1, "Default image must not be equal to Cladogram");
1653     CHECK_SET_ERR(defaultImage1 != phylogramImage1, "Default image must not be equal to Phylogram");
1654     CHECK_SET_ERR(cladogramImage1 != phylogramImage1, "Cladogram image image must not be equal to Phylogram");
1655 }
1656 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005)1657 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005) {
1658     //    1. Open data/samples/CLUSTALW/COI.aln
1659     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1660     GTUtilsTaskTreeView::waitTaskFinished(os);
1661 
1662     //    2. Open tree settings option panel tab. build tree
1663     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1664     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1665     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1666     GTUtilsTaskTreeView::waitTaskFinished(os);
1667 
1668     QCheckBox *showNamesCheck = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "showNamesCheck"));
1669     CHECK_SET_ERR(showNamesCheck != nullptr, "showNamesCheck not found");
1670     QCheckBox *showDistancesCheck = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "showDistancesCheck"));
1671     CHECK_SET_ERR(showDistancesCheck != nullptr, "showDistancesCheck not found");
1672     QCheckBox *alignLabelsCheck = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "alignLabelsCheck"));
1673     CHECK_SET_ERR(alignLabelsCheck != nullptr, "alignLabelsCheck not found");
1674     QWidget *parent = GTWidget::findWidget(os, "COI [COI.aln]_SubWindow");
1675     QWidget *parent2 = GTWidget::findWidget(os, "COI [COI.aln]", parent);
1676     QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView", parent2));
1677 
1678     QList<QGraphicsSimpleTextItem *> initNames = GTUtilsPhyTree::getVisibleLabels(os, treeView);
1679     QList<QGraphicsSimpleTextItem *> initDistanses = GTUtilsPhyTree::getVisibleDistances(os, treeView);
1680     int initNamesNumber = initNames.count();
1681     int initDistansesNumber = initDistanses.count();
1682 
1683     //    3. Uncheck "show names" checkbox.
1684     GTCheckBox::setChecked(os, showNamesCheck, false);
1685 
1686     //    Expected state: names are not shown, align labels checkbox is disabled
1687     QList<QGraphicsSimpleTextItem *> names = GTUtilsPhyTree::getVisibleLabels(os, treeView);
1688     CHECK_SET_ERR(names.count() == 0, QString("unexpected number of names: %1").arg(names.count()));
1689     CHECK_SET_ERR(!alignLabelsCheck->isEnabled(), "align labels checkbox is unexpectidly enabled");
1690 
1691     //    4. Check "show names" checkbox.
1692     GTCheckBox::setChecked(os, showNamesCheck, true);
1693 
1694     //    Expected state: names are shown, align labels checkbox is enabled
1695     names = GTUtilsPhyTree::getVisibleLabels(os, treeView);
1696     CHECK_SET_ERR(names.count() == initNamesNumber, QString("unexpected number of names: %1").arg(names.count()));
1697     CHECK_SET_ERR(alignLabelsCheck->isEnabled(), "align labels checkbox is unexpectidly disabled");
1698 
1699     //    5. Uncheck "show distanses" checkbox.
1700     GTCheckBox::setChecked(os, showDistancesCheck, false);
1701 
1702     //    Expected state: distanses are not shown
1703     QList<QGraphicsSimpleTextItem *> distanses = GTUtilsPhyTree::getVisibleDistances(os, treeView);
1704     CHECK_SET_ERR(distanses.count() == 0, QString("unexpected number of distanses: %1").arg(names.count()));
1705 
1706     //    6. Check "show distanses" checkbox.
1707     GTCheckBox::setChecked(os, showDistancesCheck, true);
1708 
1709     //    Expected state: distanses are shown
1710     distanses = GTUtilsPhyTree::getVisibleDistances(os, treeView);
1711     CHECK_SET_ERR(distanses.count() == initDistansesNumber, QString("unexpected number of distanses: %1").arg(names.count()));
1712 
1713     //    7. Check "align labels" checkbox.
1714     // saving init image
1715     GTCheckBox::setChecked(os, alignLabelsCheck, false);
1716     QWidget *w = GTWidget::findWidget(os, "treeView");
1717     CHECK_SET_ERR(w != nullptr, "tree view not found");
1718     QImage initImg = GTWidget::getImage(os, w);  // initial state
1719 
1720     GTCheckBox::setChecked(os, alignLabelsCheck, true);
1721 
1722     //    Expected state: labels are aligned
1723     QImage alignedImg = GTWidget::getImage(os, w);
1724     CHECK_SET_ERR(alignedImg != initImg, "labels not aligned");
1725 
1726     //    8. Uncheck "align labels" checkbox.
1727     GTCheckBox::setChecked(os, alignLabelsCheck, false);
1728 
1729     //    Expected state: labels are not aligned
1730     QImage finalImg = GTWidget::getImage(os, w);
1731     CHECK_SET_ERR(finalImg == initImg, "tree ialigned");
1732 }
1733 
1734 namespace {
expandFontSettings(HI::GUITestOpStatus & os)1735 void expandFontSettings(HI::GUITestOpStatus &os) {
1736     QWidget *labelsColorButton = GTWidget::findWidget(os, "labelsColorButton");
1737     CHECK_SET_ERR(labelsColorButton != nullptr, "labelsColorButton not found");
1738     if (!labelsColorButton->isVisible()) {
1739         GTWidget::click(os, GTWidget::findWidget(os, "lblFontSettings"));
1740     }
1741 }
1742 
setLabelsColor(HI::GUITestOpStatus & os,int r,int g,int b)1743 void setLabelsColor(HI::GUITestOpStatus &os, int r, int g, int b) {
1744     expandFontSettings(os);
1745     GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, r, g, b));
1746     QWidget *labelsColorButton = GTWidget::findWidget(os, "labelsColorButton");
1747     GTWidget::click(os, labelsColorButton);
1748 }
1749 
checkLabelColor(HI::GUITestOpStatus & os,const QString & expectedColorName)1750 bool checkLabelColor(HI::GUITestOpStatus &os, const QString &expectedColorName) {
1751     QGraphicsView *w = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
1752     CHECK_SET_ERR_RESULT(w != nullptr, "tree view not found", false);
1753     QList<QGraphicsSimpleTextItem *> labels = GTUtilsPhyTree::getVisibleLabels(os, w);
1754     CHECK_SET_ERR_RESULT(!labels.isEmpty(), "there are no visiable labels", false);
1755 
1756     const QImage img = GTWidget::getImage(os, AppContext::getMainWindow()->getQMainWindow());
1757 
1758     // hack
1759     foreach (QGraphicsSimpleTextItem *label, labels) {
1760         QRectF rect = label->boundingRect();
1761         w->ensureVisible(label);
1762         for (int i = 0; i < rect.right(); i++) {
1763             for (int j = 0; j < rect.bottom(); j++) {
1764                 QPoint p(i, j);
1765                 QPoint global = w->viewport()->mapToGlobal(w->mapFromScene(label->mapToScene(p)));
1766 
1767                 QRgb rgb = img.pixel(global);
1768                 QColor c = QColor(rgb);
1769                 QString name = c.name();
1770                 if (name == expectedColorName) {
1771                     return true;
1772                 }
1773             }
1774         }
1775     }
1776     return false;
1777 }
1778 }  // namespace
1779 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006)1780 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006) {
1781     //    1. Open data/samples/CLUSTALW/COI.aln
1782     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1783     GTUtilsTaskTreeView::waitTaskFinished(os);
1784     //    2. Open tree settings option panel tab. build tree
1785     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1786     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1787     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1788 //    3. Change labels color.
1789 #ifndef Q_OS_DARWIN
1790     setLabelsColor(os, 255, 0, 0);
1791     //    Expected: color changed
1792     bool b = checkLabelColor(os, "#ff0000");
1793     CHECK_SET_ERR(b, "color not changed");
1794 #else
1795     expandFontSettings(os);
1796 #endif
1797     //    4. Change labels font
1798     QComboBox *fontComboBox = GTWidget::findExactWidget<QComboBox *>(os, "fontComboBox");
1799     QLineEdit *l = fontComboBox->findChild<QLineEdit *>();
1800     GTLineEdit::setText(os, l, "Serif");
1801     GTKeyboardDriver::keyClick(Qt::Key_Enter);
1802     //    Expected: font changed
1803     QGraphicsSimpleTextItem *label = GTUtilsPhyTree::getVisibleLabels(os).at(0);
1804     QString family = label->font().family();
1805     CHECK_SET_ERR(family == "Serif", "unexpected style: " + family);
1806     //    5. Change labels size
1807     QWidget *fontSizeSpinBox = GTWidget::findWidget(os, "fontSizeSpinBox");
1808     CHECK_SET_ERR(fontSizeSpinBox != nullptr, "fontSizeSpinBox not found");
1809 
1810     QLineEdit *fontLineedit = fontSizeSpinBox->findChild<QLineEdit *>();
1811     GTLineEdit::setText(os, fontLineedit, "20");
1812     GTKeyboardDriver::keyClick(Qt::Key_Enter);
1813     //    Expected: size changed
1814     int pointSize = label->font().pointSize();
1815     CHECK_SET_ERR(pointSize == 20, QString("unexpected point size: %1").arg(pointSize));
1816     // check font settings buttons
1817     QWidget *boldAttrButton = GTWidget::findWidget(os, "boldAttrButton");
1818     QWidget *italicAttrButton = GTWidget::findWidget(os, "italicAttrButton");
1819     QWidget *underlineAttrButton = GTWidget::findWidget(os, "underlineAttrButton");
1820 
1821     // bold
1822     GTWidget::click(os, boldAttrButton);
1823     CHECK_SET_ERR(label->font().bold(), "expected bold font");
1824     // not bold
1825     GTWidget::click(os, boldAttrButton);
1826     CHECK_SET_ERR(!label->font().bold(), "bold font not canceled");
1827 
1828     // italic
1829     GTWidget::click(os, italicAttrButton);
1830     CHECK_SET_ERR(label->font().italic(), "expected italic font");
1831     // not italic
1832     GTWidget::click(os, italicAttrButton);
1833     CHECK_SET_ERR(!label->font().italic(), "italic font not canceled");
1834 
1835     // underline
1836     GTWidget::click(os, underlineAttrButton);
1837     CHECK_SET_ERR(label->font().underline(), "expected underline font");
1838     // not underline
1839     GTWidget::click(os, underlineAttrButton);
1840     CHECK_SET_ERR(!label->font().underline(), "underline font not canceled");
1841 }
1842 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0007)1843 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0007) {
1844     // Open data/samples/CLUSTALW/COI.aln.
1845     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1846     GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
1847 
1848     // Open tree settings option panel tab. Build a tree.
1849     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1850 
1851     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1852     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1853     GTUtilsTaskTreeView::waitTaskFinished(os);
1854 
1855     // Disable sync mode to allow resize of the view.
1856 
1857     GTUtilsProjectTreeView::toggleView(os);  // Close opened project tree view to make all icons on the toolbar visible with no overflow.
1858     QAbstractButton *syncModeButton = GTAction::button(os, "sync_msa_action");
1859     CHECK_SET_ERR(syncModeButton->isChecked(), "Sync mode must be ON");
1860 
1861     GTWidget::click(os, syncModeButton);
1862     GTUtilsTaskTreeView::waitTaskFinished(os);
1863     CHECK_SET_ERR(!syncModeButton->isChecked(), "Sync mode must be OFF");
1864 
1865     auto treeView = GTWidget::findExactWidget<QGraphicsView *>(os, "treeView");
1866     QGraphicsScene *scene = treeView->scene();
1867 
1868     // Change widthSlider value.
1869     int initialWidth = scene->width();
1870     auto widthSlider = GTWidget::findExactWidget<QSlider *>(os, "widthSlider");
1871     GTSlider::setValue(os, widthSlider, 50);
1872 
1873     // Expected state: the tree became wider.
1874     int finalWidth = scene->width();
1875     CHECK_SET_ERR(initialWidth < finalWidth, QString("Width is not changed! Initial: %1, final: %2").arg(initialWidth).arg(finalWidth));
1876 
1877     // Change heightSlider value.
1878     int initialHeight = scene->height();
1879     auto heightSlider = GTWidget::findExactWidget<QSlider *>(os, "heightSlider");
1880     GTSlider::setValue(os, heightSlider, 20);
1881 
1882     // Expected state: the tree became wider.
1883     int finalHeight = scene->height();
1884     CHECK_SET_ERR(initialHeight < finalHeight, QString("Height is not changed! Initial: %1, final: %2").arg(initialHeight).arg(finalHeight));
1885 }
1886 
1887 namespace {
1888 
expandPenSettings(HI::GUITestOpStatus & os)1889 void expandPenSettings(HI::GUITestOpStatus &os) {
1890     QWidget *branchesColorButton = GTWidget::findWidget(os, "branchesColorButton");
1891     CHECK_SET_ERR(branchesColorButton != nullptr, "branchesColorButton not found");
1892     if (!branchesColorButton->isVisible()) {
1893         GTWidget::click(os, GTWidget::findWidget(os, "lblPenSettings"));
1894     }
1895 }
1896 
setBranchColor(HI::GUITestOpStatus & os,int r,int g,int b)1897 void setBranchColor(HI::GUITestOpStatus &os, int r, int g, int b) {
1898     expandPenSettings(os);
1899     GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, r, g, b));
1900     QWidget *branchesColorButton = GTWidget::findWidget(os, "branchesColorButton");
1901     GTWidget::click(os, branchesColorButton);
1902 }
1903 
colorPercent(HI::GUITestOpStatus & os,QWidget * widget,const QString & colorName)1904 double colorPercent(HI::GUITestOpStatus &os, QWidget *widget, const QString &colorName) {
1905     int total = 0;
1906     int found = 0;
1907     const QImage img = GTWidget::getImage(os, widget);
1908     QRect r = widget->rect();
1909     int wid = r.width();
1910     int heig = r.height();
1911     for (int i = 0; i < wid; i++) {
1912         for (int j = 0; j < heig; j++) {
1913             total++;
1914             QPoint p(i, j);
1915             QRgb rgb = img.pixel(p);
1916             QColor color = QColor(rgb);
1917             QString name = color.name();
1918             if (name == colorName) {
1919                 found++;
1920             }
1921         }
1922     }
1923     double result = static_cast<double>(found) / total;
1924     return result;
1925 }
1926 
1927 }  // namespace
1928 
GUI_TEST_CLASS_DEFINITION(tree_settings_test_0008)1929 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0008) {
1930     //    1. Open data/samples/CLUSTALW/COI.aln
1931     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1932     GTUtilsTaskTreeView::waitTaskFinished(os);
1933     //    2. Open tree settings option panel tab. build tree
1934     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
1935     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
1936     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
1937     // Click to empty space near the node to reset selection
1938     QList<GraphicsButtonItem *> nodes = GTUtilsPhyTree::getOrderedRectangularNodes(os);
1939     CHECK_SET_ERR(nodes.size() == 16,
1940                   QString("Something goes wrong with building tree from COI.aln We are expect 16 nodes instead of: %1")
1941                       .arg(QString::number(nodes.size())));
1942     GTThread::waitForMainThread();
1943     QGraphicsView *treeView = GTWidget::findExactWidget<QGraphicsView *>(os, "treeView");
1944     CHECK_SET_ERR(treeView, "treeView not found");
1945     QPointF sceneCoord = nodes[1]->mapToScene(nodes[1]->boundingRect().topLeft());
1946     QPoint viewCord = treeView->mapFromScene(sceneCoord);
1947     QPoint globalCoord = treeView->mapToGlobal(viewCord);
1948     globalCoord += QPoint(nodes[1]->boundingRect().width() / 2 + 8, nodes[1]->boundingRect().height() / 2 + 8);
1949     GTMouseDriver::moveTo(globalCoord);
1950     GTMouseDriver::click();
1951 //    3. change branch color
1952 #ifndef Q_OS_DARWIN
1953     setBranchColor(os, 255, 0, 0);
1954 #else
1955     expandPenSettings(os);
1956 #endif
1957     //    Expected state: color changed
1958     CHECK_SET_ERR(treeView != nullptr, "tree view not found");
1959     QString colorName;
1960 #ifndef Q_OS_DARWIN
1961     colorName = "#ff0000";
1962 #else
1963     colorName = "#000000";
1964 #endif
1965     double initPercent = colorPercent(os, treeView, colorName);
1966     CHECK_SET_ERR(initPercent != 0, "color not changed");
1967 
1968     //    4. change  line Weight
1969     QSpinBox *lineWeightSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "lineWeightSpinBox");
1970     GTSpinBox::setValue(os, lineWeightSpinBox, 30, GTGlobals::UseKeyBoard);
1971     double finalPercent = colorPercent(os, treeView, colorName);
1972     CHECK_SET_ERR(finalPercent > initPercent * 10, "branches width changed not enough");
1973 }
1974 
1975 namespace {
setConsensusOutputPath(HI::GUITestOpStatus & os,const QString & path)1976 void setConsensusOutputPath(HI::GUITestOpStatus &os, const QString &path) {
1977     QLineEdit *pathLe = GTWidget::findExactWidget<QLineEdit *>(os, "pathLe");
1978     CHECK_SET_ERR(pathLe != nullptr, "pathLe not found");
1979     GTLineEdit::setText(os, pathLe, path);
1980 }
1981 }  // namespace
1982 
GUI_TEST_CLASS_DEFINITION(export_consensus_test_0001)1983 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0001) {
1984     const QString fileName = "export_consensus_test_0001.txt";
1985     //    1. Open data/samples/CLUSTALW/COI.aln
1986     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
1987     GTUtilsTaskTreeView::waitTaskFinished(os);
1988     //    2. Open export consensus option panel tab
1989     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
1990     //    3. Select some existing file as output
1991     QString s = sandBoxDir + fileName;
1992     QFile f(s);
1993     bool created = f.open(QFile::ReadWrite);
1994     CHECK_SET_ERR(created, "file not created");
1995     f.close();
1996 
1997     setConsensusOutputPath(os, sandBoxDir + fileName);
1998     //    4. Press export button
1999     GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
2000     GTUtilsTaskTreeView::waitTaskFinished(os);
2001     //    Expected state: file rewrited
2002     int size = GTFile::getSize(os, sandBoxDir + fileName);
2003     CHECK_SET_ERR(size == 604, QString("unexpected file size %1").arg(size));
2004     GTUtilsProjectTreeView::doubleClickItem(os, fileName);
2005 }
2006 
GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002)2007 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002) {
2008     GTLogTracer l;
2009     const QString fileName = "export_consensus_test_0002.aln";
2010     //    1. Open data/samples/CLUSTALW/COI.aln
2011     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2012     GTUtilsTaskTreeView::waitTaskFinished(os);
2013     //    2. Open export consensus option panel tab
2014     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
2015     //    3. Select existing read-only file "export_consensus_test_0002.aln" as output
2016 
2017     const QString dirPath = sandBoxDir + "export_consensus_test_0002";
2018     QDir().mkpath(dirPath);
2019 
2020     const QString filePath = dirPath + "/" + fileName;
2021     QFile f(filePath);
2022     bool created = f.open(QFile::ReadWrite);
2023     CHECK_SET_ERR(created, "file not created");
2024     f.close();
2025 
2026     GTFile::setReadOnly(os, filePath);
2027 
2028     setConsensusOutputPath(os, filePath);
2029     //    4. Press export button
2030     GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
2031     //    Expected state: error in log: Task {Save document} finished with error: No permission to write to 'COI_transl.aln' file.
2032     QString error = l.getJoinedErrorString();
2033     const QString expectedFilePath = QFileInfo(filePath).absoluteFilePath();
2034     QString expected = QString("Task {Export consensus} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(expectedFilePath);
2035     CHECK_SET_ERR(error.contains(expected), QString("Unexpected error: %1").arg(error));
2036 
2037     GTFile::setReadWrite(os, filePath);
2038 }
2039 
GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003)2040 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003) {
2041     GTLogTracer l;
2042     const QString fileName = "export_consensus_test_0003.aln";
2043     const QString dirName = "export_consensus_test_0003";
2044     //    1. Open data/samples/CLUSTALW/COI.aln
2045     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2046     GTUtilsMsaEditor::checkMsaEditorWindowIsActive(os);
2047 
2048     //    2. Open export consensus option panel tab
2049     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
2050 
2051     //    3. Select some existing file in read-only directory as output
2052     QString dirPath = sandBoxDir + dirName;
2053     bool ok = QDir().mkpath(dirPath);
2054     CHECK_SET_ERR(ok, "subfolder not created");
2055     GTFile::setReadOnly(os, dirPath);
2056 
2057     QString filePath = dirPath + '/' + fileName;
2058     setConsensusOutputPath(os, filePath);
2059 
2060     //    4. Press export button
2061     GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
2062     GTThread::waitForMainThread();
2063 
2064     //    Expected state: notification is shown that folder is read-only.
2065     QString error = l.getJoinedErrorString();
2066     QString expected = QString("Task {Export consensus} finished with error: Folder is read-only: %1").arg(QFileInfo(filePath).absolutePath());
2067     CHECK_SET_ERR(error == expected, QString("Unexpected error: '%1', expected: '%2'").arg(error).arg(expected));
2068 }
2069 
GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004)2070 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004) {
2071     // 0. Change Documents folder to sandbox
2072     class Custom : public CustomScenario {
2073         void run(HI::GUITestOpStatus &os) {
2074             QWidget *dialog = GTWidget::getActiveModalWidget(os);
2075             AppSettingsDialogFiller::setDocumentsDirPath(os, sandBoxDir);
2076             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
2077         }
2078     };
2079 
2080     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new Custom()));
2081     GTMenu::clickMainMenuItem(os, QStringList() << "Settings"
2082                                                 << "Preferences...",
2083                               GTGlobals::UseMouse);
2084     GTUtilsTaskTreeView::waitTaskFinished(os);
2085 
2086     //    1. Open data/samples/CLUSTALW/COI.aln
2087     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2088     GTUtilsTaskTreeView::waitTaskFinished(os);
2089     //    2. Open export consensus option panel tab
2090     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
2091     //    3. Set empty path
2092     setConsensusOutputPath(os, "");
2093 
2094     class exportConsensusTest0004Filler : public CustomScenario {
2095     public:
2096         exportConsensusTest0004Filler() {
2097         }
2098         virtual void run(HI::GUITestOpStatus &os) {
2099             QWidget *dialog = GTWidget::getActiveModalWidget(os);
2100             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
2101         }
2102     };
2103     GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
2104     GTUtilsTaskTreeView::waitTaskFinished(os);
2105 
2106     QLineEdit *pathLe = GTWidget::findExactWidget<QLineEdit *>(os, "pathLe");
2107     QString pathLeText = pathLe->text();
2108     CHECK_SET_ERR(!pathLeText.isEmpty() && pathLeText.contains("COI_consensus_1.txt"), "wrong lineEdit text: " + pathLeText);
2109 }
2110 
GUI_TEST_CLASS_DEFINITION(statistics_test_0001)2111 GUI_TEST_CLASS_DEFINITION(statistics_test_0001) {
2112     //    1. Open data/samples/CLUSTALW/COI.aln
2113     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2114     GTUtilsTaskTreeView::waitTaskFinished(os);
2115     //    2. Open export statistics option panel tab
2116     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
2117     //    3. check showDistancesColumn checkbox
2118     QCheckBox *showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
2119     GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
2120     //    4. Check reference hint
2121     QLabel *refSeqWarning = GTWidget::findExactWidget<QLabel *>(os, "refSeqWarning");
2122     CHECK_SET_ERR(refSeqWarning != nullptr, "refSeqWarning");
2123     CHECK_SET_ERR(refSeqWarning->text() == "Hint: select a reference above", QString("Unexpected hint: %1").arg(refSeqWarning->text()));
2124     //    5. Add Phaneroptera_falcata as reference
2125     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2126     //    Expected state: similarity column appaered
2127     QString s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2128     CHECK_SET_ERR(s0 == "0%", QString("Unexpected similarity at line 1: %1").arg(s0));
2129     QString s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2130     CHECK_SET_ERR(s1 == "18%", QString("Unexpected similarity at line 2: %1").arg(s1));
2131 
2132     //    6. Check counts mode
2133     QRadioButton *countsButton = GTWidget::findExactWidget<QRadioButton *>(os, "countsButton");
2134     GTRadioButton::click(os, countsButton);
2135 
2136     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2137     CHECK_SET_ERR(s0 == "0", QString("Unexpected similarity at line 1: %1").arg(s0));
2138     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2139     CHECK_SET_ERR(s1 == "106", QString("Unexpected similarity at line 2: %1").arg(s1));
2140     //    7. Check exclude gabs mode
2141     QCheckBox *excludeGapsCheckBox = GTWidget::findExactWidget<QCheckBox *>(os, "excludeGapsCheckBox");
2142     GTCheckBox::setChecked(os, excludeGapsCheckBox, true);
2143 
2144     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 7);
2145     CHECK_SET_ERR(s0 == "110", QString("Unexpected similarity at line 8: %1").arg(s0));
2146     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 8);
2147     CHECK_SET_ERR(s1 == "100", QString("Unexpected similarity at line 9: %1").arg(s1));
2148 }
2149 
GUI_TEST_CLASS_DEFINITION(statistics_test_0002)2150 GUI_TEST_CLASS_DEFINITION(statistics_test_0002) {
2151     //    1. Open data/samples/CLUSTALW/COI.aln
2152     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2153     GTUtilsTaskTreeView::waitTaskFinished(os);
2154     //    2. Open export statistics option panel tab
2155     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
2156     //    3. check showDistancesColumn checkbox
2157     QCheckBox *showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
2158     GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
2159     //    4. Add Phaneroptera_falcata as reference
2160     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2161     //    5. Check identity algorithm
2162     QComboBox *algoComboBox = GTWidget::findExactWidget<QComboBox *>(os, "algoComboBox");
2163     GTComboBox::selectItemByText(os, algoComboBox, "Similarity");
2164     /*
2165     QString s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2166     CHECK_SET_ERR(s0 == "100%", QString("Unexpected similarity at line 1: %1").arg(s0));
2167     QString s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2168     CHECK_SET_ERR(s1 == "82%", QString("Unexpected similarity at line 2: %1").arg(s1));
2169 //    6. Check counts mode
2170     QRadioButton* countsButton = GTWidget::findExactWidget<QRadioButton*>(os, "countsButton");
2171     GTRadioButton::click(os, countsButton);
2172 
2173     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2174     CHECK_SET_ERR(s0 == "604", QString("Unexpected similarity at line 1: %1").arg(s0));
2175     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2176     CHECK_SET_ERR(s1 == "498", QString("Unexpected similarity at line 2: %1").arg(s1));
2177     */
2178 }
GUI_TEST_CLASS_DEFINITION(statistics_test_0003)2179 GUI_TEST_CLASS_DEFINITION(statistics_test_0003) {
2180     //    1. Open data/samples/CLUSTALW/COI.aln
2181     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2182     GTUtilsTaskTreeView::waitTaskFinished(os);
2183     //    2. Open export statistics option panel tab
2184     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
2185     //    3. check showDistancesColumn checkbox
2186     QCheckBox *showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
2187     GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
2188     //    4. Add Phaneroptera_falcata as reference
2189     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2190     //    5. delete symbol at point (0,0)
2191     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
2192     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
2193     GTKeyboardDriver::keyClick(Qt::Key_Delete);
2194     //    Expected state: similarity changed, updateButton ins disablec
2195     QString s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2196     CHECK_SET_ERR(s0 == "0%", QString("(1)Unexpected similarity at line 1: %1").arg(s0));
2197     QString s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2198     CHECK_SET_ERR(s1 == "69%", QString("(1)Unexpected similarity at line 2: %1").arg(s1));
2199 
2200     QWidget *updateButton = GTWidget::findWidget(os, "updateButton");
2201     CHECK_SET_ERR(updateButton != nullptr, "updateButton not found");
2202     CHECK_SET_ERR(!updateButton->isEnabled(), "updateButton is unexpectidly enabled");
2203     //    6. Undo. Uncheck automatic update checkbox
2204     GTWidget::click(os, GTAction::button(os, "msa_action_undo"));
2205     QCheckBox *autoUpdateCheck = GTWidget::findExactWidget<QCheckBox *>(os, "autoUpdateCheck");
2206     GTCheckBox::setChecked(os, autoUpdateCheck, false);
2207     //    5. delete symbol at point (0,0)
2208     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
2209     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
2210     GTKeyboardDriver::keyClick(Qt::Key_Delete);
2211     //    Expected state: similarity not changed
2212     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2213     CHECK_SET_ERR(s0 == "0%", QString("(2)Unexpected similarity at line 1: %1").arg(s0));
2214     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2215     CHECK_SET_ERR(s1 == "18%", QString("(2)Unexpected similarity at line 2: %1").arg(s1));
2216     //    6. Press autoUpdate button
2217     GTWidget::click(os, updateButton);
2218     //    Expected state: similarity updated
2219     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
2220     CHECK_SET_ERR(s0 == "0%", QString("(3)Unexpected similarity at line 1: %1").arg(s0));
2221     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
2222     CHECK_SET_ERR(s1 == "69%", QString("(3)Unexpected similarity at line 2: %1").arg(s1));
2223 }
2224 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0001)2225 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0001) {
2226     //    1. Open data/samples/CLUSTALW/COI.aln
2227     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2228     GTUtilsTaskTreeView::waitTaskFinished(os);
2229     //    2. Open export general option panel tab
2230     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
2231     //   Check saving parameters
2232     // find widgets
2233     QComboBox *consensusType = GTWidget::findExactWidget<QComboBox *>(os, "consensusType");
2234     QSpinBox *thresholdSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "thresholdSpinBox");
2235 
2236     // set some parameters
2237     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2238     GTComboBox::selectItemByText(os, consensusType, "Strict");
2239     GTSpinBox::setValue(os, thresholdSpinBox, 50, GTGlobals::UseKeyBoard);
2240 
2241     // close and open option panel
2242     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_GENERAL"));
2243     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_GENERAL"));
2244 
2245     // checks
2246     QLineEdit *sequenceLineEdit = GTWidget::findExactWidget<QLineEdit *>(os, "sequenceLineEdit");
2247     consensusType = GTWidget::findExactWidget<QComboBox *>(os, "consensusType");
2248     thresholdSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "thresholdSpinBox");
2249 
2250     CHECK_SET_ERR(sequenceLineEdit->text() == "Phaneroptera_falcata", QString("unexpected reference: %1").arg(sequenceLineEdit->text()));
2251     CHECK_SET_ERR(consensusType->currentText() == "Strict", QString("unexpected consensus: %1").arg(consensusType->currentText()));
2252     CHECK_SET_ERR(thresholdSpinBox->value() == 50, QString("unexpected threshold value: %1").arg(thresholdSpinBox->value()));
2253 }
2254 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0002)2255 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0002) {
2256     //    1. Open data/samples/CLUSTALW/COI.aln
2257     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2258     GTUtilsTaskTreeView::waitTaskFinished(os);
2259     //    2. Open export highlighting option panel tab
2260     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
2261 
2262     //   Check saving parameters
2263     // find widgets
2264     QComboBox *colorScheme = GTWidget::findExactWidget<QComboBox *>(os, "colorScheme");
2265     QComboBox *highlightingScheme = GTWidget::findExactWidget<QComboBox *>(os, "highlightingScheme");
2266     QCheckBox *useDots = GTWidget::findExactWidget<QCheckBox *>(os, "useDots");
2267 
2268     // set some parameters
2269     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2270     GTComboBox::selectItemByText(os, colorScheme, "Jalview");
2271     GTComboBox::selectItemByText(os, highlightingScheme, "Agreements");
2272     GTCheckBox::setChecked(os, useDots, true);
2273 
2274     // close and open option panel
2275     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
2276     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
2277 
2278     // checks
2279     QLineEdit *sequenceLineEdit = GTWidget::findExactWidget<QLineEdit *>(os, "sequenceLineEdit");
2280     colorScheme = GTWidget::findExactWidget<QComboBox *>(os, "colorScheme");
2281     highlightingScheme = GTWidget::findExactWidget<QComboBox *>(os, "highlightingScheme");
2282     useDots = GTWidget::findExactWidget<QCheckBox *>(os, "useDots");
2283 
2284     CHECK_SET_ERR(sequenceLineEdit->text() == "Phaneroptera_falcata", QString("unexpected reference: %1").arg(sequenceLineEdit->text()));
2285     CHECK_SET_ERR(colorScheme->currentText() == "Jalview", QString("uexpected color scheme: %1").arg(colorScheme->currentText()));
2286     CHECK_SET_ERR(highlightingScheme->currentText() == "Agreements", QString("uexpected highlighting: %1").arg(highlightingScheme->currentText()));
2287     CHECK_SET_ERR(useDots->isChecked(), "Use dots checkbox is not checked");
2288 }
2289 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003)2290 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003) {
2291     // KAlign settings
2292     //     1. Open data/samples/CLUSTALW/COI.aln
2293     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2294     GTUtilsTaskTreeView::waitTaskFinished(os);
2295     //    2. Open export highlighting option panel tab
2296     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
2297 
2298     //   Check saving parameters
2299     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
2300     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
2301 
2302     // expand settings
2303     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Algorithm settings"));
2304     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Output settings"));
2305 
2306     // find widgets
2307     QDoubleSpinBox *gapOpen = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapOpen");
2308     QDoubleSpinBox *gapExtd = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapExtd");
2309     QDoubleSpinBox *gapTerm = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapTerm");
2310     QDoubleSpinBox *bonusScore = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "bonusScore");
2311     QCheckBox *inNewWindowCheckBox = GTWidget::findExactWidget<QCheckBox *>(os, "inNewWindowCheckBox");
2312 
2313     // set values
2314     GTDoubleSpinbox::setValue(os, gapOpen, 100, GTGlobals::UseKeyBoard);
2315     GTDoubleSpinbox::setValue(os, gapExtd, 100, GTGlobals::UseKeyBoard);
2316     GTDoubleSpinbox::setValue(os, gapTerm, 100, GTGlobals::UseKeyBoard);
2317     GTDoubleSpinbox::setValue(os, bonusScore, 100, GTGlobals::UseKeyBoard);
2318     GTCheckBox::setChecked(os, inNewWindowCheckBox, false);
2319 
2320     // close and open option panel
2321     GTWidget::click(os, GTWidget::findWidget(os, "OP_PAIRALIGN"));
2322     GTWidget::click(os, GTWidget::findWidget(os, "OP_PAIRALIGN"));
2323 
2324     // checks
2325     QLineEdit *l1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
2326     QLineEdit *l2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
2327     gapOpen = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapOpen");
2328     gapExtd = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapExtd");
2329     gapTerm = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "gapTerm");
2330     bonusScore = GTWidget::findExactWidget<QDoubleSpinBox *>(os, "bonusScore");
2331     inNewWindowCheckBox = GTWidget::findExactWidget<QCheckBox *>(os, "inNewWindowCheckBox");
2332 
2333     CHECK_SET_ERR(l1->text() == "Phaneroptera_falcata", QString("unexpected seq1: %1").arg(l1->text()));
2334     CHECK_SET_ERR(l2->text() == "Isophya_altaica_EF540820", QString("unexpected seq2: %1").arg(l2->text()));
2335     CHECK_SET_ERR(gapOpen->value() == 100, QString("unexpected gapOpen value: %1").arg(gapOpen->value()));
2336     CHECK_SET_ERR(gapExtd->value() == 100, QString("unexpected gapExtd value: %1").arg(gapExtd->value()));
2337     CHECK_SET_ERR(gapTerm->value() == 100, QString("unexpected gapTerm value: %1").arg(gapTerm->value()));
2338     CHECK_SET_ERR(bonusScore->value() == 100, QString("unexpected bonusScore value: %1").arg(bonusScore->value()));
2339     CHECK_SET_ERR(!inNewWindowCheckBox->isChecked(), "inNewWindowCheckBox is unexpectidly checked");
2340 }
2341 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003_1)2342 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0003_1) {  //
2343     // smith-waterman settings
2344     //     1. Open data/samples/CLUSTALW/COI.aln
2345     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2346     GTUtilsTaskTreeView::waitTaskFinished(os);
2347     //    2. Open export highlighting option panel tab
2348     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
2349 
2350     //   Check saving parameters
2351     GTUtilsOptionPanelMsa::addFirstSeqToPA(os, "Phaneroptera_falcata");
2352     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
2353 
2354     // expand settings
2355     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Algorithm settings"));
2356 
2357     // find widgets
2358     QComboBox *algorithmListComboBox = GTWidget::findExactWidget<QComboBox *>(os, "algorithmListComboBox");
2359     GTComboBox::selectItemByText(os, algorithmListComboBox, "Smith-Waterman");
2360 
2361     QComboBox *algorithmVersion = GTWidget::findExactWidget<QComboBox *>(os, "algorithmVersion");
2362     QComboBox *scoringMatrix = GTWidget::findExactWidget<QComboBox *>(os, "scoringMatrix");
2363     QSpinBox *gapOpen = GTWidget::findExactWidget<QSpinBox *>(os, "gapOpen");
2364     QSpinBox *gapExtd = GTWidget::findExactWidget<QSpinBox *>(os, "gapExtd");
2365 
2366     // setValues
2367     GTComboBox::selectItemByText(os, algorithmVersion, "SW_classic");
2368     GTComboBox::selectItemByText(os, scoringMatrix, "dna");
2369     GTSpinBox::setValue(os, gapOpen, 5);
2370     GTSpinBox::setValue(os, gapExtd, 5);
2371 
2372     // close and open option panel
2373     GTWidget::click(os, GTWidget::findWidget(os, "OP_PAIRALIGN"));
2374     GTWidget::click(os, GTWidget::findWidget(os, "OP_PAIRALIGN"));
2375 
2376     // checks
2377     QLineEdit *l1 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 1);
2378     QLineEdit *l2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
2379     algorithmListComboBox = GTWidget::findExactWidget<QComboBox *>(os, "algorithmListComboBox");
2380     algorithmVersion = GTWidget::findExactWidget<QComboBox *>(os, "algorithmVersion");
2381     scoringMatrix = GTWidget::findExactWidget<QComboBox *>(os, "scoringMatrix");
2382     gapOpen = GTWidget::findExactWidget<QSpinBox *>(os, "gapOpen");
2383     gapExtd = GTWidget::findExactWidget<QSpinBox *>(os, "gapExtd");
2384 
2385     CHECK_SET_ERR(l1->text() == "Phaneroptera_falcata", QString("unexpected seq1: %1").arg(l1->text()));
2386     CHECK_SET_ERR(l2->text() == "Isophya_altaica_EF540820", QString("unexpected seq2: %1").arg(l2->text()));
2387     CHECK_SET_ERR(algorithmListComboBox->currentText() == "Smith-Waterman", QString("unexpected current text").arg(algorithmListComboBox->currentText()));
2388     CHECK_SET_ERR(algorithmVersion->currentText() == "SW_classic", QString("unexpected algorithm: %1").arg(algorithmVersion->currentText()));
2389     CHECK_SET_ERR(scoringMatrix->currentText().contains("dna"), QString("unexpected scoring matrix").arg(scoringMatrix->currentText()));
2390     CHECK_SET_ERR(gapOpen->value() == 5, QString("unexpected gap open value: %1").arg(gapOpen->value()));
2391     CHECK_SET_ERR(gapExtd->value() == 5, QString("unexpected gap ext value: %1").arg(gapExtd->value()));
2392 }
2393 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004)2394 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004) {
2395     //    1. Open data/samples/CLUSTALW/COI.aln
2396     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2397     GTUtilsTaskTreeView::waitTaskFinished(os);
2398     //    2. Open tree settings option panel tab
2399     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
2400     //    3. Press "build tree" button.
2401     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
2402     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
2403     GTUtilsTaskTreeView::waitTaskFinished(os);
2404 
2405     // set some values
2406     expandFontSettings(os);
2407     QComboBox *layoutCombo = GTWidget::findExactWidget<QComboBox *>(os, "layoutCombo");
2408     GTComboBox::selectItemByText(os, layoutCombo, "Circular");
2409 
2410     QComboBox *treeViewCombo = GTWidget::findExactWidget<QComboBox *>(os, "treeViewCombo");
2411     GTComboBox::selectItemByText(os, treeViewCombo, "Cladogram");
2412     setLabelsColor(os, 255, 255, 255);
2413     QString initialColor = GTWidget::getColor(os, GTWidget::findWidget(os, "labelsColorButton"), QPoint(10, 10)).name();
2414     QComboBox *fontComboBox = GTWidget::findExactWidget<QComboBox *>(os, "fontComboBox");
2415     QLineEdit *l = fontComboBox->findChild<QLineEdit *>();
2416 #ifdef Q_OS_LINUX
2417     QString fontName = "Serif";
2418 #else
2419     QString fontName = "Tahoma";
2420 #endif
2421     GTLineEdit::setText(os, l, fontName);
2422     GTKeyboardDriver::keyClick(Qt::Key_Enter);
2423 
2424     QSpinBox *fontSizeSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "fontSizeSpinBox");
2425     GTSpinBox::setValue(os, fontSizeSpinBox, 14);
2426 
2427     GTWidget::click(os, GTWidget::findWidget(os, "boldAttrButton"));
2428     GTWidget::click(os, GTWidget::findWidget(os, "italicAttrButton"));
2429     GTWidget::click(os, GTWidget::findWidget(os, "underlineAttrButton"));
2430 
2431     // close and open option panel
2432     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_TREES_WIDGET"));
2433     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_TREES_WIDGET"));
2434 
2435     // check settings
2436     layoutCombo = GTWidget::findExactWidget<QComboBox *>(os, "layoutCombo");
2437     treeViewCombo = GTWidget::findExactWidget<QComboBox *>(os, "treeViewCombo");
2438     QWidget *labelsColorButton = GTWidget::findWidget(os, "labelsColorButton");
2439     fontComboBox = GTWidget::findExactWidget<QComboBox *>(os, "fontComboBox");
2440     fontSizeSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "fontSizeSpinBox");
2441     QToolButton *boldAttrButton = GTWidget::findExactWidget<QToolButton *>(os, "boldAttrButton");
2442     QToolButton *italicAttrButton = GTWidget::findExactWidget<QToolButton *>(os, "italicAttrButton");
2443     QToolButton *underlineAttrButton = GTWidget::findExactWidget<QToolButton *>(os, "underlineAttrButton");
2444 
2445     CHECK_SET_ERR(layoutCombo->currentText() == "Circular", QString("unexpected layout: %1").arg(layoutCombo->currentText()));
2446     CHECK_SET_ERR(treeViewCombo->currentText() == "Cladogram", QString("unexpected tree view: %1").arg(treeViewCombo->currentText()));
2447     CHECK_SET_ERR(GTWidget::hasPixelWithColor(os, labelsColorButton, initialColor), QString("Initial color is not found: %1").arg(initialColor));
2448     CHECK_SET_ERR(fontComboBox->currentText().contains(fontName), QString("unexpected font: %1").arg(fontComboBox->currentText()));
2449     CHECK_SET_ERR(fontSizeSpinBox->value() == 14, QString("unexpected font size: %1").arg(fontSizeSpinBox->value()));
2450     CHECK_SET_ERR(boldAttrButton->isChecked(), "boldAttrButton is not checked");
2451     CHECK_SET_ERR(italicAttrButton->isChecked(), "italicAttrButton is not checked");
2452     CHECK_SET_ERR(underlineAttrButton->isChecked(), "underlineAttrButton is not checked");
2453 }
2454 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004_1)2455 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004_1) {
2456     //    1. Open data/samples/CLUSTALW/COI.aln
2457     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2458     GTUtilsTaskTreeView::waitTaskFinished(os);
2459     //    2. Open tree settings option panel tab
2460     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
2461     //    3. Press "build tree" button.
2462     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
2463     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
2464     GTUtilsTaskTreeView::waitTaskFinished(os);
2465 
2466     // find widgets
2467     QCheckBox *showNamesCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showNamesCheck");
2468     QCheckBox *showDistancesCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesCheck");
2469     QSlider *widthSlider = GTWidget::findExactWidget<QSlider *>(os, "widthSlider");
2470     QSlider *heightSlider = GTWidget::findExactWidget<QSlider *>(os, "heightSlider");
2471 
2472     expandPenSettings(os);
2473     QSpinBox *lineWeightSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "lineWeightSpinBox");
2474 
2475     // set some values
2476     GTCheckBox::setChecked(os, showNamesCheck, false);
2477     GTCheckBox::setChecked(os, showDistancesCheck, false);
2478     GTSlider::setValue(os, widthSlider, 50);
2479     GTSlider::setValue(os, heightSlider, 20);
2480     setBranchColor(os, 255, 255, 255);
2481     QString initialColor = GTWidget::getColor(os, GTWidget::findWidget(os, "branchesColorButton"), QPoint(10, 10)).name();
2482     GTSpinBox::setValue(os, lineWeightSpinBox, 2);
2483 
2484     // close and open option panel
2485     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_TREES_WIDGET"));
2486     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_TREES_WIDGET"));
2487 
2488     // checks
2489     showNamesCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showNamesCheck");
2490     showDistancesCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesCheck");
2491     widthSlider = GTWidget::findExactWidget<QSlider *>(os, "widthSlider");
2492     heightSlider = GTWidget::findExactWidget<QSlider *>(os, "heightSlider");
2493     lineWeightSpinBox = GTWidget::findExactWidget<QSpinBox *>(os, "lineWeightSpinBox");
2494     QWidget *branchesColorButton = GTWidget::findWidget(os, "branchesColorButton");
2495 
2496     CHECK_SET_ERR(!showNamesCheck->isChecked(), "show names checkbox is unexpectedly checked");
2497     CHECK_SET_ERR(!showDistancesCheck->isChecked(), "show distances checkbox is unexpectedly checked");
2498     CHECK_SET_ERR(widthSlider->value() == 50, QString("unexpected width slider value: %1").arg(widthSlider->value()));
2499     CHECK_SET_ERR(heightSlider->value() == 20, QString("unexpected height slider value: %1").arg(heightSlider->value()));
2500     CHECK_SET_ERR(lineWeightSpinBox->value() == 2, QString("unexpected line width: %1").arg(lineWeightSpinBox->value()));
2501     CHECK_SET_ERR(GTWidget::hasPixelWithColor(os, branchesColorButton, initialColor), QString("Initial color is not found: %1").arg(initialColor));
2502 }
2503 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005)2504 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005) {
2505     //    1. Open data/samples/CLUSTALW/COI.aln
2506     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2507     GTUtilsTaskTreeView::waitTaskFinished(os);
2508     //    2.  Set strict consensus
2509     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
2510     QComboBox *consensusType = GTWidget::findExactWidget<QComboBox *>(os, "consensusType");
2511     GTComboBox::selectItemByText(os, consensusType, "Strict");
2512     //    3. Open export consensus tab
2513     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
2514 
2515     // find widgets
2516     QLineEdit *pathLe = GTWidget::findExactWidget<QLineEdit *>(os, "pathLe");
2517     QComboBox *formatCb = GTWidget::findExactWidget<QComboBox *>(os, "formatCb");
2518     QCheckBox *keepGapsChb = GTWidget::findExactWidget<QCheckBox *>(os, "keepGapsChb");
2519 
2520     // set some values
2521     GTLineEdit::setText(os, pathLe, "some_path");
2522     GTComboBox::selectItemByText(os, formatCb, "GenBank");
2523     GTCheckBox::setChecked(os, keepGapsChb, true);
2524 
2525     // close and open option panel
2526     GTWidget::click(os, GTWidget::findWidget(os, "OP_EXPORT_CONSENSUS"));
2527     GTWidget::click(os, GTWidget::findWidget(os, "OP_EXPORT_CONSENSUS"));
2528 
2529     // checks
2530     pathLe = GTWidget::findExactWidget<QLineEdit *>(os, "pathLe");
2531     formatCb = GTWidget::findExactWidget<QComboBox *>(os, "formatCb");
2532     keepGapsChb = GTWidget::findExactWidget<QCheckBox *>(os, "keepGapsChb");
2533 
2534     CHECK_SET_ERR(pathLe->text().contains("some_path"), QString("unexpected path: %1").arg(pathLe->text()));
2535     CHECK_SET_ERR(formatCb->currentText() == "GenBank", QString("unexpected format: %1").arg(formatCb->currentText()));
2536     CHECK_SET_ERR(keepGapsChb->isChecked(), "keep gaps checkBox is unexpectedly unchecked");
2537 }
2538 
GUI_TEST_CLASS_DEFINITION(save_parameters_test_0006)2539 GUI_TEST_CLASS_DEFINITION(save_parameters_test_0006) {
2540     //    1. Open data/samples/CLUSTALW/COI.aln
2541     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
2542     GTUtilsTaskTreeView::waitTaskFinished(os);
2543     //    2.  Set strict consensus
2544     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
2545     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
2546 
2547     // find widgets
2548     QCheckBox *showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
2549     QComboBox *algoComboBox = GTWidget::findExactWidget<QComboBox *>(os, "algoComboBox");
2550     QRadioButton *countsButton = GTWidget::findExactWidget<QRadioButton *>(os, "countsButton");
2551     QCheckBox *excludeGapsCheckBox = GTWidget::findExactWidget<QCheckBox *>(os, "excludeGapsCheckBox");
2552     QCheckBox *autoUpdateCheck = GTWidget::findExactWidget<QCheckBox *>(os, "autoUpdateCheck");
2553 
2554     // set some parameters
2555     GTCheckBox::setChecked(os, showDistancesColumnCheck, true);
2556     GTComboBox::selectItemByText(os, algoComboBox, "Similarity");
2557     GTRadioButton::click(os, countsButton);
2558     GTCheckBox::setChecked(os, excludeGapsCheckBox, true);
2559     GTCheckBox::setChecked(os, autoUpdateCheck, false);
2560 
2561     // close and open option panel
2562     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
2563     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_STATISTICS_WIDGET"));
2564 
2565     // checks
2566     showDistancesColumnCheck = GTWidget::findExactWidget<QCheckBox *>(os, "showDistancesColumnCheck");
2567     algoComboBox = GTWidget::findExactWidget<QComboBox *>(os, "algoComboBox");
2568     countsButton = GTWidget::findExactWidget<QRadioButton *>(os, "countsButton");
2569     excludeGapsCheckBox = GTWidget::findExactWidget<QCheckBox *>(os, "excludeGapsCheckBox");
2570     autoUpdateCheck = GTWidget::findExactWidget<QCheckBox *>(os, "autoUpdateCheck");
2571 
2572     CHECK_SET_ERR(showDistancesColumnCheck->isChecked(), "show distances is unexpectedly unchecked");
2573     CHECK_SET_ERR(algoComboBox->currentText() == "Similarity", QString("unexpected algorithm: %1").arg(algoComboBox->currentText()));
2574     CHECK_SET_ERR(countsButton->isChecked(), "counts radio is not checked");
2575     CHECK_SET_ERR(excludeGapsCheckBox->isChecked(), "exclude gaps not checked");
2576     CHECK_SET_ERR(!autoUpdateCheck->isChecked(), "auto update is unexpectedly checked");
2577 }
2578 }  // namespace GUITest_common_scenarios_options_panel_MSA
2579 }  // namespace U2
2580