Free cookie consent management tool by TermsFeed Policy Generator

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

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

Corrected HL3.3 tests project to test all assemblies and not only assemblies that contain a Plugin class (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.Assemblies.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.Assemblies.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.