2010-01-21 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / System.Runtime.Remoting / Test / ServerObject.cs
1 //\r
2 // MonoTests.Remoting.ServerObject.cs\r
3 //\r
4 // Author: Lluis Sanchez Gual (lluis@ximian.com)\r
5 //\r
6 // 2003 (C) Copyright, Ximian, Inc.\r
7 //\r
8 \r
9 using System;\r
10 using System.Runtime.Remoting;\r
11 using System.Runtime.Remoting.Lifetime;\r
12 using System.Collections;\r
13 using NUnit.Framework;\r
14 \r
15 namespace MonoTests.Remoting\r
16 {\r
17         // A list of ServerObject instances\r
18 \r
19         [ContextHook("x", false)]\r
20         public class ServerList: \r
21                 ContextBoundObject, \r
22                 IDisposable\r
23         {\r
24                 ArrayList values = new ArrayList();\r
25                 public int NumVal = 0;\r
26                 public string StrVal = "val";\r
27 \r
28                 public ServerList()\r
29                 {\r
30                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
31                         CallSeq.Add ("List created");\r
32                 }\r
33 \r
34                 public void Dispose()\r
35                 {\r
36                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
37                         CallSeq.Add ("List disposed");\r
38 \r
39                 }\r
40 \r
41                 public void Add (ServerObject v)\r
42                 {\r
43                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
44                         values.Add (v);\r
45                         CallSeq.Add ("Added " + v.Name);\r
46                 }\r
47 \r
48                 public void ProcessItems ()\r
49                 {\r
50                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
51                         CallSeq.Add ("Processing");\r
52 \r
53                         int total = 0;\r
54                         foreach (ServerObject ob in values)\r
55                                 total += ob.GetValue();\r
56 \r
57                         CallSeq.Add ("Total: " + total);\r
58                 }\r
59 \r
60                 public void Clear()\r
61                 {\r
62                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
63                         CallSeq.Add ("Clearing");\r
64                         values.Clear();\r
65                 }\r
66 \r
67                 public void ParameterTest1 (int a, out string b)\r
68                 {\r
69                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
70                         b = "adeu " + a;\r
71                 }\r
72                 \r
73                 public void ParameterTest2 (int a, out int b)\r
74                 {\r
75                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
76                         b = a+1;\r
77                 }\r
78                 \r
79                 public ServerObject NewItem(string name)\r
80                 {\r
81                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
82                         ServerObject obj = new ServerObject(name);\r
83                         Add (obj);\r
84                         return obj;\r
85                 }\r
86 \r
87                 public ServerObject CreateItem(string name, int val)\r
88                 {\r
89                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
90                         ServerObject obj = new ServerObject(name);\r
91                         obj.SetValue (val);\r
92                         return obj;\r
93                 }\r
94 \r
95                 public ComplexData SetComplexData (ComplexData data)\r
96                 {\r
97                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
98                         CallSeq.Add ("Showing content of ComplexData");\r
99                         data.Dump ();\r
100                         return data;\r
101                 }\r
102 \r
103                 public override ObjRef CreateObjRef (Type type)\r
104                 {\r
105                         Assert.IsTrue (RemotingServices.IsTransparentProxy(this));\r
106                         CallSeq.Add ("### ServerList.CreateObjRef");\r
107                         return base.CreateObjRef (type);\r
108                 }\r
109         }\r
110                 \r
111         // A remotable object\r
112 \r
113         public class ServerObject: \r
114 //              ContextBoundObject\r
115                 MarshalByRefObject\r
116         {\r
117                 int _value;\r
118                 string _name;\r
119 \r
120                 public ServerObject (string name)\r
121                 {\r
122                         _name = name;\r
123                 }\r
124 \r
125                 public string Name\r
126                 {\r
127                         get { return _name; }\r
128                 }\r
129 \r
130                 public void SetValue (int v)\r
131                 {\r
132                         CallSeq.Add ("ServerObject " + _name + ": setting " + v);\r
133                         _value = v;\r
134                 }\r
135 \r
136                 public int GetValue ()\r
137                 {\r
138                         CallSeq.Add ("ServerObject " + _name + ": getting " + _value);\r
139                         return _value;\r
140                 }\r
141 \r
142                 public override ObjRef CreateObjRef (Type type)\r
143                 {\r
144                         CallSeq.Add ("### ServerObject.CreateObjRef");\r
145                         return base.CreateObjRef (type);\r
146                 }\r
147         }\r
148 \r
149         // Some complex data for testing serialization\r
150 \r
151         public enum AnEnum { a,b,c,d,e };\r
152 \r
153         [Serializable]\r
154         public class ComplexData\r
155         {\r
156                 public AnEnum Val = AnEnum.a;\r
157 \r
158                 public object[] Info;\r
159 \r
160                 public ComplexData (AnEnum va, object[] info)\r
161                 {\r
162                         Info = info;\r
163                         Val = va;\r
164                 }\r
165 \r
166                 public void Dump ()\r
167                 {\r
168                         CallSeq.Add ("Content:");\r
169                         CallSeq.Add ("Val: " + Val);\r
170                         foreach (object ob in Info)\r
171                                 CallSeq.Add ("Array item: " + ob);\r
172                 }\r
173         }\r
174 }\r