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 public void GetAssemblyName_CodeBase ()
1117 Assembly execAssembly = Assembly.GetExecutingAssembly ();
1119 AssemblyName aname = AssemblyName.GetAssemblyName (execAssembly.Location);
1120 Assert.IsNotNull (aname.CodeBase, "#1");
1121 Assert.AreEqual (execAssembly.CodeBase, aname.CodeBase, "#2");
1126 private string GetTokenString (byte[] value)
1128 string tokenString = "";
1129 for (int i = 0; i < value.Length; i++) {
1130 tokenString += value[i].ToString ("x2");
1135 [Test] // ctor (String)
1136 public void Constructor1_Name ()
1138 const string assemblyName = "TestAssembly";
1140 an = new AssemblyName (assemblyName);
1141 Assert.IsNull (an.CodeBase, "CodeBase");
1142 Assert.IsNull (an.CultureInfo, "CultureInfo");
1143 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1144 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1145 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1146 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1147 Assert.IsNull (an.KeyPair, "KeyPair");
1148 Assert.AreEqual (assemblyName, an.Name, "Name");
1149 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1150 Assert.IsNull (an.Version, "Version");
1151 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1152 an.VersionCompatibility, "VersionCompatibility");
1153 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1154 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1155 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1157 Assert.IsNull (an.CultureName, "CultureName");
1158 Assert.AreEqual (AssemblyContentType.Default, an.ContentType, "ContentType");
1162 [Test] // ctor (String)
1163 public void Constructor1_Full ()
1165 const string assemblyName = "TestAssembly";
1166 const string assemblyCulture = "neutral";
1167 const string assemblyVersion = "1.2.3.4";
1169 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion +
1170 ", Culture=" + assemblyCulture + ", PublicKeyToken=" + GetTokenString (pk_token1) + ",ProcessorArchitecture=X86");
1171 Assert.IsNull (an.CodeBase, "CodeBase");
1172 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
1173 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1174 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1175 Assert.AreEqual ("TestAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=" +
1176 GetTokenString (pk_token1), an.FullName, "FullName");
1177 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1178 Assert.IsNull (an.KeyPair, "KeyPair");
1179 Assert.AreEqual (assemblyName, an.Name, "Name");
1180 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1181 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1182 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1183 an.VersionCompatibility, "VersionCompatibility");
1184 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1185 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1186 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1189 [Test] // ctor (String)
1190 public void Constructor1_AssemblyName_Empty ()
1193 new AssemblyName (string.Empty);
1195 } catch (ArgumentException ex) {
1196 // String cannot have zero length
1197 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1198 Assert.IsNull (ex.InnerException, "#3");
1199 Assert.IsNotNull (ex.Message, "#4");
1200 Assert.IsNull (ex.ParamName, "#5");
1204 [Test] // ctor (String)
1205 public void Constructor1_AssemblyName_Invalid ()
1207 const string assemblyName = "TestAssembly";
1210 new AssemblyName (assemblyName + ", =1.2.4.5");
1211 Assert.Fail ("#A1");
1212 } catch (FileLoadException ex) {
1213 // The given assembly name or codebase was invalid
1214 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1215 Assert.IsNull (ex.FileName, "#3");
1216 Assert.IsNull (ex.InnerException, "#3");
1217 Assert.IsNotNull (ex.Message, "#4");
1221 new AssemblyName (assemblyName + ", OtherAttribute");
1222 Assert.Fail ("#B1");
1223 } catch (FileLoadException ex) {
1224 // The given assembly name or codebase was invalid
1225 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1226 Assert.IsNull (ex.FileName, "#3");
1227 Assert.IsNull (ex.InnerException, "#3");
1228 Assert.IsNotNull (ex.Message, "#4");
1232 [Test] // ctor (String)
1233 public void Constructor1_AssemblyName_Null ()
1236 new AssemblyName (null);
1238 } catch (ArgumentNullException ex) {
1239 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1240 Assert.IsNull (ex.InnerException, "#3");
1241 Assert.IsNotNull (ex.Message, "#4");
1242 Assert.IsNotNull (ex.ParamName, "#5");
1243 Assert.AreEqual ("assemblyName", ex.ParamName, "#6");
1247 [Test] // ctor (String)
1248 public void Constructor1_Culture ()
1250 const string assemblyName = "TestAssembly";
1251 const string assemblyCulture = "en-US";
1253 an = new AssemblyName (assemblyName + ", Culture=" + assemblyCulture);
1254 Assert.IsNull (an.CodeBase, "CodeBase");
1255 Assert.AreEqual (new CultureInfo (assemblyCulture), an.CultureInfo, "CultureInfo");
1256 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1257 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1258 Assert.AreEqual ("TestAssembly, Culture=en-US", an.FullName, "FullName");
1259 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1260 Assert.IsNull (an.KeyPair, "KeyPair");
1261 Assert.AreEqual (assemblyName, an.Name, "Name");
1262 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1263 Assert.IsNull (an.Version, "Version");
1264 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1265 an.VersionCompatibility, "VersionCompatibility");
1266 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1267 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1268 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1271 [Test] // ctor (String)
1272 public void Constructor1_Culture_Incomplete ()
1274 const string assemblyName = "TestAssembly";
1277 new AssemblyName (assemblyName + ", Culture=");
1279 } catch (FileLoadException ex) {
1280 // The given assembly name or codebase was invalid
1281 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1282 Assert.IsNull (ex.FileName, "#3");
1283 Assert.IsNull (ex.InnerException, "#3");
1284 Assert.IsNotNull (ex.Message, "#4");
1288 [Test] // ctor (String)
1289 public void Constructor1_Culture_NotSupported ()
1291 const string assemblyName = "TestAssembly";
1294 new AssemblyName (assemblyName + ", Culture=aa-AA");
1297 } catch (CultureNotFoundException ex) {
1300 } catch (ArgumentException ex) {
1301 // Culture name 'aa-aa' is not supported
1302 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1303 Assert.IsNull (ex.InnerException, "#3");
1304 Assert.IsNotNull (ex.Message, "#4");
1305 Assert.IsNotNull (ex.ParamName, "#5");
1306 Assert.AreEqual ("name", ex.ParamName, "#6");
1311 [Test] // ctor (String)
1312 public void Constructor1_ProcessorArchitecture ()
1314 const string assemblyName = "TestAssembly";
1316 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=X86");
1317 Assert.IsNull (an.CodeBase, "CodeBase");
1318 Assert.IsNull (an.CultureInfo, "CultureInfo");
1319 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1320 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1321 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1322 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1323 Assert.IsNull (an.KeyPair, "KeyPair");
1324 Assert.AreEqual (assemblyName, an.Name, "Name");
1325 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1326 Assert.IsNull (an.Version, "Version");
1327 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1328 an.VersionCompatibility, "VersionCompatibility");
1329 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1330 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1331 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1333 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=mSiL");
1334 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA: MSIL");
1336 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=AmD64");
1337 Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "PA: Amd64");
1339 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=iA64");
1340 Assert.AreEqual (ProcessorArchitecture.IA64, an.ProcessorArchitecture, "PA: IA64");
1343 [Test] // ctor (String)
1344 public void Constructor1_ProcessorArchitecture_Incomplete ()
1346 const string assemblyName = "TestAssembly";
1348 new AssemblyName (assemblyName + ", ProcessorArchitecture=");
1350 } catch (FileLoadException ex) {
1351 // The given assembly name or codebase was invalid
1352 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1353 Assert.IsNull (ex.FileName, "#3");
1354 Assert.IsNull (ex.InnerException, "#3");
1355 Assert.IsNotNull (ex.Message, "#4");
1359 [Test] // ctor (String)
1360 public void Constructor1_ProcessorArchitecture_Invalid ()
1362 const string assemblyName = "TestAssembly";
1364 new AssemblyName (assemblyName + ", ProcessorArchitecture=XXX");
1365 Assert.Fail ("#A1");
1366 } catch (FileLoadException ex) {
1367 // The given assembly name or codebase was invalid
1368 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1369 Assert.IsNull (ex.FileName, "#A3");
1370 Assert.IsNull (ex.InnerException, "#A4");
1371 Assert.IsNotNull (ex.Message, "#A5");
1375 new AssemblyName (assemblyName + ", ProcessorArchitecture=None");
1376 Assert.Fail ("#B1");
1377 } catch (FileLoadException ex) {
1378 // The given assembly name or codebase was invalid
1379 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1380 Assert.IsNull (ex.FileName, "#B3");
1381 Assert.IsNull (ex.InnerException, "#B4");
1382 Assert.IsNotNull (ex.Message, "#B5");
1386 [Test] // ctor (String)
1387 [Category ("NotDotNet")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1388 public void Constructor1_PublicKey_Mono ()
1390 const string assemblyName = "TestAssembly";
1392 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1393 Assert.IsNull (an.CodeBase, "CodeBase");
1394 Assert.IsNull (an.CultureInfo, "CultureInfo");
1395 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1396 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
1397 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1398 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1399 Assert.IsNull (an.KeyPair, "KeyPair");
1400 Assert.AreEqual (assemblyName, an.Name, "Name");
1401 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1402 Assert.IsNull (an.Version, "Version");
1403 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1404 an.VersionCompatibility, "VersionCompatibility");
1405 Assert.AreEqual (publicKey1, an.GetPublicKey (), "GetPublicKey");
1406 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1407 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1411 [Category ("NotWorking")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1412 public void Constructor1_PublicKey_MS ()
1414 const string assemblyName = "TestAssembly";
1416 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1417 Assert.IsNull (an.CodeBase, "CodeBase");
1418 Assert.IsNull (an.CultureInfo, "CultureInfo");
1419 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1420 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1421 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1422 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1423 Assert.IsNull (an.KeyPair, "KeyPair");
1424 Assert.AreEqual (assemblyName, an.Name, "Name");
1425 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1426 Assert.IsNull (an.Version, "Version");
1427 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1428 an.VersionCompatibility, "VersionCompatibility");
1429 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1430 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1431 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1434 [Test] // ctor (String)
1435 [Category ("NotWorking")] // bug #351725
1436 public void Constructor1_PublicKey_Ecma ()
1438 const string assemblyName = "TestAssembly";
1440 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey3));
1441 Assert.IsNull (an.CodeBase, "CodeBase");
1442 Assert.IsNull (an.CultureInfo, "CultureInfo");
1443 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1444 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1445 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "FullName");
1446 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1447 Assert.IsNull (an.KeyPair, "KeyPair");
1448 Assert.AreEqual (assemblyName, an.Name, "Name");
1449 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1450 Assert.IsNull (an.Version, "Version");
1451 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1452 an.VersionCompatibility, "VersionCompatibility");
1453 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1454 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "GetPublicKeyToken");
1455 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1458 [Test] // ctor (String)
1459 public void Constructor1_PublicKey_Incomplete ()
1461 const string assemblyName = "TestAssembly";
1464 new AssemblyName (assemblyName + ", PublicKey=");
1466 } catch (FileLoadException ex) {
1467 // The given assembly name or codebase was invalid
1468 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1469 Assert.IsNull (ex.FileName, "#3");
1470 Assert.IsNull (ex.InnerException, "#3");
1471 Assert.IsNotNull (ex.Message, "#4");
1475 [Test] // ctor (String)
1476 public void Constructor1_PublicKey_Invalid ()
1478 const string assemblyName = "TestAssembly";
1481 new AssemblyName (assemblyName + ", PublicKey=0024000004800000940000000602000000240000525341310004000011000000e39d99616f48cf7d6d59f345e485e713e89b8b1265a31b1a393e9894ee3fbddaf382dcaf4083dc31ee7a40a2a25c69c6d019fba9f37ec17fd680e4f6fe3b5305f71ae9e494e3501d92508c2e98ca1e22991a217aa8ce259c9882ffdfff4fbc6fa5e6660a8ff951cd94ed011e5633651b64e8f4522519b6ec84921ee22e4840e");
1482 Assert.Fail ("#A1");
1483 } catch (FileLoadException ex) {
1484 // The given assembly name or codebase was invalid
1485 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1486 Assert.IsNull (ex.FileName, "#A3");
1487 Assert.IsNull (ex.InnerException, "#A4");
1488 Assert.IsNotNull (ex.Message, "#A5");
1492 new AssemblyName (assemblyName + ", PublicKey=null");
1493 Assert.Fail ("#B1");
1494 } catch (FileLoadException ex) {
1495 // The given assembly name or codebase was invalid
1496 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1497 Assert.IsNull (ex.FileName, "#B3");
1498 Assert.IsNull (ex.InnerException, "#B4");
1499 Assert.IsNotNull (ex.Message, "#B5");
1503 [Test] // ctor (String)
1504 [Category ("NotWorking")] // bug #351756
1505 public void Constructor1_PublicKey_KeyPair ()
1507 const string assemblyName = "TestAssembly";
1510 new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (keyPair));
1512 } catch (SecurityException ex) {
1513 // Invalid assembly public key
1514 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#2");
1515 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#3");
1516 Assert.IsNull (ex.InnerException, "#4");
1517 Assert.IsNotNull (ex.Message, "#5");
1521 [Test] // ctor (String)
1522 public void Constructor1_PublicKeyToken ()
1524 const string assemblyName = "TestAssembly";
1526 an = new AssemblyName (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1));
1527 Assert.IsNull (an.CodeBase, "#A:CodeBase");
1528 Assert.IsNull (an.CultureInfo, "#A:CultureInfo");
1529 Assert.IsNull (an.EscapedCodeBase, "#A:EscapedCodeBase");
1530 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A:Flags");
1531 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A:FullName");
1532 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#A:HashAlgorithm");
1533 Assert.IsNull (an.KeyPair, "#A:KeyPair");
1534 Assert.AreEqual (assemblyName, an.Name, "#A:Name");
1535 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#A:PA");
1536 Assert.IsNull (an.Version, "#A:Version");
1537 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1538 an.VersionCompatibility, "#A:VersionCompatibility");
1539 Assert.IsNull (an.GetPublicKey (), "#A:GetPublicKey");
1540 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A:GetPublicKeyToken");
1541 Assert.AreEqual (an.FullName, an.ToString (), "#A:ToString");
1543 an = new AssemblyName (assemblyName + ", PublicKeyToken=null");
1544 Assert.IsNull (an.CodeBase, "#B:CodeBase");
1545 Assert.IsNull (an.CultureInfo, "#B:CultureInfo");
1546 Assert.IsNull (an.EscapedCodeBase, "#B:EscapedCodeBase");
1547 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B:Flags");
1548 //Assert.AreEqual ("TestAssembly, PublicKeyToken=null", an.FullName, "#B:FullName");
1549 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#B:HashAlgorithm");
1550 Assert.IsNull (an.KeyPair, "#B:KeyPair");
1551 Assert.AreEqual (assemblyName, an.Name, "#B:Name");
1552 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#B:PA");
1553 Assert.IsNull (an.Version, "#B:Version");
1554 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1555 an.VersionCompatibility, "#B:VersionCompatibility");
1556 Assert.IsNull (an.GetPublicKey (), "#B:GetPublicKey");
1557 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#B:GetPublicKeyToken");
1558 Assert.AreEqual (an.FullName, an.ToString (), "#B:ToString");
1561 [Test] // ctor (String)
1562 public void Constructor1_PublicKeyToken_Incomplete ()
1564 const string assemblyName = "TestAssembly";
1567 new AssemblyName (assemblyName + ", PublicKeyToken=");
1569 } catch (FileLoadException ex) {
1570 // The given assembly name or codebase was invalid
1571 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1572 Assert.IsNull (ex.FileName, "#3");
1573 Assert.IsNull (ex.InnerException, "#3");
1574 Assert.IsNotNull (ex.Message, "#4");
1578 [Test] // ctor (String)
1579 public void Constructor1_PublicKeyToken_Invalid ()
1581 const string assemblyName = "TestAssembly";
1584 new AssemblyName (assemblyName + ", PublicKeyToken=27576a8182a188");
1586 } catch (FileLoadException ex) {
1587 // The given assembly name or codebase was invalid
1588 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1589 Assert.IsNull (ex.FileName, "#3");
1590 Assert.IsNull (ex.InnerException, "#3");
1591 Assert.IsNotNull (ex.Message, "#4");
1595 [Test] // ctor (String)
1596 public void Constructor1_Retargetable ()
1598 const string assemblyName = "TestAssembly";
1601 new AssemblyName (assemblyName + ", Retargetable=Yes");
1602 Assert.Fail ("#A1");
1603 } catch (FileLoadException ex) {
1604 // The given assembly name or codebase was invalid
1605 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1606 Assert.IsNull (ex.FileName, "#A3");
1607 Assert.IsNull (ex.InnerException, "#A4");
1608 Assert.IsNotNull (ex.Message, "#A5");
1612 new AssemblyName (assemblyName + ", Retargetable=No");
1613 Assert.Fail ("#B1");
1614 } catch (FileLoadException ex) {
1615 // The given assembly name or codebase was invalid
1616 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1617 Assert.IsNull (ex.FileName, "#B3");
1618 Assert.IsNull (ex.InnerException, "#B4");
1619 Assert.IsNotNull (ex.Message, "#B5");
1623 new AssemblyName (assemblyName + ", Version=1.0.0.0, Retargetable=Yes");
1624 Assert.Fail ("#C1");
1625 } catch (FileLoadException ex) {
1626 // The given assembly name or codebase was invalid
1627 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1628 Assert.IsNull (ex.FileName, "#C3");
1629 Assert.IsNull (ex.InnerException, "#C4");
1630 Assert.IsNotNull (ex.Message, "#C5");
1634 new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, Retargetable=Yes");
1635 Assert.Fail ("#D1");
1636 } catch (FileLoadException ex) {
1637 // The given assembly name or codebase was invalid
1638 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#D2");
1639 Assert.IsNull (ex.FileName, "#D3");
1640 Assert.IsNull (ex.InnerException, "#D4");
1641 Assert.IsNotNull (ex.Message, "#D5");
1645 new AssemblyName (assemblyName + ", Version=1.0.0.0, PublicKeyToken=null, Retargetable=Yes");
1646 Assert.Fail ("#E1");
1647 } catch (FileLoadException ex) {
1648 // The given assembly name or codebase was invalid
1649 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#E2");
1650 Assert.IsNull (ex.FileName, "#E3");
1651 Assert.IsNull (ex.InnerException, "#E4");
1652 Assert.IsNotNull (ex.Message, "#E5");
1655 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=yEs");
1656 Assert.IsNull (an.CodeBase, "F:CodeBase");
1657 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#F:CultureInfo");
1658 Assert.IsNull (an.EscapedCodeBase, "#F:EscapedCodeBase");
1659 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#F:Flags");
1660 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=Yes", an.FullName, "#F:FullName");
1661 Assert.IsNull (an.GetPublicKey (), "#F:GetPublicKey");
1662 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#F:GetPublicKeyToken");
1663 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#F:HashAlgorithm");
1664 Assert.IsNull (an.KeyPair, "#F:KeyPair");
1665 Assert.AreEqual (assemblyName, an.Name, "#F:Name");
1666 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#F:PA");
1667 Assert.AreEqual (an.FullName, an.ToString (), "#F:ToString");
1668 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#F:Version");
1669 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1670 an.VersionCompatibility, "#F:VersionCompatibility");
1672 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=nO");
1673 Assert.IsNull (an.CodeBase, "G:CodeBase");
1674 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#G:CultureInfo");
1675 Assert.IsNull (an.EscapedCodeBase, "#G:EscapedCodeBase");
1676 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G:Flags");
1677 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", an.FullName, "#G:FullName");
1678 Assert.IsNull (an.GetPublicKey (), "#G:GetPublicKey");
1679 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#G:GetPublicKeyToken");
1680 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#G:HashAlgorithm");
1681 Assert.IsNull (an.KeyPair, "#G:KeyPair");
1682 Assert.AreEqual (assemblyName, an.Name, "#G:Name");
1683 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#G:PA");
1684 Assert.AreEqual (an.FullName, an.ToString (), "#G:ToString");
1685 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#G:Version");
1686 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1687 an.VersionCompatibility, "#G:VersionCompatibility");
1689 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=yes");
1690 Assert.IsNull (an.CodeBase, "H:CodeBase");
1691 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#H:CultureInfo");
1692 Assert.IsNull (an.EscapedCodeBase, "#H:EscapedCodeBase");
1693 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#H:Flags");
1694 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=Yes", an.FullName, "#H:FullName");
1695 Assert.IsNull (an.GetPublicKey (), "#H:GetPublicKey");
1696 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#H:GetPublicKeyToken");
1697 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#H:HashAlgorithm");
1698 Assert.IsNull (an.KeyPair, "#H:KeyPair");
1699 Assert.AreEqual (assemblyName, an.Name, "#H:Name");
1700 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#H:PA");
1701 Assert.AreEqual (an.FullName, an.ToString (), "#H:ToString");
1702 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#H:Version");
1703 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1704 an.VersionCompatibility, "#H:VersionCompatibility");
1707 [Test] // ctor (String)
1708 public void Constructor1_Retargetable_Incomplete ()
1710 const string assemblyName = "TestAssembly";
1713 new AssemblyName (assemblyName + ", Retargetable=");
1715 } catch (FileLoadException ex) {
1716 // The given assembly name or codebase was invalid
1717 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1718 Assert.IsNull (ex.FileName, "#3");
1719 Assert.IsNull (ex.InnerException, "#4");
1720 Assert.IsNotNull (ex.Message, "#5");
1724 [Test] // ctor (String)
1725 public void Constructor1_Retargetable_Invalid ()
1727 const string assemblyName = "TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
1730 new AssemblyName (assemblyName + ", Retargetable=False");
1731 Assert.Fail ("#A1");
1732 } catch (FileLoadException ex) {
1733 // The given assembly name or codebase was invalid
1734 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1735 Assert.IsNull (ex.FileName, "#A3");
1736 Assert.IsNull (ex.InnerException, "#A4");
1737 Assert.IsNotNull (ex.Message, "#A5");
1741 new AssemblyName (assemblyName + ", Retargetable=1");
1742 Assert.Fail ("#B1");
1743 } catch (FileLoadException ex) {
1744 // The given assembly name or codebase was invalid
1745 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1746 Assert.IsNull (ex.FileName, "#B3");
1747 Assert.IsNull (ex.InnerException, "#B4");
1748 Assert.IsNotNull (ex.Message, "#B5");
1752 new AssemblyName (assemblyName + ", Retargetable=True");
1753 Assert.Fail ("#C1");
1754 } catch (FileLoadException ex) {
1755 // The given assembly name or codebase was invalid
1756 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1757 Assert.IsNull (ex.FileName, "#C3");
1758 Assert.IsNull (ex.InnerException, "#C4");
1759 Assert.IsNotNull (ex.Message, "#C5");
1763 [Test] // ctor (String)
1764 public void Constructor1_Version ()
1766 const string assemblyName = "TestAssembly";
1767 const string assemblyVersion = "1.2.3.4";
1769 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion);
1770 Assert.IsNull (an.CodeBase, "CodeBase");
1771 Assert.IsNull (an.CultureInfo, "CultureInfo");
1772 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1773 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1774 Assert.AreEqual ("TestAssembly, Version=1.2.3.4", an.FullName, "FullName");
1775 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1776 Assert.IsNull (an.KeyPair, "KeyPair");
1777 Assert.AreEqual (assemblyName, an.Name, "Name");
1778 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1779 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1780 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1781 an.VersionCompatibility, "VersionCompatibility");
1782 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1783 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1784 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1788 [Test] // ctor (String)
1789 public void Constructor1_Version_Incomplete ()
1791 const string assemblyName = "TestAssembly";
1794 new AssemblyName (assemblyName + ", Version=, Culture=neutral");
1796 } catch (FileLoadException ex) {
1797 // The given assembly name or codebase was invalid
1798 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1799 Assert.IsNull (ex.FileName, "#3");
1800 Assert.IsNull (ex.InnerException, "#3");
1801 Assert.IsNotNull (ex.Message, "#4");
1805 [Test] // ctor (String)
1806 public void Constructor1_Version_Invalid ()
1808 const string assemblyName = "TestAssembly";
1811 new AssemblyName (assemblyName + ", Version=a.b");
1813 } catch (FileLoadException ex) {
1814 // The given assembly name or codebase was invalid
1815 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1816 Assert.IsNull (ex.FileName, "#3");
1817 Assert.IsNull (ex.InnerException, "#3");
1818 Assert.IsNotNull (ex.Message, "#4");
1822 [Test (Description="Xamarin bug #99 - whitespaces in key=value")]
1823 public void WhiteSpaceInKeyValue ()
1825 string nameWithSpaces = String.Format ("MySql.Data.Tests, PublicKey = \t {0}, Culture =\tneutral, Version=\t1.2.3.4", GetTokenString (publicKey1));
1826 string fullName = "MySql.Data.Tests, Version=1.2.3.4, Culture=neutral, PublicKeyToken=ce5276d8687ec6dc";
1827 var an = new AssemblyName (nameWithSpaces);
1829 Assert.AreEqual (fullName, an.FullName);
1833 public void ReferenceMatchesDefinition_Compares_Only_SimpleName ()
1835 var an1 = new AssemblyName ("TestDll, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089");
1836 var an2 = new AssemblyName ("TestDll, Version=2.0.0.2001, Culture=en-US, PublicKeyToken=ab7a5c561934e089");
1838 var an3 = new AssemblyName ("TestDll");
1839 var an4 = new AssemblyName ("tesTDlL");
1841 var an5 = new AssemblyName ("TestDll");
1842 var an6 = new AssemblyName ("TestDll2");
1844 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an1, an2));
1845 Assert.IsTrue (AssemblyName.ReferenceMatchesDefinition (an3, an4));
1846 Assert.IsFalse (AssemblyName.ReferenceMatchesDefinition (an5, an6));