コード例 #1
0
        /// <summary>
        /// Test tree state restoration from a persistent string. Tests for proper expansion and
        /// selection of nodes, and correct vertical scrolling
        /// </summary>
        protected override void DoTest()
        {
            // tests for a blank document
            RunUI(() =>
            {
                SkylineWindow.NewDocument();
                SetCurrentState();
                SkylineWindow.SaveDocument(TestContext.GetTestPath("blank.sky"));
                // reload file from persistent string
                SkylineWindow.OpenFile(TestContext.GetTestPath("blank.sky"));
                CompareStates();
            });

            _documentFile = TestFilesDir.GetTestPath("Study7_0-7.sky");

            // tests for a fully collapsed tree
            RunUI(() =>
            {
                SkylineWindow.OpenFile(_documentFile);
                SkylineWindow.CollapseProteins();
                CheckStateMaintained();
            });

            // tests for a fully expanded tree and scrolling
            RunUI(() =>
            {
                SkylineWindow.OpenFile(_documentFile);
                SkylineWindow.ExpandPrecursors();
                CheckStateMaintained();
                SkylineWindow.SelectAll();
                CheckStateMaintained();
                // select last node in tree for scrolling test
                SelectNode(SkylineWindow.SequenceTree.Nodes[SkylineWindow.SequenceTree.Nodes.Count - 1], null);
                CheckStateMaintained();
            });

            // tests for expansion
            RunUI(() =>
            {
                SkylineWindow.OpenFile(_documentFile);
                SkylineWindow.CollapseProteins();
                SelectNode(SkylineWindow.SequenceTree.TopNode, null);
                CheckStateMaintained();
                TestExpansion();
            });

            // tests for selection
            RunUI(() =>
            {
                SkylineWindow.OpenFile(_documentFile);
                TestSingleSelect();
                TestSelectLastNode();
                TestRangeSelect();
                TestDisjointSelect();
                TestCombinedRangeDisjoint();
            });

            // tests that Skyline will not crash when there is a mismatch between stored data in the
            // .sky.view file and that in the tree
            RunUI(() =>
            {
                SelectNode(SkylineWindow.SequenceTree.Nodes[1], null);
                SkylineWindow.SaveDocument(_documentFile);
                System.IO.File.Copy(SkylineWindow.GetViewFile(_documentFile), _documentFile + ".copy");
                SkylineWindow.EditDelete();
                CheckStateMaintained();
                System.IO.File.Delete(SkylineWindow.GetViewFile(_documentFile));
                System.IO.File.Copy(_documentFile + ".copy", SkylineWindow.GetViewFile(_documentFile));
                SkylineWindow.OpenFile(_documentFile);
            });
        }
