New test.
[mono.git] / mcs / class / System / Test / System.ComponentModel.Design / ServiceContainerTest.cs
1 // ServiceContainerTest.cs - NUnit Test Cases for System.ComponentModel.Design.ServiceContainer
2 //
3 // Alexandre Pigolkine (pigolkine@gmx.de)
4 //
5 // (C) Alexandre Pigolkine (pigolkine@gmx.de)
6 // 
7
8 using NUnit.Framework;
9 using System;
10 using System.ComponentModel.Design;
11
12 namespace MonoTests.System.ComponentModel.Design
13 {
14
15 // Helper classes
16         
17         class NotInSvc 
18         {
19                 public NotInSvc() 
20                 {
21                 }
22         }
23         
24         class Svc 
25         {
26                 public Svc () 
27                 {
28                 }
29                 
30                 private static int objectsCreatedByCallback = 0;
31                 
32                 public static int TotalObjectsCreatedByCallback {
33                         get { return objectsCreatedByCallback; }
34                 }
35                 
36                 public static object ServiceCreator (IServiceContainer isc, Type tp) 
37                 {
38                         Assertion.AssertEquals ("ServiceCreator#01", tp, typeof (Svc));
39                         ++objectsCreatedByCallback;
40                         return new Svc();
41                 }
42         }
43         
44 [TestFixture]
45 public class ServiceContainerTest : Assertion {
46         
47         [Test]
48         public void GeneralTest1 () 
49         {
50                 ServiceContainer sc = new ServiceContainer ();
51                         
52                 sc.AddService (typeof (Svc), new Svc());
53                 Svc service1 = sc.GetService (typeof (Svc)) as Svc;
54                 AssertNotNull ("GT1#01", service1);
55                 AssertEquals ("GT1#02", service1, sc.GetService (typeof (Svc)));        
56                 AssertNull ("GT1#04", sc.GetService (typeof (NotInSvc)));
57         }
58
59         [Test, ExpectedException (typeof (ArgumentException))]
60         public void GeneralTest2 () 
61         {
62                 ServiceContainer sc = new ServiceContainer ();
63                         
64                 sc.AddService (typeof (Svc), new Svc());
65                 Svc service1 = sc.GetService (typeof (Svc)) as Svc;
66                 AssertNotNull ("GT1#01", service1);
67                 AssertEquals ("GT1#02", service1, sc.GetService (typeof (Svc)));
68                         
69                 sc.AddService (typeof (Svc), new Svc());
70         }
71
72         [Test]
73         public void TestServiceCreator () 
74         {
75                 ServiceContainer sc = new ServiceContainer ();
76                 sc.AddService(typeof(Svc), new ServiceCreatorCallback(Svc.ServiceCreator));
77                 AssertNull ("TSC#01", sc.GetService (typeof(NotInSvc)));
78                 
79                 Svc service1 = sc.GetService (typeof(Svc)) as Svc;
80                 AssertNotNull ("TSC#02", service1);
81                 AssertEquals ("TSC#03", Svc.TotalObjectsCreatedByCallback, 1);
82                 
83                 Svc service2 = sc.GetService (typeof(Svc)) as Svc;
84                 AssertEquals ("TSC#04", service2, service1);
85                 AssertEquals ("TSC#05", Svc.TotalObjectsCreatedByCallback, 1);
86         }
87         
88         [Test]
89         public void TestParentService () 
90         {
91                 ServiceContainer scParent = new ServiceContainer();
92                 ServiceContainer sc = new ServiceContainer(scParent);
93                 
94                 scParent.AddService(typeof(Svc), new Svc());
95                         
96                 Svc service1 = sc.GetService (typeof(Svc)) as Svc;
97                 AssertNotNull ("TPS#01", service1);
98                 
99         }
100
101 }
102 }