1 /**009
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 "GTTestsTrimmomaticElement.h"
23 #include <drivers/GTMouseDriver.h>
24 #include <primitives/GTTableView.h>
25 #include <primitives/GTWidget.h>
26 
27 #include "../../workflow_designer/src/WorkflowViewItems.h"
28 #include "GTUtilsWorkflowDesigner.h"
29 #include "runnables/ugene/plugins/external_tools/TrimmomaticDialogFiller.h"
30 
31 namespace U2 {
32 
33 namespace GUITest_common_scenarios_trimmomatic_element {
34 using namespace HI;
35 
36 using TrimmomaticAddSettings = QPair<TrimmomaticDialogFiller::TrimmomaticSteps, QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant>>;
37 using TrimmomaticMoveSettings = QPair<QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int>, TrimmomaticDialogFiller::TrimmomaticDirection>;
38 
GUI_TEST_CLASS_DEFINITION(test_0001)39 GUI_TEST_CLASS_DEFINITION(test_0001) {
40     // 1. Open WD
41     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
42 
43     // 2. Add "Improve Reads with Trimmomatic" to the scene
44     const QString trimmomaticName = "Improve Reads with Trimmomatic";
45     WorkflowProcessItem *trimmomaticElement = GTUtilsWorkflowDesigner::addElement(os, trimmomaticName);
46 
47     // 3. Click on the element, open the "Trimmomatic steps" dialog
48     // 4. Add the "AVGQUAL" step and set "Quality Threshold" to 25
49     // 5. Add the "CROP" step and set "Length" to 10
50     // 6. Add the "HEADCROP" step and set "Length" to 15
51     // 7. Add the "ILLUMINACLIP" step and set "AdapterSequence" to "adapters/illumina/TruSeq3-SE.fa",
52     //    "Seed Mismatches" to 5, "Palindrome Clip Threshold" to 25, "Simple Clip Threshold" to 8,
53     //    check "Provide Optional Settings", "Min Adapter Length" to 6 and "Keep Both Reads" to True
54     // 8. Add the "LEADING" step and set "Strictness" to 0.60 and "Target Length" to 35.
55     // 9. Add the "MAXINFO" step and set "Length" to 10
56     // 10. Add the "MINLEN" step and set "Window Size" to 5 and "Quality Threshold" to 25
57     // 11. Add the "TOPHRED33" step
58     // 12. Add the "TOPHRED64" step
59     // 13. Add the "TRAILING" step and set "Quality Threshold" to 25
60     // 14. Accept the dialog
61 
62     QList<TrimmomaticAddSettings> steps;
63     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "25"}};
64     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual));
65     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> crop = {{TrimmomaticDialogFiller::TrimmomaticValues::Length, "10"}};
66     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::CROP, crop));
67     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> headcrop = {{TrimmomaticDialogFiller::TrimmomaticValues::Length, "15"}};
68     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::HEADCROP, headcrop));
69     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> illuminaclip = {{TrimmomaticDialogFiller::TrimmomaticValues::AdapterSequence, dataDir + "adapters/illumina/TruSeq3-SE.fa"},
70                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::SeedMismatches, "5"},
71                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::PalindromeClipThreshold, "25"},
72                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::SimpleClipThreshold, "8"},
73                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::ProvideOptionalSettings, true},
74                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::MinAdapterLength, "6"},
75                                                                                {TrimmomaticDialogFiller::TrimmomaticValues::KeepBothReads, "True"}};
76     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::ILLUMINACLIP, illuminaclip));
77     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> leading = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "15"}};
78     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::LEADING, leading));
79     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> maxinfo = {{TrimmomaticDialogFiller::TrimmomaticValues::TargetLength, "35"},
80                                                                           {TrimmomaticDialogFiller::TrimmomaticValues::Strictness, "0.60"}};
81     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::MAXINFO, maxinfo));
82     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> minlen = {{TrimmomaticDialogFiller::TrimmomaticValues::Length, "10"}};
83     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::MINLEN, minlen));
84     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> slidingwindow = {{TrimmomaticDialogFiller::TrimmomaticValues::WindowSize, "5"},
85                                                                                 {TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "25"}};
86     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::SLIDINGWINDOW, slidingwindow));
87     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> tophred;
88     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::TOPHRED33, tophred));
89     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::TOPHRED64, tophred));
90     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> trailing = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "25"}};
91     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::TRAILING, trailing));
92 
93     TrimmomaticDialogFiller *filler = new TrimmomaticDialogFiller(os, steps);
94 
95     GTUtilsDialog::waitForDialog(os, filler);
96     TrimmomaticDialogFiller::openDialog(os, trimmomaticElement);
97 }
98 
GUI_TEST_CLASS_DEFINITION(test_0002)99 GUI_TEST_CLASS_DEFINITION(test_0002) {
100     // 1. Open WD
101     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
102 
103     // 2. Add "Improve Reads with Trimmomatic" to the scene
104     const QString trimmomaticName = "Improve Reads with Trimmomatic";
105     WorkflowProcessItem *trimmomaticElement = GTUtilsWorkflowDesigner::addElement(os, trimmomaticName);
106 
107     // 3. Click on the element, open the "Trimmomatic steps" dialog
108     // 4. Add the "AVGQUAL" step and set "Quality Threshold" to 1
109     // 5. Add the "AVGQUAL" step and set "Quality Threshold" to 2
110     // 6. Add the "AVGQUAL" step and set "Quality Threshold" to 3
111     // 7. Accept the dialog
112     QList<TrimmomaticAddSettings> steps;
113     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual1 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "1"}};
114     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual1));
115     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual2 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "2"}};
116     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual2));
117     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual3 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "3"}};
118     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual3));
119     TrimmomaticDialogFiller *addFiller = new TrimmomaticDialogFiller(os, steps);
120 
121     GTUtilsDialog::waitForDialog(os, addFiller);
122     TrimmomaticDialogFiller::openDialog(os, trimmomaticElement);
123 
124     // 8. Click on the element, open the "Trimmomatic steps" dialog
125     // 9. Click on the "AVGQUAL" step 1 and move it down
126     // 10. Click on  the "AVGQUAL" step 2 and move it down
127     // 11. Click on  the "AVGQUAL" step 2 and move it up
128     // 12. Accept the dialog
129     QList<TrimmomaticMoveSettings> moveSteps;
130     TrimmomaticMoveSettings step1(QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int>(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, 0), TrimmomaticDialogFiller::TrimmomaticDirection::Down);
131     moveSteps.append(step1);
132     TrimmomaticMoveSettings step2(QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int>(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, 1), TrimmomaticDialogFiller::TrimmomaticDirection::Down);
133     moveSteps.append(step2);
134     TrimmomaticMoveSettings step3(QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int>(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, 1), TrimmomaticDialogFiller::TrimmomaticDirection::Up);
135     moveSteps.append(step3);
136     TrimmomaticDialogFiller *moveFiller = new TrimmomaticDialogFiller(os, moveSteps);
137 
138     GTUtilsDialog::waitForDialog(os, moveFiller);
139     TrimmomaticDialogFiller::openDialog(os, trimmomaticElement);
140 }
141 
GUI_TEST_CLASS_DEFINITION(test_0003)142 GUI_TEST_CLASS_DEFINITION(test_0003) {
143     // 1. Open WD
144     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
145 
146     // 2. Add "Improve Reads with Trimmomatic" to the scene
147     const QString trimmomaticName = "Improve Reads with Trimmomatic";
148     WorkflowProcessItem *trimmomaticElement = GTUtilsWorkflowDesigner::addElement(os, trimmomaticName);
149 
150     // 3. Click on the element, open the "Trimmomatic steps" dialog
151     // 4. Add the "AVGQUAL" step and set "Quality Threshold" to 1
152     // 5. Add the "AVGQUAL" step and set "Quality Threshold" to 2
153     // 6. Add the "AVGQUAL" step and set "Quality Threshold" to 3
154     // 7. Accept the dialog
155     QList<TrimmomaticAddSettings> steps;
156     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual1 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "1"}};
157     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual1));
158     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual2 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "2"}};
159     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual2));
160     QMap<TrimmomaticDialogFiller::TrimmomaticValues, QVariant> avgqual3 = {{TrimmomaticDialogFiller::TrimmomaticValues::QualityThreshold, "3"}};
161     steps.append(TrimmomaticAddSettings(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, avgqual3));
162     TrimmomaticDialogFiller *addFiller = new TrimmomaticDialogFiller(os, steps);
163 
164     GTUtilsDialog::waitForDialog(os, addFiller);
165     TrimmomaticDialogFiller::openDialog(os, trimmomaticElement);
166     // 8. Click on the element, open the "Trimmomatic steps" dialog
167     // 9. Click on the "AVGQUAL" step 2 and remove it
168     // 10. Click on  the "AVGQUAL" step 1 and remove it
169     // 11. Accept the dialog
170     QList<QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int>> removeValues;
171     QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int> step1(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, 2);
172     removeValues.append(step1);
173     QPair<TrimmomaticDialogFiller::TrimmomaticSteps, int> step2(TrimmomaticDialogFiller::TrimmomaticSteps::AVGQUAL, 0);
174     removeValues.append(step2);
175     TrimmomaticDialogFiller *removeFiller = new TrimmomaticDialogFiller(os, removeValues);
176 
177     GTUtilsDialog::waitForDialog(os, removeFiller);
178     TrimmomaticDialogFiller::openDialog(os, trimmomaticElement);
179 }
180 
181 }  // namespace GUITest_common_scenarios_trimmomatic_element
182 
183 }  // namespace U2
184