UITest.cs 53 KB

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