コード例 #2
0
        protected override void DoTest()
        {
            const int    numStandardPeps = 11;
            const int    numLibraryPeps  = 18;
            const string irtCalc         = "iRT-C18";
            const string ssrCalc         = "SSRCalc 3.0 (300A)";

            var    testFilesDir = new TestFilesDir(TestContext, TestFilesZip);
            string databasePath = testFilesDir.GetTestPath("irt-c18.irtdb");

            string documentPath = testFilesDir.GetTestPath("iRT Test.sky");

            RunUI(() => SkylineWindow.OpenFile(documentPath));

            var peptideSettingsDlg1 = ShowDialog <PeptideSettingsUI>(
                () => SkylineWindow.ShowPeptideSettingsUI(PeptideSettingsUI.TABS.Prediction));
            var editRT1 = ShowDialog <EditRTDlg>(peptideSettingsDlg1.AddRTRegression);
            var irtDlg1 = ShowDialog <EditIrtCalcDlg>(editRT1.AddCalculator);

            RunUI(() =>
            {
                irtDlg1.CalcName = irtCalc;
                irtDlg1.CreateDatabase(databasePath);
            });

            var calibratePeptides = new List <MeasuredPeptide>();

            /*
             * Check several error handling cases
             * Check the peptide choosing algorithm for sanity (correct # peptides)
             * Check that the info dialog comes up when too many are requested
             * Check the peptide linear transformation for sanity
             * Check that the peptides get passed back to EditIrtCalcDlg
             */
            var calibrateDlg = ShowDialog <CalibrateIrtDlg>(irtDlg1.Calibrate);

            //Check the peptide choosing algorithm
            int peptideCount = SkylineWindow.Document.PeptideCount; //29 peptides in the document

            //Use the dialog box UI
            var countDlg = ShowDialog <AddIrtStandardsDlg>(calibrateDlg.UseResults);

            RunUI(() => countDlg.StandardCount = CalibrateIrtDlg.MIN_STANDARD_PEPTIDES - 1);
            RunDlg <MessageDlg>(countDlg.OkDialog, messageDlg => messageDlg.OkDialog());
            RunUI(() =>
            {
                countDlg.StandardCount = peptideCount;
                countDlg.OkDialog();
            });
            WaitForClosedForm(countDlg);

            Assert.AreEqual(peptideCount, calibrateDlg.StandardPeptideCount);

            //Bypass the UI
            foreach (int i in new[]
            {
                peptideCount,
                peptideCount / 2,
                CalibrateIrtDlg.MIN_STANDARD_PEPTIDES *2,
                CalibrateIrtDlg.MIN_STANDARD_PEPTIDES
            })
            {
                int j = i;
                RunUI(() =>
                {
                    calibratePeptides = calibrateDlg.Recalculate(SkylineWindow.Document, j);
                    Assert.AreEqual(calibratePeptides.Count, j);
                    Assert.IsNull(FindOpenForm <MessageDlg>());
                });
            }

            RunUI(() =>
            {
                calibrateDlg.Recalculate(SkylineWindow.Document, 11);
                //After closing this dialog, there should be 3 iRT values below 0
                //and 3 above 100
                calibrateDlg.SetFixedPoints(3, 7);

                calibrateDlg.OkDialog();
            });
            WaitForClosedForm(calibrateDlg);

            //Now check that the peptides were passed to the EditIrtCalcDlg
            RunUI(() =>
            {
                Assert.AreEqual(numStandardPeps, irtDlg1.StandardPeptideCount);
                //And that there are 3 below 0 and 3 above 100
                Assert.AreEqual(3, irtDlg1.StandardPeptides.Count(pep => pep.Irt < 0));
                Assert.AreEqual(3, irtDlg1.StandardPeptides.Count(pep => pep.Irt > 100));
                irtDlg1.ClearStandardPeptides();
            });

            /*
             * Test pasting into EditIrtCalcDlg
             * Test that the dialog requires the whole standard to be in the document
             * Test that add results gets everything in the document besides the standard
             * Test that there were no errors along the way
             */

            //Now paste in iRT with each peptide truncated by one amino acid
            var standard = new[]
            {
                BuildMeasuredPeptide("LGGNEQVTR", -24.92),
                BuildMeasuredPeptide("GAGSSEPVTGLDAK", 0.00),
                BuildMeasuredPeptide("VEATFGVDESNAK", 12.39),
                BuildMeasuredPeptide("YILAGVENSK", 19.79),
                BuildMeasuredPeptide("TPVISGGPYEYR", 28.71),
                BuildMeasuredPeptide("TPVITGAPYEYR", 33.38),
                BuildMeasuredPeptide("DGLDAASYYAPVR", 42.26),
                BuildMeasuredPeptide("ADVTPADFSEWSK", 54.62),
                BuildMeasuredPeptide("GTFIIDPGGVIR", 70.52),
                BuildMeasuredPeptide("GTFIIDPAAVIR", 87.23),
                BuildMeasuredPeptide("LFLQFGAQGSPFLK", 100.00),
            };

            RunUI(() =>
            {
                string standardText = BuildStandardText(standard, seq => seq.Substring(0, seq.Length - 1));
                SetClipboardText(standardText);
                irtDlg1.DoPasteStandard();
            });

            // Cannot add results because standard peptides are not in the document
            RunDlg <AddIrtPeptidesDlg>(irtDlg1.AddResults, messageDlg => messageDlg.OkDialog());

            // Paste Biognosys-provided values
            RunUI(() =>
            {
                string standardText = BuildStandardText(standard, seq => seq);
                SetClipboardText(standardText);
                irtDlg1.ClearStandardPeptides();
                irtDlg1.DoPasteStandard();

                //Check count
                Assert.AreEqual(numStandardPeps, irtDlg1.StandardPeptideCount);
            });

            //Add results
            var addPeptidesDlg1 = ShowDialog <AddIrtPeptidesDlg>(irtDlg1.AddResults);
            var recalibrateDlg1 = ShowDialog <MultiButtonMsgDlg>(addPeptidesDlg1.OkDialog);

            OkDialog(recalibrateDlg1, recalibrateDlg1.Btn1Click);

            RunUI(() => Assert.AreEqual(numLibraryPeps, irtDlg1.LibraryPeptideCount));

            // Recalibrate
            const int shift = 100;
            const int skew  = 10;

            RunDlg <RecalibrateIrtDlg>(irtDlg1.Calibrate, recalDlg =>
            {
                recalDlg.MinIrt      = standard[1].RetentionTime + shift;
                recalDlg.MaxIrt      = standard[standard.Length - 1].RetentionTime * skew + shift;
                recalDlg.FixedPoint1 = standard[1].Sequence;
                recalDlg.FixedPoint2 = standard[standard.Length - 1].Sequence;
                recalDlg.OkDialog();
            });
            RunUI(() =>
            {
                for (int i = 0; i < irtDlg1.StandardPeptideCount; i++)
                {
                    Assert.AreEqual(standard[i].RetentionTime * skew + shift,
                                    irtDlg1.StandardPeptides.Skip(i).First().Irt);
                }
            });
            RunDlg <RecalibrateIrtDlg>(irtDlg1.Calibrate, recalDlg =>
            {
                recalDlg.FixedPoint1 = standard[2].Sequence;
                recalDlg.FixedPoint2 = standard[standard.Length - 2].Sequence;
                recalDlg.MinIrt      = standard[2].RetentionTime;
                recalDlg.MaxIrt      = standard[standard.Length - 2].RetentionTime;
                recalDlg.OkDialog();
            });

            // Change peptides
            var changePeptides = irtDlg1.LibraryPeptides.Where((p, i) => i % 2 == 0).ToArray();
            var resetPeptides  = irtDlg1.StandardPeptides.ToArray();

            RunDlg <ChangeIrtPeptidesDlg>(irtDlg1.ChangeStandardPeptides, changeDlg =>
            {
                changeDlg.Peptides = changePeptides;
                changeDlg.OkDialog();
            });
            Assert.IsTrue(ArrayUtil.EqualsDeep(changePeptides.Select(p => p.Target).ToArray(),
                                               irtDlg1.StandardPeptides.Select(p => p.Target).ToArray()));
            Assert.IsTrue(ArrayUtil.EqualsDeep(changePeptides.Select(p => p.Irt).ToArray(),
                                               irtDlg1.StandardPeptides.Select(p => p.Irt).ToArray()));
            RunDlg <ChangeIrtPeptidesDlg>(irtDlg1.ChangeStandardPeptides, changeDlg =>
            {
                changeDlg.Peptides = resetPeptides;
                changeDlg.OkDialog();
            });

            OkDialog(irtDlg1, irtDlg1.OkDialog);

            Assert.IsNull(FindOpenForm <MessageDlg>());

            /*
             * Check that the database was created successfully
             * Check that it has the correct numbers of standard and library peptides
             */
            IrtDb db = IrtDb.GetIrtDb(databasePath, null);

            Assert.AreEqual(numStandardPeps, db.StandardPeptideCount);
            Assert.AreEqual(numLibraryPeps, db.LibraryPeptideCount);

            /*
             * Make sure that loading the database brings back up the right numbers of peptides
             */

            //Rather than rigging SettingsListComboDriver, just create a new one and load
            var irtDlg1A = ShowDialog <EditIrtCalcDlg>(editRT1.AddCalculator);

            RunDlg <MessageDlg>(() => irtDlg1A.OpenDatabase(testFilesDir.GetTestPath("bogus.irtdb")),
                                messageDlg => messageDlg.OkDialog());

            //There was a _bug_ where opening a path and then clicking OK would save all the peptides
            //twice, doubling the size of the database. So check that that is fixed.
            EditIrtCalcDlgPepCountTest(irtDlg1A, numStandardPeps, numLibraryPeps, databasePath, false);
            EditIrtCalcDlgPepCountTest(ShowDialog <EditIrtCalcDlg>(editRT1.AddCalculator),
                                       numStandardPeps, numLibraryPeps, databasePath, false);
            EditIrtCalcDlgPepCountTest(ShowDialog <EditIrtCalcDlg>(editRT1.AddCalculator),
                                       numStandardPeps, numLibraryPeps, databasePath, true);
            EditIrtCalcDlgPepCountTest(ShowDialog <EditIrtCalcDlg>(editRT1.AddCalculator),
                                       numStandardPeps, numLibraryPeps, databasePath, false);

            /*
             * Create a regression based on the new calculator
             * Create a regression based on SSRCalc
             * Open the graph
             * Switch to new calculator, verify r = 1.00 and graph is labeled iRT-C18
             * Switch to SSRCalc, verify graph label changes
             */

            RunUI(() =>
            {
                editRT1.SetRegressionName("iRT Regression");
                editRT1.AddResults();
                editRT1.ChooseCalculator(irtCalc);
                editRT1.OkDialog();
            });
            WaitForClosedForm(editRT1);

            var editRT1A = ShowDialog <EditRTDlg>(peptideSettingsDlg1.AddRTRegression);

            RunUI(() =>
            {
                editRT1A.SetRegressionName("SSRCalc Regression");
                editRT1A.AddResults();
                editRT1A.ChooseCalculator(ssrCalc);
            });

            RunDlg <RTDetails>(editRT1A.ShowDetails, detailsDlg => detailsDlg.Close());

            OkDialog(editRT1A, editRT1A.OkDialog);
            RunUI(peptideSettingsDlg1.CancelButton.PerformClick);
            WaitForClosedForm(peptideSettingsDlg1);

            var docPeptides = new List <MeasuredRetentionTime>();

            RunUI(() =>
            {
                var document = Program.ActiveDocumentUI;
                foreach (var docPepNode in document.Peptides)
                {
                    docPeptides.Add(new MeasuredRetentionTime(document.Settings.GetModifiedSequence(docPepNode),
                                                              docPepNode.AverageMeasuredRetentionTime ?? 0));
                }
            });

            RetentionTimeStatistics stats = null;
            RegressionLineElement   line  = null;

            RunUI(() => SkylineWindow.ShowRTRegressionGraphScoreToRun());
            WaitForRegression();
            RunUI(() =>
            {
                SkylineWindow.SetupCalculatorChooser();
                SkylineWindow.ChooseCalculator(irtCalc);
            });
            WaitForRegression();
            RunUI(() =>
            {
                stats = SkylineWindow.RTGraphController.RegressionRefined.CalcStatistics(docPeptides, null);
                line  = SkylineWindow.RTGraphController.RegressionRefined.Conversion as RegressionLineElement;
            });
            Assert.IsNotNull(stats);
            Assert.IsTrue(stats.R > 0.999);
            Assert.IsNotNull(line);
            //These values were taken from the graph, which shows values to 2 decimal places, so the real values must
            //be +/- 0.01 from these values
            Assert.IsTrue(Math.Abs(line.Intercept - 14.17) < 0.01);
            Assert.IsTrue(Math.Abs(line.Slope - 0.15) < 0.01);

            RunUI(() => SkylineWindow.ChooseCalculator(ssrCalc));
            WaitForRegression();
            RunUI(() => stats = SkylineWindow.RTGraphController.RegressionRefined.CalcStatistics(docPeptides, null));

            Assert.IsNotNull(stats);
            Assert.IsTrue(Math.Abs(stats.R - 0.97) < 0.01);

            /*
             * Delete all peptides except the standard
             * Create a new calculator with the document standard (instead of pasting)
             * Create a regression with that calculator
             * Export a transition list using measured retention times
             * Export a method using predicted retention times
             * Test that they are identical
             */

            //Delete from the document all but the last protein, which has all the standard peptides
            RunUI(() =>
            {
                SkylineWindow.CollapseProteins();
                var seqTree          = SkylineWindow.SequenceTree;
                seqTree.SelectedNode = seqTree.Nodes[0];
                seqTree.KeysOverride = Keys.Shift;
                seqTree.SelectedNode = seqTree.Nodes[17];
                SkylineWindow.EditDelete();
            });

            //Peptide settings dialog -> Add a regression
            var peptideSettingsDlg2 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI);
            var editRT2             = ShowDialog <EditRTDlg>(peptideSettingsDlg2.AddRTRegression);

            //Set regression name
            RunUI(() => editRT2.SetRegressionName("iRT Document Regression"));

            //Regression dialog -> add a calculator
            var irtDlg2 = ShowDialog <EditIrtCalcDlg>(editRT2.AddCalculator);

            //Set calc name, database
            RunUI(() =>
            {
                irtDlg2.CalcName = "iRT Document Calculator";
                irtDlg2.CreateDatabase(testFilesDir.GetTestPath("irt-doc.irtdb"));
            });

            //Calc dialog -> calibrate standard
            RunDlg <CalibrateIrtDlg>(irtDlg2.Calibrate, calibrateDlg2 =>
            {
                //Get 11 peptides from the document (all of them) and go back to calculator dialog
                calibrateDlg2.Recalculate(SkylineWindow.Document, 11);
                calibrateDlg2.OkDialog();
            });

            Assert.AreEqual(11, irtDlg2.StandardPeptideCount);
            Assert.AreEqual(0, irtDlg2.LibraryPeptideCount);

            // Close dialog to save calculator
            OkDialog(irtDlg2, irtDlg2.OkDialog);

            // Test adding irt calculator
            {
                var irtDlgAdd = ShowDialog <EditIrtCalcDlg>(editRT2.EditCurrentCalculator);
                var addDlg    = ShowDialog <AddIrtCalculatorDlg>(irtDlgAdd.AddIrtDatabase);

                // Check error messages
                RunUI(() => addDlg.Source = IrtCalculatorSource.file);
                RunDlg <MessageDlg>(addDlg.OkDialog, messageDlg =>
                {
                    Assert.AreEqual(Resources.AddIrtCalculatorDlg_OkDialog_Please_specify_a_path_to_an_existing_iRT_database, messageDlg.Message);
                    messageDlg.OkDialog();
                });
                RunUI(() => addDlg.FilePath = "not_irtdb.docx");
                RunDlg <MessageDlg>(addDlg.OkDialog, messageDlg =>
                {
                    AssertEx.AreComparableStrings(Resources.AddIrtCalculatorDlg_OkDialog_The_file__0__is_not_an_iRT_database, messageDlg.Message);
                    messageDlg.OkDialog();
                });
                RunUI(() => addDlg.FilePath = "not_exist.irtdb");
                RunDlg <MessageDlg>(addDlg.OkDialog, messageDlg =>
                {
                    AssertEx.AreComparableStrings(TextUtil.LineSeparate(
                                                      Resources.AddIrtCalculatorDlgOkDialogThe_file__0__does_not_exist,
                                                      Resources.AddIrtCalculatorDlg_OkDialog_Please_specify_a_path_to_an_existing_iRT_database), messageDlg.Message);
                    messageDlg.OkDialog();
                });
                RunUI(() => addDlg.CalculatorName = "noexist");
                PauseForScreenShot();
                RunDlg <MessageDlg>(addDlg.OkDialog, messageDlg =>
                {
                    Assert.AreEqual(Resources.AddIrtCalculatorDlg_OkDialog_Please_choose_the_iRT_calculator_you_would_like_to_add, messageDlg.Message);
                    messageDlg.OkDialog();
                });

                RunUI(() => addDlg.FilePath = databasePath);
                var addPepDlg      = ShowDialog <AddIrtPeptidesDlg>(addDlg.OkDialog);
                var recalibrateDlg = ShowDialog <MultiButtonMsgDlg>(addPepDlg.OkDialog);
                OkDialog(recalibrateDlg, recalibrateDlg.Btn1Click);
                Assert.AreEqual(18, irtDlgAdd.LibraryPeptideCount);

                OkDialog(irtDlgAdd, irtDlgAdd.CancelButton.PerformClick);
            }

            // Add from existing calculator
            {
                var irtDlgAdd = ShowDialog <EditIrtCalcDlg>(editRT2.EditCurrentCalculator);
                var addDlg    = ShowDialog <AddIrtCalculatorDlg>(irtDlgAdd.AddIrtDatabase);
                RunUI(() => addDlg.CalculatorName = irtCalc);
                var addPepDlg      = ShowDialog <AddIrtPeptidesDlg>(addDlg.OkDialog);
                var recalibrateDlg = ShowDialog <MultiButtonMsgDlg>(addPepDlg.OkDialog);
                OkDialog(recalibrateDlg, recalibrateDlg.Btn1Click);
                Assert.AreEqual(18, irtDlgAdd.LibraryPeptideCount);

                OkDialog(irtDlgAdd, irtDlgAdd.CancelButton.PerformClick);
            }


            var docIrtBefore = SkylineWindow.Document;

            OkDialog(editRT2, editRT2.OkDialog);
            OkDialog(peptideSettingsDlg2, peptideSettingsDlg2.OkDialog);
            WaitForClosedForm(peptideSettingsDlg2);

            var docIrt = VerifyIrtStandards(docIrtBefore, true);

            RunUI(() =>
            {
                // Select 3 of the standards and delete them
                SkylineWindow.SequenceTree.KeysOverride = Keys.None;
                SkylineWindow.SelectedPath = SkylineWindow.DocumentUI.GetPathTo((int)SrmDocument.Level.Molecules, 0);
                SkylineWindow.SequenceTree.KeysOverride = Keys.Shift;
                SkylineWindow.SelectedPath = SkylineWindow.DocumentUI.GetPathTo((int)SrmDocument.Level.Molecules, 2);
                SkylineWindow.SequenceTree.KeysOverride = Keys.None;
                SkylineWindow.EditDelete();
            });

            // Should still have iRT peptides
            docIrt = VerifyIrtStandards(docIrt, true);
            // Remove one more and standards should be cleared
            RunUI(SkylineWindow.Cut);
            docIrt = VerifyIrtStandards(docIrt, false);
            RunUI(SkylineWindow.Paste);
            docIrt = VerifyIrtStandards(docIrt, true);

            // Repeat without results
            RunDlg <ManageResultsDlg>(SkylineWindow.ManageResults, dlg =>
            {
                dlg.RemoveAllReplicates();
                dlg.OkDialog();
            });

            docIrt = VerifyIrtStandards(docIrt, true);
            RunUI(SkylineWindow.EditDelete);
            docIrt = VerifyIrtStandards(docIrt, false);
            RunUI(SkylineWindow.Paste);
            VerifyIrtStandards(docIrt, true);

            //Restore the document to contain all 29 peptides
            RunUI(() => SkylineWindow.UndoRestore(7));

            //Open peptide settings
            var peptideSettingsDlg3 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI);

            RunDlg <EditListDlg <SettingsListBase <RetentionTimeRegression>, RetentionTimeRegression> >(peptideSettingsDlg3.EditRegressionList,
                                                                                                        dlg =>
            {
                dlg.SelectLastItem();
                dlg.RemoveItem();
                dlg.OkDialog();
            });

            //Add a new regression
            var editRT3 = ShowDialog <EditRTDlg>(peptideSettingsDlg3.AddRTRegression);

            RunUI(() => editRT3.SetRegressionName("iRT Document Regression"));

            //Edit the calculator list
            var editCalculator =
                ShowDialog <EditListDlg <SettingsListBase <RetentionScoreCalculatorSpec>, RetentionScoreCalculatorSpec> >(
                    editRT3.EditCalculatorList);

            RunUI(() => editCalculator.SelectItem("iRT Document Calculator"));

            //Edit the document-based calculator
            var irtDlg3 = ShowDialog <EditIrtCalcDlg>(editCalculator.EditItem);

            //Add the 18 non-standard peptides to the calculator, then OkDialog back to Skyline
            var addPeptidesDlg  = ShowDialog <AddIrtPeptidesDlg>(irtDlg3.AddResults);
            var recalibrateDlg2 = ShowDialog <MultiButtonMsgDlg>(addPeptidesDlg.OkDialog);

            OkDialog(recalibrateDlg2, recalibrateDlg2.Btn1Click);

            RunUI(() =>
            {
                Assert.AreEqual(18, irtDlg3.LibraryPeptideCount);
                irtDlg3.OkDialog();
            });
            WaitForClosedForm(irtDlg3);

            RunUI(editCalculator.OkDialog);
            WaitForClosedForm(editCalculator);

            RunUI(() =>
            {
                editRT3.AddResults();
                editRT3.ChooseCalculator("iRT Document Calculator");
                editRT3.SetTimeWindow(2.0);
                editRT3.OkDialog();
            });
            WaitForClosedForm(editRT3);

            //Then choose the new, document-based regression and turn off prediction
            RunUI(() =>
            {
                peptideSettingsDlg3.ChooseRegression("iRT Document Regression");
                peptideSettingsDlg3.IsUseMeasuredRT = true;
                peptideSettingsDlg3.OkDialog();
            });

            WaitForClosedForm(peptideSettingsDlg3);

            Assert.IsNull(FindOpenForm <MessageDlg>());

            //Export the measurement-based transition list
            ExportMethod(testFilesDir.GetTestPath("EmpiricalTL.csv"));

            //Turn on prediction for scheduling
            var peptideSettingsDlg4 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI);

            RunUI(() =>
            {
                peptideSettingsDlg4.IsUseMeasuredRT = false;
                peptideSettingsDlg4.OkDialog();
            });
            WaitForClosedForm(peptideSettingsDlg4);

            //Export the prediction-based transition list
            ExportMethod(testFilesDir.GetTestPath("PredictionTL.csv"));

            //Now open both files and compare
            AssertEx.NoDiff(File.ReadAllText(testFilesDir.GetTestPath("EmpiricalTL.csv")),
                            File.ReadAllText(testFilesDir.GetTestPath("PredictionTL.csv")));

            // Close and re-open, and try again
            RunUI(() =>
            {
                Assert.IsTrue(SkylineWindow.SaveDocument());
                SkylineWindow.NewDocument();
                Assert.IsTrue(SkylineWindow.OpenFile(documentPath));
            });

            WaitForDocumentLoaded();

            ExportMethod(testFilesDir.GetTestPath("PredictionTL_reopen.csv"));

            AssertEx.NoDiff(File.ReadAllText(testFilesDir.GetTestPath("EmpiricalTL.csv")),
                            File.ReadAllText(testFilesDir.GetTestPath("PredictionTL_reopen.csv")));

            /*
             * Rename the database
             * Switch to the calculator in EditRTDlg and check for an error
             * Go to edit the calculator and check for an error
             * Try to export a transition list and check for an error
             * Switch to the calculator in the graph and check for an error
             */
            var stream = File.Create(testFilesDir.GetTestPath("irt-c18-copy.irtdb"));

            stream.Close();
            File.Replace(databasePath, testFilesDir.GetTestPath("irt-c18-copy.irtdb"),
                         testFilesDir.GetTestPath("backup.irtdb"));

            // The database renaming doesn't break usage anymore, since
            // the iRT databases are loaded into memory during initialization.
            // So, create a new calculator with a bogus path.
            const string irtCalcMissing = "iRT-C18-missing";

            Settings.Default.RTScoreCalculatorList.SetValue(new RCalcIrt(irtCalcMissing, testFilesDir.GetTestPath("irt-c18-missing.irtdb")));

            var peptideSettingsDlg5 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI);
            var editRT5             = ShowDialog <EditRTDlg>(peptideSettingsDlg5.AddRTRegression);

            //Add results and switch to a calculator whose database is not connected: error
            RunDlg <MessageDlg>(() =>
            {
                editRT5.AddResults();
                editRT5.ChooseCalculator(irtCalcMissing);
            },
                                errorMessage => errorMessage.OkDialog());

            //Go to add a new calculator
            var irtDlg5 = ShowDialog <EditIrtCalcDlg>(editRT5.AddCalculator);

            //Try to open a file that does not exist: error
            RunDlg <MessageDlg>(() => irtDlg5.OpenDatabase(databasePath), messageDlg => messageDlg.OkDialog());

            RunUI(() => irtDlg5.CancelButton.PerformClick());
            WaitForClosedForm(irtDlg5);

            //In order to export a transition list, we have to set the RT regression to have the iRT Calc.
            //This means that the iRT calc must have its database connected - else the dialog will not let
            //the user choose it. So here we will restore the file so we can choose the calculator.
            //Then once that dialog is closed and the regression is saved, switch the file back again.
            stream = File.Create(databasePath);
            stream.Close();
            File.Replace(testFilesDir.GetTestPath("irt-c18-copy.irtdb"), databasePath,
                         testFilesDir.GetTestPath("backup.irtdb"));

            RunUI(() =>
            {
                editRT5.SetRegressionName("iRT Test Regression");
                editRT5.AddResults();
                editRT5.ChooseCalculator(irtCalc);
                editRT5.OkDialog();
            });
            WaitForClosedForm(editRT5);

            RunUI(() =>
            {
                peptideSettingsDlg5.ChooseRegression("iRT Test Regression");
                peptideSettingsDlg5.IsUseMeasuredRT = false;           //Use prediction
                peptideSettingsDlg5.OkDialog();
            });
            WaitForClosedForm(peptideSettingsDlg5);

            RunUI(() => SkylineWindow.SaveDocument());

            //Switch the file back to the copy, destroying the original
            stream = File.Create(testFilesDir.GetTestPath("irt-c18-copy.irtdb"));
            stream.Close();
            File.Replace(databasePath, testFilesDir.GetTestPath("irt-c18-copy.irtdb"),
                         testFilesDir.GetTestPath("backup.irtdb"));

            var exportTransList = ShowDialog <ExportMethodDlg>(SkylineWindow.ShowExportTransitionListDlg);

            // Used to cause a message box, but should work now, because iRT databases get loaded once
            RunUI(() => exportTransList.SetMethodType(ExportMethodType.Scheduled));

            RunUI(() => exportTransList.CancelButton.PerformClick());
            WaitForClosedForm(exportTransList);

            // Used to cause a message box, but should work now, because iRT databases get loaded once
            RunUI(() => SkylineWindow.ChooseCalculator(irtCalc));

            /*
             * Now clean up by deleting all these calculators. If we don't, then the next functional test
             * will fail because it will try to use a calculator from settings which will not have its
             * database.
             */
            RunDlg <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI, peptideSettingsDlg6 =>
            {
                peptideSettingsDlg6.ChooseRegression(Resources.SettingsList_ELEMENT_NONE_None);
                peptideSettingsDlg6.OkDialog();
            });

            // Finally, close and re-open the document to see MissingFileDlg
            int pepCount = SkylineWindow.Document.PeptideCount;

            RunUI(() => SkylineWindow.NewDocument(true));
            Assert.AreEqual(0, SkylineWindow.Document.PeptideCount);
            RunDlg <MissingFileDlg>(() => SkylineWindow.OpenFile(documentPath),
                                    dlg => dlg.OkDialog());
            Assert.AreEqual(pepCount, SkylineWindow.Document.PeptideCount);
            RunUI(() => SkylineWindow.NewDocument(true));
            RunDlg <MissingFileDlg>(() => SkylineWindow.OpenFile(documentPath),
                                    dlg => dlg.CancelDialog());
            Assert.AreEqual(0, SkylineWindow.Document.PeptideCount);

            // Make sure no message boxes are left open
            Assert.IsNull(FindOpenForm <MessageDlg>());
        }
