2 // AssemblyBuilderTest.cs - NUnit Test Cases for the AssemblyBuilder class
4 // Zoltan Varga (vargaz@freemail.hu)
6 // (C) Ximian, Inc. http://www.ximian.com
12 using System
.Globalization
;
13 using System
.Threading
;
14 using System
.Reflection
;
15 using System
.Reflection
.Emit
;
17 using System
.Configuration
.Assemblies
;
19 using NUnit
.Framework
;
21 namespace MonoTests
.System
.Reflection
.Emit
25 public class AssemblyBuilderTest
27 [AttributeUsage (AttributeTargets
.Assembly
)]
28 public sealed class FooAttribute
: Attribute
30 public FooAttribute (string arg
)
34 public FooAttribute ()
39 static int nameIndex
= 0;
40 static AppDomain domain
;
41 static AssemblyBuilder ab
;
42 static ModuleBuilder mb
;
43 string tempDir
= Path
.Combine (Path
.GetTempPath (), typeof (AssemblyBuilderTest
).FullName
);
46 protected void SetUp ()
48 if (Directory
.Exists (tempDir
))
49 Directory
.Delete (tempDir
, true);
51 Directory
.CreateDirectory (tempDir
);
53 for (int i
= 1; i
< 3; ++i
) {
54 string resFile
= Path
.Combine (tempDir
, "res" + i
+ ".txt");
55 using (StreamWriter sw
= new StreamWriter (resFile
)) {
60 domain
= Thread
.GetDomain ();
62 mb
= ab
.DefineDynamicModule ("def_module");
66 protected void TearDown ()
68 if (Directory
.Exists (tempDir
))
69 Directory
.Delete (tempDir
, true);
72 private AssemblyName
genAssemblyName ()
74 AssemblyName assemblyName
= new AssemblyName();
75 assemblyName
.Name
= typeof (AssemblyBuilderTest
).FullName
+ (nameIndex
++);
79 private AssemblyBuilder
genAssembly ()
81 return domain
.DefineDynamicAssembly (genAssemblyName (),
82 AssemblyBuilderAccess
.RunAndSave
,
86 private MethodInfo
genEntryFunction (AssemblyBuilder assembly
)
88 ModuleBuilder module
= assembly
.DefineDynamicModule("module1");
89 TypeBuilder tb
= module
.DefineType ("A");
90 MethodBuilder mb
= tb
.DefineMethod ("A",
91 MethodAttributes
.Static
, typeof (void), new Type
[0]);
92 mb
.GetILGenerator ().Emit (OpCodes
.Ret
);
98 [Category ("NotWorking")]
99 public void ManifestModule ()
101 AssemblyName aname
= new AssemblyName ("ManifestModule1");
102 ab
= domain
.DefineDynamicAssembly (aname
, AssemblyBuilderAccess
.RunAndSave
,
104 Assert
.IsNotNull (ab
.ManifestModule
, "#A1");
105 Assert
.AreEqual (1, ab
.GetModules ().Length
, "#A2");
106 Assert
.AreEqual (typeof (ModuleBuilder
), ab
.ManifestModule
.GetType (), "#A3");
108 ModuleBuilder mb1
= (ModuleBuilder
) ab
.ManifestModule
;
109 Assert
.AreSame (mb1
, ab
.GetModules () [0], "#B1");
110 Assert
.IsFalse (mb1
.IsResource (), "#B2");
111 Assert
.AreSame (mb1
, ab
.ManifestModule
, "#B3");
113 ab
.Save ("ManifestModule.dll");
115 ModuleBuilder mb2
= (ModuleBuilder
) ab
.ManifestModule
;
116 Assert
.AreSame (mb2
, ab
.GetModules () [0], "#C1");
117 Assert
.IsFalse (mb2
.IsResource (), "#C2");
118 Assert
.AreSame (mb2
, ab
.ManifestModule
, "#C3");
119 Assert
.AreSame (mb1
, mb2
, "#C4");
124 [ExpectedException (typeof (NotSupportedException
))]
125 public void TestCodeBase ()
127 string codebase
= ab
.CodeBase
;
131 [ExpectedException (typeof (NotSupportedException
))]
132 public void TestLocation ()
134 string location
= ab
.Location
;
138 public void TestEntryPoint ()
140 Assert
.AreEqual (null, ab
.EntryPoint
, "EntryPoint defaults to null");
142 MethodInfo mi
= genEntryFunction (ab
);
143 ab
.SetEntryPoint (mi
);
145 Assert
.AreEqual (mi
, ab
.EntryPoint
, "EntryPoint works");
149 public void TestSetEntryPoint ()
151 // Check invalid arguments
153 ab
.SetEntryPoint (null);
155 } catch (ArgumentNullException ex
) {
156 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#A2");
157 Assert
.IsNull (ex
.InnerException
, "#A3");
158 Assert
.IsNotNull (ex
.Message
, "#A4");
159 Assert
.IsNotNull (ex
.ParamName
, "#A5");
160 Assert
.AreEqual ("entryMethod", ex
.ParamName
, "#A6");
163 // Check method from other assembly
165 ab
.SetEntryPoint (typeof (AssemblyBuilderTest
).GetMethod ("TestSetEntryPoint"));
167 } catch (InvalidOperationException
) {
172 public void TestIsDefined ()
174 CustomAttributeBuilder cab
= new CustomAttributeBuilder (typeof (FooAttribute
).GetConstructor (new Type
[1] {typeof (string)}
), new object [1] { "A" }
);
175 ab
.SetCustomAttribute (cab
);
177 Assert
.IsTrue (ab
.IsDefined (typeof (FooAttribute
), false),
178 "IsDefined(FooAttribute) works");
179 Assert
.IsFalse (ab
.IsDefined (typeof (AssemblyVersionAttribute
), false),
180 "!IsDefined(AssemblyVersionAttribute) works");
184 [ExpectedException (typeof (NotSupportedException
))]
185 public void TestGetManifestResourceNames ()
187 ab
.GetManifestResourceNames ();
191 [ExpectedException (typeof (NotSupportedException
))]
192 public void TestGetManifestResourceInfo ()
194 ab
.GetManifestResourceInfo ("foo");
198 [ExpectedException (typeof (NotSupportedException
))]
199 public void TestGetManifestResourceStream1 ()
201 ab
.GetManifestResourceStream ("foo");
205 [ExpectedException (typeof (NotSupportedException
))]
206 public void TestGetManifestResourceStream2 ()
208 ab
.GetManifestResourceStream (typeof (int), "foo");
212 [ExpectedException (typeof (NotSupportedException
))]
213 public void TestGetFiles1 ()
219 [ExpectedException (typeof (NotSupportedException
))]
220 public void TestGetFiles2 ()
226 [ExpectedException (typeof (NotSupportedException
))]
227 public void TestGetFile ()
233 [ExpectedException (typeof (NotSupportedException
))]
234 public void TestGetExportedTypes ()
236 ab
.GetExportedTypes ();
240 public void TestGetDynamicModule_Name_Null ()
243 ab
.GetDynamicModule (null);
245 } catch (ArgumentNullException ex
) {
246 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
247 Assert
.IsNull (ex
.InnerException
, "#3");
248 Assert
.IsNotNull (ex
.Message
, "#4");
249 Assert
.IsNotNull (ex
.ParamName
, "#5");
250 Assert
.AreEqual ("name", ex
.ParamName
, "#6");
255 public void TestGetDynamicModule_Name_Empty ()
258 ab
.GetDynamicModule (string.Empty
);
260 } catch (ArgumentException ex
) {
261 // Empty name is not legal
262 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
263 Assert
.IsNull (ex
.InnerException
, "#3");
264 Assert
.IsNotNull (ex
.Message
, "#4");
265 Assert
.IsNotNull (ex
.ParamName
, "#5");
266 Assert
.AreEqual ("name", ex
.ParamName
, "#6");
271 public void TestGetDynamicModule3 ()
273 Assert
.IsNull (ab
.GetDynamicModule ("FOO2"));
274 ModuleBuilder mb
= ab
.DefineDynamicModule ("FOO");
275 Assert
.AreEqual (mb
, ab
.GetDynamicModule ("FOO"));
276 Assert
.IsNull (ab
.GetDynamicModule ("FOO4"));
281 public void TestImageRuntimeVersion ()
283 string version
= ab
.ImageRuntimeVersion
;
284 Assert
.IsTrue (version
.Length
> 0);
289 public void TestAddResourceFile_Name_Null ()
292 ab
.AddResourceFile (null, "foo.txt");
294 } catch (ArgumentNullException ex
) {
295 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
296 Assert
.IsNull (ex
.InnerException
, "#3");
297 Assert
.IsNotNull (ex
.Message
, "#4");
298 Assert
.IsNotNull (ex
.ParamName
, "#5");
299 Assert
.AreEqual ("name", ex
.ParamName
, "#6");
304 public void TestAddResourceFile_Filename_Null ()
307 ab
.AddResourceFile ("foo", null);
309 } catch (ArgumentNullException ex
) {
310 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
311 Assert
.IsNull (ex
.InnerException
, "#3");
312 Assert
.IsNotNull (ex
.Message
, "#4");
313 Assert
.IsNotNull (ex
.ParamName
, "#5");
314 Assert
.AreEqual ("fileName", ex
.ParamName
, "#6");
319 public void TestAddResourceFile_Name_Empty ()
322 ab
.AddResourceFile (string.Empty
, "foo.txt");
324 } catch (ArgumentException ex
) {
325 // Empty name is not legal
326 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
327 Assert
.IsNull (ex
.InnerException
, "#3");
328 Assert
.IsNotNull (ex
.Message
, "#4");
333 public void TestAddResourceFile_Filename_Empty ()
336 ab
.AddResourceFile ("foo", string.Empty
);
338 } catch (ArgumentException ex
) {
339 // Empty file name is not legal
340 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
341 Assert
.IsNull (ex
.InnerException
, "#3");
342 Assert
.IsNotNull (ex
.Message
, "#4");
347 [ExpectedException (typeof (FileNotFoundException
))]
348 public void TestAddResourceFile_FileName_DoesNotExist ()
350 ab
.AddResourceFile ("foo", "not-existent.txt");
354 public void TestAddResourceFile_FileName_Duplicate ()
356 ab
.AddResourceFile ("foo", "res1.txt");
358 ab
.AddResourceFile ("foo2", "res1.txt");
360 } catch (ArgumentException ex
) {
361 // Duplicate file names
362 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
363 Assert
.IsNull (ex
.InnerException
, "#3");
364 Assert
.IsNotNull (ex
.Message
, "#4");
365 Assert
.IsNull (ex
.ParamName
, "#5");
370 public void TestAddResourceFile_Name_Duplicate ()
372 ab
.AddResourceFile ("foo", "res1.txt");
374 ab
.AddResourceFile ("foo", "res2.txt");
376 } catch (ArgumentException ex
) {
377 // Duplicate resource name within an assembly
378 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
379 Assert
.IsNull (ex
.InnerException
, "#3");
380 Assert
.IsNotNull (ex
.Message
, "#4");
381 Assert
.IsNull (ex
.ParamName
, "#5");
386 public void TestAddResourceFile_Filename_IncludesPath ()
389 ab
.AddResourceFile ("foo", "/tmp/res1.txt");
391 } catch (ArgumentException ex
) {
392 // The filename must not include a path specification
393 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
394 Assert
.IsNull (ex
.InnerException
, "#3");
395 Assert
.IsNotNull (ex
.Message
, "#4");
396 Assert
.IsNotNull (ex
.ParamName
, "#5");
397 Assert
.AreEqual ("fileName", ex
.ParamName
, "#6");
402 public void TestAddResourceFile ()
404 ab
.AddResourceFile ("foo", "res2.txt", ResourceAttributes
.Public
);
405 ab
.Save ("TestAddResourceFile.dll");
407 // TODO: Test reading back
411 public void TestDefineResource ()
413 ab
.DefineResource ("foo", "FOO", "foo.txt", ResourceAttributes
.Public
);
414 ab
.DefineResource ("foo2", "FOO", "foo2.txt");
415 ab
.Save ("TestDefineResource.dll");
419 public void TestDefineDynamicModule_Name_Null ()
422 ab
.DefineDynamicModule (null, "foo.txt");
424 } catch (ArgumentNullException ex
) {
425 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
426 Assert
.IsNull (ex
.InnerException
, "#3");
427 Assert
.IsNotNull (ex
.Message
, "#4");
428 Assert
.IsNotNull (ex
.ParamName
, "#5");
429 Assert
.AreEqual ("name", ex
.ParamName
, "#6");
434 public void TestDefineDynamicModule_FileName_Null ()
437 ab
.DefineDynamicModule ("foo", null);
439 } catch (ArgumentNullException ex
) {
440 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
441 Assert
.IsNull (ex
.InnerException
, "#3");
442 Assert
.IsNotNull (ex
.Message
, "#4");
443 Assert
.IsNotNull (ex
.ParamName
, "#5");
444 Assert
.AreEqual ("fileName", ex
.ParamName
, "#6");
449 public void TestDefineDynamicModule_Name_Empty ()
452 ab
.DefineDynamicModule (string.Empty
, "foo.txt");
454 } catch (ArgumentException ex
) {
455 // Empty name is not legal
456 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
457 Assert
.IsNull (ex
.InnerException
, "#3");
458 Assert
.IsNotNull (ex
.Message
, "#4");
459 Assert
.IsNotNull (ex
.ParamName
, "#5");
460 Assert
.AreEqual ("name", ex
.ParamName
, "#6");
465 public void TestDefineDynamicModule_Filename_Empty ()
468 ab
.DefineDynamicModule ("foo", string.Empty
);
470 } catch (ArgumentException ex
) {
471 // Empty file name is not legal
472 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
473 Assert
.IsNull (ex
.InnerException
, "#3");
474 Assert
.IsNotNull (ex
.Message
, "#4");
475 Assert
.IsNotNull (ex
.ParamName
, "#5");
476 Assert
.AreEqual ("fileName", ex
.ParamName
, "#6");
481 public void TestDefineDynamicModule_FileName_Duplicate ()
483 ab
.DefineDynamicModule ("foo", "res1.txt");
485 ab
.DefineDynamicModule ("foo2", "res1.txt");
487 } catch (ArgumentException ex
) {
488 // Duplicate file names
489 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
490 Assert
.IsNull (ex
.InnerException
, "#3");
491 Assert
.IsNotNull (ex
.Message
, "#4");
492 Assert
.IsNull (ex
.ParamName
, "#5");
497 public void TestDefineDynamicModule_Name_Duplicate ()
499 ab
.DefineDynamicModule ("foo", "res1.txt");
501 ab
.DefineDynamicModule ("foo", "res2.txt");
503 } catch (ArgumentException ex
) {
504 // Duplicate dynamic module name within an assembly
505 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
506 Assert
.IsNull (ex
.InnerException
, "#3");
507 Assert
.IsNotNull (ex
.Message
, "#4");
508 Assert
.IsNull (ex
.ParamName
, "#5");
513 public void TestDefineDynamicModule_Filename_IncludesPath ()
516 ab
.DefineDynamicModule ("foo", "/tmp/res1.txt");
518 } catch (ArgumentException ex
) {
519 // The filename must not include a path specification
520 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
521 Assert
.IsNull (ex
.InnerException
, "#3");
522 Assert
.IsNotNull (ex
.Message
, "#4");
523 Assert
.IsNotNull (ex
.ParamName
, "#5");
524 Assert
.AreEqual ("fileName", ex
.ParamName
, "#6");
529 public void TestDefineDynamicModule5_FileName_NoExtension ()
532 ab
.DefineDynamicModule ("foo", "bar");
534 } catch (ArgumentException ex
) {
535 // Module file name 'bar' must have file extension
536 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
537 Assert
.IsNull (ex
.InnerException
, "#3");
538 Assert
.IsNotNull (ex
.Message
, "#4");
539 Assert
.IsTrue (ex
.Message
.IndexOf ("bar") != -1, "#5");
540 Assert
.IsNull (ex
.ParamName
, "#6");
545 [Category ("NotWorking")]
546 public void TestDefineDynamicModule_Name_MaxLength () {
547 string name
= string.Empty
;
548 for (int i
= 0; i
< 259; ++i
)
550 ab
.DefineDynamicModule (name
);
554 ab
.DefineDynamicModule (name
);
556 } catch (ArgumentException ex
) {
557 // Value does not fall within expected range
558 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
559 Assert
.IsNull (ex
.InnerException
, "#3");
560 Assert
.IsNotNull (ex
.Message
, "#4");
561 Assert
.IsNull (ex
.ParamName
, "#5");
566 [ExpectedException (typeof (InvalidOperationException
))]
567 public void TestDefineDynamicModule_Assembly_Saved ()
569 // Called when assembly was already saved
570 ab
.Save ("TestDefineDynamicModule7.dll");
571 ab
.DefineDynamicModule ("foo", "foo.dll");
575 [ExpectedException (typeof (NotSupportedException
))]
576 public void TestDefineDynamicModule_Access_Run ()
578 // Called on an assembly defined with the Run attribute
580 domain
.DefineDynamicAssembly (genAssemblyName (),
581 AssemblyBuilderAccess
.Run
,
583 ab
.DefineDynamicModule ("foo", "foo.dll");
587 public void TestDefineDynamicModule ()
589 ab
.DefineDynamicModule ("foo", "foo.dll");
590 ab
.DefineDynamicModule ("foo2", true);
591 ab
.DefineDynamicModule ("foo3", "foo3.dll");
592 ab
.DefineDynamicModule ("foo4", "foo4.dll", true);
595 [Test
] // DefineUnmanagedResource (byte [])
596 [Category ("NotWorking")]
597 public void TestDefineUnmanagedResource1_ResourceAlreadyDefined ()
599 string version_res
= Path
.Combine (tempDir
, "version.res");
600 using (FileStream fs
= File
.OpenWrite (version_res
)) {
604 ab
.DefineUnmanagedResource (new byte [0]);
607 ab
.DefineUnmanagedResource (new byte [0]);
609 } catch (ArgumentException ex
) {
610 // Native resource has already been defined
611 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
612 Assert
.IsNull (ex
.InnerException
, "#A3");
613 Assert
.IsNotNull (ex
.Message
, "#A4");
614 Assert
.IsNull (ex
.ParamName
, "#A5");
618 ab
.DefineUnmanagedResource (version_res
);
620 } catch (ArgumentException ex
) {
621 // Native resource has already been defined
622 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
623 Assert
.IsNull (ex
.InnerException
, "#B3");
624 Assert
.IsNotNull (ex
.Message
, "#B4");
625 Assert
.IsNull (ex
.ParamName
, "#B5");
629 ab
.DefineVersionInfoResource ();
631 } catch (ArgumentException ex
) {
632 // Native resource has already been defined
633 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#C2");
634 Assert
.IsNull (ex
.InnerException
, "#C3");
635 Assert
.IsNotNull (ex
.Message
, "#C4");
636 Assert
.IsNull (ex
.ParamName
, "#C5");
640 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
642 } catch (ArgumentException ex
) {
643 // Native resource has already been defined
644 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#D2");
645 Assert
.IsNull (ex
.InnerException
, "#D3");
646 Assert
.IsNotNull (ex
.Message
, "#D4");
647 Assert
.IsNull (ex
.ParamName
, "#D5");
651 [Test
] // DefineUnmanagedResource (byte [])
652 public void TestDefineUnmanagedResource1_Resource_Null ()
655 ab
.DefineUnmanagedResource ((byte []) null);
657 } catch (ArgumentNullException ex
) {
658 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
659 Assert
.IsNull (ex
.InnerException
, "#3");
660 Assert
.IsNotNull (ex
.Message
, "#4");
661 Assert
.IsNotNull (ex
.ParamName
, "#5");
662 Assert
.AreEqual ("resource", ex
.ParamName
, "#6");
666 [Test
] // DefineUnmanagedResource (String)
667 public void TestDefineUnmanagedResource2_ResourceAlreadyDefined ()
669 string version_res
= Path
.Combine (tempDir
, "version.res");
670 using (FileStream fs
= File
.OpenWrite (version_res
)) {
674 ab
.DefineUnmanagedResource (version_res
);
677 ab
.DefineUnmanagedResource (new byte [0]);
679 } catch (ArgumentException ex
) {
680 // Native resource has already been defined
681 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
682 Assert
.IsNull (ex
.InnerException
, "#A3");
683 Assert
.IsNotNull (ex
.Message
, "#A4");
684 Assert
.IsNull (ex
.ParamName
, "#A5");
688 ab
.DefineUnmanagedResource (version_res
);
690 } catch (ArgumentException ex
) {
691 // Native resource has already been defined
692 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
693 Assert
.IsNull (ex
.InnerException
, "#B3");
694 Assert
.IsNotNull (ex
.Message
, "#B4");
695 Assert
.IsNull (ex
.ParamName
, "#B5");
699 ab
.DefineVersionInfoResource ();
701 } catch (ArgumentException ex
) {
702 // Native resource has already been defined
703 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#C2");
704 Assert
.IsNull (ex
.InnerException
, "#C3");
705 Assert
.IsNotNull (ex
.Message
, "#C4");
706 Assert
.IsNull (ex
.ParamName
, "#C5");
710 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
712 } catch (ArgumentException ex
) {
713 // Native resource has already been defined
714 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#D2");
715 Assert
.IsNull (ex
.InnerException
, "#D3");
716 Assert
.IsNotNull (ex
.Message
, "#D4");
717 Assert
.IsNull (ex
.ParamName
, "#D5");
721 [Test
] // DefinedUnmanagedResource (String)
722 [ExpectedException (typeof (FileNotFoundException
))]
723 public void TestDefineUnmanagedResource2_ResourceFile_DoesNotExist ()
725 ab
.DefineUnmanagedResource ("not-exists.txt");
728 [Test
] // DefinedUnmanagedResource (String)
729 public void TestDefineUnmanagedResource2_ResourceFileName_Empty ()
732 ab
.DefineUnmanagedResource (string.Empty
);
734 } catch (ArgumentException ex
) {
735 // The path is not of a legal form
736 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#2");
737 Assert
.IsNull (ex
.InnerException
, "#3");
738 Assert
.IsNotNull (ex
.Message
, "#4");
739 Assert
.IsNull (ex
.ParamName
, "#5");
743 [Test
] // DefinedUnmanagedResource (String)
744 public void TestDefineUnmanagedResource2_ResourceFileName_Null ()
747 ab
.DefineUnmanagedResource ((string) null);
749 } catch (ArgumentNullException ex
) {
750 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
751 Assert
.IsNull (ex
.InnerException
, "#3");
752 Assert
.IsNotNull (ex
.Message
, "#4");
753 Assert
.IsNotNull (ex
.ParamName
, "#5");
754 Assert
.AreEqual ("resourceFileName", ex
.ParamName
, "#6");
758 [Test
] // DefineVersionInfoResource ()
759 public void TestDefineVersionInfoResource1_Culture_NotSupported ()
761 AssemblyName aname
= new AssemblyName ();
762 aname
.CultureInfo
= new CultureInfo ("nl-BE");
764 aname
.Version
= new Version (3, 5, 7);
766 AssemblyBuilder ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (
767 aname
, AssemblyBuilderAccess
.RunAndSave
,
771 Type attrType
= typeof (AssemblyCultureAttribute
);
772 ConstructorInfo ci
= attrType
.GetConstructor (new Type
[] { typeof (String) }
);
773 CustomAttributeBuilder cab
= new CustomAttributeBuilder (
774 ci
, new object [1] { "doesnotexist" }
);
775 ab
.SetCustomAttribute (cab
);
777 ab
.DefineVersionInfoResource ();
782 } catch (ArgumentException ex
) {
783 // Culture name doesnotexist is not supported
784 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
785 Assert
.IsNull (ex
.InnerException
, "#A3");
786 Assert
.IsNotNull (ex
.Message
, "#A4");
787 Assert
.IsTrue (ex
.Message
.IndexOf ("doesnotexist") != -1, "#A5");
788 Assert
.AreEqual ("name", ex
.ParamName
, "#A6");
791 ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (aname
,
792 AssemblyBuilderAccess
.RunAndSave
, tempDir
);
795 attrType
= typeof (AssemblyCultureAttribute
);
796 ci
= attrType
.GetConstructor (new Type
[] { typeof (String) }
);
797 cab
= new CustomAttributeBuilder (ci
, new object [1] { "neutral" }
);
798 ab
.SetCustomAttribute (cab
);
800 ab
.DefineVersionInfoResource ();
805 } catch (ArgumentException ex
) {
806 // Culture name neutral is not supported
807 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
808 Assert
.IsNull (ex
.InnerException
, "#B3");
809 Assert
.IsNotNull (ex
.Message
, "#B4");
810 Assert
.IsTrue (ex
.Message
.IndexOf ("neutral") != -1, "#B5");
811 Assert
.AreEqual ("name", ex
.ParamName
, "#B6");
815 [Test
] // DefineVersionInfoResource ()
816 public void TestDefineVersionInfoResource1_ResourceAlreadyDefined ()
818 string version_res
= Path
.Combine (tempDir
, "version.res");
819 using (FileStream fs
= File
.OpenWrite (version_res
)) {
823 ab
.DefineVersionInfoResource ();
826 ab
.DefineUnmanagedResource (new byte [0]);
828 } catch (ArgumentException ex
) {
829 // Native resource has already been defined
830 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
831 Assert
.IsNull (ex
.InnerException
, "#A3");
832 Assert
.IsNotNull (ex
.Message
, "#A4");
833 Assert
.IsNull (ex
.ParamName
, "#A5");
837 ab
.DefineUnmanagedResource (version_res
);
839 } catch (ArgumentException ex
) {
840 // Native resource has already been defined
841 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
842 Assert
.IsNull (ex
.InnerException
, "#B3");
843 Assert
.IsNotNull (ex
.Message
, "#B4");
844 Assert
.IsNull (ex
.ParamName
, "#B5");
848 ab
.DefineVersionInfoResource ();
850 } catch (ArgumentException ex
) {
851 // Native resource has already been defined
852 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#C2");
853 Assert
.IsNull (ex
.InnerException
, "#C3");
854 Assert
.IsNotNull (ex
.Message
, "#C4");
855 Assert
.IsNull (ex
.ParamName
, "#C5");
859 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
861 } catch (ArgumentException ex
) {
862 // Native resource has already been defined
863 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#D2");
864 Assert
.IsNull (ex
.InnerException
, "#D3");
865 Assert
.IsNotNull (ex
.Message
, "#D4");
866 Assert
.IsNull (ex
.ParamName
, "#D5");
870 [Test
] // DefineVersionInfoResource (String, String, String, String, String)
871 public void TestDefineVersionInfoResource2_Culture_NotSupported ()
873 AssemblyName aname
= new AssemblyName ();
874 aname
.CultureInfo
= new CultureInfo ("nl-BE");
876 aname
.Version
= new Version (3, 5, 7);
878 AssemblyBuilder ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (
879 aname
, AssemblyBuilderAccess
.RunAndSave
,
883 Type attrType
= typeof (AssemblyCultureAttribute
);
884 ConstructorInfo ci
= attrType
.GetConstructor (new Type
[] { typeof (String) }
);
885 CustomAttributeBuilder cab
= new CustomAttributeBuilder (
886 ci
, new object [1] { "doesnotexist" }
);
887 ab
.SetCustomAttribute (cab
);
889 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
894 } catch (ArgumentException ex
) {
895 // Culture name doesnotexist is not supported
896 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
897 Assert
.IsNull (ex
.InnerException
, "#A3");
898 Assert
.IsNotNull (ex
.Message
, "#A4");
899 Assert
.IsTrue (ex
.Message
.IndexOf ("doesnotexist") != -1, "#A5");
900 Assert
.AreEqual ("name", ex
.ParamName
, "#A6");
903 ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (aname
,
904 AssemblyBuilderAccess
.RunAndSave
, tempDir
);
907 attrType
= typeof (AssemblyCultureAttribute
);
908 ci
= attrType
.GetConstructor (new Type
[] { typeof (String) }
);
909 cab
= new CustomAttributeBuilder (ci
, new object [1] { "neutral" }
);
910 ab
.SetCustomAttribute (cab
);
912 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
917 } catch (ArgumentException ex
) {
918 // Culture name neutral is not supported
919 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
920 Assert
.IsNull (ex
.InnerException
, "#B3");
921 Assert
.IsNotNull (ex
.Message
, "#B4");
922 Assert
.IsTrue (ex
.Message
.IndexOf ("neutral") != -1, "#B5");
923 Assert
.AreEqual ("name", ex
.ParamName
, "#B6");
927 [Test
] // DefineVersionInfoResource (String, String, String, String, String)
928 public void TestDefineVersionInfoResource2_ResourceAlreadyDefined ()
930 string version_res
= Path
.Combine (tempDir
, "version.res");
931 using (FileStream fs
= File
.OpenWrite (version_res
)) {
935 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
938 ab
.DefineUnmanagedResource (new byte [0]);
940 } catch (ArgumentException ex
) {
941 // Native resource has already been defined
942 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#A2");
943 Assert
.IsNull (ex
.InnerException
, "#A3");
944 Assert
.IsNotNull (ex
.Message
, "#A4");
945 Assert
.IsNull (ex
.ParamName
, "#A5");
949 ab
.DefineUnmanagedResource (version_res
);
951 } catch (ArgumentException ex
) {
952 // Native resource has already been defined
953 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#B2");
954 Assert
.IsNull (ex
.InnerException
, "#B3");
955 Assert
.IsNotNull (ex
.Message
, "#B4");
956 Assert
.IsNull (ex
.ParamName
, "#B5");
960 ab
.DefineVersionInfoResource ();
962 } catch (ArgumentException ex
) {
963 // Native resource has already been defined
964 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#C2");
965 Assert
.IsNull (ex
.InnerException
, "#C3");
966 Assert
.IsNotNull (ex
.Message
, "#C4");
967 Assert
.IsNull (ex
.ParamName
, "#C5");
971 ab
.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
973 } catch (ArgumentException ex
) {
974 // Native resource has already been defined
975 Assert
.AreEqual (typeof (ArgumentException
), ex
.GetType (), "#D2");
976 Assert
.IsNull (ex
.InnerException
, "#D3");
977 Assert
.IsNotNull (ex
.Message
, "#D4");
978 Assert
.IsNull (ex
.ParamName
, "#D5");
983 public void TestSetCustomAttribute1_CustomBuilder_Null ()
986 ab
.SetCustomAttribute (null);
988 } catch (ArgumentNullException ex
) {
989 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
990 Assert
.IsNull (ex
.InnerException
, "#3");
991 Assert
.IsNotNull (ex
.Message
, "#4");
992 Assert
.IsNotNull (ex
.ParamName
, "#5");
993 Assert
.AreEqual ("customBuilder", ex
.ParamName
, "#6");
998 public void TestSetCustomAttribute2_ConstructorInfo_Null ()
1001 ab
.SetCustomAttribute (null, new byte [0]);
1003 } catch (ArgumentNullException ex
) {
1004 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1005 Assert
.IsNull (ex
.InnerException
, "#3");
1006 Assert
.IsNotNull (ex
.Message
, "#4");
1007 Assert
.IsNotNull (ex
.ParamName
, "#5");
1008 Assert
.AreEqual ("con", ex
.ParamName
, "#6");
1013 public void TestSetCustomAttribute2_BinaryAttribute_Null ()
1016 ab
.SetCustomAttribute (typeof (AssemblyCompanyAttribute
).GetConstructor (
1017 new Type
[] { typeof (String) }
), null);
1019 } catch (ArgumentNullException ex
) {
1020 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
1021 Assert
.IsNull (ex
.InnerException
, "#3");
1022 Assert
.IsNotNull (ex
.Message
, "#4");
1023 Assert
.IsNotNull (ex
.ParamName
, "#5");
1024 Assert
.AreEqual ("binaryAttribute", ex
.ParamName
, "#6");
1028 [Test
] // SetCustomAttribute (CustomAttributeBuilder)
1029 public void TestSetCustomAttribute1 ()
1037 an
= new AssemblyName ();
1038 an
.Name
= "TestSetCustomAttributeA";
1040 ab
= domain
.DefineDynamicAssembly (an
, AssemblyBuilderAccess
.Save
, tempDir
);
1041 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyVersionAttribute
).
1042 GetConstructor (new Type
[] { typeof (string) }
), new object [] { "1.2.3.4"}
));
1043 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyCultureAttribute
).
1044 GetConstructor (new Type
[] { typeof (string) }
), new object [] { "bar"}
));
1045 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyAlgorithmIdAttribute
).
1046 GetConstructor (new Type
[] { typeof (AssemblyHashAlgorithm) }
),
1047 new object [] { AssemblyHashAlgorithm.MD5 }
));
1048 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyFlagsAttribute
).
1049 GetConstructor (new Type
[] { typeof (uint) }
), new object [] { (uint)0xff }
));
1050 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute
).
1051 GetConstructor (new Type
[] { typeof (bool) }
), new object [] { true }
));
1052 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (FooAttribute
).
1053 GetConstructor (Type
.EmptyTypes
), new object [0]));
1054 ab
.Save ("TestSetCustomAttributeA.dll");
1056 filename
= Path
.Combine (tempDir
, "TestSetCustomAttributeA.dll");
1057 check
= AssemblyName
.GetAssemblyName (filename
);
1058 Assert
.AreEqual (CultureInfo
.InvariantCulture
, check
.CultureInfo
, "#A1");
1060 Assert
.AreEqual (AssemblyNameFlags
.None
, check
.Flags
, "#A2");
1062 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, check
.Flags
, "#A2");
1064 Assert
.AreEqual ("TestSetCustomAttributeA, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", check
.FullName
, "#A3");
1066 Assert
.IsNull (check
.GetPublicKey (), "#A4");
1068 Assert
.AreEqual (new byte [0], check
.GetPublicKey (), "#A4");
1071 Assert
.AreEqual (new byte [0], check
.GetPublicKeyToken (), "#A5");
1073 Assert
.IsNull (check
.GetPublicKeyToken (), "#A5");
1075 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, check
.HashAlgorithm
, "#A6");
1076 Assert
.IsNull (check
.KeyPair
, "#A7");
1077 Assert
.AreEqual ("TestSetCustomAttributeA", check
.Name
, "#A8");
1079 //Assert.AreEqual (ProcessorArchitecture.MSIL, check.ProcessorArchitecture, "#A9");
1081 Assert
.AreEqual (new Version (0, 0, 0, 0), check
.Version
, "#A10");
1082 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
, check
.VersionCompatibility
, "#A11");
1084 using (FileStream fs
= File
.OpenRead (filename
)) {
1085 byte [] buffer
= new byte [fs
.Length
];
1086 fs
.Read (buffer
, 0, buffer
.Length
);
1087 a
= Assembly
.Load (buffer
);
1090 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyVersionAttribute
));
1091 Assert
.IsNotNull (attr
, "#A12a");
1092 Assert
.AreEqual ("1.2.3.4", ((AssemblyVersionAttribute
) attr
).Version
, "#A12b");
1093 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyCultureAttribute
));
1094 Assert
.IsNotNull (attr
, "#A13a");
1095 Assert
.AreEqual ("bar", ((AssemblyCultureAttribute
) attr
).Culture
, "#A13b");
1096 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyAlgorithmIdAttribute
));
1097 Assert
.IsNotNull (attr
, "#A14a");
1098 Assert
.AreEqual ((uint) AssemblyHashAlgorithm
.MD5
, ((AssemblyAlgorithmIdAttribute
) attr
).AlgorithmId
, "#A14b");
1099 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyFlagsAttribute
));
1100 Assert
.IsNotNull (attr
, "#A15a");
1101 Assert
.AreEqual ((uint) 0xff, ((AssemblyFlagsAttribute
) attr
).Flags
, "#A15b");
1102 attr
= Attribute
.GetCustomAttribute (a
, typeof (FooAttribute
));
1103 Assert
.IsNotNull (attr
, "#A16");
1105 an
= new AssemblyName ();
1106 an
.CultureInfo
= new CultureInfo ("nl-BE");
1107 an
.Flags
= AssemblyNameFlags
.Retargetable
;
1108 an
.Name
= "TestSetCustomAttributeB";
1110 an
.ProcessorArchitecture
= ProcessorArchitecture
.IA64
;
1112 an
.Version
= new Version (1, 3, 5, 7);
1113 an
.VersionCompatibility
= AssemblyVersionCompatibility
.SameDomain
;
1115 ab
= domain
.DefineDynamicAssembly (an
, AssemblyBuilderAccess
.Save
, tempDir
);
1116 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyVersionAttribute
).
1117 GetConstructor (new Type
[] { typeof (string) }
), new object [] { "1.2.3.4" }
));
1118 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyCultureAttribute
).
1119 GetConstructor (new Type
[] { typeof (string) }
), new object [] { "en-US" }
));
1120 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyAlgorithmIdAttribute
).
1121 GetConstructor (new Type
[] { typeof (AssemblyHashAlgorithm) }
),
1122 new object [] { AssemblyHashAlgorithm.MD5 }
));
1123 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyFlagsAttribute
).
1124 GetConstructor (new Type
[] { typeof (uint) }
), new object [] { (uint) 0x0100 }
));
1125 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute
).
1126 GetConstructor (new Type
[] { typeof (bool) }
), new object [] { true }
));
1127 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (FooAttribute
).
1128 GetConstructor (Type
.EmptyTypes
), new object [0]));
1129 ab
.Save ("TestSetCustomAttributeB.dll");
1131 filename
= Path
.Combine (tempDir
, "TestSetCustomAttributeB.dll");
1132 check
= AssemblyName
.GetAssemblyName (filename
);
1133 Assert
.AreEqual ("nl-BE", check
.CultureInfo
.Name
, "#B1");
1135 Assert
.AreEqual (AssemblyNameFlags
.Retargetable
, check
.Flags
, "#B2");
1137 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
| AssemblyNameFlags
.Retargetable
, check
.Flags
, "#B2");
1139 Assert
.AreEqual ("TestSetCustomAttributeB, Version=1.3.5.7, Culture=nl-BE, PublicKeyToken=null, Retargetable=Yes", check
.FullName
, "#B3");
1141 Assert
.IsNull (check
.GetPublicKey (), "#B4");
1143 Assert
.AreEqual (new byte [0], check
.GetPublicKey (), "#B4");
1146 Assert
.AreEqual (new byte [0], check
.GetPublicKeyToken (), "#B5");
1148 Assert
.IsNull (check
.GetPublicKeyToken (), "#B5");
1150 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, check
.HashAlgorithm
, "#B6");
1151 Assert
.IsNull (check
.KeyPair
, "#B7");
1152 Assert
.AreEqual ("TestSetCustomAttributeB", check
.Name
, "#B8");
1154 //Assert.AreEqual (ProcessorArchitecture.MSIL, check.ProcessorArchitecture, "#B9");
1156 Assert
.AreEqual (new Version (1, 3, 5, 7), check
.Version
, "#B10");
1157 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
, check
.VersionCompatibility
, "#B11");
1159 using (FileStream fs
= File
.OpenRead (filename
)) {
1160 byte [] buffer
= new byte [fs
.Length
];
1161 fs
.Read (buffer
, 0, buffer
.Length
);
1162 a
= Assembly
.Load (buffer
);
1165 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyVersionAttribute
));
1166 Assert
.IsNotNull (attr
, "#B12a");
1167 Assert
.AreEqual ("1.2.3.4", ((AssemblyVersionAttribute
) attr
).Version
, "#B12b");
1168 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyCultureAttribute
));
1169 Assert
.IsNotNull (attr
, "#B13a");
1170 Assert
.AreEqual ("en-US", ((AssemblyCultureAttribute
) attr
).Culture
, "#B13b");
1171 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyAlgorithmIdAttribute
));
1172 Assert
.IsNotNull (attr
, "#B14a");
1173 Assert
.AreEqual ((uint) AssemblyHashAlgorithm
.MD5
, ((AssemblyAlgorithmIdAttribute
) attr
).AlgorithmId
, "#B14b");
1174 attr
= Attribute
.GetCustomAttribute (a
, typeof (AssemblyFlagsAttribute
));
1175 Assert
.IsNotNull (attr
, "#B15a");
1176 Assert
.AreEqual ((uint) 0x0100, ((AssemblyFlagsAttribute
) attr
).Flags
, "#B15b");
1177 attr
= Attribute
.GetCustomAttribute (a
, typeof (FooAttribute
));
1178 Assert
.IsNotNull (attr
, "#B16");
1181 // strongname generated using "sn -k unit.snk"
1182 static byte[] strongName
= {
1183 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32,
1184 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x7F, 0x7C, 0xEA, 0x4A,
1185 0x28, 0x33, 0xD8, 0x3C, 0x86, 0x90, 0x86, 0x91, 0x11, 0xBB, 0x30, 0x0D,
1186 0x3D, 0x69, 0x04, 0x4C, 0x48, 0xF5, 0x4F, 0xE7, 0x64, 0xA5, 0x82, 0x72,
1187 0x5A, 0x92, 0xC4, 0x3D, 0xC5, 0x90, 0x93, 0x41, 0xC9, 0x1D, 0x34, 0x16,
1188 0x72, 0x2B, 0x85, 0xC1, 0xF3, 0x99, 0x62, 0x07, 0x32, 0x98, 0xB7, 0xE4,
1189 0xFA, 0x75, 0x81, 0x8D, 0x08, 0xB9, 0xFD, 0xDB, 0x00, 0x25, 0x30, 0xC4,
1190 0x89, 0x13, 0xB6, 0x43, 0xE8, 0xCC, 0xBE, 0x03, 0x2E, 0x1A, 0x6A, 0x4D,
1191 0x36, 0xB1, 0xEB, 0x49, 0x26, 0x6C, 0xAB, 0xC4, 0x29, 0xD7, 0x8F, 0x25,
1192 0x11, 0xA4, 0x7C, 0x81, 0x61, 0x97, 0xCB, 0x44, 0x2D, 0x80, 0x49, 0x93,
1193 0x48, 0xA7, 0xC9, 0xAB, 0xDB, 0xCF, 0xA3, 0x34, 0xCB, 0x6B, 0x86, 0xE0,
1194 0x4D, 0x27, 0xFC, 0xA7, 0x4F, 0x36, 0xCA, 0x13, 0x42, 0xD3, 0x83, 0xC4,
1195 0x06, 0x6E, 0x12, 0xE0, 0xA1, 0x3D, 0x9F, 0xA9, 0xEC, 0xD1, 0xC6, 0x08,
1196 0x1B, 0x3D, 0xF5, 0xDB, 0x4C, 0xD4, 0xF0, 0x2C, 0xAA, 0xFC, 0xBA, 0x18,
1197 0x6F, 0x48, 0x7E, 0xB9, 0x47, 0x68, 0x2E, 0xF6, 0x1E, 0x67, 0x1C, 0x7E,
1198 0x0A, 0xCE, 0x10, 0x07, 0xC0, 0x0C, 0xAD, 0x5E, 0xC1, 0x53, 0x70, 0xD5,
1199 0xE7, 0x25, 0xCA, 0x37, 0x5E, 0x49, 0x59, 0xD0, 0x67, 0x2A, 0xBE, 0x92,
1200 0x36, 0x86, 0x8A, 0xBF, 0x3E, 0x17, 0x04, 0xFB, 0x1F, 0x46, 0xC8, 0x10,
1201 0x5C, 0x93, 0x02, 0x43, 0x14, 0x96, 0x6A, 0xD9, 0x87, 0x17, 0x62, 0x7D,
1202 0x3A, 0x45, 0xBE, 0x35, 0xDE, 0x75, 0x0B, 0x2A, 0xCE, 0x7D, 0xF3, 0x19,
1203 0x85, 0x4B, 0x0D, 0x6F, 0x8D, 0x15, 0xA3, 0x60, 0x61, 0x28, 0x55, 0x46,
1204 0xCE, 0x78, 0x31, 0x04, 0x18, 0x3C, 0x56, 0x4A, 0x3F, 0xA4, 0xC9, 0xB1,
1205 0x41, 0xED, 0x22, 0x80, 0xA1, 0xB3, 0xE2, 0xC7, 0x1B, 0x62, 0x85, 0xE4,
1206 0x81, 0x39, 0xCB, 0x1F, 0x95, 0xCC, 0x61, 0x61, 0xDF, 0xDE, 0xF3, 0x05,
1207 0x68, 0xB9, 0x7D, 0x4F, 0xFF, 0xF3, 0xC0, 0x0A, 0x25, 0x62, 0xD9, 0x8A,
1208 0x8A, 0x9E, 0x99, 0x0B, 0xFB, 0x85, 0x27, 0x8D, 0xF6, 0xD4, 0xE1, 0xB9,
1209 0xDE, 0xB4, 0x16, 0xBD, 0xDF, 0x6A, 0x25, 0x9C, 0xAC, 0xCD, 0x91, 0xF7,
1210 0xCB, 0xC1, 0x81, 0x22, 0x0D, 0xF4, 0x7E, 0xEC, 0x0C, 0x84, 0x13, 0x5A,
1211 0x74, 0x59, 0x3F, 0x3E, 0x61, 0x00, 0xD6, 0xB5, 0x4A, 0xA1, 0x04, 0xB5,
1212 0xA7, 0x1C, 0x29, 0xD0, 0xE1, 0x11, 0x19, 0xD7, 0x80, 0x5C, 0xEE, 0x08,
1213 0x15, 0xEB, 0xC9, 0xA8, 0x98, 0xF5, 0xA0, 0xF0, 0x92, 0x2A, 0xB0, 0xD3,
1214 0xC7, 0x8C, 0x8D, 0xBB, 0x88, 0x96, 0x4F, 0x18, 0xF0, 0x8A, 0xF9, 0x31,
1215 0x9E, 0x44, 0x94, 0x75, 0x6F, 0x78, 0x04, 0x10, 0xEC, 0xF3, 0xB0, 0xCE,
1216 0xA0, 0xBE, 0x7B, 0x25, 0xE1, 0xF7, 0x8A, 0xA8, 0xD4, 0x63, 0xC2, 0x65,
1217 0x47, 0xCC, 0x5C, 0xED, 0x7D, 0x8B, 0x07, 0x4D, 0x76, 0x29, 0x53, 0xAC,
1218 0x27, 0x8F, 0x5D, 0x78, 0x56, 0xFA, 0x99, 0x45, 0xA2, 0xCC, 0x65, 0xC4,
1219 0x54, 0x13, 0x9F, 0x38, 0x41, 0x7A, 0x61, 0x0E, 0x0D, 0x34, 0xBC, 0x11,
1220 0xAF, 0xE2, 0xF1, 0x8B, 0xFA, 0x2B, 0x54, 0x6C, 0xA3, 0x6C, 0x09, 0x1F,
1221 0x0B, 0x43, 0x9B, 0x07, 0x95, 0x83, 0x3F, 0x97, 0x99, 0x89, 0xF5, 0x51,
1222 0x41, 0xF6, 0x8E, 0x5D, 0xEF, 0x6D, 0x24, 0x71, 0x41, 0x7A, 0xAF, 0xBE,
1223 0x81, 0x71, 0xAB, 0x76, 0x2F, 0x1A, 0x5A, 0xBA, 0xF3, 0xA6, 0x65, 0x7A,
1224 0x80, 0x50, 0xCE, 0x23, 0xC3, 0xC7, 0x53, 0xB0, 0x7C, 0x97, 0x77, 0x27,
1225 0x70, 0x98, 0xAE, 0xB5, 0x24, 0x66, 0xE1, 0x60, 0x39, 0x41, 0xDA, 0x54,
1226 0x01, 0x64, 0xFB, 0x10, 0x33, 0xCE, 0x8B, 0xBE, 0x27, 0xD4, 0x21, 0x57,
1227 0xCC, 0x0F, 0x1A, 0xC1, 0x3D, 0xF3, 0xCC, 0x39, 0xF0, 0x2F, 0xAE, 0xF1,
1228 0xC0, 0xCD, 0x3B, 0x23, 0x87, 0x49, 0x7E, 0x40, 0x32, 0x6A, 0xD3, 0x96,
1229 0x4A, 0xE5, 0x5E, 0x6E, 0x26, 0xFD, 0x8A, 0xCF, 0x7E, 0xFC, 0x37, 0xDE,
1230 0x39, 0x0C, 0x53, 0x81, 0x75, 0x08, 0xAF, 0x6B, 0x39, 0x6C, 0xFB, 0xC9,
1231 0x79, 0xC0, 0x9B, 0x5F, 0x34, 0x86, 0xB2, 0xDE, 0xC4, 0x19, 0x84, 0x5F,
1232 0x0E, 0xED, 0x9B, 0xB8, 0xD3, 0x17, 0xDA, 0x78 };
1234 static byte [] token
= { 0x0e, 0xea, 0x7c, 0xe6, 0x5f, 0x35, 0xf2, 0xd8 }
;
1237 public void StrongName_MissingKeyFile_NoDelay ()
1239 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyKeyFileAttribute
).GetConstructor (new Type
[] { typeof (string) }
), new object [] { "missing.snk" }
));
1240 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute
).GetConstructor (new Type
[] { typeof (bool) }
), new object [] { false }
));
1241 ab
.Save ("StrongName_MissingKeyFile_NoDelay.dll");
1243 string filename
= Path
.Combine (tempDir
, "StrongName_MissingKeyFile_NoDelay.dll");
1244 AssemblyName check
= AssemblyName
.GetAssemblyName (filename
);
1245 // no exception is thrown (file not found)
1246 // because it's not AssemblyBuilder.Save job to do the signing :-/
1248 Assert
.AreEqual (AssemblyNameFlags
.None
, check
.Flags
, "#1");
1249 Assert
.IsNull (check
.GetPublicKey (), "#2");
1250 Assert
.IsNotNull (check
.GetPublicKeyToken (), "#3a");
1251 Assert
.AreEqual (0, check
.GetPublicKeyToken ().Length
, "#3b");
1253 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, check
.Flags
, "#1");
1254 Assert
.IsNotNull (check
.GetPublicKey (), "#2a");
1255 Assert
.AreEqual (0, check
.GetPublicKey ().Length
, "#2b");
1256 Assert
.IsNull (check
.GetPublicKeyToken (), "#3");
1258 Assert
.IsTrue (check
.FullName
.IndexOf ("Version=0.0.0.0") != -1, "#4");
1259 Assert
.IsTrue (check
.FullName
.IndexOf ("Culture=neutral") != -1, "#5");
1260 Assert
.IsTrue (check
.FullName
.IndexOf ("PublicKeyToken=null") != -1, "#6");
1264 public void StrongName_KeyFile_Delay ()
1266 string strongfile
= Path
.Combine (tempDir
, "strongname.snk");
1267 using (FileStream fs
= File
.OpenWrite (strongfile
)) {
1268 fs
.Write (strongName
, 0, strongName
.Length
);
1271 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyKeyFileAttribute
).GetConstructor (new Type
[] { typeof (string) }
), new object [] { strongfile }
));
1272 ab
.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute
).GetConstructor (new Type
[] { typeof (bool) }
), new object [] { true }
));
1273 ab
.Save ("StrongName_KeyFile_Delay.dll");
1275 string filename
= Path
.Combine (tempDir
, "StrongName_KeyFile_Delay.dll");
1276 AssemblyName check
= AssemblyName
.GetAssemblyName (filename
);
1277 // no public key is inserted into the assembly
1278 // because it's not AssemblyBuilder.Save job to do the signing :-/
1280 Assert
.AreEqual (AssemblyNameFlags
.None
, check
.Flags
, "#1");
1281 Assert
.IsNull (check
.GetPublicKey (), "#2");
1282 Assert
.IsNotNull (check
.GetPublicKeyToken (), "#3a");
1283 Assert
.AreEqual (0, check
.GetPublicKeyToken ().Length
, "#3b");
1285 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, check
.Flags
, "#1");
1286 Assert
.IsNotNull (check
.GetPublicKey (), "#2a");
1287 Assert
.AreEqual (0, check
.GetPublicKey ().Length
, "#2b");
1288 Assert
.IsNull (check
.GetPublicKeyToken (), "#3");
1290 Assert
.IsTrue (check
.FullName
.IndexOf ("Version=0.0.0.0") != -1, "#4");
1291 Assert
.IsTrue (check
.FullName
.IndexOf ("Culture=neutral") != -1, "#5");
1292 Assert
.IsTrue (check
.FullName
.IndexOf ("PublicKeyToken=null") != -1, "#6");
1296 public void StrongName_WithoutAttributes ()
1298 // this demonstrate that AssemblyKeyFileAttribute (or AssemblyKeyNameAttribute)
1299 // aren't required to sign an assembly.
1300 AssemblyName an
= genAssemblyName ();
1301 an
.KeyPair
= new StrongNameKeyPair (strongName
);
1302 AssemblyBuilder ab
= domain
.DefineDynamicAssembly (an
, AssemblyBuilderAccess
.RunAndSave
, tempDir
);
1303 ab
.Save ("StrongName_WithoutAttributes.dll");
1305 string filename
= Path
.Combine (tempDir
, "StrongName_WithoutAttributes.dll");
1306 AssemblyName check
= AssemblyName
.GetAssemblyName (filename
);
1307 Assert
.IsNotNull (check
.GetPublicKey (), "#1a");
1308 Assert
.IsTrue (check
.GetPublicKey ().Length
> 0, "#1b");
1309 Assert
.AreEqual ("0E-EA-7C-E6-5F-35-F2-D8", BitConverter
.ToString (check
.GetPublicKeyToken ()), "#2");
1311 Assert
.IsTrue (check
.FullName
.IndexOf ("Version=0.0.0.0") != -1, "#3");
1312 Assert
.IsTrue (check
.FullName
.IndexOf ("Culture=neutral") != -1, "#4");
1313 Assert
.IsTrue (check
.FullName
.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#5");
1314 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, check
.Flags
, "#6");
1318 public void SaveUnfinishedTypes ()
1320 mb
.DefineType ("TestType", TypeAttributes
.Class
|
1321 TypeAttributes
.Public
| TypeAttributes
.Sealed
|
1322 TypeAttributes
.AnsiClass
| TypeAttributes
.AutoClass
,
1325 ab
.Save ("def_module");
1327 } catch (NotSupportedException ex
) {
1328 // Type 'TestType' was not completed
1329 Assert
.AreEqual (typeof (NotSupportedException
), ex
.GetType (), "#2");
1330 Assert
.IsNull (ex
.InnerException
, "#3");
1331 Assert
.IsNotNull (ex
.Message
, "#4");
1332 Assert
.IsTrue (ex
.Message
.IndexOf ("TestType") != -1, "#5");
1337 public void GetModules ()
1341 arr
= ab
.GetModules ();
1342 Assert
.IsNotNull (arr
, "#A1");
1343 // FIXME: This doesn't work on mono
1344 //Assert.IsTrue (arr.Length >= 2, "#A2");
1345 foreach (Module m
in arr
)
1346 Assert
.AreEqual (typeof (ModuleBuilder
), m
.GetType (), "#A3");
1348 // Test with no modules
1349 AssemblyBuilder ab2
= genAssembly ();
1350 arr
= ab2
.GetModules ();
1351 Assert
.IsNotNull (arr
, "#B1");
1352 Assert
.AreEqual (0, arr
.Length
, "#B2");
1356 [Category ("NotWorking")] // bug #351932
1357 public void GetReferencedAssemblies ()
1359 AssemblyBuilder ab1
;
1360 AssemblyBuilder ab2
;
1361 AssemblyBuilder ab3
;
1362 AssemblyName
[] refs
;
1370 AssemblyName an1
= genAssemblyName ();
1371 an1
.Version
= new Version (3, 0);
1372 AssemblyName an2
= genAssemblyName ();
1373 an2
.Version
= new Version ("1.2.3.4");
1374 an2
.KeyPair
= new StrongNameKeyPair (strongName
);
1375 AssemblyName an3
= genAssemblyName ();
1377 ab1
= domain
.DefineDynamicAssembly (an1
,
1378 AssemblyBuilderAccess
.RunAndSave
,
1380 ab2
= domain
.DefineDynamicAssembly (an2
,
1381 AssemblyBuilderAccess
.RunAndSave
,
1383 ab3
= domain
.DefineDynamicAssembly (an3
,
1384 AssemblyBuilderAccess
.RunAndSave
,
1387 refs
= ab1
.GetReferencedAssemblies ();
1388 Assert
.AreEqual (0, refs
.Length
, "#A1");
1389 refs
= ab2
.GetReferencedAssemblies ();
1390 Assert
.AreEqual (0, refs
.Length
, "#A2");
1391 refs
= ab3
.GetReferencedAssemblies ();
1392 Assert
.AreEqual (0, refs
.Length
, "#A3");
1394 mb1
= ab1
.DefineDynamicModule (an1
.Name
+ ".dll");
1395 tb1
= mb1
.DefineType ("TestType1", TypeAttributes
.Class
|
1396 TypeAttributes
.Public
, typeof (Attribute
));
1399 mb2
= ab2
.DefineDynamicModule (an2
.Name
+ ".dll");
1400 tb2
= mb2
.DefineType ("TestType2", TypeAttributes
.Class
|
1401 TypeAttributes
.Public
, tb1
);
1404 mb3
= ab3
.DefineDynamicModule (an3
.Name
+ ".dll");
1405 tb3
= mb3
.DefineType ("TestType3", TypeAttributes
.Class
|
1406 TypeAttributes
.Public
, tb1
);
1408 tb4
= mb3
.DefineType ("TestType4", TypeAttributes
.Class
|
1409 TypeAttributes
.Public
, tb2
);
1412 refs
= ab1
.GetReferencedAssemblies ();
1413 Assert
.AreEqual (0, refs
.Length
, "#B1");
1414 refs
= ab2
.GetReferencedAssemblies ();
1415 Assert
.AreEqual (0, refs
.Length
, "#B2");
1416 refs
= ab3
.GetReferencedAssemblies ();
1417 Assert
.AreEqual (0, refs
.Length
, "#B3");
1419 ab1
.Save (an1
.Name
+ ".dll");
1420 ab2
.Save (an2
.Name
+ ".dll");
1421 ab3
.Save (an3
.Name
+ ".dll");
1423 refs
= ab1
.GetReferencedAssemblies ();
1424 Assert
.AreEqual (0, refs
.Length
, "#C1");
1425 refs
= ab2
.GetReferencedAssemblies ();
1426 Assert
.AreEqual (0, refs
.Length
, "#C2");
1427 refs
= ab3
.GetReferencedAssemblies ();
1428 Assert
.AreEqual (0, refs
.Length
, "#C3");
1430 string assemblyFile
= Path
.Combine (tempDir
, an1
.Name
+ ".dll");
1432 using (FileStream fs
= File
.OpenRead (assemblyFile
)) {
1433 byte [] buffer
= new byte [fs
.Length
];
1434 fs
.Read (buffer
, 0, buffer
.Length
);
1435 Assembly a
= Assembly
.Load (buffer
);
1436 refs
= a
.GetReferencedAssemblies ();
1437 Assert
.AreEqual (1, refs
.Length
, "#D1");
1439 Assert
.IsNull (refs
[0].CodeBase
, "#D2:CodeBase");
1440 Assert
.IsNotNull (refs
[0].CultureInfo
, "#D2:CultureInfo");
1441 Assert
.IsNull (refs
[0].EscapedCodeBase
, "#D2:EscapedCodeBase");
1442 Assert
.AreEqual (AssemblyNameFlags
.None
, refs
[0].Flags
, "#D2:Flags");
1443 Assert
.AreEqual (Consts
.AssemblyCorlib
, refs
[0].FullName
, "#D2:FullName");
1444 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, refs
[0].HashAlgorithm
, "#D2:HashAlgorithm");
1445 Assert
.IsNull (refs
[0].KeyPair
, "#D2:KeyPair");
1446 Assert
.AreEqual ("mscorlib", refs
[0].Name
, "#D2:Name");
1448 Assert
.AreEqual (ProcessorArchitecture
.None
, refs
[0].ProcessorArchitecture
, "#D2:PA");
1450 Assert
.AreEqual (new Version (Consts
.FxVersion
), refs
[0].Version
, "#D2:Version");
1451 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
,
1452 refs
[0].VersionCompatibility
, "#D2:VersionCompatibility");
1453 Assert
.IsNull (refs
[0].GetPublicKey (), "#D2:GetPublicKey");
1454 Assert
.IsNotNull (refs
[0].GetPublicKeyToken (), "#D2:GetPublicKeyToken(a)");
1455 Assert
.AreEqual (8, refs
[0].GetPublicKeyToken ().Length
, "#D2:GetPublicKeyToken(b)");
1456 Assert
.AreEqual (refs
[0].FullName
, refs
[0].ToString (), "#D2:ToString");
1459 assemblyFile
= Path
.Combine (tempDir
, an2
.Name
+ ".dll");
1461 using (FileStream fs
= File
.OpenRead (assemblyFile
)) {
1462 byte [] buffer
= new byte [fs
.Length
];
1463 fs
.Read (buffer
, 0, buffer
.Length
);
1464 Assembly a
= Assembly
.Load (buffer
);
1465 refs
= a
.GetReferencedAssemblies ();
1466 Assert
.AreEqual (1, refs
.Length
, "#E1");
1468 Assert
.IsNull (refs
[0].CodeBase
, "#E2:CodeBase");
1469 Assert
.IsNotNull (refs
[0].CultureInfo
, "#E2:CultureInfo(a)");
1470 Assert
.AreEqual (CultureInfo
.InvariantCulture
, refs
[0].CultureInfo
, "#E2:CultureInfo(b)");
1471 Assert
.IsNull (refs
[0].EscapedCodeBase
, "#E2:EscapedCodeBase");
1472 Assert
.AreEqual (AssemblyNameFlags
.None
, refs
[0].Flags
, "#E2:Flags");
1473 Assert
.AreEqual (an1
.Name
+ ", Version=3.0.0.0, Culture=neutral, PublicKeyToken=null", refs
[0].FullName
, "#E2:FullName");
1474 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, refs
[0].HashAlgorithm
, "#E2:HashAlgorithm");
1475 Assert
.IsNull (refs
[0].KeyPair
, "#E2:KeyPair");
1476 Assert
.AreEqual (an1
.Name
, refs
[0].Name
, "#E2:Name");
1478 Assert
.AreEqual (ProcessorArchitecture
.None
, refs
[0].ProcessorArchitecture
, "#E2:PA");
1480 Assert
.AreEqual (new Version (3, 0, 0, 0), refs
[0].Version
, "#E2:Version");
1481 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
,
1482 refs
[0].VersionCompatibility
, "#E2:VersionCompatibility");
1483 Assert
.IsNull (refs
[0].GetPublicKey (), "#E2:GetPublicKey");
1484 Assert
.IsNotNull (refs
[0].GetPublicKeyToken (), "#E2:GetPublicKeyToken(a)");
1485 Assert
.AreEqual (0, refs
[0].GetPublicKeyToken ().Length
, "#E2:GetPublicKeyToken(b)");
1486 Assert
.AreEqual (refs
[0].FullName
, refs
[0].ToString (), "#E2:ToString");
1489 assemblyFile
= Path
.Combine (tempDir
, an3
.Name
+ ".dll");
1491 using (FileStream fs
= File
.OpenRead (assemblyFile
)) {
1492 byte [] buffer
= new byte [fs
.Length
];
1493 fs
.Read (buffer
, 0, buffer
.Length
);
1494 Assembly a
= Assembly
.Load (buffer
);
1495 refs
= a
.GetReferencedAssemblies ();
1496 Assert
.AreEqual (2, refs
.Length
, "#F1");
1498 Assert
.IsNull (refs
[0].CodeBase
, "#F2:CodeBase");
1499 Assert
.IsNotNull (refs
[0].CultureInfo
, "#F2:CultureInfo(a)");
1500 Assert
.AreEqual (CultureInfo
.InvariantCulture
, refs
[0].CultureInfo
, "#F2:CultureInfo(b)");
1501 Assert
.IsNull (refs
[0].EscapedCodeBase
, "#F2:EscapedCodeBase");
1502 Assert
.AreEqual (AssemblyNameFlags
.None
, refs
[0].Flags
, "#F2:Flags");
1503 Assert
.AreEqual (an1
.Name
+ ", Version=3.0.0.0, Culture=neutral, PublicKeyToken=null", refs
[0].FullName
, "#F2:FullName");
1504 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, refs
[0].HashAlgorithm
, "#F2:HashAlgorithm");
1505 Assert
.IsNull (refs
[0].KeyPair
, "#F2:KeyPair");
1506 Assert
.AreEqual (an1
.Name
, refs
[0].Name
, "#F2:Name");
1508 Assert
.AreEqual (ProcessorArchitecture
.None
, refs
[0].ProcessorArchitecture
, "#F2:PA");
1510 Assert
.AreEqual (new Version (3, 0, 0, 0), refs
[0].Version
, "#F2:Version");
1511 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
,
1512 refs
[0].VersionCompatibility
, "#F2:VersionCompatibility");
1513 Assert
.IsNull (refs
[0].GetPublicKey (), "#F2:GetPublicKey");
1514 Assert
.IsNotNull (refs
[0].GetPublicKeyToken (), "#F2:GetPublicKeyToken(a)");
1515 Assert
.AreEqual (0, refs
[0].GetPublicKeyToken ().Length
, "#F2:GetPublicKeyToken(b)");
1516 Assert
.AreEqual (refs
[0].FullName
, refs
[0].ToString (), "#F2:ToString");
1518 Assert
.IsNull (refs
[1].CodeBase
, "#F3:CodeBase");
1519 Assert
.IsNotNull (refs
[1].CultureInfo
, "#F3:CultureInfo(a)");
1520 Assert
.AreEqual (CultureInfo
.InvariantCulture
, refs
[1].CultureInfo
, "#F3:CultureInfo(b)");
1521 Assert
.IsNull (refs
[1].EscapedCodeBase
, "#F3:EscapedCodeBase");
1522 Assert
.AreEqual (AssemblyNameFlags
.None
, refs
[1].Flags
, "#F3:Flags");
1523 Assert
.AreEqual (an2
.Name
+ ", Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8", refs
[1].FullName
, "#F3:FullName");
1524 Assert
.AreEqual (AssemblyHashAlgorithm
.SHA1
, refs
[1].HashAlgorithm
, "#F3:HashAlgorithm");
1525 Assert
.IsNull (refs
[1].KeyPair
, "#F3:KeyPair");
1526 Assert
.AreEqual (an2
.Name
, refs
[1].Name
, "#F3:Name");
1528 Assert
.AreEqual (ProcessorArchitecture
.None
, refs
[1].ProcessorArchitecture
, "#F3:PA");
1530 Assert
.AreEqual (new Version (1, 2, 3, 4), refs
[1].Version
, "#F3:Version");
1531 Assert
.AreEqual (AssemblyVersionCompatibility
.SameMachine
,
1532 refs
[1].VersionCompatibility
, "#F3:VersionCompatibility");
1533 Assert
.IsNull (refs
[1].GetPublicKey (), "#F3:GetPublicKey");
1534 Assert
.AreEqual (token
, refs
[1].GetPublicKeyToken (), "#F3:GetPublicKeyToken");
1535 Assert
.AreEqual (refs
[1].FullName
, refs
[1].ToString (), "#F3:ToString");
1539 [Test
] // bug #78724
1540 public void GetTypes ()
1542 TypeBuilder tb
= mb
.DefineType ("sometype");
1545 Type
[] types
= ab
.GetTypes ();
1546 Assert
.AreEqual (1, types
.Length
, "#1");
1547 Assert
.AreEqual ("sometype", types
[0].Name
, "#2");
1551 public void AssemblyName_Culture ()
1553 AssemblyName assemblyName
= new AssemblyName ();
1554 assemblyName
.Name
= "AssemblyNameTest";
1555 assemblyName
.Version
= new Version ("1.0.0.0");
1556 assemblyName
.CultureInfo
= new CultureInfo ("en-US");
1558 const string fullName
= "AssemblyNameTest, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null";
1559 const string abName
= "AssemblyNameTest, Version=1.0.0.0, Culture=en-US";
1561 AssertAssemblyName (tempDir
, assemblyName
, abName
, fullName
);
1565 public void AssemblyName_PublicKey ()
1567 AssemblyName assemblyName
= new AssemblyName ();
1568 assemblyName
.Name
= "AssemblyNameTest_PublicKey";
1569 assemblyName
.Version
= new Version ("1.2.3.4");
1570 assemblyName
.KeyPair
= new StrongNameKeyPair (strongName
);
1572 Assert
.AreEqual ("AssemblyNameTest_PublicKey, Version=1.2.3.4", assemblyName
.FullName
, "#A1");
1574 const string fullName
= "AssemblyNameTest_PublicKey, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8";
1576 AssemblyBuilder ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (
1577 assemblyName
, AssemblyBuilderAccess
.Save
, tempDir
);
1579 AssemblyName abName
= ab
.GetName ();
1580 Assert
.AreEqual (CultureInfo
.InvariantCulture
, abName
.CultureInfo
, "#B1");
1581 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, abName
.Flags
, "#B2");
1582 Assert
.IsNotNull (abName
.GetPublicKey () != null, "#B3a");
1583 Assert
.IsTrue (abName
.GetPublicKey ().Length
> 0, "#B3b");
1584 Assert
.IsNotNull (abName
.GetPublicKeyToken (), "#B4a");
1585 Assert
.IsTrue (abName
.GetPublicKeyToken ().Length
> 0, "#B4b");
1587 Assert
.AreEqual (fullName
, abName
.FullName
, "#B5");
1589 //Assert.AreEqual ("AssemblyNameTest_PublicKey, Version=1.2.3.4, PublicKeyToken=0eea7ce65f35f2d8", abName.FullName, "#B5");
1590 Assert
.IsTrue (abName
.FullName
.IndexOf ("AssemblyNameTest_PublicKey, Version=1.2.3.4") != -1, "#B5a");
1591 Assert
.IsTrue (abName
.FullName
.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#B5b");
1594 ab
.Save ("AssemblyNameTest_PublicKey.dll");
1595 AssemblyName bakedName
= AssemblyName
.GetAssemblyName (Path
.Combine(
1596 tempDir
, "AssemblyNameTest_PublicKey.dll"));
1598 Assert
.AreEqual (CultureInfo
.InvariantCulture
, bakedName
.CultureInfo
, "#C1");
1599 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, bakedName
.Flags
, "#C2");
1600 Assert
.IsNotNull (bakedName
.GetPublicKeyToken (), "#C3");
1601 Assert
.IsNotNull (bakedName
.GetPublicKey (), "#C4");
1602 Assert
.AreEqual (fullName
, bakedName
.FullName
, "#C5");
1606 public void AssemblyName_MoreCultureInfo ()
1608 AssemblyName assemblyName
= new AssemblyName ();
1609 assemblyName
.Name
= "AssemblyNameTest_MoreCultureInfo";
1610 assemblyName
.Version
= new Version ("1.2.3.4");
1611 assemblyName
.KeyPair
= new StrongNameKeyPair (strongName
);
1613 Assert
.IsNull (assemblyName
.CultureInfo
, "#A1");
1614 Assert
.AreEqual ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4", assemblyName
.FullName
, "#A2");
1616 const string fullName
= "AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8";
1618 AssemblyBuilder ab
= AppDomain
.CurrentDomain
.DefineDynamicAssembly (
1619 assemblyName
, AssemblyBuilderAccess
.Save
, tempDir
);
1621 AssemblyName abName
= ab
.GetName ();
1622 Assert
.IsNotNull (abName
.CultureInfo
!= null, "#B1");
1624 Assert
.IsTrue (abName
.CultureInfo
!= CultureInfo
.InvariantCulture
, "#B2a");
1625 Assert
.AreEqual (CultureInfo
.InvariantCulture
.LCID
, abName
.CultureInfo
.LCID
, "#B2a");
1626 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, abName
.Flags
, "#B3");
1627 Assert
.AreEqual (fullName
, abName
.FullName
, "#B4");
1629 Assert
.AreEqual (CultureInfo
.InvariantCulture
, abName
.CultureInfo
, "#B2");
1630 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, abName
.Flags
, "#B3");
1631 //Assert.AreEqual ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4, PublicKeyToken=0eea7ce65f35f2d8", abName.FullName, "#B4");
1632 Assert
.IsTrue (abName
.FullName
.IndexOf ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4") != -1, "#B4a");
1633 Assert
.IsTrue (abName
.FullName
.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#B4b");
1636 ab
.Save ("AssemblyNameTest_MoreCultureInfo.dll");
1638 AssemblyName bakedName
= AssemblyName
.GetAssemblyName (Path
.Combine(
1639 tempDir
, "AssemblyNameTest_MoreCultureInfo.dll"));
1641 Assert
.IsNotNull (bakedName
.CultureInfo
, "#C1");
1644 Assert
.IsTrue (abName
.CultureInfo
!= CultureInfo
.InvariantCulture
, "#C2a");
1645 Assert
.AreEqual (CultureInfo
.InvariantCulture
.LCID
, abName
.CultureInfo
.LCID
, "#C2b");
1647 Assert
.AreEqual (CultureInfo
.InvariantCulture
, bakedName
.CultureInfo
, "#C2");
1649 Assert
.AreEqual (fullName
, bakedName
.FullName
, "#C3");
1653 public void AssemblyName_NoVersion ()
1655 AssemblyName assemblyName
= new AssemblyName ();
1656 assemblyName
.Name
= "AssemblyNameTest";
1658 const string fullName
= "AssemblyNameTest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null";
1659 const string abName
= "AssemblyNameTest, Version=0.0.0.0";
1661 AssertAssemblyName (tempDir
, assemblyName
, abName
, fullName
);
1665 public void AssemblyName_Version ()
1667 AssemblyName assemblyName
= new AssemblyName ();
1668 assemblyName
.Name
= "AssemblyNameTest";
1669 assemblyName
.Version
= new Version (1, 2, 3, 4);
1671 string fullName
= "AssemblyNameTest, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null";
1672 string abName
= "AssemblyNameTest, Version=1.2.3.4";
1674 AssertAssemblyName (tempDir
, assemblyName
, abName
, fullName
);
1676 assemblyName
= new AssemblyName ();
1677 assemblyName
.Name
= "AssemblyNameTest";
1678 assemblyName
.Version
= new Version (1, 2);
1680 fullName
= "AssemblyNameTest, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null";
1681 abName
= "AssemblyNameTest, Version=1.2.0.0";
1683 AssertAssemblyName (tempDir
, assemblyName
, abName
, fullName
);
1687 public void GetType_IgnoreCase ()
1689 TypeBuilder tb
= mb
.DefineType ("Foo.Test2", TypeAttributes
.Public
, typeof (object));
1694 t
= ab
.GetType ("foo.Test2", true, true);
1695 Assert
.AreEqual ("Test2", t
.Name
, "#1");
1697 t
= ab
.GetType ("foo.test2", true, true);
1698 Assert
.AreEqual ("Test2", t
.Name
, "#2");
1700 t
= ab
.GetType ("Foo.test2", true, true);
1701 Assert
.AreEqual ("Test2", t
.Name
, "#3");
1706 public void GetType ()
1708 TypeBuilder tb
= mb
.DefineType ("Test", TypeAttributes
.Public
);
1710 Assert
.IsNull (ab
.GetType ("Test", false, true), "#1");
1712 ab
.GetType ("Test", true, true);
1714 } catch (TypeLoadException
) { }
1716 var res
= tb
.CreateType ();
1718 Assert
.AreSame (res
, ab
.GetType ("Test", false, true), "#3");
1722 public void GetModule ()
1724 var ab
= genAssembly ();
1725 Assert
.IsNull (ab
.GetModule ("Foo"), "#1");
1727 var modA
= ab
.DefineDynamicModule ("Foo");
1728 var modB
= ab
.DefineDynamicModule ("Bar");
1730 Assert
.AreSame (modA
, ab
.GetModule ("Foo"), "#2");
1731 Assert
.AreSame (modB
, ab
.GetModule ("Bar"), "#3");
1732 Assert
.IsNull (ab
.GetModule ("FooBar"), "#4");
1736 public void GetModules2 ()
1738 //XXX this is not the v4 behavior since it returns
1739 //the manifest module in the place of the first one
1740 var ab
= genAssembly ();
1741 var modA
= ab
.DefineDynamicModule ("Foo");
1742 var modB
= ab
.DefineDynamicModule ("Bar");
1743 Assert
.AreEqual (2, ab
.GetModules ().Length
, "#1");
1744 Assert
.AreSame (modA
, ab
.GetModules () [0], "#2");
1745 Assert
.AreSame (modB
, ab
.GetModules () [1], "#3");
1749 [Category ("NotDotNet")] // MS returns the real deal
1750 public void GetReferencedAssemblies_Trivial ()
1752 Assert
.IsNotNull (ab
.GetReferencedAssemblies (), "#1");
1756 public void GetLoadedModules ()
1758 var res
= ab
.GetLoadedModules (true);
1759 Assert
.IsNotNull (res
, "#1");
1760 Assert
.AreEqual (1, res
.Length
, "#2");
1761 Assert
.AreEqual (mb
, res
[0], "#3");
1764 [ExpectedException (typeof (TypeLoadException
))]
1765 public void GetCustomAttributes_NotCreated ()
1767 AssemblyBuilder ab
= genAssembly ();
1768 ModuleBuilder mb
= ab
.DefineDynamicModule("tester", "tester.dll", false);
1769 TypeBuilder tb
= mb
.DefineType ("T");
1770 tb
.SetParent (typeof (Attribute
));
1771 ConstructorBuilder ctor
= tb
.DefineDefaultConstructor (MethodAttributes
.Public
);
1772 object [] o
= new object [0];
1773 CustomAttributeBuilder cab
= new CustomAttributeBuilder (ctor
, o
);
1774 ab
.SetCustomAttribute (cab
);
1776 ab
.GetCustomAttributes (true);
1779 private static void AssertAssemblyName (string tempDir
, AssemblyName assemblyName
, string abName
, string fullName
)
1781 AppDomain currentDomain
= AppDomain
.CurrentDomain
;
1782 AppDomain newDomain
= null;
1785 AssemblyBuilder ab
= currentDomain
.DefineDynamicAssembly (
1786 assemblyName
, AssemblyBuilderAccess
.Save
, tempDir
);
1787 ab
.Save (assemblyName
.Name
+ ".dll");
1790 // on .NET 2.0, the full name of the AssemblyBuilder matches the
1791 // fully qualified assembly name
1792 Assert
.AreEqual (fullName
, ab
.FullName
, "#1");
1794 //Assert.AreEqual (abName, ab.FullName, "#1");
1797 AssemblyName an
= ab
.GetName ();
1799 Assert
.AreEqual (AssemblyNameFlags
.PublicKey
, an
.Flags
, "#2");
1800 Assert
.IsNotNull (an
.GetPublicKey (), "#3a");
1801 Assert
.AreEqual (0, an
.GetPublicKey ().Length
, "#3b");
1803 Assert
.IsNotNull (an
.GetPublicKeyToken (), "#4a");
1804 Assert
.AreEqual (0, an
.GetPublicKeyToken ().Length
, "#4b");
1806 Assert
.IsNull (an
.GetPublicKeyToken (), "#4");
1809 // load assembly in separate domain, so we can clean-up after the
1811 newDomain
= AppDomain
.CreateDomain ("test2", currentDomain
.Evidence
,
1812 currentDomain
.SetupInformation
);
1814 Helper helper
= new Helper (Path
.Combine (tempDir
, assemblyName
.Name
+ ".dll"),
1816 newDomain
.DoCallBack (new CrossAppDomainDelegate (helper
.Test
));
1818 if (newDomain
!= null) {
1819 AppDomain
.Unload (newDomain
);
1825 private class Helper
1827 private readonly string _assemblyPath
;
1828 private readonly string _assemblyName
;
1830 public Helper (string assemblyPath
, string assemblyName
)
1832 _assemblyPath
= assemblyPath
;
1833 _assemblyName
= assemblyName
;
1838 AssemblyName assemblyName
= AssemblyName
.GetAssemblyName (_assemblyPath
);
1839 Assert
.AreEqual (_assemblyName
, assemblyName
.ToString ());