Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab/3.3/Tests/StorableConstructorTest.cs @ 5168

Last change on this file since 5168 was 5168, checked in by mkommend, 13 years ago

Corrected plugin check in unit tests (ticket #1351).

File size: 2.1 KB
Line 
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using System.Reflection;
6using System.Text;
7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
8using HeuristicLab.PluginInfrastructure;
9using Microsoft.VisualStudio.TestTools.UnitTesting;
10
11namespace HeuristicLab_33.Tests {
12  [TestClass]
13  public class StorableConstructorTest {
14
15    // Use ClassInitialize to run code before running the first test in the class
16    [ClassInitialize]
17    public static void MyClassInitialize(TestContext testContext) {
18      PluginLoader.pluginAssemblies.Any();
19    }
20
21    [TestMethod]
22    public void TestStorableConstructor() {
23      StringBuilder errorMessage = new StringBuilder();
24
25      foreach (Type storableType in ApplicationManager.Manager.GetTypes(typeof(object))
26        .Where(t => StorableClassAttribute.IsStorableClass(t))) {
27        //test only types contained in HL plugin assemblies
28        if (!PluginLoader.pluginAssemblies.Contains(storableType.Assembly)) continue;
29
30        IEnumerable<ConstructorInfo> ctors = storableType.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
31        ConstructorInfo storableConstructor = ctors.Where(c => c.GetParameters().Count() == 1 && c.GetParameters().First().ParameterType == typeof(bool)).FirstOrDefault();
32        if (storableConstructor == null) errorMessage.Append(Environment.NewLine + storableType.ToString() + ": No storable constructor is defined.");
33        else {
34          if (storableType.IsSealed && !storableConstructor.IsPrivate)
35            errorMessage.Append(Environment.NewLine + storableType.ToString() + ": Storable constructor must be private in sealed classes.");
36          else if (!storableType.IsSealed && !(storableConstructor.IsFamily || storableConstructor.IsPublic))
37            errorMessage.Append(Environment.NewLine + storableType.ToString() + ": Storable constructor must be protected (can be public in rare cases).");
38        }
39      }
40      Assert.IsTrue(errorMessage.Length == 0, errorMessage.ToString());
41    }
42  }
43}
Note: See TracBrowser for help on using the repository browser.