CodeGeneratorFromExpressionTest.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. //
  2. // Microsoft.VisualBasic.* Test Cases
  3. //
  4. // Authors:
  5. // Gert Driesen ([email protected])
  6. //
  7. // (c) 2005 Novell
  8. //
  9. using System;
  10. using System.IO;
  11. using System.Text;
  12. using System.CodeDom;
  13. using System.CodeDom.Compiler;
  14. using Microsoft.VisualBasic;
  15. using NUnit.Framework;
  16. namespace MonoTests.Microsoft.VisualBasic
  17. {
  18. [TestFixture]
  19. public class CodeGeneratorFromExpressionTest
  20. {
  21. VBCodeProvider provider;
  22. ICodeGenerator generator;
  23. CodeGeneratorOptions options;
  24. [SetUp]
  25. public void SetUp ()
  26. {
  27. provider = new VBCodeProvider ();
  28. generator = provider.CreateGenerator ();
  29. options = new CodeGeneratorOptions ();
  30. }
  31. [Test]
  32. [ExpectedException (typeof (ArgumentException))]
  33. public void DefaultExpressionTest ()
  34. {
  35. using (StringWriter sw = new StringWriter ()) {
  36. Generate(new CodeExpression (), sw);
  37. sw.Close ();
  38. }
  39. }
  40. [Test]
  41. [ExpectedException (typeof (ArgumentNullException))]
  42. public void NullExpressionTest ()
  43. {
  44. using (StringWriter sw = new StringWriter ()) {
  45. Generate (null, sw);
  46. }
  47. }
  48. [Test]
  49. public void TypeReferenceExpressionTest ()
  50. {
  51. StringBuilder sb = new StringBuilder();
  52. using (StringWriter sw = new StringWriter (sb)) {
  53. Assert.AreEqual ("Boolean", Generate (new CodeTypeReferenceExpression (typeof (bool)), sw), "#1");
  54. sb.Length = 0;
  55. Assert.AreEqual ("Byte", Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#2");
  56. sb.Length = 0;
  57. Assert.AreEqual ("Char", Generate (new CodeTypeReferenceExpression (typeof (char)), sw), "#3");
  58. sb.Length = 0;
  59. Assert.AreEqual ("Date", Generate (new CodeTypeReferenceExpression (typeof (DateTime)), sw), "#4");
  60. sb.Length = 0;
  61. Assert.AreEqual ("Decimal", Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#5");
  62. sb.Length = 0;
  63. Assert.AreEqual ("Double", Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#6");
  64. sb.Length = 0;
  65. Assert.AreEqual ("Short", Generate (new CodeTypeReferenceExpression (typeof (short)), sw), "#7");
  66. sb.Length = 0;
  67. Assert.AreEqual ("Integer", Generate (new CodeTypeReferenceExpression (typeof (int)), sw), "#8");
  68. sb.Length = 0;
  69. Assert.AreEqual ("Long", Generate (new CodeTypeReferenceExpression (typeof (long)), sw), "#9");
  70. sb.Length = 0;
  71. Assert.AreEqual ("Single", Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#10");
  72. sb.Length = 0;
  73. Assert.AreEqual ("Object", Generate (new CodeTypeReferenceExpression (typeof (object)), sw), "#11");
  74. sb.Length = 0;
  75. Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression (typeof (void)), sw), "#12");
  76. sb.Length = 0;
  77. Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression ((string) null), sw), "#13");
  78. sb.Length = 0;
  79. Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression (""), sw), "#14");
  80. sb.Length = 0;
  81. #if NET_2_0
  82. Assert.AreEqual ("SByte", Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#15");
  83. sb.Length = 0;
  84. Assert.AreEqual ("UShort", Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#16");
  85. sb.Length = 0;
  86. Assert.AreEqual ("UInteger", Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#17");
  87. sb.Length = 0;
  88. Assert.AreEqual ("ULong", Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#18");
  89. sb.Length = 0;
  90. #else
  91. Assert.AreEqual (typeof (sbyte).FullName, Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#19");
  92. sb.Length = 0;
  93. Assert.AreEqual (typeof(ushort).FullName, Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#20");
  94. sb.Length = 0;
  95. Assert.AreEqual (typeof(uint).FullName, Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#21");
  96. sb.Length = 0;
  97. Assert.AreEqual (typeof(ulong).FullName, Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#22");
  98. sb.Length = 0;
  99. #endif
  100. sw.Close ();
  101. }
  102. }
  103. [Test]
  104. public void PrimitiveExpressionTest ()
  105. {
  106. StringBuilder sb = new StringBuilder ();
  107. using (StringWriter sw = new StringWriter (sb)) {
  108. Assert.AreEqual ("Nothing", Generate (new CodePrimitiveExpression (null), sw), "#1");
  109. sb.Length = 0;
  110. Assert.AreEqual ("\"AB\"\"C\"", Generate (new CodePrimitiveExpression ("AB\"C"), sw), "#2");
  111. sb.Length = 0;
  112. Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((byte) 5), sw), "#4");
  113. sb.Length = 0;
  114. Assert.AreEqual ("20", Generate (new CodePrimitiveExpression ((short) 20), sw), "#5");
  115. sb.Length = 0;
  116. Assert.AreEqual ("243", Generate (new CodePrimitiveExpression (243), sw), "#6");
  117. sb.Length = 0;
  118. Assert.AreEqual ("434343", Generate (new CodePrimitiveExpression ((long) 434343), sw), "#7");
  119. sb.Length = 0;
  120. Assert.AreEqual ("6.445!", Generate (new CodePrimitiveExpression ((float) 6.445), sw), "#8");
  121. sb.Length = 0;
  122. Assert.AreEqual ("5.76", Generate (new CodePrimitiveExpression ((double) 5.76), sw), "#9");
  123. sb.Length = 0;
  124. Assert.AreEqual ("7.667", Generate (new CodePrimitiveExpression ((decimal) 7.667), sw), "#10");
  125. sb.Length = 0;
  126. Assert.AreEqual ("true", Generate (new CodePrimitiveExpression (true), sw), "#11");
  127. sb.Length = 0;
  128. Assert.AreEqual ("false", Generate (new CodePrimitiveExpression (false), sw), "#12");
  129. sw.Close ();
  130. }
  131. }
  132. [Test]
  133. public void PrimitiveExpressionTest_Char ()
  134. {
  135. #if NET_2_0
  136. string vbNs = "Global.Microsoft.VisualBasic";
  137. #else
  138. string vbNs = "Microsoft.VisualBasic";
  139. #endif
  140. StringBuilder sb = new StringBuilder ();
  141. using (StringWriter sw = new StringWriter (sb)) {
  142. Assert.AreEqual (vbNs + ".ChrW(0)", Generate (new CodePrimitiveExpression ('\0'), sw), "#0");
  143. sb.Length = 0;
  144. Assert.AreEqual (vbNs + ".ChrW(1)", Generate (new CodePrimitiveExpression ('\x01'), sw), "#1");
  145. sb.Length = 0;
  146. Assert.AreEqual (vbNs + ".ChrW(2)", Generate (new CodePrimitiveExpression ('\x02'), sw), "#2");
  147. sb.Length = 0;
  148. Assert.AreEqual (vbNs + ".ChrW(3)", Generate (new CodePrimitiveExpression ('\x03'), sw), "#3");
  149. sb.Length = 0;
  150. Assert.AreEqual (vbNs + ".ChrW(4)", Generate (new CodePrimitiveExpression ('\x04'), sw), "#4");
  151. sb.Length = 0;
  152. Assert.AreEqual (vbNs + ".ChrW(5)", Generate (new CodePrimitiveExpression ('\x05'), sw), "#5");
  153. sb.Length = 0;
  154. Assert.AreEqual (vbNs + ".ChrW(6)", Generate (new CodePrimitiveExpression ('\x06'), sw), "#6");
  155. sb.Length = 0;
  156. Assert.AreEqual (vbNs + ".ChrW(7)", Generate (new CodePrimitiveExpression ('\a'), sw), "#7");
  157. sb.Length = 0;
  158. Assert.AreEqual (vbNs + ".ChrW(8)", Generate (new CodePrimitiveExpression ('\b'), sw), "#8");
  159. sb.Length = 0;
  160. Assert.AreEqual (vbNs + ".ChrW(9)", Generate (new CodePrimitiveExpression ('\t'), sw), "#9");
  161. sb.Length = 0;
  162. Assert.AreEqual (vbNs + ".ChrW(10)", Generate (new CodePrimitiveExpression ('\n'), sw), "#10");
  163. sb.Length = 0;
  164. Assert.AreEqual (vbNs + ".ChrW(11)", Generate (new CodePrimitiveExpression ('\v'), sw), "#11");
  165. sb.Length = 0;
  166. Assert.AreEqual (vbNs + ".ChrW(12)", Generate (new CodePrimitiveExpression ('\f'), sw), "#12");
  167. sb.Length = 0;
  168. Assert.AreEqual (vbNs + ".ChrW(13)", Generate (new CodePrimitiveExpression ('\r'), sw), "#13");
  169. sb.Length = 0;
  170. Assert.AreEqual (vbNs + ".ChrW(14)", Generate (new CodePrimitiveExpression ('\x0E'), sw), "#14");
  171. sb.Length = 0;
  172. Assert.AreEqual (vbNs + ".ChrW(15)", Generate (new CodePrimitiveExpression ('\x0F'), sw), "#15");
  173. sb.Length = 0;
  174. Assert.AreEqual (vbNs + ".ChrW(16)", Generate (new CodePrimitiveExpression ('\x10'), sw), "#16");
  175. sb.Length = 0;
  176. Assert.AreEqual (vbNs + ".ChrW(17)", Generate (new CodePrimitiveExpression ('\x11'), sw), "#17");
  177. sb.Length = 0;
  178. Assert.AreEqual (vbNs + ".ChrW(18)", Generate (new CodePrimitiveExpression ('\x12'), sw), "#18");
  179. sb.Length = 0;
  180. Assert.AreEqual (vbNs + ".ChrW(19)", Generate (new CodePrimitiveExpression ('\x13'), sw), "#19");
  181. sb.Length = 0;
  182. Assert.AreEqual (vbNs + ".ChrW(20)", Generate (new CodePrimitiveExpression ('\x14'), sw), "#20");
  183. sb.Length = 0;
  184. Assert.AreEqual (vbNs + ".ChrW(21)", Generate (new CodePrimitiveExpression ('\x15'), sw), "#21");
  185. sb.Length = 0;
  186. Assert.AreEqual (vbNs + ".ChrW(22)", Generate (new CodePrimitiveExpression ('\x16'), sw), "#22");
  187. sb.Length = 0;
  188. Assert.AreEqual (vbNs + ".ChrW(23)", Generate (new CodePrimitiveExpression ('\x17'), sw), "#23");
  189. sb.Length = 0;
  190. Assert.AreEqual (vbNs + ".ChrW(24)", Generate (new CodePrimitiveExpression ('\x18'), sw), "#24");
  191. sb.Length = 0;
  192. Assert.AreEqual (vbNs + ".ChrW(25)", Generate (new CodePrimitiveExpression ('\x19'), sw), "#25");
  193. sb.Length = 0;
  194. Assert.AreEqual (vbNs + ".ChrW(26)", Generate (new CodePrimitiveExpression ('\x1A'), sw), "#26");
  195. sb.Length = 0;
  196. Assert.AreEqual (vbNs + ".ChrW(27)", Generate (new CodePrimitiveExpression ('\x1B'), sw), "#27");
  197. sb.Length = 0;
  198. Assert.AreEqual (vbNs + ".ChrW(28)", Generate (new CodePrimitiveExpression ('\x1C'), sw), "#28");
  199. sb.Length = 0;
  200. Assert.AreEqual (vbNs + ".ChrW(29)", Generate (new CodePrimitiveExpression ('\x1D'), sw), "#29");
  201. sb.Length = 0;
  202. Assert.AreEqual (vbNs + ".ChrW(30)", Generate (new CodePrimitiveExpression ('\x1E'), sw), "#30");
  203. sb.Length = 0;
  204. Assert.AreEqual (vbNs + ".ChrW(31)", Generate (new CodePrimitiveExpression ('\x1F'), sw), "#31");
  205. sb.Length = 0;
  206. Assert.AreEqual (vbNs + ".ChrW(32)", Generate (new CodePrimitiveExpression ('\x20'), sw), "#32");
  207. sb.Length = 0;
  208. Assert.AreEqual (vbNs + ".ChrW(33)", Generate (new CodePrimitiveExpression ('\x21'), sw), "#33");
  209. sb.Length = 0;
  210. Assert.AreEqual (vbNs + ".ChrW(34)", Generate (new CodePrimitiveExpression ('"'), sw), "#34");
  211. sb.Length = 0;
  212. Assert.AreEqual (vbNs + ".ChrW(35)", Generate (new CodePrimitiveExpression ('\x23'), sw), "#35");
  213. sb.Length = 0;
  214. Assert.AreEqual (vbNs + ".ChrW(36)", Generate (new CodePrimitiveExpression ('\x24'), sw), "#36");
  215. sb.Length = 0;
  216. Assert.AreEqual (vbNs + ".ChrW(37)", Generate (new CodePrimitiveExpression ('\x25'), sw), "#37");
  217. sb.Length = 0;
  218. Assert.AreEqual (vbNs + ".ChrW(38)", Generate (new CodePrimitiveExpression ('\x26'), sw), "#38");
  219. sb.Length = 0;
  220. Assert.AreEqual (vbNs + ".ChrW(39)", Generate (new CodePrimitiveExpression ('\''), sw), "#39");
  221. sb.Length = 0;
  222. Assert.AreEqual (vbNs + ".ChrW(8232)", Generate (new CodePrimitiveExpression ('\u2028'), sw), "#40");
  223. sb.Length = 0;
  224. Assert.AreEqual (vbNs + ".ChrW(8233)", Generate (new CodePrimitiveExpression ('\u2029'), sw), "#41");
  225. sb.Length = 0;
  226. Assert.AreEqual (vbNs + ".ChrW(8240)", Generate (new CodePrimitiveExpression ('\u2030'), sw), "#42");
  227. sw.Close ();
  228. }
  229. }
  230. [Test]
  231. #if ONLY_1_1
  232. [ExpectedException (typeof (ArgumentException))]
  233. #endif
  234. public void PrimitiveExpressionTest_SByte ()
  235. {
  236. StringBuilder sb = new StringBuilder ();
  237. using (StringWriter sw = new StringWriter (sb)) {
  238. Assert.AreEqual ("CSByte(5)", Generate (new CodePrimitiveExpression ((sbyte) 5), sw));
  239. sw.Close ();
  240. }
  241. }
  242. [Test]
  243. #if ONLY_1_1
  244. [ExpectedException (typeof (ArgumentException))]
  245. #endif
  246. public void PrimitiveExpressionTest_UInt16 ()
  247. {
  248. StringBuilder sb = new StringBuilder ();
  249. using (StringWriter sw = new StringWriter (sb)) {
  250. Assert.AreEqual ("5US", Generate (new CodePrimitiveExpression ((ushort) 5), sw));
  251. sw.Close ();
  252. }
  253. }
  254. [Test]
  255. #if ONLY_1_1
  256. [ExpectedException (typeof (ArgumentException))]
  257. #endif
  258. public void PrimitiveExpressionTest_UInt32 ()
  259. {
  260. StringBuilder sb = new StringBuilder ();
  261. using (StringWriter sw = new StringWriter (sb)) {
  262. Assert.AreEqual ("5UI", Generate (new CodePrimitiveExpression ((uint) 5), sw));
  263. sw.Close ();
  264. }
  265. }
  266. [Test]
  267. #if ONLY_1_1
  268. [ExpectedException (typeof (ArgumentException))]
  269. #endif
  270. public void PrimitiveExpressionTest_UInt64 ()
  271. {
  272. StringBuilder sb = new StringBuilder ();
  273. using (StringWriter sw = new StringWriter (sb)) {
  274. Assert.AreEqual ("5UL", Generate (new CodePrimitiveExpression ((ulong) 5), sw));
  275. sw.Close ();
  276. }
  277. }
  278. [Test]
  279. public void ParameterDeclarationExpressionTest ()
  280. {
  281. CodeParameterDeclarationExpression cpde = null;
  282. StringBuilder sb = new StringBuilder();
  283. using (StringWriter sw = new StringWriter (sb)) {
  284. cpde = new CodeParameterDeclarationExpression ();
  285. #if NET_2_0
  286. Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#1");
  287. #else
  288. Assert.AreEqual ("ByVal As System.Void", Generate (cpde, sw), "#1");
  289. #endif
  290. sb.Length = 0;
  291. cpde = new CodeParameterDeclarationExpression ((string) null,
  292. (string) null);
  293. #if NET_2_0
  294. Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#2");
  295. #else
  296. Assert.AreEqual ("ByVal As System.Void", Generate (cpde, sw), "#2");
  297. #endif
  298. sb.Length = 0;
  299. cpde = new CodeParameterDeclarationExpression ("A", (string) null);
  300. #if NET_2_0
  301. Assert.AreEqual ("ByVal __exception As A", Generate (cpde, sw), "#3");
  302. #else
  303. Assert.AreEqual ("ByVal As A", Generate (cpde, sw), "#3");
  304. #endif
  305. sb.Length = 0;
  306. cpde = new CodeParameterDeclarationExpression ((string) null, "B");
  307. Assert.AreEqual ("ByVal B As System.Void", Generate (cpde, sw), "#4");
  308. sb.Length = 0;
  309. cpde = new CodeParameterDeclarationExpression ("A", "B");
  310. Assert.AreEqual ("ByVal B As A", Generate (cpde, sw), "#5");
  311. sb.Length = 0;
  312. cpde.Direction = FieldDirection.Out;
  313. Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#6");
  314. sb.Length = 0;
  315. cpde.Direction = FieldDirection.Ref;
  316. Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#7");
  317. sb.Length = 0;
  318. }
  319. }
  320. private string Generate (CodeExpression expression, StringWriter sw)
  321. {
  322. generator.GenerateCodeFromExpression (expression, sw, options);
  323. return sw.ToString ();
  324. }
  325. }
  326. }