• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

MeindertN / RoboClerk / 17949926739

23 Sep 2025 02:45PM UTC coverage: 84.148% (-0.1%) from 84.243%
17949926739

push

github

MeindertN
All tests now pass

1917 of 2369 branches covered (80.92%)

Branch coverage included in aggregate %.

5865 of 6879 relevant lines covered (85.26%)

146.7 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.94
/RoboClerk/DataSources/PluginDataSources.cs
1
using Microsoft.Extensions.DependencyInjection;
2
using RoboClerk.Configuration;
3
using System;
4
using System.Collections.Generic;
5
using System.IO.Abstractions;
6

7
namespace RoboClerk
8
{
9
    public class PluginDataSources : DataSourcesBase, IDataSources
10
    {
11
        private List<IDataSourcePlugin> plugins = new List<IDataSourcePlugin>();
46✔
12

13
        private readonly IPluginLoader pluginLoader = null;
46✔
14

15
        public PluginDataSources(IConfiguration configuration, IPluginLoader pluginLoader, IFileSystem fileSystem)
16
            : base(configuration, fileSystem)
46✔
17
        {
46✔
18
            this.pluginLoader = pluginLoader;
46✔
19
            LoadPlugins();
46✔
20
        }
43✔
21

22
        private void LoadPlugins()
23
        {
46✔
24
            foreach (var val in configuration.DataSourcePlugins)
351✔
25
            {
108✔
26
                bool found = false;
108✔
27
                foreach (var dir in configuration.PluginDirs)
603✔
28
                {
192✔
29
                    var plugin = pluginLoader.LoadByName<IDataSourcePlugin>(
192✔
30
                        pluginDir: dir,
192✔
31
                        typeName: val,
192✔
32
                        configureGlobals: sc =>
192✔
33
                        {
×
34
                            sc.AddSingleton(fileSystem);
×
35
                            sc.AddSingleton(configuration);
×
36
                        });
192✔
37
                    if (plugin != null)
192✔
38
                    {
105✔
39
                        plugin.InitializePlugin(configuration);
105✔
40
                        if (plugin as IDataSourcePlugin != null)
105!
41
                        {
105✔
42
                            found = true;
105✔
43
                            var temp = plugin as IDataSourcePlugin;
105✔
44
                            temp.RefreshItems();
105✔
45
                            plugins.Add(temp);
105✔
46
                            break;
105✔
47
                        }
48
                    }
×
49
                }
87✔
50
                if(!found)
108✔
51
                {
3✔
52
                    //if we don't find a specified datasource plugin, that is reason to quit.
53
                    //otherwise data could be missing from the project and the user would not know.
54
                    throw new Exception($"Unable to find plugin {val}, please ensure the name of the plugin and plugin directories in the RoboClerk config file are correct.");
3✔
55
                }
56
            }
105✔
57
            //Since items from multiple plugins may reference each other, we need to update all links now.
58
            UpdateAllItemLinks();
43✔
59
        }
43✔
60

61
        private void UpdateAllItemLinks()
62
        {
43✔
63
            var itemLinkUpdater = new ItemLinkUpdater(this);
43✔
64
            itemLinkUpdater.UpdateAllItemLinks(plugins);
43✔
65
        }
43✔
66

67
        public override List<SOUPItem> GetAllSOUP()
68
        {
11✔
69
            List<SOUPItem> list = new List<SOUPItem>();
11✔
70
            foreach (var plugin in plugins)
91✔
71
            {
29✔
72
                list.AddRange(plugin.GetSOUP());
29✔
73
            }
29✔
74
            return list;
11✔
75
        }
11✔
76

77
        public override List<EliminatedSOUPItem> GetAllEliminatedSOUP()
78
        {
3✔
79
            List<EliminatedSOUPItem> list = new List<EliminatedSOUPItem>();
3✔
80
            foreach (var plugin in plugins)
27✔
81
            {
9✔
82
                list.AddRange(plugin.GetEliminatedSOUP());
9✔
83
            }
9✔
84
            return list;
3✔
85
        }
3✔
86

87
        public override List<RiskItem> GetAllRisks()
88
        {
10✔
89
            List<RiskItem> list = new List<RiskItem>();
10✔
90
            foreach (var plugin in plugins)
82✔
91
            {
26✔
92
                list.AddRange(plugin.GetRisks());
26✔
93
            }
26✔
94
            return list;
10✔
95
        }
10✔
96

97
        public override List<EliminatedRiskItem> GetAllEliminatedRisks()
98
        {
4✔
99
            List<EliminatedRiskItem> list = new List<EliminatedRiskItem>();
4✔
100
            foreach (var plugin in plugins)
36✔
101
            {
12✔
102
                list.AddRange(plugin.GetEliminatedRisks());
12✔
103
            }
12✔
104
            return list;
4✔
105
        }
4✔
106

107
        public override List<ExternalDependency> GetAllExternalDependencies()
108
        {
2✔
109
            var dependencies = new List<ExternalDependency>();
2✔
110
            foreach (var plugin in plugins)
16✔
111
            {
5✔
112
                dependencies.AddRange(plugin.GetDependencies());
5✔
113
            }
5✔
114
            return dependencies;
2✔
115
        }
2✔
116

117
        public override List<TestResult> GetAllTestResults()
118
        {
5✔
119
            var results = new List<TestResult>();
5✔
120
            foreach (var plugin in plugins)
41✔
121
            {
13✔
122
                results.AddRange(plugin.GetTestResults());
13✔
123
            }
13✔
124
            return results;
5✔
125
        }
5✔
126

127
        public override List<UnitTestItem> GetAllUnitTests()
128
        {
13✔
129
            var unitTests = new List<UnitTestItem>();
13✔
130
            foreach (var plugin in plugins)
109✔
131
            {
35✔
132
                unitTests.AddRange(plugin.GetUnitTests());
35✔
133
            }
35✔
134
            return unitTests;
13✔
135
        }
13✔
136

137
        public override List<RequirementItem> GetAllSoftwareRequirements()
138
        {
33✔
139
            List<RequirementItem> items = new List<RequirementItem>();
33✔
140
            foreach (var plugin in plugins)
229✔
141
            {
65✔
142
                items.AddRange(plugin.GetSoftwareRequirements());
65✔
143
            }
65✔
144
            return items;
33✔
145
        }
33✔
146

147
        public override List<RequirementItem> GetAllSystemRequirements()
148
        {
33✔
149
            List<RequirementItem> items = new List<RequirementItem>();
33✔
150
            foreach (var plugin in plugins)
225✔
151
            {
63✔
152
                items.AddRange(plugin.GetSystemRequirements());
63✔
153
            }
63✔
154
            return items;
33✔
155
        }
33✔
156

157
        public override List<RequirementItem> GetAllDocumentationRequirements()
158
        {
17✔
159
            List<RequirementItem> items = new List<RequirementItem>();
17✔
160
            foreach (var plugin in plugins)
141✔
161
            {
45✔
162
                items.AddRange(plugin.GetDocumentationRequirements());
45✔
163
            }
45✔
164
            return items;
17✔
165
        }
17✔
166

167
        public override List<DocContentItem> GetAllDocContents()
168
        {
16✔
169
            List<DocContentItem> items = new List<DocContentItem>();
16✔
170
            foreach (var plugin in plugins)
132✔
171
            {
42✔
172
                items.AddRange(plugin.GetDocContents());
42✔
173
            }
42✔
174
            return items;
16✔
175
        }
16✔
176

177
        public override List<EliminatedDocContentItem> GetAllEliminatedDocContents()
178
        {
3✔
179
            List<EliminatedDocContentItem> items = new List<EliminatedDocContentItem>();
3✔
180
            foreach (var plugin in plugins)
27✔
181
            {
9✔
182
                items.AddRange(plugin.GetEliminatedDocContents());
9✔
183
            }
9✔
184
            return items;
3✔
185
        }
3✔
186

187
        public override List<SoftwareSystemTestItem> GetAllSoftwareSystemTests()
188
        {
14✔
189
            List<SoftwareSystemTestItem> items = new List<SoftwareSystemTestItem>();
14✔
190
            foreach (var plugin in plugins)
118✔
191
            {
38✔
192
                items.AddRange(plugin.GetSoftwareSystemTests());
38✔
193
            }
38✔
194
            return items;
14✔
195
        }
14✔
196

197
        public override List<AnomalyItem> GetAllAnomalies()
198
        {
12✔
199
            List<AnomalyItem> items = new List<AnomalyItem>();
12✔
200
            foreach (var plugin in plugins)
100✔
201
            {
32✔
202
                items.AddRange(plugin.GetAnomalies());
32✔
203
            }
32✔
204
            return items;
12✔
205
        }
12✔
206

207
        public override List<EliminatedAnomalyItem> GetAllEliminatedAnomalies()
208
        {
3✔
209
            List<EliminatedAnomalyItem> items = new List<EliminatedAnomalyItem>();
3✔
210
            foreach (var plugin in plugins)
27✔
211
            {
9✔
212
                items.AddRange(plugin.GetEliminatedAnomalies());
9✔
213
            }
9✔
214
            return items;
3✔
215
        }
3✔
216

217
        public override List<EliminatedRequirementItem> GetAllEliminatedSystemRequirements()
218
        {
4✔
219
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
220
            foreach (var plugin in plugins)
36✔
221
            {
12✔
222
                items.AddRange(plugin.GetEliminatedSystemRequirements());
12✔
223
            }
12✔
224
            return items;
4✔
225
        }
4✔
226

227
        public override List<EliminatedRequirementItem> GetAllEliminatedSoftwareRequirements()
228
        {
4✔
229
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
230
            foreach (var plugin in plugins)
36✔
231
            {
12✔
232
                items.AddRange(plugin.GetEliminatedSoftwareRequirements());
12✔
233
            }
12✔
234
            return items;
4✔
235
        }
4✔
236

237
        public override List<EliminatedRequirementItem> GetAllEliminatedDocumentationRequirements()
238
        {
4✔
239
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
240
            foreach (var plugin in plugins)
36✔
241
            {
12✔
242
                items.AddRange(plugin.GetEliminatedDocumentationRequirements());
12✔
243
            }
12✔
244
            return items;
4✔
245
        }
4✔
246

247
        public override List<EliminatedSoftwareSystemTestItem> GetAllEliminatedSoftwareSystemTests()
248
        {
4✔
249
            List<EliminatedSoftwareSystemTestItem> items = new List<EliminatedSoftwareSystemTestItem>();
4✔
250
            foreach (var plugin in plugins)
36✔
251
            {
12✔
252
                items.AddRange(plugin.GetEliminatedSoftwareSystemTests());
12✔
253
            }
12✔
254
            return items;
4✔
255
        }
4✔
256
    }
257
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc