File size: 5,252 Bytes
18a519f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using UnityEngine;
using UnityEditor.TestTools.CodeCoverage.OpenCover;
using UnityEditor.TestTools.CodeCoverage.Analytics;

namespace UnityEditor.TestTools.CodeCoverage
{
    internal class CoverageReporterManager
    {
        private readonly CoverageSettings m_CoverageSettings = null;
        private ICoverageReporter m_CoverageReporter = null;
        CoverageReportGenerator m_ReportGenerator = null;

        public CoverageReporterManager(CoverageSettings coverageSettings)
        {
            m_CoverageSettings = coverageSettings;
        }

        public ICoverageReporter CoverageReporter
        {
            get
            {
                if (m_CoverageReporter == null)
                {
                    CreateCoverageReporter();
                }
                return m_CoverageReporter;
            }
        }

        public void CreateCoverageReporter()
        {
            m_CoverageReporter = null;

            // Use OpenCover format as currently this is the only one supported
            CoverageFormat coverageFormat = CoverageFormat.OpenCover;

            switch (coverageFormat)
            {
                case CoverageFormat.OpenCover:
                    m_CoverageSettings.resultsFileExtension = "xml";
                    m_CoverageSettings.resultsFolderSuffix = "-opencov";
                    m_CoverageSettings.resultsFileName = CoverageRunData.instance.isRecording ? "RecordingCoverageResults" : "TestCoverageResults";

                    m_CoverageReporter = new OpenCoverReporter();
                    break;
            }

            if (m_CoverageReporter != null)
            {
                m_CoverageReporter.OnInitialise(m_CoverageSettings);
            }
        }

        public bool ShouldAutoGenerateReport()
        {
            bool shouldAutoGenerateReport = false;
            bool cmdLineGenerateHTMLReport = CommandLineManager.instance.generateHTMLReport;
            bool cmdLineGenerateBadge = CommandLineManager.instance.generateBadgeReport;
            bool cmdLineGenerateAdditionalReports = CommandLineManager.instance.generateAdditionalReports;
            bool generateHTMLReport = CoveragePreferences.instance.GetBool("GenerateHTMLReport", true);
            bool generateAdditionalReports = CoveragePreferences.instance.GetBool("GenerateAdditionalReports", false);
            bool generateBadge = CoveragePreferences.instance.GetBool("GenerateBadge", true);
            bool autoGenerateReport = CoveragePreferences.instance.GetBool("AutoGenerateReport", false);

            if (CommandLineManager.instance.runFromCommandLine)
            {
                if (CommandLineManager.instance.batchmode)
                {
                    if (CommandLineManager.instance.useProjectSettings)
                    {
                        shouldAutoGenerateReport =  cmdLineGenerateHTMLReport ||
                                                    cmdLineGenerateBadge ||
                                                    cmdLineGenerateAdditionalReports ||
                                                    (autoGenerateReport && (generateHTMLReport || generateBadge || generateAdditionalReports));
                    }
                    else
                    {
                        shouldAutoGenerateReport = cmdLineGenerateHTMLReport || cmdLineGenerateBadge || cmdLineGenerateAdditionalReports;
                    }
                }
                else
                {
                    shouldAutoGenerateReport =  cmdLineGenerateHTMLReport ||
                                                cmdLineGenerateBadge ||
                                                cmdLineGenerateAdditionalReports ||
                                                (autoGenerateReport && (generateHTMLReport || generateBadge || generateAdditionalReports));
                }
            } 
            else
            {
                autoGenerateReport = CoveragePreferences.instance.GetBool("AutoGenerateReport", true);
                shouldAutoGenerateReport = autoGenerateReport && (generateHTMLReport || generateBadge || generateAdditionalReports);
            }

            return shouldAutoGenerateReport;
        }

        public void GenerateReport()
        {
            if (ShouldAutoGenerateReport())
            {
                if (m_CoverageSettings != null)
                {
                    CoverageAnalytics.instance.CurrentCoverageEvent.actionID = ActionID.DataReport;
                    ReportGenerator.Generate(m_CoverageSettings);
                }
            }
            else
            {
                // Clear ProgressBar left from saving results to file,
                // otherwise continue on the same ProgressBar
                EditorUtility.ClearProgressBar();

                // Send Analytics event (Data Only)
                CoverageAnalytics.instance.SendCoverageEvent(true);
            }
        }

        public CoverageReportGenerator ReportGenerator
        {
            get 
            {
                if (m_ReportGenerator == null)
                    m_ReportGenerator = new CoverageReportGenerator();

                return m_ReportGenerator;
            }         
        }
    }
}