2 // ResXDataNodeSerializedGetValueTypeNameTests.cs
5 // Gary Barnett (gary.barnett.mono@gmail.com)
7 // Copyright (C) Gary Barnett (2012)
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
30 using System.Reflection;
31 using System.Resources;
32 using System.Runtime.Serialization;
33 using System.Collections;
34 using NUnit.Framework;
35 using System.ComponentModel.Design;
36 using System.Runtime.Serialization.Formatters.Binary;
38 namespace MonoTests.System.Resources {
40 public class ResXDataNodeSerializedGetValueTypeNameTests : ResourcesTestHelper {
42 public void ITRSUsedWithNodeFromReader ()
44 ResXDataNode originalNode, returnedNode;
45 originalNode = GetNodeEmdeddedSerializable ();
46 returnedNode = GetNodeFromResXReader (originalNode);
48 Assert.IsNotNull (returnedNode, "#A1");
49 string returnedType = returnedNode.GetValueTypeName (new ReturnSerializableSubClassITRS ());
50 Assert.AreEqual ((typeof (serializableSubClass)).AssemblyQualifiedName, returnedType, "#A2");
54 public void ITRSOnlyUsedFirstTimeWithNodeFromReader ()
56 // check ITRS supplied to GetValueTypeName method for a node returned from reader are used when
57 // retrieving the value first time and returns this same value ignoring any new ITRS passed thereafter
58 ResXDataNode originalNode, returnedNode;
59 originalNode = GetNodeEmdeddedSerializable ();
60 returnedNode = GetNodeFromResXReader (originalNode);
62 Assert.IsNotNull (returnedNode, "#A1");
63 string defaultType = returnedNode.GetValueTypeName ((ITypeResolutionService) null);
64 Assert.AreEqual ((typeof (serializable)).AssemblyQualifiedName, defaultType, "#A2");
66 string newType = returnedNode.GetValueTypeName (new ReturnSerializableSubClassITRS ());
67 Assert.AreNotEqual ((typeof (serializableSubClass)).AssemblyQualifiedName, newType, "#A3");
68 Assert.AreEqual ((typeof (serializable)).AssemblyQualifiedName, newType, "#A4");
72 public void ITRSNotUsedWhenNodeCreatedNew ()
75 node = GetNodeEmdeddedSerializable ();
77 string returnedType = node.GetValueTypeName (new ReturnSerializableSubClassITRS ());
78 Assert.AreEqual ((typeof (serializable)).AssemblyQualifiedName, returnedType, "#A1");
82 public void ITRSIsIgnoredIfGetValueAlreadyCalledWithAnotherITRS ()
84 // check that first call to GetValue sets the type for GetValueTypeName
85 ResXDataNode originalNode, returnedNode;
86 originalNode = GetNodeEmdeddedSerializable ();
87 returnedNode = GetNodeFromResXReader (originalNode);
89 Assert.IsNotNull (returnedNode, "#A1");
90 // get value passing no params
91 object val = returnedNode.GetValue ((ITypeResolutionService) null);
92 Assert.IsInstanceOfType (typeof (serializable), val, "#A2");
93 Assert.IsNotInstanceOfType (typeof (serializableSubClass), val, "#A3");
95 //get value type passing different params
96 string newType = returnedNode.GetValueTypeName (new ReturnSerializableSubClassITRS ());
97 Assert.AreNotEqual ((typeof (serializableSubClass)).AssemblyQualifiedName, newType, "#A4");
98 Assert.AreEqual ((typeof (serializable)).AssemblyQualifiedName, newType, "#A5");
102 public void SoapFormattedObject ()
104 ResXDataNode node = GetNodeFromResXReader (serializedResXSOAP);
106 Assert.IsNotNull (node, "#A1");
107 // hard coded assembly name value refers to that generated under 2.0 prefix, so use compatible available class
108 string name = node.GetValueTypeName (new ReturnSerializableSubClassITRS ());
109 Assert.AreEqual (typeof (serializableSubClass).AssemblyQualifiedName, name, "#A2");
113 public void DeserializationErrorReturnsObjectType ()
115 ResXDataNode node = GetNodeFromResXReader (serializedResXCorruped);
116 Assert.IsNotNull (node, "#A1");
117 string type = node.GetValueTypeName ((AssemblyName []) null);
119 Assert.AreEqual (typeof (object).AssemblyQualifiedName,type, "#A2");
123 public void InvalidMimeTypeFromReaderReturnsNull ()
125 ResXDataNode node = GetNodeFromResXReader (serializedResXInvalidMimeType);
126 Assert.IsNotNull (node, "#A1");
127 string type = node.GetValueTypeName ((AssemblyName []) null);
128 Assert.IsNull (type, "#A2");
132 public void AssemblyAutomaticallyLoaded ()
134 // DummyAssembly must be in the same directory as current assembly to work correctly
135 ResXDataNode node = GetNodeFromResXReader (anotherSerializableFromDummyAssembly);
136 Assert.IsNotNull (node, "#A1");
137 string type = node.GetValueTypeName ((AssemblyName []) null);
138 Assert.AreEqual ("DummyAssembly.AnotherSerializable, DummyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", type, "#A2");
142 public void ReturnsObjectAssemblyMissing ()
144 ResXDataNode node = GetNodeFromResXReader (missingSerializableFromMissingAssembly);
145 Assert.IsNotNull (node, "#A1");
146 string type = node.GetValueTypeName ((AssemblyName []) null);
147 Assert.AreEqual (typeof (object).AssemblyQualifiedName, type, "#A2");
150 static string serializedResXInvalidMimeType =
151 @"<?xml version=""1.0"" encoding=""utf-8""?>
154 <resheader name=""resmimetype"">
155 <value>text/microsoft-resx</value>
157 <resheader name=""version"">
160 <resheader name=""reader"">
161 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
163 <resheader name=""writer"">
164 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
166 <data name=""test"" mimetype=""application/xxxx"">
168 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
169 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
170 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
171 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
176 static string serializedResXCorruped =
177 @"<?xml version=""1.0"" encoding=""utf-8""?>
180 <resheader name=""resmimetype"">
181 <value>text/microsoft-resx</value>
183 <resheader name=""version"">
186 <resheader name=""reader"">
187 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
189 <resheader name=""writer"">
190 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
192 <data name=""test"" mimetype=""application/x-microsoft.net.object.binary.base64"">
194 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
195 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
196 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
197 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
202 static string serializedResXSOAP =
203 @"<?xml version=""1.0"" encoding=""utf-8""?>
205 <resheader name=""resmimetype"">
206 <value>text/microsoft-resx</value>
208 <resheader name=""version"">
211 <resheader name=""reader"">
212 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
214 <resheader name=""writer"">
215 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
217 <data name=""test"" mimetype=""application/x-microsoft.net.object.soap.base64"">
219 PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2Ui
220 IHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2No
221 ZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAu
222 b3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGlu
223 Zy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29k
224 aW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpzZXJpYWxpemFibGUgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3Nj
225 aGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Nb25vVGVzdHMuU3lzdGVtLlJlc291cmNlcy9TeXN0ZW0uV2luZG93
226 cy5Gb3Jtc190ZXN0X25ldF8yXzAlMkMlMjBWZXJzaW9uJTNEMC4wLjAuMCUyQyUyMEN1bHR1cmUlM0RuZXV0cmFsJTJDJTIw
227 UHVibGljS2V5VG9rZW4lM0RudWxsIj4NCjxzZXJuYW1lIGlkPSJyZWYtMyI+YW5hbWU8L3Nlcm5hbWU+DQo8c2VydmFsdWUg
228 aWQ9InJlZi00Ij5hdmFsdWU8L3NlcnZhbHVlPg0KPC9hMTpzZXJpYWxpemFibGU+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NP
229 QVAtRU5WOkVudmVsb3BlPg==
234 static string missingSerializableFromMissingAssembly =
235 @"<?xml version=""1.0"" encoding=""utf-8""?>
237 <resheader name=""resmimetype"">
238 <value>text/microsoft-resx</value>
240 <resheader name=""version"">
243 <resheader name=""reader"">
244 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
246 <resheader name=""writer"">
247 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
249 <data name=""aname"" mimetype=""application/x-microsoft.net.object.binary.base64"">
251 AAEAAAD/////AQAAAAAAAAAMAgAAAEZNaXNzaW5nQXNzZW1ibHksIFZlcnNpb249MS4wLjAuMCwgQ3Vs
252 dHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAhRHVtbXlBc3NlbWJseS5NaXNzaW5n
253 U2VyaWFsaXphYmxlAgAAAAdzZXJuYW1lCHNlcnZhbHVlAQECAAAABgMAAAAFYW5hbWUGBAAAAAZhdmFs
259 static string anotherSerializableFromDummyAssembly =
260 @"<?xml version=""1.0"" encoding=""utf-8""?>
263 <resheader name=""resmimetype"">
264 <value>text/microsoft-resx</value>
266 <resheader name=""version"">
269 <resheader name=""reader"">
270 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
272 <resheader name=""writer"">
273 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
275 <data name=""aname"" mimetype=""application/x-microsoft.net.object.binary.base64"">
277 AAEAAAD/////AQAAAAAAAAAMAgAAAEREdW1teUFzc2VtYmx5LCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
278 cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAIUR1bW15QXNzZW1ibHkuQW5vdGhlclNl
279 cmlhbGl6YWJsZQIAAAAHc2VybmFtZQhzZXJ2YWx1ZQEBAgAAAAYDAAAABWFuYW1lBgQAAAAGYXZhbHVl
285 static string convertableResXWithoutAssemblyName =
286 @"<?xml version=""1.0"" encoding=""utf-8""?>
289 <resheader name=""resmimetype"">
290 <value>text/microsoft-resx</value>
292 <resheader name=""version"">
295 <resheader name=""reader"">
296 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
298 <resheader name=""writer"">
299 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
302 <data name=""test"" type=""DummyAssembly.Convertable"">
303 <value>im a name im a value</value>
307 static string thisAssemblyConvertableResXWithoutAssemblyName =
308 @"<?xml version=""1.0"" encoding=""utf-8""?>
311 <resheader name=""resmimetype"">
312 <value>text/microsoft-resx</value>
314 <resheader name=""version"">
317 <resheader name=""reader"">
318 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
320 <resheader name=""writer"">
321 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
324 <data name=""test"" type=""MonoTests.System.Resources.ThisAssemblyConvertable"">
325 <value>im a name im a value</value>