2 // Copyright (C) 2010 Novell Inc. http://novell.com
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 using System
.Collections
;
25 using System
.Collections
.Generic
;
26 using System
.Reflection
;
28 using System
.Windows
.Markup
;
30 using System
.Xaml
.Schema
;
32 using NUnit
.Framework
;
34 namespace MonoTests
.System
.Xaml
.Schema
37 public class XamlMemberInvokerTest
39 XamlSchemaContext sctx
= new XamlSchemaContext (new XamlSchemaContextSettings ());
40 PropertyInfo str_len
= typeof (string).GetProperty ("Length");
41 PropertyInfo sb_len
= typeof (StringBuilder
).GetProperty ("Length");
42 PropertyInfo xr_resolver
= typeof (XmlResolver
).GetProperty ("Credentials");
43 EventInfo ass_load
= typeof (AppDomain
).GetEvent ("AssemblyLoad");
46 [ExpectedException (typeof (ArgumentNullException
))]
47 public void ConstructorNull ()
49 new XamlMemberInvoker (null);
55 public void FromProperty ()
58 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
59 Assert
.AreEqual (pi
.GetGetMethod (), i
.UnderlyingGetter
, "#1");
60 Assert
.IsNull (i
.UnderlyingSetter
, "#2");
61 Assert
.AreEqual (5, i
.GetValue ("hello"), "#3");
65 [ExpectedException (typeof (ArgumentNullException
))]
66 public void GetValueNullObject ()
69 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
74 [ExpectedException (typeof (ArgumentNullException
))]
75 public void SetValueNullObject ()
78 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
83 [ExpectedException (typeof (NotSupportedException
))]
84 public void GetValueOnWriteOnlyProperty ()
87 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
88 i
.GetValue (new XmlUrlResolver ());
92 [ExpectedException (typeof (NotSupportedException
))]
93 public void SetValueOnReadOnlyProperty ()
96 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
97 i
.SetValue ("hello", 5);
101 public void SetValueOnReadWriteProperty ()
104 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
105 var sb
= new StringBuilder ();
107 Assert
.AreEqual (5, sb
.Length
, "#1");
111 [ExpectedException (typeof (TargetException
))]
112 public void GetValueOnIrrelevantObject ()
115 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
116 i
.GetValue (new StringBuilder ());
120 public void GetValueOnTypeValue ()
122 var xm
= XamlLanguage
.Type
.GetMember ("Type");
123 var i
= new XamlMemberInvoker (xm
);
124 var o
= i
.GetValue (new TypeExtension (typeof (int)));
125 Assert
.AreEqual (typeof (int), o
, "#1");
129 public void GetValueArrayExtension ()
131 var xt
= sctx
.GetXamlType (typeof (TestClass
));
132 var xm
= xt
.GetMember ("ArrayMember");
133 Assert
.IsNotNull (xm
, "#-1");
134 Assert
.AreEqual (XamlLanguage
.Array
, xm
.Type
, "#0");
135 var o
= xm
.Invoker
.GetValue (new TestClass ());
136 Assert
.AreEqual (typeof (ArrayExtension
), o
.GetType (), "#1");
140 [ExpectedException (typeof (NotSupportedException
))]
141 public void GetValueInitialization ()
143 var xm
= XamlLanguage
.Initialization
;
149 [ExpectedException (typeof (NotSupportedException
))]
150 public void GetValuePositionalParameter ()
152 var xm
= XamlLanguage
.PositionalParameters
;
154 i
.GetValue (new TypeExtension (typeof (int)));
158 [ExpectedException (typeof (TargetException
))]
159 public void SetValueOnIrrelevantObject ()
162 var i
= new XamlMemberInvoker (new XamlMember (pi
, sctx
));
163 i
.SetValue ("hello", 5);
169 public void FromEvent ()
172 var i
= new XamlMemberInvoker (new XamlMember (ei
, sctx
));
173 Assert
.IsNull (i
.UnderlyingGetter
, "#1");
174 Assert
.AreEqual (ei
.GetAddMethod (), i
.UnderlyingSetter
, "#2");
178 [ExpectedException (typeof (NotSupportedException
))]
179 public void GetValueOnEvent ()
182 var i
= new XamlMemberInvoker (new XamlMember (ei
, sctx
));
183 i
.GetValue (AppDomain
.CurrentDomain
);
187 public void SetValueOnEventNull ()
190 var i
= new XamlMemberInvoker (new XamlMember (ei
, sctx
));
191 i
.SetValue (AppDomain
.CurrentDomain
, null);
195 [ExpectedException (typeof (ArgumentException
))]
196 public void SetValueOnEventValueMismatch ()
199 var i
= new XamlMemberInvoker (new XamlMember (ei
, sctx
));
200 i
.SetValue (AppDomain
.CurrentDomain
, 5);
203 void DummyAssemblyLoad (object o
, AssemblyLoadEventArgs e
)
208 public void SetValueOnEvent ()
211 var i
= new XamlMemberInvoker (new XamlMember (ei
, sctx
));
212 i
.SetValue (AppDomain
.CurrentDomain
, new AssemblyLoadEventHandler (DummyAssemblyLoad
));
216 public void CustomTypeDefaultValues ()
218 var i
= new MyXamlMemberInvoker ();
219 Assert
.IsNull (i
.UnderlyingGetter
, "#1");
220 Assert
.IsNull (i
.UnderlyingSetter
, "#2");
224 [ExpectedException (typeof (MyException
))]
225 public void UnderlyingGetter ()
227 var i
= new XamlMemberInvoker (new MyXamlMember (str_len
, sctx
));
228 // call XamlMember's UnderlyingGetter.
229 Assert
.IsNotNull (i
.UnderlyingGetter
, "#1");
233 [ExpectedException (typeof (MyException
))]
234 public void UnderlyingSetter ()
236 var i
= new XamlMemberInvoker (new MyXamlMember (str_len
, sctx
));
237 // call XamlMember's UnderlyingSetter.
238 Assert
.IsNull (i
.UnderlyingSetter
, "#1");
241 class MyXamlMember
: XamlMember
243 public MyXamlMember (PropertyInfo pi
, XamlSchemaContext context
)
248 protected override MethodInfo
LookupUnderlyingGetter ()
250 throw new MyException ();
253 protected override MethodInfo
LookupUnderlyingSetter ()
255 throw new MyException ();
259 class MyException
: Exception
263 class MyXamlMemberInvoker
: XamlMemberInvoker
271 ArrayMember
= new ArrayExtension (typeof (int));
272 ArrayMember
.AddChild (5);
273 ArrayMember
.AddChild (3);
274 ArrayMember
.AddChild (-1);
277 public ArrayExtension ArrayMember { get; set; }
281 [ExpectedException (typeof (NotSupportedException
))]
282 public void UnknownInvokerGetValue ()
284 XamlMemberInvoker
.UnknownInvoker
.GetValue (new object ());
288 [ExpectedException (typeof (NotSupportedException
))]
289 public void UnknownInvokerSetValue ()
291 XamlMemberInvoker
.UnknownInvoker
.SetValue (new object (), new object ());
295 public void UnknownInvoker ()
297 Assert
.IsNull (XamlMemberInvoker
.UnknownInvoker
.UnderlyingGetter
, "#1");
298 Assert
.IsNull (XamlMemberInvoker
.UnknownInvoker
.UnderlyingSetter
, "#2");