UITest.cs 53 KB

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