AssemblyNameTest.cs 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013
  1. //
  2. // AssemblyNameTest.cs - NUnit Test Cases for AssemblyName
  3. //
  4. // Author:
  5. // Sebastien Pouliot <[email protected]>
  6. //
  7. // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
  8. // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
  9. //
  10. using NUnit.Framework;
  11. using System;
  12. using System.Configuration.Assemblies;
  13. using System.IO;
  14. using System.Reflection;
  15. #if !TARGET_JVM && !MOBILE
  16. using System.Reflection.Emit;
  17. #endif
  18. using System.Runtime.Serialization;
  19. using System.Threading;
  20. using System.Globalization;
  21. using System.Runtime.Serialization.Formatters.Binary;
  22. using System.Security;
  23. using System.Security.Permissions;
  24. namespace MonoTests.System.Reflection {
  25. [TestFixture]
  26. public class AssemblyNameTest {
  27. private AssemblyName an;
  28. private string tempDir = Path.Combine (Path.GetTempPath (), "MonoTests.System.Reflection.AssemblyNameTest");
  29. #if !TARGET_JVM // Thread.GetDomain is not supported for TARGET_JVM.
  30. private AppDomain domain;
  31. #endif // TARGET_JVM
  32. // created with "sn -o test.snk test.txt"
  33. static byte[] keyPair = {
  34. 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53,
  35. 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
  36. 0x3D, 0xBD, 0x72, 0x08, 0xC6, 0x2B, 0x0E, 0xA8, 0xC1, 0xC0,
  37. 0x58, 0x07, 0x2B, 0x63, 0x5F, 0x7C, 0x9A, 0xBD, 0xCB, 0x22,
  38. 0xDB, 0x20, 0xB2, 0xA9, 0xDA, 0xDA, 0xEF, 0xE8, 0x00, 0x64,
  39. 0x2F, 0x5D, 0x8D, 0xEB, 0x78, 0x02, 0xF7, 0xA5, 0x36, 0x77,
  40. 0x28, 0xD7, 0x55, 0x8D, 0x14, 0x68, 0xDB, 0xEB, 0x24, 0x09,
  41. 0xD0, 0x2B, 0x13, 0x1B, 0x92, 0x6E, 0x2E, 0x59, 0x54, 0x4A,
  42. 0xAC, 0x18, 0xCF, 0xC9, 0x09, 0x02, 0x3F, 0x4F, 0xA8, 0x3E,
  43. 0x94, 0x00, 0x1F, 0xC2, 0xF1, 0x1A, 0x27, 0x47, 0x7D, 0x10,
  44. 0x84, 0xF5, 0x14, 0xB8, 0x61, 0x62, 0x1A, 0x0C, 0x66, 0xAB,
  45. 0xD2, 0x4C, 0x4B, 0x9F, 0xC9, 0x0F, 0x3C, 0xD8, 0x92, 0x0F,
  46. 0xF5, 0xFF, 0xCE, 0xD7, 0x6E, 0x5C, 0x6F, 0xB1, 0xF5, 0x7D,
  47. 0xD3, 0x56, 0xF9, 0x67, 0x27, 0xA4, 0xA5, 0x48, 0x5B, 0x07,
  48. 0x93, 0x44, 0x00, 0x4A, 0xF8, 0xFF, 0xA4, 0xCB, 0x73, 0xC0,
  49. 0x6A, 0x62, 0xB4, 0xB7, 0xC8, 0x92, 0x58, 0x87, 0xCD, 0x07,
  50. 0x0C, 0x7D, 0x6C, 0xC1, 0x4A, 0xFC, 0x82, 0x57, 0x0E, 0x43,
  51. 0x85, 0x09, 0x75, 0x98, 0x51, 0xBB, 0x35, 0xF5, 0x64, 0x83,
  52. 0xC7, 0x79, 0x89, 0x5C, 0x55, 0x36, 0x66, 0xAB, 0x27, 0xA4,
  53. 0xD9, 0xD4, 0x7E, 0x6B, 0x67, 0x64, 0xC1, 0x54, 0x4E, 0x37,
  54. 0xF1, 0x4E, 0xCA, 0xB3, 0xE5, 0x63, 0x91, 0x57, 0x12, 0x14,
  55. 0xA6, 0xEA, 0x8F, 0x8F, 0x2B, 0xFE, 0xF3, 0xE9, 0x16, 0x08,
  56. 0x2B, 0x86, 0xBC, 0x26, 0x0D, 0xD0, 0xC6, 0xC4, 0x1A, 0x72,
  57. 0x43, 0x76, 0xDC, 0xFF, 0x28, 0x52, 0xA1, 0xDE, 0x8D, 0xFA,
  58. 0xD5, 0x1F, 0x0B, 0xB5, 0x4F, 0xAF, 0x06, 0x79, 0x11, 0xEE,
  59. 0xA8, 0xEC, 0xD3, 0x74, 0x55, 0xA2, 0x80, 0xFC, 0xF8, 0xD9,
  60. 0x50, 0x69, 0x48, 0x01, 0xC2, 0x5A, 0x04, 0x56, 0xB4, 0x3E,
  61. 0x24, 0x32, 0x20, 0xB5, 0x2C, 0xDE, 0xBB, 0xBD, 0x13, 0xFD,
  62. 0x13, 0xF7, 0x03, 0x3E, 0xE3, 0x37, 0x84, 0x74, 0xE7, 0xD0,
  63. 0x5E, 0x9E, 0xB6, 0x26, 0xAE, 0x6E, 0xB0, 0x55, 0x6A, 0x52,
  64. 0x63, 0x6F, 0x5A, 0x9D, 0xF2, 0x67, 0xD6, 0x61, 0x4F, 0x7A,
  65. 0x45, 0xEE, 0x5C, 0x3D, 0x2B, 0x7C, 0xB2, 0x40, 0x79, 0x54,
  66. 0x84, 0xD1, 0xBE, 0x61, 0x3E, 0x5E, 0xD6, 0x18, 0x8E, 0x14,
  67. 0x98, 0xFC, 0x35, 0xBF, 0x5F, 0x1A, 0x20, 0x2E, 0x1A, 0xD8,
  68. 0xFF, 0xC4, 0x6B, 0xC0, 0xC9, 0x7D, 0x06, 0xEF, 0x09, 0xF9,
  69. 0xF3, 0x69, 0xFC, 0xBC, 0xA2, 0xE6, 0x80, 0x22, 0xB9, 0x79,
  70. 0x7E, 0xEF, 0x57, 0x9F, 0x49, 0xE1, 0xBC, 0x0D, 0xB6, 0xA1,
  71. 0xFE, 0x8D, 0xBC, 0xBB, 0xA3, 0x05, 0x02, 0x6B, 0x04, 0x45,
  72. 0xF7, 0x5D, 0xEE, 0x43, 0x06, 0xD6, 0x9C, 0x94, 0x48, 0x1A,
  73. 0x0B, 0x9C, 0xBC, 0xB4, 0x4E, 0x93, 0x60, 0x87, 0xCD, 0x58,
  74. 0xD6, 0x9A, 0x39, 0xA6, 0xC0, 0x7F, 0x8E, 0xFF, 0x25, 0xC1,
  75. 0xD7, 0x2C, 0xF6, 0xF4, 0x6F, 0x24, 0x52, 0x0B, 0x39, 0x42,
  76. 0x1B, 0x0D, 0x04, 0xC1, 0x93, 0x2A, 0x19, 0x1C, 0xF0, 0xB1,
  77. 0x9B, 0xC1, 0x24, 0x6D, 0x1B, 0x0B, 0xDA, 0x1C, 0x8B, 0x72,
  78. 0x48, 0xF0, 0x3E, 0x52, 0xBF, 0x0A, 0x84, 0x3A, 0x9B, 0xC8,
  79. 0x6D, 0x13, 0x1E, 0x72, 0xF4, 0x46, 0x93, 0x88, 0x1A, 0x5F,
  80. 0x4C, 0x3C, 0xE5, 0x9D, 0x6E, 0xBB, 0x4E, 0xDD, 0x5D, 0x1F,
  81. 0x11, 0x40, 0xF4, 0xD7, 0xAF, 0xB3, 0xAB, 0x9A, 0x99, 0x15,
  82. 0xF0, 0xDC, 0xAA, 0xFF, 0x9F, 0x2D, 0x9E, 0x56, 0x4F, 0x35,
  83. 0x5B, 0xBA, 0x06, 0x99, 0xEA, 0xC6, 0xB4, 0x48, 0x51, 0x17,
  84. 0x1E, 0xD1, 0x95, 0x84, 0x81, 0x18, 0xC0, 0xF1, 0x71, 0xDE,
  85. 0x44, 0x42, 0x02, 0x06, 0xAC, 0x0E, 0xA8, 0xE2, 0xF3, 0x1F,
  86. 0x96, 0x1F, 0xBE, 0xB6, 0x1F, 0xB5, 0x3E, 0xF6, 0x81, 0x05,
  87. 0x20, 0xFA, 0x2E, 0x40, 0x2E, 0x4D, 0xA0, 0x0E, 0xDA, 0x42,
  88. 0x9C, 0x05, 0xAA, 0x9E, 0xAF, 0x5C, 0xF7, 0x3A, 0x3F, 0xBB,
  89. 0x91, 0x73, 0x45, 0x27, 0xA8, 0xA2, 0x07, 0x4A, 0xEF, 0x59,
  90. 0x1E, 0x97, 0x9D, 0xE0, 0x30, 0x5A, 0x83, 0xCE, 0x1E, 0x57,
  91. 0x32, 0x89, 0x43, 0x41, 0x28, 0x7D, 0x14, 0x8D, 0x8B, 0x41,
  92. 0x1A, 0x56, 0x76, 0x43, 0xDB, 0x64, 0x86, 0x41, 0x64, 0x8D,
  93. 0x4C, 0x91, 0x83, 0x4E, 0xF5, 0x6C };
  94. #if !NET_2_0
  95. static byte [] kp_token = { 0xff, 0xef, 0x94, 0x53, 0x67, 0x69, 0xda, 0x06 };
  96. #endif
  97. static byte [] publicKey1 = {
  98. 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
  99. 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
  100. 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
  101. 0x01, 0x00, 0x3d, 0xbd, 0x72, 0x08, 0xc6, 0x2b, 0x0e, 0xa8,
  102. 0xc1, 0xc0, 0x58, 0x07, 0x2b, 0x63, 0x5f, 0x7c, 0x9a, 0xbd,
  103. 0xcb, 0x22, 0xdb, 0x20, 0xb2, 0xa9, 0xda, 0xda, 0xef, 0xe8,
  104. 0x00, 0x64, 0x2f, 0x5d, 0x8d, 0xeb, 0x78, 0x02, 0xf7, 0xa5,
  105. 0x36, 0x77, 0x28, 0xd7, 0x55, 0x8d, 0x14, 0x68, 0xdb, 0xeb,
  106. 0x24, 0x09, 0xd0, 0x2b, 0x13, 0x1b, 0x92, 0x6e, 0x2e, 0x59,
  107. 0x54, 0x4a, 0xac, 0x18, 0xcf, 0xc9, 0x09, 0x02, 0x3f, 0x4f,
  108. 0xa8, 0x3e, 0x94, 0x00, 0x1f, 0xc2, 0xf1, 0x1a, 0x27, 0x47,
  109. 0x7d, 0x10, 0x84, 0xf5, 0x14, 0xb8, 0x61, 0x62, 0x1a, 0x0c,
  110. 0x66, 0xab, 0xd2, 0x4c, 0x4b, 0x9f, 0xc9, 0x0f, 0x3c, 0xd8,
  111. 0x92, 0x0f, 0xf5, 0xff, 0xce, 0xd7, 0x6e, 0x5c, 0x6f, 0xb1,
  112. 0xf5, 0x7d, 0xd3, 0x56, 0xf9, 0x67, 0x27, 0xa4, 0xa5, 0x48,
  113. 0x5b, 0x07, 0x93, 0x44, 0x00, 0x4a, 0xf8, 0xff, 0xa4, 0xcb };
  114. static byte [] pk_token1 = { 0xce, 0x52, 0x76, 0xd8, 0x68, 0x7e, 0Xc6, 0xdc };
  115. static byte [] publicKey2 = {
  116. 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00,
  117. 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
  118. 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00,
  119. 0x01, 0x00, 0x6d, 0xfd, 0xba, 0xb9, 0x9d, 0x43, 0xf1, 0xef,
  120. 0x33, 0xe2, 0xbd, 0x2d, 0x7c, 0x26, 0xe2, 0x9d, 0x37, 0x4a,
  121. 0xdf, 0xb5, 0x63, 0x12, 0x90, 0x35, 0x90, 0x24, 0x8a, 0xe7,
  122. 0x5a, 0xc5, 0xa3, 0x3a, 0x84, 0xee, 0x9b, 0xd1, 0xac, 0x3a,
  123. 0x59, 0x2b, 0x91, 0x97, 0x83, 0x01, 0x4f, 0x92, 0x01, 0xc6,
  124. 0x3b, 0x96, 0x20, 0x19, 0xeb, 0xdc, 0x2c, 0x6f, 0x1f, 0xbb,
  125. 0x04, 0x9b, 0x62, 0x39, 0xc0, 0xff, 0x58, 0x64, 0x17, 0x48,
  126. 0xc2, 0x5b, 0x94, 0x98, 0x35, 0x50, 0x1f, 0x27, 0xbc, 0xea,
  127. 0x91, 0x92, 0x3f, 0x5c, 0x33, 0x12, 0x17, 0x65, 0x56, 0x3e,
  128. 0x40, 0x44, 0x27, 0x1d, 0xef, 0x0e, 0x72, 0xab, 0xd4, 0xf0,
  129. 0x49, 0xa3, 0x95, 0x1a, 0x61, 0xb4, 0x47, 0x90, 0x20, 0xcc,
  130. 0x50, 0xa4, 0x4d, 0x8b, 0x8a, 0x58, 0x17, 0x70, 0xa4, 0x53,
  131. 0xe4, 0xdc, 0x73, 0x5d, 0x8c, 0x4e, 0xb8, 0xd3, 0xa9, 0xbf };
  132. #if !NET_2_0
  133. static byte [] pk_token2 = { 0x22, 0x7c, 0x9c, 0x2c, 0x3c, 0x00, 0x63, 0xe9 };
  134. #endif
  135. static byte [] publicKey3 = {
  136. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
  137. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
  138. static byte [] pk_token3 = { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 };
  139. [SetUp]
  140. public void SetUp ()
  141. {
  142. try {
  143. if (Directory.Exists (tempDir))
  144. Directory.Delete (tempDir, true);
  145. }
  146. catch (Exception) {
  147. }
  148. Directory.CreateDirectory (tempDir);
  149. #if !TARGET_JVM // Thread.GetDomain is not supported for TARGET_JVM.
  150. domain = Thread.GetDomain ();
  151. #endif // TARGET_JVM
  152. }
  153. [TearDown]
  154. public void TearDown ()
  155. {
  156. try {
  157. if (Directory.Exists (tempDir))
  158. Directory.Delete (tempDir, true);
  159. }
  160. catch (Exception) {
  161. // This can happen on windows when the directory contains
  162. // files opened by the CLR
  163. }
  164. }
  165. [Test] // ctor ()
  166. public void Constructor0 ()
  167. {
  168. an = new AssemblyName ();
  169. Assert.IsNull (an.CodeBase, "CodeBase");
  170. Assert.IsNull (an.CultureInfo, "CultureInfo");
  171. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  172. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  173. #if NET_2_0
  174. Assert.AreEqual (String.Empty, an.FullName, "FullName");
  175. #else
  176. Assert.IsNull (an.FullName, "FullName");
  177. #endif
  178. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  179. Assert.IsNull (an.KeyPair, "KeyPair");
  180. Assert.IsNull (an.Name, "Name");
  181. #if NET_2_0
  182. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  183. #endif
  184. Assert.IsNull (an.Version, "Version");
  185. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  186. an.VersionCompatibility, "VersionCompatibility");
  187. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  188. Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
  189. #if NET_2_0
  190. Assert.AreEqual (string.Empty, an.ToString (), "ToString");
  191. #else
  192. Assert.AreEqual (typeof (AssemblyName).FullName, an.ToString (), "ToString");
  193. #endif
  194. }
  195. [Test]
  196. public void SetPublicKey ()
  197. {
  198. an = new AssemblyName ();
  199. Assert.IsNull (an.GetPublicKey (), "#A1");
  200. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A2");
  201. Assert.IsNull (an.KeyPair, "#A3");
  202. Assert.IsNull (an.GetPublicKeyToken (), "#A4");
  203. an.SetPublicKey (publicKey1);
  204. Assert.AreEqual (publicKey1, an.GetPublicKey (), "#B1");
  205. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#B2");
  206. Assert.IsNull (an.KeyPair, "#B3");
  207. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B4");
  208. an.SetPublicKey (keyPair);
  209. Assert.AreEqual (keyPair, an.GetPublicKey (), "#B5");
  210. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B6");
  211. an.SetPublicKey ((byte []) null);
  212. Assert.IsNull (an.GetPublicKey (), "#C1");
  213. #if NET_2_0
  214. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#C2");
  215. #else
  216. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#C2");
  217. #endif
  218. Assert.IsNull (an.KeyPair, "#C3");
  219. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C4");
  220. an.SetPublicKey (publicKey1);
  221. an.SetPublicKeyToken (pk_token1);
  222. an.SetPublicKey ((byte []) null);
  223. Assert.IsNull (an.GetPublicKey (), "#D1");
  224. #if NET_2_0
  225. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#D2");
  226. #else
  227. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#D2");
  228. #endif
  229. Assert.IsNull (an.KeyPair, "#D3");
  230. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#D4");
  231. an.SetPublicKey ((byte []) null);
  232. an.SetPublicKeyToken (pk_token1);
  233. an.SetPublicKey ((byte []) null);
  234. Assert.IsNull (an.GetPublicKey (), "#E1");
  235. #if NET_2_0
  236. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#E2");
  237. #else
  238. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#E2");
  239. #endif
  240. Assert.IsNull (an.KeyPair, "#E3");
  241. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#E4");
  242. an = new AssemblyName ();
  243. an.SetPublicKey (publicKey1);
  244. an.SetPublicKey ((byte []) null);
  245. an.SetPublicKeyToken (pk_token1);
  246. an.SetPublicKey ((byte []) null);
  247. Assert.IsNull (an.GetPublicKey (), "#F1");
  248. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#F2");
  249. Assert.IsNull (an.KeyPair, "#F3");
  250. 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);
  255. Assert.IsNull (an.GetPublicKey (), "#G1");
  256. #if NET_2_0
  257. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G2");
  258. #else
  259. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#G2");
  260. #endif
  261. Assert.IsNull (an.KeyPair, "#G3");
  262. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#G4");
  263. an = new AssemblyName ();
  264. an.SetPublicKey (new byte [0]);
  265. Assert.IsNotNull (an.GetPublicKey (), "#H1");
  266. Assert.AreEqual (0, an.GetPublicKey ().Length, "#H2");
  267. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#H3");
  268. Assert.IsNull (an.KeyPair, "#H4");
  269. #if NET_2_0
  270. Assert.IsNotNull (an.GetPublicKeyToken (), "#H5");
  271. Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#H6");
  272. #else
  273. Assert.IsNull (an.GetPublicKeyToken (), "#H5");
  274. #endif
  275. an = new AssemblyName ();
  276. an.SetPublicKey (publicKey1);
  277. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I1");
  278. an.SetPublicKey (publicKey1);
  279. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#I2");
  280. an = new AssemblyName ();
  281. an.SetPublicKey ((byte []) null);
  282. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J1");
  283. an.SetPublicKey ((byte []) null);
  284. #if NET_2_0
  285. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#J2");
  286. #else
  287. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J2");
  288. #endif
  289. an.SetPublicKey ((byte []) null);
  290. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J3");
  291. an.SetPublicKey (publicKey1);
  292. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#J4");
  293. Assert.AreEqual (publicKey1, an.GetPublicKey (), "#J5");
  294. an.SetPublicKey (publicKey2);
  295. Assert.AreEqual (publicKey2, an.GetPublicKey (), "#J6");
  296. }
  297. [Test]
  298. public void SetPublicKey_PublicKey_Invalid ()
  299. {
  300. an = new AssemblyName ();
  301. an.SetPublicKey (new byte [] { 0x0b, 0x0a });
  302. Assert.AreEqual (new byte [] { 0x0b, 0x0a }, an.GetPublicKey (), "#1");
  303. }
  304. [Test]
  305. public void SetPublicKeyToken ()
  306. {
  307. an = new AssemblyName ();
  308. an.SetPublicKeyToken (pk_token1);
  309. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
  310. Assert.IsNull (an.KeyPair, "#A2");
  311. Assert.IsNull (an.GetPublicKey (), "#A3");
  312. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A4");
  313. an.SetPublicKeyToken ((byte []) null);
  314. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
  315. Assert.IsNull (an.KeyPair, "#B2");
  316. Assert.IsNull (an.GetPublicKey (), "#B3");
  317. Assert.IsNull (an.GetPublicKeyToken (), "#B4");
  318. 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");
  324. }
  325. [Test]
  326. public void KeyPair ()
  327. {
  328. an = new AssemblyName ();
  329. an.Name = "test";
  330. an.KeyPair = new StrongNameKeyPair (keyPair);
  331. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A1");
  332. Assert.IsNotNull (an.KeyPair, "#A2");
  333. Assert.IsNull (an.GetPublicKey (), "#A3");
  334. Assert.IsNull (an.GetPublicKeyToken (), "#A4");
  335. Assert.AreEqual ("test", an.FullName, "#A5");
  336. an.KeyPair = null;
  337. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B1");
  338. Assert.IsNull (an.KeyPair, "#B2");
  339. Assert.IsNull (an.GetPublicKey (), "#B3");
  340. Assert.IsNull (an.GetPublicKeyToken (), "#B4");
  341. Assert.AreEqual ("test", an.FullName, "#B5");
  342. }
  343. // !!! this assembly MUST NOT use a StrongName !!!
  344. [Test]
  345. public void Self ()
  346. {
  347. Assembly a = Assembly.GetExecutingAssembly ();
  348. an = a.GetName ();
  349. Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
  350. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
  351. Assert.AreEqual (AssemblyHashAlgorithm.SHA1, an.HashAlgorithm, "HashAlgorithm");
  352. Assert.IsNull (an.KeyPair, "KeyPair");
  353. Assert.IsNotNull (an.Name, "Name");
  354. #if NET_2_0
  355. //Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA");
  356. #endif
  357. Assert.AreEqual (new Version (0, 0, 0, 0), an.Version, "Version");
  358. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  359. an.VersionCompatibility, "VersionCompatibility");
  360. Assert.AreEqual (new byte [0], an.GetPublicKey (), "GetPublicKey");
  361. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  362. }
  363. [Test]
  364. public void Flags_Corlib ()
  365. {
  366. an = typeof (int).Assembly.GetName ();
  367. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
  368. }
  369. [Test]
  370. public void Flags_Self ()
  371. {
  372. Assembly a = Assembly.GetExecutingAssembly ();
  373. an = a.GetName ();
  374. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags);
  375. }
  376. [Test]
  377. public void FullName_Corlib ()
  378. {
  379. an = typeof(int).Assembly.GetName ();
  380. Assert.IsNotNull (an.FullName, "#1");
  381. Assert.AreEqual (Consts.AssemblyCorlib, an.FullName, "#2");
  382. }
  383. [Test]
  384. public void FullName_Self ()
  385. {
  386. Assembly a = Assembly.GetExecutingAssembly ();
  387. an = a.GetName ();
  388. Assert.IsNotNull (an.FullName, "#1");
  389. Assert.IsTrue (an.FullName.IndexOf ("Version=0.0.0.0") != -1, "#2");
  390. Assert.IsTrue (an.FullName.IndexOf ("Culture=neutral") != -1, "#3");
  391. Assert.IsTrue (an.FullName.IndexOf ("PublicKeyToken=null") != -1, "#4");
  392. }
  393. [Test]
  394. public void FullName_Flags ()
  395. {
  396. const string assemblyName = "TestAssembly";
  397. // tests for AssemblyName with only name
  398. an = new AssemblyName ();
  399. #if NET_2_0
  400. an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer |
  401. AssemblyNameFlags.EnableJITcompileTracking |
  402. AssemblyNameFlags.PublicKey |
  403. AssemblyNameFlags.Retargetable;
  404. #else
  405. an.Flags = AssemblyNameFlags.PublicKey |
  406. AssemblyNameFlags.Retargetable;
  407. #endif
  408. an.Name = assemblyName;
  409. Assert.AreEqual (assemblyName + ", Retargetable=Yes", an.FullName, "#1");
  410. an.Flags = AssemblyNameFlags.None;
  411. Assert.AreEqual (assemblyName, an.FullName, "#2");
  412. }
  413. [Test]
  414. public void FullName_Name ()
  415. {
  416. const string assemblyName = "TestAssembly";
  417. // tests for AssemblyName with only name
  418. an = new AssemblyName ();
  419. an.Name = assemblyName;
  420. Assert.IsNotNull (an.FullName, "FullName2#1");
  421. Assert.AreEqual (an.Name, an.FullName, "FullName2#2");
  422. Assert.AreEqual (-1, an.FullName.IndexOf ("Culture="), "FullName2#3");
  423. Assert.AreEqual (-1, an.FullName.IndexOf ("PublicKeyToken="), "FullName2#4");
  424. }
  425. [Test]
  426. public void FullName_Version ()
  427. {
  428. const string assemblyName = "TestAssembly";
  429. const string assemblyVersion = "1.2";
  430. // tests for AssemblyName with name and version
  431. an = new AssemblyName ();
  432. an.Name = assemblyName;
  433. an.Version = new Version (assemblyVersion);
  434. Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion, an.FullName, "FullName3#1");
  435. }
  436. [Test]
  437. public void FullName_Culture ()
  438. {
  439. const string assemblyName = "TestAssembly";
  440. // tests for AssemblyName with name and neutral culture
  441. an = new AssemblyName ();
  442. an.Name = assemblyName;
  443. an.CultureInfo = CultureInfo.InvariantCulture;
  444. Assert.AreEqual (assemblyName + ", Culture=neutral", an.FullName, "#1");
  445. an.CultureInfo = new CultureInfo ("nl-BE");
  446. Assert.AreEqual (assemblyName + ", Culture=nl-BE", an.FullName, "#2");
  447. an.Name = null;
  448. #if NET_2_0
  449. Assert.AreEqual (string.Empty, an.FullName, "#3");
  450. #else
  451. Assert.IsNull (an.FullName, "#4");
  452. #endif
  453. }
  454. [Test]
  455. public void FullName_PublicKey ()
  456. {
  457. const string assemblyName = "TestAssembly";
  458. // tests for AssemblyName with name and public key
  459. an = new AssemblyName ();
  460. an.Name = assemblyName;
  461. an.SetPublicKey (publicKey1);
  462. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
  463. an.SetPublicKey ((byte []) null);
  464. Assert.AreEqual (assemblyName, an.FullName, "#A2");
  465. an.SetPublicKey (new byte [0]);
  466. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
  467. an.Name = null;
  468. #if NET_2_0
  469. Assert.AreEqual (string.Empty, an.FullName, "#A4");
  470. #else
  471. Assert.IsNull (an.FullName, "#A4");
  472. #endif
  473. an = new AssemblyName ();
  474. an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
  475. an.Name = assemblyName;
  476. an.SetPublicKey (publicKey1);
  477. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
  478. an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
  479. #if NET_2_0
  480. Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
  481. #else
  482. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B2");
  483. #endif
  484. an.SetPublicKeyToken ((byte []) null);
  485. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B3");
  486. an.Name = null;
  487. #if NET_2_0
  488. Assert.AreEqual (string.Empty, an.FullName, "#B4");
  489. #else
  490. Assert.IsNull (an.FullName, "#B4");
  491. #endif
  492. an = new AssemblyName ();
  493. an.HashAlgorithm = AssemblyHashAlgorithm.None;
  494. an.Name = assemblyName;
  495. an.SetPublicKey (publicKey1);
  496. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
  497. an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
  498. #if NET_2_0
  499. Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#C2");
  500. #else
  501. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C2");
  502. #endif
  503. an.SetPublicKeyToken ((byte []) null);
  504. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C3");
  505. an.Name = null;
  506. #if NET_2_0
  507. Assert.AreEqual (string.Empty, an.FullName, "#C4");
  508. #else
  509. Assert.IsNull (an.FullName, "#C4");
  510. #endif
  511. an = new AssemblyName ();
  512. an.Name = assemblyName;
  513. an.SetPublicKey (new byte [0]);
  514. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
  515. an.Name = null;
  516. #if NET_2_0
  517. Assert.AreEqual (string.Empty, an.FullName, "#D2");
  518. #else
  519. Assert.IsNull (an.FullName, "#D2");
  520. #endif
  521. an.SetPublicKey (publicKey3);
  522. #if NET_2_0
  523. Assert.AreEqual (string.Empty, an.FullName, "#D3");
  524. #else
  525. Assert.IsNull (an.FullName, "#D3");
  526. #endif
  527. an.Name = assemblyName;
  528. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "#D4");
  529. }
  530. [Test]
  531. public void FullName_PublicKey_KeyPair ()
  532. {
  533. const string assemblyName = "TestAssembly";
  534. // tests for AssemblyName with name and public key
  535. an = new AssemblyName ();
  536. an.Name = assemblyName;
  537. an.SetPublicKey (keyPair);
  538. #if NET_2_0
  539. try {
  540. Assert.Fail ("#A1: " + an.FullName);
  541. } catch (SecurityException ex) {
  542. // Invalid assembly public key
  543. Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#A2");
  544. Assert.AreEqual ((SecurityAction) 0, ex.Action, "#A3");
  545. Assert.IsNull (ex.InnerException, "#A4");
  546. Assert.IsNotNull (ex.Message, "#A5");
  547. }
  548. #else
  549. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (kp_token), an.FullName, "#A1");
  550. #endif
  551. an.SetPublicKeyToken (new byte [0]);
  552. #if NET_2_0
  553. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#B1");
  554. #else
  555. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (kp_token), an.FullName, "#B1");
  556. #endif
  557. an.SetPublicKeyToken ((byte []) null);
  558. #if NET_2_0
  559. try {
  560. Assert.Fail ("#C1: " + an.FullName);
  561. } catch (SecurityException ex) {
  562. // Invalid assembly public key
  563. Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#C2");
  564. Assert.AreEqual ((SecurityAction) 0, ex.Action, "#C3");
  565. Assert.IsNull (ex.InnerException, "#C4");
  566. Assert.IsNotNull (ex.Message, "#C5");
  567. }
  568. #else
  569. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (kp_token), an.FullName, "#C1");
  570. #endif
  571. an.SetPublicKeyToken (new byte [0]);
  572. #if NET_2_0
  573. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D1");
  574. #else
  575. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (kp_token), an.FullName, "#D1");
  576. #endif
  577. an.SetPublicKey (publicKey1);
  578. #if NET_2_0
  579. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
  580. #else
  581. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D2");
  582. #endif
  583. an.SetPublicKeyToken ((byte []) null);
  584. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
  585. }
  586. [Test]
  587. public void FullName_PublicKeyToken ()
  588. {
  589. const string assemblyName = "TestAssembly";
  590. an = new AssemblyName ();
  591. an.Name = assemblyName;
  592. an.SetPublicKeyToken (pk_token1);
  593. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A1");
  594. an.SetPublicKeyToken ((byte []) null);
  595. Assert.AreEqual (assemblyName, an.FullName, "#A2");
  596. an.SetPublicKeyToken (new byte [0]);
  597. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A3");
  598. an.SetPublicKeyToken (pk_token1);
  599. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A4");
  600. an.Name = null;
  601. #if NET_2_0
  602. Assert.AreEqual (string.Empty, an.FullName, "#A5");
  603. #else
  604. Assert.IsNull (an.FullName, "#A5");
  605. #endif
  606. an = new AssemblyName ();
  607. an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
  608. an.Name = assemblyName;
  609. an.SetPublicKeyToken (pk_token1);
  610. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#B1");
  611. an.SetPublicKeyToken (new byte [] { 0x0a, 0x22 });
  612. Assert.AreEqual (assemblyName + ", PublicKeyToken=0a22", an.FullName, "#B2");
  613. an.SetPublicKeyToken ((byte []) null);
  614. Assert.AreEqual (assemblyName, an.FullName, "#B3");
  615. an.Name = null;
  616. #if NET_2_0
  617. Assert.AreEqual (string.Empty, an.FullName, "#B4");
  618. #else
  619. Assert.IsNull (an.FullName, "#B4");
  620. #endif
  621. an = new AssemblyName ();
  622. an.Name = assemblyName;
  623. an.SetPublicKey (publicKey1);
  624. an.SetPublicKeyToken (pk_token1);
  625. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C1");
  626. an.SetPublicKey ((byte []) null);
  627. #if NET_2_0
  628. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C2");
  629. #else
  630. Assert.AreEqual (assemblyName, an.FullName, "#C2");
  631. #endif
  632. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C3");
  633. an.SetPublicKey (new byte [0]);
  634. #if NET_2_0
  635. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#C4");
  636. #else
  637. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#C4");
  638. #endif
  639. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C5");
  640. an = new AssemblyName ();
  641. an.Name = assemblyName;
  642. an.SetPublicKey (publicKey1);
  643. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D1");
  644. an.SetPublicKey (new byte [0]);
  645. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D2");
  646. an.SetPublicKeyToken (pk_token1);
  647. #if NET_2_0
  648. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D3");
  649. #else
  650. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#D3");
  651. #endif
  652. an.SetPublicKey ((byte []) null);
  653. #if NET_2_0
  654. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#D4");
  655. #else
  656. Assert.AreEqual (assemblyName, an.FullName, "#D4");
  657. #endif
  658. }
  659. [Test]
  660. public void FullName_VersionCulture ()
  661. {
  662. const string assemblyName = "TestAssembly";
  663. const string assemblyVersion = "1.2";
  664. // tests for AssemblyName with name, version and neutral culture
  665. an = new AssemblyName ();
  666. an.Name = assemblyName;
  667. an.Version = new Version (assemblyVersion);
  668. an.CultureInfo = CultureInfo.InvariantCulture;
  669. Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
  670. + ", Culture=neutral", an.FullName, "#1");
  671. an.CultureInfo = new CultureInfo ("en-US");
  672. Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
  673. + ", Culture=en-US", an.FullName, "#2");
  674. an.CultureInfo = new CultureInfo ("en");
  675. Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
  676. + ", Culture=en", an.FullName, "#3");
  677. }
  678. [Test]
  679. public void FullName_VersionPublicKey ()
  680. {
  681. const string assemblyName = "TestAssembly";
  682. const string assemblyVersion = "1.2";
  683. // tests for AssemblyName with name, version and public key
  684. an = new AssemblyName ();
  685. an.Name = assemblyName;
  686. an.Version = new Version (assemblyVersion);
  687. an.SetPublicKey (publicKey1);
  688. an.SetPublicKeyToken (pk_token1);
  689. Assert.AreEqual (assemblyName + ", Version=" + assemblyVersion
  690. + ", PublicKeyToken=" + GetTokenString (pk_token1),
  691. an.FullName, "#1");
  692. }
  693. [Test]
  694. public void FullName_CulturePublicKey ()
  695. {
  696. const string assemblyName = "TestAssembly";
  697. // tests for AssemblyName with name, culture and public key
  698. an = new AssemblyName ();
  699. an.Name = assemblyName;
  700. an.CultureInfo = CultureInfo.InvariantCulture;
  701. an.SetPublicKey (publicKey1);
  702. an.SetPublicKeyToken (pk_token1);
  703. Assert.AreEqual (assemblyName + ", Culture=neutral"
  704. + ", PublicKeyToken=" + GetTokenString (pk_token1),
  705. an.FullName, "#1");
  706. }
  707. [Test]
  708. public void GetPublicKeyToken ()
  709. {
  710. const string assemblyName = "TestAssembly";
  711. an = new AssemblyName ();
  712. an.SetPublicKey (publicKey1);
  713. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A1");
  714. an.SetPublicKey (publicKey2);
  715. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A2");
  716. an.SetPublicKeyToken (new byte [] { 0x0a });
  717. Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A3");
  718. an.SetPublicKey (publicKey1);
  719. Assert.AreEqual (new byte [] { 0x0a }, an.GetPublicKeyToken (), "#A4");
  720. an.SetPublicKeyToken (new byte [0]);
  721. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A5");
  722. an.Name = assemblyName;
  723. an.SetPublicKey (publicKey2);
  724. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#A6");
  725. #if NET_2_0
  726. Assert.AreEqual (assemblyName + ", PublicKeyToken=null", an.FullName, "#A7");
  727. #else
  728. Assert.AreEqual (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token2), an.FullName, "#A7");
  729. #endif
  730. an = new AssemblyName ();
  731. an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
  732. an.SetPublicKey (publicKey1);
  733. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#B1");
  734. an = new AssemblyName ();
  735. an.HashAlgorithm = AssemblyHashAlgorithm.None;
  736. an.SetPublicKey (publicKey1);
  737. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#C1");
  738. an = new AssemblyName ();
  739. an.SetPublicKeyToken (new byte [0]);
  740. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#D1");
  741. an.SetPublicKeyToken (new byte [] { 0x0b, 0xff });
  742. Assert.AreEqual (new byte [] { 0x0b, 0xff }, an.GetPublicKeyToken (), "#D2");
  743. an.SetPublicKeyToken ((byte []) null);
  744. Assert.IsNull (an.GetPublicKeyToken (), "#D3");
  745. an = new AssemblyName ();
  746. an.SetPublicKey (keyPair);
  747. #if NET_2_0
  748. try {
  749. an.GetPublicKeyToken ();
  750. Assert.Fail ("#E1");
  751. } catch (SecurityException ex) {
  752. // Invalid assembly public key
  753. Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#E2");
  754. Assert.AreEqual ((SecurityAction) 0, ex.Action, "#E3");
  755. Assert.IsNull (ex.InnerException, "#E4");
  756. Assert.IsNotNull (ex.Message, "#E5");
  757. }
  758. #else
  759. Assert.AreEqual (kp_token, an.GetPublicKeyToken (), "#E1");
  760. #endif
  761. }
  762. [Test]
  763. public void GetPublicKeyToken_Corlib ()
  764. {
  765. an = typeof (int).Assembly.GetName ();
  766. Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
  767. Assert.IsTrue (an.GetPublicKeyToken ().Length > 0, "#2");
  768. }
  769. [Test]
  770. public void GetPublicGetToken_Ecma ()
  771. {
  772. const string assemblyName = "TestAssembly";
  773. an = new AssemblyName ();
  774. an.Name = assemblyName;
  775. an.SetPublicKey (publicKey3);
  776. Assert.IsNotNull (an.GetPublicKeyToken (), "#1");
  777. Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "#2");
  778. }
  779. [Test]
  780. public void GetPublicKeyToken_Self ()
  781. {
  782. Assembly a = Assembly.GetExecutingAssembly ();
  783. an = a.GetName ();
  784. #if NET_2_0
  785. Assert.AreEqual (new byte [0], an.GetPublicKeyToken ());
  786. #else
  787. Assert.IsNull (an.GetPublicKeyToken ());
  788. #endif
  789. }
  790. static int nameIndex = 0;
  791. private AssemblyName GenAssemblyName ()
  792. {
  793. AssemblyName assemblyName = new AssemblyName();
  794. assemblyName.Name = "MonoTests.System.Reflection.AssemblyNameTest" + (nameIndex ++);
  795. return assemblyName;
  796. }
  797. #if !TARGET_JVM && !MOBILE // Reflection.Emit is not supported for TARGET_JVM.
  798. private Assembly GenerateAssembly (AssemblyName name)
  799. {
  800. AssemblyBuilder ab = domain.DefineDynamicAssembly (
  801. name,
  802. AssemblyBuilderAccess.RunAndSave,
  803. tempDir);
  804. ab.DefineDynamicModule ("def_module");
  805. ab.Save (name.Name + ".dll");
  806. return Assembly.LoadFrom (Path.Combine (tempDir, name.Name + ".dll"));
  807. }
  808. private AssemblyBuilder GenerateDynamicAssembly (AssemblyName name)
  809. {
  810. AssemblyBuilder ab = domain.DefineDynamicAssembly (
  811. name,
  812. AssemblyBuilderAccess.Run);
  813. return ab;
  814. }
  815. [Test]
  816. public void TestCultureInfo ()
  817. {
  818. AssemblyName name;
  819. Assembly a;
  820. CultureInfo culture;
  821. name = GenAssemblyName ();
  822. name.CultureInfo = CultureInfo.CreateSpecificCulture ("ar-DZ");
  823. a = GenerateAssembly (name);
  824. culture = a.GetName ().CultureInfo;
  825. Assert.IsFalse (culture.IsNeutralCulture, "#A1");
  826. Assert.IsFalse (culture.IsReadOnly, "#A2");
  827. Assert.AreEqual (5121, culture.LCID, "#A3");
  828. Assert.AreEqual ("ar-DZ", culture.Name, "#A4");
  829. Assert.IsTrue (culture.UseUserOverride, "#A5");
  830. name = GenAssemblyName ();
  831. name.CultureInfo = new CultureInfo ("en");
  832. a = GenerateAssembly (name);
  833. culture = a.GetName ().CultureInfo;
  834. Assert.IsTrue (culture.IsNeutralCulture, "#B1");
  835. Assert.IsFalse (culture.IsReadOnly, "#B2");
  836. Assert.AreEqual (9, culture.LCID, "#B3");
  837. Assert.AreEqual ("en", culture.Name, "#B4");
  838. Assert.IsTrue (culture.UseUserOverride, "#B5");
  839. name = GenAssemblyName ();
  840. name.CultureInfo = CultureInfo.InvariantCulture;
  841. a = GenerateAssembly (name);
  842. culture = a.GetName ().CultureInfo;
  843. Assert.IsFalse (culture.IsNeutralCulture, "#C1");
  844. #if NET_2_0
  845. Assert.IsFalse (culture.IsReadOnly, "#C2");
  846. #else
  847. Assert.IsTrue (culture.IsReadOnly, "#C2");
  848. #endif
  849. Assert.AreEqual (127, culture.LCID, "#C3");
  850. Assert.AreEqual (string.Empty, culture.Name, "#C4");
  851. Assert.IsFalse (culture.UseUserOverride, "#C5");
  852. a = typeof (int).Assembly;
  853. name = a.GetName ();
  854. culture = name.CultureInfo;
  855. Assert.IsFalse (culture.IsNeutralCulture, "#D1");
  856. #if NET_2_0
  857. Assert.IsFalse (culture.IsReadOnly, "#D2");
  858. #else
  859. Assert.IsTrue (culture.IsReadOnly, "#D2");
  860. #endif
  861. Assert.AreEqual (127, culture.LCID, "#D3");
  862. Assert.AreEqual (string.Empty, culture.Name, "#D4");
  863. Assert.IsFalse (culture.UseUserOverride, "#D5");
  864. a = Assembly.GetExecutingAssembly ();
  865. name = a.GetName ();
  866. culture = name.CultureInfo;
  867. Assert.IsFalse (culture.IsNeutralCulture, "#E1");
  868. #if NET_2_0
  869. Assert.IsFalse (culture.IsReadOnly, "#E2");
  870. #else
  871. Assert.IsTrue (culture.IsReadOnly, "#E2");
  872. #endif
  873. Assert.AreEqual (127, culture.LCID, "#E3");
  874. Assert.AreEqual (string.Empty, culture.Name, "#E4");
  875. Assert.IsFalse (culture.UseUserOverride, "#E5");
  876. AssemblyName [] names = a.GetReferencedAssemblies ();
  877. foreach (AssemblyName an in names) {
  878. culture = an.CultureInfo;
  879. Assert.IsFalse (culture.IsNeutralCulture, "#F1:" + an.Name);
  880. Assert.IsFalse (culture.IsReadOnly, "#F2:" + an.Name);
  881. Assert.AreEqual (127, culture.LCID, "#F3:" + an.Name);
  882. Assert.AreEqual (string.Empty, culture.Name, "#F4:" + an.Name);
  883. #if NET_2_0
  884. Assert.IsFalse (culture.UseUserOverride, "#F5:" + an.Name);
  885. #else
  886. Assert.IsTrue (culture.UseUserOverride, "#F5:" + an.Name);
  887. #endif
  888. }
  889. }
  890. [Test]
  891. public void Version ()
  892. {
  893. AssemblyName name = GenAssemblyName ();
  894. name.Version = new Version (1, 2, 3, 4);
  895. Assembly a = GenerateAssembly (name);
  896. Assert.AreEqual ("1.2.3.4", a.GetName ().Version.ToString (), "1.2.3.4 normal");
  897. name = GenAssemblyName ();
  898. name.Version = new Version (1, 2, 3);
  899. a = GenerateAssembly (name);
  900. Assert.AreEqual ("1.2.3.0", a.GetName ().Version.ToString (), "1.2.3.0 normal");
  901. name = GenAssemblyName ();
  902. name.Version = new Version (1, 2);
  903. a = GenerateAssembly (name);
  904. Assert.AreEqual ("1.2.0.0", a.GetName ().Version.ToString (), "1.2.0.0 normal");
  905. }
  906. [Test]
  907. [Category ("NotWorking")]
  908. public void Version_Dynamic ()
  909. {
  910. AssemblyName name = GenAssemblyName ();
  911. name.Version = new Version (1, 2, 3, 4);
  912. AssemblyBuilder ab = GenerateDynamicAssembly (name);
  913. Assert.AreEqual ("1.2.3.4", ab.GetName ().Version.ToString (), "1.2.3.4 dynamic");
  914. name = GenAssemblyName ();
  915. name.Version = new Version (1, 2, 3);
  916. ab = GenerateDynamicAssembly (name);
  917. #if NET_2_0
  918. Assert.AreEqual ("1.2.3.0", ab.GetName ().Version.ToString (), "1.2.3.0 dynamic");
  919. #else
  920. Assert.AreEqual ("1.2.3.65535", ab.GetName ().Version.ToString (), "1.2.3.0 dynamic");
  921. #endif
  922. name = GenAssemblyName ();
  923. name.Version = new Version (1, 2);
  924. ab = GenerateDynamicAssembly (name);
  925. #if NET_2_0
  926. Assert.AreEqual ("1.2.0.0", ab.GetName ().Version.ToString (), "1.2.0.0 dynamic");
  927. #else
  928. Assert.AreEqual ("1.2.65535.65535", ab.GetName ().Version.ToString (), "1.2.0.0 dynamic");
  929. #endif
  930. }
  931. #endif // TARGET_JVM
  932. [Test]
  933. public void HashAlgorithm ()
  934. {
  935. Assert.AreEqual (AssemblyHashAlgorithm.SHA1,
  936. typeof (int).Assembly.GetName ().HashAlgorithm);
  937. }
  938. [Test]
  939. public void Serialization ()
  940. {
  941. an = new AssemblyName ();
  942. an.CodeBase = "http://www.test.com/test.dll";
  943. an.CultureInfo = CultureInfo.InvariantCulture;
  944. an.Flags = AssemblyNameFlags.PublicKey;
  945. an.HashAlgorithm = AssemblyHashAlgorithm.MD5;
  946. an.KeyPair = new StrongNameKeyPair (publicKey1);
  947. an.Name = "TestAssembly";
  948. an.Version = new Version (1, 5);
  949. an.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
  950. MemoryStream ms = new MemoryStream ();
  951. BinaryFormatter bf = new BinaryFormatter ();
  952. bf.Serialize (ms, an);
  953. // reset position of memorystream
  954. ms.Position = 0;
  955. // deserialze assembly name
  956. AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
  957. // close the memorystream
  958. ms.Close ();
  959. // compare orginal and deserialized assembly name
  960. Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
  961. Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
  962. Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
  963. Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
  964. Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
  965. Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
  966. Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
  967. Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
  968. Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
  969. Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
  970. Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
  971. Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
  972. }
  973. [Test]
  974. public void Serialization_WithoutStrongName ()
  975. {
  976. an = new AssemblyName ();
  977. an.CodeBase = "http://www.test.com/test.dll";
  978. an.CultureInfo = CultureInfo.InvariantCulture;
  979. an.Flags = AssemblyNameFlags.None;
  980. an.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
  981. an.KeyPair = null;
  982. an.Name = "TestAssembly2";
  983. an.Version = new Version (1, 5, 0, 0);
  984. an.VersionCompatibility = AssemblyVersionCompatibility.SameMachine;
  985. MemoryStream ms = new MemoryStream ();
  986. BinaryFormatter bf = new BinaryFormatter ();
  987. bf.Serialize (ms, an);
  988. // reset position of memorystream
  989. ms.Position = 0;
  990. // deserialze assembly name
  991. AssemblyName dsAssemblyName = (AssemblyName) bf.Deserialize (ms);
  992. // close the memorystream
  993. ms.Close ();
  994. // compare orginal and deserialized assembly name
  995. Assert.AreEqual (an.CodeBase, dsAssemblyName.CodeBase, "CodeBase");
  996. Assert.AreEqual (an.CultureInfo, dsAssemblyName.CultureInfo, "CultureInfo");
  997. Assert.AreEqual (an.Flags, dsAssemblyName.Flags, "Flags");
  998. Assert.AreEqual (an.HashAlgorithm, dsAssemblyName.HashAlgorithm, "HashAlgorithm");
  999. Assert.AreEqual (an.Name, dsAssemblyName.Name, "Name");
  1000. Assert.AreEqual (an.Version, dsAssemblyName.Version, "Version");
  1001. Assert.AreEqual (an.VersionCompatibility, dsAssemblyName.VersionCompatibility, "VersionCompatibility");
  1002. Assert.AreEqual (an.EscapedCodeBase, dsAssemblyName.EscapedCodeBase, "EscapedCodeBase");
  1003. Assert.AreEqual (an.FullName, dsAssemblyName.FullName, "FullName");
  1004. Assert.AreEqual (an.ToString (), dsAssemblyName.ToString (), "ToString");
  1005. Assert.AreEqual (an.GetPublicKey (), dsAssemblyName.GetPublicKey (), "PublicKey");
  1006. Assert.AreEqual (an.GetPublicKeyToken (), dsAssemblyName.GetPublicKeyToken (), "PublicToken");
  1007. }
  1008. #if !TARGET_JVM // Assemblyname.GetObjectData not implemented yet for TARGET_JVM
  1009. [Test]
  1010. public void GetObjectData_Info_Null ()
  1011. {
  1012. an = new AssemblyName ();
  1013. try {
  1014. an.GetObjectData (null, new StreamingContext (StreamingContextStates.All));
  1015. Assert.Fail ("#1");
  1016. } catch (ArgumentNullException ex) {
  1017. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  1018. Assert.IsNull (ex.InnerException, "#3");
  1019. Assert.IsNotNull (ex.Message, "#4");
  1020. Assert.IsNotNull (ex.ParamName, "#5");
  1021. Assert.AreEqual ("info", ex.ParamName, "#6");
  1022. }
  1023. }
  1024. #endif // TARGET_JVM
  1025. [Test]
  1026. public void Clone_Corlib ()
  1027. {
  1028. an = typeof (int).Assembly.GetName ();
  1029. AssemblyName clone = (AssemblyName) an.Clone ();
  1030. Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
  1031. Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
  1032. Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
  1033. Assert.AreEqual (an.Flags, clone.Flags, "Flags");
  1034. Assert.AreEqual (an.FullName, clone.FullName, "FullName");
  1035. Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
  1036. Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
  1037. Assert.AreEqual (an.Name, clone.Name, "Name");
  1038. #if NET_2_0
  1039. Assert.AreEqual (an.ProcessorArchitecture, clone.ProcessorArchitecture, "PA");
  1040. #endif
  1041. Assert.AreEqual (an.Version, clone.Version, "Version");
  1042. Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
  1043. Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
  1044. Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
  1045. Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
  1046. }
  1047. [Test]
  1048. public void Clone_Empty ()
  1049. {
  1050. an = new AssemblyName ();
  1051. AssemblyName clone = (AssemblyName) an.Clone ();
  1052. Assert.IsNull (clone.CodeBase, "CodeBase");
  1053. Assert.IsNull (clone.CultureInfo, "CultureInfo");
  1054. Assert.IsNull (clone.EscapedCodeBase, "EscapedCodeBase");
  1055. Assert.AreEqual (AssemblyNameFlags.None, clone.Flags, "Flags");
  1056. #if NET_2_0
  1057. Assert.AreEqual (String.Empty, clone.FullName, "FullName");
  1058. #else
  1059. Assert.IsNull (clone.FullName, "FullName");
  1060. #endif
  1061. Assert.AreEqual (AssemblyHashAlgorithm.None, clone.HashAlgorithm, "HashAlgorithm");
  1062. Assert.IsNull (clone.KeyPair, "KeyPair");
  1063. Assert.IsNull (clone.Name, "Name");
  1064. #if NET_2_0
  1065. Assert.AreEqual (ProcessorArchitecture.None, clone.ProcessorArchitecture, "PA");
  1066. #endif
  1067. Assert.IsNull (clone.Version, "Version");
  1068. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1069. clone.VersionCompatibility, "VersionCompatibility");
  1070. }
  1071. [Test]
  1072. public void Clone_Self ()
  1073. {
  1074. an = Assembly.GetExecutingAssembly ().GetName ();
  1075. AssemblyName clone = (AssemblyName) an.Clone ();
  1076. Assert.AreEqual (an.CodeBase, clone.CodeBase, "CodeBase");
  1077. Assert.AreEqual (an.CultureInfo, clone.CultureInfo, "CultureInfo");
  1078. Assert.AreEqual (an.EscapedCodeBase, clone.EscapedCodeBase, "EscapedCodeBase");
  1079. Assert.AreEqual (an.Flags, clone.Flags, "Flags");
  1080. Assert.AreEqual (an.FullName, clone.FullName, "FullName");
  1081. Assert.AreEqual (an.HashAlgorithm, clone.HashAlgorithm, "HashAlgorithm");
  1082. Assert.AreEqual (an.KeyPair, clone.KeyPair, "KeyPair");
  1083. Assert.AreEqual (an.Name, clone.Name, "Name");
  1084. #if NET_2_0
  1085. //Assert.AreEqual (ProcessorArchitecture.MSIL, clone.ProcessorArchitecture, "PA");
  1086. #endif
  1087. Assert.AreEqual (an.Version, clone.Version, "Version");
  1088. Assert.AreEqual (an.VersionCompatibility, clone.VersionCompatibility, "VersionCompatibility");
  1089. Assert.AreEqual (an.GetPublicKey (), clone.GetPublicKey (), "GetPublicKey");
  1090. Assert.AreEqual (an.GetPublicKeyToken (), clone.GetPublicKeyToken (), "GetPublicKeyToken");
  1091. Assert.AreEqual (an.ToString (), clone.ToString (), "ToString");
  1092. }
  1093. [Test]
  1094. [ExpectedException (typeof (FileNotFoundException))]
  1095. public void GetAssemblyName_AssemblyFile_DoesNotExist ()
  1096. {
  1097. AssemblyName.GetAssemblyName (Path.Combine (tempDir, "doesnotexist.dll"));
  1098. }
  1099. [Test]
  1100. [Category ("NotWorking")]
  1101. public void GetAssemblyName_AssemblyFile_ReadLock ()
  1102. {
  1103. string file = Path.Combine (tempDir, "loadfailure.dll");
  1104. using (FileStream fs = File.Open (file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None)) {
  1105. try {
  1106. AssemblyName.GetAssemblyName (file);
  1107. Assert.Fail ("#1");
  1108. } catch (FileLoadException ex) {
  1109. // Could not load file or assembly '...' or one
  1110. // of its dependencies. The process cannot access
  1111. // the file because it is being used by another
  1112. // process
  1113. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1114. Assert.IsNotNull (ex.FileName, "#3");
  1115. #if NET_2_0
  1116. Assert.AreEqual (file, ex.FileName, "#4");
  1117. #else
  1118. Assert.IsTrue (ex.FileName.IndexOf ("loadfailure.dll") != -1, "#4");
  1119. #endif
  1120. Assert.IsNull (ex.InnerException, "#5");
  1121. Assert.IsNotNull (ex.Message, "#6");
  1122. }
  1123. }
  1124. File.Delete (file);
  1125. }
  1126. [Test]
  1127. public void GetAssemblyName_AssemblyFile_BadImage ()
  1128. {
  1129. string file = Path.Combine (tempDir, "badimage.dll");
  1130. using (StreamWriter sw = File.CreateText (file)) {
  1131. sw.WriteLine ("somegarbage");
  1132. }
  1133. try {
  1134. AssemblyName.GetAssemblyName (file);
  1135. Assert.Fail ("#1");
  1136. } catch (BadImageFormatException ex) {
  1137. Assert.AreEqual (typeof (BadImageFormatException), ex.GetType (), "#2");
  1138. Assert.IsNotNull (ex.FileName, "#3");
  1139. #if NET_2_0
  1140. Assert.AreEqual (file, ex.FileName, "#4");
  1141. #else
  1142. Assert.IsTrue (ex.FileName.IndexOf ("badimage.dll") != -1, "#4");
  1143. #endif
  1144. Assert.IsNull (ex.InnerException, "#5");
  1145. Assert.IsNotNull (ex.Message, "#6");
  1146. } finally {
  1147. File.Delete (file);
  1148. }
  1149. }
  1150. [Test]
  1151. public void GetAssemblyName_CodeBase ()
  1152. {
  1153. Assembly execAssembly = Assembly.GetExecutingAssembly ();
  1154. AssemblyName aname = AssemblyName.GetAssemblyName (execAssembly.Location);
  1155. Assert.IsNotNull (aname.CodeBase, "#1");
  1156. Assert.AreEqual (execAssembly.CodeBase, aname.CodeBase, "#2");
  1157. }
  1158. // helpers
  1159. private string GetTokenString (byte[] value)
  1160. {
  1161. string tokenString = "";
  1162. for (int i = 0; i < value.Length; i++) {
  1163. tokenString += value[i].ToString ("x2");
  1164. }
  1165. return tokenString;
  1166. }
  1167. #if NET_2_0
  1168. [Test] // ctor (String)
  1169. public void Constructor1_Name ()
  1170. {
  1171. const string assemblyName = "TestAssembly";
  1172. an = new AssemblyName (assemblyName);
  1173. Assert.IsNull (an.CodeBase, "CodeBase");
  1174. Assert.IsNull (an.CultureInfo, "CultureInfo");
  1175. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1176. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1177. Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
  1178. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1179. Assert.IsNull (an.KeyPair, "KeyPair");
  1180. Assert.AreEqual (assemblyName, an.Name, "Name");
  1181. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  1182. Assert.IsNull (an.Version, "Version");
  1183. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1184. an.VersionCompatibility, "VersionCompatibility");
  1185. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1186. Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
  1187. Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
  1188. }
  1189. [Test] // ctor (String)
  1190. [Category("TargetJvmNotWorking")] // Not yet supported for TARGET_JVM.
  1191. public void Constructor1_Full ()
  1192. {
  1193. const string assemblyName = "TestAssembly";
  1194. const string assemblyCulture = "neutral";
  1195. const string assemblyVersion = "1.2.3.4";
  1196. an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion +
  1197. ", Culture=" + assemblyCulture + ", PublicKeyToken=" + GetTokenString (pk_token1) + ",ProcessorArchitecture=X86");
  1198. Assert.IsNull (an.CodeBase, "CodeBase");
  1199. Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "CultureInfo");
  1200. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1201. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1202. Assert.AreEqual ("TestAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=" +
  1203. GetTokenString (pk_token1), an.FullName, "FullName");
  1204. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1205. Assert.IsNull (an.KeyPair, "KeyPair");
  1206. Assert.AreEqual (assemblyName, an.Name, "Name");
  1207. Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
  1208. Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
  1209. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1210. an.VersionCompatibility, "VersionCompatibility");
  1211. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1212. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
  1213. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  1214. }
  1215. [Test] // ctor (String)
  1216. public void Constructor1_AssemblyName_Empty ()
  1217. {
  1218. try {
  1219. new AssemblyName (string.Empty);
  1220. Assert.Fail ("#1");
  1221. } catch (ArgumentException ex) {
  1222. // String cannot have zero length
  1223. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  1224. Assert.IsNull (ex.InnerException, "#3");
  1225. Assert.IsNotNull (ex.Message, "#4");
  1226. Assert.IsNull (ex.ParamName, "#5");
  1227. }
  1228. }
  1229. [Test] // ctor (String)
  1230. public void Constructor1_AssemblyName_Invalid ()
  1231. {
  1232. const string assemblyName = "TestAssembly";
  1233. try {
  1234. new AssemblyName (assemblyName + ", =1.2.4.5");
  1235. Assert.Fail ("#A1");
  1236. } catch (FileLoadException ex) {
  1237. // The given assembly name or codebase was invalid
  1238. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1239. Assert.IsNull (ex.FileName, "#3");
  1240. Assert.IsNull (ex.InnerException, "#3");
  1241. Assert.IsNotNull (ex.Message, "#4");
  1242. }
  1243. try {
  1244. new AssemblyName (assemblyName + ", OtherAttribute");
  1245. Assert.Fail ("#B1");
  1246. } catch (FileLoadException ex) {
  1247. // The given assembly name or codebase was invalid
  1248. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1249. Assert.IsNull (ex.FileName, "#3");
  1250. Assert.IsNull (ex.InnerException, "#3");
  1251. Assert.IsNotNull (ex.Message, "#4");
  1252. }
  1253. }
  1254. [Test] // ctor (String)
  1255. public void Constructor1_AssemblyName_Null ()
  1256. {
  1257. try {
  1258. new AssemblyName (null);
  1259. Assert.Fail ("#1");
  1260. } catch (ArgumentNullException ex) {
  1261. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  1262. Assert.IsNull (ex.InnerException, "#3");
  1263. Assert.IsNotNull (ex.Message, "#4");
  1264. Assert.IsNotNull (ex.ParamName, "#5");
  1265. Assert.AreEqual ("assemblyName", ex.ParamName, "#6");
  1266. }
  1267. }
  1268. [Test] // ctor (String)
  1269. public void Constructor1_Culture ()
  1270. {
  1271. const string assemblyName = "TestAssembly";
  1272. const string assemblyCulture = "en-US";
  1273. an = new AssemblyName (assemblyName + ", Culture=" + assemblyCulture);
  1274. Assert.IsNull (an.CodeBase, "CodeBase");
  1275. Assert.AreEqual (new CultureInfo (assemblyCulture), an.CultureInfo, "CultureInfo");
  1276. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1277. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1278. Assert.AreEqual ("TestAssembly, Culture=en-US", an.FullName, "FullName");
  1279. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1280. Assert.IsNull (an.KeyPair, "KeyPair");
  1281. Assert.AreEqual (assemblyName, an.Name, "Name");
  1282. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  1283. Assert.IsNull (an.Version, "Version");
  1284. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1285. an.VersionCompatibility, "VersionCompatibility");
  1286. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1287. Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
  1288. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  1289. }
  1290. [Test] // ctor (String)
  1291. public void Constructor1_Culture_Incomplete ()
  1292. {
  1293. const string assemblyName = "TestAssembly";
  1294. try {
  1295. new AssemblyName (assemblyName + ", Culture=");
  1296. Assert.Fail ("#1");
  1297. } catch (FileLoadException ex) {
  1298. // The given assembly name or codebase was invalid
  1299. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1300. Assert.IsNull (ex.FileName, "#3");
  1301. Assert.IsNull (ex.InnerException, "#3");
  1302. Assert.IsNotNull (ex.Message, "#4");
  1303. }
  1304. }
  1305. [Test] // ctor (String)
  1306. public void Constructor1_Culture_NotSupported ()
  1307. {
  1308. const string assemblyName = "TestAssembly";
  1309. try {
  1310. new AssemblyName (assemblyName + ", Culture=aa-AA");
  1311. Assert.Fail ("#1");
  1312. #if NET_4_0
  1313. } catch (CultureNotFoundException ex) {
  1314. }
  1315. #else
  1316. } catch (ArgumentException ex) {
  1317. // Culture name 'aa-aa' is not supported
  1318. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  1319. Assert.IsNull (ex.InnerException, "#3");
  1320. Assert.IsNotNull (ex.Message, "#4");
  1321. Assert.IsNotNull (ex.ParamName, "#5");
  1322. Assert.AreEqual ("name", ex.ParamName, "#6");
  1323. }
  1324. #endif
  1325. }
  1326. [Test] // ctor (String)
  1327. [Category ("NotWorking")] // bug #351708
  1328. public void Constructor1_ProcessorArchitecture ()
  1329. {
  1330. const string assemblyName = "TestAssembly";
  1331. an = new AssemblyName (assemblyName + ", ProcessorArchitecture=X86");
  1332. Assert.IsNull (an.CodeBase, "CodeBase");
  1333. Assert.IsNull (an.CultureInfo, "CultureInfo");
  1334. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1335. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1336. Assert.AreEqual ("TestAssembly", an.FullName, "FullName");
  1337. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1338. Assert.IsNull (an.KeyPair, "KeyPair");
  1339. Assert.AreEqual (assemblyName, an.Name, "Name");
  1340. Assert.AreEqual (ProcessorArchitecture.X86, an.ProcessorArchitecture, "PA");
  1341. Assert.IsNull (an.Version, "Version");
  1342. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1343. an.VersionCompatibility, "VersionCompatibility");
  1344. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1345. Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
  1346. Assert.AreEqual ("TestAssembly", an.ToString (), "ToString");
  1347. an = new AssemblyName (assemblyName + ", ProcessorArchitecture=mSiL");
  1348. Assert.AreEqual (ProcessorArchitecture.MSIL, an.ProcessorArchitecture, "PA: MSIL");
  1349. an = new AssemblyName (assemblyName + ", ProcessorArchitecture=AmD64");
  1350. Assert.AreEqual (ProcessorArchitecture.Amd64, an.ProcessorArchitecture, "PA: Amd64");
  1351. an = new AssemblyName (assemblyName + ", ProcessorArchitecture=iA64");
  1352. Assert.AreEqual (ProcessorArchitecture.IA64, an.ProcessorArchitecture, "PA: IA64");
  1353. }
  1354. [Test] // ctor (String)
  1355. [Category ("NotWorking")] // bug #351708
  1356. public void Constructor1_ProcessorArchitecture_Incomplete ()
  1357. {
  1358. const string assemblyName = "TestAssembly";
  1359. try {
  1360. new AssemblyName (assemblyName + ", ProcessorArchitecture=");
  1361. Assert.Fail ("#1");
  1362. } catch (FileLoadException ex) {
  1363. // The given assembly name or codebase was invalid
  1364. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1365. Assert.IsNull (ex.FileName, "#3");
  1366. Assert.IsNull (ex.InnerException, "#3");
  1367. Assert.IsNotNull (ex.Message, "#4");
  1368. }
  1369. }
  1370. [Test] // ctor (String)
  1371. [Category ("NotWorking")] // bug #351708
  1372. public void Constructor1_ProcessorArchitecture_Invalid ()
  1373. {
  1374. const string assemblyName = "TestAssembly";
  1375. try {
  1376. new AssemblyName (assemblyName + ", ProcessorArchitecture=XXX");
  1377. Assert.Fail ("#A1");
  1378. } catch (FileLoadException ex) {
  1379. // The given assembly name or codebase was invalid
  1380. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
  1381. Assert.IsNull (ex.FileName, "#A3");
  1382. Assert.IsNull (ex.InnerException, "#A4");
  1383. Assert.IsNotNull (ex.Message, "#A5");
  1384. }
  1385. try {
  1386. new AssemblyName (assemblyName + ", ProcessorArchitecture=None");
  1387. Assert.Fail ("#B1");
  1388. } catch (FileLoadException ex) {
  1389. // The given assembly name or codebase was invalid
  1390. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
  1391. Assert.IsNull (ex.FileName, "#B3");
  1392. Assert.IsNull (ex.InnerException, "#B4");
  1393. Assert.IsNotNull (ex.Message, "#B5");
  1394. }
  1395. }
  1396. [Test] // ctor (String)
  1397. [Category ("NotDotNet")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
  1398. public void Constructor1_PublicKey_Mono ()
  1399. {
  1400. const string assemblyName = "TestAssembly";
  1401. an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey1));
  1402. Assert.IsNull (an.CodeBase, "CodeBase");
  1403. Assert.IsNull (an.CultureInfo, "CultureInfo");
  1404. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1405. Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "Flags");
  1406. Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "FullName");
  1407. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1408. Assert.IsNull (an.KeyPair, "KeyPair");
  1409. Assert.AreEqual (assemblyName, an.Name, "Name");
  1410. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  1411. Assert.IsNull (an.Version, "Version");
  1412. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1413. an.VersionCompatibility, "VersionCompatibility");
  1414. Assert.AreEqual (publicKey1, an.GetPublicKey (), "GetPublicKey");
  1415. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "GetPublicKeyToken");
  1416. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  1417. }
  1418. [Test]
  1419. [Category ("NotWorking")] // MS only sets the public key token not the public key: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321088
  1420. public void Constructor1_PublicKey_MS ()
  1421. {
  1422. 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");
  1439. }
  1440. [Test] // ctor (String)
  1441. [Category ("NotWorking")] // bug #351725
  1442. public void Constructor1_PublicKey_Ecma ()
  1443. {
  1444. const string assemblyName = "TestAssembly";
  1445. an = new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (publicKey3));
  1446. Assert.IsNull (an.CodeBase, "CodeBase");
  1447. Assert.IsNull (an.CultureInfo, "CultureInfo");
  1448. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1449. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1450. Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token3), an.FullName, "FullName");
  1451. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1452. Assert.IsNull (an.KeyPair, "KeyPair");
  1453. Assert.AreEqual (assemblyName, an.Name, "Name");
  1454. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  1455. Assert.IsNull (an.Version, "Version");
  1456. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1457. an.VersionCompatibility, "VersionCompatibility");
  1458. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1459. Assert.AreEqual (pk_token3, an.GetPublicKeyToken (), "GetPublicKeyToken");
  1460. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  1461. }
  1462. [Test] // ctor (String)
  1463. public void Constructor1_PublicKey_Incomplete ()
  1464. {
  1465. const string assemblyName = "TestAssembly";
  1466. try {
  1467. new AssemblyName (assemblyName + ", PublicKey=");
  1468. Assert.Fail ("#1");
  1469. } catch (FileLoadException ex) {
  1470. // The given assembly name or codebase was invalid
  1471. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1472. Assert.IsNull (ex.FileName, "#3");
  1473. Assert.IsNull (ex.InnerException, "#3");
  1474. Assert.IsNotNull (ex.Message, "#4");
  1475. }
  1476. }
  1477. [Test] // ctor (String)
  1478. public void Constructor1_PublicKey_Invalid ()
  1479. {
  1480. const string assemblyName = "TestAssembly";
  1481. try {
  1482. new AssemblyName (assemblyName + ", PublicKey=0024000004800000940000000602000000240000525341310004000011000000e39d99616f48cf7d6d59f345e485e713e89b8b1265a31b1a393e9894ee3fbddaf382dcaf4083dc31ee7a40a2a25c69c6d019fba9f37ec17fd680e4f6fe3b5305f71ae9e494e3501d92508c2e98ca1e22991a217aa8ce259c9882ffdfff4fbc6fa5e6660a8ff951cd94ed011e5633651b64e8f4522519b6ec84921ee22e4840e");
  1483. Assert.Fail ("#A1");
  1484. } catch (FileLoadException ex) {
  1485. // The given assembly name or codebase was invalid
  1486. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
  1487. Assert.IsNull (ex.FileName, "#A3");
  1488. Assert.IsNull (ex.InnerException, "#A4");
  1489. Assert.IsNotNull (ex.Message, "#A5");
  1490. }
  1491. try {
  1492. new AssemblyName (assemblyName + ", PublicKey=null");
  1493. Assert.Fail ("#B1");
  1494. } catch (FileLoadException ex) {
  1495. // The given assembly name or codebase was invalid
  1496. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
  1497. Assert.IsNull (ex.FileName, "#B3");
  1498. Assert.IsNull (ex.InnerException, "#B4");
  1499. Assert.IsNotNull (ex.Message, "#B5");
  1500. }
  1501. }
  1502. [Test] // ctor (String)
  1503. [Category ("NotWorking")] // bug #351756
  1504. public void Constructor1_PublicKey_KeyPair ()
  1505. {
  1506. const string assemblyName = "TestAssembly";
  1507. try {
  1508. new AssemblyName (assemblyName + ", PublicKey=" + GetTokenString (keyPair));
  1509. Assert.Fail ("#1");
  1510. } catch (SecurityException ex) {
  1511. // Invalid assembly public key
  1512. Assert.AreEqual (typeof (SecurityException), ex.GetType (), "#2");
  1513. Assert.AreEqual ((SecurityAction) 0, ex.Action, "#3");
  1514. Assert.IsNull (ex.InnerException, "#4");
  1515. Assert.IsNotNull (ex.Message, "#5");
  1516. }
  1517. }
  1518. [Test] // ctor (String)
  1519. public void Constructor1_PublicKeyToken ()
  1520. {
  1521. const string assemblyName = "TestAssembly";
  1522. an = new AssemblyName (assemblyName + ", PublicKeyToken=" + GetTokenString (pk_token1));
  1523. Assert.IsNull (an.CodeBase, "#A:CodeBase");
  1524. Assert.IsNull (an.CultureInfo, "#A:CultureInfo");
  1525. Assert.IsNull (an.EscapedCodeBase, "#A:EscapedCodeBase");
  1526. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#A:Flags");
  1527. Assert.AreEqual ("TestAssembly, PublicKeyToken=" + GetTokenString (pk_token1), an.FullName, "#A:FullName");
  1528. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#A:HashAlgorithm");
  1529. Assert.IsNull (an.KeyPair, "#A:KeyPair");
  1530. Assert.AreEqual (assemblyName, an.Name, "#A:Name");
  1531. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#A:PA");
  1532. Assert.IsNull (an.Version, "#A:Version");
  1533. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1534. an.VersionCompatibility, "#A:VersionCompatibility");
  1535. Assert.IsNull (an.GetPublicKey (), "#A:GetPublicKey");
  1536. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#A:GetPublicKeyToken");
  1537. Assert.AreEqual (an.FullName, an.ToString (), "#A:ToString");
  1538. an = new AssemblyName (assemblyName + ", PublicKeyToken=null");
  1539. Assert.IsNull (an.CodeBase, "#B:CodeBase");
  1540. Assert.IsNull (an.CultureInfo, "#B:CultureInfo");
  1541. Assert.IsNull (an.EscapedCodeBase, "#B:EscapedCodeBase");
  1542. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#B:Flags");
  1543. //Assert.AreEqual ("TestAssembly, PublicKeyToken=null", an.FullName, "#B:FullName");
  1544. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#B:HashAlgorithm");
  1545. Assert.IsNull (an.KeyPair, "#B:KeyPair");
  1546. Assert.AreEqual (assemblyName, an.Name, "#B:Name");
  1547. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#B:PA");
  1548. Assert.IsNull (an.Version, "#B:Version");
  1549. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1550. an.VersionCompatibility, "#B:VersionCompatibility");
  1551. Assert.IsNull (an.GetPublicKey (), "#B:GetPublicKey");
  1552. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#B:GetPublicKeyToken");
  1553. Assert.AreEqual (an.FullName, an.ToString (), "#B:ToString");
  1554. }
  1555. [Test] // ctor (String)
  1556. public void Constructor1_PublicKeyToken_Incomplete ()
  1557. {
  1558. const string assemblyName = "TestAssembly";
  1559. try {
  1560. new AssemblyName (assemblyName + ", PublicKeyToken=");
  1561. Assert.Fail ("#1");
  1562. } catch (FileLoadException ex) {
  1563. // The given assembly name or codebase was invalid
  1564. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1565. Assert.IsNull (ex.FileName, "#3");
  1566. Assert.IsNull (ex.InnerException, "#3");
  1567. Assert.IsNotNull (ex.Message, "#4");
  1568. }
  1569. }
  1570. [Test] // ctor (String)
  1571. public void Constructor1_PublicKeyToken_Invalid ()
  1572. {
  1573. const string assemblyName = "TestAssembly";
  1574. try {
  1575. new AssemblyName (assemblyName + ", PublicKeyToken=27576a8182a188");
  1576. Assert.Fail ("#1");
  1577. } catch (FileLoadException ex) {
  1578. // The given assembly name or codebase was invalid
  1579. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1580. Assert.IsNull (ex.FileName, "#3");
  1581. Assert.IsNull (ex.InnerException, "#3");
  1582. Assert.IsNotNull (ex.Message, "#4");
  1583. }
  1584. }
  1585. [Test] // ctor (String)
  1586. public void Constructor1_Retargetable ()
  1587. {
  1588. const string assemblyName = "TestAssembly";
  1589. try {
  1590. new AssemblyName (assemblyName + ", Retargetable=Yes");
  1591. Assert.Fail ("#A1");
  1592. } catch (FileLoadException ex) {
  1593. // The given assembly name or codebase was invalid
  1594. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
  1595. Assert.IsNull (ex.FileName, "#A3");
  1596. Assert.IsNull (ex.InnerException, "#A4");
  1597. Assert.IsNotNull (ex.Message, "#A5");
  1598. }
  1599. try {
  1600. new AssemblyName (assemblyName + ", Retargetable=No");
  1601. Assert.Fail ("#B1");
  1602. } catch (FileLoadException ex) {
  1603. // The given assembly name or codebase was invalid
  1604. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
  1605. Assert.IsNull (ex.FileName, "#B3");
  1606. Assert.IsNull (ex.InnerException, "#B4");
  1607. Assert.IsNotNull (ex.Message, "#B5");
  1608. }
  1609. try {
  1610. new AssemblyName (assemblyName + ", Version=1.0.0.0, Retargetable=Yes");
  1611. Assert.Fail ("#C1");
  1612. } catch (FileLoadException ex) {
  1613. // The given assembly name or codebase was invalid
  1614. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
  1615. Assert.IsNull (ex.FileName, "#C3");
  1616. Assert.IsNull (ex.InnerException, "#C4");
  1617. Assert.IsNotNull (ex.Message, "#C5");
  1618. }
  1619. try {
  1620. new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, Retargetable=Yes");
  1621. Assert.Fail ("#D1");
  1622. } catch (FileLoadException ex) {
  1623. // The given assembly name or codebase was invalid
  1624. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#D2");
  1625. Assert.IsNull (ex.FileName, "#D3");
  1626. Assert.IsNull (ex.InnerException, "#D4");
  1627. Assert.IsNotNull (ex.Message, "#D5");
  1628. }
  1629. try {
  1630. new AssemblyName (assemblyName + ", Version=1.0.0.0, PublicKeyToken=null, Retargetable=Yes");
  1631. Assert.Fail ("#E1");
  1632. } catch (FileLoadException ex) {
  1633. // The given assembly name or codebase was invalid
  1634. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#E2");
  1635. Assert.IsNull (ex.FileName, "#E3");
  1636. Assert.IsNull (ex.InnerException, "#E4");
  1637. Assert.IsNotNull (ex.Message, "#E5");
  1638. }
  1639. an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=yEs");
  1640. Assert.IsNull (an.CodeBase, "F:CodeBase");
  1641. Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#F:CultureInfo");
  1642. Assert.IsNull (an.EscapedCodeBase, "#F:EscapedCodeBase");
  1643. Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#F:Flags");
  1644. Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=Yes", an.FullName, "#F:FullName");
  1645. Assert.IsNull (an.GetPublicKey (), "#F:GetPublicKey");
  1646. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#F:GetPublicKeyToken");
  1647. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#F:HashAlgorithm");
  1648. Assert.IsNull (an.KeyPair, "#F:KeyPair");
  1649. Assert.AreEqual (assemblyName, an.Name, "#F:Name");
  1650. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#F:PA");
  1651. Assert.AreEqual (an.FullName, an.ToString (), "#F:ToString");
  1652. Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#F:Version");
  1653. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1654. an.VersionCompatibility, "#F:VersionCompatibility");
  1655. an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Retargetable=nO");
  1656. Assert.IsNull (an.CodeBase, "G:CodeBase");
  1657. Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#G:CultureInfo");
  1658. Assert.IsNull (an.EscapedCodeBase, "#G:EscapedCodeBase");
  1659. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "#G:Flags");
  1660. Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", an.FullName, "#G:FullName");
  1661. Assert.IsNull (an.GetPublicKey (), "#G:GetPublicKey");
  1662. Assert.AreEqual (new byte [0], an.GetPublicKeyToken (), "#G:GetPublicKeyToken");
  1663. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#G:HashAlgorithm");
  1664. Assert.IsNull (an.KeyPair, "#G:KeyPair");
  1665. Assert.AreEqual (assemblyName, an.Name, "#G:Name");
  1666. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#G:PA");
  1667. Assert.AreEqual (an.FullName, an.ToString (), "#G:ToString");
  1668. Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#G:Version");
  1669. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1670. an.VersionCompatibility, "#G:VersionCompatibility");
  1671. an = new AssemblyName (assemblyName + ", Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=yes");
  1672. Assert.IsNull (an.CodeBase, "H:CodeBase");
  1673. Assert.AreEqual (CultureInfo.InvariantCulture, an.CultureInfo, "#H:CultureInfo");
  1674. Assert.IsNull (an.EscapedCodeBase, "#H:EscapedCodeBase");
  1675. Assert.AreEqual (AssemblyNameFlags.Retargetable, an.Flags, "#H:Flags");
  1676. Assert.AreEqual ("TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" + GetTokenString (pk_token1) + ", Retargetable=Yes", an.FullName, "#H:FullName");
  1677. Assert.IsNull (an.GetPublicKey (), "#H:GetPublicKey");
  1678. Assert.AreEqual (pk_token1, an.GetPublicKeyToken (), "#H:GetPublicKeyToken");
  1679. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "#H:HashAlgorithm");
  1680. Assert.IsNull (an.KeyPair, "#H:KeyPair");
  1681. Assert.AreEqual (assemblyName, an.Name, "#H:Name");
  1682. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "#H:PA");
  1683. Assert.AreEqual (an.FullName, an.ToString (), "#H:ToString");
  1684. Assert.AreEqual (new Version (1, 0, 0, 0), an.Version, "#H:Version");
  1685. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1686. an.VersionCompatibility, "#H:VersionCompatibility");
  1687. }
  1688. [Test] // ctor (String)
  1689. public void Constructor1_Retargetable_Incomplete ()
  1690. {
  1691. const string assemblyName = "TestAssembly";
  1692. try {
  1693. new AssemblyName (assemblyName + ", Retargetable=");
  1694. Assert.Fail ("#1");
  1695. } catch (FileLoadException ex) {
  1696. // The given assembly name or codebase was invalid
  1697. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1698. Assert.IsNull (ex.FileName, "#3");
  1699. Assert.IsNull (ex.InnerException, "#4");
  1700. Assert.IsNotNull (ex.Message, "#5");
  1701. }
  1702. }
  1703. [Test] // ctor (String)
  1704. public void Constructor1_Retargetable_Invalid ()
  1705. {
  1706. const string assemblyName = "TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
  1707. try {
  1708. new AssemblyName (assemblyName + ", Retargetable=False");
  1709. Assert.Fail ("#A1");
  1710. } catch (FileLoadException ex) {
  1711. // The given assembly name or codebase was invalid
  1712. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#A2");
  1713. Assert.IsNull (ex.FileName, "#A3");
  1714. Assert.IsNull (ex.InnerException, "#A4");
  1715. Assert.IsNotNull (ex.Message, "#A5");
  1716. }
  1717. try {
  1718. new AssemblyName (assemblyName + ", Retargetable=1");
  1719. Assert.Fail ("#B1");
  1720. } catch (FileLoadException ex) {
  1721. // The given assembly name or codebase was invalid
  1722. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#B2");
  1723. Assert.IsNull (ex.FileName, "#B3");
  1724. Assert.IsNull (ex.InnerException, "#B4");
  1725. Assert.IsNotNull (ex.Message, "#B5");
  1726. }
  1727. try {
  1728. new AssemblyName (assemblyName + ", Retargetable=True");
  1729. Assert.Fail ("#C1");
  1730. } catch (FileLoadException ex) {
  1731. // The given assembly name or codebase was invalid
  1732. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#C2");
  1733. Assert.IsNull (ex.FileName, "#C3");
  1734. Assert.IsNull (ex.InnerException, "#C4");
  1735. Assert.IsNotNull (ex.Message, "#C5");
  1736. }
  1737. }
  1738. [Test] // ctor (String)
  1739. [Category("TargetJvmNotWorking")] // Not yet supported for TARGET_JVM.
  1740. public void Constructor1_Version ()
  1741. {
  1742. const string assemblyName = "TestAssembly";
  1743. const string assemblyVersion = "1.2.3.4";
  1744. an = new AssemblyName (assemblyName + ", Version=" + assemblyVersion);
  1745. Assert.IsNull (an.CodeBase, "CodeBase");
  1746. Assert.IsNull (an.CultureInfo, "CultureInfo");
  1747. Assert.IsNull (an.EscapedCodeBase, "EscapedCodeBase");
  1748. Assert.AreEqual (AssemblyNameFlags.None, an.Flags, "Flags");
  1749. Assert.AreEqual ("TestAssembly, Version=1.2.3.4", an.FullName, "FullName");
  1750. Assert.AreEqual (AssemblyHashAlgorithm.None, an.HashAlgorithm, "HashAlgorithm");
  1751. Assert.IsNull (an.KeyPair, "KeyPair");
  1752. Assert.AreEqual (assemblyName, an.Name, "Name");
  1753. Assert.AreEqual (ProcessorArchitecture.None, an.ProcessorArchitecture, "PA");
  1754. Assert.AreEqual (new Version (assemblyVersion), an.Version, "Version");
  1755. Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
  1756. an.VersionCompatibility, "VersionCompatibility");
  1757. Assert.IsNull (an.GetPublicKey (), "GetPublicKey");
  1758. Assert.IsNull (an.GetPublicKeyToken (), "GetPublicKeyToken");
  1759. Assert.AreEqual (an.FullName, an.ToString (), "ToString");
  1760. }
  1761. [Test] // ctor (String)
  1762. public void Constructor1_Version_Incomplete ()
  1763. {
  1764. const string assemblyName = "TestAssembly";
  1765. try {
  1766. new AssemblyName (assemblyName + ", Version=, Culture=neutral");
  1767. Assert.Fail ("#1");
  1768. } catch (FileLoadException ex) {
  1769. // The given assembly name or codebase was invalid
  1770. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1771. Assert.IsNull (ex.FileName, "#3");
  1772. Assert.IsNull (ex.InnerException, "#3");
  1773. Assert.IsNotNull (ex.Message, "#4");
  1774. }
  1775. }
  1776. [Test] // ctor (String)
  1777. public void Constructor1_Version_Invalid ()
  1778. {
  1779. const string assemblyName = "TestAssembly";
  1780. try {
  1781. new AssemblyName (assemblyName + ", Version=a.b");
  1782. Assert.Fail ("#1");
  1783. } catch (FileLoadException ex) {
  1784. // The given assembly name or codebase was invalid
  1785. Assert.AreEqual (typeof (FileLoadException), ex.GetType (), "#2");
  1786. Assert.IsNull (ex.FileName, "#3");
  1787. Assert.IsNull (ex.InnerException, "#3");
  1788. Assert.IsNotNull (ex.Message, "#4");
  1789. }
  1790. }
  1791. [Test (Description="Xamarin bug #99 - whitespaces in key=value")]
  1792. public void WhiteSpaceInKeyValue ()
  1793. {
  1794. string nameWithSpaces = String.Format ("MySql.Data.Tests, PublicKey = \t {0}, Culture =\tneutral, Version=\t1.2.3.4", GetTokenString (publicKey1));
  1795. string fullName = "MySql.Data.Tests, Version=1.2.3.4, Culture=neutral, PublicKeyToken=ce5276d8687ec6dc";
  1796. var an = new AssemblyName (nameWithSpaces);
  1797. Assert.AreEqual (fullName, an.FullName);
  1798. }
  1799. #endif
  1800. }
  1801. }