Merge pull request #4169 from evincarofautumn/fix-xmm-scanning-mac-x86
[mono.git] / mcs / class / System.Runtime.Serialization / Test / System.Runtime.Serialization / Bug666333Test.cs
1 #if !MOBILE && !MONOMAC
2
3 using System;
4 using System.Runtime.Serialization;
5 using System.IO;
6 using System.Diagnostics;
7 using System.Xml.Serialization;
8 using System.Globalization;
9 using System.ComponentModel;
10 using System.ServiceModel;
11 using System.ServiceModel.Channels;
12 using System.ServiceModel.Description;
13 using System.Xml;
14 using System.CodeDom.Compiler;
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Runtime.Serialization
18 {
19         [TestFixture]
20         public class Bug666333Test
21         {
22                 [Test]
23                 public void Bug666333 ()
24                 {
25                         // xml : original xml in the test
26                         // xml2 : when it is *appropriately* serialized
27                         // xml3 : mixed, d4p1:activeuser comes first
28                         // xml4 : mixed, d4p1:activeuser comes second
29                         // (Note that d4p1:activeuser is the actual element to be deserialized which takes precedence over urn:foo activeuser.)
30                 
31                         string xml = @"
32                                 <CheckLoginResponse xmlns='http://tempuri.org/'>
33                                         <playeractiveuser>
34                                                 <activeuser>
35                                                         <id>id</id>
36                                                         <hkey>hkey</hkey>
37                                                         <email>FOO@BAR.com</email>
38                                                         <lastcheck>2011-01-21T22:50:52.02</lastcheck>
39                                                 </activeuser>
40                                                 <response>
41                                                         <responsemessage>Acceso correcto, creado nuevo hkey!</responsemessage>
42                                                         <responsecode>1</responsecode>
43                                                         <langId>6</langId>
44                                                 </response>
45                                         </playeractiveuser>
46                                 </CheckLoginResponse>
47                                 ";
48
49                         string xml2 = @"
50 <CheckLoginResponse xmlns='http://tempuri.org/'>
51   <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
52     <d4p1:activeuser>
53       <d4p1:email i:nil='true' />
54       <d4p1:hkey i:nil='true' />
55       <d4p1:id>idd</d4p1:id>
56       <d4p1:lastcheck i:nil='true' />
57     </d4p1:activeuser>
58     <d4p1:response>
59       <d4p1:langId i:nil='true' />
60       <d4p1:responsecode>100</d4p1:responsecode>
61       <d4p1:responsemessage i:nil='true' />
62     </d4p1:response>
63   </playeractiveuser>
64 </CheckLoginResponse>";
65
66                         string xml3 = @"
67 <CheckLoginResponse xmlns='http://tempuri.org/'>
68   <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
69     <d4p1:activeuser>
70       <d4p1:email i:nil='true' />
71       <d4p1:hkey i:nil='true' />
72       <d4p1:id>iddd</d4p1:id>
73       <d4p1:lastcheck i:nil='true' />
74     </d4p1:activeuser>
75     <activeuser xmlns='urn:foo'>
76       <email i:nil='true' />
77       <hkey i:nil='true' />
78       <id>idd</id>
79       <lastcheck i:nil='true' />
80     </activeuser>
81     <response xmlns='urn:foo'>
82       <langId i:nil='true' />
83       <responsecode>200</responsecode>
84       <responsemessage i:nil='true' />
85     </response>
86   </playeractiveuser>
87 </CheckLoginResponse>";
88
89                         string xml4 = @"
90 <CheckLoginResponse xmlns='http://tempuri.org/'>
91   <playeractiveuser xmlns:d4p1='http://schemas.datacontract.org/2004/07/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
92     <activeuser xmlns='urn:foo'>
93       <email i:nil='true' />
94       <hkey i:nil='true' />
95       <id>idd</id>
96       <lastcheck i:nil='true' />
97     </activeuser>
98     <d4p1:activeuser>
99       <d4p1:email i:nil='true' />
100       <d4p1:hkey i:nil='true' />
101       <d4p1:id>iddd</d4p1:id>
102       <d4p1:lastcheck i:nil='true' />
103     </d4p1:activeuser>
104     <response xmlns='urn:foo'>
105       <langId i:nil='true' />
106       <responsecode>200</responsecode>
107       <responsemessage i:nil='true' />
108     </response>
109   </playeractiveuser>
110 </CheckLoginResponse>";
111                         
112                         var tm = TypedMessageConverter.Create (typeof (CheckLoginResponse), "urn:foo");
113                         var m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml)));
114                         m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml2)));
115                         m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml3)));
116                         var clr = (CheckLoginResponse) tm.FromMessage (m);
117                         Assert.IsNotNull (clr.playeractiveuser, "#1");
118                         Assert.IsNotNull (clr.playeractiveuser.activeuser, "#2");
119                         Assert.AreEqual ("iddd", clr.playeractiveuser.activeuser.id, "#3");
120
121                         m = Message.CreateMessage (MessageVersion.Default, "urn:foo", XmlReader.Create (new StringReader (xml4)));
122                         Assert.AreEqual ("iddd", clr.playeractiveuser.activeuser.id, "#4");
123         }
124
125         }
126 }
127
128 // Generated code
129
130
131 [GeneratedCode("System.ServiceModel", "4.0.0.0"), DebuggerStepThrough, EditorBrowsable(EditorBrowsableState.Advanced), MessageContract(WrapperName="CheckLoginResponse", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
132 public class CheckLoginResponse
133 {
134     // Fields
135     [MessageBodyMember(Namespace="http://tempuri.org/", Order=0), XmlElement(IsNullable=true)]
136     public PlayerActiveUser playeractiveuser;
137
138     // Methods
139     public CheckLoginResponse()
140     {
141     }
142
143     public CheckLoginResponse(PlayerActiveUser playeractiveuser)
144     {
145         this.playeractiveuser = playeractiveuser;
146     }
147 }
148
149
150 [GeneratedCode("System.Xml", "4.0.30319.1"), DebuggerStepThrough, XmlType(Namespace="http://tempuri.org/")]
151 public class PlayerActiveUser : INotifyPropertyChanged
152 {
153     // Fields
154     private ActiveUserReference activeuserField;
155     //private PropertyChangedEventHandler PropertyChanged;
156     private Response responseField;
157
158     // Events
159     public event PropertyChangedEventHandler PropertyChanged;
160
161     // Methods
162     protected void RaisePropertyChanged(string propertyName)
163     {
164         PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
165         if (propertyChanged != null)
166         {
167             propertyChanged(this, new PropertyChangedEventArgs(propertyName));
168         }
169     }
170
171     // Properties
172     [XmlElement(Order=0)]
173     public ActiveUserReference activeuser
174     {
175         get
176         {
177             return this.activeuserField;
178         }
179         set
180         {
181             this.activeuserField = value;
182             this.RaisePropertyChanged("activeuser");
183         }
184     }
185
186     [XmlElement(Order=1)]
187     public Response response
188     {
189
190         get
191         {
192             return this.responseField;
193         }
194         set
195         {
196             this.responseField = value;
197             this.RaisePropertyChanged("response");
198         }
199     }
200 }
201
202
203 [XmlType(Namespace="http://tempuri.org/"), GeneratedCode("System.Xml", "4.0.30319.1"), DebuggerStepThrough]
204 public class Response : INotifyPropertyChanged
205 {
206     // Fields
207     private int? langIdField;
208     //private PropertyChangedEventHandler PropertyChanged;
209     private int? responsecodeField;
210     private string responsemessageField;
211
212     // Events
213     public event PropertyChangedEventHandler PropertyChanged;
214
215     // Methods
216     protected void RaisePropertyChanged(string propertyName)
217     {
218         PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
219         if (propertyChanged != null)
220         {
221             propertyChanged(this, new PropertyChangedEventArgs(propertyName));
222         }
223     }
224
225     // Properties
226     [XmlElement(IsNullable=true, Order=2)]
227     public int? langId
228     {
229         get
230         {
231             return this.langIdField;
232         }
233         set
234         {
235             this.langIdField = value;
236             this.RaisePropertyChanged("langId");
237         }
238     }
239
240     [XmlElement(IsNullable=true, Order=1)]
241     public int? responsecode
242     {
243         get
244         {
245             return this.responsecodeField;
246         }
247         set
248         {
249             this.responsecodeField = value;
250             this.RaisePropertyChanged("responsecode");
251         }
252     }
253
254     [XmlElement(Order=0)]
255     public string responsemessage
256     {
257         get
258         {
259             return this.responsemessageField;
260         }
261         set
262         {
263             this.responsemessageField = value;
264             this.RaisePropertyChanged("responsemessage");
265         }
266     }
267 }
268
269
270 [XmlType(Namespace="http://tempuri.org/"), DebuggerStepThrough, GeneratedCode("System.Xml", "4.0.30319.1")]
271 public class ActiveUserReference : ESObject
272 {
273     // Fields
274     private string emailField;
275     private string hkeyField;
276     private string idField;
277     private DateTime? lastcheckField;
278
279     // Properties
280     [XmlElement(Order=2)]
281     public string email
282     {
283         get
284         {
285             return this.emailField;
286         }
287         set
288         {
289             this.emailField = value;
290             base.RaisePropertyChanged("email");
291         }
292     }
293
294     [XmlElement(Order=1)]
295     public string hkey
296     {
297         get
298         {
299             return this.hkeyField;
300         }
301         set
302         {
303             this.hkeyField = value;
304             base.RaisePropertyChanged("hkey");
305         }
306     }
307
308     [XmlElement(Order=0)]
309     public string id
310     {
311         get
312         {
313             return this.idField;
314         }
315         set
316         {
317             this.idField = value;
318             base.RaisePropertyChanged("id");
319         }
320     }
321
322     [XmlElement(IsNullable=true, Order=3)]
323     public DateTime? lastcheck
324     {
325         get
326         {
327             return this.lastcheckField;
328         }
329         set
330         {
331             this.lastcheckField = value;
332             base.RaisePropertyChanged("lastcheck");
333         }
334     }
335 }
336
337
338 [XmlType(Namespace="http://tempuri.org/"), GeneratedCode("System.Xml", "4.0.30319.1"), XmlInclude(typeof(ActiveUserReference)), DebuggerStepThrough]
339 public abstract class ESObject : INotifyPropertyChanged
340 {
341     // Fields
342     //private PropertyChangedEventHandler PropertyChanged;
343
344     // Events
345     public event PropertyChangedEventHandler PropertyChanged;
346
347     // Methods
348     protected ESObject()
349     {
350     }
351
352     protected void RaisePropertyChanged(string propertyName)
353     {
354         PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
355         if (propertyChanged != null)
356         {
357             propertyChanged(this, new PropertyChangedEventArgs(propertyName));
358         }
359     }
360 }
361
362 #endif