Merge pull request #409 from Alkarex/patch-1
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Resources / ResXDataNodeTypeConverterGetValueTypeNameTests.cs
1 //
2 // ResXDataNodeTypeConverterGetValueTypeNameTests.cs
3 // 
4 // Author:
5 //      Gary Barnett (gary.barnett.mono@gmail.com)
6 // 
7 // Copyright (C) Gary Barnett (2012)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28 #if NET_2_0
29 using System;
30 using System.IO;
31 using System.Resources;
32 using System.Collections;
33 using NUnit.Framework;
34 using System.ComponentModel.Design;
35 using System.Drawing;
36 using System.Reflection;
37
38 namespace MonoTests.System.Resources
39 {
40         [TestFixture]
41         public class ResXDataNodeTypeConverterGetValueTypeNameTests : ResourcesTestHelper {
42                 [Test]
43                 public void ITRSUsedWithNodeFromReader ()
44                 {
45                         ResXDataNode returnedNode, originalNode;
46                         originalNode = new ResXDataNode ("aNumber", 23L);
47                         returnedNode = GetNodeFromResXReader (originalNode);
48
49                         Assert.IsNotNull (returnedNode, "#A1");
50                         string returnedType = returnedNode.GetValueTypeName (new ReturnIntITRS ());
51                         Assert.AreEqual ((typeof (Int32)).AssemblyQualifiedName, returnedType, "#A2");
52                 }
53
54                 [Test]
55                 public void ITRSUsedEachTimeWhenNodeFromReader ()
56                 {
57                         ResXDataNode returnedNode, originalNode;
58                         originalNode = new ResXDataNode ("aNumber", 23L);
59                         returnedNode = GetNodeFromResXReader (originalNode);
60
61                         Assert.IsNotNull (returnedNode, "#A1");
62                         string newType = returnedNode.GetValueTypeName (new ReturnIntITRS ());
63                         Assert.AreEqual (typeof (int).AssemblyQualifiedName, newType, "#A2");
64                         string origType = returnedNode.GetValueTypeName ((ITypeResolutionService) null);
65                         Assert.AreEqual (typeof (long).AssemblyQualifiedName, origType, "#A3");                         
66                 }
67
68                 [Test]
69                 public void ITRSNotUsedWhenNodeCreatedNew ()
70                 {
71                         ResXDataNode node;
72                         node = new ResXDataNode ("along", 34L);
73
74                         string returnedType = node.GetValueTypeName (new ReturnIntITRS ());
75                         Assert.AreEqual ((typeof (long)).AssemblyQualifiedName, returnedType, "#A1");
76                 }
77
78                 [Test]
79                 public void InvalidMimeTypeReturnedFromReader_ReturnsStringIfCantResolveType ()
80                 {
81                         ResXDataNode node = GetNodeFromResXReader (typeconResXInvalidMimeTypeAndType);
82                         Assert.IsNotNull (node, "#A1");
83                         string type = node.GetValueTypeName ((AssemblyName []) null);
84                         Assert.AreEqual ("A.type", type, "#A2");
85                 }
86
87                 [Test]
88                 public void InvalidMimeTypeReturnedFromReader_TriesToResolve ()
89                 {
90                         ResXDataNode node = GetNodeFromResXReader (typeconResXInvalidMimeType);
91                         Assert.IsNotNull (node, "#A1");
92                         string type = node.GetValueTypeName ((AssemblyName []) null);
93                         Assert.AreEqual (typeof (string).AssemblyQualifiedName, type, "#A2");
94                 }
95
96                 [Test]
97                 public void ReturnsFullNameWereOnlyFullNameInResX ()
98                 {
99                         ResXDataNode node = GetNodeFromResXReader (convertableResXWithoutAssemblyName);
100
101                         Assert.IsNotNull (node, "#A1");
102                         string returnedType = node.GetValueTypeName ((AssemblyName []) null);
103                         Assert.AreEqual ("DummyAssembly.Convertable", returnedType, "#A2");
104                 }
105
106                 [Test]
107                 public void AssemblyNameUsedWhereOnlyFullNameInResX ()
108                 {
109                         // DummyAssembly must be in the same directory as current assembly to work correctly
110                         string aName = "DummyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
111                         AssemblyName [] assemblyNames = new AssemblyName [] { new AssemblyName (aName) };
112
113                         ResXDataNode node = GetNodeFromResXReader (convertableResXWithoutAssemblyName);
114
115                         Assert.IsNotNull (node, "#A1");
116                         string returnedType = node.GetValueTypeName (assemblyNames);
117                         Assert.AreEqual ("DummyAssembly.Convertable, " + aName, returnedType, "#A2");
118                 }
119
120                 [Test]
121                 public void AssemblyNameUsedEachTimeWhereOnlyFullNameInResX ()
122                 {
123                         // DummyAssembly must be in the same directory as current assembly to work correctly
124                         string aName = "DummyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
125                         AssemblyName [] assemblyNames = new AssemblyName [] { new AssemblyName (aName) };
126
127                         ResXDataNode node = GetNodeFromResXReader (convertableResXWithoutAssemblyName);
128
129                         Assert.IsNotNull (node, "#A1");
130                         string returnedName = node.GetValueTypeName (assemblyNames);
131                         Assert.AreEqual ("DummyAssembly.Convertable, " + aName, returnedName, "#A2");
132                         string nameWithNullParam = node.GetValueTypeName ((AssemblyName []) null);
133                         Assert.AreEqual ("DummyAssembly.Convertable", nameWithNullParam, "#A3");
134                 }
135
136                 #region initial
137                 
138                 [Test]
139                 public void NullITRSServiceOK ()
140                 {
141                         ResXDataNode node = GetNodeEmdeddedIcon ();
142                         
143                         string name = node.GetValueTypeName ((ITypeResolutionService) null);
144                         Assert.AreEqual (typeof (Icon).AssemblyQualifiedName, name);
145                 }
146                 
147                 [Test]
148                 public void WrongITRSOK ()
149                 {
150                         ResXDataNode node = GetNodeEmdeddedIcon ();
151                         
152                         string name = node.GetValueTypeName (new DummyITRS ());
153                         Assert.AreEqual (typeof (Icon).AssemblyQualifiedName, name);
154                 }
155                 
156                 [Test]
157                 public void WrongAssemblyNamesOK ()
158                 {
159                         ResXDataNode node = GetNodeEmdeddedIcon ();
160                         AssemblyName [] ass = new AssemblyName [1];
161                         
162                         ass [0] = new AssemblyName ("System.Design");
163                         
164                         string name = node.GetValueTypeName (ass);
165                         Assert.AreEqual (typeof (Icon).AssemblyQualifiedName, name);
166                 }
167                 
168                 [Test]
169                 public void NullAssemblyNamesOK ()
170                 {
171                         ResXDataNode node = GetNodeEmdeddedIcon ();
172                         
173                         string name = node.GetValueTypeName ((AssemblyName []) null);
174                         Assert.AreEqual (typeof (Icon).AssemblyQualifiedName, name);
175                 }
176                 
177 #endregion
178
179                 static string typeconResXInvalidMimeTypeAndType =
180 @"<?xml version=""1.0"" encoding=""utf-8""?>
181 <root>
182   
183   <resheader name=""resmimetype"">
184         <value>text/microsoft-resx</value>
185   </resheader>
186   <resheader name=""version"">
187         <value>2.0</value>
188   </resheader>
189   <resheader name=""reader"">
190         <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
191   </resheader>
192   <resheader name=""writer"">
193         <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
194   </resheader>
195   <data name=""test"" type=""A.type"" mimetype=""application/xxxx"">
196         <value>42</value>
197   </data>
198 </root>";
199
200                 static string typeconResXInvalidMimeType =
201 @"<?xml version=""1.0"" encoding=""utf-8""?>
202 <root>
203   
204   <resheader name=""resmimetype"">
205         <value>text/microsoft-resx</value>
206   </resheader>
207   <resheader name=""version"">
208         <value>2.0</value>
209   </resheader>
210   <resheader name=""reader"">
211         <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
212   </resheader>
213   <resheader name=""writer"">
214         <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
215   </resheader>
216   <data name=""test"" type=""System.String"" mimetype=""application/xxxx"">
217         <value>42</value>
218   </data>
219 </root>";
220
221                 
222                 static string missingSerializableFromMissingAssembly =
223 @"<?xml version=""1.0"" encoding=""utf-8""?>
224 <root>
225   <resheader name=""resmimetype"">
226     <value>text/microsoft-resx</value>
227   </resheader>
228   <resheader name=""version"">
229     <value>2.0</value>
230   </resheader>
231   <resheader name=""reader"">
232     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
233   </resheader>
234   <resheader name=""writer"">
235     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
236   </resheader>
237   <data name=""aname"" mimetype=""application/x-microsoft.net.object.binary.base64"">
238     <value>
239         AAEAAAD/////AQAAAAAAAAAMAgAAAEZNaXNzaW5nQXNzZW1ibHksIFZlcnNpb249MS4wLjAuMCwgQ3Vs
240         dHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAhRHVtbXlBc3NlbWJseS5NaXNzaW5n
241         U2VyaWFsaXphYmxlAgAAAAdzZXJuYW1lCHNlcnZhbHVlAQECAAAABgMAAAAFYW5hbWUGBAAAAAZhdmFs
242         dWUL
243 </value>
244   </data>
245 </root>";
246
247                 static string anotherSerializableFromDummyAssembly =
248 @"<?xml version=""1.0"" encoding=""utf-8""?>
249 <root>
250  
251   <resheader name=""resmimetype"">
252     <value>text/microsoft-resx</value>
253   </resheader>
254   <resheader name=""version"">
255     <value>2.0</value>
256   </resheader>
257   <resheader name=""reader"">
258     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
259   </resheader>
260   <resheader name=""writer"">
261     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
262   </resheader>
263   <data name=""aname"" mimetype=""application/x-microsoft.net.object.binary.base64"">
264     <value>
265         AAEAAAD/////AQAAAAAAAAAMAgAAAEREdW1teUFzc2VtYmx5LCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
266         cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAIUR1bW15QXNzZW1ibHkuQW5vdGhlclNl
267         cmlhbGl6YWJsZQIAAAAHc2VybmFtZQhzZXJ2YWx1ZQEBAgAAAAYDAAAABWFuYW1lBgQAAAAGYXZhbHVl
268         Cw==
269 </value>
270   </data>
271 </root>";
272
273                 static string convertableResXWithoutAssemblyName =
274 @"<?xml version=""1.0"" encoding=""utf-8""?>
275 <root>
276   
277   <resheader name=""resmimetype"">
278         <value>text/microsoft-resx</value>
279   </resheader>
280   <resheader name=""version"">
281         <value>2.0</value>
282   </resheader>
283   <resheader name=""reader"">
284         <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
285   </resheader>
286   <resheader name=""writer"">
287         <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
288   </resheader>
289   
290   <data name=""test"" type=""DummyAssembly.Convertable"">
291         <value>im a name        im a value</value>
292   </data>
293 </root>";
294
295                 static string thisAssemblyConvertableResXWithoutAssemblyName =
296         @"<?xml version=""1.0"" encoding=""utf-8""?>
297 <root>
298   
299   <resheader name=""resmimetype"">
300         <value>text/microsoft-resx</value>
301   </resheader>
302   <resheader name=""version"">
303         <value>2.0</value>
304   </resheader>
305   <resheader name=""reader"">
306         <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
307   </resheader>
308   <resheader name=""writer"">
309         <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
310   </resheader>
311   
312   <data name=""test"" type=""MonoTests.System.Resources.ThisAssemblyConvertable"">
313         <value>im a name        im a value</value>
314   </data>
315 </root>";
316
317         }
318
319
320 }
321 #endif
322