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;
16 #if !TARGET_JVM && !MOBILE
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 #if !TARGET_JVM // Thread.GetDomain is not supported for TARGET_JVM.
35 private AppDomain domain;
38 // created with "sn -o test.snk test.txt"
39 static byte[] keyPair = {
40 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53,
41 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
42 0x3D, 0xBD, 0x72, 0x08, 0xC6, 0x2B, 0x0E, 0xA8, 0xC1, 0xC0,
43 0x58, 0x07, 0x2B, 0x63, 0x5F, 0x7C, 0x9A, 0xBD, 0xCB, 0x22,
44 0xDB, 0x20, 0xB2, 0xA9, 0xDA, 0xDA, 0xEF, 0xE8, 0x00, 0x64,
45 0x2F, 0x5D, 0x8D, 0xEB, 0x78, 0x02, 0xF7, 0xA5, 0x36, 0x77,
46 0x28, 0xD7, 0x55, 0x8D, 0x14, 0x68, 0xDB, 0xEB, 0x24, 0x09,
47 0xD0, 0x2B, 0x13, 0x1B, 0x92, 0x6E, 0x2E, 0x59, 0x54, 0x4A,
48 0xAC, 0x18, 0xCF, 0xC9, 0x09, 0x02, 0x3F, 0x4F, 0xA8, 0x3E,
49 0x94, 0x00, 0x1F, 0xC2, 0xF1, 0x1A, 0x27, 0x47, 0x7D, 0x10,
50 0x84, 0xF5, 0x14, 0xB8, 0x61, 0x62, 0x1A, 0x0C, 0x66, 0xAB,
51 0xD2, 0x4C, 0x4B, 0x9F, 0xC9, 0x0F, 0x3C, 0xD8, 0x92, 0x0F,
52 0xF5, 0xFF, 0xCE, 0xD7, 0x6E, 0x5C, 0x6F, 0xB1, 0xF5, 0x7D,
53 0xD3, 0x56, 0xF9, 0x67, 0x27, 0xA4, 0xA5, 0x48, 0x5B, 0x07,
54 0x93, 0x44, 0x00, 0x4A, 0xF8, 0xFF, 0xA4, 0xCB, 0x73, 0xC0,
55 0x6A, 0x62, 0xB4, 0xB7, 0xC8, 0x92, 0x58, 0x87, 0xCD, 0x07,
56 0x0C, 0x7D, 0x6C, 0xC1, 0x4A, 0xFC, 0x82, 0x57, 0x0E, 0x43,
57 0x85, 0x09, 0x75, 0x98, 0x51, 0xBB, 0x35, 0xF5, 0x64, 0x83,
58 0xC7, 0x79, 0x89, 0x5C, 0x55, 0x36, 0x66, 0xAB, 0x27, 0xA4,
59 0xD9, 0xD4, 0x7E, 0x6B, 0x67, 0x64, 0xC1, 0x54, 0x4E, 0x37,
60 0xF1, 0x4E, 0xCA, 0xB3, 0xE5, 0x63, 0x91, 0x57, 0x12, 0x14,
61 0xA6, 0xEA, 0x8F, 0x8F, 0x2B, 0xFE, 0xF3, 0xE9, 0x16, 0x08,
62 0x2B, 0x86, 0xBC, 0x26, 0x0D, 0xD0, 0xC6, 0xC4, 0x1A, 0x72,
63 0x43, 0x76, 0xDC, 0xFF, 0x28, 0x52, 0xA1, 0xDE, 0x8D, 0xFA,
64 0xD5, 0x1F, 0x0B, 0xB5, 0x4F, 0xAF, 0x06, 0x79, 0x11, 0xEE,
65 0xA8, 0xEC, 0xD3, 0x74, 0x55, 0xA2, 0x80, 0xFC, 0xF8, 0xD9,
66 0x50, 0x69, 0x48, 0x01, 0xC2, 0x5A, 0x04, 0x56, 0xB4, 0x3E,
67 0x24, 0x32, 0x20, 0xB5, 0x2C, 0xDE, 0xBB, 0xBD, 0x13, 0xFD,
68 0x13, 0xF7, 0x03, 0x3E, 0xE3, 0x37, 0x84, 0x74, 0xE7, 0xD0,
69 0x5E, 0x9E, 0xB6, 0x26, 0xAE, 0x6E, 0xB0, 0x55, 0x6A, 0x52,
70 0x63, 0x6F, 0x5A, 0x9D, 0xF2, 0x67, 0xD6, 0x61, 0x4F, 0x7A,
71 0x45, 0xEE, 0x5C, 0x3D, 0x2B, 0x7C, 0xB2, 0x40, 0x79, 0x54,
72 0x84, 0xD1, 0xBE, 0x61, 0x3E, 0x5E, 0xD6, 0x18, 0x8E, 0x14,
73 0x98, 0xFC, 0x35, 0xBF, 0x5F, 0x1A, 0x20, 0x2E, 0x1A, 0xD8,
74 0xFF, 0xC4, 0x6B, 0xC0, 0xC9, 0x7D, 0x06, 0xEF, 0x09, 0xF9,
75 0xF3, 0x69, 0xFC, 0xBC, 0xA2, 0xE6, 0x80, 0x22, 0xB9, 0x79,
76 0x7E, 0xEF, 0x57, 0x9F, 0x49, 0xE1, 0xBC, 0x0D, 0xB6, 0xA1,
77 0xFE, 0x8D, 0xBC, 0xBB, 0xA3, 0x05, 0x02, 0x6B, 0x04, 0x45,
78 0xF7, 0x5D, 0xEE, 0x43, 0x06, 0xD6, 0x9C, 0x94, 0x48, 0x1A,
79 0x0B, 0x9C, 0xBC, 0xB4, 0x4E, 0x93, 0x60, 0x87, 0xCD, 0x58,
80 0xD6, 0x9A, 0x39, 0xA6, 0xC0, 0x7F, 0x8E, 0xFF, 0x25, 0xC1,
81 0xD7, 0x2C, 0xF6, 0xF4, 0x6F, 0x24, 0x52, 0x0B, 0x39, 0x42,
82 0x1B, 0x0D, 0x04, 0xC1, 0x93, 0x2A, 0x19, 0x1C, 0xF0, 0xB1,
83 0x9B, 0xC1, 0x24, 0x6D, 0x1B, 0x0B, 0xDA, 0x1C, 0x8B, 0x72,
84 0x48, 0xF0, 0x3E, 0x52, 0xBF, 0x0A, 0x84, 0x3A, 0x9B, 0xC8,
85 0x6D, 0x13, 0x1E, 0x72, 0xF4, 0x46, 0x93, 0x88, 0x1A, 0x5F,
86 0x4C, 0x3C, 0xE5, 0x9D, 0x6E, 0xBB, 0x4E, 0xDD, 0x5D, 0x1F,
87 0x11, 0x40, 0xF4, 0xD7, 0xAF, 0xB3, 0xAB, 0x9A, 0x99, 0x15,
88 0xF0, 0xDC, 0xAA, 0xFF, 0x9F, 0x2D, 0x9E, 0x56, 0x4F, 0x35,
89 0x5B, 0xBA, 0x06, 0x99, 0xEA, 0xC6, 0xB4, 0x48, 0x51, 0x17,
90 0x1E, 0xD1, 0x95, 0x84, 0x81, 0x18, 0xC0, 0xF1, 0x71, 0xDE,
91 0x44, 0x42, 0x02, 0x06, 0xAC, 0x0E, 0xA8, 0xE2, 0xF3, 0x1F,
92 0x96, 0x1F, 0xBE, 0xB6, 0x1F, 0xB5, 0x3E, 0xF6, 0x81, 0x05,
93 0x20, 0xFA, 0x2E, 0x40, 0x2E, 0x4D, 0xA0, 0x0E, 0xDA, 0x42,
94 0x9C, 0x05, 0xAA, 0x9E, 0xAF, 0x5C, 0xF7, 0x3A, 0x3F, 0xBB,
95 0x91, 0x73, 0x45, 0x27, 0xA8, 0xA2, 0x07, 0x4A, 0xEF, 0x59,
96 0x1E, 0x97, 0x9D, 0xE0, 0x30, 0x5A, 0x83, 0xCE, 0x1E, 0x57,
97 0x32, 0x89, 0x43, 0x41, 0x28, 0x7D, 0x14, 0x8D, 0x8B, 0x41,
98 0x1A, 0x56, 0x76, 0x43, 0xDB, 0x64, 0x86, 0x41, 0x64, 0x8D,
99 0x4C, 0x91, 0x83, 0x4E, 0xF5, 0x6C };
101 static byte [] publicKey1 = {
102 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
103 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
104 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
105 0x01, 0x00, 0x3d, 0xbd, 0x72, 0x08, 0xc6, 0x2b, 0x0e, 0xa8,
106 0xc1, 0xc0, 0x58, 0x07, 0x2b, 0x63, 0x5f, 0x7c, 0x9a, 0xbd,
107 0xcb, 0x22, 0xdb, 0x20, 0xb2, 0xa9, 0xda, 0xda, 0xef, 0xe8,
108 0x00, 0x64, 0x2f, 0x5d, 0x8d, 0xeb, 0x78, 0x02, 0xf7, 0xa5,
109 0x36, 0x77, 0x28, 0xd7, 0x55, 0x8d, 0x14, 0x68, 0xdb, 0xeb,
110 0x24, 0x09, 0xd0, 0x2b, 0x13, 0x1b, 0x92, 0x6e, 0x2e, 0x59,
111 0x54, 0x4a, 0xac, 0x18, 0xcf, 0xc9, 0x09, 0x02, 0x3f, 0x4f,
112 0xa8, 0x3e, 0x94, 0x00, 0x1f, 0xc2, 0xf1, 0x1a, 0x27, 0x47,
113 0x7d, 0x10, 0x84, 0xf5, 0x14, 0xb8, 0x61, 0x62, 0x1a, 0x0c,
114 0x66, 0xab, 0xd2, 0x4c, 0x4b, 0x9f, 0xc9, 0x0f, 0x3c, 0xd8,
115 0x92, 0x0f, 0xf5, 0xff, 0xce, 0xd7, 0x6e, 0x5c, 0x6f, 0xb1,
116 0xf5, 0x7d, 0xd3, 0x56, 0xf9, 0x67, 0x27, 0xa4, 0xa5, 0x48,
117 0x5b, 0x07, 0x93, 0x44, 0x00, 0x4a, 0xf8, 0xff, 0xa4, 0xcb };
119 static byte [] pk_token1 = { 0xce, 0x52, 0x76, 0xd8, 0x68, 0x7e, 0Xc6, 0xdc };
121 static byte [] publicKey2 = {
122 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
123 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
124 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
125 0x01, 0x00, 0x6d, 0xfd, 0xba, 0xb9, 0x9d, 0x43, 0xf1, 0xef,
126 0x33, 0xe2, 0xbd, 0x2d, 0x7c, 0x26, 0xe2, 0x9d, 0x37, 0x4a,
127 0xdf, 0xb5, 0x63, 0x12, 0x90, 0x35, 0x90, 0x24, 0x8a, 0xe7,
128 0x5a, 0xc5, 0xa3, 0x3a, 0x84, 0xee, 0x9b, 0xd1, 0xac, 0x3a,
129 0x59, 0x2b, 0x91, 0x97, 0x83, 0x01, 0x4f, 0x92, 0x01, 0xc6,
130 0x3b, 0x96, 0x20, 0x19, 0xeb, 0xdc, 0x2c, 0x6f, 0x1f, 0xbb,
131 0x04, 0x9b, 0x62, 0x39, 0xc0, 0xff, 0x58, 0x64, 0x17, 0x48,
132 0xc2, 0x5b, 0x94, 0x98, 0x35, 0x50, 0x1f, 0x27, 0xbc, 0xea,
133 0x91, 0x92, 0x3f, 0x5c, 0x33, 0x12, 0x17, 0x65, 0x56, 0x3e,
134 0x40, 0x44, 0x27, 0x1d, 0xef, 0x0e, 0x72, 0xab, 0xd4, 0xf0,
135 0x49, 0xa3, 0x95, 0x1a, 0x61, 0xb4, 0x47, 0x90, 0x20, 0xcc,
136 0x50, 0xa4, 0x4d, 0x8b, 0x8a, 0x58, 0x17, 0x70, 0xa4, 0x53,
137 0xe4, 0xdc, 0x73, 0x5d, 0x8c, 0x4e, 0xb8, 0xd3, 0xa9, 0xbf };
139 static byte [] publicKey3 = {
140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
143 static byte [] pk_token3 = { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 };
149 if (Directory.Exists (tempDir))
150 Directory.Delete (tempDir, true);
155 Directory.CreateDirectory (tempDir);
157 #if !TARGET_JVM // Thread.GetDomain is not supported for TARGET_JVM.
158 domain = Thread.GetDomain ();
163 public void TearDown ()
166 if (Directory.Exists (tempDir))
167 Directory.Delete (tempDir, true);
170 // This can happen on windows when the directory contains
171 // files opened by the CLR
176 public void Constructor0 ()
178 an = new AssemblyName ();
179 Assert.IsNull (an.CodeBase, "CodeBase");
180 Assert.IsNull (an.CultureInfo, "CultureInfo");
181 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
182 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
183 Assert.AreEqual (String.Empty, an.FullName, "FullName");
184 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
185 Assert.IsNull (an.KeyPair, "KeyPair");
186 Assert.IsNull (an.Name, "Name");
187 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
188 Assert.IsNull (an.Version, "Version");
189 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
190 an.VersionCompatibility, "VersionCompatibility");
191 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
192 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
193 Assert.AreEqual (string.Empty, an.ToString (), "ToString");
197 public void SetPublicKey ()
199 an = new AssemblyName ();
200 Assert.IsNull (an.GetPublicKey (), "#A1");
201 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A2");
202 Assert.IsNull (an.KeyPair, "#A3");
203 Assert.IsNull (an.GetPublicKeyToken (), "#A4");
205 an.SetPublicKey (publicKey1);
207 Assert.AreEqual (publicKey1, an.GetPublicKey (), "#B1");
208 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#B2");
209 Assert.IsNull (an.KeyPair, "#B3");
210 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B4");
211 an.SetPublicKey (keyPair);
212 Assert.AreEqual (keyPair, an.GetPublicKey (), "#B5");
213 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B6");
215 an.SetPublicKey ((byte []) null);
217 Assert.IsNull (an.GetPublicKey (), "#C1");
218 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#C2");
219 Assert.IsNull (an.KeyPair, "#C3");
220 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C4");
222 an.SetPublicKey (publicKey1);
223 an.SetPublicKeyToken (pk_token1);
224 an.SetPublicKey ((byte []) null);
226 Assert.IsNull (an.GetPublicKey (), "#D1");
227 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#D2");
228 Assert.IsNull (an.KeyPair, "#D3");
229 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#D4");
231 an.SetPublicKey ((byte []) null);
232 an.SetPublicKeyToken (pk_token1);
233 an.SetPublicKey ((byte []) null);
235 Assert.IsNull (an.GetPublicKey (), "#E1");
236 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#E2");
237 Assert.IsNull (an.KeyPair, "#E3");
238 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#E4");
240 an = new AssemblyName ();
241 an.SetPublicKey (publicKey1);
242 an.SetPublicKey ((byte []) null);
243 an.SetPublicKeyToken (pk_token1);
244 an.SetPublicKey ((byte []) null);
246 Assert.IsNull (an.GetPublicKey (), "#F1");
247 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#F2");
248 Assert.IsNull (an.KeyPair, "#F3");
249 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#F4");
251 an = new AssemblyName ();
252 an.SetPublicKey (publicKey1);
253 an.SetPublicKey ((byte []) null);
254 an.SetPublicKeyToken (pk_token1);
256 Assert.IsNull (an.GetPublicKey (), "#G1");
257 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G2");
258 Assert.IsNull (an.KeyPair, "#G3");
259 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#G4");
261 an = new AssemblyName ();
262 an.SetPublicKey (new byte [0]);
264 Assert.IsNotNull (an.GetPublicKey (), "#H1");
265 Assert.AreEqual (0, an.GetPublicKey ().Length, "#H2");
266 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#H3");
267 Assert.IsNull (an.KeyPair, "#H4");
268 Assert.IsNotNull (an.GetPublicKeyToken (), "#H5");
269 Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#H6");
271 an = new AssemblyName ();
272 an.SetPublicKey (publicKey1);
273 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I1");
274 an.SetPublicKey (publicKey1);
275 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I2");
277 an = new AssemblyName ();
278 an.SetPublicKey ((byte []) null);
279 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J1");
280 an.SetPublicKey ((byte []) null);
281 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#J2");
282 an.SetPublicKey ((byte []) null);
283 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J3");
284 an.SetPublicKey (publicKey1);
285 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J4");
286 Assert.AreEqual (publicKey1, an.GetPublicKey (), "#J5");
287 an.SetPublicKey (publicKey2);
288 Assert.AreEqual (publicKey2, an.GetPublicKey (), "#J6");
292 public void SetPublicKey_PublicKey_Invalid ()
294 an = new AssemblyName ();
295 an.SetPublicKey (new byte [] { 0x0b, 0x0a });
296 Assert.AreEqual (new byte [] { 0x0b, 0x0a }, an.GetPublicKey (), "#1");
300 public void SetPublicKeyToken ()
302 an = new AssemblyName ();
303 an.SetPublicKeyToken (pk_token1);
305 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
306 Assert.IsNull (an.KeyPair, "#A2");
307 Assert.IsNull (an.GetPublicKey (), "#A3");
308 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A4");
310 an.SetPublicKeyToken ((byte []) null);
312 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
313 Assert.IsNull (an.KeyPair, "#B2");
314 Assert.IsNull (an.GetPublicKey (), "#B3");
315 Assert.IsNull (an.GetPublicKeyToken (), "#B4");
317 an.SetPublicKeyToken (new byte [0]);
319 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#C1");
320 Assert.IsNull (an.KeyPair, "#C2");
321 Assert.IsNull (an.GetPublicKey (), "#C3");
322 Assert.IsNotNull (an.GetPublicKeyToken (), "#C4");
323 Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#C5");
327 public void KeyPair ()
329 an = new AssemblyName ();
331 an.KeyPair = new StrongNameKeyPair (keyPair);
333 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
334 Assert.IsNotNull (an.KeyPair, "#A2");
335 Assert.IsNull (an.GetPublicKey (), "#A3");
336 Assert.IsNull (an.GetPublicKeyToken (), "#A4");
337 Assert.AreEqual ("test", an.FullName, "#A5");
341 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
342 Assert.IsNull (an.KeyPair, "#B2");
343 Assert.IsNull (an.GetPublicKey (), "#B3");
344 Assert.IsNull (an.GetPublicKeyToken (), "#B4");
345 Assert.AreEqual ("test", an.FullName, "#B5");
348 // !!! this assembly MUST NOT use a StrongName !!!
352 Assembly a = Assembly.GetExecutingAssembly ();
355 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
356 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
357 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, an.HashAlgorithm, "HashAlgorithm");
358 Assert.IsNull (an.KeyPair, "KeyPair");
359 Assert.IsNotNull (an.Name, "Name");
360 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA");
361 Assert.AreEqual (new Version (0, 0, 0, 0), an.Version, "Version");
362 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
363 an.VersionCompatibility, "VersionCompatibility");
364 Assert.AreEqual (new byte [0], an.GetPublicKey (), "GetPublicKey");
365 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
369 public void Flags_Corlib ()
371 an = typeof (int).Assembly.GetName ();
372 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
376 public void Flags_Self ()
378 Assembly a = Assembly.GetExecutingAssembly ();
380 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
384 public void FullName_Corlib ()
386 an = typeof(int).Assembly.GetName ();
387 Assert.IsNotNull (an.FullName, "#1");
389 string AssemblyCorlib;
391 AssemblyCorlib = "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e";
393 AssemblyCorlib = "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
395 AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
397 Assert.AreEqual (AssemblyCorlib, an.FullName, "#2");
401 public void FullName_Self ()
403 Assembly a = Assembly.GetExecutingAssembly ();
406 Assert.IsNotNull (an.FullName, "#1");
407 Assert.IsTrue (an.FullName.IndexOf ("Version=0.0.0.0") != -1, "#2");
408 Assert.IsTrue (an.FullName.IndexOf ("Culture=neutral") != -1, "#3");
409 Assert.IsTrue (an.FullName.IndexOf ("PublicKeyToken=null") != -1, "#4");
413 public void FullName_Flags ()
415 const string assemblyName = "TestAssembly";
417 // tests for AssemblyName with only name
418 an = new AssemblyName ();
419 an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer |
420 AssemblyNameFlags.EnableJITcompileTracking |
421 AssemblyNameFlags.PublicKey |
422 AssemblyNameFlags.Retargetable;
423 an.Name = assemblyName;
424 Assert.AreEqual (assemblyName + ", Retargetable=Yes", an.FullName, "#1");
425 an.Flags = AssemblyNameFlags.None;
426 Assert.AreEqual (assemblyName, an.FullName, "#2");
430 public void FullName_Name ()
432 const string assemblyName = "TestAssembly";
434 // tests for AssemblyName with only name
435 an = new AssemblyName ();
436 an.Name = assemblyName;
437 Assert.IsNotNull (an.FullName, "FullName2#1");
438 Assert.AreEqual (an.Name, an.FullName, "FullName2#2");
439 Assert.AreEqual (-1, an.FullName.IndexOf ("Culture="), "FullName2#3");
440 Assert.AreEqual (-1, an.FullName.IndexOf ("PublicKeyToken="), "FullName2#4");
444 public void FullName_Version ()
446 const string assemblyName = "TestAssembly";
447 const string assemblyVersion = "1.2";
449 // tests for AssemblyName with name and version
450 an = new AssemblyName ();
451 an.Name = assemblyName;
452 an.Version = new Version (assemblyVersion);
453 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion, an.FullName, "FullName3#1");
457 public void FullName_Culture ()
459 const string assemblyName = "TestAssembly";
461 // tests for AssemblyName with name and neutral culture
462 an = new AssemblyName ();
463 an.Name = assemblyName;
464 an.CultureInfo = CultureInfo.InvariantCulture;
465 Assert.AreEqual (assemblyName + ", Culture=neutral", an.FullName, "#1");
466 an.CultureInfo = new CultureInfo ("nl-BE");
467 Assert.AreEqual (assemblyName + ", Culture=nl-BE", an.FullName, "#2");
469 Assert.AreEqual (string.Empty, an.FullName, "#3");
473 public void FullName_PublicKey ()
475 const string assemblyName = "TestAssembly";
477 // tests for AssemblyName with name and public key
478 an = new AssemblyName ();
479 an.Name = assemblyName;
480 an.SetPublicKey (publicKey1);
481 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
482 an.SetPublicKey ((byte []) null);
483 Assert.AreEqual (assemblyName, an.FullName, "#A2");
484 an.SetPublicKey (new byte [0]);
485 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
487 Assert.AreEqual (string.Empty, an.FullName, "#A4");
489 an = new AssemblyName ();
490 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
491 an.Name = assemblyName;
492 an.SetPublicKey (publicKey1);
493 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
494 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
495 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
496 an.SetPublicKeyToken ((byte []) null);
497 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B3");
499 Assert.AreEqual (string.Empty, an.FullName, "#B4");
501 an = new AssemblyName ();
502 an.HashAlgorithm = AssemblyHashAlgorithm.None;
503 an.Name = assemblyName;
504 an.SetPublicKey (publicKey1);
505 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
506 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
507 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#C2");
508 an.SetPublicKeyToken ((byte []) null);
509 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C3");
511 Assert.AreEqual (string.Empty, an.FullName, "#C4");
513 an = new AssemblyName ();
514 an.Name = assemblyName;
515 an.SetPublicKey (new byte [0]);
516 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
518 Assert.AreEqual (string.Empty, an.FullName, "#D2");
519 an.SetPublicKey (publicKey3);
520 Assert.AreEqual (string.Empty, an.FullName, "#D3");
521 an.Name = assemblyName;
522 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "#D4");
526 public void FullName_PublicKey_KeyPair ()
528 const string assemblyName = "TestAssembly";
530 // tests for AssemblyName with name and public key
531 an = new AssemblyName ();
532 an.Name = assemblyName;
533 an.SetPublicKey (keyPair);
535 Assert.Fail ("#A1: " + an.FullName);
536 } catch (SecurityException ex) {
537 // Invalid assembly public key
538 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#A2");
539 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#A3");
540 Assert.IsNull (ex.InnerException, "#A4");
541 Assert.IsNotNull (ex.Message, "#A5");
544 an.SetPublicKeyToken (new byte [0]);
545 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#B1");
547 an.SetPublicKeyToken ((byte []) null);
549 Assert.Fail ("#C1: " + an.FullName);
550 } catch (SecurityException ex) {
551 // Invalid assembly public key
552 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#C2");
553 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#C3");
554 Assert.IsNull (ex.InnerException, "#C4");
555 Assert.IsNotNull (ex.Message, "#C5");
558 an.SetPublicKeyToken (new byte [0]);
559 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
560 an.SetPublicKey (publicKey1);
561 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
562 an.SetPublicKeyToken ((byte []) null);
563 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
567 public void FullName_PublicKeyToken ()
569 const string assemblyName = "TestAssembly";
571 an = new AssemblyName ();
572 an.Name = assemblyName;
573 an.SetPublicKeyToken (pk_token1);
574 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
575 an.SetPublicKeyToken ((byte []) null);
576 Assert.AreEqual (assemblyName, an.FullName, "#A2");
577 an.SetPublicKeyToken (new byte [0]);
578 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
579 an.SetPublicKeyToken (pk_token1);
580 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A4");
582 Assert.AreEqual (string.Empty, an.FullName, "#A5");
584 an = new AssemblyName ();
585 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
586 an.Name = assemblyName;
587 an.SetPublicKeyToken (pk_token1);
588 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
589 an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
590 Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
591 an.SetPublicKeyToken ((byte []) null);
592 Assert.AreEqual (assemblyName, an.FullName, "#B3");
594 Assert.AreEqual (string.Empty, an.FullName, "#B4");
596 an = new AssemblyName ();
597 an.Name = assemblyName;
598 an.SetPublicKey (publicKey1);
599 an.SetPublicKeyToken (pk_token1);
600 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
601 an.SetPublicKey ((byte []) null);
602 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C2");
603 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C3");
604 an.SetPublicKey (new byte [0]);
605 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C4");
606 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C5");
608 an = new AssemblyName ();
609 an.Name = assemblyName;
610 an.SetPublicKey (publicKey1);
611 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D1");
612 an.SetPublicKey (new byte [0]);
613 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
614 an.SetPublicKeyToken (pk_token1);
615 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
616 an.SetPublicKey ((byte []) null);
617 Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D4");
621 public void FullName_VersionCulture ()
623 const string assemblyName = "TestAssembly";
624 const string assemblyVersion = "1.2";
626 // tests for AssemblyName with name, version and neutral culture
627 an = new AssemblyName ();
628 an.Name = assemblyName;
629 an.Version = new Version (assemblyVersion);
630 an.CultureInfo = CultureInfo.InvariantCulture;
631 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
632 + ", Culture=neutral", an.FullName, "#1");
633 an.CultureInfo = new CultureInfo ("en-US");
634 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
635 + ", Culture=en-US", an.FullName, "#2");
636 an.CultureInfo = new CultureInfo ("en");
637 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
638 + ", Culture=en", an.FullName, "#3");
642 public void FullName_VersionPublicKey ()
644 const string assemblyName = "TestAssembly";
645 const string assemblyVersion = "1.2";
647 // tests for AssemblyName with name, version and public key
648 an = new AssemblyName ();
649 an.Name = assemblyName;
650 an.Version = new Version (assemblyVersion);
651 an.SetPublicKey (publicKey1);
652 an.SetPublicKeyToken (pk_token1);
653 Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
654 + ", PublicKeyToken=" + GetTokenString (pk_token1),
659 public void FullName_CulturePublicKey ()
661 const string assemblyName = "TestAssembly";
663 // tests for AssemblyName with name, culture and public key
664 an = new AssemblyName ();
665 an.Name = assemblyName;
666 an.CultureInfo = CultureInfo.InvariantCulture;
667 an.SetPublicKey (publicKey1);
668 an.SetPublicKeyToken (pk_token1);
669 Assert.AreEqual (assemblyName + ", Culture=neutral"
670 + ", PublicKeyToken=" + GetTokenString (pk_token1),
675 public void GetPublicKeyToken ()
677 const string assemblyName = "TestAssembly";
679 an = new AssemblyName ();
680 an.SetPublicKey (publicKey1);
681 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A1");
682 an.SetPublicKey (publicKey2);
683 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A2");
684 an.SetPublicKeyToken (new byte [] { 0x0a });
685 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A3");
686 an.SetPublicKey (publicKey1);
687 Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A4");
688 an.SetPublicKeyToken (new byte [0]);
689 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A5");
690 an.Name = assemblyName;
691 an.SetPublicKey (publicKey2);
692 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A6");
693 Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A7");
695 an = new AssemblyName ();
696 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
697 an.SetPublicKey (publicKey1);
698 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B1");
700 an = new AssemblyName ();
701 an.HashAlgorithm = AssemblyHashAlgorithm.None;
702 an.SetPublicKey (publicKey1);
703 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C1");
705 an = new AssemblyName ();
706 an.SetPublicKeyToken (new byte [0]);
707 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#D1");
708 an.SetPublicKeyToken (new byte [] { 0x0b, 0xff });
709 Assert.AreEqual (new byte [] { 0x0b, 0xff }, an.GetPublicKeyToken (), "#D2");
710 an.SetPublicKeyToken ((byte []) null);
711 Assert.IsNull (an.GetPublicKeyToken (), "#D3");
713 an = new AssemblyName ();
714 an.SetPublicKey (keyPair);
716 an.GetPublicKeyToken ();
718 } catch (SecurityException ex) {
719 // Invalid assembly public key
720 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#E2");
721 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#E3");
722 Assert.IsNull (ex.InnerException, "#E4");
723 Assert.IsNotNull (ex.Message, "#E5");
728 public void GetPublicKeyToken_Corlib ()
730 an = typeof (int).Assembly.GetName ();
731 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
732 Assert.IsTrue (an.GetPublicKeyToken ().Length > 0, "#2");
736 public void GetPublicGetToken_Ecma ()
738 const string assemblyName = "TestAssembly";
740 an = new AssemblyName ();
741 an.Name = assemblyName;
742 an.SetPublicKey (publicKey3);
743 Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
744 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "#2");
748 public void GetPublicKeyToken_Self ()
750 Assembly a = Assembly.GetExecutingAssembly ();
752 Assert.AreEqual (new byte [0], an.GetPublicKeyToken ());
755 static int nameIndex = 0;
757 private AssemblyName GenAssemblyName ()
759 AssemblyName assemblyName = new AssemblyName();
760 assemblyName.Name = "MonoTests.System.Reflection.AssemblyNameTest" + (nameIndex ++);
764 #if !TARGET_JVM && !MOBILE // Reflection.Emit is not supported for TARGET_JVM.
765 private Assembly GenerateAssembly (AssemblyName name)
767 AssemblyBuilder ab = domain.DefineDynamicAssembly (
769 AssemblyBuilderAccess.RunAndSave,
771 ab.DefineDynamicModule ("def_module");
772 ab.Save (name.Name + ".dll");
774 return Assembly.LoadFrom (Path.Combine (tempDir, name.Name + ".dll"));
777 private AssemblyBuilder GenerateDynamicAssembly (AssemblyName name)
779 AssemblyBuilder ab = domain.DefineDynamicAssembly (
781 AssemblyBuilderAccess.Run);
787 public void TestCultureInfo ()
793 name = GenAssemblyName ();
794 name.CultureInfo = CultureInfo.CreateSpecificCulture ("ar-DZ");
795 a = GenerateAssembly (name);
796 culture = a.GetName ().CultureInfo;
797 Assert.IsFalse (culture.IsNeutralCulture, "#A1");
798 Assert.IsFalse (culture.IsReadOnly, "#A2");
799 Assert.AreEqual (5121, culture.LCID, "#A3");
800 Assert.AreEqual ("ar-DZ", culture.Name, "#A4");
801 Assert.IsTrue (culture.UseUserOverride, "#A5");
803 name = GenAssemblyName ();
804 name.CultureInfo = new CultureInfo ("en");
805 a = GenerateAssembly (name);
806 culture = a.GetName ().CultureInfo;
807 Assert.IsTrue (culture.IsNeutralCulture, "#B1");
808 Assert.IsFalse (culture.IsReadOnly, "#B2");
809 Assert.AreEqual (9, culture.LCID, "#B3");
810 Assert.AreEqual ("en", culture.Name, "#B4");
811 Assert.IsTrue (culture.UseUserOverride, "#B5");
813 name = GenAssemblyName ();
814 name.CultureInfo = CultureInfo.InvariantCulture;
815 a = GenerateAssembly (name);
816 culture = a.GetName ().CultureInfo;
817 Assert.IsFalse (culture.IsNeutralCulture, "#C1");
818 Assert.IsFalse (culture.IsReadOnly, "#C2");
819 Assert.AreEqual (127, culture.LCID, "#C3");
820 Assert.AreEqual (string.Empty, culture.Name, "#C4");
821 Assert.IsFalse (culture.UseUserOverride, "#C5");
823 a = typeof (int).Assembly;
825 culture = name.CultureInfo;
826 Assert.IsFalse (culture.IsNeutralCulture, "#D1");
827 Assert.IsFalse (culture.IsReadOnly, "#D2");
828 Assert.AreEqual (127, culture.LCID, "#D3");
829 Assert.AreEqual (string.Empty, culture.Name, "#D4");
830 Assert.IsFalse (culture.UseUserOverride, "#D5");
832 a = Assembly.GetExecutingAssembly ();
834 culture = name.CultureInfo;
835 Assert.IsFalse (culture.IsNeutralCulture, "#E1");
836 Assert.IsFalse (culture.IsReadOnly, "#E2");
837 Assert.AreEqual (127, culture.LCID, "#E3");
838 Assert.AreEqual (string.Empty, culture.Name, "#E4");
839 Assert.IsFalse (culture.UseUserOverride, "#E5");
841 AssemblyName [] names = a.GetReferencedAssemblies ();
842 foreach (AssemblyName an in names) {
843 culture = an.CultureInfo;
844 Assert.IsFalse (culture.IsNeutralCulture, "#F1:" + an.Name);
845 Assert.IsFalse (culture.IsReadOnly, "#F2:" + an.Name);
846 Assert.AreEqual (127, culture.LCID, "#F3:" + an.Name);
847 Assert.AreEqual (string.Empty, culture.Name, "#F4:" + an.Name);
848 Assert.IsFalse (culture.UseUserOverride, "#F5:" + an.Name);
853 public void Version ()
855 AssemblyName name = GenAssemblyName ();
856 name.Version = new Version (1, 2, 3, 4);
858 Assembly a = GenerateAssembly (name);
859 Assert.AreEqual ("1.2.3.4", a.GetName ().Version.ToString (), "1.2.3.4 normal");
861 name = GenAssemblyName ();
862 name.Version = new Version (1, 2, 3);
864 a = GenerateAssembly (name);
865 Assert.AreEqual ("1.2.3.0", a.GetName ().Version.ToString (), "1.2.3.0 normal");
867 name = GenAssemblyName ();
868 name.Version = new Version (1, 2);
870 a = GenerateAssembly (name);
871 Assert.AreEqual ("1.2.0.0", a.GetName ().Version.ToString (), "1.2.0.0 normal");
875 public void Version_Dynamic ()
877 AssemblyName name = GenAssemblyName ();
878 name.Version = new Version (1, 2, 3, 4);
880 AssemblyBuilder ab = GenerateDynamicAssembly (name);
881 Assert.AreEqual ("1.2.3.4", ab.GetName ().Version.ToString (), "1.2.3.4 dynamic");
883 name = GenAssemblyName ();
884 name.Version = new Version (1, 2, 3);
886 ab = GenerateDynamicAssembly (name);
887 Assert.AreEqual ("1.2.3.0", ab.GetName ().Version.ToString (), "1.2.3.0 dynamic");
889 name = GenAssemblyName ();
890 name.Version = new Version (1, 2);
892 ab = GenerateDynamicAssembly (name);
893 Assert.AreEqual ("1.2.0.0", ab.GetName ().Version.ToString (), "1.2.0.0 dynamic");
898 public void HashAlgorithm ()
900 Assert.AreEqual (AssemblyHashAlgorithm.SHA1,
901 typeof (int).Assembly.GetName ().HashAlgorithm);
905 public void Serialization ()
907 an = new AssemblyName ();
908 an.CodeBase = "http://www.test.com/test.dll";
909 an.CultureInfo = CultureInfo.InvariantCulture;
910 an.Flags = AssemblyNameFlags.PublicKey;
911 an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
912 an.KeyPair = new StrongNameKeyPair (publicKey1);
913 an.Name = "TestAssembly";
914 an.Version = new Version (1, 5);
915 an.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
917 MemoryStream ms = new MemoryStream ();
918 BinaryFormatter bf = new BinaryFormatter ();
919 bf.Serialize (ms, an);
921 // reset position of memorystream
924 // deserialze assembly name
925 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
927 // close the memorystream
930 // compare orginal and deserialized assembly name
931 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
932 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
933 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
934 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
935 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
936 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
937 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
938 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
939 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
940 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
941 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
942 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
946 public void Serialization_WithoutStrongName ()
948 an = new AssemblyName ();
949 an.CodeBase = "http://www.test.com/test.dll";
950 an.CultureInfo = CultureInfo.InvariantCulture;
951 an.Flags = AssemblyNameFlags.None;
952 an.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
954 an.Name = "TestAssembly2";
955 an.Version = new Version (1, 5, 0, 0);
956 an.VersionCompatibility = AssemblyVersionCompatibility.SameMachine;
958 MemoryStream ms = new MemoryStream ();
959 BinaryFormatter bf = new BinaryFormatter ();
960 bf.Serialize (ms, an);
962 // reset position of memorystream
965 // deserialze assembly name
966 AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
968 // close the memorystream
971 // compare orginal and deserialized assembly name
972 Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
973 Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
974 Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
975 Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
976 Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
977 Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
978 Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
979 Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
980 Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
981 Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
982 Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
983 Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
986 #if !TARGET_JVM // Assemblyname.GetObjectData not implemented yet for TARGET_JVM
988 public void GetObjectData_Info_Null ()
990 an = new AssemblyName ();
992 an.GetObjectData (null, new StreamingContext (StreamingContextStates.All));
994 } catch (ArgumentNullException ex) {
995 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
996 Assert.IsNull (ex.InnerException, "#3");
997 Assert.IsNotNull (ex.Message, "#4");
998 Assert.IsNotNull (ex.ParamName, "#5");
999 Assert.AreEqual ("info", ex.ParamName, "#6");
1002 #endif // TARGET_JVM
1005 public void Clone_Corlib ()
1007 an = typeof (int).Assembly.GetName ();
1008 AssemblyName clone = (AssemblyName) an.Clone ();
1010 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1011 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1012 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1013 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1014 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1015 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1016 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1017 Assert.AreEqual (an.Name, clone.Name, "Name");
1018 //Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1019 Assert.AreEqual (an.Version, clone.Version, "Version");
1020 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1021 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1022 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1023 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1027 public void Clone_Empty ()
1029 an = new AssemblyName ();
1030 AssemblyName clone = (AssemblyName) an.Clone ();
1032 Assert.IsNull (clone.CodeBase, "CodeBase");
1033 Assert.IsNull (clone.CultureInfo, "CultureInfo");
1034 Assert.IsNull (clone.EscapedCodeBase, "EscapedCodeBase");
1035 Assert.AreEqual (AssemblyNameFlags.None, clone.Flags, "Flags");
1036 Assert.AreEqual (String.Empty, clone.FullName, "FullName");
1037 Assert.AreEqual (AssemblyHashAlgorithm.None, clone.HashAlgorithm, "HashAlgorithm");
1038 Assert.IsNull (clone.KeyPair, "KeyPair");
1039 Assert.IsNull (clone.Name, "Name");
1040 Assert.AreEqual (ProcessorArchitecture.None, clone.ProcessorArchitecture, "PA");
1041 Assert.IsNull (clone.Version, "Version");
1042 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1043 clone.VersionCompatibility, "VersionCompatibility");
1047 public void Clone_Self ()
1049 an = Assembly.GetExecutingAssembly ().GetName ();
1050 AssemblyName clone = (AssemblyName) an.Clone ();
1052 Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
1053 Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
1054 Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
1055 Assert.AreEqual (an.Flags, clone.Flags, "Flags");
1056 Assert.AreEqual (an.FullName, clone.FullName, "FullName");
1057 Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
1058 Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
1059 Assert.AreEqual (an.Name, clone.Name, "Name");
1060 Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
1061 Assert.AreEqual (an.Version, clone.Version, "Version");
1062 Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
1063 Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
1064 Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
1065 Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
1069 [ExpectedException (typeof (FileNotFoundException))]
1070 public void GetAssemblyName_AssemblyFile_DoesNotExist ()
1072 AssemblyName.GetAssemblyName (Path.Combine (tempDir, "doesnotexist.dll"));
1076 [Category ("NotWorking")]
1077 public void GetAssemblyName_AssemblyFile_ReadLock ()
1079 string file = Path.Combine (tempDir, "loadfailure.dll");
1080 using (FileStream fs = File.Open (file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None)) {
1082 AssemblyName.GetAssemblyName (file);
1084 } catch (FileLoadException ex) {
1085 // Could not load file or assembly '...' or one
1086 // of its dependencies. The process cannot access
1087 // the file because it is being used by another
1089 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1090 Assert.IsNotNull (ex.FileName, "#3");
1091 Assert.AreEqual (file, ex.FileName, "#4");
1092 Assert.IsNull (ex.InnerException, "#5");
1093 Assert.IsNotNull (ex.Message, "#6");
1100 public void GetAssemblyName_AssemblyFile_BadImage ()
1102 string file = Path.Combine (tempDir, "badimage.dll");
1103 using (StreamWriter sw = File.CreateText (file)) {
1104 sw.WriteLine ("somegarbage");
1107 AssemblyName.GetAssemblyName (file);
1109 } catch (BadImageFormatException ex) {
1110 Assert.AreEqual (typeof (BadImageFormatException), ex.GetType (), "#2");
1111 Assert.IsNotNull (ex.FileName, "#3");
1112 Assert.AreEqual (file, ex.FileName, "#4");
1113 Assert.IsNull (ex.InnerException, "#5");
1114 Assert.IsNotNull (ex.Message, "#6");
1121 public void GetAssemblyName_CodeBase ()
1123 Assembly execAssembly = Assembly.GetExecutingAssembly ();
1125 AssemblyName aname = AssemblyName.GetAssemblyName (execAssembly.Location);
1126 Assert.IsNotNull (aname.CodeBase, "#1");
1127 Assert.AreEqual (execAssembly.CodeBase, aname.CodeBase, "#2");
1132 private string GetTokenString (byte[] value)
1134 string tokenString = "";
1135 for (int i = 0; i < value.Length; i++) {
1136 tokenString += value[i].ToString ("x2");
1141 [Test] // ctor (String)
1142 public void Constructor1_Name ()
1144 const string assemblyName = "TestAssembly";
1146 an = new AssemblyName (assemblyName);
1147 Assert.IsNull (an.CodeBase, "CodeBase");
1148 Assert.IsNull (an.CultureInfo, "CultureInfo");
1149 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1150 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1151 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1152 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1153 Assert.IsNull (an.KeyPair, "KeyPair");
1154 Assert.AreEqual (assemblyName, an.Name, "Name");
1155 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1156 Assert.IsNull (an.Version, "Version");
1157 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1158 an.VersionCompatibility, "VersionCompatibility");
1159 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1160 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1161 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1163 Assert.IsNull (an.CultureName, "CultureName");
1164 Assert.AreEqual (AssemblyContentType.Default, an.ContentType, "ContentType");
1168 [Test] // ctor (String)
1169 [Category("TargetJvmNotWorking")] // Not yet supported for TARGET_JVM.
1170 public void Constructor1_Full ()
1172 const string assemblyName = "TestAssembly";
1173 const string assemblyCulture = "neutral";
1174 const string assemblyVersion = "1.2.3.4";
1176 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion +
1177 ", Culture=" + assemblyCulture + ", PublicKeyToken=" + GetTokenString (pk_token1) + ",ProcessorArchitecture=X86");
1178 Assert.IsNull (an.CodeBase, "CodeBase");
1179 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
1180 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1181 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1182 Assert.AreEqual ("TestAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=" +
1183 GetTokenString (pk_token1), an.FullName, "FullName");
1184 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1185 Assert.IsNull (an.KeyPair, "KeyPair");
1186 Assert.AreEqual (assemblyName, an.Name, "Name");
1187 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1188 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1189 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1190 an.VersionCompatibility, "VersionCompatibility");
1191 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1192 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1193 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1196 [Test] // ctor (String)
1197 public void Constructor1_AssemblyName_Empty ()
1200 new AssemblyName (string.Empty);
1202 } catch (ArgumentException ex) {
1203 // String cannot have zero length
1204 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1205 Assert.IsNull (ex.InnerException, "#3");
1206 Assert.IsNotNull (ex.Message, "#4");
1207 Assert.IsNull (ex.ParamName, "#5");
1211 [Test] // ctor (String)
1212 public void Constructor1_AssemblyName_Invalid ()
1214 const string assemblyName = "TestAssembly";
1217 new AssemblyName (assemblyName + ", =1.2.4.5");
1218 Assert.Fail ("#A1");
1219 } catch (FileLoadException ex) {
1220 // The given assembly name or codebase was invalid
1221 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1222 Assert.IsNull (ex.FileName, "#3");
1223 Assert.IsNull (ex.InnerException, "#3");
1224 Assert.IsNotNull (ex.Message, "#4");
1228 new AssemblyName (assemblyName + ", OtherAttribute");
1229 Assert.Fail ("#B1");
1230 } catch (FileLoadException ex) {
1231 // The given assembly name or codebase was invalid
1232 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1233 Assert.IsNull (ex.FileName, "#3");
1234 Assert.IsNull (ex.InnerException, "#3");
1235 Assert.IsNotNull (ex.Message, "#4");
1239 [Test] // ctor (String)
1240 public void Constructor1_AssemblyName_Null ()
1243 new AssemblyName (null);
1245 } catch (ArgumentNullException ex) {
1246 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1247 Assert.IsNull (ex.InnerException, "#3");
1248 Assert.IsNotNull (ex.Message, "#4");
1249 Assert.IsNotNull (ex.ParamName, "#5");
1250 Assert.AreEqual ("assemblyName", ex.ParamName, "#6");
1254 [Test] // ctor (String)
1255 public void Constructor1_Culture ()
1257 const string assemblyName = "TestAssembly";
1258 const string assemblyCulture = "en-US";
1260 an = new AssemblyName (assemblyName + ", Culture=" + assemblyCulture);
1261 Assert.IsNull (an.CodeBase, "CodeBase");
1262 Assert.AreEqual (new CultureInfo (assemblyCulture), an.CultureInfo, "CultureInfo");
1263 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1264 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1265 Assert.AreEqual ("TestAssembly, Culture=en-US", an.FullName, "FullName");
1266 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1267 Assert.IsNull (an.KeyPair, "KeyPair");
1268 Assert.AreEqual (assemblyName, an.Name, "Name");
1269 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1270 Assert.IsNull (an.Version, "Version");
1271 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1272 an.VersionCompatibility, "VersionCompatibility");
1273 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1274 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1275 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1278 [Test] // ctor (String)
1279 public void Constructor1_Culture_Incomplete ()
1281 const string assemblyName = "TestAssembly";
1284 new AssemblyName (assemblyName + ", Culture=");
1286 } catch (FileLoadException ex) {
1287 // The given assembly name or codebase was invalid
1288 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1289 Assert.IsNull (ex.FileName, "#3");
1290 Assert.IsNull (ex.InnerException, "#3");
1291 Assert.IsNotNull (ex.Message, "#4");
1295 [Test] // ctor (String)
1296 public void Constructor1_Culture_NotSupported ()
1298 const string assemblyName = "TestAssembly";
1301 new AssemblyName (assemblyName + ", Culture=aa-AA");
1304 } catch (CultureNotFoundException ex) {
1307 } catch (ArgumentException ex) {
1308 // Culture name 'aa-aa' is not supported
1309 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1310 Assert.IsNull (ex.InnerException, "#3");
1311 Assert.IsNotNull (ex.Message, "#4");
1312 Assert.IsNotNull (ex.ParamName, "#5");
1313 Assert.AreEqual ("name", ex.ParamName, "#6");
1318 [Test] // ctor (String)
1319 public void Constructor1_ProcessorArchitecture ()
1321 const string assemblyName = "TestAssembly";
1323 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=X86");
1324 Assert.IsNull (an.CodeBase, "CodeBase");
1325 Assert.IsNull (an.CultureInfo, "CultureInfo");
1326 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1327 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1328 Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
1329 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1330 Assert.IsNull (an.KeyPair, "KeyPair");
1331 Assert.AreEqual (assemblyName, an.Name, "Name");
1332 Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
1333 Assert.IsNull (an.Version, "Version");
1334 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1335 an.VersionCompatibility, "VersionCompatibility");
1336 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1337 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1338 Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
1340 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=mSiL");
1341 Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA: MSIL");
1343 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=AmD64");
1344 Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "PA: Amd64");
1346 an = new AssemblyName (assemblyName + ", ProcessorArchitecture=iA64");
1347 Assert.AreEqual (ProcessorArchitecture.IA64, an.ProcessorArchitecture, "PA: IA64");
1350 [Test] // ctor (String)
1351 public void Constructor1_ProcessorArchitecture_Incomplete ()
1353 const string assemblyName = "TestAssembly";
1355 new AssemblyName (assemblyName + ", ProcessorArchitecture=");
1357 } catch (FileLoadException ex) {
1358 // The given assembly name or codebase was invalid
1359 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1360 Assert.IsNull (ex.FileName, "#3");
1361 Assert.IsNull (ex.InnerException, "#3");
1362 Assert.IsNotNull (ex.Message, "#4");
1366 [Test] // ctor (String)
1367 public void Constructor1_ProcessorArchitecture_Invalid ()
1369 const string assemblyName = "TestAssembly";
1371 new AssemblyName (assemblyName + ", ProcessorArchitecture=XXX");
1372 Assert.Fail ("#A1");
1373 } catch (FileLoadException ex) {
1374 // The given assembly name or codebase was invalid
1375 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1376 Assert.IsNull (ex.FileName, "#A3");
1377 Assert.IsNull (ex.InnerException, "#A4");
1378 Assert.IsNotNull (ex.Message, "#A5");
1382 new AssemblyName (assemblyName + ", ProcessorArchitecture=None");
1383 Assert.Fail ("#B1");
1384 } catch (FileLoadException ex) {
1385 // The given assembly name or codebase was invalid
1386 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1387 Assert.IsNull (ex.FileName, "#B3");
1388 Assert.IsNull (ex.InnerException, "#B4");
1389 Assert.IsNotNull (ex.Message, "#B5");
1393 [Test] // ctor (String)
1394 [Category ("NotDotNet")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1395 public void Constructor1_PublicKey_Mono ()
1397 const string assemblyName = "TestAssembly";
1399 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1400 Assert.IsNull (an.CodeBase, "CodeBase");
1401 Assert.IsNull (an.CultureInfo, "CultureInfo");
1402 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1403 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
1404 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1405 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1406 Assert.IsNull (an.KeyPair, "KeyPair");
1407 Assert.AreEqual (assemblyName, an.Name, "Name");
1408 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1409 Assert.IsNull (an.Version, "Version");
1410 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1411 an.VersionCompatibility, "VersionCompatibility");
1412 Assert.AreEqual (publicKey1, an.GetPublicKey (), "GetPublicKey");
1413 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1414 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1418 [Category ("NotWorking")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
1419 public void Constructor1_PublicKey_MS ()
1421 const string assemblyName = "TestAssembly";
1423 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
1424 Assert.IsNull (an.CodeBase, "CodeBase");
1425 Assert.IsNull (an.CultureInfo, "CultureInfo");
1426 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1427 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1428 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
1429 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1430 Assert.IsNull (an.KeyPair, "KeyPair");
1431 Assert.AreEqual (assemblyName, an.Name, "Name");
1432 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1433 Assert.IsNull (an.Version, "Version");
1434 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1435 an.VersionCompatibility, "VersionCompatibility");
1436 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1437 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
1438 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1441 [Test] // ctor (String)
1442 [Category ("NotWorking")] // bug #351725
1443 public void Constructor1_PublicKey_Ecma ()
1445 const string assemblyName = "TestAssembly";
1447 an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey3));
1448 Assert.IsNull (an.CodeBase, "CodeBase");
1449 Assert.IsNull (an.CultureInfo, "CultureInfo");
1450 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1451 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1452 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "FullName");
1453 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1454 Assert.IsNull (an.KeyPair, "KeyPair");
1455 Assert.AreEqual (assemblyName, an.Name, "Name");
1456 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1457 Assert.IsNull (an.Version, "Version");
1458 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1459 an.VersionCompatibility, "VersionCompatibility");
1460 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1461 Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "GetPublicKeyToken");
1462 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1465 [Test] // ctor (String)
1466 public void Constructor1_PublicKey_Incomplete ()
1468 const string assemblyName = "TestAssembly";
1471 new AssemblyName (assemblyName + ", PublicKey=");
1473 } catch (FileLoadException ex) {
1474 // The given assembly name or codebase was invalid
1475 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1476 Assert.IsNull (ex.FileName, "#3");
1477 Assert.IsNull (ex.InnerException, "#3");
1478 Assert.IsNotNull (ex.Message, "#4");
1482 [Test] // ctor (String)
1483 public void Constructor1_PublicKey_Invalid ()
1485 const string assemblyName = "TestAssembly";
1488 new AssemblyName (assemblyName + ", PublicKey=0024000004800000940000000602000000240000525341310004000011000000e39d99616f48cf7d6d59f345e485e713e89b8b1265a31b1a393e9894ee3fbddaf382dcaf4083dc31ee7a40a2a25c69c6d019fba9f37ec17fd680e4f6fe3b5305f71ae9e494e3501d92508c2e98ca1e22991a217aa8ce259c9882ffdfff4fbc6fa5e6660a8ff951cd94ed011e5633651b64e8f4522519b6ec84921ee22e4840e");
1489 Assert.Fail ("#A1");
1490 } catch (FileLoadException ex) {
1491 // The given assembly name or codebase was invalid
1492 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1493 Assert.IsNull (ex.FileName, "#A3");
1494 Assert.IsNull (ex.InnerException, "#A4");
1495 Assert.IsNotNull (ex.Message, "#A5");
1499 new AssemblyName (assemblyName + ", PublicKey=null");
1500 Assert.Fail ("#B1");
1501 } catch (FileLoadException ex) {
1502 // The given assembly name or codebase was invalid
1503 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1504 Assert.IsNull (ex.FileName, "#B3");
1505 Assert.IsNull (ex.InnerException, "#B4");
1506 Assert.IsNotNull (ex.Message, "#B5");
1510 [Test] // ctor (String)
1511 [Category ("NotWorking")] // bug #351756
1512 public void Constructor1_PublicKey_KeyPair ()
1514 const string assemblyName = "TestAssembly";
1517 new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (keyPair));
1519 } catch (SecurityException ex) {
1520 // Invalid assembly public key
1521 Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#2");
1522 Assert.AreEqual ((SecurityAction) 0, ex.Action, "#3");
1523 Assert.IsNull (ex.InnerException, "#4");
1524 Assert.IsNotNull (ex.Message, "#5");
1528 [Test] // ctor (String)
1529 public void Constructor1_PublicKeyToken ()
1531 const string assemblyName = "TestAssembly";
1533 an = new AssemblyName (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1));
1534 Assert.IsNull (an.CodeBase, "#A:CodeBase");
1535 Assert.IsNull (an.CultureInfo, "#A:CultureInfo");
1536 Assert.IsNull (an.EscapedCodeBase, "#A:EscapedCodeBase");
1537 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A:Flags");
1538 Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A:FullName");
1539 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#A:HashAlgorithm");
1540 Assert.IsNull (an.KeyPair, "#A:KeyPair");
1541 Assert.AreEqual (assemblyName, an.Name, "#A:Name");
1542 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#A:PA");
1543 Assert.IsNull (an.Version, "#A:Version");
1544 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1545 an.VersionCompatibility, "#A:VersionCompatibility");
1546 Assert.IsNull (an.GetPublicKey (), "#A:GetPublicKey");
1547 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A:GetPublicKeyToken");
1548 Assert.AreEqual (an.FullName, an.ToString (), "#A:ToString");
1550 an = new AssemblyName (assemblyName + ", PublicKeyToken=null");
1551 Assert.IsNull (an.CodeBase, "#B:CodeBase");
1552 Assert.IsNull (an.CultureInfo, "#B:CultureInfo");
1553 Assert.IsNull (an.EscapedCodeBase, "#B:EscapedCodeBase");
1554 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B:Flags");
1555 //Assert.AreEqual ("TestAssembly, PublicKeyToken=null", an.FullName, "#B:FullName");
1556 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#B:HashAlgorithm");
1557 Assert.IsNull (an.KeyPair, "#B:KeyPair");
1558 Assert.AreEqual (assemblyName, an.Name, "#B:Name");
1559 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#B:PA");
1560 Assert.IsNull (an.Version, "#B:Version");
1561 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1562 an.VersionCompatibility, "#B:VersionCompatibility");
1563 Assert.IsNull (an.GetPublicKey (), "#B:GetPublicKey");
1564 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#B:GetPublicKeyToken");
1565 Assert.AreEqual (an.FullName, an.ToString (), "#B:ToString");
1568 [Test] // ctor (String)
1569 public void Constructor1_PublicKeyToken_Incomplete ()
1571 const string assemblyName = "TestAssembly";
1574 new AssemblyName (assemblyName + ", PublicKeyToken=");
1576 } catch (FileLoadException ex) {
1577 // The given assembly name or codebase was invalid
1578 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1579 Assert.IsNull (ex.FileName, "#3");
1580 Assert.IsNull (ex.InnerException, "#3");
1581 Assert.IsNotNull (ex.Message, "#4");
1585 [Test] // ctor (String)
1586 public void Constructor1_PublicKeyToken_Invalid ()
1588 const string assemblyName = "TestAssembly";
1591 new AssemblyName (assemblyName + ", PublicKeyToken=27576a8182a188");
1593 } catch (FileLoadException ex) {
1594 // The given assembly name or codebase was invalid
1595 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1596 Assert.IsNull (ex.FileName, "#3");
1597 Assert.IsNull (ex.InnerException, "#3");
1598 Assert.IsNotNull (ex.Message, "#4");
1602 [Test] // ctor (String)
1603 public void Constructor1_Retargetable ()
1605 const string assemblyName = "TestAssembly";
1608 new AssemblyName (assemblyName + ", Retargetable=Yes");
1609 Assert.Fail ("#A1");
1610 } catch (FileLoadException ex) {
1611 // The given assembly name or codebase was invalid
1612 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1613 Assert.IsNull (ex.FileName, "#A3");
1614 Assert.IsNull (ex.InnerException, "#A4");
1615 Assert.IsNotNull (ex.Message, "#A5");
1619 new AssemblyName (assemblyName + ", Retargetable=No");
1620 Assert.Fail ("#B1");
1621 } catch (FileLoadException ex) {
1622 // The given assembly name or codebase was invalid
1623 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1624 Assert.IsNull (ex.FileName, "#B3");
1625 Assert.IsNull (ex.InnerException, "#B4");
1626 Assert.IsNotNull (ex.Message, "#B5");
1630 new AssemblyName (assemblyName + ", Version=1.0.0.0, Retargetable=Yes");
1631 Assert.Fail ("#C1");
1632 } catch (FileLoadException ex) {
1633 // The given assembly name or codebase was invalid
1634 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1635 Assert.IsNull (ex.FileName, "#C3");
1636 Assert.IsNull (ex.InnerException, "#C4");
1637 Assert.IsNotNull (ex.Message, "#C5");
1641 new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, Retargetable=Yes");
1642 Assert.Fail ("#D1");
1643 } catch (FileLoadException ex) {
1644 // The given assembly name or codebase was invalid
1645 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#D2");
1646 Assert.IsNull (ex.FileName, "#D3");
1647 Assert.IsNull (ex.InnerException, "#D4");
1648 Assert.IsNotNull (ex.Message, "#D5");
1652 new AssemblyName (assemblyName + ", Version=1.0.0.0, PublicKeyToken=null, Retargetable=Yes");
1653 Assert.Fail ("#E1");
1654 } catch (FileLoadException ex) {
1655 // The given assembly name or codebase was invalid
1656 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#E2");
1657 Assert.IsNull (ex.FileName, "#E3");
1658 Assert.IsNull (ex.InnerException, "#E4");
1659 Assert.IsNotNull (ex.Message, "#E5");
1662 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=yEs");
1663 Assert.IsNull (an.CodeBase, "F:CodeBase");
1664 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#F:CultureInfo");
1665 Assert.IsNull (an.EscapedCodeBase, "#F:EscapedCodeBase");
1666 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#F:Flags");
1667 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=Yes", an.FullName, "#F:FullName");
1668 Assert.IsNull (an.GetPublicKey (), "#F:GetPublicKey");
1669 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#F:GetPublicKeyToken");
1670 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#F:HashAlgorithm");
1671 Assert.IsNull (an.KeyPair, "#F:KeyPair");
1672 Assert.AreEqual (assemblyName, an.Name, "#F:Name");
1673 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#F:PA");
1674 Assert.AreEqual (an.FullName, an.ToString (), "#F:ToString");
1675 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#F:Version");
1676 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1677 an.VersionCompatibility, "#F:VersionCompatibility");
1679 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=nO");
1680 Assert.IsNull (an.CodeBase, "G:CodeBase");
1681 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#G:CultureInfo");
1682 Assert.IsNull (an.EscapedCodeBase, "#G:EscapedCodeBase");
1683 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G:Flags");
1684 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", an.FullName, "#G:FullName");
1685 Assert.IsNull (an.GetPublicKey (), "#G:GetPublicKey");
1686 Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#G:GetPublicKeyToken");
1687 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#G:HashAlgorithm");
1688 Assert.IsNull (an.KeyPair, "#G:KeyPair");
1689 Assert.AreEqual (assemblyName, an.Name, "#G:Name");
1690 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#G:PA");
1691 Assert.AreEqual (an.FullName, an.ToString (), "#G:ToString");
1692 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#G:Version");
1693 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1694 an.VersionCompatibility, "#G:VersionCompatibility");
1696 an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=yes");
1697 Assert.IsNull (an.CodeBase, "H:CodeBase");
1698 Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#H:CultureInfo");
1699 Assert.IsNull (an.EscapedCodeBase, "#H:EscapedCodeBase");
1700 Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#H:Flags");
1701 Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=Yes", an.FullName, "#H:FullName");
1702 Assert.IsNull (an.GetPublicKey (), "#H:GetPublicKey");
1703 Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#H:GetPublicKeyToken");
1704 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#H:HashAlgorithm");
1705 Assert.IsNull (an.KeyPair, "#H:KeyPair");
1706 Assert.AreEqual (assemblyName, an.Name, "#H:Name");
1707 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#H:PA");
1708 Assert.AreEqual (an.FullName, an.ToString (), "#H:ToString");
1709 Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#H:Version");
1710 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1711 an.VersionCompatibility, "#H:VersionCompatibility");
1714 [Test] // ctor (String)
1715 public void Constructor1_Retargetable_Incomplete ()
1717 const string assemblyName = "TestAssembly";
1720 new AssemblyName (assemblyName + ", Retargetable=");
1722 } catch (FileLoadException ex) {
1723 // The given assembly name or codebase was invalid
1724 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1725 Assert.IsNull (ex.FileName, "#3");
1726 Assert.IsNull (ex.InnerException, "#4");
1727 Assert.IsNotNull (ex.Message, "#5");
1731 [Test] // ctor (String)
1732 public void Constructor1_Retargetable_Invalid ()
1734 const string assemblyName = "TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
1737 new AssemblyName (assemblyName + ", Retargetable=False");
1738 Assert.Fail ("#A1");
1739 } catch (FileLoadException ex) {
1740 // The given assembly name or codebase was invalid
1741 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
1742 Assert.IsNull (ex.FileName, "#A3");
1743 Assert.IsNull (ex.InnerException, "#A4");
1744 Assert.IsNotNull (ex.Message, "#A5");
1748 new AssemblyName (assemblyName + ", Retargetable=1");
1749 Assert.Fail ("#B1");
1750 } catch (FileLoadException ex) {
1751 // The given assembly name or codebase was invalid
1752 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
1753 Assert.IsNull (ex.FileName, "#B3");
1754 Assert.IsNull (ex.InnerException, "#B4");
1755 Assert.IsNotNull (ex.Message, "#B5");
1759 new AssemblyName (assemblyName + ", Retargetable=True");
1760 Assert.Fail ("#C1");
1761 } catch (FileLoadException ex) {
1762 // The given assembly name or codebase was invalid
1763 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
1764 Assert.IsNull (ex.FileName, "#C3");
1765 Assert.IsNull (ex.InnerException, "#C4");
1766 Assert.IsNotNull (ex.Message, "#C5");
1770 [Test] // ctor (String)
1771 [Category("TargetJvmNotWorking")] // Not yet supported for TARGET_JVM.
1772 public void Constructor1_Version ()
1774 const string assemblyName = "TestAssembly";
1775 const string assemblyVersion = "1.2.3.4";
1777 an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion);
1778 Assert.IsNull (an.CodeBase, "CodeBase");
1779 Assert.IsNull (an.CultureInfo, "CultureInfo");
1780 Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
1781 Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
1782 Assert.AreEqual ("TestAssembly, Version=1.2.3.4", an.FullName, "FullName");
1783 Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
1784 Assert.IsNull (an.KeyPair, "KeyPair");
1785 Assert.AreEqual (assemblyName, an.Name, "Name");
1786 Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
1787 Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
1788 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1789 an.VersionCompatibility, "VersionCompatibility");
1790 Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
1791 Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
1792 Assert.AreEqual (an.FullName, an.ToString (), "ToString");
1796 [Test] // ctor (String)
1797 public void Constructor1_Version_Incomplete ()
1799 const string assemblyName = "TestAssembly";
1802 new AssemblyName (assemblyName + ", Version=, Culture=neutral");
1804 } catch (FileLoadException ex) {
1805 // The given assembly name or codebase was invalid
1806 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1807 Assert.IsNull (ex.FileName, "#3");
1808 Assert.IsNull (ex.InnerException, "#3");
1809 Assert.IsNotNull (ex.Message, "#4");
1813 [Test] // ctor (String)
1814 public void Constructor1_Version_Invalid ()
1816 const string assemblyName = "TestAssembly";
1819 new AssemblyName (assemblyName + ", Version=a.b");
1821 } catch (FileLoadException ex) {
1822 // The given assembly name or codebase was invalid
1823 Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
1824 Assert.IsNull (ex.FileName, "#3");
1825 Assert.IsNull (ex.InnerException, "#3");
1826 Assert.IsNotNull (ex.Message, "#4");
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));