Advertisement
Guest User

Untitled

a guest
Jul 21st, 2016
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.IO;
  7. using System.Xml;
  8. using NUnit.Framework;
  9. using TemplateEngine;
  10.  
  11. namespace TemplateTests
  12. {
  13. [TestFixture]
  14. public class ParseTest
  15. {
  16. string testSnippet;
  17. List<Tuple<TokenType, string>> chunksExpected;
  18.  
  19. [Test]
  20. public void AllInclusive()
  21. {
  22. testSnippet = "text0<%code0\n%>text1<%=expr\n%>\n<%code1%><%%>text5";
  23. chunksExpected = new List<Tuple<TokenType, string>>
  24. {
  25. new Tuple<TokenType, string>(TokenType.Text, "text0"),
  26. new Tuple<TokenType, string>(TokenType.Code, "code0\n"),
  27. new Tuple<TokenType, string>(TokenType.Text, "text1"),
  28. new Tuple<TokenType, string>(TokenType.Eval, "expr\n"),
  29. new Tuple<TokenType, string>(TokenType.Text, @"\n"),
  30. new Tuple<TokenType, string>(TokenType.Code, "code1"),
  31. new Tuple<TokenType, string>(TokenType.Text, "text5"),
  32. };
  33. Assert.AreEqual(chunksExpected, new Parser(testSnippet).Parse());
  34. }
  35.  
  36. [Test]
  37. public void CodeOnly()
  38. {
  39. testSnippet = "<%code0%><%%><%code1%>";
  40. chunksExpected = new List<Tuple<TokenType, string>>
  41. {
  42. new Tuple<TokenType, string>(TokenType.Code, "code0"),
  43. new Tuple<TokenType, string>(TokenType.Code, "code1")
  44. };
  45. Assert.AreEqual(chunksExpected, new Parser(testSnippet).Parse());
  46. }
  47.  
  48. [Test]
  49. public void TextOnly()
  50. {
  51. testSnippet = "text1text2";
  52. chunksExpected = new List<Tuple<TokenType, string>>
  53. {
  54. new Tuple<TokenType, string>(TokenType.Text, "text1text2")
  55. };
  56. Assert.AreEqual(chunksExpected, new Parser(testSnippet).Parse());
  57. }
  58.  
  59. [Test]
  60. public void EvalOnly()
  61. {
  62. testSnippet = "<%=expr%>";
  63. chunksExpected = new List<Tuple<TokenType, string>>
  64. {
  65. new Tuple<TokenType, string>(TokenType.Eval, "expr")
  66. };
  67. Assert.AreEqual(chunksExpected, new Parser(testSnippet).Parse());
  68. }
  69.  
  70. [Test]
  71. public void CodeEmpty()
  72. {
  73. testSnippet = "<%%>";
  74.  
  75. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  76.  
  77. }
  78.  
  79. [Test]
  80. public void EvalEmpty()
  81. {
  82. testSnippet = "<%=%>";
  83. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  84.  
  85. }
  86.  
  87. [Test]
  88. public void Nothing()
  89. {
  90. testSnippet = "";
  91. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  92.  
  93. }
  94.  
  95. [Test]
  96. public void UnopenedBracket()
  97. {
  98. testSnippet = @"for (int i = 0%><%; i < 9; i++) %>6";
  99. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  100.  
  101. }
  102.  
  103. [Test]
  104. public void UnclosedBracket()
  105. {
  106. testSnippet = @"<%for (int i = 0%><%; i < 9; i++) 6";
  107. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  108.  
  109. }
  110.  
  111. [Test]
  112. public void NestedBrackets()
  113. {
  114. testSnippet = @"<%for <%(int i%> = 0%><%; i < 9; i++)%> 6";
  115. Assert.That(() => new Parser(testSnippet).Parse(), Throws.TypeOf<TemplateFormatException>());
  116.  
  117. }
  118.  
  119. [Test]
  120. public void SpecialCharacters()
  121. {
  122. testSnippet = "\n<%%>\t<%%>\"<%%>\'<%\0%>";
  123. chunksExpected = new List<Tuple<TokenType, string>>
  124. {
  125. new Tuple<TokenType, string>(TokenType.Text, @"\n"),
  126. new Tuple<TokenType, string>(TokenType.Text, @"\t"),
  127. new Tuple<TokenType, string>(TokenType.Text, @"\"""),
  128. new Tuple<TokenType, string>(TokenType.Text, @"\'"),
  129. new Tuple<TokenType, string>(TokenType.Code, "\0"),
  130. };
  131. Assert.AreEqual(chunksExpected, new Parser(testSnippet).Parse());
  132. }
  133. }
  134.  
  135. [TestFixture]
  136. public class CodeComposerTest
  137. {
  138. string testSnippet;
  139. string expectedCode;
  140. List<Tuple<TokenType,string>> chunks;
  141. string actualCode;
  142.  
  143. [Test]
  144. public void CSharpComposer()
  145. {
  146. testSnippet = "<%=5+5%>lol<%int (i = 0; i < 5; i++) %>*";
  147. expectedCode = "using System;\n\n" + "using System.IO;\n\n" +
  148. "class CSharpTemplate\n{\n" +
  149. "public static TextWriter method(string json)\n{\n" +
  150. "StringWriter output = new StringWriter();\n" +
  151. "output.Write((5+5).ToString());\n" +
  152. "output.Write(\"lol\");\n" +
  153. "int (i = 0; i < 5; i++) output.Write(\"*\");\n" +
  154. "return output;\n}\n}";
  155. chunks = new Parser(testSnippet).Parse();
  156. actualCode = new CSharp().ComposeCode(chunks);
  157. Assert.AreEqual(expectedCode, actualCode);
  158. }
  159.  
  160. [Test]
  161. public void CSharpComposerExtraNamespace()
  162. {
  163. testSnippet = "<%=5+5%>lol<%for (int i = 0; i < 5; i++) %>*" +
  164. "<%var blah = new List<int>();%>";
  165. string[] namespaces = { "System.Collections.Generic" };
  166. expectedCode = "using System;\n\n" + "using System.IO;\n\n" +
  167. "using System.Collections.Generic;\n" +
  168. "class CSharpTemplate\n{\n" +
  169. "public static TextWriter method(string json)\n{\n" +
  170. "StringWriter output = new StringWriter();\n" +
  171. "output.Write((5+5).ToString());\n" +
  172. "output.Write(\"lol\");\n" +
  173. "for (int i = 0; i < 5; i++) output.Write(\"*\");\n" +
  174. "var blah = new List<int>();" +
  175. "return output;\n}\n}";
  176. chunks = new Parser(testSnippet).Parse();
  177. var lang = new CSharp();
  178. lang.AddExtras(null, namespaces, null);
  179. actualCode = lang.ComposeCode(chunks);
  180. Assert.AreEqual(expectedCode, actualCode);
  181. }
  182.  
  183. [Test]
  184. public void RubyComposer()
  185. {
  186. testSnippet = "<%5.times { %>lol<% }%>";
  187. expectedCode = "5.times { print \"lol\"; }";
  188. chunks = new Parser(testSnippet).Parse();
  189. actualCode = new Ruby().ComposeCode(chunks);
  190. Assert.AreEqual(expectedCode, actualCode);
  191. }
  192.  
  193. [Test]
  194. public void JavaComposer()
  195. {
  196. testSnippet = "<%for (int i = 0%><%; i < 9; i++) %>6\"";
  197. expectedCode = "class JavaTemplate\n{\n" +
  198. "public static void main(String[] args)\n{\n" +
  199. "for (int i = 0; i < 9; i++) " +
  200. "System.out.print(\"6\\\"\");" +
  201. "\n}\n}";
  202. chunks = new Parser(testSnippet).Parse();
  203. actualCode = new Java7().ComposeCode(chunks);
  204. Assert.AreEqual(expectedCode, actualCode);
  205. }
  206.  
  207. [Test]
  208. public void PythonComposer()
  209. {
  210. testSnippet = "<%for i in %><%['dem', 'snakes']:\n\tprint(i)\n%>over<%=9*(10**3)%>";
  211. expectedCode = "for i in ['dem', 'snakes']:\n\tprint(i)\n" +
  212. "print(\"over\", end='');print(9*(10**3), end='');";
  213. chunks = new Parser(testSnippet).Parse();
  214. actualCode = new Python3().ComposeCode(chunks);
  215. Assert.AreEqual(expectedCode, actualCode);
  216. }
  217. }
  218.  
  219. [TestFixture]
  220. public class IdeoneTest
  221. {
  222. IdeoneJob testJob;
  223. string code;
  224. string expectedOutput;
  225.  
  226. [SetUp]
  227. public void IdeoneInit()
  228. {
  229. IdeoneJob.Authorize("mikeroll", "lucky_starfish");
  230. }
  231.  
  232. [Test]
  233. public void ServiceAccessTest()
  234. {
  235. testJob = new IdeoneJob(null, 0);
  236. Assert.AreEqual("OK", testJob.TestAccess());
  237. }
  238.  
  239. [Test]
  240. public void ExecuteRuby()
  241. {
  242. code = @"print 'chunky bacon!'";
  243. testJob = new IdeoneJob(code, 17);
  244. testJob.Execute();
  245. expectedOutput = "chunky bacon!";
  246. Assert.AreEqual(expectedOutput, testJob.Output);
  247. }
  248.  
  249. [Test]
  250. public void ExecutePython3()
  251. {
  252. code = @"print(""Tabs\n\tare\n\t\tbetter\n\t\t\tthan\n\t\t\t\tspaces!"")";
  253. testJob = new IdeoneJob(code, 116);
  254. testJob.Execute();
  255. expectedOutput = "Tabs\n\tare\n\t\tbetter\n\t\t\tthan\n\t\t\t\tspaces!\n";
  256. Assert.AreEqual(expectedOutput, testJob.Output);
  257. }
  258.  
  259. [Test]
  260. public void ExecuteJava7()
  261. {
  262. code = "class Example\n{\n\t" +
  263. "public static void main(String[] args)\n\t{\n\t\t" +
  264. "System.out.println(\"Looooool\");\n\t}\n}\n";
  265. testJob = new IdeoneJob(code, 55);
  266. testJob.Execute();
  267. expectedOutput = "Looooool\n";
  268. Assert.AreEqual(expectedOutput, testJob.Output);
  269. }
  270.  
  271. [Test]
  272. public void BadCode()
  273. {
  274. code = "(siht_cOde]";
  275. testJob = new IdeoneJob(code, 55);
  276. Assert.That(() =>testJob.Execute(), Throws.TypeOf<BadCodeException>());
  277.  
  278. }
  279. }
  280.  
  281. [TestFixture]
  282. public class AcceptanceTests
  283. {
  284. string testSnippet;
  285. string expectedOutput;
  286. const string username = "mikeroll";
  287. const string apiPassword = "lucky_starfish";
  288. TextWriter output;
  289.  
  290. [SetUp]
  291. public void IdeoneInit()
  292. {
  293. IdeoneJob.Authorize(username, apiPassword);
  294. output = new StringWriter();
  295. }
  296.  
  297. [Test]
  298. public void CSharpAllInclusive()
  299. {
  300. testSnippet = "<%=-15+5%>lol<%for (int i = 0; i < 5; i++) %>*" +
  301. "<%new List<string>(); output.Write(42); %>";
  302. string[] assemblies = { "Newtonsoft.Json.dll" };
  303. string[] namespaces = { "System.Collections.Generic", "Newtonsoft.Json" };
  304. string json = null;
  305. expectedOutput = "-10lol*****42";
  306. var tw = new StringWriter();
  307. new Template(testSnippet, new CSharp(), assemblies, namespaces, json).Render(tw);
  308. Assert.AreEqual(expectedOutput, tw.ToString());
  309. }
  310.  
  311. [Test]
  312. //[Ignore("Works for now")]
  313. public void JavaAllInclusive()
  314. {
  315. testSnippet = @"""lol""<%for (int i = 0%><%; i < 9; i++) %>6<%=666*2%>";
  316. expectedOutput = @"""lol""6666666661332";
  317. new Template(testSnippet, new Java7()).Render(output);
  318. Assert.AreEqual(expectedOutput, output.ToString());
  319. }
  320.  
  321. [Test]
  322. //[Ignore("Works for now")]
  323. public void RubyAllInclusive()
  324. {
  325. testSnippet =
  326. @"<html>
  327. <% 2.times {%> chunky bacon! <%} %>
  328. </html>";
  329. expectedOutput =
  330. @"<html>
  331. chunky bacon! chunky bacon!
  332. </html>";
  333. new Template(testSnippet, new Ruby()).Render(output);
  334. Assert.AreEqual(expectedOutput, output.ToString());
  335. }
  336.  
  337. [Test]
  338. //[Ignore("Works for now")]
  339. public void PythonAllInclusive()
  340. {
  341. testSnippet = "<%for i in %><%['dem', '\"snakes\"']:\n\tprint(i)\n%>over<%=9*(10**3)%>";
  342. expectedOutput = "dem\n\"snakes\"\nover9000";
  343. new Template(testSnippet, new Python3()).Render(output);
  344. Assert.AreEqual(expectedOutput, output.ToString());
  345. }
  346. }
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement