Implement XamlMemberInvoker.UnknownInvoker too.
[mono-project.git] / mcs / class / System.Xaml / Test / System.Xaml.Schema / XamlMemberInvokerTest.cs
blob102d4cb2046949e2b9dbfcac54738497d4d41a35
1 //
2 // Copyright (C) 2010 Novell Inc. http://novell.com
3 //
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:
11 //
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 //
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.
23 using System;
24 using System.Collections;
25 using System.Collections.Generic;
26 using System.Reflection;
27 using System.Text;
28 using System.Windows.Markup;
29 using System.Xaml;
30 using System.Xaml.Schema;
31 using System.Xml;
32 using NUnit.Framework;
34 namespace MonoTests.System.Xaml.Schema
36 [TestFixture]
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");
45 [Test]
46 [ExpectedException (typeof (ArgumentNullException))]
47 public void ConstructorNull ()
49 new XamlMemberInvoker (null);
52 // Property
54 [Test]
55 public void FromProperty ()
57 var pi = str_len;
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");
64 [Test]
65 [ExpectedException (typeof (ArgumentNullException))]
66 public void GetValueNullObject ()
68 var pi = str_len;
69 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
70 i.GetValue (null);
73 [Test]
74 [ExpectedException (typeof (ArgumentNullException))]
75 public void SetValueNullObject ()
77 var pi = sb_len;
78 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
79 i.SetValue (null, 5);
82 [Test]
83 [ExpectedException (typeof (NotSupportedException))]
84 public void GetValueOnWriteOnlyProperty ()
86 var pi = xr_resolver;
87 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
88 i.GetValue (new XmlUrlResolver ());
91 [Test]
92 [ExpectedException (typeof (NotSupportedException))]
93 public void SetValueOnReadOnlyProperty ()
95 var pi = str_len;
96 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
97 i.SetValue ("hello", 5);
100 [Test]
101 public void SetValueOnReadWriteProperty ()
103 var pi = sb_len;
104 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
105 var sb = new StringBuilder ();
106 i.SetValue (sb, 5);
107 Assert.AreEqual (5, sb.Length, "#1");
110 [Test]
111 [ExpectedException (typeof (TargetException))]
112 public void GetValueOnIrrelevantObject ()
114 var pi = str_len;
115 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
116 i.GetValue (new StringBuilder ());
119 [Test]
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");
128 [Test]
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");
139 [Test]
140 [ExpectedException (typeof (NotSupportedException))]
141 public void GetValueInitialization ()
143 var xm = XamlLanguage.Initialization;
144 var i = xm.Invoker;
145 i.GetValue ("foo");
148 [Test]
149 [ExpectedException (typeof (NotSupportedException))]
150 public void GetValuePositionalParameter ()
152 var xm = XamlLanguage.PositionalParameters;
153 var i = xm.Invoker;
154 i.GetValue (new TypeExtension (typeof (int)));
157 [Test]
158 [ExpectedException (typeof (TargetException))]
159 public void SetValueOnIrrelevantObject ()
161 var pi = sb_len;
162 var i = new XamlMemberInvoker (new XamlMember (pi, sctx));
163 i.SetValue ("hello", 5);
166 // Event
168 [Test]
169 public void FromEvent ()
171 var ei = ass_load;
172 var i = new XamlMemberInvoker (new XamlMember (ei, sctx));
173 Assert.IsNull (i.UnderlyingGetter, "#1");
174 Assert.AreEqual (ei.GetAddMethod (), i.UnderlyingSetter, "#2");
177 [Test]
178 [ExpectedException (typeof (NotSupportedException))]
179 public void GetValueOnEvent ()
181 var ei = ass_load;
182 var i = new XamlMemberInvoker (new XamlMember (ei, sctx));
183 i.GetValue (AppDomain.CurrentDomain);
186 [Test]
187 public void SetValueOnEventNull ()
189 var ei = ass_load;
190 var i = new XamlMemberInvoker (new XamlMember (ei, sctx));
191 i.SetValue (AppDomain.CurrentDomain, null);
194 [Test]
195 [ExpectedException (typeof (ArgumentException))]
196 public void SetValueOnEventValueMismatch ()
198 var ei = ass_load;
199 var i = new XamlMemberInvoker (new XamlMember (ei, sctx));
200 i.SetValue (AppDomain.CurrentDomain, 5);
203 void DummyAssemblyLoad (object o, AssemblyLoadEventArgs e)
207 [Test]
208 public void SetValueOnEvent ()
210 var ei = ass_load;
211 var i = new XamlMemberInvoker (new XamlMember (ei, sctx));
212 i.SetValue (AppDomain.CurrentDomain, new AssemblyLoadEventHandler (DummyAssemblyLoad));
215 [Test]
216 public void CustomTypeDefaultValues ()
218 var i = new MyXamlMemberInvoker ();
219 Assert.IsNull (i.UnderlyingGetter, "#1");
220 Assert.IsNull (i.UnderlyingSetter, "#2");
223 [Test]
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");
232 [Test]
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)
244 : base (pi, 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
267 class TestClass
269 public TestClass ()
271 ArrayMember = new ArrayExtension (typeof (int));
272 ArrayMember.AddChild (5);
273 ArrayMember.AddChild (3);
274 ArrayMember.AddChild (-1);
277 public ArrayExtension ArrayMember { get; set; }
280 [Test]
281 [ExpectedException (typeof (NotSupportedException))]
282 public void UnknownInvokerGetValue ()
284 XamlMemberInvoker.UnknownInvoker.GetValue (new object ());
287 [Test]
288 [ExpectedException (typeof (NotSupportedException))]
289 public void UnknownInvokerSetValue ()
291 XamlMemberInvoker.UnknownInvoker.SetValue (new object (), new object ());
294 [Test]
295 public void UnknownInvoker ()
297 Assert.IsNull (XamlMemberInvoker.UnknownInvoker.UnderlyingGetter, "#1");
298 Assert.IsNull (XamlMemberInvoker.UnknownInvoker.UnderlyingSetter, "#2");