1 // project created on 09/05/2003 at 18:07
\r
3 using System.Collections;
\r
4 using System.Runtime.Remoting.Messaging;
\r
5 using System.Runtime.Serialization;
\r
6 using System.Runtime.Serialization.Formatters.Soap;
\r
8 using NUnit.Framework;
\r
10 namespace MonoTests.System.Runtime.Serialization.Formatters.Soap {
\r
12 internal class NonSerializableObject {
\r
16 public delegate void TrucDlg(string s);
\r
19 public class MoreComplexObject {
\r
20 public event TrucDlg TrucEvent;
\r
21 private string _string;
\r
22 private Queue _queue = new Queue();
\r
23 public Hashtable _table = new Hashtable();
\r
25 public string ObjString {
\r
26 get { return _string; }
\r
29 public MoreComplexObject() {
\r
30 TrucEvent += new TrucDlg(WriteString);
\r
32 _queue.Enqueue(null);
\r
33 _queue.Enqueue("foo");
\r
34 _table["foo"]="barr";
\r
36 _table['c'] = "barr";
\r
37 _table["barr"] = 1234567890;
\r
40 public void OnTrucEvent(string s) {
\r
44 public void WriteString(string s) {
\r
48 public override bool Equals(object obj) {
\r
49 MoreComplexObject objReturn = obj as MoreComplexObject;
\r
50 if(objReturn == null) return false;
\r
51 if(objReturn._string != this._string) return false;
\r
52 IEnumerator myEnum = this._table.GetEnumerator();
\r
53 foreach(DictionaryEntry e in objReturn._table) {
\r
55 DictionaryEntry s = (DictionaryEntry) myEnum.Current;
\r
56 Assertion.AssertEquals("#_table", s.Key, e.Key);
\r
57 Assertion.AssertEquals("#_table", s.Value, e.Value);
\r
58 if(s.Key.ToString() != e.Key.ToString() || s.Value.ToString() != e.Value.ToString()) return false;
\r
60 // Assertion.Assert("#_table is null", objReturn._table != null);
\r
61 // Console.WriteLine("_table[foo]: {0}", objReturn._table["foo"]);
\r
62 // Assertion.AssertEquals("#_table[\"foo\"]", "barr", objReturn._table["foo"]);
\r
63 // Console.WriteLine("_table[1]: {0}", objReturn._table[1]);
\r
64 // Assertion.AssertEquals("#_table[1]", "foo", objReturn._table[1]);
\r
65 // Console.WriteLine("_table['c']: {0}", objReturn._table['c']);
\r
66 // Assertion.AssertEquals("#_table['c']", "barr", objReturn._table['c']);
\r
67 // Console.WriteLine("_table[barr]: {0}", objReturn._table["barr"]);
\r
68 // Assertion.AssertEquals("#_table[\"barr\"]", 1234567890, objReturn._table["barr"]);
\r
69 return SoapFormatterTest.CheckArray(this._queue.ToArray(), objReturn._queue.ToArray());
\r
76 internal class MarshalObject: MarshalByRefObject {
\r
77 private string _name;
\r
80 public MarshalObject() {
\r
84 public MarshalObject(string name, long id) {
\r
91 internal class SimpleObject {
\r
92 private string _name;
\r
95 public SimpleObject(string name, int id) {
\r
100 public override bool Equals(object obj) {
\r
101 SimpleObject objCmp = obj as SimpleObject;
\r
102 if(objCmp == null) return false;
\r
103 if(objCmp._name != this._name) return false;
\r
104 if(objCmp._id != this._id) return false;
\r
110 public class SoapFormatterTest
\r
112 private SoapFormatterT _soapFormatter;
\r
114 private object Serialize(object objGraph) {
\r
115 MemoryStream stream = new MemoryStream();
\r
116 _soapFormatter.Serialize(stream, objGraph);
\r
119 stream.Position = 0;
\r
121 object objReturn = _soapFormatter.Deserialize(stream);
\r
122 Assertion.Assert(objReturn != null);
\r
123 Assertion.AssertEquals("#Tests "+objGraph.GetType(), objGraph.GetType(), objReturn.GetType());
\r
124 stream = new MemoryStream();
\r
125 _soapFormatter.Serialize(stream, objReturn);
\r
126 stream.Position = 0;
\r
127 StreamReader r = new StreamReader(stream);
\r
128 Console.WriteLine(r.ReadToEnd());
\r
134 public void GetReady() {
\r
135 _soapFormatter = new SoapFormatterT(new RemotingSurrogateSelector(), new StreamingContext(StreamingContextStates.All));
\r
139 public void Clean() {
\r
145 public void TestValueTypes() {
\r
147 objReturn = Serialize((short)1);
\r
148 Assertion.AssertEquals("#int16", objReturn, 1);
\r
149 objReturn = Serialize(1);
\r
150 Assertion.AssertEquals("#int32", objReturn, 1);
\r
151 objReturn = Serialize((Single)0.1234);
\r
152 Assertion.AssertEquals("#Single", objReturn, 0.1234);
\r
153 objReturn = Serialize((Double)1234567890.0987654321);
\r
154 Assertion.AssertEquals("#iDouble", objReturn, 1234567890.0987654321);
\r
155 objReturn = Serialize(true);
\r
156 Assertion.AssertEquals("#Bool", objReturn, true);
\r
157 objReturn = Serialize((Int64) 1234567890);
\r
158 Assertion.AssertEquals("#Int64", objReturn, 1234567890);
\r
159 objReturn = Serialize('c');
\r
160 Assertion.AssertEquals("#Char", objReturn, 'c');
\r
164 public void TestObjects() {
\r
166 objReturn = Serialize("");
\r
167 objReturn = Serialize("hello world!");
\r
168 Assertion.AssertEquals("#string", "hello world!", objReturn);
\r
169 SimpleObject obj = new SimpleObject("simple object", 1);
\r
170 objReturn = Serialize(obj);
\r
171 Assertion.AssertEquals("#SimpleObject", obj, objReturn);
\r
172 objReturn = Serialize(typeof(SimpleObject));
\r
173 Assertion.AssertEquals("#Type", typeof(SimpleObject), (Type)objReturn);
\r
174 objReturn = Serialize(obj.GetType().Assembly);
\r
175 Assertion.AssertEquals("#Assembly", obj.GetType().Assembly, objReturn);
\r
178 public static bool CheckArray(object objTest, object objReturn) {
\r
179 Array objTestAsArray = objTest as Array;
\r
180 Array objReturnAsArray = objReturn as Array;
\r
182 Assertion.Assert("#Not an Array "+objTest, objReturnAsArray != null);
\r
183 Assertion.AssertEquals("#Different lengths "+objTest, objTestAsArray.Length, objReturnAsArray.Length);
\r
185 IEnumerator iEnum = objReturnAsArray.GetEnumerator();
\r
188 foreach(object obj1 in objTestAsArray) {
\r
190 obj2 = iEnum.Current;
\r
191 Assertion.AssertEquals("#The content of the 2 arrays is different", obj1, obj2);
\r
198 public void TestArray() {
\r
201 objReturn = Serialize(new int[]{});
\r
202 objTest = new int[]{1, 2, 3, 4};
\r
203 objReturn = Serialize(objTest);
\r
204 CheckArray(objTest, objReturn);
\r
205 objReturn = Serialize(new long[]{1, 2, 3, 4});
\r
206 objTest = new object[]{1, null, ":-)", 1234567890};
\r
207 objReturn = Serialize(objTest);
\r
208 objTest = new int[,]{{0, 1}, {2, 3}, {123, 4}};
\r
209 objReturn = Serialize(objTest);
\r
210 CheckArray(objTest, objReturn);
\r
211 object[,,] objArray = new object[3,2,1];
\r
212 objArray[0,0,0] = 1;
\r
213 objArray[2,1,0] = "end";
\r
214 objReturn = Serialize(objArray);
\r
215 CheckArray(objArray, objReturn);
\r
219 public void TestMarshalByRefObject() {
\r
220 Serialize(new MarshalObject("thing", 1234567890));
\r
224 [ExpectedException(typeof(ArgumentNullException))]
\r
225 public void TestNullObject() {
\r
226 MemoryStream stream = new MemoryStream();
\r
227 _soapFormatter.Serialize(stream, null);
\r
231 [ExpectedException(typeof(SerializationException))]
\r
232 public void TestNonSerialisable() {
\r
233 Serialize(new NonSerializableObject());
\r
237 public void TestMoreComplexObject() {
\r
238 MoreComplexObject objReturn;
\r
239 MoreComplexObject objTest = new MoreComplexObject();
\r
240 objReturn = (MoreComplexObject) Serialize(objTest);
\r
241 Assertion.AssertEquals("#Equals", objTest, objReturn);
\r
242 objReturn.OnTrucEvent("bidule");
\r
243 Assertion.AssertEquals("#dlg", "bidule", objReturn.ObjString);
\r