コード例 #3
0
ファイル: PerfUniquePeptidesTest.cs プロジェクト: zrolfs/pwiz
        void runScenario(PeptideFilter.PeptideUniquenessConstraint cancellationCheckType, string initialBackgroundProteome, string newBackgroundProteome = null)
        {
            // In each scenario we want to test:
            //  a) Cancellation while protdb processing in is progress
            //  b) Proper changes to document when we eventually don't cancel
            RunUI(() => SkylineWindow.OpenFile(TestFilesDir.GetTestPath(_skyfile)));
            WaitForDocumentLoaded();
            if (_quickexit)
            {
                // Just wanted to see if it loads OK
                RunUI(() => SkylineWindow.NewDocument(true)); // Force protdb shutdown
                return;
            }
            RunUI(() => { SkylineWindow.CollapseProteins(); }); // Things get pretty slow when trying to show tens of thousands of peptides

            if (initialBackgroundProteome != null)
            {
                // Set the background loader to work
                ChooseBackgroundProteomeAndUniqunessFilter(initialBackgroundProteome,
                                                           PeptideFilter.PeptideUniquenessConstraint.none,
                                                           false); // Don't attempt cancellation
            }
            var       protdbPath    = newBackgroundProteome ?? initialBackgroundProteome;
            const int PROTEIN_COUNT = 1149;

            if (cancellationCheckType != PeptideFilter.PeptideUniquenessConstraint.none)
            {
                // Test cancellation
                var cancelChecks = new List <PeptideFilter.PeptideUniquenessConstraint>
                {
                    PeptideFilter.PeptideUniquenessConstraint.none,    // May need to wait for digest
                    PeptideFilter.PeptideUniquenessConstraint.protein, // Should not need to wait for protein metadata, might need to wait for digest
                    PeptideFilter.PeptideUniquenessConstraint.gene
                };
                if (!cancelChecks.Contains(cancellationCheckType))
                {
                    cancelChecks.Add(cancellationCheckType);
                }
                foreach (var mode in cancelChecks)
                {
                    ChooseBackgroundProteomeAndUniqunessFilter(protdbPath, mode, mode != PeptideFilter.PeptideUniquenessConstraint.none);
                    // Should have cancelled out of any longwait, so no changes to document nodes yet
                    AssertEx.IsDocumentState(SkylineWindow.Document, null, PROTEIN_COUNT, 8323, null, null, mode + "(cancelled): ");
                }
            }
            // Now properly set filter
            var expectedPeptides = new Dictionary <PeptideFilter.PeptideUniquenessConstraint, int>()
            {
                { PeptideFilter.PeptideUniquenessConstraint.protein, 17878 },
                { PeptideFilter.PeptideUniquenessConstraint.gene, 114054 },
                { PeptideFilter.PeptideUniquenessConstraint.none, 184853 },
                { PeptideFilter.PeptideUniquenessConstraint.species, 184450 },
            };

            foreach (var mode in expectedPeptides.Keys)
            {
                ChooseBackgroundProteomeAndUniqunessFilter(protdbPath, mode, false);
                WaitForDocumentLoaded();
                AssertEx.IsDocumentState(SkylineWindow.Document, null, PROTEIN_COUNT,
                                         expectedPeptides[mode], null, null, mode + ": ");
            }
            RunUI(() => SkylineWindow.NewDocument(true)); // Force protdb shutdown
        }