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 Assert.AreEqual (AssemblyCorlib, an.FullName, "#2");
395 public void FullName_Self ()
397 Assembly a = Assembly.GetExecutingAssembly ();
400 Assert.IsNotNull (an.FullName, "#1");
401 Assert.IsTrue (an.FullName.IndexOf ("Version=0.0.0.0") != -1, "#2");
402 Assert.IsTrue (an.FullName.IndexOf ("Culture=neutral") != -1, "#3");
403 Assert.IsTrue (an.FullName.IndexOf ("PublicKeyToken=null") != -1, "#4");
407 public void FullName_Flags ()
409 const string assemblyName = "TestAssembly";
411 // tests for AssemblyName with only name
412 an = new AssemblyName ();
413 an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer |
414 AssemblyNameFlags.EnableJITcompileTracking |
415 AssemblyNameFlags.PublicKey |
416 AssemblyNameFlags.Retargetable;
417 an.Name = assemblyName;
418 Assert.AreEqual (assemblyName + ", Retargetable=Yes", an.FullName, "#1");
419 an.Flags = AssemblyNameFlags.None;
420 Assert.AreEqual (assemblyName, an.FullName, "#2");
424 public void FullName_Name ()
426 const string assemblyName = "TestAssembly";
428 // tests for AssemblyName with only name
429 an = new AssemblyName ();
430 an.Name = assemblyName;
431 Assert.IsNotNull (an.FullName, "FullName2#1");
432 Assert.AreEqual (an.Name, an.FullName, "FullName2#2");
433 Assert.AreEqual (-1, an.FullName.IndexOf ("Culture="), "FullName2#3");
434 Assert.AreEqual (-1, an.FullName.IndexOf ("PublicKeyToken="), "FullName2#4");
438 public void FullName_Version ()
440 const string assemblyName = "TestAssembly";
441 const string assemblyVersion = "1.2";
443 // tests for AssemblyName with name and version
444 an = new AssemblyName ();
445 an.Name = assemblyName;
446 an.Version = new Version (assemblyVersion);
447 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion, an.FullName, "FullName3#1");
451 public void FullName_Culture ()
453 const string assemblyName = "TestAssembly";
455 // tests for AssemblyName with name and neutral culture
456 an = new AssemblyName ();
457 an.Name = assemblyName;
458 an.CultureInfo = CultureInfo.InvariantCulture;
459 Assert.AreEqual (assemblyName + ", Culture=neutral", an.FullName, "#1");
460 an.CultureInfo = new CultureInfo ("nl-BE");
461 Assert.AreEqual (assemblyName + ", Culture=nl-BE", an.FullName, "#2");
463 Assert.AreEqual (string.Empty, an.FullName, "#3");
467 public void FullName_PublicKey ()
469 const string assemblyName = "TestAssembly";
471 // tests for AssemblyName with name and public key
472 an = new AssemblyName ();
473 an.Name = assemblyName;
474 an.SetPublicKey (publicKey1);
475 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
476 an.SetPublicKey ((byte []) null);
477 Assert.AreEqual (assemblyName, an.FullName, "#A2");
478 an.SetPublicKey (new byte [0]);
479 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
481 Assert.AreEqual (string.Empty, an.FullName, "#A4");
483 an = new AssemblyName ();
484 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
485 an.Name = assemblyName;
486 an.SetPublicKey (publicKey1);
487 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
488 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
489 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
490 an.SetPublicKeyToken ((byte []) null);
491 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B3");
493 Assert.AreEqual (string.Empty, an.FullName, "#B4");
495 an = new AssemblyName ();
496 an.HashAlgorithm = AssemblyHashAlgorithm.None;
497 an.Name = assemblyName;
498 an.SetPublicKey (publicKey1);
499 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
500 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
501 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#C2");
502 an.SetPublicKeyToken ((byte []) null);
503 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C3");
505 Assert.AreEqual (string.Empty, an.FullName, "#C4");
507 an = new AssemblyName ();
508 an.Name = assemblyName;
509 an.SetPublicKey (new byte [0]);
510 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
512 Assert.AreEqual (string.Empty, an.FullName, "#D2");
513 an.SetPublicKey (publicKey3);
514 Assert.AreEqual (string.Empty, an.FullName, "#D3");
515 an.Name = assemblyName;
516 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "#D4");
520 public void FullName_PublicKey_KeyPair ()
522 const string assemblyName = "TestAssembly";
524 // tests for AssemblyName with name and public key
525 an = new AssemblyName ();
526 an.Name = assemblyName;
527 an.SetPublicKey (keyPair);
529 Assert.Fail ("#A1: " + an.FullName);
530 } catch (SecurityException ex) {
531 // Invalid assembly public key
532 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#A2");
533 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#A3");
534 Assert.IsNull (ex.InnerException, "#A4");
535 Assert.IsNotNull (ex.Message, "#A5");
538 an.SetPublicKeyToken (new byte [0]);
539 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#B1");
541 an.SetPublicKeyToken ((byte []) null);
543 Assert.Fail ("#C1: " + an.FullName);
544 } catch (SecurityException ex) {
545 // Invalid assembly public key
546 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#C2");
547 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#C3");
548 Assert.IsNull (ex.InnerException, "#C4");
549 Assert.IsNotNull (ex.Message, "#C5");
552 an.SetPublicKeyToken (new byte [0]);
553 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
554 an.SetPublicKey (publicKey1);
555 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
556 an.SetPublicKeyToken ((byte []) null);
557 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
561 public void FullName_PublicKeyToken ()
563 const string assemblyName = "TestAssembly";
565 an = new AssemblyName ();
566 an.Name = assemblyName;
567 an.SetPublicKeyToken (pk_token1);
568 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
569 an.SetPublicKeyToken ((byte []) null);
570 Assert.AreEqual (assemblyName, an.FullName, "#A2");
571 an.SetPublicKeyToken (new byte [0]);
572 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
573 an.SetPublicKeyToken (pk_token1);
574 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A4");
576 Assert.AreEqual (string.Empty, an.FullName, "#A5");
578 an = new AssemblyName ();
579 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
580 an.Name = assemblyName;
581 an.SetPublicKeyToken (pk_token1);
582 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
583 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
584 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
585 an.SetPublicKeyToken ((byte []) null);
586 Assert.AreEqual (assemblyName, an.FullName, "#B3");
588 Assert.AreEqual (string.Empty, an.FullName, "#B4");
590 an = new AssemblyName ();
591 an.Name = assemblyName;
592 an.SetPublicKey (publicKey1);
593 an.SetPublicKeyToken (pk_token1);
594 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
595 an.SetPublicKey ((byte []) null);
596 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C2");
597 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C3");
598 an.SetPublicKey (new byte [0]);
599 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C4");
600 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C5");
602 an = new AssemblyName ();
603 an.Name = assemblyName;
604 an.SetPublicKey (publicKey1);
605 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D1");
606 an.SetPublicKey (new byte [0]);
607 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
608 an.SetPublicKeyToken (pk_token1);
609 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
610 an.SetPublicKey ((byte []) null);
611 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D4");
615 public void FullName_VersionCulture ()
617 const string assemblyName = "TestAssembly";
618 const string assemblyVersion = "1.2";
620 // tests for AssemblyName with name, version and neutral culture
621 an = new AssemblyName ();
622 an.Name = assemblyName;
623 an.Version = new Version (assemblyVersion);
624 an.CultureInfo = CultureInfo.InvariantCulture;
625 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
626 + ", Culture=neutral", an.FullName, "#1");
627 an.CultureInfo = new CultureInfo ("en-US");
628 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
629 + ", Culture=en-US", an.FullName, "#2");
630 an.CultureInfo = new CultureInfo ("en");
631 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
632 + ", Culture=en", an.FullName, "#3");
636 public void FullName_VersionPublicKey ()
638 const string assemblyName = "TestAssembly";
639 const string assemblyVersion = "1.2";
641 // tests for AssemblyName with name, version and public key
642 an = new AssemblyName ();
643 an.Name = assemblyName;
644 an.Version = new Version (assemblyVersion);
645 an.SetPublicKey (publicKey1);
646 an.SetPublicKeyToken (pk_token1);
647 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
648 + ", PublicKeyToken=" + GetTokenString (pk_token1),
653 public void FullName_CulturePublicKey ()
655 const string assemblyName = "TestAssembly";
657 // tests for AssemblyName with name, culture and public key
658 an = new AssemblyName ();
659 an.Name = assemblyName;
660 an.CultureInfo = CultureInfo.InvariantCulture;
661 an.SetPublicKey (publicKey1);
662 an.SetPublicKeyToken (pk_token1);
663 Assert.AreEqual (assemblyName + ", Culture=neutral"
664 + ", PublicKeyToken=" + GetTokenString (pk_token1),
669 public void GetPublicKeyToken ()
671 const string assemblyName = "TestAssembly";
673 an = new AssemblyName ();
674 an.SetPublicKey (publicKey1);
675 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A1");
676 an.SetPublicKey (publicKey2);
677 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A2");
678 an.SetPublicKeyToken (new byte [] { 0x0a });
679 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A3");
680 an.SetPublicKey (publicKey1);
681 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A4");
682 an.SetPublicKeyToken (new byte [0]);
683 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A5");
684 an.Name = assemblyName;
685 an.SetPublicKey (publicKey2);
686 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A6");
687 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A7");
689 an = new AssemblyName ();
690 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
691 an.SetPublicKey (publicKey1);
692 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B1");
694 an = new AssemblyName ();
695 an.HashAlgorithm = AssemblyHashAlgorithm.None;
696 an.SetPublicKey (publicKey1);
697 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C1");
699 an = new AssemblyName ();
700 an.SetPublicKeyToken (new byte [0]);
701 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#D1");
702 an.SetPublicKeyToken (new byte [] { 0x0b, 0xff });
703 Assert.AreEqual (new byte [] { 0x0b, 0xff }, an.GetPublicKeyToken (), "#D2");
704 an.SetPublicKeyToken ((byte []) null);
705 Assert.IsNull (an.GetPublicKeyToken (), "#D3");
707 an = new AssemblyName ();
708 an.SetPublicKey (keyPair);
710 an.GetPublicKeyToken ();
712 } catch (SecurityException ex) {
713 // Invalid assembly public key
714 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#E2");
715 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#E3");
716 Assert.IsNull (ex.InnerException, "#E4");
717 Assert.IsNotNull (ex.Message, "#E5");
722 public void GetPublicKeyToken_Corlib ()
724 an = typeof (int).Assembly.GetName ();
725 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
726 Assert.IsTrue (an.GetPublicKeyToken ().Length > 0, "#2");
730 public void GetPublicGetToken_Ecma ()
732 const string assemblyName = "TestAssembly";
734 an = new AssemblyName ();
735 an.Name = assemblyName;
736 an.SetPublicKey (publicKey3);
737 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
738 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "#2");
742 public void GetPublicKeyToken_Self ()
744 Assembly a = Assembly.GetExecutingAssembly ();
746 Assert.AreEqual (new byte [0], an.GetPublicKeyToken ());
749 static int nameIndex = 0;
751 private AssemblyName GenAssemblyName ()
753 AssemblyName assemblyName = new AssemblyName();
754 assemblyName.Name = "MonoTests.System.Reflection.AssemblyNameTest" + (nameIndex ++);
759 private Assembly GenerateAssembly (AssemblyName name)
761 AssemblyBuilder ab = domain.DefineDynamicAssembly (
763 AssemblyBuilderAccess.RunAndSave,
765 ab.DefineDynamicModule ("def_module");
766 ab.Save (name.Name + ".dll");
768 return Assembly.LoadFrom (Path.Combine (tempDir, name.Name + ".dll"));
771 private AssemblyBuilder GenerateDynamicAssembly (AssemblyName name)
773 AssemblyBuilder ab = domain.DefineDynamicAssembly (
775 AssemblyBuilderAccess.Run);
781 public void TestCultureInfo ()
787 name = GenAssemblyName ();
788 name.CultureInfo = CultureInfo.CreateSpecificCulture ("ar-DZ");
789 a = GenerateAssembly (name);
790 culture = a.GetName ().CultureInfo;
791 Assert.IsFalse (culture.IsNeutralCulture, "#A1");
792 Assert.IsFalse (culture.IsReadOnly, "#A2");
793 Assert.AreEqual (5121, culture.LCID, "#A3");
794 Assert.AreEqual ("ar-DZ", culture.Name, "#A4");
795 Assert.IsTrue (culture.UseUserOverride, "#A5");
797 name = GenAssemblyName ();
798 name.CultureInfo = new CultureInfo ("en");
799 a = GenerateAssembly (name);
800 culture = a.GetName ().CultureInfo;
801 Assert.IsTrue (culture.IsNeutralCulture, "#B1");
802 Assert.IsFalse (culture.IsReadOnly, "#B2");
803 Assert.AreEqual (9, culture.LCID, "#B3");
804 Assert.AreEqual ("en", culture.Name, "#B4");
805 Assert.IsTrue (culture.UseUserOverride, "#B5");
807 name = GenAssemblyName ();
808 name.CultureInfo = CultureInfo.InvariantCulture;
809 a = GenerateAssembly (name);
810 culture = a.GetName ().CultureInfo;
811 Assert.IsFalse (culture.IsNeutralCulture, "#C1");
812 Assert.IsFalse (culture.IsReadOnly, "#C2");
813 Assert.AreEqual (127, culture.LCID, "#C3");
814 Assert.AreEqual (string.Empty, culture.Name, "#C4");
815 Assert.IsFalse (culture.UseUserOverride, "#C5");
817 a = typeof (int).Assembly;
819 culture = name.CultureInfo;
820 Assert.IsFalse (culture.IsNeutralCulture, "#D1");
821 Assert.IsFalse (culture.IsReadOnly, "#D2");
822 Assert.AreEqual (127, culture.LCID, "#D3");
823 Assert.AreEqual (string.Empty, culture.Name, "#D4");
824 Assert.IsFalse (culture.UseUserOverride, "#D5");
826 a = Assembly.GetExecutingAssembly ();
828 culture = name.CultureInfo;
829 Assert.IsFalse (culture.IsNeutralCulture, "#E1");
830 Assert.IsFalse (culture.IsReadOnly, "#E2");
831 Assert.AreEqual (127, culture.LCID, "#E3");
832 Assert.AreEqual (string.Empty, culture.Name, "#E4");
833 Assert.IsFalse (culture.UseUserOverride, "#E5");
835 AssemblyName [] names = a.GetReferencedAssemblies ();
836 foreach (AssemblyName an in names) {
837 culture = an.CultureInfo;
838 Assert.IsFalse (culture.IsNeutralCulture, "#F1:" + an.Name);
839 Assert.IsFalse (culture.IsReadOnly, "#F2:" + an.Name);
840 Assert.AreEqual (127, culture.LCID, "#F3:" + an.Name);
841 Assert.AreEqual (string.Empty, culture.Name, "#F4:" + an.Name);
842 Assert.IsFalse (culture.UseUserOverride, "#F5:" + an.Name);
847 public void Version ()
849 AssemblyName name = GenAssemblyName ();
850 name.Version = new Version (1, 2, 3, 4);
852 Assembly a = GenerateAssembly (name);
853 Assert.AreEqual ("1.2.3.4", a.GetName ().Version.ToString (), "1.2.3.4 normal");
855 name = GenAssemblyName ();
856 name.Version = new Version (1, 2, 3);
858 a = GenerateAssembly (name);
859 Assert.AreEqual ("1.2.3.0", a.GetName ().Version.ToString (), "1.2.3.0 normal");
861 name = GenAssemblyName ();
862 name.Version = new Version (1, 2);
864 a = GenerateAssembly (name);
865 Assert.AreEqual ("1.2.0.0", a.GetName ().Version.ToString (), "1.2.0.0 normal");
869 public void Version_Dynamic ()
871 AssemblyName name = GenAssemblyName ();
872 name.Version = new Version (1, 2, 3, 4);
874 AssemblyBuilder ab = GenerateDynamicAssembly (name);
875 Assert.AreEqual ("1.2.3.4", ab.GetName ().Version.ToString (), "1.2.3.4 dynamic");
877 name = GenAssemblyName ();
878 name.Version = new Version (1, 2, 3);
880 ab = GenerateDynamicAssembly (name);
881 Assert.AreEqual ("1.2.3.0", ab.GetName ().Version.ToString (), "1.2.3.0 dynamic");
883 name = GenAssemblyName ();
884 name.Version = new Version (1, 2);
886 ab = GenerateDynamicAssembly (name);
887 Assert.AreEqual ("1.2.0.0", ab.GetName ().Version.ToString (), "1.2.0.0 dynamic");
892 public void HashAlgorithm ()
894 Assert.AreEqual (AssemblyHashAlgorithm.SHA1,
895 typeof (int).Assembly.GetName ().HashAlgorithm);
899 public void Serialization ()
901 an = new AssemblyName ();
902 an.CodeBase = "http://www.test.com/test.dll";
903 an.CultureInfo = CultureInfo.InvariantCulture;
904 an.Flags = AssemblyNameFlags.PublicKey;
905 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
906 an.KeyPair = new StrongNameKeyPair (publicKey1);
907 an.Name = "TestAssembly";
908 an.Version = new Version (1, 5);
909 an.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
911 MemoryStream ms = new MemoryStream ();
912 BinaryFormatter bf = new BinaryFormatter ();
913 bf.Serialize (ms, an);
915 // reset position of memorystream
918 // deserialze assembly name
919 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
921 // close the memorystream
924 // compare orginal and deserialized assembly name
925 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
926 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
927 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
928 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
929 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
930 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
931 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
932 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
933 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
934 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
935 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
936 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
940 public void Serialization_WithoutStrongName ()
942 an = new AssemblyName ();
943 an.CodeBase = "http://www.test.com/test.dll";
944 an.CultureInfo = CultureInfo.InvariantCulture;
945 an.Flags = AssemblyNameFlags.None;
946 an.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
948 an.Name = "TestAssembly2";
949 an.Version = new Version (1, 5, 0, 0);
950 an.VersionCompatibility = AssemblyVersionCompatibility.SameMachine;
952 MemoryStream ms = new MemoryStream ();
953 BinaryFormatter bf = new BinaryFormatter ();
954 bf.Serialize (ms, an);
956 // reset position of memorystream
959 // deserialze assembly name
960 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
962 // close the memorystream
965 // compare orginal and deserialized assembly name
966 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
967 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
968 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
969 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
970 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
971 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
972 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
973 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
974 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
975 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
976 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
977 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
981 public void GetObjectData_Info_Null ()
983 an = new AssemblyName ();
985 an.GetObjectData (null, new StreamingContext (StreamingContextStates.All));
987 } catch (ArgumentNullException ex) {
988 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
989 Assert.IsNull (ex.InnerException, "#3");
990 Assert.IsNotNull (ex.Message, "#4");
991 Assert.IsNotNull (ex.ParamName, "#5");
992 Assert.AreEqual ("info", ex.ParamName, "#6");
997 public void Clone_Corlib ()
999 an = typeof (int).Assembly.GetName ();
1000 AssemblyName clone = (AssemblyName) an.Clone ();
1002 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1003 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1004 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1005 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1006 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1007 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1008 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1009 Assert.AreEqual (an.Name, clone.Name, "Name");
1010 //Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1011 Assert.AreEqual (an.Version, clone.Version, "Version");
1012 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1013 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1014 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1015 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1019 public void Clone_Empty ()
1021 an = new AssemblyName ();
1022 AssemblyName clone = (AssemblyName) an.Clone ();
1024 Assert.IsNull (clone.CodeBase, "CodeBase");
1025 Assert.IsNull (clone.CultureInfo, "CultureInfo");
1026 Assert.IsNull (clone.EscapedCodeBase, "EscapedCodeBase");
1027 Assert.AreEqual (AssemblyNameFlags.None, clone.Flags, "Flags");
1028 Assert.AreEqual (String.Empty, clone.FullName, "FullName");
1029 Assert.AreEqual (AssemblyHashAlgorithm.None, clone.HashAlgorithm, "HashAlgorithm");
1030 Assert.IsNull (clone.KeyPair, "KeyPair");
1031 Assert.IsNull (clone.Name, "Name");
1032 Assert.AreEqual (ProcessorArchitecture.None, clone.ProcessorArchitecture, "PA");
1033 Assert.IsNull (clone.Version, "Version");
1034 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1035 clone.VersionCompatibility, "VersionCompatibility");
1039 public void Clone_Self ()
1041 an = Assembly.GetExecutingAssembly ().GetName ();
1042 AssemblyName clone = (AssemblyName) an.Clone ();
1044 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1045 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1046 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1047 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1048 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1049 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1050 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1051 Assert.AreEqual (an.Name, clone.Name, "Name");
1052 Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1053 Assert.AreEqual (an.Version, clone.Version, "Version");
1054 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1055 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1056 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1057 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1061 [ExpectedException (typeof (FileNotFoundException))]
1062 public void GetAssemblyName_AssemblyFile_DoesNotExist ()
1064 AssemblyName.GetAssemblyName (Path.Combine (tempDir, "doesnotexist.dll"));
1068 [Category ("NotWorking")]
1069 public void GetAssemblyName_AssemblyFile_ReadLock ()
1071 string file = Path.Combine (tempDir, "loadfailure.dll");
1072 using (FileStream fs = File.Open (file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None)) {
1074 AssemblyName.GetAssemblyName (file);
1076 } catch (FileLoadException ex) {
1077 // Could not load file or assembly '...' or one
1078 // of its dependencies. The process cannot access
1079 // the file because it is being used by another
1081 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1082 Assert.IsNotNull (ex.FileName, "#3");
1083 Assert.AreEqual (file, ex.FileName, "#4");
1084 Assert.IsNull (ex.InnerException, "#5");
1085 Assert.IsNotNull (ex.Message, "#6");
1092 public void GetAssemblyName_AssemblyFile_BadImage ()
1094 string file = Path.Combine (tempDir, "badimage.dll");
1095 using (StreamWriter sw = File.CreateText (file)) {
1096 sw.WriteLine ("somegarbage");
1099 AssemblyName.GetAssemblyName (file);
1101 } catch (BadImageFormatException ex) {
1102 Assert.AreEqual (typeof (BadImageFormatException), ex.GetType (), "#2");
1103 Assert.IsNotNull (ex.FileName, "#3");
1104 Assert.AreEqual (file, ex.FileName, "#4");
1105 Assert.IsNull (ex.InnerException, "#5");
1106 Assert.IsNotNull (ex.Message, "#6");
1113 [Category ("AndroidNotWorking")] // Accessing assemblies by asm.Location is not supported
1114 public void GetAssemblyName_CodeBase ()
1116 Assembly execAssembly = Assembly.GetExecutingAssembly ();
1118 AssemblyName aname = AssemblyName.GetAssemblyName (execAssembly.Location);
1119 Assert.IsNotNull (aname.CodeBase, "#1");
1120 Assert.AreEqual (execAssembly.CodeBase, aname.CodeBase, "#2");
1125 private string GetTokenString (byte[] value)
1127 string tokenString = "";
1128 for (int i = 0; i < value.Length; i++) {
1129 tokenString += value[i].ToString ("x2");
1134 [Test] // ctor (String)
1135 public void Constructor1_Name ()
1137 const string assemblyName = "TestAssembly";
1139 an = new AssemblyName (assemblyName);
1140 Assert.IsNull (an.CodeBase, "CodeBase");
1141 Assert.IsNull (an.CultureInfo, "CultureInfo");
1142 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1143 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1144 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1145 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1146 Assert.IsNull (an.KeyPair, "KeyPair");
1147 Assert.AreEqual (assemblyName, an.Name, "Name");
1148 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1149 Assert.IsNull (an.Version, "Version");
1150 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1151 an.VersionCompatibility, "VersionCompatibility");
1152 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1153 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1154 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1155 Assert.IsNull (an.CultureName, "CultureName");
1156 Assert.AreEqual (AssemblyContentType.Default, an.ContentType, "ContentType");
1159 [Test] // ctor (String)
1160 public void Constructor1_Full ()
1162 const string assemblyName = "TestAssembly";
1163 const string assemblyCulture = "neutral";
1164 const string assemblyVersion = "1.2.3.4";
1166 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion +
1167 ", Culture=" + assemblyCulture + ", PublicKeyToken=" + GetTokenString (pk_token1) + ",ProcessorArchitecture=X86");
1168 Assert.IsNull (an.CodeBase, "CodeBase");
1169 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
1170 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1171 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1172 Assert.AreEqual ("TestAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=" +
1173 GetTokenString (pk_token1), an.FullName, "FullName");
1174 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1175 Assert.IsNull (an.KeyPair, "KeyPair");
1176 Assert.AreEqual (assemblyName, an.Name, "Name");
1177 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1178 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1179 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1180 an.VersionCompatibility, "VersionCompatibility");
1181 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1182 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1183 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1186 [Test] // ctor (String)
1187 public void Constructor1_AssemblyName_Empty ()
1190 new AssemblyName (string.Empty);
1192 } catch (ArgumentException ex) {
1193 // String cannot have zero length
1194 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1195 Assert.IsNull (ex.InnerException, "#3");
1196 Assert.IsNotNull (ex.Message, "#4");
1197 Assert.IsNull (ex.ParamName, "#5");
1201 [Test] // ctor (String)
1202 public void Constructor1_AssemblyName_Invalid ()
1204 const string assemblyName = "TestAssembly";
1207 new AssemblyName (assemblyName + ", =1.2.4.5");
1208 Assert.Fail ("#A1");
1209 } catch (FileLoadException ex) {
1210 // The given assembly name or codebase was invalid
1211 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1212 Assert.IsNull (ex.FileName, "#3");
1213 Assert.IsNull (ex.InnerException, "#3");
1214 Assert.IsNotNull (ex.Message, "#4");
1218 new AssemblyName (assemblyName + ", OtherAttribute");
1219 Assert.Fail ("#B1");
1220 } catch (FileLoadException ex) {
1221 // The given assembly name or codebase was invalid
1222 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1223 Assert.IsNull (ex.FileName, "#3");
1224 Assert.IsNull (ex.InnerException, "#3");
1225 Assert.IsNotNull (ex.Message, "#4");
1229 [Test] // ctor (String)
1230 public void Constructor1_AssemblyName_Null ()
1233 new AssemblyName (null);
1235 } catch (ArgumentNullException ex) {
1236 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1237 Assert.IsNull (ex.InnerException, "#3");
1238 Assert.IsNotNull (ex.Message, "#4");
1239 Assert.IsNotNull (ex.ParamName, "#5");
1240 Assert.AreEqual ("assemblyName", ex.ParamName, "#6");
1244 [Test] // ctor (String)
1245 public void Constructor1_Culture ()
1247 const string assemblyName = "TestAssembly";
1248 const string assemblyCulture = "en-US";
1250 an = new AssemblyName (assemblyName + ", Culture=" + assemblyCulture);
1251 Assert.IsNull (an.CodeBase, "CodeBase");
1252 Assert.AreEqual (new CultureInfo (assemblyCulture), an.CultureInfo, "CultureInfo");
1253 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1254 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1255 Assert.AreEqual ("TestAssembly, Culture=en-US", an.FullName, "FullName");
1256 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1257 Assert.IsNull (an.KeyPair, "KeyPair");
1258 Assert.AreEqual (assemblyName, an.Name, "Name");
1259 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1260 Assert.IsNull (an.Version, "Version");
1261 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1262 an.VersionCompatibility, "VersionCompatibility");
1263 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1264 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1265 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1268 [Test] // ctor (String)
1269 public void Constructor1_Culture_Incomplete ()
1271 const string assemblyName = "TestAssembly";
1274 new AssemblyName (assemblyName + ", Culture=");
1276 } catch (FileLoadException ex) {
1277 // The given assembly name or codebase was invalid
1278 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1279 Assert.IsNull (ex.FileName, "#3");
1280 Assert.IsNull (ex.InnerException, "#3");
1281 Assert.IsNotNull (ex.Message, "#4");
1285 [Test] // ctor (String)
1286 public void Constructor1_Culture_NotSupported ()
1288 const string assemblyName = "TestAssembly";
1291 new AssemblyName (assemblyName + ", Culture=aa-AA");
1293 } catch (CultureNotFoundException ex) {
1297 [Test] // ctor (String)
1298 public void Constructor1_ProcessorArchitecture ()
1300 const string assemblyName = "TestAssembly";
1302 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=X86");
1303 Assert.IsNull (an.CodeBase, "CodeBase");
1304 Assert.IsNull (an.CultureInfo, "CultureInfo");
1305 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1306 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1307 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1308 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1309 Assert.IsNull (an.KeyPair, "KeyPair");
1310 Assert.AreEqual (assemblyName, an.Name, "Name");
1311 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1312 Assert.IsNull (an.Version, "Version");
1313 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1314 an.VersionCompatibility, "VersionCompatibility");
1315 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1316 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1317 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1319 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=mSiL");
1320 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA: MSIL");
1322 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=AmD64");
1323 Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "PA: Amd64");
1325 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=iA64");
1326 Assert.AreEqual (ProcessorArchitecture.IA64, an.ProcessorArchitecture, "PA: IA64");
1329 [Test] // ctor (String)
1330 public void Constructor1_ProcessorArchitecture_Incomplete ()
1332 const string assemblyName = "TestAssembly";
1334 new AssemblyName (assemblyName + ", ProcessorArchitecture=");
1336 } catch (FileLoadException ex) {
1337 // The given assembly name or codebase was invalid
1338 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1339 Assert.IsNull (ex.FileName, "#3");
1340 Assert.IsNull (ex.InnerException, "#3");
1341 Assert.IsNotNull (ex.Message, "#4");
1345 [Test] // ctor (String)
1346 public void Constructor1_ProcessorArchitecture_Invalid ()
1348 const string assemblyName = "TestAssembly";
1350 new AssemblyName (assemblyName + ", ProcessorArchitecture=XXX");
1351 Assert.Fail ("#A1");
1352 } catch (FileLoadException ex) {
1353 // The given assembly name or codebase was invalid
1354 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1355 Assert.IsNull (ex.FileName, "#A3");
1356 Assert.IsNull (ex.InnerException, "#A4");
1357 Assert.IsNotNull (ex.Message, "#A5");
1361 new AssemblyName (assemblyName + ", ProcessorArchitecture=None");
1362 Assert.Fail ("#B1");
1363 } catch (FileLoadException ex) {
1364 // The given assembly name or codebase was invalid
1365 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1366 Assert.IsNull (ex.FileName, "#B3");
1367 Assert.IsNull (ex.InnerException, "#B4");
1368 Assert.IsNotNull (ex.Message, "#B5");
1372 [Test] // ctor (String)
1373 [Category ("NotDotNet")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1374 public void Constructor1_PublicKey_Mono ()
1376 const string assemblyName = "TestAssembly";
1378 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1379 Assert.IsNull (an.CodeBase, "CodeBase");
1380 Assert.IsNull (an.CultureInfo, "CultureInfo");
1381 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1382 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
1383 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1384 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1385 Assert.IsNull (an.KeyPair, "KeyPair");
1386 Assert.AreEqual (assemblyName, an.Name, "Name");
1387 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1388 Assert.IsNull (an.Version, "Version");
1389 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1390 an.VersionCompatibility, "VersionCompatibility");
1391 Assert.AreEqual (publicKey1, an.GetPublicKey (), "GetPublicKey");
1392 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1393 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1397 [Category ("NotWorking")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1398 public void Constructor1_PublicKey_MS ()
1400 const string assemblyName = "TestAssembly";
1402 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1403 Assert.IsNull (an.CodeBase, "CodeBase");
1404 Assert.IsNull (an.CultureInfo, "CultureInfo");
1405 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1406 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1407 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1408 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1409 Assert.IsNull (an.KeyPair, "KeyPair");
1410 Assert.AreEqual (assemblyName, an.Name, "Name");
1411 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1412 Assert.IsNull (an.Version, "Version");
1413 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1414 an.VersionCompatibility, "VersionCompatibility");
1415 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1416 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1417 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1420 [Test] // ctor (String)
1421 [Category ("NotWorking")] // bug #351725
1422 public void Constructor1_PublicKey_Ecma ()
1424 const string assemblyName = "TestAssembly";
1426 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey3));
1427 Assert.IsNull (an.CodeBase, "CodeBase");
1428 Assert.IsNull (an.CultureInfo, "CultureInfo");
1429 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1430 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1431 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "FullName");
1432 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1433 Assert.IsNull (an.KeyPair, "KeyPair");
1434 Assert.AreEqual (assemblyName, an.Name, "Name");
1435 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1436 Assert.IsNull (an.Version, "Version");
1437 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1438 an.VersionCompatibility, "VersionCompatibility");
1439 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1440 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "GetPublicKeyToken");
1441 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1444 [Test] // ctor (String)
1445 public void Constructor1_PublicKey_Incomplete ()
1447 const string assemblyName = "TestAssembly";
1450 new AssemblyName (assemblyName + ", PublicKey=");
1452 } catch (FileLoadException ex) {
1453 // The given assembly name or codebase was invalid
1454 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1455 Assert.IsNull (ex.FileName, "#3");
1456 Assert.IsNull (ex.InnerException, "#3");
1457 Assert.IsNotNull (ex.Message, "#4");
1461 [Test] // ctor (String)
1462 public void Constructor1_PublicKey_Invalid ()
1464 const string assemblyName = "TestAssembly";
1467 new AssemblyName (assemblyName + ", PublicKey=0024000004800000940000000602000000240000525341310004000011000000e39d99616f48cf7d6d59f345e485e713e89b8b1265a31b1a393e9894ee3fbddaf382dcaf4083dc31ee7a40a2a25c69c6d019fba9f37ec17fd680e4f6fe3b5305f71ae9e494e3501d92508c2e98ca1e22991a217aa8ce259c9882ffdfff4fbc6fa5e6660a8ff951cd94ed011e5633651b64e8f4522519b6ec84921ee22e4840e");
1468 Assert.Fail ("#A1");
1469 } catch (FileLoadException ex) {
1470 // The given assembly name or codebase was invalid
1471 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1472 Assert.IsNull (ex.FileName, "#A3");
1473 Assert.IsNull (ex.InnerException, "#A4");
1474 Assert.IsNotNull (ex.Message, "#A5");
1478 new AssemblyName (assemblyName + ", PublicKey=null");
1479 Assert.Fail ("#B1");
1480 } catch (FileLoadException ex) {
1481 // The given assembly name or codebase was invalid
1482 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1483 Assert.IsNull (ex.FileName, "#B3");
1484 Assert.IsNull (ex.InnerException, "#B4");
1485 Assert.IsNotNull (ex.Message, "#B5");
1489 [Test] // ctor (String)
1490 [Category ("NotWorking")] // bug #351756
1491 public void Constructor1_PublicKey_KeyPair ()
1493 const string assemblyName = "TestAssembly";
1496 new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (keyPair));
1498 } catch (SecurityException ex) {
1499 // Invalid assembly public key
1500 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#2");
1501 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#3");
1502 Assert.IsNull (ex.InnerException, "#4");
1503 Assert.IsNotNull (ex.Message, "#5");
1507 [Test] // ctor (String)
1508 public void Constructor1_PublicKeyToken ()
1510 const string assemblyName = "TestAssembly";
1512 an = new AssemblyName (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1));
1513 Assert.IsNull (an.CodeBase, "#A:CodeBase");
1514 Assert.IsNull (an.CultureInfo, "#A:CultureInfo");
1515 Assert.IsNull (an.EscapedCodeBase, "#A:EscapedCodeBase");
1516 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A:Flags");
1517 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A:FullName");
1518 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#A:HashAlgorithm");
1519 Assert.IsNull (an.KeyPair, "#A:KeyPair");
1520 Assert.AreEqual (assemblyName, an.Name, "#A:Name");
1521 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#A:PA");
1522 Assert.IsNull (an.Version, "#A:Version");
1523 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1524 an.VersionCompatibility, "#A:VersionCompatibility");
1525 Assert.IsNull (an.GetPublicKey (), "#A:GetPublicKey");
1526 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A:GetPublicKeyToken");
1527 Assert.AreEqual (an.FullName, an.ToString (), "#A:ToString");
1529 an = new AssemblyName (assemblyName + ", PublicKeyToken=null");
1530 Assert.IsNull (an.CodeBase, "#B:CodeBase");
1531 Assert.IsNull (an.CultureInfo, "#B:CultureInfo");
1532 Assert.IsNull (an.EscapedCodeBase, "#B:EscapedCodeBase");
1533 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B:Flags");
1534 //Assert.AreEqual ("TestAssembly, PublicKeyToken=null", an.FullName, "#B:FullName");
1535 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#B:HashAlgorithm");
1536 Assert.IsNull (an.KeyPair, "#B:KeyPair");
1537 Assert.AreEqual (assemblyName, an.Name, "#B:Name");
1538 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#B:PA");
1539 Assert.IsNull (an.Version, "#B:Version");
1540 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1541 an.VersionCompatibility, "#B:VersionCompatibility");
1542 Assert.IsNull (an.GetPublicKey (), "#B:GetPublicKey");
1543 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#B:GetPublicKeyToken");
1544 Assert.AreEqual (an.FullName, an.ToString (), "#B:ToString");
1547 [Test] // ctor (String)
1548 public void Constructor1_PublicKeyToken_Incomplete ()
1550 const string assemblyName = "TestAssembly";
1553 new AssemblyName (assemblyName + ", PublicKeyToken=");
1555 } catch (FileLoadException ex) {
1556 // The given assembly name or codebase was invalid
1557 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1558 Assert.IsNull (ex.FileName, "#3");
1559 Assert.IsNull (ex.InnerException, "#3");
1560 Assert.IsNotNull (ex.Message, "#4");
1564 [Test] // ctor (String)
1565 public void Constructor1_PublicKeyToken_Invalid ()
1567 const string assemblyName = "TestAssembly";
1570 new AssemblyName (assemblyName + ", PublicKeyToken=27576a8182a188");
1572 } catch (FileLoadException ex) {
1573 // The given assembly name or codebase was invalid
1574 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1575 Assert.IsNull (ex.FileName, "#3");
1576 Assert.IsNull (ex.InnerException, "#3");
1577 Assert.IsNotNull (ex.Message, "#4");
1581 [Test] // ctor (String)
1582 public void Constructor1_Retargetable ()
1584 const string assemblyName = "TestAssembly";
1587 new AssemblyName (assemblyName + ", Retargetable=Yes");
1588 Assert.Fail ("#A1");
1589 } catch (FileLoadException ex) {
1590 // The given assembly name or codebase was invalid
1591 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1592 Assert.IsNull (ex.FileName, "#A3");
1593 Assert.IsNull (ex.InnerException, "#A4");
1594 Assert.IsNotNull (ex.Message, "#A5");
1598 new AssemblyName (assemblyName + ", Retargetable=No");
1599 Assert.Fail ("#B1");
1600 } catch (FileLoadException ex) {
1601 // The given assembly name or codebase was invalid
1602 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1603 Assert.IsNull (ex.FileName, "#B3");
1604 Assert.IsNull (ex.InnerException, "#B4");
1605 Assert.IsNotNull (ex.Message, "#B5");
1609 new AssemblyName (assemblyName + ", Version=1.0.0.0, Retargetable=Yes");
1610 Assert.Fail ("#C1");
1611 } catch (FileLoadException ex) {
1612 // The given assembly name or codebase was invalid
1613 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1614 Assert.IsNull (ex.FileName, "#C3");
1615 Assert.IsNull (ex.InnerException, "#C4");
1616 Assert.IsNotNull (ex.Message, "#C5");
1620 new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, Retargetable=Yes");
1621 Assert.Fail ("#D1");
1622 } catch (FileLoadException ex) {
1623 // The given assembly name or codebase was invalid
1624 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#D2");
1625 Assert.IsNull (ex.FileName, "#D3");
1626 Assert.IsNull (ex.InnerException, "#D4");
1627 Assert.IsNotNull (ex.Message, "#D5");
1631 new AssemblyName (assemblyName + ", Version=1.0.0.0, PublicKeyToken=null, Retargetable=Yes");
1632 Assert.Fail ("#E1");
1633 } catch (FileLoadException ex) {
1634 // The given assembly name or codebase was invalid
1635 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#E2");
1636 Assert.IsNull (ex.FileName, "#E3");
1637 Assert.IsNull (ex.InnerException, "#E4");
1638 Assert.IsNotNull (ex.Message, "#E5");
1641 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=yEs");
1642 Assert.IsNull (an.CodeBase, "F:CodeBase");
1643 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#F:CultureInfo");
1644 Assert.IsNull (an.EscapedCodeBase, "#F:EscapedCodeBase");
1645 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#F:Flags");
1646 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=Yes", an.FullName, "#F:FullName");
1647 Assert.IsNull (an.GetPublicKey (), "#F:GetPublicKey");
1648 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#F:GetPublicKeyToken");
1649 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#F:HashAlgorithm");
1650 Assert.IsNull (an.KeyPair, "#F:KeyPair");
1651 Assert.AreEqual (assemblyName, an.Name, "#F:Name");
1652 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#F:PA");
1653 Assert.AreEqual (an.FullName, an.ToString (), "#F:ToString");
1654 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#F:Version");
1655 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1656 an.VersionCompatibility, "#F:VersionCompatibility");
1658 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=nO");
1659 Assert.IsNull (an.CodeBase, "G:CodeBase");
1660 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#G:CultureInfo");
1661 Assert.IsNull (an.EscapedCodeBase, "#G:EscapedCodeBase");
1662 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G:Flags");
1663 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", an.FullName, "#G:FullName");
1664 Assert.IsNull (an.GetPublicKey (), "#G:GetPublicKey");
1665 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#G:GetPublicKeyToken");
1666 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#G:HashAlgorithm");
1667 Assert.IsNull (an.KeyPair, "#G:KeyPair");
1668 Assert.AreEqual (assemblyName, an.Name, "#G:Name");
1669 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#G:PA");
1670 Assert.AreEqual (an.FullName, an.ToString (), "#G:ToString");
1671 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#G:Version");
1672 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1673 an.VersionCompatibility, "#G:VersionCompatibility");
1675 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=yes");
1676 Assert.IsNull (an.CodeBase, "H:CodeBase");
1677 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#H:CultureInfo");
1678 Assert.IsNull (an.EscapedCodeBase, "#H:EscapedCodeBase");
1679 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#H:Flags");
1680 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=Yes", an.FullName, "#H:FullName");
1681 Assert.IsNull (an.GetPublicKey (), "#H:GetPublicKey");
1682 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#H:GetPublicKeyToken");
1683 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#H:HashAlgorithm");
1684 Assert.IsNull (an.KeyPair, "#H:KeyPair");
1685 Assert.AreEqual (assemblyName, an.Name, "#H:Name");
1686 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#H:PA");
1687 Assert.AreEqual (an.FullName, an.ToString (), "#H:ToString");
1688 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#H:Version");
1689 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1690 an.VersionCompatibility, "#H:VersionCompatibility");
1693 [Test] // ctor (String)
1694 public void Constructor1_Retargetable_Incomplete ()
1696 const string assemblyName = "TestAssembly";
1699 new AssemblyName (assemblyName + ", Retargetable=");
1701 } catch (FileLoadException ex) {
1702 // The given assembly name or codebase was invalid
1703 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1704 Assert.IsNull (ex.FileName, "#3");
1705 Assert.IsNull (ex.InnerException, "#4");
1706 Assert.IsNotNull (ex.Message, "#5");
1710 [Test] // ctor (String)
1711 public void Constructor1_Retargetable_Invalid ()
1713 const string assemblyName = "TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
1716 new AssemblyName (assemblyName + ", Retargetable=False");
1717 Assert.Fail ("#A1");
1718 } catch (FileLoadException ex) {
1719 // The given assembly name or codebase was invalid
1720 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1721 Assert.IsNull (ex.FileName, "#A3");
1722 Assert.IsNull (ex.InnerException, "#A4");
1723 Assert.IsNotNull (ex.Message, "#A5");
1727 new AssemblyName (assemblyName + ", Retargetable=1");
1728 Assert.Fail ("#B1");
1729 } catch (FileLoadException ex) {
1730 // The given assembly name or codebase was invalid
1731 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1732 Assert.IsNull (ex.FileName, "#B3");
1733 Assert.IsNull (ex.InnerException, "#B4");
1734 Assert.IsNotNull (ex.Message, "#B5");
1738 new AssemblyName (assemblyName + ", Retargetable=True");
1739 Assert.Fail ("#C1");
1740 } catch (FileLoadException ex) {
1741 // The given assembly name or codebase was invalid
1742 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1743 Assert.IsNull (ex.FileName, "#C3");
1744 Assert.IsNull (ex.InnerException, "#C4");
1745 Assert.IsNotNull (ex.Message, "#C5");
1749 [Test] // ctor (String)
1750 public void Constructor1_Version ()
1752 const string assemblyName = "TestAssembly";
1753 const string assemblyVersion = "1.2.3.4";
1755 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion);
1756 Assert.IsNull (an.CodeBase, "CodeBase");
1757 Assert.IsNull (an.CultureInfo, "CultureInfo");
1758 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1759 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1760 Assert.AreEqual ("TestAssembly, Version=1.2.3.4", an.FullName, "FullName");
1761 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1762 Assert.IsNull (an.KeyPair, "KeyPair");
1763 Assert.AreEqual (assemblyName, an.Name, "Name");
1764 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1765 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1766 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1767 an.VersionCompatibility, "VersionCompatibility");
1768 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1769 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1770 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1774 [Test] // ctor (String)
1775 public void Constructor1_Version_Incomplete ()
1777 const string assemblyName = "TestAssembly";
1780 new AssemblyName (assemblyName + ", Version=, Culture=neutral");
1782 } catch (FileLoadException ex) {
1783 // The given assembly name or codebase was invalid
1784 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1785 Assert.IsNull (ex.FileName, "#3");
1786 Assert.IsNull (ex.InnerException, "#3");
1787 Assert.IsNotNull (ex.Message, "#4");
1791 [Test] // ctor (String)
1792 public void Constructor1_Version_Invalid ()
1794 const string assemblyName = "TestAssembly";
1797 new AssemblyName (assemblyName + ", Version=a.b");
1799 } catch (FileLoadException ex) {
1800 // The given assembly name or codebase was invalid
1801 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1802 Assert.IsNull (ex.FileName, "#3");
1803 Assert.IsNull (ex.InnerException, "#3");
1804 Assert.IsNotNull (ex.Message, "#4");
1808 [Test] // ctor (String)
1809 public void Constructor1_Quoted ()
1813 an = new AssemblyName ("'System', Version=\"10.0.0.0\", Culture='Neutral', PublicKeyToken='b67a5c561934e089', Retargetable='Yes', ProcessorArchitecture='AMD64'");
1814 Assert.AreEqual ("System, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b67a5c561934e089, Retargetable=Yes", an.ToString ());
1815 Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "Amd64");
1818 [Test] // ctor (String)
1819 public void Constructor1_Quoted_Invalid ()
1824 an = new AssemblyName ("System, Version=\"10.0.0.0'");
1826 } catch (FileLoadException) {
1830 [Test (Description="Xamarin bug #99 - whitespaces in key=value")]
1831 public void WhiteSpaceInKeyValue ()
1833 string nameWithSpaces = String.Format ("MySql.Data.Tests, PublicKey = \t {0}, Culture =\tneutral, Version=\t1.2.3.4", GetTokenString (publicKey1));
1834 string fullName = "MySql.Data.Tests, Version=1.2.3.4, Culture=neutral, PublicKeyToken=ce5276d8687ec6dc";
1835 var an = new AssemblyName (nameWithSpaces);
1837 Assert.AreEqual (fullName, an.FullName);
1841 public void ReferenceMatchesDefinition_Compares_Only_SimpleName ()
1843 var an1 = new AssemblyName ("TestDll, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089");
1844 var an2 = new AssemblyName ("TestDll, Version=2.0.0.2001, Culture=en-US, PublicKeyToken=ab7a5c561934e089");
1846 var an3 = new AssemblyName ("TestDll");
1847 var an4 = new AssemblyName ("tesTDlL");
1849 var an5 = new AssemblyName ("TestDll");
1850 var an6 = new AssemblyName ("TestDll2");
1852 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an1, an2));
1853 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an3, an4));
1854 Assert.IsFalse (AssemblyName.ReferenceMatchesDefinition (an5, an6));
1858 public void CultureNameInvariant ()
1860 var an = new AssemblyName ("TestDll");
1861 an.CultureInfo = new CultureInfo (CultureInfo.InvariantCulture.LCID);
1863 Assert.AreEqual ("", an.CultureName);