UITest.cs 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using TestStack.White;
  6. using TestStack.White.UIItems;
  7. using TestStack.White.UIItems.WindowItems;
  8. using TestStack.White.UIItems.Finders;
  9. using System.Threading;
  10. using SketchAssistantWPF;
  11. using System.Windows;
  12. using System.Diagnostics;
  13. using TestStack.White.UIItems.WindowStripControls;
  14. using TestStack.White.UIItems.MenuItems;
  15. using System.Collections.Generic;
  16. using System.Text.RegularExpressions;
  17. using WindowsInput;
  18. using WindowsInput.Native;
  19. using System.Threading.Tasks;
  20. using System.Linq;
  21. using Application = TestStack.White.Application;
  22. using Window = TestStack.White.UIItems.WindowItems.Window;
  23. namespace WhiteTests
  24. {
  25. [TestClass]
  26. public class UITest
  27. {
  28. private TestStack.White.Application application;
  29. /// <summary>
  30. /// The directory of the input files, saved for repeated use
  31. /// </summary>
  32. private String input_file_dir = null;
  33. /// <summary>
  34. /// instance of TestContext to be able to access deployed files
  35. /// </summary>
  36. private TestContext testContextInstance;
  37. /// <summary>
  38. ///Gets or sets the test context which provides
  39. ///information about and functionality for the current test run.
  40. ///</summary>
  41. public TestContext TestContext
  42. {
  43. get
  44. {
  45. return testContextInstance;
  46. }
  47. set
  48. {
  49. testContextInstance = value;
  50. }
  51. }
  52. /// <summary>
  53. /// A function that returns the path to the test_input_files folder.
  54. /// Do with it what you want.
  55. /// </summary>
  56. /// <returns>the path to the test_input_files folder</returns>
  57. public String getSketchAssistantDirectory()
  58. {
  59. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  60. Match match = rx.Match(TestContext.DeploymentDirectory);
  61. String SketchAssistDir = match.Groups[1].Value;
  62. if (input_file_dir == null)
  63. {
  64. if (Directory.Exists(SketchAssistDir + @"WhiteTests\test_input_files\"))
  65. {
  66. input_file_dir = SketchAssistDir + @"WhiteTests\test_input_files\";
  67. }
  68. else if (Directory.Exists(SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\"))
  69. {
  70. input_file_dir = SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\";
  71. }
  72. else
  73. {
  74. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  75. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  76. String ProjectsDir = match_0.Groups[1].Value;
  77. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  78. input_file_dir = dirs[0];
  79. }
  80. }
  81. return input_file_dir;
  82. }
  83. public Window setupapp()
  84. {
  85. string outputDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  86. string editedDir = outputDir.Replace("WhiteTests", "SketchAssistantWPF");
  87. string app_path = editedDir + @"\SketchAssistantWPF.exe";
  88. ProcessStartInfo processStart = new ProcessStartInfo(app_path, "-debug");
  89. application = Application.Launch(processStart);
  90. return application.GetWindow("Sketch Assistant");
  91. }
  92. [DataTestMethod]
  93. [TestCategory("FileIO")]
  94. [DataRow("line")]
  95. public void LoadSVGFileTest(String filename)
  96. {
  97. Window mainWindow = setupapp();
  98. InputSimulator inputSimulator = new InputSimulator();
  99. Thread.Sleep(20);
  100. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\whitelisted", "*.svg", SearchOption.AllDirectories);
  101. Thread.Sleep(20);
  102. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("LoadMenuButton")).Click();
  103. Thread.Sleep(20);
  104. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("SVGMenuButton")).Click();
  105. Thread.Sleep(1000);
  106. inputSimulator.Keyboard.TextEntry(getSketchAssistantDirectory() + @"whitelisted\" + filename + ".svg");
  107. Thread.Sleep(1000);
  108. inputSimulator.Keyboard.KeyPress(VirtualKeyCode.RETURN);
  109. Thread.Sleep(1000);
  110. //Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  111. mainWindow.Close();
  112. }
  113. [TestMethod]
  114. [TestCategory("DirectInput")]
  115. public void DrawLineOnCanvasTest()
  116. {
  117. Window mainWindow = setupapp();
  118. Thread.Sleep(20);
  119. InputSimulator inputSimulator = new InputSimulator();
  120. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  121. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  122. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  123. Thread.Sleep(20);
  124. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  125. Thread.Sleep(20);
  126. inputSimulator.Mouse.MoveMouseBy(100,100);
  127. inputSimulator.Mouse.LeftButtonDown();
  128. Thread.Sleep(20);
  129. inputSimulator.Mouse.MoveMouseBy(100, 100);
  130. Thread.Sleep(20);
  131. inputSimulator.Mouse.LeftButtonUp();
  132. Thread.Sleep(20);
  133. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  134. mainWindow.Close();
  135. }
  136. [TestMethod]
  137. [TestCategory("DirectInput")]
  138. public void UndoLineOnCanvasTest()
  139. {
  140. Window mainWindow = setupapp();
  141. Thread.Sleep(20);
  142. InputSimulator inputSimulator = new InputSimulator();
  143. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  144. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  145. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  146. Thread.Sleep(20);
  147. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  148. Thread.Sleep(20);
  149. inputSimulator.Mouse.MoveMouseBy(0, 200);
  150. inputSimulator.Mouse.LeftButtonDown();
  151. Thread.Sleep(20);
  152. inputSimulator.Mouse.MoveMouseBy(500, 300);
  153. Thread.Sleep(20);
  154. inputSimulator.Mouse.LeftButtonUp();
  155. Thread.Sleep(20);
  156. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  157. Thread.Sleep(20);
  158. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  159. Thread.Sleep(100);
  160. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  161. mainWindow.Close();
  162. }
  163. [TestMethod]
  164. [TestCategory("DirectInput")]
  165. public void InvalidLineTest()
  166. {
  167. Window mainWindow = setupapp();
  168. Thread.Sleep(20);
  169. InputSimulator inputSimulator = new InputSimulator();
  170. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  171. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  172. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  173. Thread.Sleep(20);
  174. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  175. Thread.Sleep(20);
  176. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DrawButton")).Click();
  177. Thread.Sleep(20);
  178. inputSimulator.Mouse.LeftButtonDown();
  179. inputSimulator.Mouse.MoveMouseBy(0, 200);
  180. Thread.Sleep(20);
  181. inputSimulator.Mouse.MoveMouseBy(500, 300);
  182. Thread.Sleep(20);
  183. inputSimulator.Mouse.LeftButtonUp();
  184. Thread.Sleep(20);
  185. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  186. Thread.Sleep(20);
  187. inputSimulator.Mouse.MoveMouseBy(-1000, 0);
  188. Thread.Sleep(20);
  189. inputSimulator.Mouse.LeftButtonDown();
  190. inputSimulator.Mouse.MoveMouseBy(1000, 0);
  191. inputSimulator.Mouse.LeftButtonUp();
  192. Thread.Sleep(20);
  193. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  194. mainWindow.Close();
  195. }
  196. [TestMethod]
  197. [TestCategory("DirectInput")]
  198. public void PointsOnCanvasSimilarityTest()
  199. {
  200. Window mainWindow = setupapp();
  201. Thread.Sleep(20);
  202. InputSimulator inputSimulator = new InputSimulator();
  203. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  204. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  205. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  206. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  207. inputSimulator.Mouse.MoveMouseBy(0, 200);
  208. inputSimulator.Mouse.LeftButtonDown();
  209. Thread.Sleep(20);
  210. inputSimulator.Mouse.LeftButtonUp();
  211. Thread.Sleep(20);
  212. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  213. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  214. Thread.Sleep(20);
  215. inputSimulator.Mouse.LeftButtonDown();
  216. Thread.Sleep(20);
  217. inputSimulator.Mouse.LeftButtonUp();
  218. Thread.Sleep(20);
  219. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  220. Assert.AreEqual("1", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  221. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  222. Thread.Sleep(20);
  223. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  224. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  225. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  226. Thread.Sleep(20);
  227. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  228. Assert.AreEqual("1", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  229. mainWindow.Close();
  230. }
  231. /*
  232. [TestMethod]
  233. [TestCategory("DebugInput")]
  234. public void CreateCanvasTest()
  235. {
  236. Window mainWindow = setupapp();
  237. Thread.Sleep(20);
  238. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  239. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  240. Thread.Sleep(20);
  241. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  242. mainWindow.Close();
  243. }
  244. [TestMethod]
  245. [TestCategory("DebugInput")]
  246. public void DrawLineTest()
  247. {
  248. Window mainWindow = setupapp();
  249. Thread.Sleep(20);
  250. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  251. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  252. Thread.Sleep(20);
  253. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  254. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  255. Thread.Sleep(20);
  256. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  257. Thread.Sleep(20);
  258. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  259. Thread.Sleep(7000);
  260. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  261. mainWindow.Close();
  262. }
  263. [TestMethod]
  264. [TestCategory("DebugInput")]
  265. public void DeleteLineTest()
  266. {
  267. Window mainWindow = setupapp();
  268. Thread.Sleep(20);
  269. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  270. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  271. Thread.Sleep(20);
  272. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  273. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DrawButton")).Click();
  274. Thread.Sleep(20);
  275. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  276. Thread.Sleep(20);
  277. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  278. Thread.Sleep(20);
  279. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  280. Thread.Sleep(7000);
  281. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  282. Thread.Sleep(20);
  283. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  284. Thread.Sleep(20);
  285. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  286. Thread.Sleep(20);
  287. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  288. Thread.Sleep(20);
  289. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  290. Thread.Sleep(7000);
  291. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  292. mainWindow.Close();
  293. }
  294. [TestMethod]
  295. [TestCategory("DebugInput")]
  296. public void UndoTest()
  297. {
  298. Window mainWindow = setupapp();
  299. Thread.Sleep(20);
  300. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  301. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  302. Thread.Sleep(20);
  303. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  304. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  305. Thread.Sleep(20);
  306. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  307. Thread.Sleep(20);
  308. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  309. Thread.Sleep(7000);
  310. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  311. Thread.Sleep(20);
  312. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  313. Thread.Sleep(20);
  314. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  315. mainWindow.Close();
  316. }
  317. [TestMethod]
  318. [TestCategory("DebugInput")]
  319. public void RedoTest()
  320. {
  321. Window mainWindow = setupapp();
  322. Thread.Sleep(20);
  323. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  324. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  325. Thread.Sleep(20);
  326. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  327. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  328. Thread.Sleep(20);
  329. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  330. Thread.Sleep(20);
  331. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  332. Thread.Sleep(7000);
  333. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  334. Thread.Sleep(20);
  335. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  336. Thread.Sleep(20);
  337. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  338. Thread.Sleep(20);
  339. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  340. Thread.Sleep(20);
  341. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  342. mainWindow.Close();
  343. }
  344. [TestMethod]
  345. [TestCategory("DebugInput")]
  346. public void DrawSeveralLinesTest()
  347. {
  348. Window mainWindow = setupapp();
  349. Thread.Sleep(20);
  350. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  351. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  352. Thread.Sleep(20);
  353. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  354. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  355. Thread.Sleep(20);
  356. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  357. Thread.Sleep(20);
  358. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  359. Thread.Sleep(7000);
  360. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  361. Thread.Sleep(20);
  362. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  363. Thread.Sleep(20);
  364. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  365. Thread.Sleep(20);
  366. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  367. Thread.Sleep(30000);
  368. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  369. Thread.Sleep(20);
  370. mainWindow.Close();
  371. }
  372. [TestMethod]
  373. [TestCategory("DebugInput")]
  374. public void DeleteSeveralLinesTest()
  375. {
  376. Window mainWindow = setupapp();
  377. Thread.Sleep(20);
  378. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  379. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  380. Thread.Sleep(20);
  381. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  382. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  383. Thread.Sleep(20);
  384. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  385. Thread.Sleep(20);
  386. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  387. Thread.Sleep(7000);
  388. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  389. Thread.Sleep(20);
  390. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  391. Thread.Sleep(20);
  392. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  393. Thread.Sleep(20);
  394. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  395. Thread.Sleep(24000);
  396. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  397. Thread.Sleep(20);
  398. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  399. Thread.Sleep(20);
  400. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  401. Thread.Sleep(20);
  402. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  403. Thread.Sleep(20);
  404. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  405. Thread.Sleep(20);
  406. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  407. Thread.Sleep(10000);
  408. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  409. mainWindow.Close();
  410. }
  411. [TestMethod]
  412. [TestCategory("DebugInput")]
  413. public void UndoSeveralLinesTest()
  414. {
  415. Window mainWindow = setupapp();
  416. Thread.Sleep(20);
  417. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  418. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  419. Thread.Sleep(20);
  420. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  421. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  422. Thread.Sleep(20);
  423. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  424. Thread.Sleep(20);
  425. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  426. Thread.Sleep(7000);
  427. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  428. Thread.Sleep(20);
  429. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  430. Thread.Sleep(20);
  431. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  432. Thread.Sleep(20);
  433. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  434. Thread.Sleep(30000);
  435. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  436. Thread.Sleep(20);
  437. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  438. Thread.Sleep(20);
  439. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  440. Thread.Sleep(20);
  441. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  442. Thread.Sleep(20);
  443. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  444. Thread.Sleep(20);
  445. mainWindow.Close();
  446. }
  447. [TestMethod]
  448. [TestCategory("DebugInput")]
  449. public void RedoSeveralLinesTest()
  450. {
  451. Window mainWindow = setupapp();
  452. Thread.Sleep(20);
  453. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  454. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  455. Thread.Sleep(20);
  456. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  457. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  458. Thread.Sleep(20);
  459. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  460. Thread.Sleep(20);
  461. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  462. Thread.Sleep(7000);
  463. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  464. Thread.Sleep(20);
  465. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  466. Thread.Sleep(20);
  467. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  468. Thread.Sleep(20);
  469. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  470. Thread.Sleep(24000);
  471. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  472. Thread.Sleep(20);
  473. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  474. Thread.Sleep(20);
  475. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  476. Thread.Sleep(20);
  477. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  478. Thread.Sleep(20);
  479. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  480. Thread.Sleep(20);
  481. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  482. Thread.Sleep(20);
  483. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  484. Thread.Sleep(20);
  485. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  486. Thread.Sleep(20);
  487. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  488. Thread.Sleep(20);
  489. mainWindow.Close();
  490. }
  491. [TestMethod]
  492. [TestCategory("DebugInput")]
  493. public void UndoAndRedoTest()
  494. {
  495. Window mainWindow = setupapp();
  496. Thread.Sleep(20);
  497. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  498. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  499. Thread.Sleep(20);
  500. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  501. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  502. Thread.Sleep(20);
  503. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  504. Thread.Sleep(20);
  505. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  506. Thread.Sleep(7000);
  507. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  508. Thread.Sleep(20);
  509. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  510. Thread.Sleep(20);
  511. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  512. Thread.Sleep(20);
  513. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  514. Thread.Sleep(24000);
  515. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  516. Thread.Sleep(20);
  517. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  518. Thread.Sleep(20);
  519. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  520. Thread.Sleep(20);
  521. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  522. Thread.Sleep(20);
  523. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  524. Thread.Sleep(20);
  525. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  526. Thread.Sleep(20);
  527. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  528. Thread.Sleep(20);
  529. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  530. Thread.Sleep(20);
  531. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  532. Thread.Sleep(20);
  533. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  534. Thread.Sleep(20);
  535. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  536. Thread.Sleep(20);
  537. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  538. Thread.Sleep(20);
  539. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  540. Thread.Sleep(7000);
  541. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  542. Thread.Sleep(20);
  543. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  544. Thread.Sleep(20);
  545. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  546. Thread.Sleep(20);
  547. mainWindow.Close();
  548. }
  549. [TestMethod]
  550. [TestCategory("DebugInput")]
  551. public void UndoAndDrawTest()
  552. {
  553. Window mainWindow = setupapp();
  554. Thread.Sleep(20);
  555. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  556. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  557. Thread.Sleep(20);
  558. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  559. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  560. Thread.Sleep(20);
  561. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  562. Thread.Sleep(20);
  563. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  564. Thread.Sleep(2000);
  565. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  566. Thread.Sleep(20);
  567. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  568. Thread.Sleep(20);
  569. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  570. Thread.Sleep(20);
  571. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  572. Thread.Sleep(20);
  573. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  574. Thread.Sleep(20);
  575. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  576. Thread.Sleep(2000);
  577. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  578. Thread.Sleep(20);
  579. mainWindow.Close();
  580. }
  581. [TestMethod]
  582. [TestCategory("DebugInput")]
  583. public void DeleteSeveralLinesAtOnceTest()
  584. {
  585. Window mainWindow = setupapp();
  586. Thread.Sleep(20);
  587. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  588. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  589. Thread.Sleep(20);
  590. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  591. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  592. Thread.Sleep(20);
  593. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  594. Thread.Sleep(20);
  595. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  596. Thread.Sleep(2000);
  597. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  598. Thread.Sleep(20);
  599. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  600. Thread.Sleep(20);
  601. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  602. Thread.Sleep(20);
  603. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  604. Thread.Sleep(2000);
  605. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  606. Thread.Sleep(20);
  607. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  608. Thread.Sleep(20);
  609. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  610. Thread.Sleep(20);
  611. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  612. Thread.Sleep(20);
  613. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  614. Thread.Sleep(2000);
  615. Assert.AreEqual("Last Action: Several Lines were deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  616. Thread.Sleep(20);
  617. mainWindow.Close();
  618. }
  619. [TestMethod]
  620. [TestCategory("DebugInput")]
  621. public void PointDrawTest()
  622. {
  623. Window mainWindow = setupapp();
  624. Thread.Sleep(20);
  625. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  626. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  627. Thread.Sleep(20);
  628. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  629. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  630. Thread.Sleep(20);
  631. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  632. Thread.Sleep(20);
  633. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  634. Thread.Sleep(4000);
  635. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  636. Thread.Sleep(20);
  637. mainWindow.Close();
  638. }
  639. [TestMethod]
  640. [TestCategory("DebugInput")]
  641. public void NewCanvasAfterDrawTest()
  642. {
  643. Window mainWindow = setupapp();
  644. Thread.Sleep(20);
  645. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  646. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  647. Thread.Sleep(20);
  648. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  649. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  650. Thread.Sleep(20);
  651. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  652. Thread.Sleep(20);
  653. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  654. Thread.Sleep(4000);
  655. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  656. Thread.Sleep(20);
  657. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  658. Thread.Sleep(20);
  659. // Click on No button in warning
  660. Window messageBox0 = mainWindow.MessageBox("Warning");
  661. messageBox0.Get<Button>(SearchCriteria.ByText("No")).Click();
  662. Thread.Sleep(20);
  663. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  664. Thread.Sleep(20);
  665. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  666. Thread.Sleep(20);
  667. // close warning
  668. Window messageBox1 = mainWindow.MessageBox("Warning");
  669. messageBox1.Close();
  670. Thread.Sleep(20);
  671. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  672. Thread.Sleep(20);
  673. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  674. Thread.Sleep(20);
  675. // click yes button on warning
  676. Window messageBox2 = mainWindow.MessageBox("Warning");
  677. messageBox2.Get<Button>(SearchCriteria.ByText("Yes")).Click();
  678. Thread.Sleep(20);
  679. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  680. Thread.Sleep(20);
  681. mainWindow.Close();
  682. }
  683. }
  684. [TestClass]
  685. public class FileImporterTests
  686. {
  687. /// <summary>
  688. /// The directory of the input files, saved for repeated use
  689. /// </summary>
  690. private String input_file_dir = null;
  691. /// <summary>
  692. /// instance of TestContext to be able to access deployed files
  693. /// </summary>
  694. private TestContext testContextInstance;
  695. /// <summary>
  696. ///Gets or sets the test context which provides
  697. ///information about and functionality for the current test run.
  698. ///</summary>
  699. public TestContext TestContext
  700. {
  701. get
  702. {
  703. return testContextInstance;
  704. }
  705. set
  706. {
  707. testContextInstance = value;
  708. }
  709. }
  710. /// <summary>
  711. /// A function that returns the path to the test_input_files folder.
  712. /// Do with it what you want.
  713. /// </summary>
  714. /// <returns>the path to the test_input_files folder</returns>
  715. public String getSketchAssistantDirectory()
  716. {
  717. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  718. Match match = rx.Match(TestContext.DeploymentDirectory);
  719. String SketchAssistDir = match.Groups[1].Value;
  720. if (input_file_dir == null)
  721. {
  722. if (Directory.Exists(SketchAssistDir + @"\WhiteTests\test_input_files\"))
  723. {
  724. input_file_dir = SketchAssistDir + @"\WhiteTests\test_input_files\";
  725. }
  726. else if (Directory.Exists(SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\"))
  727. {
  728. input_file_dir = SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\";
  729. }
  730. else
  731. {
  732. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  733. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  734. String ProjectsDir = match_0.Groups[1].Value;
  735. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  736. input_file_dir = dirs[0];
  737. }
  738. }
  739. return input_file_dir;
  740. }
  741. /// <summary>
  742. /// creates a valid .isad file from the given sets of coordinates (number divisible by 3) by creating a line for every three consecutive points, parses the file and verifies that all lines and their points have been parsed correctly
  743. /// </summary>
  744. /// <param name="xCoordinates">an array containing the x coordinates of the points that will be created (length divisible by 3)</param>
  745. /// <param name="yCoordinates">an array containing the y coordinates of the points that will be created (length divisible by 3)</param>
  746. [DataTestMethod]
  747. [TestCategory("FileIO")]
  748. [DataRow(new int[] { 54, 43, 57, 11, 145, 34, 113, 299, 0 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  749. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  750. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 54, 43, 57, 11, 145, 34, 113, 199, 0 })]
  751. public void ParseISADInputSuccessfulTest(int[] xCoordinates, int[] yCoordinates)
  752. {
  753. FileImporter uut = new FileImporter();
  754. List<String> file = new List<string>();
  755. file.Add("drawing");
  756. file.Add("300x200");
  757. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  758. {
  759. file.Add("line");
  760. file.Add(xCoordinates[i] + ";" + yCoordinates[i]);
  761. file.Add(xCoordinates[i + 1] + ";" + yCoordinates[i + 1]);
  762. file.Add(xCoordinates[i + 2] + ";" + yCoordinates[i + 2]);
  763. file.Add("endline");
  764. }
  765. file.Add("enddrawing");
  766. Tuple<int, int, List<InternalLine>> values = uut.ParseISADInputForTesting(file.ToArray());
  767. Assert.AreEqual(xCoordinates.Length / 3, values.Item3.Count);
  768. InternalLine[] lines = values.Item3.ToArray();
  769. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  770. {
  771. Point[] currentLine = lines[i / 3].GetPoints().ToArray();
  772. Assert.AreEqual(3, currentLine.Length);
  773. for (int j = 0; j < 3; j++)
  774. {
  775. Assert.IsTrue(currentLine[j].X == xCoordinates[i + j] && currentLine[j].Y == yCoordinates[i + j]);
  776. }
  777. }
  778. }
  779. /// <summary>
  780. /// parses teh given invalid .isad files and verifies that a FileImporterException is thrown, but no other exception
  781. /// </summary>
  782. /// <param name="file">the input file represented as an array of lines</param>
  783. [DataTestMethod]
  784. [TestCategory("FileIO")]
  785. [DataRow(new String[] { })]
  786. [DataRow(new String[] { "begindrawing", "300x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  787. [DataRow(new String[] { "drawing", "300;300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  788. [DataRow(new String[] { "drawing", "30.5x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  789. [DataRow(new String[] { "drawing", "line", "50;50", "100;50", "endline", "enddrawing" })]
  790. [DataRow(new String[] { "drawing", "300x300", "beginline", "50;50", "100;50", "endline", "enddrawing" })]
  791. [DataRow(new String[] { "drawing", "300x300", "line", "500;50", "100;50", "endline", "enddrawing" })]
  792. [DataRow(new String[] { "drawing", "300x300", "line", "50x50", "100;50", "endline", "enddrawing" })]
  793. [DataRow(new String[] { "drawing", "300x300", "line", "50", "100", "endline", "enddrawing" })]
  794. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "line", "endline", "enddrawing" })]
  795. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "stopline", "enddrawing" })]
  796. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "enddrawing" })]
  797. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline", "endrawing" })]
  798. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline" })]
  799. public void ParseISADInputExceptionTest(String[] file)
  800. {
  801. bool correctExceptionThrown = false;
  802. FileImporter uut = new FileImporter();
  803. try
  804. {
  805. //try to initialize the left image with an invalid isad drawing
  806. Tuple<int, int, List<InternalLine>> values1 = uut.ParseISADInputForTesting(file);
  807. }
  808. catch (FileImporterException e)
  809. {
  810. //save the occurence of an exception
  811. correctExceptionThrown = true;
  812. System.Diagnostics.Debug.WriteLine(e.ToString());
  813. }
  814. catch (Exception)
  815. {
  816. //don't set success flag
  817. }
  818. //check that an exception has been thrown
  819. Assert.IsTrue(correctExceptionThrown);
  820. }
  821. /// <summary>
  822. /// parses all whitelisted files and ensures no exceptions are thrown (parsing abortion, e.g. due to corrupted input files, are realized by throwing a FileImporterException)
  823. /// </summary>
  824. [TestMethod]
  825. [TestCategory("FileIO")]
  826. public void ParseSVGInputNoErrorForWhitelistedFilesTest()
  827. {
  828. FileImporter uut = new FileImporter();
  829. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\whitelisted", "*.svg", SearchOption.AllDirectories);
  830. Assert.IsTrue(files.Length > 0);
  831. foreach (string s in files) //parse each of the whitelisted files
  832. {
  833. Console.WriteLine(s);
  834. bool noExceptionThrown = true;
  835. try
  836. {
  837. uut.ParseSVGInputFile(s, 10000, 10000);
  838. }
  839. catch (Exception)
  840. {
  841. noExceptionThrown = false;
  842. }
  843. Assert.IsTrue(noExceptionThrown);
  844. }
  845. }
  846. /// <summary>
  847. /// parses all blacklisted files and ensures an instance of FileIporterException is thrown for each file, but no other exceptions occur
  848. /// </summary>
  849. [TestMethod]
  850. [TestCategory("FileIO")]
  851. public void ParseSVGInputNoErrorForBlacklistedFilesTest()
  852. {
  853. FileImporter uut = new FileImporter();
  854. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\blacklisted", "*.svg", SearchOption.AllDirectories);
  855. Assert.IsTrue(files.Length > 0);
  856. foreach (string s in files) //parse each of the blacklisted files
  857. {
  858. bool correctExceptionThrown = false;
  859. try
  860. {
  861. uut.ParseSVGInputFile(s, 10000, 10000);
  862. }
  863. catch (FileImporterException e)
  864. {
  865. System.Diagnostics.Debug.WriteLine(e.ToString());
  866. correctExceptionThrown = true;
  867. }
  868. catch (Exception)
  869. {
  870. }
  871. Assert.IsTrue(correctExceptionThrown);
  872. }
  873. }
  874. }
  875. [TestClass]
  876. public class SimilarityCalculationTests
  877. {
  878. /// <summary>
  879. /// The debug data element used to generate random lines.
  880. /// </summary>
  881. private DebugData DebugData = new DebugData();
  882. /// <summary>
  883. /// Generates random lines and tests how similar they are.
  884. /// To test the similarity score always stays between 0 and 1.
  885. /// </summary>
  886. [TestMethod]
  887. [TestCategory("UnitTest")]
  888. public void StaysWithinParameters()
  889. {
  890. Parallel.For(1, 100,
  891. i =>
  892. {
  893. InternalLine l0 = DebugData.GetRandomLine(1, (uint)i);
  894. InternalLine l1 = DebugData.GetRandomLine(1, (uint)i);
  895. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  896. Assert.IsTrue((sim >= 0));
  897. Assert.IsTrue((sim <= 1));
  898. });
  899. }
  900. [TestMethod]
  901. [TestCategory("UnitTest")]
  902. public void CorrectSimilarity()
  903. {
  904. Parallel.ForEach(DebugData.GetSimilarityTestData(),
  905. tup =>
  906. {
  907. InternalLine l0 = tup.Item1;
  908. InternalLine l1 = tup.Item2;
  909. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  910. Assert.AreEqual(tup.Item3, sim, 0.00000001);
  911. });
  912. }
  913. }
  914. [TestClass]
  915. public class InternalLineUnitTests
  916. {
  917. /// <summary>
  918. /// The debug data element used to generate random lines.
  919. /// </summary>
  920. private DebugData DebugData = new DebugData();
  921. [TestMethod]
  922. [TestCategory("UnitTest")]
  923. public void MakePermanentTest()
  924. {
  925. List<Point> points = new List<Point>();
  926. points.AddRange(DebugData.debugPoints4);
  927. InternalLine uut = new InternalLine(points);
  928. Assert.AreEqual(false, uut.isPoint);
  929. uut.MakePermanent(5);
  930. Assert.AreEqual(true, uut.isPoint);
  931. Assert.AreEqual(5, uut.GetID());
  932. Assert.AreEqual(0, uut.GetLength());
  933. }
  934. [DataTestMethod]
  935. [TestCategory("UnitTest")]
  936. [DataRow(new int[] { 1 ,1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, false, 2.828427125)]
  937. [DataRow(new int[] { 1, 1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, true, 2.828427125)]
  938. [DataRow(new int[] { 1, 1, 1, 4 ,3, 4 }, new int[] { 1, 1, 1, 2, 1, 3, 1, 4, 2, 4, 3, 4 }, false, 5)]
  939. [DataRow(new int[] { 1, 1, 1, 4, 3, 4 }, new int[] { 1, 1, 1, 2, 1, 3, 1, 4, 2, 4, 3, 4 }, true, 5)]
  940. public void PermanentLineTest(int[] inPoints, int[] outPoints, bool isTemp, double len)
  941. {
  942. List<Point> inLine = new List<Point>(); List<Point> outLine = new List<Point>();
  943. for (int i = 0; i < inPoints.Length;i += 2) inLine.Add(new Point(inPoints[i], inPoints[i + 1]));
  944. for (int i = 0; i < outPoints.Length; i += 2) outLine.Add(new Point(outPoints[i], outPoints[i + 1]));
  945. InternalLine uut;
  946. if (isTemp)
  947. {
  948. uut = new InternalLine(inLine);
  949. var zip = inLine.Zip(uut.GetPoints(), (a,b) => new Tuple<Point, Point>(a, b));
  950. foreach (Tuple < Point, Point> tup in zip)
  951. {
  952. Assert.AreEqual(tup.Item1, tup.Item2);
  953. }
  954. }
  955. else
  956. {
  957. uut = new InternalLine(inLine,0);
  958. var zip = outLine.Zip(uut.GetPoints(), (a, b) => new Tuple<Point, Point>(a, b));
  959. foreach (Tuple<Point, Point> tup in zip)
  960. {
  961. Assert.AreEqual(tup.Item1, tup.Item2);
  962. }
  963. }
  964. Assert.AreEqual(len, uut.GetLength(), 0.000001);
  965. }*/
  966. }
  967. }