2 // AssemblyNameTest.cs - NUnit Test Cases for AssemblyName
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
11 using NUnit.Framework;
13 using System.Configuration.Assemblies;
15 using System.Reflection;
17 using System.Reflection.Emit;
19 using System.Runtime.Serialization;
20 using System.Threading;
21 using System.Globalization;
22 using System.Runtime.Serialization.Formatters.Binary;
23 using System.Security;
24 using System.Security.Permissions;
26 namespace MonoTests.System.Reflection {
29 public class AssemblyNameTest {
30 private AssemblyName an;
32 private string tempDir = Path.Combine (Path.GetTempPath (), "MonoTests.System.Reflection.AssemblyNameTest");
34 private AppDomain domain;
36 // created with "sn -o test.snk test.txt"
37 static byte[] keyPair = {
38 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53,
39 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
40 0x3D, 0xBD, 0x72, 0x08, 0xC6, 0x2B, 0x0E, 0xA8, 0xC1, 0xC0,
41 0x58, 0x07, 0x2B, 0x63, 0x5F, 0x7C, 0x9A, 0xBD, 0xCB, 0x22,
42 0xDB, 0x20, 0xB2, 0xA9, 0xDA, 0xDA, 0xEF, 0xE8, 0x00, 0x64,
43 0x2F, 0x5D, 0x8D, 0xEB, 0x78, 0x02, 0xF7, 0xA5, 0x36, 0x77,
44 0x28, 0xD7, 0x55, 0x8D, 0x14, 0x68, 0xDB, 0xEB, 0x24, 0x09,
45 0xD0, 0x2B, 0x13, 0x1B, 0x92, 0x6E, 0x2E, 0x59, 0x54, 0x4A,
46 0xAC, 0x18, 0xCF, 0xC9, 0x09, 0x02, 0x3F, 0x4F, 0xA8, 0x3E,
47 0x94, 0x00, 0x1F, 0xC2, 0xF1, 0x1A, 0x27, 0x47, 0x7D, 0x10,
48 0x84, 0xF5, 0x14, 0xB8, 0x61, 0x62, 0x1A, 0x0C, 0x66, 0xAB,
49 0xD2, 0x4C, 0x4B, 0x9F, 0xC9, 0x0F, 0x3C, 0xD8, 0x92, 0x0F,
50 0xF5, 0xFF, 0xCE, 0xD7, 0x6E, 0x5C, 0x6F, 0xB1, 0xF5, 0x7D,
51 0xD3, 0x56, 0xF9, 0x67, 0x27, 0xA4, 0xA5, 0x48, 0x5B, 0x07,
52 0x93, 0x44, 0x00, 0x4A, 0xF8, 0xFF, 0xA4, 0xCB, 0x73, 0xC0,
53 0x6A, 0x62, 0xB4, 0xB7, 0xC8, 0x92, 0x58, 0x87, 0xCD, 0x07,
54 0x0C, 0x7D, 0x6C, 0xC1, 0x4A, 0xFC, 0x82, 0x57, 0x0E, 0x43,
55 0x85, 0x09, 0x75, 0x98, 0x51, 0xBB, 0x35, 0xF5, 0x64, 0x83,
56 0xC7, 0x79, 0x89, 0x5C, 0x55, 0x36, 0x66, 0xAB, 0x27, 0xA4,
57 0xD9, 0xD4, 0x7E, 0x6B, 0x67, 0x64, 0xC1, 0x54, 0x4E, 0x37,
58 0xF1, 0x4E, 0xCA, 0xB3, 0xE5, 0x63, 0x91, 0x57, 0x12, 0x14,
59 0xA6, 0xEA, 0x8F, 0x8F, 0x2B, 0xFE, 0xF3, 0xE9, 0x16, 0x08,
60 0x2B, 0x86, 0xBC, 0x26, 0x0D, 0xD0, 0xC6, 0xC4, 0x1A, 0x72,
61 0x43, 0x76, 0xDC, 0xFF, 0x28, 0x52, 0xA1, 0xDE, 0x8D, 0xFA,
62 0xD5, 0x1F, 0x0B, 0xB5, 0x4F, 0xAF, 0x06, 0x79, 0x11, 0xEE,
63 0xA8, 0xEC, 0xD3, 0x74, 0x55, 0xA2, 0x80, 0xFC, 0xF8, 0xD9,
64 0x50, 0x69, 0x48, 0x01, 0xC2, 0x5A, 0x04, 0x56, 0xB4, 0x3E,
65 0x24, 0x32, 0x20, 0xB5, 0x2C, 0xDE, 0xBB, 0xBD, 0x13, 0xFD,
66 0x13, 0xF7, 0x03, 0x3E, 0xE3, 0x37, 0x84, 0x74, 0xE7, 0xD0,
67 0x5E, 0x9E, 0xB6, 0x26, 0xAE, 0x6E, 0xB0, 0x55, 0x6A, 0x52,
68 0x63, 0x6F, 0x5A, 0x9D, 0xF2, 0x67, 0xD6, 0x61, 0x4F, 0x7A,
69 0x45, 0xEE, 0x5C, 0x3D, 0x2B, 0x7C, 0xB2, 0x40, 0x79, 0x54,
70 0x84, 0xD1, 0xBE, 0x61, 0x3E, 0x5E, 0xD6, 0x18, 0x8E, 0x14,
71 0x98, 0xFC, 0x35, 0xBF, 0x5F, 0x1A, 0x20, 0x2E, 0x1A, 0xD8,
72 0xFF, 0xC4, 0x6B, 0xC0, 0xC9, 0x7D, 0x06, 0xEF, 0x09, 0xF9,
73 0xF3, 0x69, 0xFC, 0xBC, 0xA2, 0xE6, 0x80, 0x22, 0xB9, 0x79,
74 0x7E, 0xEF, 0x57, 0x9F, 0x49, 0xE1, 0xBC, 0x0D, 0xB6, 0xA1,
75 0xFE, 0x8D, 0xBC, 0xBB, 0xA3, 0x05, 0x02, 0x6B, 0x04, 0x45,
76 0xF7, 0x5D, 0xEE, 0x43, 0x06, 0xD6, 0x9C, 0x94, 0x48, 0x1A,
77 0x0B, 0x9C, 0xBC, 0xB4, 0x4E, 0x93, 0x60, 0x87, 0xCD, 0x58,
78 0xD6, 0x9A, 0x39, 0xA6, 0xC0, 0x7F, 0x8E, 0xFF, 0x25, 0xC1,
79 0xD7, 0x2C, 0xF6, 0xF4, 0x6F, 0x24, 0x52, 0x0B, 0x39, 0x42,
80 0x1B, 0x0D, 0x04, 0xC1, 0x93, 0x2A, 0x19, 0x1C, 0xF0, 0xB1,
81 0x9B, 0xC1, 0x24, 0x6D, 0x1B, 0x0B, 0xDA, 0x1C, 0x8B, 0x72,
82 0x48, 0xF0, 0x3E, 0x52, 0xBF, 0x0A, 0x84, 0x3A, 0x9B, 0xC8,
83 0x6D, 0x13, 0x1E, 0x72, 0xF4, 0x46, 0x93, 0x88, 0x1A, 0x5F,
84 0x4C, 0x3C, 0xE5, 0x9D, 0x6E, 0xBB, 0x4E, 0xDD, 0x5D, 0x1F,
85 0x11, 0x40, 0xF4, 0xD7, 0xAF, 0xB3, 0xAB, 0x9A, 0x99, 0x15,
86 0xF0, 0xDC, 0xAA, 0xFF, 0x9F, 0x2D, 0x9E, 0x56, 0x4F, 0x35,
87 0x5B, 0xBA, 0x06, 0x99, 0xEA, 0xC6, 0xB4, 0x48, 0x51, 0x17,
88 0x1E, 0xD1, 0x95, 0x84, 0x81, 0x18, 0xC0, 0xF1, 0x71, 0xDE,
89 0x44, 0x42, 0x02, 0x06, 0xAC, 0x0E, 0xA8, 0xE2, 0xF3, 0x1F,
90 0x96, 0x1F, 0xBE, 0xB6, 0x1F, 0xB5, 0x3E, 0xF6, 0x81, 0x05,
91 0x20, 0xFA, 0x2E, 0x40, 0x2E, 0x4D, 0xA0, 0x0E, 0xDA, 0x42,
92 0x9C, 0x05, 0xAA, 0x9E, 0xAF, 0x5C, 0xF7, 0x3A, 0x3F, 0xBB,
93 0x91, 0x73, 0x45, 0x27, 0xA8, 0xA2, 0x07, 0x4A, 0xEF, 0x59,
94 0x1E, 0x97, 0x9D, 0xE0, 0x30, 0x5A, 0x83, 0xCE, 0x1E, 0x57,
95 0x32, 0x89, 0x43, 0x41, 0x28, 0x7D, 0x14, 0x8D, 0x8B, 0x41,
96 0x1A, 0x56, 0x76, 0x43, 0xDB, 0x64, 0x86, 0x41, 0x64, 0x8D,
97 0x4C, 0x91, 0x83, 0x4E, 0xF5, 0x6C };
99 static byte [] publicKey1 = {
100 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
101 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
102 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
103 0x01, 0x00, 0x3d, 0xbd, 0x72, 0x08, 0xc6, 0x2b, 0x0e, 0xa8,
104 0xc1, 0xc0, 0x58, 0x07, 0x2b, 0x63, 0x5f, 0x7c, 0x9a, 0xbd,
105 0xcb, 0x22, 0xdb, 0x20, 0xb2, 0xa9, 0xda, 0xda, 0xef, 0xe8,
106 0x00, 0x64, 0x2f, 0x5d, 0x8d, 0xeb, 0x78, 0x02, 0xf7, 0xa5,
107 0x36, 0x77, 0x28, 0xd7, 0x55, 0x8d, 0x14, 0x68, 0xdb, 0xeb,
108 0x24, 0x09, 0xd0, 0x2b, 0x13, 0x1b, 0x92, 0x6e, 0x2e, 0x59,
109 0x54, 0x4a, 0xac, 0x18, 0xcf, 0xc9, 0x09, 0x02, 0x3f, 0x4f,
110 0xa8, 0x3e, 0x94, 0x00, 0x1f, 0xc2, 0xf1, 0x1a, 0x27, 0x47,
111 0x7d, 0x10, 0x84, 0xf5, 0x14, 0xb8, 0x61, 0x62, 0x1a, 0x0c,
112 0x66, 0xab, 0xd2, 0x4c, 0x4b, 0x9f, 0xc9, 0x0f, 0x3c, 0xd8,
113 0x92, 0x0f, 0xf5, 0xff, 0xce, 0xd7, 0x6e, 0x5c, 0x6f, 0xb1,
114 0xf5, 0x7d, 0xd3, 0x56, 0xf9, 0x67, 0x27, 0xa4, 0xa5, 0x48,
115 0x5b, 0x07, 0x93, 0x44, 0x00, 0x4a, 0xf8, 0xff, 0xa4, 0xcb };
117 static byte [] pk_token1 = { 0xce, 0x52, 0x76, 0xd8, 0x68, 0x7e, 0Xc6, 0xdc };
119 static byte [] publicKey2 = {
120 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
121 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
122 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
123 0x01, 0x00, 0x6d, 0xfd, 0xba, 0xb9, 0x9d, 0x43, 0xf1, 0xef,
124 0x33, 0xe2, 0xbd, 0x2d, 0x7c, 0x26, 0xe2, 0x9d, 0x37, 0x4a,
125 0xdf, 0xb5, 0x63, 0x12, 0x90, 0x35, 0x90, 0x24, 0x8a, 0xe7,
126 0x5a, 0xc5, 0xa3, 0x3a, 0x84, 0xee, 0x9b, 0xd1, 0xac, 0x3a,
127 0x59, 0x2b, 0x91, 0x97, 0x83, 0x01, 0x4f, 0x92, 0x01, 0xc6,
128 0x3b, 0x96, 0x20, 0x19, 0xeb, 0xdc, 0x2c, 0x6f, 0x1f, 0xbb,
129 0x04, 0x9b, 0x62, 0x39, 0xc0, 0xff, 0x58, 0x64, 0x17, 0x48,
130 0xc2, 0x5b, 0x94, 0x98, 0x35, 0x50, 0x1f, 0x27, 0xbc, 0xea,
131 0x91, 0x92, 0x3f, 0x5c, 0x33, 0x12, 0x17, 0x65, 0x56, 0x3e,
132 0x40, 0x44, 0x27, 0x1d, 0xef, 0x0e, 0x72, 0xab, 0xd4, 0xf0,
133 0x49, 0xa3, 0x95, 0x1a, 0x61, 0xb4, 0x47, 0x90, 0x20, 0xcc,
134 0x50, 0xa4, 0x4d, 0x8b, 0x8a, 0x58, 0x17, 0x70, 0xa4, 0x53,
135 0xe4, 0xdc, 0x73, 0x5d, 0x8c, 0x4e, 0xb8, 0xd3, 0xa9, 0xbf };
137 static byte [] publicKey3 = {
138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
141 static byte [] pk_token3 = { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 };
147 if (Directory.Exists (tempDir))
148 Directory.Delete (tempDir, true);
153 Directory.CreateDirectory (tempDir);
155 domain = Thread.GetDomain ();
159 public void TearDown ()
162 if (Directory.Exists (tempDir))
163 Directory.Delete (tempDir, true);
166 // This can happen on windows when the directory contains
167 // files opened by the CLR
172 public void Constructor0 ()
174 an = new AssemblyName ();
175 Assert.IsNull (an.CodeBase, "CodeBase");
176 Assert.IsNull (an.CultureInfo, "CultureInfo");
177 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
178 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
179 Assert.AreEqual (String.Empty, an.FullName, "FullName");
180 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
181 Assert.IsNull (an.KeyPair, "KeyPair");
182 Assert.IsNull (an.Name, "Name");
183 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
184 Assert.IsNull (an.Version, "Version");
185 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
186 an.VersionCompatibility, "VersionCompatibility");
187 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
188 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
189 Assert.AreEqual (string.Empty, an.ToString (), "ToString");
193 public void SetPublicKey ()
195 an = new AssemblyName ();
196 Assert.IsNull (an.GetPublicKey (), "#A1");
197 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A2");
198 Assert.IsNull (an.KeyPair, "#A3");
199 Assert.IsNull (an.GetPublicKeyToken (), "#A4");
201 an.SetPublicKey (publicKey1);
203 Assert.AreEqual (publicKey1, an.GetPublicKey (), "#B1");
204 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#B2");
205 Assert.IsNull (an.KeyPair, "#B3");
206 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B4");
207 an.SetPublicKey (keyPair);
208 Assert.AreEqual (keyPair, an.GetPublicKey (), "#B5");
209 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B6");
211 an.SetPublicKey ((byte []) null);
213 Assert.IsNull (an.GetPublicKey (), "#C1");
214 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#C2");
215 Assert.IsNull (an.KeyPair, "#C3");
216 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C4");
218 an.SetPublicKey (publicKey1);
219 an.SetPublicKeyToken (pk_token1);
220 an.SetPublicKey ((byte []) null);
222 Assert.IsNull (an.GetPublicKey (), "#D1");
223 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#D2");
224 Assert.IsNull (an.KeyPair, "#D3");
225 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#D4");
227 an.SetPublicKey ((byte []) null);
228 an.SetPublicKeyToken (pk_token1);
229 an.SetPublicKey ((byte []) null);
231 Assert.IsNull (an.GetPublicKey (), "#E1");
232 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#E2");
233 Assert.IsNull (an.KeyPair, "#E3");
234 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#E4");
236 an = new AssemblyName ();
237 an.SetPublicKey (publicKey1);
238 an.SetPublicKey ((byte []) null);
239 an.SetPublicKeyToken (pk_token1);
240 an.SetPublicKey ((byte []) null);
242 Assert.IsNull (an.GetPublicKey (), "#F1");
243 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#F2");
244 Assert.IsNull (an.KeyPair, "#F3");
245 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#F4");
247 an = new AssemblyName ();
248 an.SetPublicKey (publicKey1);
249 an.SetPublicKey ((byte []) null);
250 an.SetPublicKeyToken (pk_token1);
252 Assert.IsNull (an.GetPublicKey (), "#G1");
253 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G2");
254 Assert.IsNull (an.KeyPair, "#G3");
255 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#G4");
257 an = new AssemblyName ();
258 an.SetPublicKey (new byte [0]);
260 Assert.IsNotNull (an.GetPublicKey (), "#H1");
261 Assert.AreEqual (0, an.GetPublicKey ().Length, "#H2");
262 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#H3");
263 Assert.IsNull (an.KeyPair, "#H4");
264 Assert.IsNotNull (an.GetPublicKeyToken (), "#H5");
265 Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#H6");
267 an = new AssemblyName ();
268 an.SetPublicKey (publicKey1);
269 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I1");
270 an.SetPublicKey (publicKey1);
271 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I2");
273 an = new AssemblyName ();
274 an.SetPublicKey ((byte []) null);
275 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J1");
276 an.SetPublicKey ((byte []) null);
277 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#J2");
278 an.SetPublicKey ((byte []) null);
279 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J3");
280 an.SetPublicKey (publicKey1);
281 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J4");
282 Assert.AreEqual (publicKey1, an.GetPublicKey (), "#J5");
283 an.SetPublicKey (publicKey2);
284 Assert.AreEqual (publicKey2, an.GetPublicKey (), "#J6");
288 public void SetPublicKey_PublicKey_Invalid ()
290 an = new AssemblyName ();
291 an.SetPublicKey (new byte [] { 0x0b, 0x0a });
292 Assert.AreEqual (new byte [] { 0x0b, 0x0a }, an.GetPublicKey (), "#1");
296 public void SetPublicKeyToken ()
298 an = new AssemblyName ();
299 an.SetPublicKeyToken (pk_token1);
301 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
302 Assert.IsNull (an.KeyPair, "#A2");
303 Assert.IsNull (an.GetPublicKey (), "#A3");
304 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A4");
306 an.SetPublicKeyToken ((byte []) null);
308 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
309 Assert.IsNull (an.KeyPair, "#B2");
310 Assert.IsNull (an.GetPublicKey (), "#B3");
311 Assert.IsNull (an.GetPublicKeyToken (), "#B4");
313 an.SetPublicKeyToken (new byte [0]);
315 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#C1");
316 Assert.IsNull (an.KeyPair, "#C2");
317 Assert.IsNull (an.GetPublicKey (), "#C3");
318 Assert.IsNotNull (an.GetPublicKeyToken (), "#C4");
319 Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#C5");
323 public void KeyPair ()
325 an = new AssemblyName ();
327 an.KeyPair = new StrongNameKeyPair (keyPair);
329 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
330 Assert.IsNotNull (an.KeyPair, "#A2");
331 Assert.IsNull (an.GetPublicKey (), "#A3");
332 Assert.IsNull (an.GetPublicKeyToken (), "#A4");
333 Assert.AreEqual ("test", an.FullName, "#A5");
337 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
338 Assert.IsNull (an.KeyPair, "#B2");
339 Assert.IsNull (an.GetPublicKey (), "#B3");
340 Assert.IsNull (an.GetPublicKeyToken (), "#B4");
341 Assert.AreEqual ("test", an.FullName, "#B5");
344 // !!! this assembly MUST NOT use a StrongName !!!
348 Assembly a = Assembly.GetExecutingAssembly ();
351 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
352 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
353 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, an.HashAlgorithm, "HashAlgorithm");
354 Assert.IsNull (an.KeyPair, "KeyPair");
355 Assert.IsNotNull (an.Name, "Name");
356 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA");
357 Assert.AreEqual (new Version (0, 0, 0, 0), an.Version, "Version");
358 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
359 an.VersionCompatibility, "VersionCompatibility");
360 Assert.AreEqual (new byte [0], an.GetPublicKey (), "GetPublicKey");
361 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
365 public void Flags_Corlib ()
367 an = typeof (int).Assembly.GetName ();
368 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
372 public void Flags_Self ()
374 Assembly a = Assembly.GetExecutingAssembly ();
376 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
380 public void FullName_Corlib ()
382 an = typeof(int).Assembly.GetName ();
383 Assert.IsNotNull (an.FullName, "#1");
385 string AssemblyCorlib;
387 AssemblyCorlib = "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e";
389 AssemblyCorlib = "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
391 AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
393 Assert.AreEqual (AssemblyCorlib, an.FullName, "#2");
397 public void FullName_Self ()
399 Assembly a = Assembly.GetExecutingAssembly ();
402 Assert.IsNotNull (an.FullName, "#1");
403 Assert.IsTrue (an.FullName.IndexOf ("Version=0.0.0.0") != -1, "#2");
404 Assert.IsTrue (an.FullName.IndexOf ("Culture=neutral") != -1, "#3");
405 Assert.IsTrue (an.FullName.IndexOf ("PublicKeyToken=null") != -1, "#4");
409 public void FullName_Flags ()
411 const string assemblyName = "TestAssembly";
413 // tests for AssemblyName with only name
414 an = new AssemblyName ();
415 an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer |
416 AssemblyNameFlags.EnableJITcompileTracking |
417 AssemblyNameFlags.PublicKey |
418 AssemblyNameFlags.Retargetable;
419 an.Name = assemblyName;
420 Assert.AreEqual (assemblyName + ", Retargetable=Yes", an.FullName, "#1");
421 an.Flags = AssemblyNameFlags.None;
422 Assert.AreEqual (assemblyName, an.FullName, "#2");
426 public void FullName_Name ()
428 const string assemblyName = "TestAssembly";
430 // tests for AssemblyName with only name
431 an = new AssemblyName ();
432 an.Name = assemblyName;
433 Assert.IsNotNull (an.FullName, "FullName2#1");
434 Assert.AreEqual (an.Name, an.FullName, "FullName2#2");
435 Assert.AreEqual (-1, an.FullName.IndexOf ("Culture="), "FullName2#3");
436 Assert.AreEqual (-1, an.FullName.IndexOf ("PublicKeyToken="), "FullName2#4");
440 public void FullName_Version ()
442 const string assemblyName = "TestAssembly";
443 const string assemblyVersion = "1.2";
445 // tests for AssemblyName with name and version
446 an = new AssemblyName ();
447 an.Name = assemblyName;
448 an.Version = new Version (assemblyVersion);
449 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion, an.FullName, "FullName3#1");
453 public void FullName_Culture ()
455 const string assemblyName = "TestAssembly";
457 // tests for AssemblyName with name and neutral culture
458 an = new AssemblyName ();
459 an.Name = assemblyName;
460 an.CultureInfo = CultureInfo.InvariantCulture;
461 Assert.AreEqual (assemblyName + ", Culture=neutral", an.FullName, "#1");
462 an.CultureInfo = new CultureInfo ("nl-BE");
463 Assert.AreEqual (assemblyName + ", Culture=nl-BE", an.FullName, "#2");
465 Assert.AreEqual (string.Empty, an.FullName, "#3");
469 public void FullName_PublicKey ()
471 const string assemblyName = "TestAssembly";
473 // tests for AssemblyName with name and public key
474 an = new AssemblyName ();
475 an.Name = assemblyName;
476 an.SetPublicKey (publicKey1);
477 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
478 an.SetPublicKey ((byte []) null);
479 Assert.AreEqual (assemblyName, an.FullName, "#A2");
480 an.SetPublicKey (new byte [0]);
481 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
483 Assert.AreEqual (string.Empty, an.FullName, "#A4");
485 an = new AssemblyName ();
486 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
487 an.Name = assemblyName;
488 an.SetPublicKey (publicKey1);
489 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
490 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
491 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
492 an.SetPublicKeyToken ((byte []) null);
493 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B3");
495 Assert.AreEqual (string.Empty, an.FullName, "#B4");
497 an = new AssemblyName ();
498 an.HashAlgorithm = AssemblyHashAlgorithm.None;
499 an.Name = assemblyName;
500 an.SetPublicKey (publicKey1);
501 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
502 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
503 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#C2");
504 an.SetPublicKeyToken ((byte []) null);
505 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C3");
507 Assert.AreEqual (string.Empty, an.FullName, "#C4");
509 an = new AssemblyName ();
510 an.Name = assemblyName;
511 an.SetPublicKey (new byte [0]);
512 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
514 Assert.AreEqual (string.Empty, an.FullName, "#D2");
515 an.SetPublicKey (publicKey3);
516 Assert.AreEqual (string.Empty, an.FullName, "#D3");
517 an.Name = assemblyName;
518 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "#D4");
522 public void FullName_PublicKey_KeyPair ()
524 const string assemblyName = "TestAssembly";
526 // tests for AssemblyName with name and public key
527 an = new AssemblyName ();
528 an.Name = assemblyName;
529 an.SetPublicKey (keyPair);
531 Assert.Fail ("#A1: " + an.FullName);
532 } catch (SecurityException ex) {
533 // Invalid assembly public key
534 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#A2");
535 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#A3");
536 Assert.IsNull (ex.InnerException, "#A4");
537 Assert.IsNotNull (ex.Message, "#A5");
540 an.SetPublicKeyToken (new byte [0]);
541 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#B1");
543 an.SetPublicKeyToken ((byte []) null);
545 Assert.Fail ("#C1: " + an.FullName);
546 } catch (SecurityException ex) {
547 // Invalid assembly public key
548 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#C2");
549 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#C3");
550 Assert.IsNull (ex.InnerException, "#C4");
551 Assert.IsNotNull (ex.Message, "#C5");
554 an.SetPublicKeyToken (new byte [0]);
555 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
556 an.SetPublicKey (publicKey1);
557 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
558 an.SetPublicKeyToken ((byte []) null);
559 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
563 public void FullName_PublicKeyToken ()
565 const string assemblyName = "TestAssembly";
567 an = new AssemblyName ();
568 an.Name = assemblyName;
569 an.SetPublicKeyToken (pk_token1);
570 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
571 an.SetPublicKeyToken ((byte []) null);
572 Assert.AreEqual (assemblyName, an.FullName, "#A2");
573 an.SetPublicKeyToken (new byte [0]);
574 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
575 an.SetPublicKeyToken (pk_token1);
576 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A4");
578 Assert.AreEqual (string.Empty, an.FullName, "#A5");
580 an = new AssemblyName ();
581 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
582 an.Name = assemblyName;
583 an.SetPublicKeyToken (pk_token1);
584 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
585 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
586 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
587 an.SetPublicKeyToken ((byte []) null);
588 Assert.AreEqual (assemblyName, an.FullName, "#B3");
590 Assert.AreEqual (string.Empty, an.FullName, "#B4");
592 an = new AssemblyName ();
593 an.Name = assemblyName;
594 an.SetPublicKey (publicKey1);
595 an.SetPublicKeyToken (pk_token1);
596 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
597 an.SetPublicKey ((byte []) null);
598 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C2");
599 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C3");
600 an.SetPublicKey (new byte [0]);
601 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C4");
602 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C5");
604 an = new AssemblyName ();
605 an.Name = assemblyName;
606 an.SetPublicKey (publicKey1);
607 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D1");
608 an.SetPublicKey (new byte [0]);
609 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
610 an.SetPublicKeyToken (pk_token1);
611 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
612 an.SetPublicKey ((byte []) null);
613 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D4");
617 public void FullName_VersionCulture ()
619 const string assemblyName = "TestAssembly";
620 const string assemblyVersion = "1.2";
622 // tests for AssemblyName with name, version and neutral culture
623 an = new AssemblyName ();
624 an.Name = assemblyName;
625 an.Version = new Version (assemblyVersion);
626 an.CultureInfo = CultureInfo.InvariantCulture;
627 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
628 + ", Culture=neutral", an.FullName, "#1");
629 an.CultureInfo = new CultureInfo ("en-US");
630 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
631 + ", Culture=en-US", an.FullName, "#2");
632 an.CultureInfo = new CultureInfo ("en");
633 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
634 + ", Culture=en", an.FullName, "#3");
638 public void FullName_VersionPublicKey ()
640 const string assemblyName = "TestAssembly";
641 const string assemblyVersion = "1.2";
643 // tests for AssemblyName with name, version and public key
644 an = new AssemblyName ();
645 an.Name = assemblyName;
646 an.Version = new Version (assemblyVersion);
647 an.SetPublicKey (publicKey1);
648 an.SetPublicKeyToken (pk_token1);
649 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
650 + ", PublicKeyToken=" + GetTokenString (pk_token1),
655 public void FullName_CulturePublicKey ()
657 const string assemblyName = "TestAssembly";
659 // tests for AssemblyName with name, culture and public key
660 an = new AssemblyName ();
661 an.Name = assemblyName;
662 an.CultureInfo = CultureInfo.InvariantCulture;
663 an.SetPublicKey (publicKey1);
664 an.SetPublicKeyToken (pk_token1);
665 Assert.AreEqual (assemblyName + ", Culture=neutral"
666 + ", PublicKeyToken=" + GetTokenString (pk_token1),
671 public void GetPublicKeyToken ()
673 const string assemblyName = "TestAssembly";
675 an = new AssemblyName ();
676 an.SetPublicKey (publicKey1);
677 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A1");
678 an.SetPublicKey (publicKey2);
679 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A2");
680 an.SetPublicKeyToken (new byte [] { 0x0a });
681 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A3");
682 an.SetPublicKey (publicKey1);
683 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A4");
684 an.SetPublicKeyToken (new byte [0]);
685 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A5");
686 an.Name = assemblyName;
687 an.SetPublicKey (publicKey2);
688 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A6");
689 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A7");
691 an = new AssemblyName ();
692 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
693 an.SetPublicKey (publicKey1);
694 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B1");
696 an = new AssemblyName ();
697 an.HashAlgorithm = AssemblyHashAlgorithm.None;
698 an.SetPublicKey (publicKey1);
699 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C1");
701 an = new AssemblyName ();
702 an.SetPublicKeyToken (new byte [0]);
703 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#D1");
704 an.SetPublicKeyToken (new byte [] { 0x0b, 0xff });
705 Assert.AreEqual (new byte [] { 0x0b, 0xff }, an.GetPublicKeyToken (), "#D2");
706 an.SetPublicKeyToken ((byte []) null);
707 Assert.IsNull (an.GetPublicKeyToken (), "#D3");
709 an = new AssemblyName ();
710 an.SetPublicKey (keyPair);
712 an.GetPublicKeyToken ();
714 } catch (SecurityException ex) {
715 // Invalid assembly public key
716 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#E2");
717 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#E3");
718 Assert.IsNull (ex.InnerException, "#E4");
719 Assert.IsNotNull (ex.Message, "#E5");
724 public void GetPublicKeyToken_Corlib ()
726 an = typeof (int).Assembly.GetName ();
727 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
728 Assert.IsTrue (an.GetPublicKeyToken ().Length > 0, "#2");
732 public void GetPublicGetToken_Ecma ()
734 const string assemblyName = "TestAssembly";
736 an = new AssemblyName ();
737 an.Name = assemblyName;
738 an.SetPublicKey (publicKey3);
739 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
740 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "#2");
744 public void GetPublicKeyToken_Self ()
746 Assembly a = Assembly.GetExecutingAssembly ();
748 Assert.AreEqual (new byte [0], an.GetPublicKeyToken ());
751 static int nameIndex = 0;
753 private AssemblyName GenAssemblyName ()
755 AssemblyName assemblyName = new AssemblyName();
756 assemblyName.Name = "MonoTests.System.Reflection.AssemblyNameTest" + (nameIndex ++);
761 private Assembly GenerateAssembly (AssemblyName name)
763 AssemblyBuilder ab = domain.DefineDynamicAssembly (
765 AssemblyBuilderAccess.RunAndSave,
767 ab.DefineDynamicModule ("def_module");
768 ab.Save (name.Name + ".dll");
770 return Assembly.LoadFrom (Path.Combine (tempDir, name.Name + ".dll"));
773 private AssemblyBuilder GenerateDynamicAssembly (AssemblyName name)
775 AssemblyBuilder ab = domain.DefineDynamicAssembly (
777 AssemblyBuilderAccess.Run);
783 public void TestCultureInfo ()
789 name = GenAssemblyName ();
790 name.CultureInfo = CultureInfo.CreateSpecificCulture ("ar-DZ");
791 a = GenerateAssembly (name);
792 culture = a.GetName ().CultureInfo;
793 Assert.IsFalse (culture.IsNeutralCulture, "#A1");
794 Assert.IsFalse (culture.IsReadOnly, "#A2");
795 Assert.AreEqual (5121, culture.LCID, "#A3");
796 Assert.AreEqual ("ar-DZ", culture.Name, "#A4");
797 Assert.IsTrue (culture.UseUserOverride, "#A5");
799 name = GenAssemblyName ();
800 name.CultureInfo = new CultureInfo ("en");
801 a = GenerateAssembly (name);
802 culture = a.GetName ().CultureInfo;
803 Assert.IsTrue (culture.IsNeutralCulture, "#B1");
804 Assert.IsFalse (culture.IsReadOnly, "#B2");
805 Assert.AreEqual (9, culture.LCID, "#B3");
806 Assert.AreEqual ("en", culture.Name, "#B4");
807 Assert.IsTrue (culture.UseUserOverride, "#B5");
809 name = GenAssemblyName ();
810 name.CultureInfo = CultureInfo.InvariantCulture;
811 a = GenerateAssembly (name);
812 culture = a.GetName ().CultureInfo;
813 Assert.IsFalse (culture.IsNeutralCulture, "#C1");
814 Assert.IsFalse (culture.IsReadOnly, "#C2");
815 Assert.AreEqual (127, culture.LCID, "#C3");
816 Assert.AreEqual (string.Empty, culture.Name, "#C4");
817 Assert.IsFalse (culture.UseUserOverride, "#C5");
819 a = typeof (int).Assembly;
821 culture = name.CultureInfo;
822 Assert.IsFalse (culture.IsNeutralCulture, "#D1");
823 Assert.IsFalse (culture.IsReadOnly, "#D2");
824 Assert.AreEqual (127, culture.LCID, "#D3");
825 Assert.AreEqual (string.Empty, culture.Name, "#D4");
826 Assert.IsFalse (culture.UseUserOverride, "#D5");
828 a = Assembly.GetExecutingAssembly ();
830 culture = name.CultureInfo;
831 Assert.IsFalse (culture.IsNeutralCulture, "#E1");
832 Assert.IsFalse (culture.IsReadOnly, "#E2");
833 Assert.AreEqual (127, culture.LCID, "#E3");
834 Assert.AreEqual (string.Empty, culture.Name, "#E4");
835 Assert.IsFalse (culture.UseUserOverride, "#E5");
837 AssemblyName [] names = a.GetReferencedAssemblies ();
838 foreach (AssemblyName an in names) {
839 culture = an.CultureInfo;
840 Assert.IsFalse (culture.IsNeutralCulture, "#F1:" + an.Name);
841 Assert.IsFalse (culture.IsReadOnly, "#F2:" + an.Name);
842 Assert.AreEqual (127, culture.LCID, "#F3:" + an.Name);
843 Assert.AreEqual (string.Empty, culture.Name, "#F4:" + an.Name);
844 Assert.IsFalse (culture.UseUserOverride, "#F5:" + an.Name);
849 public void Version ()
851 AssemblyName name = GenAssemblyName ();
852 name.Version = new Version (1, 2, 3, 4);
854 Assembly a = GenerateAssembly (name);
855 Assert.AreEqual ("1.2.3.4", a.GetName ().Version.ToString (), "1.2.3.4 normal");
857 name = GenAssemblyName ();
858 name.Version = new Version (1, 2, 3);
860 a = GenerateAssembly (name);
861 Assert.AreEqual ("1.2.3.0", a.GetName ().Version.ToString (), "1.2.3.0 normal");
863 name = GenAssemblyName ();
864 name.Version = new Version (1, 2);
866 a = GenerateAssembly (name);
867 Assert.AreEqual ("1.2.0.0", a.GetName ().Version.ToString (), "1.2.0.0 normal");
871 public void Version_Dynamic ()
873 AssemblyName name = GenAssemblyName ();
874 name.Version = new Version (1, 2, 3, 4);
876 AssemblyBuilder ab = GenerateDynamicAssembly (name);
877 Assert.AreEqual ("1.2.3.4", ab.GetName ().Version.ToString (), "1.2.3.4 dynamic");
879 name = GenAssemblyName ();
880 name.Version = new Version (1, 2, 3);
882 ab = GenerateDynamicAssembly (name);
883 Assert.AreEqual ("1.2.3.0", ab.GetName ().Version.ToString (), "1.2.3.0 dynamic");
885 name = GenAssemblyName ();
886 name.Version = new Version (1, 2);
888 ab = GenerateDynamicAssembly (name);
889 Assert.AreEqual ("1.2.0.0", ab.GetName ().Version.ToString (), "1.2.0.0 dynamic");
894 public void HashAlgorithm ()
896 Assert.AreEqual (AssemblyHashAlgorithm.SHA1,
897 typeof (int).Assembly.GetName ().HashAlgorithm);
901 public void Serialization ()
903 an = new AssemblyName ();
904 an.CodeBase = "http://www.test.com/test.dll";
905 an.CultureInfo = CultureInfo.InvariantCulture;
906 an.Flags = AssemblyNameFlags.PublicKey;
907 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
908 an.KeyPair = new StrongNameKeyPair (publicKey1);
909 an.Name = "TestAssembly";
910 an.Version = new Version (1, 5);
911 an.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
913 MemoryStream ms = new MemoryStream ();
914 BinaryFormatter bf = new BinaryFormatter ();
915 bf.Serialize (ms, an);
917 // reset position of memorystream
920 // deserialze assembly name
921 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
923 // close the memorystream
926 // compare orginal and deserialized assembly name
927 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
928 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
929 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
930 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
931 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
932 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
933 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
934 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
935 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
936 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
937 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
938 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
942 public void Serialization_WithoutStrongName ()
944 an = new AssemblyName ();
945 an.CodeBase = "http://www.test.com/test.dll";
946 an.CultureInfo = CultureInfo.InvariantCulture;
947 an.Flags = AssemblyNameFlags.None;
948 an.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
950 an.Name = "TestAssembly2";
951 an.Version = new Version (1, 5, 0, 0);
952 an.VersionCompatibility = AssemblyVersionCompatibility.SameMachine;
954 MemoryStream ms = new MemoryStream ();
955 BinaryFormatter bf = new BinaryFormatter ();
956 bf.Serialize (ms, an);
958 // reset position of memorystream
961 // deserialze assembly name
962 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
964 // close the memorystream
967 // compare orginal and deserialized assembly name
968 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
969 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
970 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
971 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
972 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
973 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
974 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
975 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
976 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
977 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
978 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
979 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
983 public void GetObjectData_Info_Null ()
985 an = new AssemblyName ();
987 an.GetObjectData (null, new StreamingContext (StreamingContextStates.All));
989 } catch (ArgumentNullException ex) {
990 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
991 Assert.IsNull (ex.InnerException, "#3");
992 Assert.IsNotNull (ex.Message, "#4");
993 Assert.IsNotNull (ex.ParamName, "#5");
994 Assert.AreEqual ("info", ex.ParamName, "#6");
999 public void Clone_Corlib ()
1001 an = typeof (int).Assembly.GetName ();
1002 AssemblyName clone = (AssemblyName) an.Clone ();
1004 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1005 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1006 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1007 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1008 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1009 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1010 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1011 Assert.AreEqual (an.Name, clone.Name, "Name");
1012 //Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1013 Assert.AreEqual (an.Version, clone.Version, "Version");
1014 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1015 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1016 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1017 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1021 public void Clone_Empty ()
1023 an = new AssemblyName ();
1024 AssemblyName clone = (AssemblyName) an.Clone ();
1026 Assert.IsNull (clone.CodeBase, "CodeBase");
1027 Assert.IsNull (clone.CultureInfo, "CultureInfo");
1028 Assert.IsNull (clone.EscapedCodeBase, "EscapedCodeBase");
1029 Assert.AreEqual (AssemblyNameFlags.None, clone.Flags, "Flags");
1030 Assert.AreEqual (String.Empty, clone.FullName, "FullName");
1031 Assert.AreEqual (AssemblyHashAlgorithm.None, clone.HashAlgorithm, "HashAlgorithm");
1032 Assert.IsNull (clone.KeyPair, "KeyPair");
1033 Assert.IsNull (clone.Name, "Name");
1034 Assert.AreEqual (ProcessorArchitecture.None, clone.ProcessorArchitecture, "PA");
1035 Assert.IsNull (clone.Version, "Version");
1036 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1037 clone.VersionCompatibility, "VersionCompatibility");
1041 public void Clone_Self ()
1043 an = Assembly.GetExecutingAssembly ().GetName ();
1044 AssemblyName clone = (AssemblyName) an.Clone ();
1046 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1047 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1048 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1049 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1050 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1051 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1052 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1053 Assert.AreEqual (an.Name, clone.Name, "Name");
1054 Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1055 Assert.AreEqual (an.Version, clone.Version, "Version");
1056 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1057 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1058 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1059 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1063 [ExpectedException (typeof (FileNotFoundException))]
1064 public void GetAssemblyName_AssemblyFile_DoesNotExist ()
1066 AssemblyName.GetAssemblyName (Path.Combine (tempDir, "doesnotexist.dll"));
1070 [Category ("NotWorking")]
1071 public void GetAssemblyName_AssemblyFile_ReadLock ()
1073 string file = Path.Combine (tempDir, "loadfailure.dll");
1074 using (FileStream fs = File.Open (file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None)) {
1076 AssemblyName.GetAssemblyName (file);
1078 } catch (FileLoadException ex) {
1079 // Could not load file or assembly '...' or one
1080 // of its dependencies. The process cannot access
1081 // the file because it is being used by another
1083 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1084 Assert.IsNotNull (ex.FileName, "#3");
1085 Assert.AreEqual (file, ex.FileName, "#4");
1086 Assert.IsNull (ex.InnerException, "#5");
1087 Assert.IsNotNull (ex.Message, "#6");
1094 public void GetAssemblyName_AssemblyFile_BadImage ()
1096 string file = Path.Combine (tempDir, "badimage.dll");
1097 using (StreamWriter sw = File.CreateText (file)) {
1098 sw.WriteLine ("somegarbage");
1101 AssemblyName.GetAssemblyName (file);
1103 } catch (BadImageFormatException ex) {
1104 Assert.AreEqual (typeof (BadImageFormatException), ex.GetType (), "#2");
1105 Assert.IsNotNull (ex.FileName, "#3");
1106 Assert.AreEqual (file, ex.FileName, "#4");
1107 Assert.IsNull (ex.InnerException, "#5");
1108 Assert.IsNotNull (ex.Message, "#6");
1115 [Category ("AndroidNotWorking")] // Accessing assemblies by asm.Location is not supported
1116 public void GetAssemblyName_CodeBase ()
1118 Assembly execAssembly = Assembly.GetExecutingAssembly ();
1120 AssemblyName aname = AssemblyName.GetAssemblyName (execAssembly.Location);
1121 Assert.IsNotNull (aname.CodeBase, "#1");
1122 Assert.AreEqual (execAssembly.CodeBase, aname.CodeBase, "#2");
1127 private string GetTokenString (byte[] value)
1129 string tokenString = "";
1130 for (int i = 0; i < value.Length; i++) {
1131 tokenString += value[i].ToString ("x2");
1136 [Test] // ctor (String)
1137 public void Constructor1_Name ()
1139 const string assemblyName = "TestAssembly";
1141 an = new AssemblyName (assemblyName);
1142 Assert.IsNull (an.CodeBase, "CodeBase");
1143 Assert.IsNull (an.CultureInfo, "CultureInfo");
1144 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1145 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1146 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1147 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1148 Assert.IsNull (an.KeyPair, "KeyPair");
1149 Assert.AreEqual (assemblyName, an.Name, "Name");
1150 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1151 Assert.IsNull (an.Version, "Version");
1152 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1153 an.VersionCompatibility, "VersionCompatibility");
1154 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1155 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1156 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1158 Assert.IsNull (an.CultureName, "CultureName");
1159 Assert.AreEqual (AssemblyContentType.Default, an.ContentType, "ContentType");
1163 [Test] // ctor (String)
1164 public void Constructor1_Full ()
1166 const string assemblyName = "TestAssembly";
1167 const string assemblyCulture = "neutral";
1168 const string assemblyVersion = "1.2.3.4";
1170 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion +
1171 ", Culture=" + assemblyCulture + ", PublicKeyToken=" + GetTokenString (pk_token1) + ",ProcessorArchitecture=X86");
1172 Assert.IsNull (an.CodeBase, "CodeBase");
1173 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
1174 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1175 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1176 Assert.AreEqual ("TestAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=" +
1177 GetTokenString (pk_token1), an.FullName, "FullName");
1178 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1179 Assert.IsNull (an.KeyPair, "KeyPair");
1180 Assert.AreEqual (assemblyName, an.Name, "Name");
1181 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1182 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1183 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1184 an.VersionCompatibility, "VersionCompatibility");
1185 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1186 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1187 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1190 [Test] // ctor (String)
1191 public void Constructor1_AssemblyName_Empty ()
1194 new AssemblyName (string.Empty);
1196 } catch (ArgumentException ex) {
1197 // String cannot have zero length
1198 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1199 Assert.IsNull (ex.InnerException, "#3");
1200 Assert.IsNotNull (ex.Message, "#4");
1201 Assert.IsNull (ex.ParamName, "#5");
1205 [Test] // ctor (String)
1206 public void Constructor1_AssemblyName_Invalid ()
1208 const string assemblyName = "TestAssembly";
1211 new AssemblyName (assemblyName + ", =1.2.4.5");
1212 Assert.Fail ("#A1");
1213 } catch (FileLoadException ex) {
1214 // The given assembly name or codebase was invalid
1215 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1216 Assert.IsNull (ex.FileName, "#3");
1217 Assert.IsNull (ex.InnerException, "#3");
1218 Assert.IsNotNull (ex.Message, "#4");
1222 new AssemblyName (assemblyName + ", OtherAttribute");
1223 Assert.Fail ("#B1");
1224 } catch (FileLoadException ex) {
1225 // The given assembly name or codebase was invalid
1226 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1227 Assert.IsNull (ex.FileName, "#3");
1228 Assert.IsNull (ex.InnerException, "#3");
1229 Assert.IsNotNull (ex.Message, "#4");
1233 [Test] // ctor (String)
1234 public void Constructor1_AssemblyName_Null ()
1237 new AssemblyName (null);
1239 } catch (ArgumentNullException ex) {
1240 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1241 Assert.IsNull (ex.InnerException, "#3");
1242 Assert.IsNotNull (ex.Message, "#4");
1243 Assert.IsNotNull (ex.ParamName, "#5");
1244 Assert.AreEqual ("assemblyName", ex.ParamName, "#6");
1248 [Test] // ctor (String)
1249 public void Constructor1_Culture ()
1251 const string assemblyName = "TestAssembly";
1252 const string assemblyCulture = "en-US";
1254 an = new AssemblyName (assemblyName + ", Culture=" + assemblyCulture);
1255 Assert.IsNull (an.CodeBase, "CodeBase");
1256 Assert.AreEqual (new CultureInfo (assemblyCulture), an.CultureInfo, "CultureInfo");
1257 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1258 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1259 Assert.AreEqual ("TestAssembly, Culture=en-US", an.FullName, "FullName");
1260 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1261 Assert.IsNull (an.KeyPair, "KeyPair");
1262 Assert.AreEqual (assemblyName, an.Name, "Name");
1263 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1264 Assert.IsNull (an.Version, "Version");
1265 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1266 an.VersionCompatibility, "VersionCompatibility");
1267 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1268 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1269 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1272 [Test] // ctor (String)
1273 public void Constructor1_Culture_Incomplete ()
1275 const string assemblyName = "TestAssembly";
1278 new AssemblyName (assemblyName + ", Culture=");
1280 } catch (FileLoadException ex) {
1281 // The given assembly name or codebase was invalid
1282 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1283 Assert.IsNull (ex.FileName, "#3");
1284 Assert.IsNull (ex.InnerException, "#3");
1285 Assert.IsNotNull (ex.Message, "#4");
1289 [Test] // ctor (String)
1290 public void Constructor1_Culture_NotSupported ()
1292 const string assemblyName = "TestAssembly";
1295 new AssemblyName (assemblyName + ", Culture=aa-AA");
1298 } catch (CultureNotFoundException ex) {
1301 } catch (ArgumentException ex) {
1302 // Culture name 'aa-aa' is not supported
1303 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1304 Assert.IsNull (ex.InnerException, "#3");
1305 Assert.IsNotNull (ex.Message, "#4");
1306 Assert.IsNotNull (ex.ParamName, "#5");
1307 Assert.AreEqual ("name", ex.ParamName, "#6");
1312 [Test] // ctor (String)
1313 public void Constructor1_ProcessorArchitecture ()
1315 const string assemblyName = "TestAssembly";
1317 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=X86");
1318 Assert.IsNull (an.CodeBase, "CodeBase");
1319 Assert.IsNull (an.CultureInfo, "CultureInfo");
1320 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1321 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1322 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1323 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1324 Assert.IsNull (an.KeyPair, "KeyPair");
1325 Assert.AreEqual (assemblyName, an.Name, "Name");
1326 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1327 Assert.IsNull (an.Version, "Version");
1328 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1329 an.VersionCompatibility, "VersionCompatibility");
1330 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1331 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1332 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1334 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=mSiL");
1335 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA: MSIL");
1337 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=AmD64");
1338 Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "PA: Amd64");
1340 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=iA64");
1341 Assert.AreEqual (ProcessorArchitecture.IA64, an.ProcessorArchitecture, "PA: IA64");
1344 [Test] // ctor (String)
1345 public void Constructor1_ProcessorArchitecture_Incomplete ()
1347 const string assemblyName = "TestAssembly";
1349 new AssemblyName (assemblyName + ", ProcessorArchitecture=");
1351 } catch (FileLoadException ex) {
1352 // The given assembly name or codebase was invalid
1353 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1354 Assert.IsNull (ex.FileName, "#3");
1355 Assert.IsNull (ex.InnerException, "#3");
1356 Assert.IsNotNull (ex.Message, "#4");
1360 [Test] // ctor (String)
1361 public void Constructor1_ProcessorArchitecture_Invalid ()
1363 const string assemblyName = "TestAssembly";
1365 new AssemblyName (assemblyName + ", ProcessorArchitecture=XXX");
1366 Assert.Fail ("#A1");
1367 } catch (FileLoadException ex) {
1368 // The given assembly name or codebase was invalid
1369 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1370 Assert.IsNull (ex.FileName, "#A3");
1371 Assert.IsNull (ex.InnerException, "#A4");
1372 Assert.IsNotNull (ex.Message, "#A5");
1376 new AssemblyName (assemblyName + ", ProcessorArchitecture=None");
1377 Assert.Fail ("#B1");
1378 } catch (FileLoadException ex) {
1379 // The given assembly name or codebase was invalid
1380 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1381 Assert.IsNull (ex.FileName, "#B3");
1382 Assert.IsNull (ex.InnerException, "#B4");
1383 Assert.IsNotNull (ex.Message, "#B5");
1387 [Test] // ctor (String)
1388 [Category ("NotDotNet")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1389 public void Constructor1_PublicKey_Mono ()
1391 const string assemblyName = "TestAssembly";
1393 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1394 Assert.IsNull (an.CodeBase, "CodeBase");
1395 Assert.IsNull (an.CultureInfo, "CultureInfo");
1396 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1397 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
1398 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1399 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1400 Assert.IsNull (an.KeyPair, "KeyPair");
1401 Assert.AreEqual (assemblyName, an.Name, "Name");
1402 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1403 Assert.IsNull (an.Version, "Version");
1404 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1405 an.VersionCompatibility, "VersionCompatibility");
1406 Assert.AreEqual (publicKey1, an.GetPublicKey (), "GetPublicKey");
1407 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1408 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1412 [Category ("NotWorking")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1413 public void Constructor1_PublicKey_MS ()
1415 const string assemblyName = "TestAssembly";
1417 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1418 Assert.IsNull (an.CodeBase, "CodeBase");
1419 Assert.IsNull (an.CultureInfo, "CultureInfo");
1420 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1421 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1422 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1423 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1424 Assert.IsNull (an.KeyPair, "KeyPair");
1425 Assert.AreEqual (assemblyName, an.Name, "Name");
1426 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1427 Assert.IsNull (an.Version, "Version");
1428 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1429 an.VersionCompatibility, "VersionCompatibility");
1430 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1431 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1432 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1435 [Test] // ctor (String)
1436 [Category ("NotWorking")] // bug #351725
1437 public void Constructor1_PublicKey_Ecma ()
1439 const string assemblyName = "TestAssembly";
1441 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey3));
1442 Assert.IsNull (an.CodeBase, "CodeBase");
1443 Assert.IsNull (an.CultureInfo, "CultureInfo");
1444 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1445 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1446 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "FullName");
1447 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1448 Assert.IsNull (an.KeyPair, "KeyPair");
1449 Assert.AreEqual (assemblyName, an.Name, "Name");
1450 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1451 Assert.IsNull (an.Version, "Version");
1452 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1453 an.VersionCompatibility, "VersionCompatibility");
1454 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1455 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "GetPublicKeyToken");
1456 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1459 [Test] // ctor (String)
1460 public void Constructor1_PublicKey_Incomplete ()
1462 const string assemblyName = "TestAssembly";
1465 new AssemblyName (assemblyName + ", PublicKey=");
1467 } catch (FileLoadException ex) {
1468 // The given assembly name or codebase was invalid
1469 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1470 Assert.IsNull (ex.FileName, "#3");
1471 Assert.IsNull (ex.InnerException, "#3");
1472 Assert.IsNotNull (ex.Message, "#4");
1476 [Test] // ctor (String)
1477 public void Constructor1_PublicKey_Invalid ()
1479 const string assemblyName = "TestAssembly";
1482 new AssemblyName (assemblyName + ", PublicKey=0024000004800000940000000602000000240000525341310004000011000000e39d99616f48cf7d6d59f345e485e713e89b8b1265a31b1a393e9894ee3fbddaf382dcaf4083dc31ee7a40a2a25c69c6d019fba9f37ec17fd680e4f6fe3b5305f71ae9e494e3501d92508c2e98ca1e22991a217aa8ce259c9882ffdfff4fbc6fa5e6660a8ff951cd94ed011e5633651b64e8f4522519b6ec84921ee22e4840e");
1483 Assert.Fail ("#A1");
1484 } catch (FileLoadException ex) {
1485 // The given assembly name or codebase was invalid
1486 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1487 Assert.IsNull (ex.FileName, "#A3");
1488 Assert.IsNull (ex.InnerException, "#A4");
1489 Assert.IsNotNull (ex.Message, "#A5");
1493 new AssemblyName (assemblyName + ", PublicKey=null");
1494 Assert.Fail ("#B1");
1495 } catch (FileLoadException ex) {
1496 // The given assembly name or codebase was invalid
1497 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1498 Assert.IsNull (ex.FileName, "#B3");
1499 Assert.IsNull (ex.InnerException, "#B4");
1500 Assert.IsNotNull (ex.Message, "#B5");
1504 [Test] // ctor (String)
1505 [Category ("NotWorking")] // bug #351756
1506 public void Constructor1_PublicKey_KeyPair ()
1508 const string assemblyName = "TestAssembly";
1511 new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (keyPair));
1513 } catch (SecurityException ex) {
1514 // Invalid assembly public key
1515 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#2");
1516 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#3");
1517 Assert.IsNull (ex.InnerException, "#4");
1518 Assert.IsNotNull (ex.Message, "#5");
1522 [Test] // ctor (String)
1523 public void Constructor1_PublicKeyToken ()
1525 const string assemblyName = "TestAssembly";
1527 an = new AssemblyName (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1));
1528 Assert.IsNull (an.CodeBase, "#A:CodeBase");
1529 Assert.IsNull (an.CultureInfo, "#A:CultureInfo");
1530 Assert.IsNull (an.EscapedCodeBase, "#A:EscapedCodeBase");
1531 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A:Flags");
1532 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A:FullName");
1533 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#A:HashAlgorithm");
1534 Assert.IsNull (an.KeyPair, "#A:KeyPair");
1535 Assert.AreEqual (assemblyName, an.Name, "#A:Name");
1536 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#A:PA");
1537 Assert.IsNull (an.Version, "#A:Version");
1538 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1539 an.VersionCompatibility, "#A:VersionCompatibility");
1540 Assert.IsNull (an.GetPublicKey (), "#A:GetPublicKey");
1541 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A:GetPublicKeyToken");
1542 Assert.AreEqual (an.FullName, an.ToString (), "#A:ToString");
1544 an = new AssemblyName (assemblyName + ", PublicKeyToken=null");
1545 Assert.IsNull (an.CodeBase, "#B:CodeBase");
1546 Assert.IsNull (an.CultureInfo, "#B:CultureInfo");
1547 Assert.IsNull (an.EscapedCodeBase, "#B:EscapedCodeBase");
1548 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B:Flags");
1549 //Assert.AreEqual ("TestAssembly, PublicKeyToken=null", an.FullName, "#B:FullName");
1550 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#B:HashAlgorithm");
1551 Assert.IsNull (an.KeyPair, "#B:KeyPair");
1552 Assert.AreEqual (assemblyName, an.Name, "#B:Name");
1553 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#B:PA");
1554 Assert.IsNull (an.Version, "#B:Version");
1555 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1556 an.VersionCompatibility, "#B:VersionCompatibility");
1557 Assert.IsNull (an.GetPublicKey (), "#B:GetPublicKey");
1558 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#B:GetPublicKeyToken");
1559 Assert.AreEqual (an.FullName, an.ToString (), "#B:ToString");
1562 [Test] // ctor (String)
1563 public void Constructor1_PublicKeyToken_Incomplete ()
1565 const string assemblyName = "TestAssembly";
1568 new AssemblyName (assemblyName + ", PublicKeyToken=");
1570 } catch (FileLoadException ex) {
1571 // The given assembly name or codebase was invalid
1572 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1573 Assert.IsNull (ex.FileName, "#3");
1574 Assert.IsNull (ex.InnerException, "#3");
1575 Assert.IsNotNull (ex.Message, "#4");
1579 [Test] // ctor (String)
1580 public void Constructor1_PublicKeyToken_Invalid ()
1582 const string assemblyName = "TestAssembly";
1585 new AssemblyName (assemblyName + ", PublicKeyToken=27576a8182a188");
1587 } catch (FileLoadException ex) {
1588 // The given assembly name or codebase was invalid
1589 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1590 Assert.IsNull (ex.FileName, "#3");
1591 Assert.IsNull (ex.InnerException, "#3");
1592 Assert.IsNotNull (ex.Message, "#4");
1596 [Test] // ctor (String)
1597 public void Constructor1_Retargetable ()
1599 const string assemblyName = "TestAssembly";
1602 new AssemblyName (assemblyName + ", Retargetable=Yes");
1603 Assert.Fail ("#A1");
1604 } catch (FileLoadException ex) {
1605 // The given assembly name or codebase was invalid
1606 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1607 Assert.IsNull (ex.FileName, "#A3");
1608 Assert.IsNull (ex.InnerException, "#A4");
1609 Assert.IsNotNull (ex.Message, "#A5");
1613 new AssemblyName (assemblyName + ", Retargetable=No");
1614 Assert.Fail ("#B1");
1615 } catch (FileLoadException ex) {
1616 // The given assembly name or codebase was invalid
1617 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1618 Assert.IsNull (ex.FileName, "#B3");
1619 Assert.IsNull (ex.InnerException, "#B4");
1620 Assert.IsNotNull (ex.Message, "#B5");
1624 new AssemblyName (assemblyName + ", Version=1.0.0.0, Retargetable=Yes");
1625 Assert.Fail ("#C1");
1626 } catch (FileLoadException ex) {
1627 // The given assembly name or codebase was invalid
1628 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1629 Assert.IsNull (ex.FileName, "#C3");
1630 Assert.IsNull (ex.InnerException, "#C4");
1631 Assert.IsNotNull (ex.Message, "#C5");
1635 new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, Retargetable=Yes");
1636 Assert.Fail ("#D1");
1637 } catch (FileLoadException ex) {
1638 // The given assembly name or codebase was invalid
1639 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#D2");
1640 Assert.IsNull (ex.FileName, "#D3");
1641 Assert.IsNull (ex.InnerException, "#D4");
1642 Assert.IsNotNull (ex.Message, "#D5");
1646 new AssemblyName (assemblyName + ", Version=1.0.0.0, PublicKeyToken=null, Retargetable=Yes");
1647 Assert.Fail ("#E1");
1648 } catch (FileLoadException ex) {
1649 // The given assembly name or codebase was invalid
1650 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#E2");
1651 Assert.IsNull (ex.FileName, "#E3");
1652 Assert.IsNull (ex.InnerException, "#E4");
1653 Assert.IsNotNull (ex.Message, "#E5");
1656 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=yEs");
1657 Assert.IsNull (an.CodeBase, "F:CodeBase");
1658 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#F:CultureInfo");
1659 Assert.IsNull (an.EscapedCodeBase, "#F:EscapedCodeBase");
1660 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#F:Flags");
1661 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=Yes", an.FullName, "#F:FullName");
1662 Assert.IsNull (an.GetPublicKey (), "#F:GetPublicKey");
1663 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#F:GetPublicKeyToken");
1664 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#F:HashAlgorithm");
1665 Assert.IsNull (an.KeyPair, "#F:KeyPair");
1666 Assert.AreEqual (assemblyName, an.Name, "#F:Name");
1667 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#F:PA");
1668 Assert.AreEqual (an.FullName, an.ToString (), "#F:ToString");
1669 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#F:Version");
1670 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1671 an.VersionCompatibility, "#F:VersionCompatibility");
1673 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=nO");
1674 Assert.IsNull (an.CodeBase, "G:CodeBase");
1675 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#G:CultureInfo");
1676 Assert.IsNull (an.EscapedCodeBase, "#G:EscapedCodeBase");
1677 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G:Flags");
1678 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", an.FullName, "#G:FullName");
1679 Assert.IsNull (an.GetPublicKey (), "#G:GetPublicKey");
1680 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#G:GetPublicKeyToken");
1681 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#G:HashAlgorithm");
1682 Assert.IsNull (an.KeyPair, "#G:KeyPair");
1683 Assert.AreEqual (assemblyName, an.Name, "#G:Name");
1684 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#G:PA");
1685 Assert.AreEqual (an.FullName, an.ToString (), "#G:ToString");
1686 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#G:Version");
1687 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1688 an.VersionCompatibility, "#G:VersionCompatibility");
1690 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=yes");
1691 Assert.IsNull (an.CodeBase, "H:CodeBase");
1692 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#H:CultureInfo");
1693 Assert.IsNull (an.EscapedCodeBase, "#H:EscapedCodeBase");
1694 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#H:Flags");
1695 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=Yes", an.FullName, "#H:FullName");
1696 Assert.IsNull (an.GetPublicKey (), "#H:GetPublicKey");
1697 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#H:GetPublicKeyToken");
1698 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#H:HashAlgorithm");
1699 Assert.IsNull (an.KeyPair, "#H:KeyPair");
1700 Assert.AreEqual (assemblyName, an.Name, "#H:Name");
1701 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#H:PA");
1702 Assert.AreEqual (an.FullName, an.ToString (), "#H:ToString");
1703 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#H:Version");
1704 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1705 an.VersionCompatibility, "#H:VersionCompatibility");
1708 [Test] // ctor (String)
1709 public void Constructor1_Retargetable_Incomplete ()
1711 const string assemblyName = "TestAssembly";
1714 new AssemblyName (assemblyName + ", Retargetable=");
1716 } catch (FileLoadException ex) {
1717 // The given assembly name or codebase was invalid
1718 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1719 Assert.IsNull (ex.FileName, "#3");
1720 Assert.IsNull (ex.InnerException, "#4");
1721 Assert.IsNotNull (ex.Message, "#5");
1725 [Test] // ctor (String)
1726 public void Constructor1_Retargetable_Invalid ()
1728 const string assemblyName = "TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
1731 new AssemblyName (assemblyName + ", Retargetable=False");
1732 Assert.Fail ("#A1");
1733 } catch (FileLoadException ex) {
1734 // The given assembly name or codebase was invalid
1735 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1736 Assert.IsNull (ex.FileName, "#A3");
1737 Assert.IsNull (ex.InnerException, "#A4");
1738 Assert.IsNotNull (ex.Message, "#A5");
1742 new AssemblyName (assemblyName + ", Retargetable=1");
1743 Assert.Fail ("#B1");
1744 } catch (FileLoadException ex) {
1745 // The given assembly name or codebase was invalid
1746 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1747 Assert.IsNull (ex.FileName, "#B3");
1748 Assert.IsNull (ex.InnerException, "#B4");
1749 Assert.IsNotNull (ex.Message, "#B5");
1753 new AssemblyName (assemblyName + ", Retargetable=True");
1754 Assert.Fail ("#C1");
1755 } catch (FileLoadException ex) {
1756 // The given assembly name or codebase was invalid
1757 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1758 Assert.IsNull (ex.FileName, "#C3");
1759 Assert.IsNull (ex.InnerException, "#C4");
1760 Assert.IsNotNull (ex.Message, "#C5");
1764 [Test] // ctor (String)
1765 public void Constructor1_Version ()
1767 const string assemblyName = "TestAssembly";
1768 const string assemblyVersion = "1.2.3.4";
1770 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion);
1771 Assert.IsNull (an.CodeBase, "CodeBase");
1772 Assert.IsNull (an.CultureInfo, "CultureInfo");
1773 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1774 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1775 Assert.AreEqual ("TestAssembly, Version=1.2.3.4", an.FullName, "FullName");
1776 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1777 Assert.IsNull (an.KeyPair, "KeyPair");
1778 Assert.AreEqual (assemblyName, an.Name, "Name");
1779 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1780 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1781 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1782 an.VersionCompatibility, "VersionCompatibility");
1783 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1784 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1785 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1789 [Test] // ctor (String)
1790 public void Constructor1_Version_Incomplete ()
1792 const string assemblyName = "TestAssembly";
1795 new AssemblyName (assemblyName + ", Version=, Culture=neutral");
1797 } catch (FileLoadException ex) {
1798 // The given assembly name or codebase was invalid
1799 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1800 Assert.IsNull (ex.FileName, "#3");
1801 Assert.IsNull (ex.InnerException, "#3");
1802 Assert.IsNotNull (ex.Message, "#4");
1806 [Test] // ctor (String)
1807 public void Constructor1_Version_Invalid ()
1809 const string assemblyName = "TestAssembly";
1812 new AssemblyName (assemblyName + ", Version=a.b");
1814 } catch (FileLoadException ex) {
1815 // The given assembly name or codebase was invalid
1816 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1817 Assert.IsNull (ex.FileName, "#3");
1818 Assert.IsNull (ex.InnerException, "#3");
1819 Assert.IsNotNull (ex.Message, "#4");
1823 [Test (Description="Xamarin bug #99 - whitespaces in key=value")]
1824 public void WhiteSpaceInKeyValue ()
1826 string nameWithSpaces = String.Format ("MySql.Data.Tests, PublicKey = \t {0}, Culture =\tneutral, Version=\t1.2.3.4", GetTokenString (publicKey1));
1827 string fullName = "MySql.Data.Tests, Version=1.2.3.4, Culture=neutral, PublicKeyToken=ce5276d8687ec6dc";
1828 var an = new AssemblyName (nameWithSpaces);
1830 Assert.AreEqual (fullName, an.FullName);
1834 public void ReferenceMatchesDefinition_Compares_Only_SimpleName ()
1836 var an1 = new AssemblyName ("TestDll, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089");
1837 var an2 = new AssemblyName ("TestDll, Version=2.0.0.2001, Culture=en-US, PublicKeyToken=ab7a5c561934e089");
1839 var an3 = new AssemblyName ("TestDll");
1840 var an4 = new AssemblyName ("tesTDlL");
1842 var an5 = new AssemblyName ("TestDll");
1843 var an6 = new AssemblyName ("TestDll2");
1845 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an1, an2));
1846 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an3, an4));
1847 Assert.IsFalse (AssemblyName.ReferenceMatchesDefinition (an5, an6));
1851 public void CultureNameInvariant ()
1853 var an = new AssemblyName ("TestDll");
1854 an.CultureInfo = new CultureInfo (CultureInfo.InvariantCulture.LCID);
1856 Assert.AreEqual ("", an.CultureName);