UITest.cs 53 KB

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